Fiche de révision : Tests logiciels et JUnit 5

Plan du Cours

  1. Rôle et limites du test logiciel
  2. Méthodes et niveaux de test
  3. Tests boîte blanche et flot
  4. JUnit 5 et cycle des tests
  5. Assertions et exécution JUnit
  6. Fonctionnalités avancées de JUnit

1. Rôle et limites du test logiciel

★ À maîtriser

📌 La validation vérifie que le logiciel est conforme à l'attendu, tandis que la vérification cherche à établir que le programme est correct.

📌 Les tests statiques examinent le code ou les spécifications pour trouver des défauts de conception sans exécuter le programme, tandis que les tests dynamiques exécutent le code sur des scénarios pour détecter des défaillances.

  • En pratique, les tests examinent un ensemble de cas d'utilisation plus ou moins exhaustif afin de limiter les bugs, sans garantir leur élimination complète.

Compléments

  • Les trois objectifs du test logiciel sont :

    • baisser les coûts
    • diminuer les efforts de développement
    • augmenter la confiance dans le code et auprès du client
  • Aux États-Unis, les bugs coûtent 64 milliards de dollars par an ; le test logiciel coûte 10 milliards de dollars par an, représente plus de 50 % du développement d'un logiciel critique et environ 30 % du développement d'un logiciel standard.

  • E.W. Dijkstra affirme dans Notes on Structured Programming (1972) que les tests peuvent révéler la présence d'erreurs, mais jamais leur absence.

Astuce mémo

Le test révèle des erreurs présentes, mais ne prouve pas leur absence.

2. Méthodes et niveaux de test

★ À maîtriser

📌 Un test unitaire teste un module indépendamment des autres, un test d'intégration teste plusieurs modules ensemble, un test système ou de validation confronte le logiciel aux spécifications du client, et un test de régression vérifie qu'une mise à jour n'a pas introduit de bugs.

  • 🔄 Un test classique suit ces étapes :
    1. Choisir un cas de test.
    2. Instancier une donnée de test à partir du cas.
    3. Prévoir le résultat attendu, appelé oracle.
    4. Exécuter le programme sur la donnée.
    5. Comparer le résultat obtenu à l'oracle.

📌 Un test en boîte blanche est conçu avec accès au code, tandis qu'un test en boîte noire est conçu sans accès au code et s'appuie sur la documentation, les spécifications fonctionnelles, les cas d'utilisation et les valeurs limites.

Compléments

  • La granularité d'un module peut correspondre à :
    • une fonction
    • un package
    • une classe
  • Dans le cycle en V, les tests interviennent après le développement, tandis qu'en méthodologie Agile avec TDD, un test qui échoue appelle un développement.

Astuce mémo

Cas → donnée → oracle → exécution → comparaison.

3. Tests boîte blanche et flot

Notions clés & Définitions

  • Graphe de flot de contrôle : Le graphe de flot de contrôle comporte un nœud par instruction et un nœud final de sortie ; les arcs relient chaque instruction à la suivante, la fin d'une boucle à son début, et les deux branches d'une conditionnelle à la sortie de la condition.

★ À maîtriser

  • La sélection des tests en boîte blanche vise des chemins minimaux entre l'entrée et la sortie couvrant les conditions d'arrêt des boucles, toutes les branches conditionnelles et les structures de données internes.

📐 Formule - Le nombre cyclomatique se calcule par M=E−N+2M = E - N + 2, où EE est le nombre d'arcs et NN le nombre de nœuds du graphe de flot.

Compléments

  • Dans un graphe de flot de contrôle, toutes les conditions doivent être décomposées, toutes les branches parcourues et les saisies doivent inclure des valeurs problématiques.

  • Le nombre cyclomatique indique le nombre minimal de chemins à tester et correspond au nombre de régions du graphe de flot.

4. JUnit 5 et cycle des tests

