Академический Документы
Профессиональный Документы
Культура Документы
Reda Bendraou
reda.bendraou{{@}}Lip6.fr
http://pagesperso-systeme.lip6.fr/Reda.Bendraou/
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 1/57
Plan
1. Problématique du test
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 2/57
1- Problématique du test
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 3/57
Problématique du test
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 4/57
Problématique du test
analyse des
besoins
Implém. spécification
Spécif.
Test
An. b
Implémentation
test
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 5/57
Problématique: une définition !
Vérification/preuve
tests
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 6/57
Problématique du test
Pourquoi ?
Coût
Effort
Confiance
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 7/57
Vocabulaire
Testabilité
faute
bogue
erreur Fiabilité (Reliability)
défaillance
Test de Robustesse
Test statique
Test de non-régression
Tolérance aux fautes Séquence de test
Données de test
Sûreté de
fonctionnement Jeu de test
(Dependability) Test statistique
Cas de test
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 8/57
Défaillances
• Catastrophe humaine ou financière:
• Image de marque :
– FT et Bouygues en 2004 – crash des serveurs – indisponibilité 48h
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 9/57
Dues à des bugs
• USS Yorktown (1998)
– Une division par zéro coupe les moteurs
• Ariane 5 (1996)
– Mauvaise réutilisation
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 10/57
Dues au processus
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 11/57
Problématique du test
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 12/57
2- Rappels test de logiciel
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 13/57
Qu’est-ce qu’on teste?
(quelles propriétés?)
• fonctionnalité
• sécurité / intégrité
• utilisabilité
• cohérence
• maintenabilité
• efficacité
• robustesse
• sûreté de fonctionnement
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 14/57
Comment on teste?
• Test statique
– relecture / revue de code
– analyse automatique (vérification de propriétés, règles de
codage...
• Test dynamique
– on exécute le programme avec des valeurs en entrée et on
observe le comportement
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 15/57
Avec quoi on teste?
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 16/57
Exemple
décrit
Spécification Programme
implante
Test
Résultat
attendu Résultat
Comparer
différent égal
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 19/57
Test de logiciel
• Plusieurs échelles:
– Unitaire, intégration, système
• Plusieurs techniques
– Dynamique / statique
• Génération de test
– Fonctionnel / structurel
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 20/57
Hiérarchisation des tests Maintenance
Problème
Programme livrable
analyse des besoins
Test de recette
(avec client)
Plan de test système (fonctionnel)
Définition des besoins Système
Tests
Cahier des charges systèmes
?
Conception détaillée Composants unitaires Tests
unitaires
implémentation
programme le cycle en « V »
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 21/57
Cycle de vie en « spirale »
Analyse détaillée
Analyse
préliminaire « (de risque) »
Conception
V1 V2
Réalisation
Validation
Intégration
• Validation d’
d’un module indé
indépendamment des autres
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 23/57
Test unitaire
• Pour un langage procédural void Ouvrir (char *nom, Compte *C, float S, float D )
{
C->titulaire = AlloueEtCopieNomTitulaire(nom);
– unité de test = procédure (*C).montant = S ;
(*C).seuil = D ;
(*C).etat = DEJA_OUVERT ;
(*C).histoire.nbop = 0;
EnregistrerOperation(C);
EcrireTexte("Ouverture du compte numero ");
EcrireEntier(NumeroCourant+1);
EcrireTexte(", titulaire : \"");
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 24/57
Test d’intégration
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 25/57
Test d’intégration
- Cas simple: il n’
n’y a pas de cycle dans les
dépendances entre modules
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 26/57
Test d’intégration
E_RETRY
E_CHECK ONCE_PROCEDURE
ONCE_FUNCTION
NATIVE_C
DEFERRED_FUNCTION
DEFERRED_PROCEDURE
NATIVE_SMALL_EIFFEL
NATIVE_JVM
IFTHENELSE
IFTHEN
INSTRUCTION
+then_compound
ONCE_ROUTINE
PROCEDURE
FUNCTION EXTERNAL_FUNCTION
EXTERNAL_PROCEDURE
COMPOUND
E_LOOP
EFFECTIVE_ROUTINE
DEFERRED_ROUTINE +nativeNATIVE
EXTERNAL_ROUTINE
les dé
dépendances entre modules E_INSPECT
WHEN_LIST
E_WHEN
WHEN_ITEM
LOCAL_VAR_LIST
ROUTINE
WRITABLE_ATTRIBUTE
CST_ATT
ATTRIBUTE
REVERSE_ASSIGNMENT
EXPRESSION
CREATION_CALL WHEN_ITEM_1
ASSIGNMENT PROC_CALL
+call
+type E_FEATURE
DECLARATION + is_deferred : Boolean = initval
TYPE + count : Integer DECLARATION_LIST
FORMAL_ARG_LIST
+target
CALL_PROC_CALL
GLOBALS
DECLARATION_GROUP
DECLARATION_1
0..*
objets +arguments
SMALLEIFFEL
ARGUMENT_NAME + magic_count +list
LOCAL_NAME
FEATURE_CLAUSE
: Integer
TYPE+ is_ready : Boolean
+ load_class()
+list
+result_type
+ get_started() +clientsTYPE
CALL +name_list+to_runnable
+ falling_down()
+result_type
+ afd_check() +clients
CLIENT_LIST
+name
LOCAL_ARGUMENT FEATURE_CLAUSE_LIST
FEATURE_NAME CLASS_NAME
+ is_frozen : Boolean +list
+feature_clause_list CLASS_NAME
+list
+procedure_list
+names
FEATURE_NAME_LIST
+ is_deferred : Boolean
+ is_result : Boolean
ordre d’intégration
+ is_expanded : Boolean
+ is_void : Boolean
/+ is_generic : Boolean
+ is_any : Boolean = initval
+ is_general : Boolean CREATION_CLAUSE_LIST
FEATURE_NAME
EXPRESSION
+origin_base_class
+creation_clause_list
+base_class +base_class
EXPORT_ITEM
RENAME_PAIR +base_class
FEATURE_NAME_LIST
(from InheritanceClause)
(from InheritanceClause)
FROZEN_FEATURE_NAME
INFIX_NAME SIMPLE_FEATURE_NAME
PREFIX_NAME
+export_list
+rename_list
+undefine_list +parent_list
PARENT_LIST
+redefine_list (from InheritanceClause) +current_type
+select_list PARENT
(from InheritanceClause)
TYPE FORMAL_GENERIC_ARG
/ path : String + +constraint
constrained : boolean
+ rank : Integer
+generic_list
+list
FORMAL_GENERIC_LIST
TYPE_CHARACTER +formal_generic_list
TYPE_GENERIC +formal_generic_list
TYPE_FORMAL_GENERIC
TYPE_CLASS
(from TYPE)(from TYPE)(from TYPE)
TYPE_ANY
TYPE_POINTER TYPE_NONE
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 27/57
Test système
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 28/57
Test de non régression
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 29/57
Etapes et hiérarchisation des tests
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 30/57
2- Rappels test de logiciel
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 31/57
Le test dynamique : processus
Exécution
Génération
Résultat Spécification S
de données
de test
Oracle Oracle
faux Localisation /
Problèmes Verdict
Mise au point
vrai
non vérifié
Critère d’arrêt
Diagnostique
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 32/57
Le test dynamique de logiciel
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 33/57
Le test dynamique
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 34/57
La génération de test
I1 O1
I2
I3 O2
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 35/57
Test fonctionnel
• Spécification formelle
– Modèle B, Z
– Automate, système de transitions
• UML
– Use cases
– Diagramme de classes (+ contrats)
– Machines à états / diagramme de sé
séquence
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 36/57
Test structurel
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 37/57
Génération de test
• Génération déterministe
– « à la main »
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 38/57
3- Test unitaire de composants 00
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 39/57
Test unitaire OO
• Tester une unité isolée du reste du système
• Corps de la méthode
– Configuration initiale
– Une donnée de test
• un ou plusieurs paramètres pour appeler la méthode testée
– Un oracle
• il faut construire le résultat attendu
• ou vérifier des propriétés sur le résultat obtenu
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 41/57
Exemple
Comment tester la classe StringList?
•tester l’ajout dans une liste
Node - next vide
StringList - LastNode
+ Node()
avec un élément
+ StringList()
+ add(it: String)
- CurrentNode
+ isFirst(): boolean •tester le retrait dans une
+ insert(it: String) + isLast(): boolean
+ item(): String 0..1
liste avec deux éléments
- previous
+ next() •....
+ previous() 0..1
+ remove()
+ replace(it: String)
0..1
Comment écrire ces tests?
+ size(): int - FirstNode
Comment les exécuter?
Les tests sont-ils bons?
Est-ce que c’est assez testé?
...
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 42/57
Exemple : test de StringList
- next
StringList - LastNode Node
- item: String 0..1
- count: int 0..1
+ StringList() + Node()
+ add(it: String) + isFirst(): boolean
- CurrentNode + isLast(): boolean
+ insert(it: String)
+ item(): String 0..1 - previous
+ next()
+ previous() 0..1
+ remove()
0..1
+ replace(it: String)
+ size(): int - FirstNode
- Créer une classe de test qui manipule des instances de la classe StringList
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 44/57
4- Cas de Tests Abstraits
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 45/57
Cas de Test Abstrait
• Un cas de test abstrait est un cas de test construit à partir de la spé
spécification
de l’l’application
• Afin de réaliser et d’exécuter une suite de tests sur une application, il est
nécessaire de :
– Construire l’ensemble des cas de test abstraits composant la suite de tests
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 46/57
Dépendances entre tests et application
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 47/57
Cas de Test Abstrait
Utilisation des diagrammes de Séquences UML
• Utilisation des diagrammes de collaboration UML afin de pouvoir spécifier des cas
de test.
• Quelques Rè
Règles :
– L’interaction doit obligatoirement contenir un objet représentant le testeur. Cet
objet doit être identifié Testeur et ne pas avoir de type. L’objet Testeur ne doit
pas être créé ni supprimé par un objet de l’interaction.
– L’objet Testeur ne doit pas non plus recevoir de message d’appel d’opération.
– L’interaction doit obligatoirement contenir d’autres objets. Tous les autres objets
doivent être identifiés et typés. Tous ces objets doivent être créés par l’objet
Testeur.
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 48/57
Cas de Test Abstrait
Utilisation des diagrammes de Séquences UML
• Nous appellerons diagramme de séquence de test le
diagramme de séquence représentant graphiquement une
interaction de test.
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 49/57
Cas de Test Abstrait: Exemple
test de StringList- la méthode insert()
Testeur:
Cre ate
list:StringList
list
add("first")
a dd("se cond")
inse rt("third")
des c ription
as s ertT rue(lis t.s ize()==3 );
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 50/57
5- Cas de Tests Exécutables
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 51/57
JUnit
• Origine
– Xtreme programming (test-first development)
– framework de test écrit en Java par E. Gamma et K. Beck
– open source: www.junit.org
• Objectifs
– test d’applications en Java
– faciliter la création des tests
– tests de non régression
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 52/57
Junit:Framework
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 53/57
Cas de Tests Exécutables
• Dérivés des cas de tests abstraits
• Quelques Rè
Règles:
– À toute interaction doit correspondre un cas de test JUnit.
• Une classe Java qui hérite de la classe JUnit TestCase.
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 54/57
Cas de Tests Exécutables
test de StringList- la méthode insert()
StringList - LastNode Node
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 56/57
Lectures
• Software Engineering,
– Ian Sommerville, Addison Wesley; 8 edition (15 Jun 2006), ISBN-10: 0321313798
• The Mythical Man-Month
– Frederick P. Brooks JR., Addison-Wesley, 1995
• Cours de Software Engineering du Prof. Bertrand Meyer à cette @:
– http://se.ethz.ch/teaching/ss2007/252-0204-00/lecture.html
• Cours d’Antoine Beugnard à cette @:
– http://public.enst-bretagne.fr/~beugnard/
-----------------------
• UML Distilled 3rd édition, a brief guide to the standard object modeling language
– Martin Fowler, Addison-Wesley Object Technology Series, 2003, ISBN-10: 0321193687
• UML2 pour les développeurs, cours avec exercices et corrigés
– Xavier Blanc, Isabelle Mounier et Cédric Besse, Edition Eyrolles, 2006, ISBN-2-212-12029-X
• UML 2 par la pratique, études de cas et exercices corrigés,
– Pascal Roques, 6ème édition, Edition Eyrolles, 2008
• Cours très intéressant du Prof. Jean-Marc Jézéquel à cette @:
– http://www.irisa.fr/prive/jezequel/enseignement/PolyUML/poly.pdf
• La page de l’OMG dédiée à UML: http://www.uml.org/
------------------------
• Design patterns. Catalogue des modèles de conception réutilisables
– Richard Helm (Auteur), Ralph Johnson (Auteur), John Vlissides (Auteur), Eric Gamma (Auteur), Vuibert
informatique (5 juillet 1999), ISBN-10: 2711786447
• Cours sur les tests est basé
basé sur les Cours trè
très complets et bien faits de Yves le Traon et Benoit Baudry
© Reda Bendraou LI386-S1 Génie Logiciel – UPMC Cours 5: Les Tests 57/57