0% ont trouvé ce document utile (0 vote)
22 vues33 pages

004.1 GL Tests WhiteBox

Le document traite des tests logiciels, en se concentrant sur les tests boîte blanche, qui nécessitent une connaissance de la structure interne du code pour détecter les erreurs. Il présente des techniques telles que la couverture du flot de contrôle et la couverture des nœuds, ainsi que des critères de couverture pour évaluer la qualité des tests. Des exemples et des exercices sont fournis pour illustrer les concepts abordés.

Transféré par

zackda93
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
22 vues33 pages

004.1 GL Tests WhiteBox

Le document traite des tests logiciels, en se concentrant sur les tests boîte blanche, qui nécessitent une connaissance de la structure interne du code pour détecter les erreurs. Il présente des techniques telles que la couverture du flot de contrôle et la couverture des nœuds, ainsi que des critères de couverture pour évaluer la qualité des tests. Des exemples et des exercices sont fournis pour illustrer les concepts abordés.

Transféré par

zackda93
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Génie Logiciel

Tests Logiciels
A M I NA TA ZERBO/SA BA NE
Plan

üIntroduction

üTests Boite Blanche

üTests Boite Noire

3 3
Tests Logiciels : Tests Boite Blanche

4 4
Tests Boite Blanche
Tests boite blanche ou tests structurels
Tests basés sur la structure interne du code
◦ Nécessitent de connaître le code

◦ détectent principalement les erreurs commises

Plusieurs techniques
◦ Couverture du flot de contrôle

◦ Couverture du flot des données

◦ Test par mutation


5 5
Couverture
du Flot de Contrôle
Graphe de Flot de Contrôle
Un graphe de flot de contrôle
(Control Flow Graph –CFG) est une
représentation sous forme de
x≠y graphe orienté de tous les chemins
possibles dans un programme
x<=y x>y x=y

Les nœuds sont des blocs


d’instructions séquentielles

7 7
Graphe de Flot de Contrôle
Les arêtes (encore appelées arcs ou
branches) sont des transferts de
contrôle
x≠y
Les arêtes peuvent être étiquetées
x<=y x>y x=y avec un attribut représentant la
condition du transfert de contrôle
Chaque graphe comporte un nœud
« entrée » et un nœud « sortie »

8 8
Graphe de Flot de Contrôle
Public int computeGCD(int x, int y){
Int gcd
while (x!=y){
if (x>y){ x!=y
x= x – y;
}else{ x<=y x>y x=y
y = y – x;
}
}
gcd = x;
return gcd;
}

9 9
Principes du CFG

Séquence Si-Alors-Sinon Boucle tant que Commutateur


(If-Then-Else) (While loop) (Switch)

10 10
Principes du CFG

Ammann & Offutt


11 11
Principes du CFG

Ammann & Offutt


12 12
Principes du CFG

Ammann & Offutt


13 13
Principes du CFG

Ammann & Offutt


14 14
Principes du CFG

Ammann & Offutt


15 15
Principes du CFG

Ammann & Offutt


16 16
Principes du CFG

Ammann & Offutt


17 17
Principes du CFG

Ammann & Offutt


18 18
Principes du CFG
Construire le graphe de contrôle
de la fonction suivante

[Link] int factorial(int n){


2. int i, result = 1;
3. for (i=2; i<=n; i++) {
4. result = result * i;
5. }
6. return result;
7.}

19 19
Principes du CFG
Construire le graphe de contrôle de la fonction suivante

[Link] int compute(int){


2. int sum, i;
3. sum=0;
4. i=inf;
5. while (i<=sup) {
6. sum=sum+a[i];
7. i=i+1
8. }
9. return sum;
10.}
20 20
Chemin de Contrôle
Chemin qui part de l’entrée à la sortie du graphe

Chaque exécution correspond à un chemin de contrôle


dans le graphe de contrôle
If (y <= 0){
x=y+1;
}
If (y>0){
x=y-1;
}
21 21
Chemin de Contrôle
a Chaque exécution correspond
y<=0 If (y <= 0){ à un chemin de contrôle dans
y>0
x=y+1; le graphe de contrôle
b
}
If (y>0){
c
x=y-1; Lister tous les chemins de
} contrôle du graphe
d
y>0

