26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM
26/05/072 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)
26/05/073 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 dinformations
26/05/074 Junitperf (suite) Le plugin JUnitPerf permet d'effectuer deux types de test : Les tests de durée (TimedTest), Les tests de charge (LoadTest).
26/05/075 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.
26/05/076 Junitperf : TimedTest(suite) Exemple : une classe Pile qui permet d'empiler ou de dépiler des entiers dans un tableau d'objet.
26/05/077 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.
26/05/078 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 milli secondes Présentation de l'exemple
26/05/079 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
26/05/0710 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 dinformations
26/05/0711 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.
26/05/0712 DBUnit Voici le modèle merise fournit comme exemple :
26/05/0713 DBUnit Voici le modèle UML comme exemple : Présentation de l'exemple
26/05/0714 Couverture d'instructions public int valeurRetourne(int val, boolean condition1, boolean condition2, boolean condition3) { int val2 = val; if (condition1) { val2++; } if (condition2) { val2--; } if (condition3) { val2=val; } return val2; }
26/05/0715 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
26/05/0716 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
26/05/0717 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).
26/05/0718 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
26/05/0719 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
26/05/0720 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
26/05/0721 Méthode JAX (suite) Exemple : Utilisation de la classe pile Taille de la pile maximum : 2
26/05/0722 Méthode JAX (suite) Utilisation de la méthode classique : On développe un test par méthode.
26/05/0723 Méthode JAX (suite) Exemple avec une méthode : public void 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
26/05/0724 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.
26/05/0725 Méthode JAX (suite) Exemple avec une méthode : public void testEmptyNew() /* Tests the emptying of the stack. */ { //new == true assertTrue(numbers.isEmpty()); } public void 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
26/05/0726 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 s. Les méthodes de couverture qui permettent de vérifier que tout le code a bien été vérifié par les tests unitaires.
26/05/0727 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.
26/05/0728 La Question Question : A quoi sert Dbunit ?
26/05/0729 Des questions ?