Vous êtes sur la page 1sur 20

Support de cours de:

Wafa Boussellaa
Filières : 2ème ARS

Année : 2017-2018

Plan du cours

Chapitre I : Principes du Génie Logiciel


Chapitre II : Cycle de vie d'un logiciel
Chapitre III : Test et qualité d'un logiciel

Wafa Boussellaa Année 2017-2018 2


Chapitre III : Test et qualité d'un
logiciel

Partie I : Introduction au Test des Logiciels

Partie II : Le test structurel

Partie III : Le test fonctionnel

Wafa Boussellaa Année 2017-2018 3

Partie I. Introduction au Test des Logiciels

1. Introduction
2. Définition du Test
3. Difficultés du Test
4. Quelques Notions Fondamentales
5. Classification des tests selon la phase du cycle de vie
6. Les Techniques de test
7. Outils de Test

Wafa Boussellaa Année 2017-2018 4


Introduction (Les bugs logiciels)

Motivations du test → Coûts d’un Bug logiciel



En 1990 : Réseau téléphonique AT&T bloqué durant 9h.
→ Problème dans un logiciel installé sur 114 routeurs.
→ bloqué 5 Millions d'appels à travers les USA.

En 1996 : la fusée Ariane 5 explose après 30s de vol.
→ Erreur de conversion entre données numériques
→ $500M en matériel + $7B en développement

En 2000 : « Bug de l'an 2000 »
→ format de date sur deux chiffres ( année 2000 codée par 00)
→ 300, 1600, ou même 5000 Milliards de $ de coûts.

Wafa Boussellaa Année 2017-2018 5

Introduction (Les bugs logiciels)

Motivations du test → Coûts d’un Bug logiciel



En 1990 : Réseau téléphonique AT&T bloqué durant 9h.
→ Problème dans un logiciel installé sur 114 routeurs.
→ bloqué 5 Millions d'appels à travers les USA.

En 1996 : la fusée Ariane 5 explose après 30s de vol.
→ Erreur de conversion entre données numériques
→ $500M en matériel + $7B en développement

En 2000 : « Bug de l'an 2000 »
→ format de date sur deux chiffres ( année 2000 codée par 00)
→ 300, 1600, ou même 5000 Milliards de $ de coûts.

Wafa Boussellaa Année 2017-2018 6


Introduction (Les bugs logiciels)
Remarquons que les bugs cités sont provoqués suite à des erreurs

La chaîne causale de l'erreur est donc :


Erreur → Défaut → Anomalie (ou dites défaillance)

Objectif : S'assurer de la qualité des logiciels


Wafa Boussellaa Année 2017-2018 7

Introduction (Les Méthodes de Vérification


et de Validation V&V)
Deux aspects de la notion de qualité :


Conformité avec la définition : VALIDATION

Réponse à la question :
Faisons-nous le bon produit ? ;
Est-ce que le logiciel réalise les fonctions attendues ?;

Contrôle en cours de réalisation, le plus souvent avec le client

Défauts par rapport aux besoins que le produit doit satisfaire

Correction d’une phase ou de l’ensemble : VERIFICATION

Réponse à la question :
Faisons-nous le produit correctement ?;
Est-ce que le logiciel fonctionne correctement ?;

Tests

Erreurs par rapport aux définitions précises établies lors des phases
antérieures de développement
Wafa Boussellaa Année 2017-2018 8
Définition du Test

Définition 1 : Selon l'IEEE (Standard Glossary of Software Engineering


Terminology ; « Le test est l'exécution ou l'évaluation d'un système ou d'un
composant par des moyens automatiques ou manuels, pour vérifier qu'il
répond à ses spécications ou identier les différences entre les résultats
attendus et les résultats obtenus ».

Définition 2 : Selon G. J. Myers ( The art of Software Testing)


« Tester, c'est exécuter le programme dans l'intention d'y trouver des
anomalies ou des défauts ».

Wafa Boussellaa Année 2017-2018 9

