
Les tests
Objectif â> Ă©viter les bugs
Mais comment faire ? MaĂźtriser les processus dâingĂ©nierie du logiciel :
- analyser et concevoir correctement le projet en amont
- mettre en place de bonnes mĂ©thodes de travail et dâorganisation
- coder dans de bonnes conditions
- tester
La rĂšgle 40-20-40 identifie quâen moyenne, 40% de lâeffort est requis pour spĂ©cifier et concevoir, 20% va Ă la programmation et 40% va aux tests de vĂ©rification (âle systĂšme fait-il correctement son travail ?â) et de validation (âle systĂšme rĂ©alisĂ© correspond-il aux besoins du client ?â).
Définition
Un test est un ensemble de cas à tester (état de l'objet à tester avant exécution du test, actions ou données en entrée, valeurs ou observations attendues, et état de l'objet aprÚs exécution), éventuellement accompagné d'une procédure d'exécution (séquence d'actions à exécuter). Il est lié à un objectif.
On distingue deux scĂ©narios : positif (ça marche) et nĂ©gatif (ça ne marche pas mais ce nâest pas un bug).
Grands principes de test
- Indépendance ~ un développeur ne teste pas ses propres programmes
- ParanoĂŻa ~ ne pas faire de tests avec lâhypothĂšse quâil nây a pas dâerreur
- PrĂ©diction ~ dĂ©finir les rĂ©sultats attendus avant lâexĂ©cution des tests (plan de test)
- VĂ©rification ~ sĂ©parer lâexĂ©cution et lâanalyse : inspecter minutieusement les rĂ©sultats de chaque test
- Robustesse ~ écrire les jeux de tests pour des entrées invalides/incohérentes mais aussi pour des entrées valides
- ComplĂ©tude ~ vĂ©rifier quâun logiciel rĂ©alise ce quâil est supposĂ© faire mais aussi ce quâil fait en dehors de ce quâil est supposĂ© faire
Classification des tests

Selon le cycle de vie
- test unitaire ~ test Ă lâĂ©chelle dâun composant, indĂ©pendamment du reste
- test dâintĂ©gration ~ test Ă lâĂ©chelle de modules ou parties de code qui coopĂšrent
- test systĂšme (vĂ©rification) ~ test Ă lâĂ©chelle du systĂšme entier, en inspectant sa fonctionnalitĂ©
- test dâacception ou recette utilisateur (validation) ~ test Ă lâĂ©chelle du systĂšme entier, en inspectant sa cohĂ©rence avec les spĂ©cifications
- (test de non-rĂ©gression) ~ test dâun systĂšme prĂ©alablement testĂ©s lorsquâil y a mise Ă jour ou Ă©volution pour vĂ©rifier quâil nây a pas de rĂ©gression (on ne veut pas que ça casse tout) â> intĂ©rĂȘt notamment de lâintĂ©gration continue puisquâil faut refaire les tests unitaires > dâintĂ©gration > systĂšme > recette
Selon la nature de la connaissance
- test structurel ou en âboĂźte blancheâ ~ vĂ©rifie quâil nây a pas des erreurs dans le code, lâimplĂ©mentation,⊠dont test unitaire, test dâintĂ©gration, test de non-rĂ©gression
- test fonctionnel ou en âboĂźte noireâ ~ vĂ©rifie que le logiciel respecte les attentes du client (on ne regarde pas le code mais simplement le logiciel) dont test systĂšme, test dâacceptation
Selon la qualité
- test de conformitĂ© (validation) dont test dâacceptation
- test de robustesse ~ vérifie la stabilité et la fiabilité du logiciel
- test de performance ~ vĂ©rifie que les performances annoncĂ©es sont atteintes (test des temps de rĂ©ponse, de la durĂ©e des traitements, de la consommation de ressources) et souvent cas de montĂ©e en charge avec des tests de charge (hausse importance du nombre dâutilisateurs par exemple)
- test de sĂ©curitĂ© ~ vĂ©rifie les attaques, la gestion des connexions, lâauthentification, la validation des donnĂ©esâŠ
Autres classifications
- test statique (par lâhumain) ou dynamique (par la machine, notion de fiabilitĂ©)
- test manuel (par le développeur) ou automatisé (outils de tests)
Intégration continue
L'intégration continue est un ensemble de pratiques utilisées en génie logiciel consistant à vérifier à chaque modification de code source que le résultat des modifications ne produit pas de régression dans l'application développée.
Elle nécessite une automatisation de la compilation et des tests ainsi que certains prérequis :
- utiliser un logiciel de gestion de version
- faire des commit réguliers
- utiliser un framework de test, qui permet de standardiser des résultats interprétables
- utiliser une application dâintĂ©gration continue pour compiler, exĂ©cuter les tests, automatiser le dĂ©ploiement et prĂ©senter les rĂ©sultats
Avantages : test immĂ©diat des modifications, notification rapide en cas de code incompatible ou manquant, dĂ©tection des problĂšmes dâintĂ©gration pour une rĂ©paration rapide (et pas de problĂšmes de derniĂšre minute), une version est toujours disponible pour un test, une dĂ©monstration ou une distribution.
Développement piloté par les tests (TDD)
Le Test Driven Development est une technique de dĂ©veloppement de logiciel qui prĂ©conise dâĂ©crire les tests unitaires avant dâĂ©crire le code source dâun logiciel.
La logiques des tests poussĂ©e Ă lâextrĂȘme.