0% ont trouvé ce document utile (0 vote)
412 vues36 pages

Test structurel : analyse statique et dynamique

Transféré par

lolo TV
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)
412 vues36 pages

Test structurel : analyse statique et dynamique

Transféré par

lolo TV
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

3: Le test structurel

Statique / Dynamique
• Analyse dynamique : nécessite l’exécution du code binaire
Principe : à partir du code source (ou d’un modèle) et spécification, produire des DT
qui exécuteront un ensemble de comportements, comparer les résultats avec
ceux attendus…
1. Techniques de couverture du graphe de contrôle
a) Couverture du flot de contrôle (toutes les instructions, branches,
chemins…)
b) Couverture du flot de données (toutes les définitions de variables, les
utilisations…)
2. Test mutationnel (test par injection de défaut)
3. Exécution abstraite
4. Test évolutionniste (algorithme génétique)
5. …
• Analyse statique : ne nécessite pas l’exécution du code binaire
1. Revue de code
2. Estimation de la complexité
3. Preuve formelle (prouveur, vérifieur ou model-checking)
4. Exécution symbolique
5. Interprétation abstraite

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 132


Test structurel dynamique avec technique de
couverture du graphe de contrôle
But: produire des DT qui exécuteront un ensemble de comportements du programme
• Utilise : spécification, code source et code exécutable a
• Un programme => un graphe de contrôle x<=0 x>0
x:=-x b c x:=1-x
begin
if (x<=0)then x:=-x
else x:=1-x; d
if (x=-1)then x:=1
x=-1 x!=-1
else x:=x+1;
end x:=1 f e x:=x+1

Graphe orienté et connexe (N,A,e,s)


• e: un sommet entrée (a)
g Writeln(x)
• s: un sommet sortie (g)
• Un sommet = un bloc d’instructions
• Un arc = la possibilité de transfert de l’exécution d’un nœud à
un autre

• Une exécution possible = un chemin de contrôle dans le


graphe de contrôle
[a,c,d,e,g] est un chemin de contrôle
[b,d,f,g] n’est pas un chemin de contrôle
P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 133
Expression des chemins d’un graphe de contrôle
Le graphe G peut être exprimé sous une forme algébrique : soit M a
l’ensemble des chemins de contrôle du graphe G :
x<=0 x>0
M = abdfg+abdeg+acdfg+acdeg
x:=-x b c x:=1-x
= a.(bdf+bde+cdf+cde).g
= a.(b+c)d.(e+f).g (expression des chemins de G)
d

Construction de l’expression des chemins : x=-1 x!=-1


x:=1 f e x:=x+1
séquentielle alternative itérative
a
g Writeln(x)
a a

b c G
b b c

ab a.(b+c).d a.(ba)*.c
a.(ba)4.c
P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 134
Notation utilisée (pour rappel…)

Soit X={a,b,c} un alphabet

• ε le mot vide

• (cb)2=cbcb

• b+=b+b2+b3+b4+b5+ …

• b*=ε+b+b2+b3+b4+b5+ …

• b4=ε+b+b2+b3+b4

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 135


Chemin exécutable
Read(x) a Read(x)
if (x<=0)then x:=-x x<=0 x>0
else x:=1-x;
x:=-x b c x:=1-x
if (x=-1)then x:=1
else x:=x+1;
Writeln(x)
d

x=-1 x!=-1
DT1={x=2}
x:=1 f e x:=x+1
DT1 sensibilise le chemin [acdfg] : [acdfg] est un
chemin exécutable
g Writeln(x)
[abdgf] est un chemin non exécutable : aucune DT
capable de sensibiliser ce chemin
Sensibiliser un chemin peut parfois être difficile :
intérêt des outils automatiques (mais attention
problème de trouver des DT qui sensibilise un
chemin est non décidable)
Existence de chemins non exécutables : signe de
mauvais codage ?

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 136


Chemin exécutable / chemin non exécutable

• Nombre de chemins de contrôle de G :


• se déduit directement de l’expression des chemins de G
• a(b+c)d(e+f)g => 1.(1+1).1.(1+1).1 = 4 chemins de contrôle
• Nb chemins exécutables + Nb chemins non exécutables
• Parfois le Nb chemins non exécutables peut être important :
s:=0
a i:=1
begin
s:=0;
for i:=1 to 1000 do s:=s+a[i]; b i>1000
end i<=1000

c d
Expression des chemins de G2 : a.b.(cb)1000.d s:=s+a[i]
i:=i+1
G2
Nombre de chemins :
1.1.(1.1)1000.1 = 11000 = 1+11+12+ … +11000=1001

