290 likes | 425 Views
NICOLAS BOUSSEKEYT CNAM 2006-2007. Présentation de JUnit Partie 2. Objectifs de la présentation. Présentation de différents plugins (JunitPerf, Dbunit) Mise en place de Test d'adéquation et de couverture (Couverture d'instruction , Couverture de branche, Adéquation de mutation)
E N D
NICOLAS BOUSSEKEYT CNAM 2006-2007 Présentation de JUnit Partie 2
Objectifs de la présentation Présentation de différents plugins (JunitPerf, Dbunit) Mise en place de Test d'adéquation et de couverture (Couverture d'instruction , Couverture de branche, Adéquation de mutation) Test de la méthode JUnit Axioms (JAX)
JUniperf JUnitPerf est une collection d'outils de test permettant de mesurer les performances et l'adaptabilité des fonctionnalités contenues dans les tests unitaires Junit. Pour plus d’informations http://clarkware.com/software/JUnitPerf.html
Junitperf (suite) Le plugin JUnitPerf permet d'effectuer deux types de test : Les tests de durée (TimedTest), Les tests de charge (LoadTest).
Junitperf : TimedTest(suite) Le type de test TimedTest permet de valider qu'un jeu de test ne va dépasser sa durée effective Maximum.
Junitperf : TimedTest(suite) Exemple : une classe Pile qui permet d'empiler ou de dépiler des entiers dans un tableau d'objet.
Junitperf : TimedTest(suite) Etapes à réaliser pour effectuer un test avec JunitPerf : Créer un test unitaire de la classe en exemple Créer une suite de test pour vérifier que le test unitaire réponds bien au temps imparti ou qu'il fonctionne bien correctement selon un certaine montée en charge.
Junitperf : TimedTest(suite) Présentation du test TimedTest : Le test Junit classique crée une pile de taille de 1000, Le test JunitPerf vérifie que le test ne va dépasser le temps de 10900 milli secondes Présentation de l'exemple
Junitperf : LoadTest Présentation du test LoadTest : On utilise le test Junit créé précedemment, Le test JunitPerf vérifie que le test va gérer 10 utilisateurs avec 2 itérations. Présentation de l'exemple
DBUnit Permet de simplifier les tests unitaires avec des données basés Basé sur XML pour charger des données de test. Pour plus d’informations http://dbunit.sourceforge.net/
DBUnit Le scénario le plus typique : Supprimer les données dans la base de donnée provenant d'anciens tests, Charger des données provenant d'un fichier dans la base, Démarrer quelques tests en utilisant des méthodes DbUnit.
DBUnit Voici le modèle merise fournit comme exemple :
DBUnit Voici le modèle UML comme exemple : Présentation de l'exemple
Couverture d'instructions publicint valeurRetourne(int val, boolean condition1, boolean condition2, boolean condition3) { int val2 = val; if (condition1) { val2++; } if (condition2) { val2--; } if (condition3) { val2=val; } return val2; }
Couverture d'instructions (suite) Ce test de couverture doit permettre de couvrir toutes les instructions du code précédent. Présentation de l'exemple
Couverture de branches Ce test de couverture doit permettre de couvrir toutes les branches du code d'exemple précédent. Présentation de l'exemple
Adéquation de mutation Les tests de mutation (DeMillo et al. 1979)permettent d'évaluer la qualité des test effectués. Ils consistent à vérifier si un jeu de test est capable de détecter les petites modifications syntaxiques du programme originale (mutants).
Adéquation de mutation (suite) Exemple : Nous allons donc utiliser une classe qui permet de calculer l'énergie kinétique. L'énergie kinétique est défini comme suit
Adéquation de mutation (suite) Pour mettre en place un mutation, nous avons donc introduit une erreur en remplaçant le 2 par un 3. Présentation de l'exemple
Méthode JAX Cette méthode est basée sur les spécifications de l'algèbre de Guttag avec les types abstraits (ADT). Cette méthode démontre que les tests basés sur JAX permettent de découvrir des erreurs non détectés avec les tests classiques
Méthode JAX (suite) Exemple : Utilisation de la classe pile Taille de la pile maximum : 2
Méthode JAX (suite) Utilisation de la méthode classique : On développe un test par méthode.
Méthode JAX (suite) Exemple avec une méthode : publicvoid testEmpty() /* Tests the emptying of the stack. */ { int k = 3; numbers.push(k); assertTrue(!numbers.isEmpty() ); numbers.pop(); assertTrue( numbers.isEmpty() ); } On ajoute un élément. On teste que la pile n'est pas vide. On retire un élément. On teste que la pile est vide. Présentation de l'exemple
Méthode JAX (suite) Utilisation de la méthode JAX : On développe un test par règles de structure. On compare aussi deux objets qui doivent être dans la même situation.
Méthode JAX (suite) Exemple avec une méthode : publicvoid testEmptyNew() /* Tests the emptying of the stack. */ { //new == true assertTrue(numbers.isEmpty()); } publicvoid testEmptyPush() /* Tests whether a stack is empty after a push. */ { //push == false assuming stack maxsize > 0 int k = 3; numbers.push(k); assertTrue(!numbers.isEmpty()); } Vérifie que la nouvelle pile est vide. Ajoute un élément, vérifie que la pile est non vide. Présentation de l'exemple
Conclusion Les extensions de Junit permettent de mettre en place des fonctionnalités qui n'existent pas avec Junit ce qui rend le produit beaucoup plus intéressant. On peut pas exemple tester des flux XML, générer des rapports à la volée en PDF dans des emails. Les méthodes de couverture qui permettent de vérifier que tout le code a bien été vérifié par les tests unitaires.
Conclusion (suite) Mise en pratique les tests de mutation qui eux permettent de vérifier que les tests unitaires tombent bien en erreur ce qui permet de valider leurs utilités. Introduction à la méthode JAX . Cette méthode montre comment la méthode des axiomes permet de découvrir des bugs difficilement détectables avec les méthodes classiques.
La Question Question : A quoi sert Dbunit ?