Le Test des logiciels Ifsic 1 Yves Le Traon 2002 Le Diagnostic Yves Le Traon
Le Test des logiciels Ifsic 2 Yves Le Traon 2002 Stratégies de test et diagnostic Stratégie incrémentale Stratégie par recoupements des traces d ’exécution Stratégie par suppression puis réintroduction Slicing du programme Utilisation d ’assertions/programmation par contrats
Le Test des logiciels Ifsic 3 Yves Le Traon 2002 Stratégies de test Combinatoires All-Paths Multiple-Clue
Le Test des logiciels Ifsic 4 Yves Le Traon 2002 Stratégies de test: Multiple clue
Le Test des logiciels Ifsic 5 Yves Le Traon 2002 Stratégies de test: Multiple clue
Le Test des logiciels Ifsic 6 Yves Le Traon 2002 Stratégies de test : Start-Small
Le Test des logiciels Ifsic 7 Yves Le Traon 2002 Stratégies de test: Start-Small m ij = 1 si l’écoulement E i active le module M j
Le Test des logiciels Ifsic 8 Yves Le Traon 2002 Diagnostic: slicing program sumofoddnbr; var n,sum,i:integer; begin sum:=0; i:=1; read(n); while n>0do begin sum:=sum+i; i:=i+2; n:=n-1; end; write(sum); end Slice statique pour n program sumofoddnbr; var n,sum,i:integer; begin sum:=0; i:=1; read(n); while n>0do begin sum:=sum+i; i:=i+2; n:=n-1; end; write(sum); end
Le Test des logiciels Ifsic 9 Yves Le Traon 2002 Slicing (Weiser) Le slicing consiste à abstraire la partie du programme qui influence les valeurs d’une variable (ou l’exécution d’une instruction) problème indécidable utile en test pour: –analyse statique de chemins (couverture) –sensibilisation dynamique de chemins (Korel & Co.) –débogage/diagnostic autres applications : compilation efficace, parallélisation.
Le Test des logiciels Ifsic 10 Yves Le Traon 2002 Slicing Slicing de x, ligne 10 ? read(n) i:=1 sum:=0; while (i<=n) do begin if (i mod 2 = 0) then x:= 17 else x:=18; endif sum:= sum + i; i:= i+1; end; write(x); write(sum); Slice statique pour n ? read(n) i:=1 sum:=0; while (i<=n) do begin if (i mod 2 = 0) then x:= 17 else x:=18; endif sum:= sum + i; i:= i+1; end; write(x); write(sum);
Le Test des logiciels Ifsic 11 Yves Le Traon 2002 Slicing dynamique Slice dynamique souvent imprécis: en test on peut disposer de la donnée effective read(n) i:=1 sum:=0; while (i<=n) do begin if (i mod 2 = 0) then x:= 17 else x:=18; endif sum:= sum + i; i:= i+1; end; write(x); write(sum); X, ligne 10 n=2
Le Test des logiciels Ifsic 12 Yves Le Traon 2002 procedure sum2 (n:integer;var s2:integer); begin s2:=decrement(n) * n div 2 end; procedure sum1(n:integer;var s1:integer); begin s1:=n * increment(n) div 2 end; procedure partialsums (n:integer; var s1,s2:integer); begin sum1(n,s1); sum2(n,s2) end; procedure compute2 (n:integer; var r2:integer); var s1,s2:integer; begin partialsums(n,s1,s2); add(s1,s2,r2) end; procedure square(n:integer; var r1:integer); begin r1:= n * n end; program Main; var isok :boolean; procedure test (r1,r2:integer; var isok:boolean); begin isok:=r1=r2 end; procedure add (s1,s2:integer; var r2:integer); begin r2:=s1+s2 end; function decrement(n:integer):integer; begin decrement:=n+1(*à la place de n-1*) end; function increment(n:integer):integer; begin increment:=n+1 end;
Le Test des logiciels Ifsic 13 Yves Le Traon 2002 procedure compute1 (n:integer; var r1:integer); begin square(n,r1) end; procedure computes (n:integer; var r1,r2:integer); begin compute1(n,r1); compute2(n,r2) end; procedure sqrtest (n:integer; var isok:boolean); var r1,r2:integer; begin computes(n,r1,r2); test(r1,r2,isok) end; (* Programme principal *) begin sqrtest(3,isok) end. cas de test in=3 résultat attendu : out=isok=true résultat obtenu : out=isok=false "test" dépend de "computes" et la procédure "computes" de "computes1" et de "computes2" Graphe d’appel
Le Test des logiciels Ifsic 14 Yves Le Traon 2002 Main sqrtest in=3 out:isok=false test computes out:r1=9 in=3 compute2 compute1 in=3 out:r1=9 square in=3 out:r1=9 partialsums in=3 out:s1=6 add in:s1=6 out:r2=12 sum1 sum2 out:s2=6 in=3 out:s1=6 increment decrement in=3 out=4 in=3 out=4 s2=6 r2=12 in=3 out:r2=12 in:r1=9 r2=12 out:isok=false s2=6 graphe d'appel. dépendances de données à l'appel. Interprocedural slicing
Le Test des logiciels Ifsic 15 Yves Le Traon 2002 program sumofoddnbr (input,output); var n,sum,i,s:integer; procedure init (var sum,i,n:integer); begin sum:=0; i:=1; read(input,n) end; procedure add (var a:integer;b:integer); begin a:=a+b end; procedure increment2 (var c:integer); begin c:=c+2 end; procedure decrement1 (var d:integer); begin d:=d-1 end; procedure summation (var s,i,n:integer); begin add(s,i); increment2(i); decrement1(n) end; begin (*main*) init(s,i,n); while n>0 do summation(s,i,n); sum:=s; write(output,sum) end.
Le Test des logiciels Ifsic 16 Yves Le Traon 2002 –Chaque noeud représente une procédure (ou une instruction) telle que les variables d’entrée sont des utilisation (uses(n)) et les variables de sortie sont des définitions (defs(n)) d'une instruction. –Les arcs entre les procédures représentent les dépendances des données et les dépendances de contrôle. –Les flèches des (uses(n)) aux (defs(n)) pour une variable représentent les relations (defs-uses).
Le Test des logiciels Ifsic 17 Yves Le Traon 2002 Slicing le cas de test considéré (n=1)Couv.={d1u3, d2u4, d3u2, d4u7}. Une faute a été détectée à la sortie de p8 (u7)
Le Test des logiciels Ifsic 18 Yves Le Traon 2002 (d1) (d2) (u1)(d3) (u2) u7)d7) (u3)(u4) d4 (u5)(d5) (u6)(d6) sumofoddnbr (( p1 p2 p3 p4 p5 p6 p7 p8 graphe d'appel les relations uses-defs
Le Test des logiciels Ifsic 19 Yves Le Traon 2002 (d1) (d2) (u1)(d3) (u2) u7)d7) (u3)(u4) d4 sumofoddnbr (( p1 p2 p3 p4 p5 p8 graphe d'appel les relations uses-defs 1
Le Test des logiciels Ifsic 20 Yves Le Traon 2002 Dicing
Le Test des logiciels Ifsic 21 Yves Le Traon 2002 Slicing : avantages 1) Les coupes sont obtenues automatiquement 2) Une coupe est une sous-partie du programme pouvant être exécutée indépendamment 3) L'analyse permet une localisation très précise de la faute
Le Test des logiciels Ifsic 22 Yves Le Traon 2002 Slicing : inconvénients 1) Les coupes à analyser sont en général très nombreuses 2) Une coupe n'a, en général, pas de signification fonctionnelle simple 3) L'analyse de chaque slice implique la mise en place d'un oracle (permettant de déterminer si l'exécution est correcte ou non), et (en raison du point 2) nécessite l'intervention humaine. 4) Étant donné le nombre de coupes qu'il faut, en général, analyser ainsi que le fait que cette analyse n'est pas complètement automatisée, le coût de l'application de cette technique est très important.