OTT Outillage Des Tests Cours 1 1
OTT Outillage Des Tests Cours 1 1
OTT Outillage Des Tests Cours 1 1
Orsay
1
16-18 novembre 2016
Automatisation des tests
logiciels
• Résumé:
• appréhender les méthodes et outils pour automatiser les tests logiciels (tests unitaires, fonctionnels,
d'intégration, de charge) afin de gagner en productivité et en sureté pour le développement logiciel
• Durée:
• 4 jours
• Pré-requis:
• connaissances de base en test logiciel et capacité à effectuer des développements logiciels objet
2
Bienvenue
Faisons connaissance
• Votre formateur
3
Contenu de la formation
Programme standard
Synthèse
4
Déroulement de la formation (3 jours)
Alternance de Cours et de Pratique
5
1. Introduction, rappels
sur le processus du test
logiciel
Rôle du test dans le processus de développement.
Les tests : unitaires, fonctionnels, etc.
Les différentes méthodes de test.
Processus de test et stratégie de test.
Outils et méthodes intervenant à différentes étapes
6
Rôle du test dans le processus de
développement
Les bugs sont nombreux et couteux pour la société
possédant le logiciel, ses fournisseurs, ses clients, les
utilisateurs finaux…
7
Les failles de sécurité sont également
nombreuses
Problèmes de sécurité (Figaro 21/09/16)
8
Les DSI ont des objectifs directement liés
au test
Source: « World Quality Report 2016-2017, Sogeti »
44% 42%
65% 42%
Augmenter la Améliorer
Améliorer la Optimiser les
Qualité des l’Expérience
sécurité coûts
Solutions Utilisateur
9
Le Test continue a être un investissement
nécessaire et important
Une place très importante dans l’IT
10
Définitions du test
• « 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écifications ou identifier les
différences entre les résultats attendus et les résultats obtenus.
»
IEEE (Standard Glossary of Software Engineering Terminology)
11
La réalité du test
• Le test constitue aujourd’hui le vecteur principal de l’amélioration
de la qualité du logiciel
12
Industrialiser et professionnaliser le test
logiciel avec des compétences spécifiques
Un schéma mondial de Formations et Certifications en Test
Logiciel
13
Industrialiser et professionnaliser le test
logiciel avec des compétences spécifiques
Une implantation en France très importante
14
Motivations du test
• Complexité croissante des architectures et des comportements
• Coût d’un bug (Ariane 5, carte à puces allemande bloquée, prime de la PAC…)
Erreur
SpécificaEon, concepEon, programmaEon
Défaut dans le logiciel
Anomalie de fonc-onnement
15
Les tests : unitaires, fonctionnels, etc.
• V & V
– ValidaEon : Est-ce que le logiciel offre les services aTendues ?
– VérificaEon : Est-ce que les artefacts uElisés sont corrects ?
• Méthodes de V & V
– Test staEque : Revue de code, de spécificaEons, de documents de
design
– Test dynamique : Exécuter le code pour s’assurer d’un
foncEonnement correct
– VérificaEon symbolique : Run-Eme checking, ExecuEon symbolique,
…
– VérificaEon formelle : Preuve ou model-checking d’un modèle
formel
16
Les tests : unitaires, fonctionnels, etc
La pratique du test
17
Les différentes méthodes de test
Test statique
Test dynamique
18
Test statique
Définitions
Compilateur
• Outil logiciel qui traduit un programme exprimé dans un langage de
haut niveau dans son équivalent en langage machine [IEEE 610]
Complexité
• Degré par lequel un composant ou système a une conception et/ou
une structure interne difficile à comprendre, maintenir et vérifier
19
Test statique
L’analyse statique trouve des défauts (et non des défaillances)
• Le code n’est pas exécuté mais des outils peuvent être utilisés
par des profils développeur
• La compilation peut être considérée comme du test statique
outillé
• Des défauts difficiles à trouver avec des tests dynamiques
peuvent être détectés
• Dépendance dans des modèles
• Violation de règles de sécurité et programmation
• Maintenabilité difficile
• Code mort
• Variable jamais utilisée
• Boucles infinies
20
Test statique
Exemples :
• Lectures croisées / inspections
Vérification collégiale d’un document (programme ou spécification
du logiciel)
• Analyse d’anomalies
Corriger de manière statique les erreurs (typage impropre, code
mort, …)
Avantages :
• Méthodes efficaces et peu coûteuses
• 60% à 95% des erreurs sont détectées lors de contrôles statiques
Inconvénients :
• Ne permet pas de valider le comportement d’un programme au
cours de son exécution
21
Test statique
Exemple de rapport Sonar
22
Test statique
Exemple d’analyse de code outillée
23
Test statique
Exemple d’analyse de code outillée
24
Test dynamique - niveaux
Repose sur l’exécution du programme à tester
• 4 niveaux
complémentaires
• Test de composants
(unitaire)
• Test d’intégration des
composants
• Test du système
global
• Test d’acceptation
(recette)
25
Test dynamique - techniques
Deux techniques :
• Test structurel
Jeu de test sélectionné en s’appuyant sur une analyse du code
source du logiciel (test boite blanche / boite de verre)
• Test fonctionnel
Jeu de test sélectionné en s’appuyant sur les spécifications (test
boite noire)
26
Test structurel (white box)
B
Fig. 1 : Flot de contrôle d’un petit programme
27
Test fonctionnel (black-box)
• Test de conformité par rapport à la spécification
Spécification
Données de test
Oracle Programme
Résultats
de test Résultats d’exécution
28
Complémentarité (1) test fonctionnel /
structurel
• Les 2 approches sont utilisées de façon complémentaire
29
Complémentarité (2) test fonctionnel /
structurel
30
Test de logiciels – auto-évaluation
L’exemple du triangle
• Soit la spécification suivante :
31
Test de logiciels – auto-évaluation
L’exemple du triangle
• Avez-vous un cas de test pour :
1. Cas scalène valide (1,2,3 et 2,5,10 ne sont pas valides)
2. Cas équilatéral valide
3. Cas isocèle valide (2,2,4 n’est pas valide)
4. Cas isocèle valide avec les trois permutations (e.g. 3,3,4; 3,4,3; 4,3,3)
5. Cas avec une valeur à 0
6. Cas avec une valeur négative
7. Cas où la somme de deux entrées est égale à la troisième entrée
8. Trois cas pour le test 7 avec les trois permutations
9. Cas où la somme de deux entrées est inférieure à la troisième entrée
10. Trois cas pour le test 9 avec les trois permutations
11. Cas avec les trois entrées à 0
12. Cas avec une entrée non entière
13. Cas avec un nombre erroné de valeurs (e.g. 2 entrées, ou 4)
14. Pour chaque cas de test, avez-vous défini le résultat attendu ?
32
Test de logiciels – auto-évaluation
L’exemple du triangle
33
Test dynamique – 4 activités
34
Types de tests (1)
(renseignent la nature du test mené)
Tests fonctionnels
Valide les résultats rendus par les services
Tests non-fonctionnels
Valide la manière dont les services sont rendus
Tests de robustesse
Vérifie que le programme réagit correctement à une utilisation non
conforme, en entrant des données invalides (test-to-fail)
35
Types de tests (2)
(renseignent la nature du test mené)
Test de performance
• Load testing (test avec montée en charge)
• Stress testing (soumis à des demandes de ressources
anormales)
Test de non-régression
Vérifie que les corrections ou évolutions dans le code n’ont pas
créé d’anomalies nouvelles
Test de confirmation
Valide la correction d’un défaut
36
Catégories de tests
Niveau de détail (situation dans le cycle de vie)
système
integration
module
unitaire
Techniques
(comment on teste)
fonctionnel
non fonctionnel white box black box
performance
ergonomie
robustesse
sécurité
type (ce que l’on veut tester)
37
Processus de test et stratégie de test
Le Test est un ensemble d’activités à dérouler à différents niveaux
Planification
Composant 1
Planification
Analyse et Intégration
Contrôle
Conception
Contrôle
Implémentation et
Exécution
Système
Evaluation &
Reporting
Clôture
Acceptation
Clôture
38
Développement et niveaux de tests
39
Niveaux de tests
(renseignent l’objet du test)
Tests (structurels) unitaires
Test de procédures, de modules, de composants
(coût : 50% du coût total du développement initial correspondant
Tests d’intégration
Test de bon comportement lors de la composition des procédures,
modules ou composants
(coût d’un bug dans cette phase : 10 fois celui d’un bug unitaire)
40
Processus de test et stratégie de test
41
Difficultés du test
• Le test exhaustif est en général impossible à réaliser
• En test structurel, le parcours du graphe de flot de contrôle conduit
à une forte explosion combinatoire
Exemple : le nombre de chemin logique dans le graphe de la figure
1 est supérieur à 1014 ≈ 520 + 519 + … + 51
42
Coût d’un bug
Le but est de les détecter le plus tôt possible (Stratégie)
43
Stratégie de test
En début de projet, définition d’un Plan de Test et de Validation
(PTV)
Objectifs de test
Plan de
Test
et de Techniques de test
Validation
44
Acteurs du test
• Deux situations :
- Je teste un programme que j’ai écrit
- Je teste un programme que quelqu’un d’autre a écrit
• Trois questions :
- Comment choisir la technique de test ?
=> boite blanche ou boite noire ?
- Comment obtenir le résultat attendu ?
=> problème de l’oracle du test
- Comment savoir quand arrêter la phase de test ?
=> problème de l’arrêt
45
Outils et Méthodes intervenants à
différentes étapes
Critique du Produit
Simulations Alpha / Bêta
Q2 Q3
Q1 Q4
Automatique Outils
Choix technologique
46
Outils et Méthodes intervenants à
différentes étapes
Exemple Mingle pour les projets Agile
47
Outils et Méthodes intervenants à
différentes étapes
Build et Distribution: Utile pour tout le quadrant de test
Automatique & Choix métier
Manuel
Manuel
Critique du Produit
Simulations Intégration continue Alpha / Bêta
Q2 Q3
Q1 Q4
Automatique Outils
Choix technologique
48
Outils et Méthodes intervenants à
différentes étapes
Intégration continue : Tableau de contrôle
49
Outils et Méthodes intervenants à différentes
étapes
Tests unitaires
Automatique & Choix métier
Manuel
Manuel
Critique du Produit
Simulations Alpha / Bêta
Q2 Q3
Q1 Q4
Vrais tests Unitaires
Tests Unitaires Tests de charge
Tests de composants Tests de performance
“ilité” tests
Spock
Automatique Outils
Choix technologique
50
Outils et Méthodes intervenants à différentes
étapes
Tests statiques !
Automatique & Choix métier
Manuel
Manuel
Critique du Produit
Simulations Alpha / Bêta
Q2 Q3
Q1 Q4
Automatique Outils
Choix technologique
51
Outils et Méthodes intervenants à
différentes étapes
Automatisation des tests
Automatique & Choix métier
Manuel
Manuel
Critique du Produit
Simulations Alpha / Bêta
Spock Q2 Q3
Q1 Q4
Automatique Outils
Choix technologique
52
Outils et Méthodes intervenants à
différentes étapes
Gestion des tests y compris exploratoires !
Automatique & Choix métier
Manuel
Manuel
Critique du Produit
Simulations Alpha / Bêta
Q2 Q3
Q1 Q4
Automatique Outils
Choix technologique
53
Outils et Méthodes intervenants à
différentes étapes
Virtualisation et Cloud : un nouveau défit !
Automatique & Choix métier
Manuel
Manuel
Critique du Produit
Simulations Alpha / Bêta
Q2 Q3
Q1 Itération
Q4 ⇒ Service Virtualization
Automatique Outils
Choix technologique
54
Outils et Méthodes intervenants à
différentes étapes
Couverture : un métrique important
Automatique & Choix métier
Manuel
Manuel
Critique du Produit
Simulations Alpha / Bêta
Cobertura Q2 Q3
Q1 Q4
Automatique Outils
Choix technologique
55
Outils et Méthodes intervenants à différentes
étapes
BDD avec JBehave
56
Outils et Méthodes intervenants à différentes
étapes
Tester avec FitNesse
• FitNesse utilise un wiki pour définir les cas de tests : on écrit des tables de
décision. FitNesse est bien adapté à des testeurs fonctionnels
• Le développeur doit écrire le “fixture” code pour appeler les fonctionnalités
concernées import fit.ColumnFixture;
57
Outils et Méthodes intervenants à
différentes étapes
Exemple: tests unitaires avec Junit depuis Eclipse
58
Outils et Méthodes intervenants à
différentes étapes
Exemple: qualité du code mesurée avec Sonar
59
2. Automatisation des
tests unitaires
Organisation et bonnes pratiques pour les tests unitaires.
Critères d'automatisation.
Tests unitaires : Tests Driven Development.
Mesure de la couverture de code : couverture d'instructions et branches.
Analyse statique de code : analyse outillée du code source hors exécution
Automatisation avec un fichier de configuration.
Analyse dynamique de code : couverture des instructions, des branches, des prédicats...
Organisation des tests unitaires, pair programming, pair testing.
Utilisation des Frameworks : gestion des scripts de tests
60
Test unitaire
Quoi ? Qui ?
61
Test structurel
62
Graphe de contrôle
Définition
• Une seule entrée (nœud à partir duquel on peut visiter tous les
autres) et une seule sortie
63
Graphe de contrôle
Production
i := 1; i:=1
found := false; a found:=false
while (not found) do
begin
if (a[i] = E) then b found
begin not found f
found := true;
s := i; c
end;
a[i] = E
i := i + 1;
found:=true
end; a[i] ≠ E d s := i
e i=i+1
64
Graphe de contrôle
Exercice
65
Graphe de contrôle
Exercice - correction
a
direction == NORTH
Coordinates(position.getX() –
public static Coordinates nextForwardPosition(Coordinates position, Direction direction) {
if (direction == NORTH)
return new Coordinates(position.getX(), position.getY() - 1);
1, position.getY())
if (direction == SOUTH)
return new Coordinates(position.getX(), position.getY() + 1); h
return new
if (direction == EAST)
return new Coordinates(position.getX() + 1, position.getY());
return new Coordinates(position.getX() - 1, position.getY());
}
66
Chemins de contrôles
x≤0 a x >0
Définition
b x := abs(x)+4 c
• Chemin dans le graphe de x := 2x-15
contrôle
• Débute au nœud d’entrée du
d
x = -1 x ≠ -1
graphe
• Termine au nœud de sortie e f
du graphe
g
• Peut être activable ou non
• 4 chemins de contrôles
abdeg : un chemin de contrôle • abdeg
bdfg : non • abdfg
• acdeg
• acdfg
67
Couverture structurelle
Couverture du graphe de flot de contrôle
Considérer les
Produire des
chemins de
données d’entrée Exécuter le
contrôle (tous ou Établir les oracles
permettant programme dans
certains en associés
d’activer ces ces configurations
fonction du critère
chemins
de couverture)
68
Critères de couverture structurelle
Basés sur le graphe de contrôle
Couverture de tous-les-nœuds,
Couverture de tous-les-arcs,
69
Couverture de tous-les-nœuds
Couverture de toutes les instructions
70
Tous-les-nœuds
Cas favorable
end ;
d
71
Tous-les-nœuds
Limite du critère a read(x);
72
Couverture de tous-les-arcs
Couverture des branches
• Chaque arc est couvert par au moins l’un des chemins parmi les
chemins qui constituent le jeu de test
• La valeur de vérité de chaque nœud de décision a été au moins
une fois vraie et une fois fausse
73
Couverture des Conditions / Decisions
A B A B
DC C/DC
A B A B
FPC MCC
Décision (A ∨ B) :
Ø Couverture des Décisions à A ∨ B
Ø Couverture des Conditions dans les Décisions à A , B
Ø Couverture des Conditions Exclusives à A ∧ ¬B , ¬ A ∧ B
Ø Couverture des Conditions Multiples à A ∧ B , A ∧ ¬ B , ¬ A ∧ B
74
Tous-les-arcs
Limite du critère
75
Couverture des boucles
Chemins limites et intérieurs
• Chemins limites : traversent la boucle, mais ne l’itèrent pas
• Chemins intérieurs : itèrent la boucle une seule fois
a a
Chemin limite : [abc]
chemin intérieur : [ababc]
b b
76
Couverture de tous les i-chemins
Généralise couverture chemins limites et intérieurs
77
Couverture de tous les chemins
indépendants
78
Chemins indépendants
Conditions élémentaires
a x≥0
a x ≥ 0 && x ≤ 9 true
false
true false
e x≤9
b c true false
b c
d
d
2 conditions élémentaires
3 chemins linéairement indépendants
79
Chemins indépendants
Algorithme
80
Chemins indépendants
Algorithme
81
Couverture de tous les chemins
82
Hiérarchie des critères basés sur le graphe
de contrôle
tous-les-chemins
tous-les-i-chemins tous-les-chemins-indépendants
tous-les-arcs
(TER2)
tous-les-nœuds
est plus fort que
(TER1)
Exercices
83
Le flot de données
• Le flot de données est représenté en annotant le graphe de contrôle par certaines
informations sur les manipulations de variables par le programme :
• Si une variable utilisée l’est dans le prédicat d’une instruction de décision (if,
while, etc…), il s’agit d’une p-utilisation
• Dans les autres cas (par exemple dans un calcul), il s’agit d ’une c-utilisation.
84
Définition et utilisation de variables
open (fichier1) ;
read (x,fichier1) ; Bloc 1
1 def(x), def(y), def(z)
read (y,fichier1) ; Définitions : x, y, z
Utilisations : aucune
z := 0 ;
----------------------------- util(x), util(y)
Bloc 2
while x ≥ y do Définitions : aucune 2
----------------------------- Utilisations : x, y
begin x≥y
x := x-y ; Bloc 3 x<y
z := z+1 ; Définitions : x, z 3
def(x), def(z),
end Utilisations : x, y, z
util(x), util(y), util(z)
-----------------------------
open (fichier2) ;
print (y,fichier2) ; Bloc 4 4 util(y)
close (fichier1) ; Définitions : aucune
Utilisations : y
close (fichier2) ;
85
Critères de couverture sur le flot de
données
86
Couverture de toutes les définitions
Pour chaque définition, il existe au moins un chemin qui
la couvre dans un test
x pair
1 read (x, y);
def(x), def(y)
use(x), use(y)
def(x) 2 x impair
Couverture du critère x := y+x/2
toutes-les-définitions :
3 use(x)
- [1,2,3,5,6]
x≥0 x<0
87
Couverture de toutes les utilisations
Pour chaque définition et pour chaque utilisation
accessible à partir de cette définition, couverture d’un
chemin de la définition à l’utilisation
x pair
1 read (x, y);
def(x), def(y)
Couverture du critère use(x), use(y)
toutes-les-utilisations : def(x) 2 x impair
- [1,3,4,6] x := y+x/2
- [1,2,3,4,6] use(x)
- [1,3,5,6] 3
x≥0 x<0
- [1,2,3,5,6]
writeln (y); 4 5 writeln (y+2)
use(y) use(y)
6
88
Limite du critère toutes-les-utilisations
read (x);
1 def(x) Couverture du critère
toutes-les-utilisations :
2 use(x) - [1,2,3,5,6,8]
x<0 x≥0 - [1,2,4,5,7,8]
y := 1; 3 4 y := 2;
def(y) def(y) Ces deux tests ne couvrent pas
x pair
5 use(x) tous les chemins d’utilisation :
x impair (8) peut être utilisatrice
z := 1; 6 7 z := 3; de (3) pour la variable y et
def(z) def(z) de (7) pour la variable z
8
code := y+z; def (code) => critère tous-les-DU-chemins
writeln(code); use(y), use(z), use(code)
89
Couverture de tous les DU chemins
Couvrir tous les chemins possibles entre la définition et
la référence, en se limitant aux chemins sans cycle.
1 read (x);
def(x)
x<0
2 use(x)
x≥0
Couverture du critère
y := 1; 3 4 y := 2; tous les DU chemins :
def(y) def(y) - [1,2,3,5,6,8]
x pair
5 use(x) - [1,2,4,5,7,8]
x impair - [1,2,3,5,7,8]
z := 1; 6 7 z := 3; - [1,2,4,5,6,8]
def(z) def(z)
8
code := y+z; def (code)
writeln(code); use(y), use(z), use(code)
90
Hiérarchie des critères basés
sur le flot de données
tous-les-chemins
toutes-les-utilisations
toutes-les-c-utilisations toutes-les-p-utilisations
toutes-les-définitions tous-les-arcs
tous-les-nœuds
91
TDD: Test Driven Development
Une autre vision des tests
93
Rejeux des tests
Garantir la non régression
Exercices
94
p 28
3. Automatisation des
tests d'intégration
Stratégies propres à l’intégration : big-bang, « au fil de l’eau », par incréments etc…
Intégration ascendante versus descendante.
Objets simulacres : bouchons, mocking pour remplacer un objet
Intégration continue
Focus sur un gestionnaire de configuration logiciel.
Signalement automatique des anomalies.
Exécution automatique et cyclique des tests logiciels.
Focus sur une constructeur de build.
Focus sur un serveur d’intégration continue.
95
95
Stratégies pour le test d’intégration
Voir www.istqb.org Syllabus Fondation et Analyste Technique
de Test
Niveau Intégration
• Objectifs génériques
• Tester les interfaces, les interactions avec un système ou environnement
(logiciel et matériel)
• Livrables ou documents de référence pour dériver les cas de test (Base de test)
• Conception du logiciel et du système, Architecture, Flux de données, Cas
d’utilisation
• Objets de test (Ce qui est testé)
• Interfaces, Bases de données, Infrastructure
• Défauts et défaillances typiques à trouver
• Erreurs de compilation dans l’environnement d’intégration, Contrats
d’interface non respectés
• Harnais de test (environnement requis pour l’exécution)
• Environnement d’intégration disposant de bouchons et drivers
• Outils nécessaires
• Approche spécifique au niveau (stratégie): Big-Bang, Bottom-Up ou Top-Down
96
Stratégies pour le test d’intégration
Termes, selon le glossaire ISTQB
Intégration
• le processus de combiner des composants ou systèmes en assemblages
plus grands
Tests d’intégration
• tests effectués pour montrer des défauts dans les interfaces et interactions
de composants ou systèmes intégrés. Voir aussi tests d’intégration de
composants
97
Stratégies pour le test d’intégration
Particularités
• Plus précisément, les tests d’intégration testent
• Les interfaces entre les composants (tests 2 à 2)
• Les interactions entre différentes parties d’un système (par exemple
le système d’exploitation)
• La communication technique entre applications
• Le comportement sur incident
• Quelques éléments d’exploitabilité, de sécurité
EAI Synapse
Information system
98
Stratégies pour le test d’intégration
Particularités: Plusieurs niveaux d’intégration sont possibles
• Intégration de composants (formant un système)
• Intégration de systèmes (formant un système de systèmes)
Système de systèmes A
Système 1 Système 2
Composant A
Composant 1
Composant B
Composant 2
Composant C
99
Stratégies pour le test d’intégration
Particularités
• Le test d’intégration est souvent mené après livraison d’un ou
plusieurs composants ou systèmes par un sous-traitant ou
fournisseur
100
Stratégies pour le test d’intégration
Particularités: exemple première partie
• Evolution
complexe d’un
SI…
• Quelles
applications
simuler?
• Dans quel
ordre
intégrer?
101
Stratégies pour le test d’intégration
Stratégie d’intégration « Big-Bang »
TEST KO: cherchez l’erreur!
Composant D Composant H
102
Stratégies pour le test d’intégration
Stratégie d’intégration « Top-Down »
• du composant le moins sollicité vers les composants qu’il sollicite, et ainsi de suite
• Faire un “graphe d’appel”
• Se demander par quel composant commencer! (celui qui demande le moins de bouchons/
drivers)
Composant E
Composant A Composant B
Composant D Composant H
103
Stratégies pour le test d’intégration
Stratégie d’intégration « Bottom-Up »
• du ou des composants “feuille(s)” (ne sollicitant aucun autre composant) vers les
composants “appelant”
Composant E
Composant A Composant B
Composant D Composant H
104
Intégration continue
Définition (source: Wikipedia)
• L'intégration continue est un ensemble de pratiques utilisées en
génie logiciel consistant à vérifier à chaque modification de code source
que le résultat des modifications ne produit pas de régression dans
l'application développée….
www.ranorex.com
105
Intégration continue
Prérequis
106
Intégration continue
Avantages
107
Intégration continue
Pratiques
108
Étape 1 : mise à jour des sources
109
Étape 2 : détection de la mise à jour
110
Étape 3 : récupération des sources
111
Étape 4 : construction et tests release
112
Étape 5 : livraison de la release
113
Étape 6 : publication du rapport
114
Outils
Exercices
115
p 58
4. Test fonctionnel et son
automatisation
Définition du test fonctionnel, non-régression.
Le test simulant l'action des utilisateurs à partir des interfaces
utilisateurs (IHM).
Constats sur l'automatisation du test fonctionnel.
Automatisation des tests via l'IHM, via des interfaces de
programmation (API).
Chaîne d'outils, robots de test, script (API publiques).
Gestion de l'obsolescence des tests
116
Test fonctionnel – Exemple (1)
Spécification : "Formulaire d’enregistrement pour un site web."
Login:' !ouquet'
Password:' ******'
Verifica7on:' ******'
Register' Cancel'
5Quels
Cas :sont
10 tests logiques
les tests ?
• Login (non) vide (2)
• Login (n’) existe (pas) (2)
• Password (non) vide (2)
• Password et Verification (ne) sont (pas) les mêmes (2)
• Protocole http(s) (2)
117
Test fonctionnel – Exemple (2)
Spécification : "Formulaire d’enregistrement pour un site web."
Login:' !ouquet'
Password:' ******'
Quality(
Verifica7on:' ******'
Register' Cancel'
6
5 Cas
Cas :: 13
10 tests
tests logiques
logiques
• • Login
Login (non)
(non) vide
vide (2)
(2)
• • Login
Login (n’)
(n’) existe
existe (pas)
(pas) (2)
(2)
• • Password
Password (non)
(non) vide
vide (2)
(2)
• • Password
Password etet Verification
Verification (ne)
(ne) sont
sont (pas)
(pas) les
les mêmes
mêmes (2)
(2)
• • Protocole http(s) (2)
Protocole http(s) (2)
• Vérifier qualité du password (1 par niveau) : poor, average, good
118
Test fonctionnel – Exemple (3)
Spécification : "Formulaire d’enregistrement pour un site web."
Login:' !ouquet'
Verifica7on:' ******'
Register' Cancel'
7
6 Cas
Cas :: 15
13 tests
tests logiques
logiques
• • Login
Login (non)
(non) vide
vide (2)
(2)
• • Login
Login (n’)
(n’) existe
existe (pas)
(pas) (2)
(2)
• • Password
Password (non)
(non) vide
vide (2)
(2)
• • Password
Password et et Verification
Verification (ne)
(ne) sont
sont (pas)
(pas) les
les mêmes
mêmes (2)
(2)
• • Protocole
Protocole http(s)
http(s) (2)
(2)
• • Vérifier
Vérifier qualité
qualité du
du password
password (1 (1 par
par niveau)
niveau) :: poor,
poor, average,
average, good
good
• Vérifier si enregistrement (non) humain (2)
119
Test fonctionnel – Données des Test
• Le test fonctionnel vise à examiner le comportement
fonctionnel du logiciel et sa conformité avec la
spécification du logiciel
ð Sélection des Données de Tests ( DT)
• Méthodes de sélection :
– Analyse partitionnelle des domaines des données d’entrée
– Test aux limites
– Test combinatoire – Algorithmes Pairwise
– Test aléatoire
– Génération de tests à partir d’une spécification
120
Analyse partitionnelle
Outputs
121
Analyse partitionnelle - Méthode
• Trois phases :
– Pour chaque donnée d'entrée, calcul de classes
d'équivalence sur les domaines de valeurs,
– Choix d’un représentant de chaque classe
d'équivalence,
– Composition par produit cartésien sur l'ensemble
des données d'entrée pour établir les données de
test.
122
Règles de partitionnement
• Si la valeur appartient à un intervalle, construire :
– une classe pour les valeurs inférieures,
– une classe pour les valeurs supérieures,
– n classes valides.
123
Exercice – Classe d’équivalence
On souhaite trouver les classes d’équivalence
d’un ascenseur.
Les fonctionnalités sont les suivantes :
• Il est borné par un étage minimum : le rez-de-chaussée, il
ne descend donc pas plus bas
• Il est borné par un étage maximum : N, il ne monte donc
pas plus haut
• Il a une position de maintenance maintenance
N
88
0
0
124
Correction – Classe d’équivalence
On souhaite trouver les classes d’équivalence d’un
ascenseur.
Les fonctionnalités sont les suivantes :
• Il est borné par un étage minimum : le rez-de-chaussée, il ne descend
donc pas plus bas
• Il est borné par un étage maximum : N, il ne monte donc pas plus haut
• Il a une position de maintenance
maintenance
4 classes d’équivalence : N
• où l’étage est 0 (rez-de-chaussée)
• où l’étage est N (le dernier étage) 88
• où l’étage est entre les 2 (intervalle de valeurs 1..(N − 1))
N
• où l’ascenseur est en position maintenance
…
0
0
125
Test aux limites
• Principe : on s’intéresse aux bornes des intervalles partitionnant
les domaines des variables d'entrées :
– pour chaque intervalle, on garde les 2 valeurs correspondant aux 2
limites, et les n valeurs correspondant aux valeurs des limites ± le
plus petit delta possible :
n ∈ 3 .. 15 ⇒ v1 = 3, v2 = 15, v3 = 2, v4 = 4, v5 = 14, v6 = 16
– si la variable appartient à un ensemble ordonné de valeurs, on
choisit le premier, le second, l'avant dernier et le dernier
n ∈ {-7, 2, 3, 157, 200} ⇒ v1 = -7, v2 = 2, v3 = 157, v4 = 200
– si une condition d’entrée spécifie un nombre de valeurs, définir les
cas de test à partir du nombre minimum et maximum de valeurs, et
des tests pour des nombres de valeurs hors limites invalides.
Un fichier d’entrée contient 1-255 records, produire un cas de test
pour 0, 1, 255 et 256.
126
Test aux limites – Types de données
127
Exemple – Valeur aux limites
Spécification : "Formulaire d’enregistrement pour un site web."
4 variables :
• Login : vide, court, normal, très longue chaine (+256c), login existant, ’invalide’ login
• Password : vide, très longue chaine, même login, poor, average, good
• Password verification : différent du Password, identique
• Captcha : la bonne chaine, pas la bonne
128
Analyse partitionnelle et test aux limites –
synthèse
• Le test aux limites produit à la fois des cas de test nominaux (dans
l’intervalle) et de robustesse (hors intervalle)
129
Exercice – Test aux limites
Supposons que nous élaborions un compilateur pour
un langage. Un extrait des spécifications précise :
130
Exercice – Test au limite correction
Exemples des 19 cas de tests :
• FOR A=1 TO 10 Cas nominal
FOR AA=2 TO 7 Deux caractères pour la variable
FOR ABC=1 TO 10 Erreur - trois caractères
FOR A B=1 TO 8 Erreur - deux variables
FOR &=1 TO 10 Erreur - caractère spécial pour la variable
FOR =1 TO 5 Erreur - variable manquante
FOR A=10 TO 10 Egalité des bornes
FOR I=10 TO 5 Erreur - Borne sup < Borne inf
FOR I=a TO 5 Erreur - Borne inf non entier
FOR I=1 TO 9999999999999999999999999 Erreur - Borne sup dépasse 264
FOR I=-1 TO 5 Erreur - Borne inf négative
FOR I=1 TO -5 Erreur - Borne Sup négative
FOR I=0.5 TO 2 Erreur - Borne inf décimale
FOR I=1 TO 10.5 Erreur - Borne sup décimale
I=7 TO 10 Erreur – FOR manquant
FOR I 7 TO 10 Erreur - = Manquant
FOR I = 7 10 Erreur - TO Manquant
FOR I= TO 10 Erreur – Pas de borne inf
FOR I= 1 TO Erreur – Pas de borne Sup
131
Test aux limites - Evaluation
132
Méthode pour le test combinatoire
• Les combinaisons de valeurs de domaines d’entrée donne lieu à
explosion combinatoire
• Exemple : Options d’une boite de dialogue MS Word :
On a 12 cases à cocher et un menu déroulant pouvant prendre 3 valeurs.
Jamais
Toujours
Lors de la sélection
è 212 * 3 = 12 288
133
Test combinatoire : Pair-wise
• Tester un fragment des combinaisons de valeurs qui garantissent que
chaque combinaison de 2 variables est testé
• Exemple : 4 variables avec 3 valeurs possibles chacune
134
Pairwise – Exemple
• 9 cas de test : chaque combinaison de 2 valeurs est testée
N° OS Réseau Imprimante Applica-on
Cas 1 Windows Bluetooth Laser Texte
Cas 2 Windows Cable Jet d’encre Image
Cas 3 Windows Wifi Ruban Mixe
Cas 4 Mac OS Bluetooth Jet d’encre Mixe
Cas 5 Mac OS Cable Ruban Texte
Cas 6 Mac OS Wifi Laser Image
Cas 7 Linux Bluetooth Ruban Image
Cas 8 Linux Cable Laser Mixe
Cas 9 Linux Wifi Jet d’encre Texte
L’idée sous-jacente : la majorité des fautes sont détectées par
des combinaisons de 2 valeurs de variables
135
Exercice – n-wise
On désire tester la procédure de prise de commande d’un restaurant. Pour
cela, la procédure prend en paramètres 4 variables représentant
respectivement une entrée, un plat, un dessert et un café. Chacune possède
les valeurs possibles suivantes :
136
Exercice – n-wise correction
N° Test Entrée Dessert Plat Café
1 Pâté Fromage blanc Grillade
2 Pâté Fruit Poisson
3 Pâté Gâteau Volaille
4 Pâté Glace
5 Salade Fromage blanc
6 Salade Fruit Grillade
7 Salade Gâteau Poisson
8 Salade Glace Volaille
9 Soupe Fromage blanc Volaille
10 Soupe Fruit
11 Soupe Gâteau Grillade
12 Soupe Glace Poisson
137
Exercice – n-wise correction
N° Test Entrée Dessert Plat Café
1 Pâté Fromage blanc Grillade
2 Pâté Fruit Poisson
3 Pâté Gâteau Volaille
4 Pâté Glace
5 Salade Fromage blanc Poisson
6 Salade Fruit Grillade
7 Salade Gâteau Poisson
8 Salade Glace Volaille
9 Soupe Fromage blanc Volaille
10 Soupe Fruit
11 Soupe Gâteau Grillade
12 Soupe Glace Poisson
138
Exercice – n-wise correction
N° Test Entrée Dessert Plat Café
1 Pâté Fromage blanc Grillade
2 Pâté Fruit Poisson
3 Pâté Gâteau Volaille
4 Pâté Glace Grillade
5 Salade Fromage blanc Poisson
6 Salade Fruit Grillade
7 Salade Gâteau Poisson
8 Salade Glace Volaille
9 Soupe Fromage blanc Volaille
10 Soupe Fruit Volaille
11 Soupe Gâteau Grillade
12 Soupe Glace Poisson
139
Exercice – n-wise correction
N° Test Entrée Dessert Plat Café
1 Pâté Fromage blanc Grillade Oui
2 Pâté Fruit Poisson Non
3 Pâté Gâteau Volaille
4 Pâté Glace Grillade
5 Salade Fromage blanc Poisson Non
6 Salade Fruit Grillade Oui
7 Salade Gâteau Poisson
8 Salade Glace Volaille
9 Soupe Fromage blanc Volaille Oui
10 Soupe Fruit Volaille Non
11 Soupe Gâteau Grillade
12 Soupe Glace Poisson
140
Exercice – n-wise correction
N° Test Entrée Dessert Plat Café
1 Pâté Fromage blanc Grillade Oui
2 Pâté Fruit Poisson Non
3 Pâté Gâteau Volaille Non
4 Pâté Glace Grillade
5 Salade Fromage blanc Poisson Non
6 Salade Fruit Grillade Oui
7 Salade Gâteau Poisson Oui
8 Salade Glace Volaille
9 Soupe Fromage blanc Volaille Oui
10 Soupe Fruit Volaille Non
11 Soupe Gâteau Grillade
12 Soupe Glace Poisson
141
Exercice – n-wise correction
N° Test Entrée Dessert Plat Café
1 Pâté Fromage blanc Grillade Oui
2 Pâté Fruit Poisson Non
3 Pâté Gâteau Volaille Non
4 Pâté Glace Grillade Non
5 Salade Fromage blanc Poisson Non
6 Salade Fruit Grillade Oui
7 Salade Gâteau Poisson Oui
8 Salade Glace Volaille Oui
9 Soupe Fromage blanc Volaille Oui
10 Soupe Fruit Volaille Non
11 Soupe Gâteau Grillade -
12 Soupe Glace Poisson -
142
Test combinatoire
• L’approche Pair-wise se décline avec des triplets, des
quadruplets, …. mais le nombre de tests augmente très vite
• Problème du Pair-wise :
– le choix de la combinaison de valeurs n’est peut-être pas celle qui
détecte le bug …
– Le résultat attendu de chaque test doit être fourni manuellement
143
Test aléatoire ou statistique
144
Evaluation du test aléatoire
• Intérêts de l'approche statistique :
– facilement automatisable pour la sélection des cas de
test, (plus difficile pour le résultat attendu)
– objectivité des données de test.
• Inconvénients :
– fonctionnement en aveugle,
– difficultés de produire des comportements très spécifique
145
Productivité du test aléatoire ou statistique
% couverture
Test déterministe
objectif
Test aléatoire
Effort
Les études montrent que le test statistique permet d'atteindre rapidement
50 % de l'objectif de test mais qu'il a tendance à plafonner ensuite.
146
Test à partir de modèles
Modélisation Spécifications
Techniques
de Besoins
Modèle formel
StateCharts,UML,B, BPML…
Développement
Production des tests
Cas de test
générés
Production des scripts
147
Langages de modélisation
• De nombreux paradigmes
– Systèmes de transitions (Etats / Transitions / Evénements)
• Flow Charts
• Data Flow Diagrams
• Diagramme d’état
– Diagrammes objet & association (Entité-Relation, héritage, …)
• Diagramme de classe (UML)
• Entité-Relation
– Représentation Pré-Post conditions
• OCL (UML)
• Machine Abstraite B
• Représentation :
• Graphique (plus « intuitive »)
• Textuelle (plus précise)
148
Model Based Test Generation
Modèle formel
Ensemble de
Générateur Cas de tests
de tests
Directives de
• séquence de stimuli
génération
• résultats attendus
149
Synthèse
• La
production de test s’appuie (généralement) sur une
analyse du programme (test structurel) ou de sa
spécification (test fonctionnel)
150
Univers outillé
Conformiq,)SmartesGng,)
Tableur,)Doors,)) Test)opGmal,)BenderRBT),)
HP)ALM,)IBM)Rat.) Praspel,)JML…)
Requier.)Composer)
Artéfacts)
Exigences) de)Tests)
HP,)IBM,)salomeFTM)) Tableur,)Sonar,))
Squash)TM,)Testlink) Cobertura,)jenkins)
…)
Référen3el) ) Rapports)
de)Tests)
Scripts)
Anomalies) de)Tests)
Bugzlla,)Jira,)ManGs,) IBM)RFT,)Selenium,)
)Tableur,)Redmine) HP)QuickTestPro,)Sahi,)
XxUnit)
Exercices
151
p 95
5. Automatisation de la
gestion des tests
Gestion de la couverture des exigences par les tests.
Démarche de mise au point : organisation des suites de tests et création des cas.
Préparation à l'automatisation.
Construction de la population de test.
Mise au point et vérification des tests (Revue)
Exécution, enregistrement des anomalies. Notion de rapport d'incident d'après l'IEEE.
Gestionnaires d'anomalies. Automatisation de la création des anomalies.
Analyse de résultats d'exécution de tests. Consolidation des tests.
152
152
Etape -1 : Recueil des exigences
GesEonnaire
d’exigences
193
Etape 0 : utilisation des exigences
0 Cahier
de tests
GesEonnaire RéférenEel
d’exigences de tests
0 Développement
Postes de
développement
194
Etape 1 : mise à jour des sources
0 Cahier
de tests
GesEonnaire RéférenEel
d’exigences de tests
0 Développement
1 Commit
Postes de Serveur de gesEon
développement de versions
195
Etape 2 : détection de la mise à jour
0 Cahier
de tests
GesEonnaire RéférenEel
d’exigences de tests
0 Développement
Serveur
d’intégraEon
DétecEon de
2 DétecEon de
la
la modificaEon
modificaEon
1 Commit
Postes de Serveur de gesEon
développement de versions
196
Etape 3 : récupération des sources
0 Cahier
de tests
GesEonnaire RéférenEel
d’exigences de tests
0 Développement
Serveur
3 Update
d’intégraEon
DétecEon de
2 DétecEon de
la
la modificaEon
modificaEon
1 Commit
Postes de Serveur de gesEon
développement de versions
197
Etape 4 : construction et tests realease
Compiling…
TesEng…
Unit tests … OK - Coverage: 64%
IntegraEon tests … OK – Coverage: 88%
0 Cahier Acceptance test … OK – Coverage: 88%
de tests SUCCESS
Serveur
3 Update
d’intégraEon
DétecEon de
2 DétecEon de
la
la modificaEon
modificaEon
1 Commit
Postes de Serveur de gesEon
développement de versions
198
Etape 5 : livraison release
0 Cahier
de tests
GesEonnaire RéférenEel 4 Build + Tests
d’exigences de tests
0 Développement
5 Livraison
Serveur
3 Update
d’intégraEon
DétecEon de
2 DétecEon de
la
la modificaEon
modificaEon
1 Commit Serveur de
Postes de Serveur de gesEon déploiement
développement de versions
199
Etape 5a : livraison continue
0 Cahier
de tests
Serveur de test
GesEonnaire RéférenEel 4 Build + Tests
d’exigences de tests
0 Développement
5 Livraison
Serveur
3 Update
d’intégraEon
DétecEon de
2 DétecEon de
la
la modificaEon
modificaEon
1 Commit Serveur de
Postes de Serveur de gesEon déploiement
développement de versions
200
Etape 5b : test fonctionnel continu
5 Demande execuEon 5 ExecuEon
0 Cahier
de tests Robots de tests Serveur de test
GesEonnaire RéférenEel 4 Build + Tests
d’exigences de tests
0 Développement
5 Livraison
Serveur
3 Update
d’intégraEon
DétecEon de
2 DétecEon de
la
la modificaEon
modificaEon
1 Commit Serveur de
Postes de Serveur de gesEon déploiement
développement de versions
201
Etape 6 : publication du rapport
5 Demande execuEon 5 ExecuEon
0 Cahier
de tests 6 Verdict Robots de tests Serveur de test
GesEonnaire RéférenEel 4 Build + Tests
d’exigences de tests
0 Développement
6 NoEficaEon 5 Livraison
Serveur
3 Update
d’intégraEon
DétecEon de
2 DétecEon de
la
la modificaEon
modificaEon
1 Commit Serveur de
Postes de Serveur de gesEon déploiement
développement de versions
202
Outils
• Gestions des exigences
• Référentiel de tests
• Gestionnaire des scripts de tests
• Robot d’exécutions DOORS, Jazz
• Rapport d’exécutions
QTP
Exercices
203
p 121
Fin de la partie Cours
Merci pour votre participation et bonne continuation
204