1 / 46

Développement guidé par les tests

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

xylia
Download Presentation

Développement guidé par les tests

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Développementguidé 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 Tests 2

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

  4. 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

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

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

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

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

  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 • ... Tests 9

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

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

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

  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 Tests 13

  14. 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

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

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

  17. JUnit 3 Tests 17

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

  19. 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

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

  21. JUnit 3 • Méthodes d'assertion Tests 21

  22. JUnit 3 • Méthodes d'assertion • deux formes • assertYYY(valeur1 [,valeur2]) • assertYYY(messageSiErreur, valeur1 [,valeur2]) • Utilisation d'une fixture • méthodes protected Tests 22

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

  24. 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

  25. 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

  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 renseignerl'assistant • la vue suivante de l'assistantpermet de choisir lesméthodes à tester Tests 26

  27. 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() { fail("Not yet implemented"); } public void testSoustraire() { fail("Not yet implemented"); } public void testDiviser() { fail("Not yet implemented"); } } Tests 27

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

  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.v20090501071000.jar • ces archives sont importées si l'assistant est utilisé Tests 29

  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 Tests 30

  31. 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

  32. 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() {} @Test(timeout = 1000) public void dureeNonRespectee() throws InterruptedException { Thread.sleep(10000); } } Tests 32

  33. 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

  34. 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

  35. JUnit 4- fixture 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

  36. 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

  37. 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

  38. 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

  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 Tests 39

  40. 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()); } @Test 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); } } Tests 40

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

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

  43. JUnit 4 - contrats JUnits Tests 43

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

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

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

More Related