! Le test de logiciel

Documents pareils
Environnements de développement (intégrés)

Héritage presque multiple en Java (1/2)

Auto-évaluation Programmation en Java

TP1 : Initiation à Java et Eclipse

LOG4430 : Architecture logicielle et conception avancée

Package Java.util Classe générique

Bases Java - Eclipse / Netbeans

Un ordonnanceur stupide

Programmer en JAVA. par Tama

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Programmation Orientée Objet

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Programmation Par Objets

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Développement Logiciel

Premiers Pas en Programmation Objet : les Classes et les Objets

Alfstore workflow framework Spécification technique

RMI le langage Java XII-1 JMF

Corrigé des exercices sur les références

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Alignement avec les métiers par le test fonctionnel et d acceptation en projets agiles

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Test de logiciel dans les méthodes agiles

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

TP3 Intégration de pratiques agiles. 1. User Stories (1) Scénario d intégration agile. En direct-live du château

Projet de programmation (IK3) : TP n 1 Correction

as Architecture des Systèmes d Information

Approche Contract First

Objets et Programmation. origine des langages orientés-objet

Synchro et Threads Java TM

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Certificat Big Data - Master MAthématiques

Remote Method Invocation (RMI)

Corrigés des premiers exercices sur les classes

4. Groupement d objets

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Générer du code à partir d une description de haut niveau

Les Bonnes PRATIQUES DU TEST LOGICIEL

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Gestion distribuée (par sockets) de banque en Java

TD/TP PAC - Programmation n 3

Chapitre VI- La validation de la composition.

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Utiliser Java sans BlueJ

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Cours 1: Java et les objets

Développement ebusiness

Spring par la pratique

Plan du cours. Historique du langage Nouveautés de Java 7

TD/TP PAC - Programmation n 3

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Design patterns. Design patterns - définition. Design patterns - avantages

Remote Method Invocation Les classes implémentant Serializable

OpenPaaS Le réseau social d'entreprise

Génie Logiciel avec Ada. 4 février 2013

Programmation Objet Java Correction

CCI Génie Logiciel UFR - IMA. Objectifs du cours d'aujourd'hui. Génie Logiciel Validation par le test. Qu est-ce que tester un programme?

Génie logiciel (Un aperçu)

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Une introduction à la technologie EJB (2/3)

Java Licence Professionnelle CISII,

TP1 : Initiation à Java et Eclipse

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

Exercices sur les interfaces

Agile Maroc 24 Novembre Méthodes agiles. Thierry Cros. Agile Maroc 24 novembre 2010

Testez votre installation. Créer un répertoire vide

Java Licence professionnelle CISII,

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Création d un service web avec NetBeans 5.5 et SJAS 9

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Une introduction à Java

Plan. 1 Cycles de développement. 2 Méthodes agiles, principes généraux. 3 Comment se passe un Sprint?

Serveur d'archivage 2007 Installation et utilisation de la BD exist

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

ACTIVITÉ DE PROGRAMMATION

Problèmes liés à la concurrence

1. Installation d'un serveur d'application JBoss:

LOG4430 : Architecture logicielle et conception avancée

Présentation du PL/SQL

Dis papa, c est quoi un bus logiciel réparti?

Apache Camel. Entreprise Integration Patterns. Raphaël Delaporte BreizhJUG

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Exercices sur SQL server 2000

Tp 1 correction. Structures de données (IF2)

Programmation par composants (1/3) Programmation par composants (2/3)

INITIATION AU LANGAGE JAVA

Retour d expérience implémentation Scrum / XP

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

Conduite de projets SI. Les méthodes «Agiles» N QUAL/1995/3660e ORESYS

Création d objet imbriqué sous PowerShell.

Chapitre 10. Les interfaces Comparable et Comparator 1

INTRODUCTION AUX TESTS CODES DE L INTERFACE UTILISATEUR

Tutoriel d installation de Hibernate avec Eclipse

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Transcription:

! Le test de logiciel! Plan 1. Introduction au test unitaire 2. JUnit, une bibliothèque Java de test unitaire 3. Test-driven development CM1- Introduction au test du logiciel CM2- Le test unitaire des logiciels à objets CM3- L analyse de mutation CM4- Le test d intégration des logiciels à objets CM5- Le test système des logiciels à objets - 1 - - 2 -! Plan! Test unitaire OO 1. Introduction au test unitaire 2. JUnit, une bibliothèque Java de test unitaire 3. Test-driven development Ø Tester une unité isolée du reste du système Ø L unité est la classe Test unitaire = test d une classe Ø Test du point de vue client les cas de tests appellent les méthodes depuis l extérieur on ne peut tester que ce qui est public Le test d une classe se fait à partir d une classe extérieure Ø Au moins un cas de test par méthode publique Ø Il faut choisir un ordre pour le test quelles méthodes sont interdépendantes? - 3 - - 4-1