Difficultés du Test
Le test logiciel est la méthode la plus populaire pour vérifier un logiciel.
Cette méthode représente environ 40-60% du coût total du projet.
Difficultés associées au processus d'introduction des défauts
Il s'agit du processus de transformations successives réalisé lors des étapes
de la démarche de programmation provoquant la perte des informations et
l'introduction des erreurs
Difficultés d'ordre psycologique ou « culturel »
la raison principale est que, pour améliorer la qualité d’un programme, le test
passe par une étape destructive, car un bon test est de trouver une erreur et la
programmation est un processus constructif.
Difficultés formelles
le test exhaustif est impossible à réaliser, car il n’existe pas un algorithme
général capable de démontrer l’exactitude d’un programme. C’est le
problème de l’indécidabilité de la correction d’un programme. Selon E. W.
"Testing can reveal the presence of errors but never their absence".
Wafa Boussellaa Année 2017-2018 10
Évolution de la perception du test
dans le temps

Années 50
test = mise au point
1960 - 1980
test = «démonstration» (preuve de correction)
1980
test = «destruction»
« détruire » = trouver des défauts
Aujourd’hui
test = «évaluation»
moyen d’évaluation de la qualité

11
Wafa Boussellaa Année 2017-2018

Quelques Notions Fondamentales

Données de test (DT) : Ensemble d’entrées définies à fournir au logiciel lors