y<=0 e

22 22
Chemin de Contrôle
Chaque exécution correspond à un chemin
a de contrôle dans le graphe de contrôle
y<=0 If (y <= 0){
x=y+1;
y>0
b
} ◦ Attention, tout chemin n'est pas
If (y>0){ exécutable
c
x=y-1; 1. Pour chaque chemin dire s’il est
exécutable ou non
d }
y>0
2. Trouver des données de test
y<=0 e
permettant d’exécuter chaque
chemin de contrôle exécutable
f

23 23
Critère de Couverture
Un critère est un ensemble de règles définies sous certaines
hypothèses et qui décrivent les propriétés qu'un jeu de tests
doit satisfaire

La couverture de code est une mesure utilisée en génie


logiciel pour décrire le taux de code source testé d'un
programme
◦ Mesure la qualité des tests effectués

24 24
Critère de Couverture
Il existe de nombreux critères de couvertures
Exemples de critères de couverture

1. Couverture des fonctions (Function Coverage) - Chaque


fonction dans le programme a-t-elle été appelée ?

2. Couverture des instructions (Statement Coverage) -


Chaque ligne du code a-t-elle été exécutée et vérifiée ?

25 25
Critère de Couverture
Il existe de nombreux critères de couvertures
Exemples de critères de couverture

3. Couverture des points de tests (Condition Coverage) -


Chaque point de décision a-t-il été exécuté et vérifié ? (Le
point de test teste-t-il ce qu'il faut ?)

4. Couverture des chemins d'exécution (Path Coverage) -


Chaque chemin d’excution possible a-t-il été exécuté et
vérifié ?
26 26
Couverture des Nœuds
Exige de couvrir tous les nœuds dans le CFG (toutes les
instructions du code)

Important car il est impossible de découvrir des anomalies si


les instructions les contenant ne sont pas exécutées

Taux de couverture=|{nœuds couverts}| /|{nœuds}|

27 27
Couverture des Nœuds
En pratique, plusieurs entrées (données de test) exécutent
les mêmes instructions
Pouvons-nous minimiser les cas de test à utiliser pour
couvrir tous les nœuds?

Incomplétude : Un taux de couverture de 100% des nœuds


ne signifie pas la couverture de tous les cas

28 28
Couverture des Nœuds
La couverture des instructions peut mener à l’incomplétude

if (x < 0){
x = -x;
} Un cas x < 0 couvre toutes les instructions.
z = 1/x;
--------------- Mais le cas x >= 0 n’est pas pris en compte.
if (x < 0){ Le code implicite (en italique et rouge) n’est
x = -x; pas couvert
}else
null; Ne rien faire pour le cas x >= 0 peut s’avérer
z = 1/x; faux, voire dangereux et devrait être testé

29 29
Couverture des Arêtes
Exige de visiter au moins une fois toutes les arêtes du
graphe de flot de contrôle

◦ Exercer toutes les conditions qui gouvernent le flot de


contrôle du programme avec des valeurs vraies et fausses

Taux de couverture=|{Arêtes couvertes}| /|{Arêtes}|

30 30
Exercice
int puissance(int X, int N) {
int S = 1; • Construire le graphe de
int P = N; contrôle de la fonction ci-
while(P >= 1) { contre
if(P mod 2 != 0) {
P = P - 1; • Donner un jeu de test pour
S = S * X; couvrir tous les nœuds
}
S = S * S; • Donner un jeu de test pour
P = P/2; couvrir toutes les branches
} (arêtes ou arcs)
return S;
} 31 31
Références
Références
Ce cours est basé sur le cours Méthodes de test et
validation du Logiciel du Pr. Antoniol Giuliano de l’Ecole
Polytechnique de Montréal

INF4000-GL (UO1/SEA/DI/SITR) 33 A. Z. SABANE

Vous aimerez peut-être aussi