! Test unitaire OO! Cas de test unitaire Ø Problème pour l oracle : Encapsulation : les attributs sont souvent privés Difficile de récupérer l état d un objet Ø Penser au test au moment du développement («testabilité») prévoir des accesseurs en lecture sur les attributs privés des méthodes pour accéder à l état de l objet Ø Cas de test = une méthode Ø 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 Ø Une classe de test pour une classe testée Regroupe les cas de test Il peut y avoir plusieurs classes de test pour une classe testée - 5 - - 6 -! Exemple : test de StringList! Exemple : insertion dans une liste StringList - count: int + StringList() + add(it: String) + insert(it: String) + item(): String + nex t() + previous() + remov e() + replace(it: String) + size(): int - LastNode Node - item: String + Node() + isfirst(): boolean + islas t(): boolean - next Créer une classe de test qui manipule des instances de la classe StringList Au moins 9 cas de test (1 par méthode publique) Pas accès aux attributs privés : count, LastNode, CurrentNode, FirstNode - CurrentNode - FirstNode - previous - 7 - StringList - count: int + StringList() + add() + insert() + item() + next() + previous() + remove() + replace() + size() spécification du cas de test initialisation appel avec donnée de test oracle - Las tnode - CurrentNode - FirstNode Node - item: String + Node() + isf irst() + islast() - nex t - prev ious //first test for insert: call insert and see if //current element is the one that's been inserted public void testinsert1(){ StringList list = new StringList(); list.add("first"); list.add("second"); list.insert("third"); asserttrue(list.size()==3); asserttrue(list.item()=="third"); - 8-2

! Plan! JUnit 1. Introduction au test unitaire 2. JUnit, une bibliothèque Java de test unitaire 3. Test-driven development Ø 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 - 9 - - 10 -! JUnit : un framework! JUnit : un framework «Un framework est un ensemble de classes et de collaborations entre les instances de ces classes.» Ø Le source d un framework est disponible Ø Ne s utilise pas directement: il se spécialise Ex: pour créer un cas de test on hérite de la classe TestCase è Un framework peut être vu comme un programme à «trous» qui offre la partie commune des traitements et chaque utilisateur le spécialise pour son cas particulier. http://st-www.cs.uiuc.edu/users/johnson/frameworks.html - 11 - - 12-3

! JUnit : un framework! JUnit : un framework #ffailedtest TestFailure AssertionFailedError Assert <<interface>> Test * +ffailures * +ftests +run(inout p0:testresult) +counttestcases():integer composite TestResult * +flisteners <<interface>> TestListener TestCase -fname : string +runbare() #runtest() #setup() #teardown() +run(inout result:testresult) template TestSuite -fname : string +run(inout result:testresult) setup(); runtest(); teardown(); - 13 - See http://junit.sourceforge.net/doc/cookstour/cookstour.htm - 14 -! JUnit v3 : codage (1/5)! Exemple : une classe StringList Ø Organisation du code des tests cas de Test: TestCase setup() et teardown() les méthodes de test suite de Test: TestSuite Méthodes de test Cas de test Suite de Test - 15 - //Une classe qui défini une liste de chaines de caractères public class StringList { private int count; private Node lastnode; private Node firstnode; public StringList(){ count=0; public String item(){... public int size(){... public void add (String it){... public void insert (String it){...... - 16-4

