Faculté des Sciences Économiques et de Gestion de Tunis
CHAPITRE4
Test
2014-2015
Définition
« Le test est un processus manuel ou automatique, qui vise à établir qu’un
système vérifie les propriétés exigées par sa spécification, ou à détecter des
différences entre les résultats engendrés par le système et ceux qui sont
attendus par la spécification ». (norme IEEE 729)
Le test vise à mettre en évidence les erreurs d’un logiciel.
27/04/2015
1
Pratique actuelle du Test
Problématique: On ne peut pas tester tout le temps ni tous les cas
possibles
Il faut des critères pour choisir les cas intéressants et la bonne
échelle pour le test
Un logiciel est testé en cours de programmation et à l'issue de cette
phase de programmation par mise en œuvre des données similaires
aux données réelles
Les tests ne vérifient que la présence d'erreurs pas leur absence
Problématique
Plusieurs facteurs contribuent à rendre cette activité difficile:
Complexité du système
Taille
Etc.
Il vaut mieux procéder méthodiquement:
diviser l’étape de tests en phases
Planifier les tests
Utiliser des techniques de tests
27/04/2015
2
Planification des Tests
Planification
Description des principales phases du processus de test.
Procédures d'enregistrement des tests :
Ne pas se contenter d'exécuter les tests, penser systématiquement à
en enregistrer les résultats.
Effectuer un audit pour vérifier que les tests ont été effectués
correctement.
Contraintes
Anticiper ici les contraintes qui risquent d'affecter le processus de
test, comme le manque de personnel, par exemple.
Types de Test
Niveau de détail
(situation dans le CV)
Système
Intégration
Module
Unitaire
Fonctionnel
Robustesse
Boite
Blanche
Boite Noire
Niveau
d’accessibilité
Performance
Ergonomie
Sûreté
Sécurité
Caractéristiques
(ce que l’on veut tester)
27/04/2015
3
Les phases de Test
Test unitaires : Fonctionnement correct des procédures
Test modules : Coopération des modules
Test du sous-système : Certain nombre de modules
Test d'intégration : Fonctionnement correct de l'ensemble
Adéquation aux spécifications des besoins
Test d'acceptation : Données réelles + client
Techniques des Tests
Test fonctionnel : Tests par Boîte Noire (TBN)
Fonction globale du programme
Partitionnement en classes d'équivalence
Test structurel : Tests par Boîte Blanche (TBB)
Inspection de code
Rechercher tous les chemins indépendants
Tester la validité des structures de données
27/04/2015
4
Techniques des Tests: Test par Boite Noire
Le TBN est utilisé pour tester un programme en vérifiant que les
sorties obtenues sont bien celles prévues pour des entrées données.
Le terme Boîte Noire est utilisé car le programme testé n'est pas
étudié.
Données de test
Programme
Résultats d’exécution
Test par Boite Noire : Classes d’équivalence
Méthode: Partition en classes
d’équivalence
définition
C'est une technique qui consiste en
de
la
de
des
d'entrées
données
propriétés communes.
groupes
ayant
Classes
d'entrées
incorrectes
Classes d'entrées
correctes
Le programme doit se comporter
de la même manière pour toutes
les données de la classe.
Exemple : Un programme prenant en entrée
des entiers de 3 chiffres
Publicité
n < 100 : donnée non valide
n > 999 : donnée non valide
100 <= n <= 999 : : donnée valide
Classes de
sorties
27/04/2015
5
Techniques des Tests
Test fonctionnel : Tests par Boîte Noire (TBN)
Test structurel : Tests par Boîte Blanche (TBB)
Techniques des Tests: Test par Boite Blanche
Ce test consiste à analyser la structure interne du programme.
Les données de Test sont produites à partir d’une analyse du code
source.
Technique de vérification statique.
Selon des études, on peut détecter jusqu'à 60% des erreurs d'un
programme par cette technique.
27/04/2015
6
Test par Boite Blanche: Inspection de Code
Toutes les variables du programme sont-elles initialisées avant d'être
utilisées ?
Toutes les constantes ont-elles un nom ?
Pour chaque instruction conditionnelle, la condition est-elle correcte,
est-ce que chaque boucle termine ?
Lorsque l'on traite des tableaux, la borne inférieur est-elle 0, 1 ou autre
valeur ?
Si on utilise un stockage dynamique,
correctement ?
a-t-on alloué
l'espace
Les instructions composées sont-elles correctement parenthésées ?
Test par Boite Blanche: Inspection de Code
C'est une technique qui consiste à passer par tous les chemins
d'exécution possibles du composant, de manière à exécuter toutes les
instructions au moins une fois.
Un test exhaustif de chemins d'un programme est impossible à faire
de manière générale
Chemins d'exécutions : chemins tirés du graphe de flux (graphe de
décision).
si-alors-sinon
faire tant que
cas où
27/04/2015
7
Exemple: Mesure de complexité de Mac Cabe.
Complexité cyclomatique =
Nb. Arcs - Nb. Nœuds +2
Cette mesure donne le nombre de chemins
minimaux. Elle correspond au nombre de régions
du graphe de flot:
début
1
2
3
Supposons un programme représenté
par l’organigramme suivant:
8
6
9
7
4
5
11
10
Exemple: Mesure de complexité de Mac Cabe.
Le nombre cyclomatique
= Nb.Arcs - Nb. Nœuds +2
= 13-11+2= 4
Pour vérifier, on regarde
les
chemins minimaux (un test par
chemin pour
les
possibilités du programme):
toutes
tester
1-11
1-2-3-4-5-10-1-11
1-2-3-6-7-9-10-1-11
1-2-3-6-8-9-10-1-11
1
2
3
4
5
10
11
6
9
7
8
27/04/2015
8
Application 1: Test par Boîte Noire
On considère une procédure 'triangle' qui reçoit en paramètres 3
entiers a, b et c qui sont les longueurs des côtés d'un triangle.
La procédure retourne comme résultat un code:
(cid:1)0 si le triangle défini par a, b et c est invalide,
(cid:1) 1 si le triangle est équilatéral,
(cid:1) 2 si le triangle est isocèle et
(cid:1) 3 pour un triangle valide quelconque (ni isocèle, ni équilatéral).
Donner un jeu d'essai pour cette procédure testant tous les cas de
figure en distinguant les 3 entrées a, b et c.
Application 1: Test par Boîte Noire
2. (a) La procédure 'triangle' renvoie 0 si le triangle est invalide
Triangle est invalide lorsqu'un côté est plus grand que la somme
des 2 autres ou si un côté au moins est nul
a = 10 b = 3 c = 4
a = 0 b = 3 c = 4
a = 0 b = 0 c = 3
a = 3 b = 4 c = 10
a = 3 b = 0 c = 4
a = 0 b = 3 c = 0
Publicité
a = 3 b = 10 c = 4
a = 3 b = 4 c = 0
a = 3 b = 0 c = 0
a = 0 b = 0 c = 0
27/04/2015
9
Application 1: Test par Boîte Noire
(b) 1 si les 3 côtés sont égaux (équilatéral)
a = 3 b = 3 c = 3
(c) 2 si 2 côtés sont égaux (isocèle)
a = 3 b = 3 c = 4
a = 3 b = 4 c = 3
a = 4 b = 3 c = 3
(d) 3 dans les autres cas
a = 3 b = 4 c = 5
Application 2: Test par Boîte Blanche
(x > 10)
a = a + 1;
(x % 2)
b = b + 1;
si
alors
Fin si
si
alors
Fin si
(où x % 2 donne le reste de la division entière de x par 2).
1. 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 satisfait ce critère.
2. 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
satisfait ce critère.
27/04/2015
10
Application 2: Test par Boîte Blanche
1. Couverture des instructions: toute instruction
élémentaire est exécutée au moins une fois
x=12.
(x>10)
a=a+1
2
2. Couverture des arcs
x=5, x=12.
1
3
(x<=10)
(x%2=0)
b=b+1
4
(x%2 <>0)
5
Application 3: Test par Boîte Blanche
Tant que (x >= y)
faire
x=x-y
z=z+1
Fin
z=signe * z
lire(x)
lire(y)
z=0
signe = 1
Si (x < 0)
alors
signe = -1
x = -x
Fin si
si (y < 0)
alors
signe=-signe
y = -y
Fin si
27/04/2015
11
Application 3: Test par Boîte Blanche
lire(x)
lire(y)
z=0
signe = 1
Si (x < 0)
alors
signe = -1
x = -x
Fin si
si (y < 0)
alors
signe=-signe
y = -y
Fin si
Tant que (x >= y)
faire
1
lire(x)
lire(y)
z=0
signe = 1
x=x-y
z=z+1
Fin
z=signe * z
Si (x < 0)
2
Si (y < 0)
4
3
signe = -1
x = -x
5
signe=-signe
y = -y
Tant que (x >= y)
6
z=signe * z
Publicité
8
faire
x=x-y
z=z+1
7
27/04/2015
12
27/04/2015
Application 2: Test par Boîte Blanche
Soit le code suivant ; table[i] dénote le ième élément du tableau table,
les indices variant de 1 au nombre d‘éléments du tableau :
found := false ;
if number of items # 0
then counter := 1 ;
while ( (not found ) and (counter <= number of items) )
loop
if table(counter) = desired element
then found := true ;
end if ;
counter := counter + 1 ;
end loop ;
end if ;
if found
then write(\the desired element exists") ;
else write (\the desired element does not exist") ;
end if
Application 2: Test par Boîte Blanche
found := false ;
if number of items # 0
then counter := 1 ;
Then
while ( (not found ) and (counter <= number of items) )
loop
if table(counter) = desired element
then found := true ;
end if ;
counter := counter + 1 ;
While
end loop ;
end if ;
if found
then write(\the desired element exists") ;
else write (\the desired element does not exist") ;
end if
Then
IF
6
3
4
5
1
Found=false
IF
2
Counter:=1c
Else
Else
7
Else
9
10
11
12
13
Application 4: Test par Boîte Blanche
Soit le programme de comparaison de chaînes de caractères suivant
exprimé en pseudo code :
equal : un booléen
string1, string2 : chaîne de caractères
Lire(string1, string2)
SI (string1.length = string2.length) // sring1.length donne la longueur de
la chaîne string1
Alors i (cid:2) 1 // la flèche correspond à une affectation = teste une égalité
Tant que ((i <= string1.length) et (string1.character[i] =
string2.character[i]))
// string1.character[i] donne le ième caractère de la chaîne string1
i (cid:2) i + 1
Fin tant que
SI (i = string1.length + 1)
Alors Afficher("chaînes égales") // le premier caractère a l'indice 1
Fin si
Fin si
Application 4: Test par Boîte Blanche
Donner un jeu d'essai couvrant tous les
chemins possibles ; on suppose que la plus
petite chaîne a une taille <= 2 (0 ou 1 ou 2).
1
2
Si
a ab
a b
vide vide
aa ab
a a
aaa aab
i(cid:2)1
Tant que
3
4
(impossible car max longueur = 2)
aa aa
6
Si
i(cid:2)i+1
5
8
7
Afficher
27/04/2015
14