La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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.

Présentations similaires


Présentation au sujet: "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."— Transcription de la présentation:

1 Développement guidé par les tests

2 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 Tests2

3 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 Tests3

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

5 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 Tests5

6 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 Tests6

7 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 Tests7

8 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 Tests8

9 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... Tests9

10 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 Tests10

11 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 Tests11

12 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 Tests12

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

14 JUnit Framework de rédaction et d'exécution de tests unitaires – Imaginé et développé par Kent Beck et Erich Gamma Offre au développeur une environnement simple de rédaction de tests Tests14

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

16 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 Tests16

17 JUnit 3 Tests17

18 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 Tests18

19 JUnit 3 Exemple de test – le test peut-être lancé sous Eclipse par Run As... JUnit Test Tests19 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)); }

20 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 Tests20

21 JUnit 3 Méthodes d'assertion Tests21 MéthodeDescription 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

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

23 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 Tests23 suite.addTest(new CalculatriceTestSimple_1("testAddition")); public CalculatriceTestSimple_1(String test) { super(test); }

24 JUnit 3 - suite de tests Exemple de suite de tests Tests24 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; }

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

26 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 Tests26

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

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

29 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.v jar – ces archives sont importées si l'assistant est utilisé Tests29

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

31 JUnit 4 - Les méthodes de test sont annotée – 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 permet d'ignorer un test Tests31

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

33 JUnit 4 - fixture Méthodes annotées – 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é Tests33

34 JUnit 4 - fixture Méthodes annotées – 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 Tests34

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

36 JUnit 4 - suite de tests Classe vide annotée avec possibilité de changer la classe d'exécution de la suite Suite.class par défaut pour former la suite de public class TousLesTests {}

37 JUnit 4 - tests paramétrés La classe de test – est annotée 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 Tests37

38 JUnit 4 - tests paramétrés 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; public static Collection getParametresAddition() { return Arrays.asList(new Object[][]{{1,2,3}, {3,5,8}, {9,6,15}}); public void additionTest() { Calculatrice calc = new Calculatrice(); Assert.assertEquals(resultat, calc.additionner(a, b)); }

39 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 Tests39 SuppositionDescription 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

40 JUnit 4 - les suppositions Tests40 public class Supposition public void verifierExistenceFichier() { final File lFile = new File("fichier.txt"); Assert.assertTrue("Le fichier doit exister", lFile.exists()); public void lireFichier() throws IOException { final File lFile = new File("fichier.txt"); 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); }

41 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 Tests41

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

43 JUnit 4 - contrats JUnits Tests43 ContratDescription 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é

44 JUnit 4 - exemple contrat Tests44 public class ContratIs 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"))); }

45 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 Tests45

46 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 Tests46


Télécharger ppt "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."

Présentations similaires


Annonces Google