d’une exécution. L’ensemble de données de test constitue un jeu de test. Pour
soumettre ces jeux de test, une séquence d’actions doit être effectuée. On
note souvent une DT en utilisant une notation ensembliste ( Exemple :
DT1={x=5, y=5, b=56}

Scénario de test : Un scénario de test est une séquence d’actions nécessaire à


l’exécution du jeu de test.

Oracle automatique de test : Outil qui évalue les résultats produits par le
logiciel d’une manière automatique, en comparant les résultats du test avec
les spécifications (résultats souhaités) du logiciel.

12
Wafa Boussellaa Année 2017-2018
Classification des tests selon la
phase du cycle de vie
Les cas de tests sont élaborés (plans de test) lors de la partie descendante d’un
cycle en V typique, en parallèle des phases de spécification, conception, et de
codage.

Wafa Boussellaa Année 2017-2018

Classification des tests selon la


phase du cycle de vie

Les tests unitaires : Test d’un programme ou d’un module isolé dans le but de
s’assurer qu’il ne comporte pas d’erreur d’analyse ou de programmation.

Les tests d'intégration : Tester les interfaces entre les composants. C'est au
cours de cette phase que sont généralement pris en compte d'éventuels
composants logiciels qui n'ont pas été développés dans le cadre du projet.

Les tests de validation ou conformité : Validation de l'adéquation aux


spécifications ( s'assurer que le logiciel réalise effectivement tout ce que le
client est en droit d'en attendre).

14
Wafa Boussellaa Année 2017-2018
Les Techniques de test

Le Test fonctionnel ou « Test boite noire » : Technique de test où les cas de


tests sont élaborés à partir d'une analyse des spécifications des fonctionnalités
d'un composant ou système sans référence à sa structure interne.

Les méthodes de test :


Analyse partitionnelle

Test aux limites

Graphes cause-effet

Tests syntaxiques

Tests aléatoires

15
Wafa Boussellaa Année 2017-2018

Les Techniques de test

Le Test structurel ou « Test boite blanche » ou « test en verre » :


Technique de test où les cas de tests sont basés sur une analyse de la structure
interne d'un composant ou système (le code source). Deux classes de tests
existent :


Test structurel statistique : revues de code, estimation de la
complexité, etc.
– Test structurel dynamique :
– Basés sur le graphe de flot de contrôle (toutes les instructions, toutes les
branches, tous les chemins, …)
– Basés sur la couverture du flot de données (toutes les définitions de
variable, toutes les utilisations, ...)

16
Wafa Boussellaa Année 2017-2018
Les outils de test

Les outils de test automatique ou « oracle de test » sont classés selon le cas
de test en question (fonctionnel ou structurel).

Exemples :


Test Designer : outil qui génère automatiquement des tests depuis un
modèle UML.

Junit : oracle de test pour les programmes JAVA.

CPPunit et DeepCover : oracle de test pour les programmes C++.

17
Wafa Boussellaa Année 2017-2018

Partie II. Le Test Structurel

1. Définition

2. Les Types de test

3. Le Test Structurel Dynamique

Wafa Boussellaa Année 2017-2018 18


Définition

Le test structurel ou « test à boite blanche » s’appuie sur l’analyse


du code source de l’application (ou d’un modèle de celui-ci).

Wafa Boussellaa Année 2017-2018 19

Test structurel Statique/dynamique


Analyse dynamique
Nécessite l’exécution du code
Principe : A partir du code source et la spécification, produire
des DT qui exécuteront un ensemble de comportements, et
comparer les résultats avec ceux attendus.
Méthode : Techniques de couverture du graphe de contrôle

Couverture du flot de contrôle

Couverture du flot de données

Analyse statique
Ne nécessite pas l’exécution du code
Méthode : Parmi les techniques les plus utilisée :

Estimation de la complexité

Wafa Boussellaa Année 2017-2018 20


Test structurel dynamique :
Couverture du graphe de contrôle

Objectif :
Produire des DT qui exécutent un ensemble de comportements du
programme. Ce test utilise la spécification, le code source et le code
exécutable du programme.

Principe :

Chaque programme est représenté par un graphe de contrôle (G) ;

Un graphe de contrôle comporte :

un seul sommet entrée ;

un seul sommet sortie ;

Les nœuds du graphe = les blocs d'instructions ;

Les arcs ou branches = la possibilité de transfert de
l’exécution d’un nœud à un autre ;

Wafa Boussellaa Année 2017-2018 21

Test structurel dynamique :


Couverture du graphe de contrôle
Exemple1 :
Soit le programme P1 suivant :
if x<=0 then x :=-x
else x :=1-x ;
if x=-1 then x:=1
else x=x+1 ;
writeln(x) ;

Ce programme admet le graphe


de contrôle G1

Wafa Boussellaa Année 2017-2018 22


Test structurel dynamique :
Couverture du graphe de contrôle

Chemins dans le graphe de contrôle
Le graphe G1 est un graphe de contrôle qui admet une entrée (le noeud a),
une sortie (le noeud g).

Le chemin [a, c, d, e, g]
est un chemin de contrôle,

Le chemin [b, d, f, g]
n'est pas un chemin de contrôle.

Le graphe G1 comprend 4 chemins
de contrôle :
β1 = [a, b, d, f, g]
β2 = [a, b, d, e, g]
β3 = [a, c, d, f, g]
β4 = [a, c, d, e, g]
Wafa Boussellaa Année 2017-2018 23

Test structurel dynamique :


Couverture du graphe de contrôle

Chemins dans le graphe de contrôle
Le graphe G1 est un graphe de contrôle qui admet une entrée (le noeud a),
une sortie (le noeud g).

Le chemin [a, c, d, e, g]
est un chemin de contrôle,

Le chemin [b, d, f, g]
n'est pas un chemin de contrôle.

Le graphe G1 comprend 4 chemins
de contrôle :
β1 = [a, b, d, f, g]
β2 = [a, b, d, e, g]
β3 = [a, c, d, f, g]
β4 = [a, c, d, e, g]
Wafa Boussellaa Année 2017-2018 24
Test structurel dynamique :
Couverture du graphe de contrôle

Expression des chemins de contrôle

Le graphe G1 peut être exprimé sous la forme algébrique
suivante :
G1= abdfg + abdeg + acdfg + acdeg
Le signe « + » désigne le « ou » logique entre chemins.


Simplification de l'expression de chemins :
G1 = a ( bdf + bde + cdf + cde ) g
G1 = a ( df (b+c) + (b+c)de ) g
G1 = a ( (b+c) (de+df) ) g
G1 = a ( b + c ) d ( e + f) g

Wafa Boussellaa Année 2017-2018 25

Test structurel dynamique :


Couverture du graphe de contrôle

Calcul de l'expression des chemins de contrôle
On associe une opération d’addition ou de multiplication à toutes les
structures primitives apparaissant dans le graphe de flot de contrôle.
Nous adoptons les règles suivantes :
• Pour une forme séquentielle :
le produit ab exprime le fait que
Le nœud a est suivi du noeud b

Pour une forme alternative :
L'expression a(b+c)d exprime le fait que
le nœud a est suivi du nœud b ou
du nœud c, tous deux suivis du nœud d.

Wafa Boussellaa Année 2017-2018 26


Test structurel dynamique :
Couverture du graphe de contrôle

Calcul de l'expression des chemins de contrôle

Pour la forme itérative :
L'ensemble des chemins prend la forme :
G= abd + abcbd + abcbcbd + …..
En utilisant la notation :
cbcb=(cb)2 et aussi cbcbcb=(cb)3, etc
Nous obtenons :
G=ab(1+ cb + (cb)2 + (cb)3 + …) d

Ceci implique : G = ab(cb)*d ;


Si la structure while est exécutée au plus 4 fois, l'expression
devient :
G= ab(cb)*d = ab(cb)4 d (on emploie un exposant souligné)
Wafa Boussellaa Année 2017-2018 27

Test structurel dynamique :


Couverture du graphe de contrôle

Chemins de contrôle avec boucles
Exemple 2 :
Soit le programme P2 suivant :
i :=1 ;
found := false ;
while (not found) do
begin
if (a[i] = 'E') then
begin
found := true ;
s := i ;
end ;
i := i+1 ;
end ;
Wafa Boussellaa Année 2017-2018 28
Test structurel dynamique :
Couverture du graphe de contrôle

Exemple 3 :
Soit le programme P3 suivant :
if n<= 0 then
n:=1-n
end ;
if 2 div n then
n := n/2 ;
else
n:=3*n+1 ;
end ;
write(n) ;
1. Etablir le graphe de flot de contrôle de ce programme;
2. Fournir l'expression des chemins ;
Wafa Boussellaa Année 2017-2018 29

Test structurel dynamique :


Couverture du graphe de contrôle

Programme P4 :
Soit le programme P4 suivant :
read (i) ;
s := 0 ;
while (i <= 3) do
begin
if a[i] > 0 then
s := s + a[i] ;
i := i+1 ;
end

1. Etablir le graphe de flot de contrôle de ce programme;


2. Fournir l'expression des chemins ;
Wafa Boussellaa Année 2017-2018 30
Test structurel dynamique :
Couverture du graphe de contrôle

Chemins exécutables / non exécutables :

Prenons le programme P1, donné précédemment, et son graphe G1.

if x<=0 then x :=-x


else x :=1-x ;
if x=-1 then x:=1
else x=x+1 ;
writeln(x) ;

G1 = a ( b + c ) d ( e + f) g

31
Wafa Boussellaa Année 2017-2018

Test structurel dynamique :


Couverture du graphe de contrôle

Chemins exécutables / non exécutables :

Soit DT1={x=2}
Nous disons que cette donnée sensibilise le chemin β3 = [a, c, d, f, g] car pour
cette valeur de x l'algorithme a suivi ce flot de contrôle en visant
consécutivement ces noeuds
{x= 2} sensibilise β3 = [a, c, d, f, g]
{x= 0} sensibilise β2 = [a, b, d, e, g]
{x= 1} sensibilise β4 = [a, c, d, e, g]

β3, β2, β4 est un chemin exécutable ;

β1 ( β1= [a,b,d,f,g] ) est un chemin non exécutable : aucune DT
capable de sensibiliser ce chemin ;

Remarque : L' Existence de chemins non exécutables : signe de


mauvais codage ;

32
Wafa Boussellaa Année 2017-2018
Test structurel dynamique :
Couverture du graphe de contrôle

Calcul du nombre de chemins de contrôle G :

Se déduit directement de l'expression des chemins de G.

Remplacer chaque nœud, dans l'expression des chemins, par l'unité (1)
et exécuter les opérations d'une façon arithmétique :
Exemples :

Graphe G1 :
G1 = (a(b+c)d(e+f)g = 1.(1+1).1.(1+1).1 = 2.2 = 4

Graphe G4 :
G4 = ab[c(1+d)eb]*f = 1.1[1.(1+1).1.1]3.1 = 23 = 1+2+22+23 = 15

Nb chemins de contrôle = Nb chemins exécutables + Nb chemins non


exécutables

33
Wafa Boussellaa Année 2017-2018

Test structurel dynamique :


Couverture du graphe de contrôle

Problème des chemins non exécutables

Parfois le Nb chemins non exécutables peut être important :
Exemple :
Soit le programme P5 et son graphe de conrôle G5 :
begin
s:=0;
for i:=1 to 1000 do
s:=s+a[i];
end
Expression des chemins de G5 :
G= a.b.(cb)1000.d
Nombre de chemins :
G= 1.1.(1.1)1000.1= 1+11+12+.........+11000 = 1001
Parmi ces 1001 chemins un seul chemin est exécutable et a comme
expession : a.b.(cb)1000.d
34
Wafa Boussellaa Année 2017-2018
Test structurel dynamique :
Couverture du graphe de contrôle
Satisfaction d’un test structurel avec couverture
Soit T un test structurel qui nécessite la couverture d’un ensemble de chemins
{δ1, … , δk} du graphe de contrôle.
On note : T= {δ1, … , δk}
Soit DT une donnée de test qui sensibilise le chemin de contrôle C.
Définition: DT satisfait T ssi C couvre tous les chemins de T.
Exemple : considérons le graphe de contrôle G5
Soient δ1=cdebcde et δ2=ce et T1= {δ1, δ2}.
DT1={a[1]=-2, a[2]=3, a[3]=17, i=1} satisfait – il T1 ?
DT1 sensibilise M1=abcebcdebcdebf
M1= abcebcdebcdebf couvre δ1=cdebcde
M1=abcebcdebcdebf couvre δ2=ce
Donc DT1 satisfait T1

35
Wafa Boussellaa Année 2017-2018

Test structurel dynamique :


Couverture du graphe de contrôle
Trois catégries de critères de couverture :

Critère de couverture «tous-les-noeuds»
But : sensibiliser tous les chemins de contrôle qui nous permettent de
visiter tous les nœuds du graphe de contrôle.
Taux de couverture: TER1 (Test Effectiveness Ratio1 ou C1)
TER1 = |{nombre noeuds couverts}| /
|{nombre noeuds}|

Critère de couverture «tous-les-arcs»
Si on cherche à couvrir tous les noeuds sans couvrir tous les arcs, on
risque de ne pas détecter certains défauts sur les arcs non
couverts…
But : sensibiliser tous les chemins de contrôle qui nous permettent de
visiter tous les arcs du graphe de contrôle.
TER2 = |{nombre arcs couverts}| / |{nombre arcs}|

Critère de couverture «tous-les-chemins indépendants »
36
Wafa Boussellaa Année 2017-2018
Test structurel dynamique :
Couverture du graphe de contrôle
Exercice 1 :
soit le programme P suivant :

if (x > 10) then 1) Présenter Le graphe de


a = a + 1; contrôle du programme P
endif 2) Donner des Dts satisfaisant
if (x % 2 = 0) then les critères :
b = b + 1; - Tous les nœuds
endif - Tous les arcs

37
Wafa Boussellaa Année 2016-2017

Test structurel dynamique :


Couverture du graphe de contrôle
Exercice 2 :
soit le programme P suivant :

1) Présenter Le graphe de
contrôle du programme P
2) Donner des Dts satisfaisant
les critères :
- Tous les nœuds
- Tous les arcs

38
Wafa Boussellaa Année 2016-2017
Bibliographie

Pratique des tests logiciels (Dunod, 2009)


J. Printz, J.-F. Peyre.

Le test des logiciels (Hermès, 2000)


S. Xanthakis, P. Régnier, C. Karapoulios.

39
Wafa Boussellaa Année 2017-2018

Vous aimerez peut-être aussi