Tests
Unitaires
LAJOUAD Rachid
Tests Boîte
Noire
LAJOUAD Rachid
Tests boîte noire ?
• Tests sans la connaissance du code sous jacent
• Tests basés sur la spécification
Lajouad Rachid
CQL - BTSDSI Ibn SINA (Kenitra)3
Unité
entrées
sorties
Tests boîte noire ?
Avantages
• pas besoin du code source
• s'applique aussi bien aux tests unitaires que systèmes
Désavantages
• ne test pas les fonctions cachées
Approches:
• Divination d'erreurs (Error guessing)
• Partitionnement en Classe d'équivalences
• Analyse de Valeurs aux Bornes
• Tables de Décision
• Graphes Causes Effets
• Tests dérivés des exigences (ex: cas d'utilisations)
Lajouad Rachid
CQL - BTSDSI Ibn SINA (Kenitra)4
Divination d'erreurs (1)
Approche ad-hoc basée sur l'expérience
Approche:
• Faire une liste d'erreurs possibles ou situations conduisant à
des erreurs
• modèle d'erreurs
• Développer des cas de tests pour couvrir le modèle
d'erreurs
Développez et maintenez vos modèles d'erreurs
Lajouad Rachid
CQL - BTSDSI Ibn SINA (Kenitra)5
Divination d'erreurs (2)
Exemple fonction de tri de tableau
Modèle d'erreur:
• tableau vide
• tableau trié
• tableau trié à l'envers
• grand tableau non trié
• ...
Générer des cas de tests pour ces situations
Lajouad Rachid
CQL - BTSDSI Ibn SINA (Kenitra)6
Partitionnement en Classes
d'équivalences
Partition du domaine de données en classes
d'équivalences selon la spécification
Idéalement les CEs devraient être
• telles que chaque donnée est dans une classe disjointes
• les éléments d'une même classe mis en
correspondance avec leur résultats de façon similaire
Lajouad Rachid
CQL - BTSDSI Ibn SINA (Kenitra)7
Heuristiques pour Identification de
Classes d'équivalences
Pour chaque donnée:
• si spécifie un intervalle de valeurs valides, définir
• 1 CE valide (dans l'intervalle)
• 2 CEs invalides (une à chaque bout de l'intervalle)
• si spécifie un nombre (N) de valeurs valides, définir
• 1 CE valide
• 2 CE invalides (aucune et plus de N)
• si spécifie un ensemble de valeurs valides, définir
• 1 CE valide (dans l'ensemble)
• 1 CE invalide (en dehors de l'ensemble)
Lajouad Rachid
CQL - BTSDSI Ibn SINA (Kenitra)8
Partitionnement en Classes
d'équivalences - Exemple (1)
• Spécification
• données trois entiers (côtés du triangle: a, b, c)
• chaque côté doit être un nombre positif inférieur ou égal à
20.
• résultat type du triangle:
• Équilatéral si a = b = c
• Isocèles si 2 paires de côté sont égaux
• Scalène si aucun côté n'est égal à l'autre ou
• PasUnTriangle si a >= b + c, b >= a + c, ou c >= a + b
Lajouad Rachid
CQL - BTSDSI Ibn SINA (Kenitra)9
Analyse des Valeurs aux Bornes
(AVB)
• Erreurs ont tendance à survenir vers les valeurs
extrêmes (bornes)
• AVB améliore le Partitionnement en Classes
d'équivalences en
• sélectionnant les éléments juste à et autour des bornes de
chacune des CES
• dérivant des cas de tests en considérant des CEs des
résultats également
Lajouad Rachid
CQL - BTSDSI Ibn SINA (Kenitra)10
Conditions de bornes
• Situation à la bordure des limites opérationnelles
envisagées
• Types de données ayant des conditions de bornes
• Numérique, Caractère, Position, Quantité, Vitesse,
Location, Taille
• Caractéristiques de conditions de bornes
• Premier/Dernier, Début/Fin, Minimum/Maximum,
Audessus/ Audessous, Vide/Plein, Pluslent/ Plusrapide,
Plusgrand/ Pluspetit, Plusprochede/ Plusloinde,
Pluscourt/ Pluslong, Plustôt/ Plustard, Plushaut/ Plusbas
Lajouad Rachid
CQL - BTSDSI Ibn SINA (Kenitra)11
Analyse des Valeurs aux Bornes -
Exemple
• Exemples de valeurs aux bornes pour nextdate
Lajouad Rachid
CQL - BTSDSI Ibn SINA (Kenitra)12
Donnée Valeur borne
Mois 0, 1,12,13
Jour 0,1,2,30,31,32
an 1811, 1812, 2013,
2014
Tests Boîte
Blanche
LAJOUAD Rachid
Tests boîte blanche
Approche de tests structurels
Focus sur la logique interne du système
nécessité du code source
spécification nécessaire pour résultats attendus
Avantage
• test ce qui est là
Dé-avantage
• fonctionnalité présente dans la spec mais non implémentée peut être manquée
Tests boîte blanche
● Approches orientées flotde contrôle
– Basées sur l'analysedu flot de contrôle à travers le programme
– Exemples de critères de couverture de tests
● couverture d'instructions (tous-les-noeuds)
● couverture debranches (tous-les-liens)
● couverture dechemins (tous-les-chemins)
● couverture deconditions
● ...
Processus de test boîte blanche
Établir l'objectif de couverture
Dériver un flowchart du code source
Déterminer des chemins pour objectif de couverture
Pour chaque chemin
• Sensibiliser les chemins pour les entrées
• Utiliser la spécification pour résultats escomptés
• Faire attention au chemins impossibles
Exécuter les cas de tests
Vérifier la couverture
Flowchart Simplifié
● Plus pratique pour grandes unités
● Obtenu en groupant des sous-chemins de
décision à décision
● Nœuds
– Nœuds Décisions: avec plus d'un lien partant
● fini avec une décision
– Nœuds Jonctions: avec plus d'un lien entrant
● concentre plusieurs chemins
Flowchart Simplifié - exemple
fir
st
firs
t
A
B C
D
E
F G
H I
J K
last
L
public static void main (String[] args)throws IOException
{
boolean isATriangle;
System.out.print("Enter the sides: ");
int a = IOEasy.readInt();
int b = IOEasy.readInt();
int c = IOEasy.readInt();
System.out.println("A is“+a+“,B is“+b+", C is”+c);
if ((a < b+c) && (b < a+c) && (c < a+b)) (A)
isATriangle = true; (B)
else isATriangle = false; (C)
if (isATriangle) { (D)
if (((a==b) || (a==c) || (b==c)) &&!((a==b) &&
(a==c))) (E)
System.out.println( "Triangle is Isosceles"); (F)
if ((a==b) && (b==c)) (G)
System.out.println( "Triangle is Equilateral");
(H)
if ((a!=b) && (a!=c) && (b!=c)) (I)
System.out.println("Triangle is Scalene"); (J)
}
else System.out.println("Not a Triangle"); (L)
}
}
Meilleur programme Triangle
first
last
B
C
D E
I G
F
A
H
public static void main (String[] args) throws
IOException{
System.out.print( "Enter the sides: ");
int a = IOEasy.readInt();
int b = IOEasy.readInt();
int c = IOEasy.readInt();
System.out.println("A is " + a + ", B is " + b + ", C
is " + c);
if ((a < b+c) && (b < a+c) && (c < a+b)) { (A)
if ((a!=b) && (a!=c) && (b!=c)) { (B)
System.out.println(“Triangle is Scalene”); (G)
} else {
if ((a==b) && (a==c)) (C)
System.out.println(“Triangle is Equilateral”); (E)
else
System.out.println(“Triangle is Isosceles”); (D)
} (F)
} else
System.out.println(“Not a Triangle”); (I)
} (H)
}
Instrumentation de Chemin
●Pour mesurer la couverture de code
Code
Source
Code
Source
Modifié
Trace
d'Exécution
exécution de suite de tests
analyse pour
couverture
objectif
de couverture
atteinte ?
Approches
● marqueurs de liens
● compteurs de liens
● débogueur symbolique
● outil de couverture de
code
Couverture de Boucles (1)
● Boucle simple - exécuter la boucle
– minimum-1
– minimum
– minimum+1
– typique
– maximum
– maximum+1
● fois si possible.
examp1(char[] val) {
for(int i=0;i<val.length;i++){
...
}
}
examp2(int x, int y) {
i = x;
while (i <= y) {
...
i++;
}
}
Couverture de Boucles (2)
● Boucles imbriquées
– Commencer avec la boucle la plus interne
● Mettre toutes les boucles à
l'extérieur à leur valeur minimum
● Mettre toutes les autres boucles à
une valeur typique
● Tester minimum, minimum+1,
typique, maximum-1, maximum
– Remonter à la boucle au dessus et
répéter
– Si la boucle plus extérieure est faite,
effectuer les 5 cas pour toutes les boucles
simultanément
for (i = 0; i < x; i++) {
for (j = 0; j < y; j++) {
for (k = 0; k < z; k++){
}
}
}
Tests Flots de Donnés
● Tests basés sur les flots de donnés
– où les données sont définies
– où les données sont modifiées
– séquence d'événements liés aux
données

Tests unitaires

  • 1.
  • 2.
  • 3.
    Tests boîte noire? • Tests sans la connaissance du code sous jacent • Tests basés sur la spécification Lajouad Rachid CQL - BTSDSI Ibn SINA (Kenitra)3 Unité entrées sorties
  • 4.
    Tests boîte noire? Avantages • pas besoin du code source • s'applique aussi bien aux tests unitaires que systèmes Désavantages • ne test pas les fonctions cachées Approches: • Divination d'erreurs (Error guessing) • Partitionnement en Classe d'équivalences • Analyse de Valeurs aux Bornes • Tables de Décision • Graphes Causes Effets • Tests dérivés des exigences (ex: cas d'utilisations) Lajouad Rachid CQL - BTSDSI Ibn SINA (Kenitra)4
  • 5.
    Divination d'erreurs (1) Approchead-hoc basée sur l'expérience Approche: • Faire une liste d'erreurs possibles ou situations conduisant à des erreurs • modèle d'erreurs • Développer des cas de tests pour couvrir le modèle d'erreurs Développez et maintenez vos modèles d'erreurs Lajouad Rachid CQL - BTSDSI Ibn SINA (Kenitra)5
  • 6.
    Divination d'erreurs (2) Exemplefonction de tri de tableau Modèle d'erreur: • tableau vide • tableau trié • tableau trié à l'envers • grand tableau non trié • ... Générer des cas de tests pour ces situations Lajouad Rachid CQL - BTSDSI Ibn SINA (Kenitra)6
  • 7.
    Partitionnement en Classes d'équivalences Partitiondu domaine de données en classes d'équivalences selon la spécification Idéalement les CEs devraient être • telles que chaque donnée est dans une classe disjointes • les éléments d'une même classe mis en correspondance avec leur résultats de façon similaire Lajouad Rachid CQL - BTSDSI Ibn SINA (Kenitra)7
  • 8.
    Heuristiques pour Identificationde Classes d'équivalences Pour chaque donnée: • si spécifie un intervalle de valeurs valides, définir • 1 CE valide (dans l'intervalle) • 2 CEs invalides (une à chaque bout de l'intervalle) • si spécifie un nombre (N) de valeurs valides, définir • 1 CE valide • 2 CE invalides (aucune et plus de N) • si spécifie un ensemble de valeurs valides, définir • 1 CE valide (dans l'ensemble) • 1 CE invalide (en dehors de l'ensemble) Lajouad Rachid CQL - BTSDSI Ibn SINA (Kenitra)8
  • 9.
    Partitionnement en Classes d'équivalences- Exemple (1) • Spécification • données trois entiers (côtés du triangle: a, b, c) • chaque côté doit être un nombre positif inférieur ou égal à 20. • résultat type du triangle: • Équilatéral si a = b = c • Isocèles si 2 paires de côté sont égaux • Scalène si aucun côté n'est égal à l'autre ou • PasUnTriangle si a >= b + c, b >= a + c, ou c >= a + b Lajouad Rachid CQL - BTSDSI Ibn SINA (Kenitra)9
  • 10.
    Analyse des Valeursaux Bornes (AVB) • Erreurs ont tendance à survenir vers les valeurs extrêmes (bornes) • AVB améliore le Partitionnement en Classes d'équivalences en • sélectionnant les éléments juste à et autour des bornes de chacune des CES • dérivant des cas de tests en considérant des CEs des résultats également Lajouad Rachid CQL - BTSDSI Ibn SINA (Kenitra)10
  • 11.
    Conditions de bornes •Situation à la bordure des limites opérationnelles envisagées • Types de données ayant des conditions de bornes • Numérique, Caractère, Position, Quantité, Vitesse, Location, Taille • Caractéristiques de conditions de bornes • Premier/Dernier, Début/Fin, Minimum/Maximum, Audessus/ Audessous, Vide/Plein, Pluslent/ Plusrapide, Plusgrand/ Pluspetit, Plusprochede/ Plusloinde, Pluscourt/ Pluslong, Plustôt/ Plustard, Plushaut/ Plusbas Lajouad Rachid CQL - BTSDSI Ibn SINA (Kenitra)11
  • 12.
    Analyse des Valeursaux Bornes - Exemple • Exemples de valeurs aux bornes pour nextdate Lajouad Rachid CQL - BTSDSI Ibn SINA (Kenitra)12 Donnée Valeur borne Mois 0, 1,12,13 Jour 0,1,2,30,31,32 an 1811, 1812, 2013, 2014
  • 13.
  • 14.
    Tests boîte blanche Approchede tests structurels Focus sur la logique interne du système nécessité du code source spécification nécessaire pour résultats attendus Avantage • test ce qui est là Dé-avantage • fonctionnalité présente dans la spec mais non implémentée peut être manquée
  • 15.
    Tests boîte blanche ●Approches orientées flotde contrôle – Basées sur l'analysedu flot de contrôle à travers le programme – Exemples de critères de couverture de tests ● couverture d'instructions (tous-les-noeuds) ● couverture debranches (tous-les-liens) ● couverture dechemins (tous-les-chemins) ● couverture deconditions ● ...
  • 16.
    Processus de testboîte blanche Établir l'objectif de couverture Dériver un flowchart du code source Déterminer des chemins pour objectif de couverture Pour chaque chemin • Sensibiliser les chemins pour les entrées • Utiliser la spécification pour résultats escomptés • Faire attention au chemins impossibles Exécuter les cas de tests Vérifier la couverture
  • 17.
    Flowchart Simplifié ● Pluspratique pour grandes unités ● Obtenu en groupant des sous-chemins de décision à décision ● Nœuds – Nœuds Décisions: avec plus d'un lien partant ● fini avec une décision – Nœuds Jonctions: avec plus d'un lien entrant ● concentre plusieurs chemins
  • 18.
    Flowchart Simplifié -exemple fir st firs t A B C D E F G H I J K last L public static void main (String[] args)throws IOException { boolean isATriangle; System.out.print("Enter the sides: "); int a = IOEasy.readInt(); int b = IOEasy.readInt(); int c = IOEasy.readInt(); System.out.println("A is“+a+“,B is“+b+", C is”+c); if ((a < b+c) && (b < a+c) && (c < a+b)) (A) isATriangle = true; (B) else isATriangle = false; (C) if (isATriangle) { (D) if (((a==b) || (a==c) || (b==c)) &&!((a==b) && (a==c))) (E) System.out.println( "Triangle is Isosceles"); (F) if ((a==b) && (b==c)) (G) System.out.println( "Triangle is Equilateral"); (H) if ((a!=b) && (a!=c) && (b!=c)) (I) System.out.println("Triangle is Scalene"); (J) } else System.out.println("Not a Triangle"); (L) } }
  • 19.
    Meilleur programme Triangle first last B C DE I G F A H public static void main (String[] args) throws IOException{ System.out.print( "Enter the sides: "); int a = IOEasy.readInt(); int b = IOEasy.readInt(); int c = IOEasy.readInt(); System.out.println("A is " + a + ", B is " + b + ", C is " + c); if ((a < b+c) && (b < a+c) && (c < a+b)) { (A) if ((a!=b) && (a!=c) && (b!=c)) { (B) System.out.println(“Triangle is Scalene”); (G) } else { if ((a==b) && (a==c)) (C) System.out.println(“Triangle is Equilateral”); (E) else System.out.println(“Triangle is Isosceles”); (D) } (F) } else System.out.println(“Not a Triangle”); (I) } (H) }
  • 20.
    Instrumentation de Chemin ●Pourmesurer la couverture de code Code Source Code Source Modifié Trace d'Exécution exécution de suite de tests analyse pour couverture objectif de couverture atteinte ? Approches ● marqueurs de liens ● compteurs de liens ● débogueur symbolique ● outil de couverture de code
  • 21.
    Couverture de Boucles(1) ● Boucle simple - exécuter la boucle – minimum-1 – minimum – minimum+1 – typique – maximum – maximum+1 ● fois si possible. examp1(char[] val) { for(int i=0;i<val.length;i++){ ... } } examp2(int x, int y) { i = x; while (i <= y) { ... i++; } }
  • 22.
    Couverture de Boucles(2) ● Boucles imbriquées – Commencer avec la boucle la plus interne ● Mettre toutes les boucles à l'extérieur à leur valeur minimum ● Mettre toutes les autres boucles à une valeur typique ● Tester minimum, minimum+1, typique, maximum-1, maximum – Remonter à la boucle au dessus et répéter – Si la boucle plus extérieure est faite, effectuer les 5 cas pour toutes les boucles simultanément for (i = 0; i < x; i++) { for (j = 0; j < y; j++) { for (k = 0; k < z; k++){ } } }
  • 23.
    Tests Flots deDonnés ● Tests basés sur les flots de donnés – où les données sont définies – où les données sont modifiées – séquence d'événements liés aux données