Tests et Validation du logiciel 02/2007 – 06/2007
Couverture de flot de contrôle Inconvénients tous-les-chemins-indépendants La modification du flot d’un décision ne génère pas forcément un chemin indépendant Démarche vectorielle. Un « bug » sur un chemin complexe ne sera pas forcément décelé. Un chemin est une combinaison de chemins de base. Couvrir tous les chemins de base, ne signifie pas couvrir tous les chemins.
Couverture de flot de contrôle Exemple : P recherche d’une valeur dans un tableau à 2 valeurs program p (input, output) ; var a : array[1..2] of integer; E, i : integer; begin read(i, E, a[1], a[2]); found:= false; while i <= 2 do if (a[i] = E) then found:= true; else found:= false; i := i + 1; end; writeln(found); Appliquez la démarche
Couverture de flot de contrôle A DT au hasard DT1={i=3} C1=[u1,u2] Modification du sens de 2 DT2={i=1,E=10,a[1]=20, a[2]=10} C2=[u1,u3,u4,u6,u8,u3,u5,u7,u8,u2] Modification du sens de 3 DT3={i=1,E=10,a[1]=1à,a[2]=20} C3=[u1,u3,u5,u7,u8,u3,u4,u6,u8,u2] C2 et C3 ne sont pas indépendant car ils acceptent le même vecteur V=[1,1,2,1,1,1,1,2] C2 et C3 différents mais passent par les mêmes arcs le même nombre de fois. exclusion de DT3
Couverture de flot de contrôle L’ajout de DT aurait permis de trouver d’autres chemins indépendants : DT4={i=1,E=10,a[1]=10,a[2]=10} DT5={i=1,E=10,a[1]=20,a[2]=30} Constat sur les résultats Seul C3 pouvait mettre en évidence le bug, cependant on l’a exclus car elle n’apportait pas de nouveau chemin indépendant
Couverture de flot de contrôle Couverture des PLCS (Portion Linéaire de Code Suivie d’un Saut) Objectif : augmenter le nombre de chemins pour accroître les possibilités de détection d’erreurs
Couverture de flot de contrôle On considère, dans le graphe de flot de contrôle, 2 type de noeuds l’entrée et la sortie et les noeuds qui constituent l’arrivée d’un branchement : type (a) les autres noeuds : type (b). On considère, dans le graphe de flot de contrôle, 2 type d’arcs Ceux qui constituent un saut Les autres noeud On appelle PLCS un chemin partant d’un noeud de type (a) et aboutissant à nouveau à un noeud de type (a); l’avant dernier et le dernier noeud doivent constituer le seul saut du chemin.
Couverture de flot de contrôle Exemple 005 INPUT A, C 010 B = 2 * A 020 A = A + 1 030 IF A < 0 THEN GOTO 60 040 B = -A 050 PRINT A + B 060 IF B = 2 * C THEN GOTO 80 070 A = 1 : GOTO 90 080 A = -2 : GOTO 20 090 PRINT A 100 END
Couverture de flot de contrôle Rappel : On appelle PLCS un chemin partant d’un noeud de type (a) et aboutissant à nouveau à un noeud de type (a); l’avant dernier et le dernier noeud doivent constituer le seul saut du chemin. Exemple : [K20,K30,K40,K60,K80] est un PLCS [K60,K80,K20] n’est pas PLCS (2 sauts)
Couverture de flot de contrôle PLCS : [K5, K20, K30, K60] [K5, K20, K30, K40, K60, K80] [K5, K20, K30, K40, K60, K70, K90] [K20, K30, K60] [K20, K30, K40, K60, K80] [K20, K30, K40, K60, K70, K90] [K60, K80] [K60, K70, K90] [K80, K20] [K90, K100]
Couverture de flot de contrôle Critère de couverture : TER3 = PLCS couvertes / Total des PLCS TER3=1TER2=1TER1=1 Autres critères de type PLCS TER4=Chemins composés de 2 PLCS / Total des chemins composés de 2 PLCS TER5 =Chemins composés de 3 PLCS / Total des chemins composés de 3 PLCS
Couverture de flot de contrôle Couverture des chemins limites et intérieurs Les chemins limites traversent la boucle mais ne l’itèrent pas Les chemins intérieurs itèrent la boucle une seule fois
Couverture de flot de contrôle Couverture des chemins limites et intérieurs Les chemins limites traversent la boucle mais ne l’itèrent pas Les chemins intérieurs itèrent la boucle une seule fois
Couverture de flot de contrôle Chemin limite G1 [1,2,3] Chemin intérieur G1 [1,2,1,2,3] G2 [1,2,4,2,3] Pour satisfaire ce critère de couverture, il faut couvrir tous les chemins intérieurs et limites de chaque boucle
Couverture de flot de contrôle Chemins limites : [1,2,3,5,6] [1,2,4,5,6] Chemins intérieurs : [1,2,3,5,2,3,5,6] [1,2,3,5,2,4,5,6] [1,2,4,5,2,3,5,6] [1,2,4,5,2,4,5,6]
Couverture de flot de contrôle Puissance de cette couverture si on ajoute des chemins qui exécutent 2 fois (ou n fois) la boucle
Couverture de flot de contrôle Le critère MCDC (Modified Condition Decision Coverage) Norme DO178B Pour remplir ce critère il faut satisfaire les contraintes suivantes : Chaque condition doit avoir été au moins une fois Vrai et une fois Fausse La décision doit avoir été au moins une fois Vraie et une fois Fausse Chaque condition seule influe sur le résultat de la décision
Couverture de flot de contrôle Exemple : If ((c1 and c2) or (c3 and c4)) and c5 then Vrai/Faux 2 DTs suffisent au test VRAI : DT1={c1=vrai, c2=vrai, c5=vrai} FAUX : DT2={c5=false} Test exhaustif : 32 combinaisons
Couverture de flot de contrôle Conditions Décision DT c1 c2 c3 c4 C5 ((c1 and c2…. 1 F T 2 3 4 5 6 7