1 Tests et Validation du logiciel 02/2007 – 06/2007.

28
1 Tests et Validation du logiciel 02/2007 – 06/2007

Transcript of 1 Tests et Validation du logiciel 02/2007 – 06/2007.

Page 1: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

1

Tests et Validation du logiciel

02/2007 – 06/2007

Page 2: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

2

Expression et nombre de chemins

Rappel : Nb de chemins de contrôles = Nb de

chemins exécutables + Nb de chemins non exécutables

Certaines instructions comme le « for » génèrent énormément de chemins non exécutables

Page 3: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

3

Expression et nombre de chemins

s:=0;

For i:=1 to 1000 do s:=s+a[i];

Expression des chemins ? Nombre de chemins de contrôle ? Nombre de chemins exécutables et non exécutables ?

Page 4: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

4

Hiérarchie des tests techniques

Soit T1 un test structurel qui nécessite la couverture des chemins

Soient δ1=cdebcde et δ2=ce T1= {δ1, δ2}.

Soit DT1={a[1]=-2, a[2]=3, a[3]=17,i=1} une donnée de test qui sensibilise le chemin de contrôle M1= abcebcdebcdebf

M1 couvre δ1=cdebcde et δ2=ce

Donc DT1 satisfait T1

Page 5: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

5

Hiérarchie des tests techniques

Rappel : M1= abcebcdebcdebf Soient T1 = {cdebcde , ce}

Soit un T2 nécessitant les couvertures des chemins suivantes T2={bcd, e} On remarque que si T1 satisfait, alors T2 l’est aussi

On écrit : T1 T2 T1 est un test plus fort et plus fiable que T2

Règle de transitivité T1T2 et T2 T3 alors T1 T3

Page 6: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

6

Catégories de critères de couverture

Approche ‘Flot de contrôle’avec couverture de tous les arcs :

DT1={x=-2, y=0} sensibilise le chemin M1=abcd

DT2={x=1, y=0} sensibilise le chemin M1=ace

Si l’affectation du noeud b est erronée, cette erreur ne sera pas détectée par DT1 et DT2.

Approche ‘Flot de données’ L’affectation de y au noeud b

n’est pas utilisée par DT1 et DT2 : il faudrait tester le chemin sensibilisé par la DT3={x=2, y=0}

Page 7: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

7

Couverture de flot de contrôle

Couverture de tous-les-noeuds

But : sensibiliser tous les chemins de contrôle qui nous permettent de visiter tous les noeuds du graphe.

Nom du critère de couverture : «tous les noeuds» A chaque critère de couverture est associée une valeur que l’on

appelle taux de couverture ou mesure de complétude.

Taux de couverture : TER1 (Test Effectiveness Ratio 1 ou C1)

TER1 = {noeuds couverts} / {noeuds} TER1=1

C1=1 Tous-les-nœuds est satisfait Toutes les instructions ont été exécutées au moins une fois

Page 8: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

8

Couverture de flot de contrôle

Exemple Function sum (x,y: integer) : integer;

Begin

If (x=0) then sum := x

Else sum := x + y;

End;

Un test fonctionnel ne permettrait pas de trouver le défaut. L’anomalie est détectée par le chemin [acd]

Toutes les DTs fournissent un TER=0.75

Page 9: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

9

Couverture de flot de contrôle

Soit le programme

Read(x);

If x<>0 then x:=1;

Y:=1/x;

Le critère tous-les-nœuds est satisfait par le chemin [abcd] cependant le bug ne sera pas mis en évidence

Page 10: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

10

Couverture de flot de contrôle

Couverture tous-les-arcs Le critère tous-les-nœuds est insuffisant pour détecter

une majorité d’erreurs de programmation.

TER2 = {arcs couverts} / {arcs}

Lorsque le critère tous-les-arcs est totalement réalisé, cela implique que le critère tous-les-nœuds est satisfait

Équivaut à la couverture de toutes les valeurs de vérité pour chaque nœud de décision

Page 11: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

11

Couverture de flot de contrôle

Conditionnelles composées Exemple :

if ((a < 2) and (b = a)) Then x := 2 -a Else x := a -2

Le jeu de test DT1 = {a=b=1}, DT2 = {a=b=3} satisfait le critère tous-les-arcs sans couvrir toutes les décisions possibles -ex. DT3 = {a=3, b=2}.

Page 12: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

12

Couverture de flot de contrôle

Le graphe de flot de contrôle doit décomposer les conditionnelles :

4 DTs pour couvrir le multi graphe

DT1={a=b=1} DT1={a=1,b=0} DT1={a=3 ,b=2} DT1={a=b=3}

Page 13: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

13

Couverture de flot de contrôle

Le critère condition-décision multiple est satisfait si Le critère tous les arcs est satisfait Chaque sous-expression dans les conditions prend toutes les

combinaisons de valeurs possibles

Si A & B Then ………..Nécessite : A = B = vrai A = B = faux A = vrai, B = faux A = faux, B = vrai

Problème de la combinatoire lors d’expression logique complexe

Page 14: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

14

Couverture de flot de contrôle

Problème de la sensibilité du traitement des conditionnelles par le compilateur

=> proposer un graphe alternatif qui pourrait correspondre à une optimisation du compilateur

Page 15: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

15

Couverture de flot de contrôle

Note :

bOK:=(a < 2) and (b = a); If bOK Then x := 2 -a Else x := a -2

Le problème devient « masqué » Ambiguïté du critère tous-les-arcs, car

