26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

29
26/05/07 1 Présentation de JUnit Présentation de JUnit Partie 2 Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007

Transcript of 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

Page 1: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 1

Présentation de JUnit Partie 2Présentation de JUnit Partie 2

NICOLAS BOUSSEKEYT

CNAM 2006-2007

Page 2: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 2

Objectifs de la présentationObjectifs 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)

Page 3: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 3

JUniperfJUniperf

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

Page 4: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 4

Junitperf (suite)Junitperf (suite)

Le plugin JUnitPerf permet d'effectuer deux types de test :

Les tests de durée (TimedTest), Les tests de charge (LoadTest).

Page 5: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 5

Junitperf : TimedTest(suite)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.

Page 6: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 6

Junitperf : TimedTest(suite)Junitperf : TimedTest(suite)

Exemple :

une classe Pile qui permet d'empiler ou de dépiler des entiers dans un tableau d'objet.

Page 7: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 7

Junitperf : TimedTest(suite)Junitperf : TimedTest(suite)

Etapes à réaliser pour effectuer un test avec JunitPerf :Créer un test unitaire de la classe en

exempleCré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.

Page 8: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 8

Junitperf : TimedTest(suite)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

Page 9: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 9

Junitperf : LoadTestJunitperf : 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

Page 10: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 10

DBUnitDBUnit

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/

Page 11: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 11

DBUnitDBUnit

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.

Page 12: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 12

DBUnitDBUnit

Voici le modèle merise fournit comme exemple :

Page 13: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 13

DBUnitDBUnit

Voici le modèle UML comme exemple :

Présentation de l'exemple

Page 14: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 14

Couverture d'instructionsCouverture d'instructionspublic 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;

}

Page 15: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 15

Couverture d'instructions (suite)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

Page 16: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 16

Couverture de branchesCouverture de branchesCe test de couverture doit permettre

de couvrir toutes les branches du code d'exemple précédent.

Présentation de l'exemple

Page 17: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 17

Adéquation de mutationAdé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).

Page 18: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 18

Adéquation de mutation (suite)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

K=12xMV 2

Page 19: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 19

Adéquation de mutation (suite)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

Page 20: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 20

Méthode JAXMé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

Page 21: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 21

Méthode JAX (suite)Méthode JAX (suite)

Exemple : Utilisation de la classe pile

Taille de la pile maximum : 2

Page 22: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 22

Méthode JAX (suite)Méthode JAX (suite)

Utilisation de la méthode classique :On développe un test par méthode.

Page 23: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 23

Méthode JAX (suite)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

Page 24: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 24

Méthode JAX (suite)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.

Page 25: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 25

Méthode JAX (suite)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

Page 26: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 26

ConclusionConclusion

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.

Page 27: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 27

Conclusion (suite)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.

Page 28: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 28

La QuestionLa Question

Question : A quoi sert Dbunit ?

Page 29: 26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM 2006-2007.

26/05/07 29

Des questions ?Des questions ?