Test logiciel Xavier Baril
Plan Introduction Principes de base / classification Les tests dans le cycle en V Tests unitaires (avec JUnit) Tests d’intégration Conclusion (C) Xavier Baril
Introduction (1/2) Tester un logiciel... selon quels critères ? Alternatives ? Méthodes formelles Relectures de code Quel coût ? 30/40/50… % du coût de développement Dépend du niveau de criticité (C) Xavier Baril
Introduction (2/2) Le test un métier à part entière Activité créatrice Imaginer des scénarios plausibles Imaginer et construire des outils (simulateurs, …) Partie importante du plan de qualité logiciel (C) Xavier Baril
Définition (Wikipedia) « Le test est un processus manuel ou automatique, qui vise à établir qu’un système vérifie les propriétés exigées par sa spécification, ou à détecter des différences entre les résultats engendrés par le système et ceux qui sont attendus par la spécification. » Ainsi le test vise à mettre en évidence les erreurs d’un logiciel. Cependant il n'a pas pour objectif de : diagnostiquer la cause des erreurs, corriger les erreurs, prouver la correction d’un programme. (C) Xavier Baril
Quelques principes de base Un développeur ne doit pas tester ses propres programmes La définition des sorties ou résultats attendus doit être effectuée avant l’exécution d’un test Tester que le logiciel fait ce qu’il doit faire et qu’il ne fait pas ce qu’il ne doit pas faire… (C) Xavier Baril
Classification des tests Par niveau de détail : Tests unitaires Tests d’intégration Par caractéristique : Tests fonctionnels Tests de robustesse Tests de performance … (C) Xavier Baril
Tests et cycle en V (C) Xavier Baril
Tests unitaires «En programmation, le test unitaire est un procédé permettant de s'assurer du fonctionnement correct d'une partie déterminée d'un logiciel ou d'une portion d'un programme. » définition Wikipedia JUnit Couverture de code Permet de tester la non-régression via l’intégration continue (C) Xavier Baril
JUnit Framework de test pour le langage Java Permet de vérifier des assertions Exemple « Hello World » public class HelloWorld extends TestCase { public void testMultiplication() { // Testing if 3*2=6: assertEquals ("Multiplication", 6, 3*2); } (C) Xavier Baril
Ecrire un test JUnit Etendre de la classe TestCase Implémenter des méthodes publiques testXXX() Surcharger les méthodes setUp() tearDown() Stratégie ? une méthode = un test une méthode publique = un test … Bouchons de test… (C) Xavier Baril
Test d’intégration L'intégration a pour but de valider le fait que toutes les parties développées indépendamment fonctionnent bien ensemble. Dans le cadre d'une livraison, pour établir une nouvelle version (gestion de configuration…) … intégration continue : fusion des tests unitaires et des tests d’intégration. (C) Xavier Baril
Développement dirigé par les tests « Test-driven developement » Ajout d’une fonctionnalité = Ajout d’un test Jouer les tests : constater l’erreur Ecrire du code Jouer les tests : constater la correction « Refactoring » du code … Méthode Agile, XP (Extreme Programing) (C) Xavier Baril
Conclusion Le test est une activité importante dans la production d’un logiciel Nécessite des compétences Mise en place d’une stratégie Mise en place / développement d’outils (C) Xavier Baril
Bibliographie Wikipedia (mots clés : « test informatique ») http://www.junit.org/ (JUnit) http://www.google.fr ;-) (C) Xavier Baril
Exercice : écrire les tests JUnit public class ExpressionResolver { public int compute(IExpression expression) { String operator = expression.getOperator(); if ("+".equals(operator)) { return computeAddition(expression.getOperand1(), expression.getOperand2()); } if ("-".equals(operator)) { return computeSubstraction(expression.getOperand1(), expression.getOperand2()); throw new RuntimeException("Bad operator: " + operator); int computeAddition(int x, int y) { return x + y; int computeSubstraction(int x, int y) { return x - y; public interface IExpression { String getOperator(); int getOperand1(); int getOperand2(); } (C) Xavier Baril