Académique Documents
Professionnel Documents
Culture Documents
Chap8 Test
Chap8 Test
IFT3913 Introduction
Qualité du logiciel et métriques Théorie de la mesure
Qualité du logiciel
Mesure de la qualité du logiciel
Études empiriques
Mesure du produit logiciel
Chapitre 8 Collecte et analyse des métriques
Test du logiciel Test du logiciel
I. Introduction I. Introduction
Vérification:
Ensemble des activités entreprises pour En l’analysant: Comment
s’assurer que le logiciel répond à ses objectifs. révision et vérifieriez-vous ce
preuves
programme?
mathématiques
Vérification des qualités d’un logiciel
– Dans ce chapitre, on s’intéressera principalement
à vérifier la « correction » des fonctionnalités d’un
logiciel i.e. vérifier si l’implémentation répond à Programme
la spécification des besoins fonctionnels du En le testant
système. sur des données
– On pourrait également vérifier les autres qualités
du logiciels exprimées par les besoins non
fonctionnels de la spécification (performance, Autres techniques moins standards:
exécution symbolique, model checking, etc.
portabilité, etc.)
3 4
I. Introduction I. Introduction
Mise en garde
– Limiter la vérification à l’essai de quelques cas
Validation versus vérification d’exemple:
– Validation • parfois suffisant pour de petits programmes non
critiques…
• Avez-vous construit le bon produit ? • malheureux ou grave pour les programmes importants
• Avez-vous répondu aux besoins du client ? et critiques!
– Vérification
La vérification d’un logiciel est un problème
• Avez-vous construit le produit correctement?
indécidable dans le cas général.
• Avez-vous répondu aux exigences de la
Il nécessite une approche rigoureuse, basée sur des
spécification ?
principes, des techniques et … de l’intuition!!!
5 6
1
II. Approches fondamentales de la
III. Test : Généralités
vérification
Approches dynamique et statique
– Test: Approche par expérimentation. On Types de test
observe le comportement dynamique du logiciel
pour voir s’il se comporte tel qu’espéré. –Processus manuel ou automatique
Vérification dynamique –Expérimental
– Analyse: Approche consistant à déduire, par
analyse (preuve formelle), le comportement Objectif du test
d’un logiciel à partir de son code et des –S’assurer qu’un système vérifie les
documents de conception.
propriétés exigées par sa spécification
Vérification statique
Autres approches –Détecter des différences entre les
– Exécution symbolique, model checking, etc.
résultats engendrés par le système et
ceux qui sont attendus par sa spécification
7 8
2
III. Test : Généralités III. Test : Généralités
Principe de continuité Le test : un problème semi-décidable
– une petite différence dans les conditions de fonctionnement Le test logiciel peut être utilisé pour montrer la présence
est sans conséquence importante sur le comportement du d’erreurs, mais jamais pour prouver leur absence
système [Dijkstra, 1972]
Dans les disciplines d’ingénierie traditionnelle, le – Si le logiciel se comporte mal sur un ou plusieurs cas de test:
principe de continuité s’applique et permet on est sûr qu’il y a une erreur
l’extrapolation des résultats – Si le logiciel se comporte bien sur un ensemble fini de cas de
test: on ne peut rien conclure
En génie logiciel
– Le principe de continuité ne s’applique pas la plupart du
temps Défaillance observée Erreur dans le programme
– La nature du produit (le logiciel) ne s’y prête pas. Difficile de
généraliser en utilisant l’hypothèse du principe de continuité
Aucune défaillance observée
Exemple : Si le programme fonctionne bien sur les entiers 5, 4
et 3… on ne peut rien conclure sur 2 sans vérifier… Le test permet tout de même d’augmenter notre
confiance en la qualité du logiciel (même si ce
– Une ligne de code retirée dans un programme peut tout n’est pas une certitude absolue)
chambouler 13 14
15 16
3
IV. Fondements théoriques du test IV. Fondements théoriques du test
Jeu de test Jeu de test idéal
– Un cas de test est un élément d D – Un jeu de test T est dit idéal, si chaque fois
– Un jeu de test T est un ensemble fini de cas de test que P est incorrect (i.e. défaillant), il existe un
i.e. un sous-ensemble fini de D cas d T tel que P est incorrect pour d
– Rarement possible
Un jeu Jeu de test pertinent
de test T Programme – Qui a de forte chance de révéler la présence
di d’une erreur dans un programme
d1={a=2,b=3,c=4}
d2={a=0,b=7,c=5} – Comment sélectionner des jeux de test
d3={a=1,b=0,c=0} pertinents ?
– Compromis entre le coût d’exécution et le degré
OR(di, ui) vrai ? de confiance
19 20
21 22
Oracle
23 24
4
VI. Sélection de jeux de test VII. Test boîte noire (fonctionnel)
Méthodes de sélection de jeux de test unitaire
Principes de la boîte noire:
Spécification Interface de la Propriétés – On teste le logiciel sans prendre connaissance
spécification de la des détails de sa conception et de son
Programme spécification implémentation
– On établit des jeux de test et on évalue les
Interface du Technique de test Technique de résultats sur la base de la spécification
programme aléatoire test uniquement
(non recommandé) fonctionnel
– On teste ce que le programme est supposé faire
(boîte noire)
– Permet éventuellement de détecter les erreurs
Code du Technique de test
commises et les omissions.
programme structurel
(boîte blanche)
25 26
VII. Test boîte noire (fonctionnel) VII. Test boîte noire (fonctionnel)
A. Partition du domaine des entrées en
Il existe deux approches principales pour classes d’équivalence
1. On détermine le domaine D des valeurs d’entrée à
la sélection de jeux de test de boîte noire partir des interfaces (spécification & programme).
2. On partitionne ce domaine D en classes
d’équivalence Di de façon à ce que …
A. Partition du domaine des entrées en classes • le programme se comporte à peu près de la
d’équivalence même manière sur toute les valeurs d’entrée
B. Analyse des valeurs frontières appartement à une même classe
3. On construit un jeu de test en sélectionnant un
représentant par classe d’équivalence
Soit D D où i j.D D
i i j
27 28
VII. Test boîte noire (fonctionnel) VII. Test boîte noire (fonctionnel)
A. Partition du domaine des entrées en A. Partition du domaine des entrées en
classes d’équivalence classes d’équivalence
– Exemples de partitionnement (Lorsque le – Exemples de partitionnement (Lorsque le
domaine d’entrée est un intervalle de domaine d’entrée est un ensemble fini de
valeurs) valeurs discrètes)
• Par exemple: Soit D = Entiers et P défini sur • Par exemple: D = Couleurs = {bleu, blanc,
[0,5000] rouge, vert, noir, orange} et P défini sur {blanc,
• On définit 3 classes d’équivalence: rouge, vert}
– Une classe d’équivalence pour les valeurs appartenant à • On définit deux classes d’équivalence:
l’intervalle de valeurs valides. D1 {0 d 5000} – Une classe d’équivalence pour les valeurs d’entrée
– Une classe d’équivalence pour les valeurs d’entrées valides. D1= {blanc, rouge, vert}
invalides inférieures à l’intervalle. D 2 {d 0} – Une autre classe d’équivalence pour les valeurs
– Une classe d’équivalence pour les valeurs d’entrées d’entrées invalides devrait aussi être définie.
invalides supérieures à l’intervalle. D 3 {d 5000} D1= {bleu, noir, orange}
• Un jeu de test valide serait T={blanc, orange}
• Un jeu de test valide serait: T={10,-1,6008} 29 30
5
VII. Test boîte noire (fonctionnel) VII. Test boîte noire (fonctionnel)
B. Analyse des valeurs frontières B. Analyse des valeurs frontières
– Erreurs souvent aux frontières de 1. On procède comme dans le cas de la partition
comportement du domaine des entrées en classes
• indice de tableau tout juste trop grand ou trop petit
• boucles avec une itération en trop ou en manque d’équivalence (étape 1 et 2)
• comparaisons et expressions conditionnelles 2. On choisit les cas de test aux frontières des
• … différentes classes d’équivalence
– Analyse précise aux bornes des classes Par exemple: Soit D = Entiers et P défini sur [0,5000]
• plusieurs représentants par classe d'équivalence
– une ou plusieurs valeurs aux bornes D1 {0 d 5000}
– une valeur « médiane » D 2 {d 0}
D 3 {d 5000}
31 32
33 34
VIII. Test boîte blanche (structurel) VIII. Test boîte blanche (structurel)
35 36
6
VIII. Test boîte blanche (structurel) VIII. Test boîte blanche (structurel)
A. Critère de couverture des instructions
Critères de sélection de jeux de test « Sélectionnerun jeu de test T tel que, lorsqu’on
A. Critère de couverture des instructions exécute P sur les d T, chaque instruction de P
est exécutée au moins une fois. »
B. Critère de couverture des arcs du graphe de flot
Trouver un jeu de test qui permet de
de contrôle Exemple: Algorithme d’Euclide couvrir toutes les instructions du
C. Critère de couverture des chemins indépendants begin programme.
read(x); read(y)
du graphe de flot de contrôle while x <> y do •Pour constituer les jeux de test, on va
D. Critère de couverture des conditions If x>y then x:= x-y; tenter de grouper dans des classes Di
else y:= y-x; les éléments du domaine d’entrée D qui
E. Critère de couverture des i-chemins end if activent les mêmes instructions dans P:
end while •D1={(x,y) | x=y}
pgcd := x; •D2={(x,y) | x>y};
end
•D3={(x,y) | x<y};
VIII. Test boîte blanche (structurel) VIII. Test boîte blanche (structurel)
B. Critère de couverture des arcs du graphe de B. Critère de couverture des arcs du graphe de
flot de contrôle flot de contrôle
– Au lieu de s’intéresser aux instructions, on s’intéresse ici aux « Sélectionner un jeu de test T tel que, lorsqu’on
branchements de contrôle conditionnels dans un programme. exécute P sur les d T, chaque arc du graphe
– Un programme bien structuré peut être représenté par un de flot de contrôle de P est traversé au moins
graphe de flot de contrôle (GFC)
une fois. »
– Chap. IV – Mesure du logiciel, pour les détails sur les GFC
– Pour chaque instruction conditionnelle (if, while) on
1 teste le cas où la condition est vraie et celui où elle
•Les sommets représentent les
est fausse..
instructions
•Les arcs représentent le flot de 2 – Critère de sélection plus fort que celui de la
contrôle entre les instruction. 7 couverture des instructions.
3
4 5
6
39 40
VIII. Test boîte blanche (structurel) VIII. Test boîte blanche (structurel)
C. Critère de couverture des chemins C. Critère de couverture des chemins
indépendants indépendants
« Sélectionner un jeu de test T tel que, lorsqu’on – Méthode de sélection des jeux de test
exécute P sur les d T, tous les 1-chemins du 1. Construire le graphe de flot de contrôle de P
graphe de flot de P sont parcourus au moins une 2. Déterminer la complexité cyclomatique V(G) du GFC
– Constitue une borne supérieure sur le nombre de chemins
fois. » nécessaires pour couvrir tous les chemins indépendants du
– Chemin = Séquence de nœuds et d’arcs dans le graphe de graphe de flot d’un programme .
flot de contrôle, initiée depuis le nœud de départ jusqu’à un 3. Définir un ensemble de base B de chemins indépendants
nœud terminal. (Il peut y avoir plusieurs nœuds terminaux dans le graphe.
dans un programme.) 4. Construire un jeu de test qui permettra l’exécution de
• 1-chemin : Chemin parcourant les boucles 0 ou 1 fois. chaque chemin de l’ensemble B.
• Chemin indépendant : (1-)chemin du graphe de flot de contrôle
qui parcourt au moins un nouvel arc par rapport aux autres
chemins définis dans une base B (i.e. ce chemin introduit au
moins une nouvelle instruction non parcourue).
41 42
7
VIII. Test boîte blanche (structurel) VIII. Test boîte blanche (structurel)
C. Critère de couverture des chemins C. Critère de couverture des chemins
indépendants indépendants
– Méthode de sélection des jeux de test – Chemins linéairement indépendants
3. Définir un ensemble de base B de chemins indépendants • La représentation vectorielle d’un chemin est un vecteur
dans le graphe qui compte le nombre d’occurrence de chaque arc.
– Chemin indépendant : chemin du graphe de flot de
contrôle qui parcourt au moins un nouvel arc par
Ex. : Chemin1 = (1, 0, 0, 0, 0, 0, 0, 1)
rapport aux autres chemins définis (introduit au moins
une nouvelle instruction non parcourue).
– Une base comportant V(G) chemins nous assure de • Un ensemble de chemins est linéairement indépendant
couvrir tous chemins indépendants du graphe de flot G. si aucun ne peut être représenté par une combinaison
– Mais on ne couvre pas nécessairement tous les 1- linéaire des autres (en représentation vectorielle).
chemins du graphe…
43 44
VIII. Test boîte blanche (structurel) VIII. Test boîte blanche (structurel)
C. Critère de couverture des chemins C. Critère de couverture des chemins
indépendants indépendants
– Chemins linéairement indépendants – Méthode de sélection des jeux de test
Algorithme d’ Euclide 4. Sélection des jeux de test
1
• Pour chaque chemin indépendant de la base, on doit
2 trouver un jeu de test qui permette de le traverser (en
7 itérant possiblement sur certains segments du chemin).
3
• Cette sélection peut être ardue dans le cas de gros
4 5 programmes!
Par exemple:
6 • En effet, ceci équivaut à
• 1-2-7
• 1-2-3-4-6-2-7 (nouveaux arcs: 2-3, 3-4, 4-6, 6-2) – Résoudre un système de contraintes composé des
• 1-2-3-5-6-2-7 (nouveaux arcs: 3-5, 5-6) nœuds prédicats qui se trouvent sur le chemin à
parcourir.
– Attention: Tous les chemins ne sont pas nécessairement
45 satisfiables!!! (Problème indécidable ) 46
VIII. Test boîte blanche (structurel) VIII. Test boîte blanche (structurel)
C. Critère de couverture des chemins C. Critère de couverture des chemins
indépendants indépendants
– Méthode de sélection des jeux de test – Méthode de sélection des jeux de test En effet, qu’arrive-t-il
si on cherche « a »
4. Sélection des jeux de test 4. Sélection des jeux de test - Limites dans [« a »] ?
Partitionnement read(x), found:= false; counter:=1;
Chemin 1-2-7 read(y) 1 While (not found) and counter< numberItems do /* erreur <= */
D1= {(x,y) | x=y} If table(counter) = desiredElem then Limite…
Cas de test: <x=3,y=3> found := true; Ex: Soit le jeu de test suivant qui
Chemin 1-2-3-4-6-2-7 while x<>y 2 parcourt tous les chemins indépendants
endif
D2 = {(x,y)| x>y, x-y=y} du graphe (il y en a 4, mais l’un d’eux est
if x>y 7 counter:= counter+1; impossible à parcourir) :
Cas de test: <x=8,y=4> 3
Chemin 1-2-3-5-6-2-7 x:=x-y y:=y-x End while; • table vide
If found then • table avec 1 élément ne contenant pas
D3 = {(x,y)| x<y, x=y-x} 4 5 celui désiré.
write(« Elément existe. »);
Cas de test: <x=3,y=6> • table avec 3 éléments dont le premier
6 Else
est celui cherché.
write(« Élément n’existe pas. »);
Malheureusement, on n’a pas
Jeu de test: {<x=3 y=3>, <x=8, y=4>, <x=3, y=6>} 47 Endif; découvert l’erreur ! 48
8
VIII. Test boîte blanche (structurel) VIII. Test boîte blanche (structurel)
D. Critère de couverture des conditions (et des D. Critère de couverture des conditions (et des
arcs) arcs)
« Sélectionner un jeu de test T tel que, lorsqu’on exécute – Décomposer pour tenter repérer les erreurs plus
subtiles dans l’évaluation des conditions
P sur chacun des d T, chaque arc du graphe de flot composées et tenir compte de toutes les valeurs
de contrôle de P est traversé au moins une fois et possibles de leurs parties composantes…
toutes les valeurs possibles des constituantes des – Conditions composées
conditions complexes sont calculées au moins une • Condition composée = conjonction ou disjonction
fois. » de deux ou plusieurs clauses élémentaires (i.e.
formules atomiques ou leur négation).
– Ex. Voici une condition composée:
– x>4 and y>8 and z<>0
– où il y a trois clauses élémentaires.
49 50
VIII. Test boîte blanche (structurel) VIII. Test boîte blanche (structurel)
D. Critère de couverture des conditions (et des D. Critère de couverture des conditions (et des
arcs) if c1 then arcs)
x:=true;…
– Conditions composées if c2 then – Conditions composées
if c1 and c2 then strue
while c1 and x
strue else
else sfalse While c1 and c2 If c2
sfalse else
If If found
sfalse If
Pour couvrir les arcs de ce graphe,
on devra obligatoirement choisir un nœuds
prédicats c1 x:=false
jeu de test où toutes les valeurs
possibles de c1 et c2 sont
expérimentées au moins une fois. c2
Attention: toutes les combinaisons strue sfalse sfalse
de valeurs de c1 et c2 ne sont
toutefois pas expérimentées.
51 52
VIII. Test boîte blanche (structurel) VIII. Test boîte blanche (structurel)
Malgré tout il demeure des erreurs non détectées par Degré de couverture des jeux de test générés par les
les jeux de test satisfaisant les critères portant sur différents critères
les conditions et sur les chemins indépendants…
Couverture des
If x<>0 then y:=5; instructions Jeux de test plus
Else z:=z-x;
Endif;
Jeu de test qui couvre tous les arcs « couvrant » i.e.
plus susceptibles de
et conditions:
If z>1 then z:=z/x;
Else z:=0;
/*risque de division par 0 */ {<x=0, z=1>,
<x=1, z=3>}
Couverture des arcs détecter les erreurs…
Endif;
9
VIII. Test boîte blanche (structurel) VIII. Test boîte blanche (structurel)
Couverture des i-chemins – Sélection de jeux de test Couverture des i-chemins – Sélection de jeux de test
pour parcourir les boucles… pour parcourir les boucles…
– Cas des boucles simples (bornées par n itérations – Cas des boucles imbriquées
autorisées) 1. Commencer par la boucle la plus intérieure, les indices
• Trouver un jeu de test permettant de couvrir chacun des des autres boucles étant à leur valeur minimale.
cas suivants 2. Appliquer les tests de boucle simple à la boucle la plus
– on saute la boucle interne.
– une itération de la boucle 3. Passer à la suivante, les boucles externes maintenues à
– deux itérations leur valeur minimale, les internes à valeur « typique ».
– m itérations (m<n) 4. Continuer vers la boucle la plus externe.
– n-1, n et n+1 itérations…
55 56
57 58
Dépendance à tester
Architecture arborescente
Approches
– De haut en bas (top-down)
– De bas en haut (bottom-up)
59 60
10
Approche classique : De haut en bas Approche classique : De bas en haut
Unité à tester Unité à tester
Unité testée
Dépendance testée
61 62
11