Vous êtes sur la page 1sur 30

Conception et Vrication

Mthodes de test en bote blanche

Delphine Longuet
http://www.lri.fr/~longuet delphine.longuet@lri.fr

Test bote noire


Slection des tests partir d'une spcication du systme (formelle ou informelle), sans connaissance de l'implantation
Spcication slection Tests Systme Rsultats des tests Rsultats attendus Verdict

oracle excution

Possibilit de construire les tests pendant la conception, avant le codage


2

Test bote blanche


Slection des tests partir de l'analyse du code source du systme

Spcication slection

Rsultats attendus Verdict

oracle Tests excution Systme Rsultats des tests

Construction des tests uniquement pour du code dj crit


3

Mthodes d'analyse du code


Ex : Fonction calculant X N function puissance(X : int, N : pos) : int S:=1; P:=N; while P>=1 do S:=S*X; P:=P-1; endwhile; return S;
4

Mthodes d'analyse du code


Ex : Fonction calculant X N
E S:=1 P:=N dX dN E S:=1 P:=N dS uN dP

P>=1 v S:=S*X P:=P-1

uP S P>=1 v

S uS

S:=S*X uS uX dS P:=P-1 u d P P

Graphe de contrle

Flot de donnes

Slection de tests partir du code


Ide : Couvrir les chemins d'excution du systme Problme : Nombre de chemins inni Dnir des critres de couverture Critre de couverture : lment du code couvrir par les tests (nuds, arcs, couples de dnition-utilisation d'une variable...) Objectifs de test dnis sur la structure du code

Graphe de contrle
Graphe orient avec un nud initial E et un nud nal S tel que : un nud interne est soit un bloc d'instructions lmentaires, soit un nud de dcision tiquet par une condition un arc relie les nuds correspondant des instructions ou dcisions successives (ot de contrle)
S:=1; P:=N; while P>=1 do S:=S*X; P:=P-1; endwhile; P>=1 v S:=S*X P:=P-1
7

S:=1 P:=N f

Encore l'exemple du triangle


procedure triangle(j,k,l : positive) eg := 0; if j+k<=l or k+l<=j or l+j<=k then write(impossible); else if j=k then eg:=eg+1; endif; if j=l then eg:=eg+1; endif; if l=k then eg:=eg+1; endif; if eg = 0 then write(scalene); elsif eg = 1 then write(isocele); else write(equilateral); endif; endif;

Graphe de contrle associ


E eg:=0 j+k<=l or k+l<=j or l+j<=k f j=k f j=l f l=k f eg=0 f f eg=1 v v v v v eg:=eg+1 v write(impossible)

eg:=eg+1

eg:=eg+1

write(scalene)

write(equilateral)

write(isocele)

Graphe de contrle associ


E eg:=0 j+k<=l or k+l<=j or l+j<=k f j=k f Chemin infaisable j=l f l=k f eg=0 f f eg=1 v v v v v eg:=eg+1 v write(impossible)

eg:=eg+1

eg:=eg+1

write(scalene)

write(equilateral)

write(isocele)

Chemins du graphe de contrle


Excution : Chemin allant de E S dans le graphe de contrle Chemin : Ensemble de conditions sur les variables d'entre Excution relle : Chemin dont les conditions peuvent tre satisfaites Si conditions impossibles satisfaire, chemin infaisable Pas de test possible pour couvrir ce chemin Problme : Comment dtecter les chemins infaisables ?

Chemins du graphe de contrle


Existence de chemins infaisables : Problme indcidable Ex : Suite de Syracuse On ne sait pas si ce programme termine toujours, donc s'il existe des chemins infaisables de E S
E while x<>1 do if pair(x) then x:=x/2; else x:=3*x+1; endif; endwhile; f

x<>1 v v x:=x/2 pair(x)

x:=3*x+1

Chemins du graphe de contrle


Existence de chemins infaisables : Problme indcidable Mais : On sait calculer les conditions pour qu'un chemin donn soit faisable (conditions de chemin)
On a x = x0 en entre Conditions pour passer une seule fois par la boucle dans le then : x0 <> 1 et x0/2 = 1 Donc il faut que x0 = 2 et pair(x0) v x:=x/2 E f

x<>1 v pair(x)

x:=3*x+1

Excution symbolique
Soit P un chemin de E S dans le graphe de contrle On donne des valeurs symboliques aux variables x0, y0, z0...

On initialise la condition de chemin true On suit le chemin P nud par nud depuis E : si le nud est un bloc d'instructions, on excute les instructions sur les valeurs symboliques

si le nud est un bloc de dcision tiquet par une condition C :

si on suit la branche du then, on ajoute C la condition de chemin si on suit la branche du else, on ajoute la ngation de C la condition de chemin

Excution symbolique
x
E P1 x<>1 P2 v B1 x:=x/2 v pair(x) f B2 f

conditions x0 <> 1 pair(x0) x0/2 = 1

E
S

x0 x0 x0 x0/2 x0/2 x0/2

P1 P2 B1 P1 S

x:=3*x+1

Condition de chemin : x0 <> 1 et pair(x0) et x0/2 = 1 Satisfaite par x0 = 2

Excution symbolique
x
E P1 x<>1 P2 v B1 x:=x/2 v pair(x) f B2 f

conditions x0 <> 1 not pair(x0) 3*x0+1 = 1

E
S

x0 x0 x0 3*x0+1 3*x0+1 3*x0+1

P1 P2 B2 P1 S