dépend de l’algo ainsi que du compilateur

Page 16: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

16

Couverture de flot de contrôle

Limites du critère tous-les-arcs et condition multiples Soit le programme suivant : évaluer l’inverse de la somme des

éléments compris entre la place inf et sup d’un tableau a comprenant des entiers positifs

read(inf, sup);i := inf;sum:= 0;while(i <= sup) dobegin

sum:= sum+ a[i];i := i + 1;

end;writeln(1/sum);

Existe-t-il un bug potentiel ?

Page 17: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

17

Couverture de flot de contrôle

La DT1 = {a[1]=50, a[2]=60,a[3]=80, inf=1, sup=3} couvre le critère tous-les-arcs adbc

B1={u1,u2, u3,u2, u3, u2, u3, u4}

Problème non détecté par le critère tous-les-arcs: si inf >sup erreur sur 1/sum

Chemin maquant : [u1,u4] avec DT2={inf=2,sup=1}

B2={u1, u4}

Page 18: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

18

Couverture du flot de contrôle

Couverture de tous-les-chemins-indépendants

Le critère tous-les-chemins-indépendants vise à parcourir tous les arcs dans chaque configuration possible (et non pas au moins une fois comme dans le critère tous-les-arcs)

Lorsque le critère tous-les-chemins-indépendants est satisfait, cela implique : le critère tous-les-arcs est satisfait, le critère tous-les-nœuds est satisfait.

Page 19: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

19

Couverture de flot de contrôle

Sur le programme P7, l’arc [d-c] est sensibilisé lorsque i > supdans le contexte sum= 0 (la boucle n’est

pas activée)Dans le contexte sum≠0 (la boucle est

activée)

Page 20: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

20

Couverture du flot de contrôle

Procédure : tous-les-chemins-indépendants 1 –Evaluer V(G) -> nombre cyclomatique

NB : e – n + i + s OU Nb conditions simples +1

2 -Produire une DT au hasard couvrant le maximum de noeuds de décisions du graphe

3 -Produire la DT qui modifie la valeur de vérité (donc le flot) de la première instruction de décision de la DT de la seconde étape

Recommencer l’étape 3 jusqu’a la couverture de toutes les décisions.

Page 21: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

21

Couverture du flot de contrôle

Exemple : soit le programme suivant

Function goodstring(var count : integer) : boolean;

var ch : char;begin

goodstring:= false;count := 0;read(ch);if ch = ‘a’ thenbegin

read(ch)while(ch=‘b’) or (ch=‘c’) dobegin

count := count + 1;read(ch);

end;if ch = ‘x’ then goodstring=

true;end;

end;

La fonction goodstring est censée reconnaître toutes les chaînes de caractères (fournies caractère par caractère) commençant par le caractère a, suivi d’une série de b ou c (dont le nombre sera compté ) et se terminant par x.

Si la chaîne est reconnue alors la fonction retourne vrai, sinon elle retourne false.

Page 22: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

22

Couverture du flot de contrôle

Construisez le graphe de flot de contrôle en décomposant les conditions multiples.

Appliquez la démarche

Page 23: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

23

Couverture du flot de contrôle

Page 24: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

24

Couverture du flot de contrôle

1) V(G) = 13-11+2 = 4+1 = 5 5 Chemins indépendants à trouver

2) DT normale = « abcx » Chemin sensibilisé : B1={0,1,2,3,4,5,3,6,4,5,3,6,7,8,9}

3) On choisi la première décision de B1 (1). La première était vrai, on choisi une DT pour l’inverser et donc

sensibiliser le chemin B2 {0,1,9}. Dt=« b » B1 et B2 sont indépendants

3) On choisi la seconde décision de B1 (3) Première itération. Valeur vrai : arc(3,4) Dt dont le seconde caractère est <> de b. Ex DT3={(acx} Chemin sensibilisé : B3 {0,1,2,3,6,4,5,3,6,7,8,9} B1 contient {3,4} qui n’est pas dans B3 et B2 contient {1,9} qui n’est

pas dans B3. B1, B2, B3 sont indépendants 2 à 2 3) Troisième condition….

Page 25: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

25

Couverture du flot de contrôle

Cette technique a mis en évidence 5 DT DT1={abcx} DT2={b} DT3={acx} DT4={ax} DT5={aba}

Ces DT mettent en évidence les chemins de base du graphe précédent.

Nb : les DT 1, 2 et 5 suffisent à satisfaire tous-les-arcs.

Page 26: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

26

Couverture du flot de contrôle

Pour prouver que des chemins sont indépendants, il suffit de trouver un arc qui n’est pas contenu dans les deux chemins

Si il n’y a plus de conditions à étudier sur le chemin initial, on peut enchaîner sur les chemins secondaires mis en évidence

Page 27: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

27

Couverture de flot de contrôle

Exercice: Soit le programme P3 suivant :

If n ≤0 then

n := 1-n

end;

If n pair

Then n := n / 2

Else n := 3*n + 1

end ;

Write(n);

Graphe de flot

Calculer les DT suivant les critères :

tous-les-noeuds, tous-les-arcs, tous-les-chemins-

indépendants

Page 28: 1 Tests et Validation du logiciel 02/2007 – 06/2007.

28

Couverture du flot de contrôle

Critères de test : tous-les-noeuds

n = 0, n = -1 tous-les-arcs

n = 2, n = -2 tous-les-chemins-

indépendants n = -1, n = -2, n = 1,

n = 2