Parmi ces 1001 chemins, un seul est exécutable: a.b.(cb)1000.d


P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 137
Exercice 1
lire(b,c,x); • Donner le graphe de contrôle G(P3)
if b<c associé au programme P3.
then begin
d :=2*b ; • Donner 3 chemins de contrôle du
f :=3*c graphe G(P3).
if x>=0
then begin • Donner l’expression des chemins de
y := x ; contrôle de G(P3).
e := c ;
if (y=0) • Soit DT1={b=1,c=2,x=2}. Donner le
then begin chemin sensibilisé par DT1.
a :=f-e ;
if d<a • On s’intéresse aux instructions en
then begin italique… Donner des DT qui vont
writeln(a) couvrir ces instructions.
end
• Donner un chemin de contrôle non
else begin
exécutable de G(P3).
writeln (d)
end
end
end
end

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 138


Problème des chemins non exécutables

• Étant donné un chemin qu'on a envie de sensibiliser, comment


trouver une DT qui exécute ce chemin ? Problème très difficile:
1. décider si le chemin est exécutable ou pas;
2. s'il l'est trouver une DT.

Le problème 1 est indécidable.

[indécidable = formellement impossible de construire un algorithme


général qui décide de l'exécutablilité ou de la non exécutabilité
de n'importe quel chemin]

La présence de chemins non-exécutables est souvent signe de


code mal écrit, voire erroné !

Il existe des outils (plus ou moins automatiques) de sensibilisation


de chemins (basés sur l'interprétation abstraite ou sur des
techniques de vérification de programmes)

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 141


Exercice 2
Lire(choix) 1. Donner le graphe de contrôle
correspondant au programme P4.
if choix=1
2. Donner l’expression des chemins de
then x=x+1 ; contrôle de G(P4). En déduire le
nombre de chemins de contrôle.
if choix=2
3. Donner les chemins de contrôle non
then x=x-1 ;
exécutables. Conclure.
writeln(choix ;
4. Proposer une nouvelle solution pour
ce programme. Construisez son
graphe de contrôle et donner
l’expression des chemins de contrôle
ainsi que le nombre de chemins de
contrôle.

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 142


Exercice 3

1. Écrivez un algorithme de recherche de l’emplacement d’un


élément e dans un tableau T.

2. Donner le graphe de contrôle associé.

3. Donner l’expression des chemins.

4. Dans le cas où le tableau a une taille de 3, donner le nombre de


chemins de contrôle.

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 145


Interro
lire(b,c,x)
if b<c 1. Donnez un graphe de contrôle associé
then begin
au code source fourni.
d :=2*b
f :=3*c
if x>=0 2. Votre graphe de contrôle a-t-il des
then begin possibilités de réduction ?
y := x
e := c 3. Si oui, réduisez votre graphe de
if (y=0) contrôle.
then begin
a :=f-e
while d<a
begin
d:=d+2
end
end
end
else begin
b:=b-1
end
end

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 148


0 lire b,c,x

1
Interro (correction)
b>=c b<c

2 d:=2*b; f:=3*c lire(b,c,x)/*0*/


if b<c /*1*/
3 then begin
x<0 x>=0 d :=2*b /*2*/
9 b:=b-1 4 y:=x; e:=c f :=3*c
if x>=0 /*3*/
then begin
5 y := x /*4*/
y!=0 y=0
e := c
6 a:=f-e if (y=0) /*5*/
then begin
a :=f-e /*6*/
7 while d<a /*7*/
d>=a begin
d<a d:=d+2 /*8*/
end
8 end
d:=d+2 end
else begin
b:=b-1/*9*/
end
end
0 lire b,c,x

1
Interro (correction)
b>=c b<c

2 d:=2*b; f:=3*c lire(b,c,x)/*0*/


if b<c /*1*/
3 then begin
x<0 x>=0 d :=2*b /*2*/
9 b:=b-1 4 y:=x; e:=c f :=3*c
if x>=0 /*3*/
then begin
5 y := x /*4*/
y!=0 y=0
e := c
6 a:=f-e if (y=0) /*5*/
then begin
a :=f-e /*6*/
7 while d<a /*7*/
d>=a begin
d<a d:=d+2 /*8*/
end
8 end
d:=d+2 end
else begin
b:=b-1/*9*/
end
end
01 lire b,c,x

b>=c b<c
Interro (correction)
23 d:=2*b; f:=3*c lire(b,c,x)/*0*/
if b<c /*1*/
x<0 x>=0 then begin
d :=2*b /*2*/
9 b:=b-1 45 y:=x; e:=c f :=3*c
if x>=0 /*3*/
then begin
y!=0 y=0 y := x /*4*/
e := c
6 a:=f-e if (y=0) /*5*/
then begin
a :=f-e /*6*/
7 while d<a /*7*/
d>=a begin
d<a d:=d+2 /*8*/
end
8 end
d:=d+2 end
else begin
b:=b-1/*9*/
end
end
Satisfaction d’un test structurel avec couverture

Soit T un test structurel qui nécessite la couverture d’un ensemble


de chemins {δ1, … , δk} du graphe de contrôle.
On notera : T= {δ1, … , δk}

Soit DT une donnée de test qui sensibilise le chemin de contrôle C.

• Définition: DT satisfait T ssi C couvre tous les chemins de T.

• Exemple : Soient le graphe de contrôle G5, δ1=cdebcde, δ2=ce


et T1= {δ1, δ2}. a
read(i);
s:=0;

DT1 ={a[1]=-2, a[2]=3, a[3]=17,i=1} satisfait-il T1 ? i>3


DT1 sensibilise M1=abcebcdebcdebf b
i<=3
M1= abcebcdebcdebf couvre δ1=cdebcde
a[i]>0
M1=abcebcdebcdebf couvre δ2=ce c f
Donc DT1 satisfait T1 a[i]<=0

e d
DT2 ={a[1]=-2, a[2]= 3, a[3]=-17,i=1} satisfait-il T1 ?
i:=i+1; s:=s+a[i];
G5
P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 152
Hiérarchie des techniques de test structurel

• Exemple : considérons le graphe de contrôle G5 et les 2 tests


structurels avec couverture T1 et T2 définis par :

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

δ3=de, δ4=b, δ5=cd et T2= {δ3, δ4 , δ5}.

Lorsque T1 est satisfait, T2 l’est aussi : pourquoi ?

T1 est un test plus fiable (ie. ‘fort’) que T2 et on notera :


T1 ⇒ T2

• ⇒ est une relation d’ordre partielle (réflexive, antisymétrique,


transitive)

• ⇒ permet de définir une hiérarchie entre les différentes


techniques structurelles de test (relation d’ordre partielle)

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 153


Deux catégories de critère de couverture

• Approche ‘Flot de contrôle’ avec


couverture de tous les arcs :
DT1={x=-2, y=0} sensibilise le chemin
M1=abcd a read(x,y)
DT2={x=1, y=0} sensibilise le chemin x pair x impair
M2=ace y:=y+x/2 b
• Si l’affectation du nœud b est
erronée, cette erreur ne sera pas
détectée par DT1 et DT2. c
x<0 x>=0
• Approche ‘Flot de données’ d e
y:=-x writeln(y)
L’affectation de y au nœud b n’est pas writeln(y)
G4
utilisée par DT1 et DT2 : il faudrait
tester le chemin abce sensibilisé par
la DT3={x=2, y=0}

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 154


Couverture sur le flot de contrôle

• Critère de couverture « tous-les-nœuds »


But : sensibiliser tous les chemins de contrôle qui nous
permettent de visiter tous les nœuds du graphe de contrôle.
Taux de couverture : TER1 (Test Effectiveness Ratio 1 ou C1)
TER1 = |{nœuds couverts}| / |{nœuds}|

• Critère de couverture « tous-les-arcs »


Si on chercher à couvrir tous les nœuds sans couvrir tous les
arcs, on risque de ne pas détecter certains défauts sur les
arcs non couverts…
But : sensibiliser tous les chemins de contrôle qui nous
permettent de visiter tous les arcs du graphe de contrôle.
TER2 = |{arcs couverts}| / |{arcs}|
• Hiérarchie des tests
« tous-les-arcs » ⇒ « tous-les-noeuds »

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 155


Exercices 4
1. Donner un graphe de contrôle G et des données de test DTi montrant
que le critère « tous les noeuds » est insuffisant pour détecter une
erreur.
• Calculer le taux de couverture TER1 et TER2 pour votre DT.

2. Complétez le programme suivant qui calcule l’inverse de la somme des


éléments, d’indice entre inf et sup, d’un tableau a contenant des
entiers strictement positifs :
lire (inf,sup);
i:=inf;
sum:=0;
while (i<= sup)
do begin
sum:=sum+a[i];
…/…
• Tester le programme avec DT1={a[1]=1; a[2]=2;
a[3]=3;inf=1;sup=3}. Que se passe-t-il ?
• Calculer TER1 et TER2.

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 156


Couverture sur le flot de contrôle (suite)

• Critère de couverture «tous-les- chemins- indépendants »


V(G) (le nombre de Mc Cabe ou nombre cyclomatique) donne le
nombre de chemins indépendants.
V(G)=#arcs - #noeuds + 2 [Si que des décisions binaires :
V(G)=Nombre de nœuds de décision + 1]
(Ce nombre est aussi le nombre de régions du graphe)
Taux de couverture :
|{chemins indépendants couverts}| / V(G)
• Hiérarchie des tests
« tous-les-chemins-indépendants » ⇒ « tous-les-arcs »

Exercice 5: Donner le nombre Mc Cabe du graphe associé au


programme suivant :
if C1 then while (C2) do X1;
else X2;
X3;

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 159


Exercices 6

1. Donner le nombre de chemins indépendants du graphe G.


2. Donner une DT1 qui sensibilise M1=[abcbcbcbd].
3. Donner une DT2 qui sensibilise M2=[abd].
4. (M1,M2) constitue une base : donner une relation qui lie M1,
M2 et M3=[abcbd].
5. Calculer le taux de couverture du critère tous-les-chemins-
indépendants associé à DT1 U DT2.
lire (inf,sup);
a i:=inf;
som:=0;
u1

b i>sup

u3 u2 i<=sup u4

c d
som:=som+a[i] écrire(1/som);
i:=i+1
Graphe G

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 161


Couverture sur le flot de contrôle (suite)

• Couverture des PLCS (Portion Linéaire de Code Suivie d'un


Saut)

PLCS : « séquence d'instructions entre deux branchements »

Principes : 2 types de nœuds dans le graphe de flot de contrôle


Type a (ou nœud ‘saut’) : l’entrée, la sortie et les nœuds qui
constituent l’arrivée d’un branchement
Type b : les autres nœuds

Définition : On appelle PLCS un chemin partant d’un nœud ‘saut’ et


aboutissant à un nœud ‘saut’ ; l’avant dernier et le dernier nœud
doivent constituer le seul saut du chemin.

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 164


Couverture du critère PLCS : Exemple
K05
Soit le programme : K05
005 INPUT A, C K20
010 B= 2*A K20
020 A=A+1 K30
030 IF A<0 THEN GOTO 60 K30
040 B= -A K40
K40
050 PRINT A+B
060 IF B=2*C THEN GOTO 80 K60
K60
070 A=1:GOTO 90
K70
080 A=-2:GOTO 20 K70
090 PRINT A
saut K80
100 END K80
Donner le graphe de contrôle.
K90
Repérer les nœuds de type ‘saut’. K90
Donner les PLCS. K05 Type ‘saut’ K100
K100

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 165


Couverture du critère PLCS : Exemple
K05
Le programme contient 9 PLCS :
[5, 20, 30, 60] K20
[5, 20, 30, 40, 60, 80]
[5, 20, 30, 40, 60, 70, 90] K30
[20, 30, 60]
[20, 30, 40, 60, 80] K40
[20, 30, 40, 60, 70, 90]
[60, 80] Incluses dans les 3 premières…
K60
[60, 70, 90]
[80, 20] K70

K80
Si on exécute les 3 chemins :
B1 = [5, 20, 30, 60, 70, 90, 100]
B2 = [5, 20, 30, 40, 60, 80, 20, 30, 60, 70, 90, 100] K90
B3 = [5, 20, 30, 40, 60, 70, 90, 100]
=> Couverture de la totalité des PLCS K100

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 166


Couverture sur le flot de contrôle (suite)

Taux de couverture
TER3 (Test Effectiveness Ratio 3 ou C3)
TER3 = |{PLCS couvertes}| / |{ PLCS }|

Hiérarchie des tests

• Hiérarchie : TER3=1 ⇒ TER2=1

Autres critères de type PLCS


• Chemins composés de 2 PLCS
TER4 = |{chemins composés de 2 PLCS couverts}| / |{chemins
composés de 2 PLCS }|
• Chemins composés de 3 PLCS, TER5 =

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 167


Couverture sur le flot de contrôle (suite)
Hiérarchie des tests basés sur le flot de contrôle
TER5
tous-les-chemins
TER4

tous-les-chemins-indépendants TER3

tous-les-arcs (TER2)

tous-les-nœuds (TER1)

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 168


Exercice 7

Donnez les PLCS du programme suivant:


main()
{
int i,factoriel;
cin>>n;factoriel=1;
for(i=1;i<=n;i++)
factoriel=factoriel*i;
printf("%d\n",factoriel);
}

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 169


PLCS : une autre définition

Autre définition…

Définition. Un saut est une arête (s,s’) du graphe de contrôle tq :


- s est le sommet initial du graphe ou bien
- s’ est le sommet terminal du graphe ou bien
- s est une condition et s’ est le sommet atteint dans le cas ou
s est évalué à faux ou bien
- s’ est la condition d’une boucle et s le sommet terminal du
corps de cette boucle

• Définition. Une PLCS est un couple [c,s] où c est un chemin


c=s1s2…sk tel que :
- s1 est le sommet d’arrivée d’un saut
- s1s2…sk est sans saut
- (sk,s) est un saut

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 171


Couverture sur le flot de contrôle : pas assez fine !

a read(x,y)
x pair x impair

y:=y+x/2 b

c writeln(y/x)
x<0 x>=0

y:=-x d e
writeln(y) writeln(y)
G4

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 173


Couvertures basées sur le flot de données

Analyse des relations entre instructions en tenant compte des variables


qu’elles utilisent/définissent : on cherchera à couvrir les différentes
façons de définir et d’utiliser les variables…
• variable définie si sa valeur est modifiée (affectation, lecture)
• variable utilisée : si sa valeur est utilisée. 2 classes d’utilisation :
1. p-utilisation : dans le prédicat d’une instruction de décision (if,
while,…)
2. c-utilisation : dans les autres cas (utilisation de la valeur d’une
variable pour un calcul)
while (i<N) ← i et N sont p-utilisées
do begin
s := s + i; ← s et i sont c-utilisées, s est définie
i := i + 1; ← i est c-utilisée puis définie
end;
writeln (s); ← s est c-utilisée
P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 174
Couvertures basées sur le flot de données

Une instruction I est utilisatrice d’une variable x par rapport à une


instruction de définition J si :
• x est définie en I et référencé en J
• x n’est pas redéfinie entre I et J

1 read(x,y);
Exemple:
2 • L’arc (2, 4) est p-utilisateur de x par
x >=100 rapport au nœud 1
• L’instruction ‘x:=x*y’ est c-utilisatrice de
x<100
y par rapport au nœud 1
3 4
x:=x*y;
y:=y+1;
P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 175
Couvertures basées sur le flot de données

Un chemin d’utilisation (c-utilisation ou p-utilisation) est un


chemin reliant l’instruction de définition d’une variable à une
instruction utilisatrice.

1 read(x,y);

2
Exemple : [1,2,4] est un chemin p-utilisation
x >=100 pour la variable x.

x<100
3 4
x:=x*y;
y:=y+1;
P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 176
Couvertures basées sur le flot de données

Critères

Le critère tous-les-utilisateurs nécessite la couverture de tous les


utilisateurs (nœuds c-utilisateurs ou arcs p-utilisateurs) pour
chaque définition et pour chaque référence accessible à partir
de cette définition. [tous-les-p-utilisateurs et tous-les-c-
utilisateurs]

Le critère toutes-les-définitions nécessite que l’on couvre au


moins un chemin d’utilisation pour chaque définition du graphe.

tous-les-utilisateurs ⇒ toutes-les-définitions

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 177


Critère tous-les-du-utilisateurs

• Couverture du critère toutes-les-définitions :

[abdfg] [acdeg]
a Read(x)
• Couverture du critère tous-les-utilisateurs :
x<=0 x>0
y:=-1 b c y:=1 [abdfg] [acdeg]

Remarque : Ces 2 tests ne couvrent pas tous les


d chemins d’utilisations : si on rajoute au critère tous-
x2>1 x2<=1 les-utilisateurs le fait qu’on doit couvrir tous les
z:=2 f e z:=-2 chemins possibles entre définition et référence (en
se limitant aux chemins sans cycle) on obtient le
critère tous-les-du-utilisateurs
g Writeln(y*z)
• Couverture du critère tous-les-du-utilisateurs :

[abdfg] [abdeg] [acdfg] [acdeg]

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 178


Hiérarchie des tests structurels

tous-les-chemins TER5

tous-les-du-utilisateurs TER4

tous-les-utilisateurs tous-les-chemins-indépendants TER3

tous-les-c-utilisateurs tous-les-p-utilisateurs tous-les-arcs (TER2)

toutes-les-définitions tous-les-nœuds (TER1)

P.Félix ~ IUT Info Bordeaux 1 - S4 - McInfo4_ASR Tests - Janvier 2008 179

Vous aimerez peut-être aussi