★ À maîtriser

  • JUnit est un framework d'automatisation des tests unitaires pour Java, inventé par Kent Beck et Erich Gamma ; JUnit 5 s'utilise avec Java 8 et les versions ultérieures.

  • La méthodologie d'un test unitaire prépare l'environnement (SetUp), exécute les cas prévus, évalue les résultats ou effets de bord, puis nettoie l'environnement si nécessaire (TearDown).

  • Les tests JUnit 5 sont implémentés dans une classe de test séparée du programme testé, et les méthodes utilisent notamment @BeforeAll ou @BeforeEach pour le SetUp, @Test pour les tests, et @AfterAll ou @AfterEach pour le TearDown.

Compléments

  • JUnit 4 est maintenu pour Java 5 et les versions ultérieures avec les annotations, et JUnit 5 peut utiliser JUnit Vintage pour cette compatibilité.

Astuce mémo

SetUp → test → évaluation → TearDown.

5. Assertions et exécution JUnit

Notions clés & Définitions

  • Assertions : Les assertions définissent les conditions de validité du test, par exemple l'égalité, la différence, la nullité ou une valeur booléenne.
  • Assumptions : Les assumptions définissent les critères de validité du contexte d'un test et empêchent son exécution si ces critères ne sont pas respectés.

Points essentiels

  • JUnit 5 permet de vérifier qu'une exécution déclenche une exception attendue avec une assertion telle que assertThrows(Exception.class, fonctionTest).

  • La compilation et l'exécution en ligne de commande peuvent utiliser junit-platform-console-standalone, qui nécessite d'ajouter le fichier JAR au classpath ; --scan-classpath recherche les classes de test et -c permet d'en spécifier une.

  • JUnit 5 propose notamment @Disabled pour désactiver un test, @Order avec @TestMethodOrder pour ordonner les tests, @DisplayName pour les nommer et assertAll pour regrouper plusieurs assertions.

Astuce mémo

Assertion : validité du résultat ; assumption : validité du contexte.

6. Fonctionnalités avancées de JUnit

Notions clés & Définitions

  • Tests paramétrés : Les tests paramétrés automatisent l'exécution d'une même fonctionnalité avec un ensemble de paramètres provenant de plusieurs sources, notamment @ValueSource, @MethodSource ou @CSVSource.
  • Tests répétés : Les tests répétés lancent plusieurs fois le même test, notamment pour du code impliquant de l'aléatoire ou des performances, avec l'annotation @RepeatedTest(nb).
  • Suites de tests : Les suites de tests permettent de créer des scénarios de test en sélectionnant notamment des classes ou des packages et en incluant ou excluant des tags.

Points essentiels

  • JUnit 5 propose aussi les tests imbriqués avec @Nested, les tests dynamiques générés à l'exécution avec @TestFactory et l'injection de dépendances pour gérer des paramètres dans les classes de test.

Teste tes connaissances

Teste tes connaissances sur Tests logiciels et JUnit 5 avec 16 questions à choix multiples et corrections détaillées.

1. Quelle distinction sépare la validation de la vérification d’un logiciel ?

2. Une équipe examine des spécifications sans exécuter le programme, puis lance le logiciel sur des scénarios. Comment caractériser ces deux activités ?

Faire le QCM →

Révisez avec les flashcards

Mémorisez les concepts clés de Tests logiciels et JUnit 5 avec 48 flashcards interactives.

Que distingue la validation de la vérification logicielle ?

La validation vérifie la conformité du logiciel à l’attendu, tandis que la vérification établit la correction du programme.

Que recherchent les tests statiques sans exécuter le programme ?

Ils recherchent des défauts de conception dans le code ou les spécifications.

Que font les tests dynamiques pour détecter des défaillances ?

Ils exécutent le code sur des scénarios.

Voir les flashcards →

Cours similaires

Crée tes propres fiches de révision

Importe ton cours et l'IA génère fiches, QCM et flashcards en 30 secondes.

Générateur de fiches