x:=3*x+1

Condition de chemin : x0 <> 1 et not pair(x0) et 3*x0+1 = 1 Impossible satisfaire : chemin infaisable

Critres de couverture
Critre de couverture : Condition caractrisant un ensemble de chemins du graphe de contrle Gnration de tests grce un critre de couverture : Slectionner un ensemble (minimal) de chemins satisfaisant le critre liminer les chemins infaisables. Chaque chemin faisable dnit un objectif de test (ensemble de conditions sur les entres) Gnrer un cas de test pour chaque chemin (choisir des valeurs satisfaisant l'ensemble de conditions associ au chemin)

Critres de couverture
Critre tous les nuds : Satisfait par un ensemble de chemins T si pour chaque nud du graphe, il existe un chemin dans T passant par ce nud Remarque : Ne couvre pas ncessairement tous les arcs
f x:=1

x=0 v On ne teste pas le cas o x = 0

y:=1/x

Critres de couverture
Critre tous les arcs : Satisfait par un ensemble de chemins T si pour chaque arc du graphe, il existe un chemin dans T passant par cet arc Remarque : Ne couvre pas ncessairement toutes les dcisions

a<2 && b=a f x:=2-a v x:=a-2

{a = 1, b = 1} et {a = 3, b = 3} couvrent tous les arcs mais pas le cas o b <> a

Critres de couverture
Critre tous les arcs : Satisfait par un ensemble de chemins T si pour chaque arc du graphe, il existe un chemin dans T passant par cet arc Remarque : Ne couvre pas ncessairement toutes les dcisions Solution : Dcomposer les conditionnelles multiples
a<2 && b=a f x:=2-a v x:=a-2 f f b=a v f a<2 v b=a v x:=a-2

x:=2-a

Critres de couverture
Critre tous les chemins : Impossible satisfaire ds qu'il y a des boucles Aaiblissement : tous les chemins de longueur au plus k Pour une boucle simple, choisir des chemins passant par la boucle : aucune fois une fois, deux fois un nombre typique de fois n-1, n, n+1 fois, avec n le nombre maximum d'itrations

Hirarchie des critres de couverture pour le graphe de contrle

tous les chemins tous les chemins de longueur au plus k tous les arcs tous les noeuds
plus fort que

Flot de donnes
Flot de donnes : Annotation du graphe de contrle par les dnitions et utilisations de variables y := x+1 : utilisation de x et dnition de y x := x+1 : l'utilisation de x prcde sa dnition
dX dN E S:=1 P:=N uP P>=1 v S:=S*X uS uX dS P:=P-1 u d P P dS uN dP f S uS

On note dX la dnition de X et uX son utilisation

Flot de donnes
Critres de couverture : Couples dnition-utilisation d'une variable Problme : Comment choisir ces couples ? Statiquement : Une utilisation peut correspondre plusieurs dnitions Dynamiquement : Chaque utilisation correspond une seule dnition Anomalies du ot de donnes : Prsence d'une anomalie dans un chemin s'il est de la forme : uX... (commence par une utilisation)

...dX (nit par une dnition)

...dX dX... (rednit une variable sans l'avoir utilise)

Flot de donnes
Notations (bloc = bloc d'instructions ou dcision) : dB(x) : le bloc B contient une dnition de x

uB(x) : le bloc B contient une utilisation de x

Une dnition dB(x) atteint une utilisation u B'(x) si et seulement si x n'est pas rednit entre les blocs B et B'

Critres de couverture
Critres toutes les dnitions : Satisfait par un ensemble de chemins T si pour toute variable x, pour toute dnition dB(x), il existe au moins une utilisation uB'(x) telle qu'il existe un chemin qui contient BCB' dans T, o C est sans rednition de x x, dB(x), uB'(x), BCB' Intuitivement : Toutes les dnitions sont utilises au moins une fois

Critres de couverture
Critres toutes les utilisations : Satisfait par un ensemble de chemins T si pour toute variable x, pour toute dnition dB(x), pour toute utilisation uB'(x) atteinte par d B(x), pour tout successeur B'' de B', il existe un chemin qui contient BCB'B'' dans T, o C est sans rednition de x x, dB(x), uB'(x), B'', BCB'B'' Intuitivement : Toutes les utilisations accessibles par chaque d nition, en couvrant les deux branches quand B' est une dcision (B'' est un successeur immdiat de B')

Critres de couverture
Critres tous les DU-chemins : Satisfait par un ensemble de chemins T si pour toute variable x, pour toute dnition dB(x), pour toute utilisation uB'(x) atteinte par d B(x), pour tout successeur B'' de B', tous les chemins qui contiennent BCB'B'' tels que C est sans rednition de x et BCB' est sans circuit ou est un circuit lmentaire sont dans T x, dB(x), uB'(x), B'', BCB'B'' Intuitivement : Tous les chemins (lmentaires) pour chaque paire dnition-utilisation (DU)

Hirarchie des critres de couverture pour le ot de donnes

tous les chemins tous les DU-chemins toutes les utilisations toutes les dnitions
plus fort que

Conclusion
Mthodes de slection de tests en bote blanche : Couverture des excutions oriente contrle ou donnes Mesure de la couverture des tests Mthodes outilles (JavaPathFinder, PathCrawler...) Complmentaire au test bote noire Eicace sur des petites portions de code (test unitaire) Tests ddis une implantation : chaque changement de code ncessite de gnrer de nouveaux tests Passe mal l'chelle