Développement guidé par les tests

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Le struts validator – framework de validation
Spécialisation/généralisation Héritage Polymorphisme.
Spécialisation/généralisation Héritage Polymorphisme
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
CONTINUOUS TESTING Hakima Zidouri Informatique Réseau 3
C.
JAV - TD 6 Structures de données JAVA
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
26/05/071 Présentation de JUnit Partie 2 NICOLAS BOUSSEKEYT CNAM
Principes de programmation (suite)
Tests Programmation par contrats
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
UNIVERSITE CHOUAIB DOUKKALI Département des mathématiques
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Laboratoire d'Informatique de l’Université de Franche-Comté
Chapitre VII Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Méthodes génériques 4. Types paramètres.
TD Table traçante - Porte stylo Simulation d’injection plastique pour valider la conception MoldFlow Plastics Advisers version 8.0.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Des outils pour le développement logiciel
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Techniques de test Boulanger Jean-Louis.
Test et débogage Tests unitaires. Gestion d’erreurs. Notion d’état, de pré-condition et de post-condition. Assertion. Traces de programme. Débogueur et.
Structures de données IFT-2000
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
JUnit Présentation complète de JUnit et « guide d’utilisation » en 13 transparents.
Présentation Structures de Données et TDA
P. Van Roy, LINF1251 LINF1251: Le Langage Java Peter Van Roy Département dIngénierie Informatique, UCL
Programmation concurrente
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
IFT 6800 Atelier en Technologies d’information
Les tests Démo 10 : IFT3912.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 6. Gestion des erreurs et des exceptions : Fonctionnement.
Outils de test fonctionnel et non fonctionnel
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
1111 Gestion des exceptions Objectifs À la fin de ce cours, vous serez capables de : • Expliquer les concepts de base de la gestion des exceptions.
Les assertions en Java.
Test logiciel Xavier Baril.
Objectifs À la fin de ce cours, vous serez capables de :
Tests Unitaires POO Frédéric Moal année 2010/2011 1
Annexe 1 Tests unitaires d'applications Java avec JUNIT
La notion de type revisitée en POO
Cours 9 Exceptions (fin) Généricité. POO-L3 H. Fauconnier2 Chaînage d'exceptions  Une exception peut être causée par une autre.  il peut être utile.
Le management de l'IVVQ Processus techniques IVVQ
Supports de formation au SQ Unifié
11/04/ L'héritage Cours 7 Cours 7.
Variables et accès en Java. Déclaration des variables final transient static private Printer hp; transient => ne doivent pas être sérialisées volatile.
Introduction au Génie Logiciel
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
Extrait du Referentiel BTS Systèmes numériques Options : Informatique et réseaux et Électronique et communication S1 à S9 Définition des savoirs et savoir-faire.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Schéma de conception Factory Method Exemple Sylvain Giroux.
Présentation AICHA REVEL INGENIEUR D’ÉTUDE STERIA DEPARTEMENT TRD
MOCK.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
6ième Classe (Mercredi, 17 novembre) CSI2572
Héritage Conception par Objet et programmation Java
1 Cpt JAVA : Eclipse (bis) Debogage. 2 Code à tester public class siecle { int t; public siecle() { super(); t=1; } static public boolean vrai() { return(false);
Document de spécification d’exigences Normes IEEE et 29148:2011
BlueJ_III 1 Java, les objets : tout de suite ! Interaction entre objets Notes de cours associées au chapitre 3 tutorial BlueJ
PRÉSENTATION AGL LES TESTS LOGICIELS LES TEST LOGICIELS 1 Mickael BETTINELLI Brandon OZIOL Gaétan PHILIPPE Simon LUAIRE.
Transcription de la présentation:

Développement guidé par les tests

Tests logiciels Il n'est pas possible de prouver qu'un système informatique fonctionne correctement dans tous les cas de figure problèmes matériels problèmes logiciels Un test est un procédure partielle d'un système informatique l'objectif est de trouver le nombre maximum de comportement problématique du logiciel Tests 2

Tests logiciels Un test examine une hypothèse formulées par des données en entrées un module à tester un observation attendue Un test est un ensemble d'un ou plusieurs cas de test Un test respecte l'exigence de répétabilité vérification de la non régression Tests 3

Tests logiciels Organismes, normes et projets IEEE 829-1998 ISTQB : International Software Testing Qualification Board CFTL : Comité Français des Tests Logiciels projet STSARCES : Software quality and safety requirements Tests 4

Défaut (Bug) Un défaut est une imperfection dans un composant ou un système qui peut en perturbéer le fonctionnement un code étant syntaxiquement et algorithmiquement correct peut présenter un défaut qui se manifestera plus tard défaut de performance par exemple Tests 5

Sûreté de fonctionnement Prévention des fautes ensemble des dispositions prises pour assurer un développement maîtrisé du produit concerne donc le processus général de conception du système Tolérance aux fautes ensemble de techniques destinées à fournir un service en dépit des fautes concerne la détection des fautes et mise en position de repli Tests 6

Sûreté de fonctionnement Élimination des fautes application au cours de chaque phase du cycle de vie de méthodes et techniques destinées à réduire la présence de fautes Prévision des fautes évaluation du comportement du système par rapport à l'apparition de fautes Tests 7

Vérification du logiciel Objectifs démontrer que le produit logiciel issu d'une phase de développement est conforme aux spécifications détecter et rendre compte des fautes pouvant avoir été introduites au cours des phases précédent la vérification Techniques utilisées tests revue et analyse de code Tests 8

Test logiciel Approche dynamique de la vérification l'objectif est de s'assurer que le logiciel possède les caractéristiques requises pour son contexte d'utilisation il faut donc décrire avec précision le contexte les fonctionnalités attendues les contraintes d'environnement les situations dangereuses ... Tests 9

Tests du logiciel Détection d'éventuels écarts entre le comportement attendu et le comportement observé Obtenir la confiance nécessaire avant l'utilisation opérationnelle Tests 10

Types de tests du logiciel Tests unitaires chaque module effectue toute la fonction et seulement la fonction prévue on distingue : les tests logiques : recherche d'erreur, vérification de l'enchaînement des branches parcourues les tests de calcul : vérification des résultats, des performances, de l'exactitude des algorithmes Tests 11

Types de tests du logiciel Tests d'intégration du logiciel démonstration du bon fonctionnement d'unités fonctionnelles constituées de modules vérification des enchaînements entre modules, de la circulation des données vérification des reprises en cas d'interruption Tests 12

Types de tests du logiciel Tests de validation s'assurer que le logiciel dans son environnement matériel répond aux spécifications fonctionnelles Tests 13

JUnit Framework de rédaction et d'exécution de tests unitaires www.junit.org Imaginé et développé par Kent Beck et Erich Gamma Offre au développeur une environnement simple de rédaction de tests Tests 14

JUnit 3 Diagramme des classes principales Test run(TestResult) TestCase TestSuite run(TestResult) runTest() setUp() tearDown() run(TestResult) addTest(Test) TestResult Tests 15

JUnit 3 Pour utiliser JUnit dans votre projet sélectionnez les propriétés du projet dans Java Build Path sélectionnez l'onglet Libraries cliquez sur le bouton Add External Jar recherchez le jar de JUnit dans le répertoire plugins du répertoire d'installation d'Eclispe selon la version d'Eclipse vous aurez le choix entre les versions 3 et 4 de JUnit Tests 16

JUnit 3 Tests 17

JUnit 3 Écriture d'un test dériver une classe de junit.framework.Testcase coder les tests, dans des méthodes testxxxx méthodes publiques contenant des assertions TestCase implémente l'interface Test et dérive de la classe Assert la classe Assert possède de nombreuses méthodes permettant de valider le code Tests 18

JUnit 3 Exemple de test le test peut-être lancé sous Eclipse par Run As... JUnit Test public class CalculatriceTestSimple_1 extends TestCase { public void testAddition() int a = 3; int b = 4; int r = a+b; Calculatrice calc = new Calculatrice(); assertTrue(r==calc.additionner(a, b)); } Tests 19

JUnit 3 L'exécution du test ouvre une nouvelle vue les méthodes commençant pat testxxx sont exécutées les tests qui ne sont pas passés sont indiqués en failure un double clique sur le test positionne le curseur sur le code correspondant Tests 20

JUnit 3 Méthodes d'assertion Méthode Description assertEquals vérifie l'égalité entre deux objets assertFalse vérifie si l'expression est fausse assertNotNull vérifie que l'objet n'est pas null assertNotSame vérifie que deux références sont différente assertNull vérifie que l'objet est null assertSame vérifie que deux références sont les mêmes assertTrue vérifie que l'expression est vraie fail provoque l'échec du test Tests 21

JUnit 3 Méthodes d'assertion Utilisation d'une fixture deux formes assertYYY(valeur1 [,valeur2]) assertYYY(messageSiErreur, valeur1 [,valeur2]) Utilisation d'une fixture méthodes protected Méthode Description setUp initialisation, invoquée avant chaque méthode de test tearDown libération des ressources, invoquées après chaque méthode de test Tests 22

JUnit 3 - suite de tests Écriture d'une méthode Test suite() création d'un objet de type TestSuite dans la méthode codage du chaînage des appels aux tests addTest() invoque le test passé au constructeur de notre classe de test nécessite un constructeur avec String dans la classe de Test addTestSuite() invoque l'ensemble des tests de la classe de test suite.addTest(new CalculatriceTestSimple_1("testAddition")); public CalculatriceTestSimple_1(String test) { super(test); } Tests 23

JUnit 3 - suite de tests Exemple de suite de tests public class CalculatriceTestsSuites { public static Test suite() TestSuite suite = new TestSuite("Exemple de suite de tests"); suite.addTestSuite(CalculatriceTestSimple_1.class); suite.addTestSuite(CalculatriceTestSimple_2.class); return suite; } Tests 24

JUnit 3 - suite de tests Répétition de test classe RepeatedTest public class CalculatriceTestRepetition { public static Test suite() TestSuite suite = new TestSuite(); suite.addTest(new RepeatedTest(new CalculatriceTestSimple_1("testAddition"), 10)); return suite; } Tests 25

JUnit 3 - assistant Eclipse Eclipse propose un assistant permettant de mettre rapidement en place des tests par un new JUnit Test Case sur le projet il suffit de renseigner l'assistant la vue suivante de l'assistant permet de choisir les méthodes à tester Tests 26

JUnit 3 - assistant Eclipse La classe de test générée public class Tests extends TestCase { public void testAdditionner() fail("Not yet implemented"); } public void testMultiplier() public void testSoustraire() public void testDiviser() Tests 27

JUnit - assistants Eclipse De même pour créer un chainage de tests File -> New -> Other -> Java -> JUnit -> JUnit Test Suite Tests 28

JUnit 4 Le framework JUnit a été largement remanié lors de son passage à la version 4 utilisation du framework Hamcrest utilisation des annotations L'utilisation dans les projets nécessite l'importation des archives (répertoire plugins) junit.jar de JUnit 4 org.hamcrest.core_1.1.0.v20090501071000.jar ces archives sont importées si l'assistant est utilisé Tests 29

JUnit 4 De nouvelles fonctionnalités font leur apparition annotations pour les tests et suites de tests nouvelles assertions suppositions tests paramétrés Tests 30

JUnit 4 - annotation @Test Les méthodes de test sont annotée avec @Test pas besoin de dériver de TestCase les assertions sont des méthodes statiques de la classe org.junit.Assert les méthodes n'ont pas l'obligation d'être nommées en testXxxx Paramètres principaux de l'annotation expected : classe Throwable attendue timeout : durée maximale en millisecondes @Ignore permet d'ignorer un test Tests 31

JUnit 4 - annotation @Test import org.junit.Test; import static org.junit.Assert.*; public class TestsUnitaires { @Test public void testAddition() Calculatrice calc = new Calculatrice(); assertTrue(5 == calc.additionner(2, 3)); } public class TestTimeout { @Test(timeout = 1000) public void dureeRespectee() {} public void dureeNonRespectee() throws InterruptedException Thread.sleep(10000); } Tests 32

JUnit 4 - fixture Méthodes annotées avec @Before ou @After méthodes exécutées avant et après chaque méthode de test méthode publique plusieurs méthodes peuvent être annotées avec la même annotation l'ordre d'invocation des méthodes annotées est indéterminé Tests 33

JUnit 4 - fixture Méthodes annotées avec @BeforeClass ou @AfterClass méthodes exécutées avant l'invocation du premier test de la classe, et après le dernier test de la classe méthodes publiques et statiques une seule méthode par annotation Tests 34

JUnit 4- fixture Tests 35 public class TestFixture { @BeforeClass public static void montageClasse() System.out.println(">> Montage avant tous les tests"); } @AfterClass public static void demontageClasse() System.out.println(">> Démontage après tous les tests"); @Before public void montage() System.out.println("------ AVANT"); @After public void demontage() System.out.println("------ APRES"); @Test public void test1() System.out.println("Test 1"); @Test public void test2() System.out.println("Test 2"); Tests 35

JUnit 4 - suite de tests Classe vide annotée avec @RunWith, possibilité de changer la classe d'exécution de la suite Suite.class par défaut @SuiteClasses(Class[]) pour former la suite de tests @RunWith(Suite.class) @SuiteClasses({TestsUnitaires.class,TestTimeout.class}) public class TousLesTests {} Tests 36

JUnit 4 - tests paramétrés La classe de test est annotée avec @RunWith(Parameterized.class) exécuteur de test acceptant les paramètres contient un constructeur avec les données et le résultat contient une méthode renvoyant une collection des paramètres : données et résultat annotée avec @Parameters Tests 37

JUnit 4 - tests paramétrés @RunWith(Parameterized.class) public class TestsParametres { private int a,b, resultat; public TestsParametres(int a, int b, int resultat) this.a = a; this.b = b; this.resultat = resultat; } @Parameters public static Collection getParametresAddition() return Arrays.asList(new Object[][]{{1,2,3}, {3,5,8}, {9,6,15}}); @Test public void additionTest() Calculatrice calc = new Calculatrice(); Assert.assertEquals(resultat, calc.additionner(a, b)); Tests 38

JUnit 4 - les suppositions Une supposition vérifie une condition classe org.junit.Assume Si la supposition n'est pas vérifiée, les test s'arrête ne passe pas en échec ou erreur Supposition Description assumeNoException vérifie qu'une opération s'est déroulée sans lever de Throwable assumeNotNull vérifie qu'aucun paramètre n'est nul assumeThat vérifie qu'une condition par contrat est respectée assumeTrue vérifie que le paramètre est vrai Tests 39

JUnit 4 - les suppositions public class Supposition { @Test public void verifierExistenceFichier() { final File lFile = new File("fichier.txt"); Assert.assertTrue("Le fichier doit exister", lFile.exists()); } public void lireFichier() throws IOException { Assume.assumeTrue(lFile.exists()); final FileInputStream lFileInputStream = new FileInputStream(lFile); final byte[] lBytes = new byte[16]; lFileInputStream.read(lBytes); Assert.assertArrayEquals("Bonjour le monde".getBytes(), lBytes); Tests 40

JUnit 4 - nouvelles assertions Assertions d'égalité pour les tableaux tableaux de byte, char, short, int, long ou Object assertion assertArrayEquals(...) Assertion pour les double avec un delta maximal entre les deux valeurs à comparer assertEquals(double attendu, double resultat, double delta) Assertion sur une condition définie par contrat assertion assertThat(...) contrats définis dans JUnit, ou en dehors de JUnit Tests 41

JUnit 4 - assertion par contrat public class ContratIsSame { @Test public void pasPareil() Assert.assertThat(new String("toto"), IsSame.sameInstance("toto")); } public void pareil() Assert.assertThat("toto", IsSame.sameInstance("toto")); Tests 42

JUnit 4 - contrats JUnits Description IsSame vérifie l'identité des instances IsEqual vérifie l'égalité de deux instances IsInstanceOf vérifie que l'instance du premier paramètre est de la classe du second paramètre IsNull vérifie que la référence passée est nulle ou non, méthode nullValue(...), ou notNullValue(...) Is vérifie que l'instance passée en premier paramètre correspond à ce qui est passé en second paramètre (valeur, classe, contrat) IsNot vérifie que l'instance passée en premier paramètre ne correspond pas à ce qui est passé en second paramètre AllOf vérifie que tous les contrats passés soient respectés AnyOf vérifie qu'au moins un des contrats passés est respecté Tests 43

JUnit 4 - exemple contrat public class ContratIs { @Test public void classeDeString() { Assert.assertThat("texte", Is.is(String.class)); } public void classeDeInteger() { Assert.assertThat("texte", Is.is(Integer.class)); public void egal() { Assert.assertThat("texte", Is.is("texte")); public void pasEgal() { Assert.assertThat("Texte", Is.is("texte")); public void pareil() { Assert.assertThat("texte", Is.is(IsSame.sameInstance("texte"))); public void pasPareil() { Assert.assertThat(new String("texte"), Is.is(IsSame.sameInstance("texte"))); Tests 44

JUnit 4 - contrats hors JUnit Les assertions par contrats ont à l'origine été développé par JMock Il faut ajouter au projet les librairies jmock hamcrest-core hlacrest-library Tests 45

JUnit 4 - contrats hors JUnit Les contrats sont séparés en 7 groupes core : intégrés à JUnit beans : contrats sur les JavaBeans collection : contrats sur les tableaux et collections number : contrats sur les comparaisons numériques object : contrats sur les objets et classes text : comparaisons de texte xml : contrats sur les documents XML Tests 46