UNIVERSITE DE LA MANOUBA
-----¤¤¤¤-----
ECOLE NATIONALE DES SCIENCES DE
L'INFORMATIQUE
Matière : Génie Logiciel 1
Niveau : I.I. 2
A-U : 2016-2017
TD –Test du logiciel
EXERCICE1
Faire la partition en classes des spécifications suivantes et donner ensuite le jeu de test correspondant à cette
partition en utilisant les valeurs frontières quand c’est possible.
1. Une méthode retourne le maximum entre deux nombre.
2. Une méthode retourne vrai si on entre un nombre pair et faux sinon.
3. Une méthode retourne trois fois le nombre entrée + 28 si le nombre est impair et la racine carrée sinon.
4. Un programme prend les couleurs des feux de circulations en entrée et retourne la consigne de sécurité
correspondante.
5. Le gouvernement calcule les impôts de façon différente selon le revenu. 0-20 000 (pas d’impôt), 20 000 à
30 000 (10%), 30 000-40 000 (25%), 40-55 000 (45%),
55 000-75 000 (50%), 75 000+ (55%)
Solution
3.
2.
1. Une méthode retourne le maximum entre deux nombre.
R : D1{(a,b) | a > b};D2{(a,b) | a < b};D3 {(a,b) | a=b}
(5,2), (2,5), (5,5)
Une méthode retourne vrai si on entre un nombre pair et faux sinon.
R : D1{d| d mod 2 = 0}, D2{d| d mod 2 = 1}
(2), (3)
Une méthode retourne trois fois le nombre entrée + 28 si le nombre est impair et la racine carrée sinon.
R : D1{d| d mod 2 = 0}, D2{d| d mod 2 = 1}
(2), (3)
Un programme prend les couleurs des feux de circulations en entrée et retourne la consigne de sécurité
correspondante.
R : D1{rouge}; D2{vert}; D3{jaune}; D4{d| d <> rouge ^ d<> vert ^ d <> jaune}
(rouge), (vert), (jaune), (couleur)
5. Le gouvernement calcule les impôts de façon différente selon le revenu. 0-20 000 (pas d’impôt), 20 000 à
4.
30 000 (10%), 30 000-40 000 (25%), 40-55 000 (45%), 55 000-75 000 (50%), 75 000+ (55%)
R : D1{0 <= d < 20 000}; D2{20 000 <= d < 30 000}; D3{30 000 <= d < 40 000}; D4{40 000 <= d < 55
000}; D5{55 000 <= d < 75 000}; D6{75 000 <= d} D7 {d < 0}
Jeu de test = {-1,0,19 999, 20 000, 29 999, 30 000, 39 000, 40 000, 54 999, 55 000, 74 999, 75000}
EXERCICE2
On considère une procédure 'triangle' qui reçoit en paramètres 3 réels a, b et c qui sont les longueurs des côtés d'un
triangle. La procédure retourne comme résultat un code 0 si le triangle défini par a, b et c est invalide, 1 si le
triangle est équilatéral, 2 si le triangle est isocèle et 3 pour un triangle valide quelconque (ni isocèle, ni équilatéral).
Donner un jeu d'essai exhaustif pour cette procédure testant tous les cas de figure en distinguant les 3 entrées a, b et
Publicité
c.
Solution
Entrée: 3 entiers > 0 (longueurs de cotés)
Sortie: type de triangle déterminé par les 3 entiers (équilatéral,
isocèle, scalène, autre)
(a,b,c) Triangle ? Type de triangle ?
Hypothèse : On peut identifier la classe de D par sa valeur P(D)
D1= {(a, b, c): abc est équilatéral}
D2= {(a, b, c): abc est isocèle}
D3= {(a, b, c): abc est scalène}
D4= {(a, b, c): abc n'est pas un triangle}
Solution plus raffinée
D1= {(a, b, c): est équilatéral}
D21= {(a, b, c): est isocèle et a=b, a≠c}
1/2
D22= {(a, b, c): est isocèle et a=c, b≠c}
D23= {(a, b, c): est isocèle et b=c, a≠b}
D3= {(a, b, c): est scalène, c’est à dire a≠b≠c}}
D41= {(a, b, c): pas un triangle et a >= b+c}
D42= {(a, b, c): pas un triangle et b >= a+c}
D43= {(a, b, c): pas un triangle et c >= a+b}
Exemple de jeu de test :
1. (3, 3, 3) 5. (3, 4, 5) 2. (2, 2, 3) 6. (6, 3, 3)
3. (2, 3, 2) 7. (3, 6, 3) 4. (3, 2, 2) 8. (3, 3, 6)
EXERCICE3
Soit une application de réservation destinée aux joueurs de golf : le golf est fermé les lundis et mardis et est ouvert
de 7h00 à 21h00 le restant de la semaine. La réservation 1 heure avant la fermeture n'est pas prise en compte. Les
départs effectués après 18h00 permettent à un membre de l'équipe de golf d’entrer gratuitement. L'application
permet à l'utilisateur d'entrer son nom d'utilisateur de type string, de choisir une journée de réservation (choix de
dimanche à lundi) et choisir les heures de réservation (choix parmi les tranches de 10 minutes de la journée).
On se propose de tester cette application de réservation de golf en utilisant la technique basée sur la répartition en
classes d'équivalence.
Définir les classes d'équivalence correspondantes à chaque entrée (tout en étant concis et précis) et proposer un jeu
de test pertinent pour chaque classe.
Solution
• Nom d’utilisateur :
D1{golfeurlogin}; D2{d| d <> golfeurlogin}
DT: (golfeurlogin), (fajdlkjfka)
•
Journée : D1{lundi, mardi} D2{mercredi, jeudi, vendredi, samedi, dimanche}
DT: (lundi), (mercredi)
• Heures : D1{d| d < 7 ou d > 20 }; D2{d| 18 <= d <= 20 }; D3 {d| 7 <= d < 18 }
DT{6 :50, 7 :00, 17 :50, 18 :00, 19 :50, 20 :00}
EXERCICE4
Soit le programme suivant :
lire(x)
Publicité
lire(y)
z = 0
signe = 1
si x < 0 alors
signe = -1
x = - x
finsi
si y < 0 alors
signe = - signe
y = - y
finsi
tant que x >= y faire
x = x - y
z = z + 1
fin
z = signe * z
a) Dessiner le graphe de contrôle associé à ce programme en numérotant ses nœuds.
b) Par quelle suite de nœuds faut-il passer pour satisfaire le critère de couverture des instructions ?
Donner un jeu d’essai minimum qui satisfasse ce critère.
Noeuds 1 2 3 4 5 6 7 8 9 10 11 12
2/2
Jeu d’essai (x=-5, y=-2)
c) Par quelle suite de nœuds faut-il passer pour satisfaire le critère de couverture des arcs ?
Donner un jeu d’essai minimum qui satisfasse ce critère.
Nœuds 1 2 5 8 11 12 et
1 2 3 4 5 6 7 8 9 10 11 12
Jeu d’essai (x=2, y=5) et (x=-5, y=-2)
d) on appelle critère de couverture des i-chemins, le critère qui garantit que l’on passe sur tout les chemins
possibles en répétant de 0 à i fois chaque boucle.
Par quelle suite de nœuds faut-il passer pour satisfaire le critère de couverture des 1-chemins?
Donner un jeu d’essai minimum qui satisfasse ce critère
Nœuds
1 2 5 8 11 12 et
1 2 5 8 9 10 11 12
1 2 3 4 5 8 11 12
et 1 2 3 4 5 8 9 10 11 12
1 2 5 6 7 8 11 12
et 1 2 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 11 12
et 1 2 3 4 5 6 7 8 9 10 11 12
Jeu d’essai
(x=2, y=5) (x=5, y=2)
(x=-2, y=5) (x=-5, y=2)
(x=2, y=-5) (x=5, y=-2)
(x=-2, y=-5) (x=-5, y=-2)
EXERCICE5
Publicité
Soient les codes P1 et P2 suivants :
P1
if x < 0 then
x := -x ;
end if ;
z := x ;
P2
if (not ( x=0)) then
y := 5 ;
else
z := z - x ;
end if ;
if (z > 1) then
z := z / x ;
else
z := 0 ;
end if ;
1. Donner les graphes de contrôle pour les programmes P1 et P2.
2. Donner pour P1 un jeu de test qui satisfait le critère de couverture des instructions mais pas celui des arcs
3/2
Le critère de couverture(x = -2) satisfait le critère de couverture des instructions mais pas celui des arcs. Il
faudrait aussi tester ce qui se passe quand x est positif
3. Donner pour P2 un jeu de test qui satisfait le critère de couverture des arcs mais pas celui des chemins
Le jeu d’essai (x=0, z=1), (x=1,z=3) vérifie la couverture des arcs mais pas celle des chemins et ne peut
donc détecter une division par zéro.
(x=0, z=3), (x=1, z=1), (x=0, z=1), (x=1, z=3) vérifie la couverture des chemins et détecte donc la division
par zéro
EXERCICE6
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);
Calculer les DT suivant les critères :tous-les-nœuds, puis tous-les-arcs, puis tous-les-chemins-indépendants
EXERCICE7
Proposer un jeu de tests pour la fonction Function (a, b) en cas de couverture: des nœuds, des arcs et des chemins
indépendants du graphe de flot de contrôle
1 : Function (a, b)
2 : If (a < 10)
3 : c :=a +b
4 : a :a+1
5 : If (b > 10)
Publicité
6 : d := a -b
7 : b :=b-1
8 : EndIf
9 : EndIf
10 : EndFunction
Couverture des instructions :(a=5, b=15)
Couverture des arcs : (5,5) (20,5) (5,15)
Couverture des chemins : e-v +2 = 8-7 +2= 3 chemins indépendants
Jeu de test : (5,5) (20,5) (5,15)
EXERCICE8
Proposer un jeu de tests pour le programme P en cas de couverture: des nœuds, des arcs du graphe de flot de
contrôle
Programme P :
1 : Fonction( int a, int b, int c)
2 : d := a+b+c
3 : if ( a = b )
4 : d := d*2
11 : while ( c > 10)
12 : d := d+b+a
13 : c := c-1
14 : if (b > a)
15 : d := d*5;
4/2
16 : endif
17 : endwhile
18 : endFunction
5 : else if (a = c)
6 : d = d/2
7 : else
8 : d = a
9 : endif
10 : endif
a) Couverture des instructions (à revoir)
D1 {(a,b,c) | b > a, c>10, c<>a}};
D2 {(a,b,c) | a =b,} ;
D3 {(a,b,c) | a<>b, a=c}
(5,10,20), (5,5,5), (5,10,5)
b) D1 {(a,b,c) | a=b, c>10};
D2 {(a,b,c) | b > a, c=a, c > 10};
D3 {(a,b,c) | b > a, c<>a, c >10}
(5,5,15), (15,10,15), (15,10,20)
5/2