! JUnit v3 : codage (2/5)! JUnit v3 : codage (3/5) Ø Codage d un «TestCase»: déclaration de la classe Hérite de JUnit.framework.TestCase! public class TestStringList extends TestCase { //déclaration des instances private StringList list; //setup() //teardown() //méthodes de test //main() - 17 - - la méthode setup: //appelée avant chaque cas de test //permet de factoriser la construction de «l état du monde» protected void setup() throws Exception { list = new StringList(); - la méthode teardown: //appelée après chaque cas de test //permet de défaire «l état du monde» protected void teardown() throws Exception { super.teardown(); - 18 -! JUnit v3 : codage (4/5)! Les assertions de JUnit - les méthodes de test: //test add two elements public void testadd2(){ list.add("first"); list.add("second"); asserttrue(list.size()==2); asserttrue(list.item()=="second"); - caractéristiques: - nom préfixé par «test» - publique, type de retour void! - contient des assertions (définie l oracle) Ø asserttrue(...), assertfalse(...) Ø assertequals(object, Object) Ø assertsame(object, Object) Ø assertnull(...) Ø assertequals(double expected, double actual, double delta) ñ Voir la liste des méthodes static de la classe Assert - 19 - - 20-5

! JUnit v3 : codage (5/5)! JUnit v3 : lancement des tests - regroupement des méthodes de test: public static Test suite() { TestSuite suite = new TestSuite(); suite.addtest(newtestedclass( testadd2() ); suite.addtest(teststringlist.suite()); suite.addtestsuite(teststringlist.class) return suite; - 21 - Ø On utilise un TestRunner graphique ou textuel. graphique : «keep the bar green to keep the code clean» java junit.swingui.testrunner! textuel : affichage des résultats sur la console junit.textui.testrunner.run(<ma suite de test>);! // main! junit.textui.testrunner <ma suite de Test>! // ligne de commande!! è java -classpath $CLASSPATH:~/<monchemin>junit.jar <TestClass>! - 22 -! JUnit v3 : détail d implémentation! JUnit version 4 Ø Pour exécuter une suite de tests, JUnit utilise l introspection public TestSuite (final Class theclass){ Method[] = theclass.getdeclaredmethods private boolean istestmethod(method m) { String name= m.getname(); Class[] parameters= m.getparametertypes(); Class returntype= m.getreturntype(); return parameters.length == 0 && name.startswith("test") && returntype.equals(void.type); - 23 - Ø Fonctionne avec Java 5+ Ø Utilisation intensive des annotations Ø Plus de runner graphique (laissé au soin des IDEs) Ø Paquetage org.junit! Ø Nouvelle architecture Ø Tests paramétrés, timeouts, etc - 24-6

! JUnit v4 : classe et méthode de test! JUnit v4 : classe et méthode de test Ø Classe de test : import org.junit.test;! import static org.junit.assert.*;! Ø Méthodes de test : Nom de méthode quelconque Annotation @Test! Publique, type de retour void! Pas de paramètre, peut lever une exception Annotation @Test(expected = Class) pour indiquer l exception attendue Annotation @Ignore pour ignorer un test Ø Méthodes avec annotations @Before ou @After import org.junit.before;, etc! Publiques (et plus protected) Exécutées avant/après chaque méthode de test Possibilité d annoter plusieurs méthodes (ordre d exécution indéterminé) Ø Méthodes avec annotations @BeforeClass et @AfterClass Publiques et statiques Exécutées avant (resp. après) la première (resp. dernière) méthode de test Une seule méthode pour chaque annotation - 25 - - 26 -! JUnit v4 : suite de test! JUnit v4 : test paramétrés Ø utilisation des annotations Ø utilisation d un autre runner que celui par défaut, le org.junit.runners.suite! Ø changer de runner : annotation @RunWith(Class)! Ø classe vide annotée @RunWith(Suite.class)! Ø pour indiquer comment former la suite de test : annotation @SuiteClasses(Class[])! Ø Pour factoriser les données de test : runner org.junit.runners.parameterized! Données fournies par une méthode publique statique qui retourne une collection et est annotée par @Parameters constructeur public pour la classe de test qui prend en paramètre les données et le résultat attendu produit en croix des données de test et des méthodes de test! - 27 - - 28-7

! JUnit v4 : lancement des tests Ø Le runner par défaut exécute tous les tests (non ignorés) de la classe!! è java org.junit.runner.junitcore <TestClass>! - 29 - - 30 -! Intégration dans Eclipse! JUnit v4 : Intégration dans Eclipse Ø Si les classes de test ne sont pas reconnues comme telles : compatibilité arrière avec JUnit 3.8 adaptateur junit.framework.junit4testadapter permet de créer une suite de test 3.8 ajouter dans chaque classe de test! public static junit.framework.test suite() { return new JUnit4TestAdapter(TestParamSum.class); - 31 - - 32-8

! JUnit Ø Permet de structurer les cas de test cas de test / suite de test Ø Permet de sauvegarder les cas de test important pour la non régression quand une classe évolue on ré-exécute les cas de test - 33 - - 34 -! JUnit! Plan Ø www.junit.org (current stable version: 4.10) Ø Avantages gratuit simple intégré à Eclipse Ø Inconvénients exploitation des résultats (pas d historique...) Ø Généralisation des concepts (XUnit) www.testdriven.com 1. Introduction au test unitaire 2. JUnit, une bibliothèque Java de test unitaire 3. Test-driven development - 35 - - 36-9

! Test-first development! Test-first development Ø Xtreme programming Ø Écrire les cas de test avant le programme les cas de test décrivent ce que le programme doit faire avant d écrire le code, les cas de test échouent quand on développe, les cas de test doivent passer Ø Ensuite on développe la partie du programme qui fait passer le cas de test - 37 - succès échec Écrire un cas de test Exécuter les cas de test échec Faire un petit changement Exécuter les cas de test développement s arrête développement continue Exemple : ajout dans une liste chainée public void testadd(){ list.add("first"); asserttrue(list.size()==1); public void add (String it){ Node node = new Node(); node.setitem(it); node.setnext(null); if (firstnode == null) { node.setprevious(null); this.setfirstnode(node); lastnode = node; this.setcurrentnode(node); - 38 -! Test-first development! Test-first development Ø Les cas de test servent de support à la documentation des exemples d utilisation du code Ø Tester avec une intention précise qu est-ce qu on teste? pourquoi on le teste? quand est-ce assez testé? Ø Retours rapides sur la qualité du code itérations courtes dans le cycle de développement on exécute le code tout de suite (avant même de l avoir écrit) On ne code que quand un test a échoué Ø Les cas de test spécifient ce que le programme doit faire mais pas comment il faut associer TDD à des refactorings fréquents revoir la structure du code ne pas oublier la conception Grande importance du test de non-régression quand on refactore les cas de test qui passaient doivent continuer à passer - 39 - - 40-10

! Test-first development Ø Importance d un environnement pour l exécution automatique des tests pouvoir exprimer facilement des test unitaires pouvoir les exécuter rapidement pouvoir réexécuter les cas de test Ø JUnit + d autres outils pour automatiser le test et permettre TDD - 41-11