QCM : Tests logiciels et JUnit 5 (16 questions)

Questions et réponses du QCM

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

La validation confirme l’absence de défauts, tandis que la vérification mesure la satisfaction du client.
La validation établit la correction du programme, tandis que la vérification examine sa conformité à l’attendu.
La validation examine la conformité à l’attendu, tandis que la vérification cherche à établir la correction du programme.
La validation exécute des scénarios, tandis que la vérification examine le code sans l’exécuter.

La validation examine la conformité à l’attendu, tandis que la vérification cherche à établir la correction du programme.

Explication

La validation porte sur la conformité du logiciel à ce qui est attendu, alors que la vérification vise la correction du programme. Confondre ces notions revient à attribuer à la vérification le critère de conformité propre à la validation.

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 ?

La première est dynamique et recherche des défauts sans exécution ; la seconde est statique et cherche des défaillances par exécution.
Les deux sont dynamiques, car elles consistent à examiner le comportement du logiciel.
La première est statique et recherche des défauts sans exécution ; la seconde est dynamique et cherche des défaillances par exécution.
Les deux sont statiques, car elles visent à repérer des problèmes avant la livraison du logiciel.

La première est statique et recherche des défauts sans exécution ; la seconde est dynamique et cherche des défaillances par exécution.

Explication

L’examen du code ou des spécifications sans lancer le programme relève des tests statiques, tandis que l’exécution de scénarios relève des tests dynamiques. Qualifier l’examen sans exécution de dynamique confond l’analyse des artefacts avec l’observation du logiciel en fonctionnement.

3. Pourquoi les tests logiciels ne permettent-ils pas de garantir l’élimination complète des bogues ?

Ils vérifient les résultats attendus sur chaque utilisation possible et éliminent les défauts restants par inspection.
Ils examinent un ensemble de cas d’utilisation plus ou moins exhaustif afin de limiter les bogues, sans couvrir nécessairement tous les cas.
Ils se limitent à confirmer que le logiciel répond aux spécifications sur les scénarios déjà exécutés.
Ils remplacent l’analyse du programme par une mesure de la confiance des utilisateurs.

Ils examinent un ensemble de cas d’utilisation plus ou moins exhaustif afin de limiter les bogues, sans couvrir nécessairement tous les cas.

Explication

En pratique, les tests portent sur un ensemble de cas d’utilisation dont l’exhaustivité peut varier : ils contribuent à limiter les bogues sans garantir leur disparition complète. Vérifier les résultats de scénarios exécutés ne signifie pas avoir testé toutes les utilisations possibles.

4. Quel type de test convient pour vérifier qu’une mise à jour n’a pas introduit de nouveaux bogues ?

Un test de régression, qui vérifie les effets d’une mise à jour sur le logiciel.
Un test système, qui confronte le logiciel aux spécifications du client.
Un test unitaire, qui vérifie un module en l’isolant des autres.
Un test d’intégration, qui examine plusieurs modules réunis dans un même ensemble.

Un test de régression, qui vérifie les effets d’une mise à jour sur le logiciel.

Explication

Le test de régression sert à vérifier qu’une mise à jour n’a pas introduit de bogues. Le test d’intégration porte plutôt sur le fonctionnement de plusieurs modules ensemble.

5. Dans un déroulement classique de test, quelle séquence mène à la comparaison du résultat avec l’oracle ?

Choisir un cas, exécuter le programme, instancier une donnée, comparer les résultats, puis définir l’oracle.
Choisir un cas, instancier une donnée, prévoir le résultat attendu, exécuter le programme, puis comparer les résultats.
Instancier une donnée, prévoir le résultat obtenu, choisir un cas, exécuter le programme, puis établir l’oracle.
Prévoir le résultat attendu, comparer les résultats, choisir un cas, instancier une donnée, puis exécuter le programme.

Choisir un cas, instancier une donnée, prévoir le résultat attendu, exécuter le programme, puis comparer les résultats.

Explication

Le déroulement part du choix d’un cas, puis de la préparation d’une donnée et de la définition d’un résultat attendu avant l’exécution et la comparaison. Définir l’oracle après avoir comparé les résultats inverserait son rôle de référence attendue.

6. Une testeuse dispose des spécifications fonctionnelles, mais pas du code source, pour concevoir ses essais. Quelle approche utilise-t-elle ?

La boîte noire, fondée sur la documentation, les spécifications, les cas d’utilisation et les valeurs limites.
Le test d’intégration, fondé sur l’observation de plusieurs modules réunis.
Le test unitaire, fondé sur l’isolement d’un module par rapport aux autres.
La boîte blanche, fondée sur l’examen du code et de ses structures internes.

La boîte noire, fondée sur la documentation, les spécifications, les cas d’utilisation et les valeurs limites.

Explication

La boîte noire est conçue sans accès au code et peut s’appuyer sur les spécifications, les cas d’utilisation et les valeurs limites. La boîte blanche se distingue précisément par l’accès au code lors de la conception des tests.

7. Lors de la sélection de tests en boîte blanche, quels éléments faut-il couvrir pour construire des chemins pertinents entre l’entrée et la sortie ?

Les résultats de performance, les échanges réseau et les contraintes d’installation du système.
Les méthodes publiques, les écrans de l’application et les profils d’utilisateurs représentatifs.
Les cas d’utilisation du client, les scénarios d’acceptation et les objectifs de déploiement du logiciel.
Les conditions d’arrêt des boucles, toutes les branches conditionnelles et les structures de données internes.

Les conditions d’arrêt des boucles, toutes les branches conditionnelles et les structures de données internes.

Explication

La sélection en boîte blanche vise des chemins minimaux qui couvrent notamment les arrêts de boucle, les branches conditionnelles et les structures de données internes. Les scénarios d’acceptation décrivent plutôt les attentes du client que la couverture du flot interne.

8. Dans un graphe de flot de contrôle, que représentent les nœuds et les arcs ?

Les nœuds représentent les conditions d’arrêt ; les arcs recensent les valeurs d’entrée utilisées pour les tester.
Les nœuds représentent les instructions et la sortie finale ; les arcs relient les instructions successives et modélisent les transitions de contrôle.
Les nœuds représentent les modules du logiciel ; les arcs décrivent les échanges de données entre ces modules.
Les nœuds représentent les cas de test et leurs résultats ; les arcs indiquent les défauts trouvés entre ces cas.

Les nœuds représentent les instructions et la sortie finale ; les arcs relient les instructions successives et modélisent les transitions de contrôle.

Explication

Le graphe comporte un nœud par instruction ainsi qu’un nœud final de sortie, et ses arcs décrivent les transitions du contrôle, dont celles des boucles et des conditionnelles. Des nœuds correspondant aux modules et des arcs correspondant à leurs échanges décriraient plutôt une architecture logicielle.

9. Un graphe de flot comporte 12 arcs et 9 nœuds. Quelle est sa complexité cyclomatique selon la formule M=E−N+2M = E - N + 2 ?

33
1919
2323
55

$$5$$

Explication

En remplaçant EE par 1212 et NN par 99, on obtient M=12−9+2=5M = 12 - 9 + 2 = 5. La valeur 33 correspondrait à omettre le terme ajouté dans la formule.

10. Quelle affirmation décrit correctement JUnit et sa compatibilité avec Java ?

JUnit sert principalement à compiler les programmes Java et JUnit 5 fonctionne avec Java 8 ou une version ultérieure.
JUnit automatise les tests unitaires Java et JUnit 5 fonctionne avec Java 8 ou une version ultérieure.
JUnit automatise les tests unitaires Java et JUnit 5 nécessite une version de Java postérieure à Java 8.
JUnit automatise les tests unitaires Java et JUnit 5 fonctionne à partir de Java 5.

JUnit automatise les tests unitaires Java et JUnit 5 fonctionne avec Java 8 ou une version ultérieure.

Explication

JUnit est un framework d'automatisation des tests unitaires pour Java, et JUnit 5 s'utilise avec Java 8 et les versions ultérieures. La compatibilité à partir de Java 5 concerne JUnit 4, pas JUnit 5.

11. Lors de la conception d'un test unitaire, quelle séquence respecte sa méthodologie générale ?

Préparer l'environnement, exécuter les cas prévus, évaluer les résultats ou effets de bord, puis nettoyer si nécessaire.
Préparer l'environnement, nettoyer les ressources, évaluer les résultats, puis exécuter les cas prévus.
Évaluer les résultats attendus, exécuter les cas prévus, préparer l'environnement, puis nettoyer si nécessaire.
Exécuter les cas prévus, préparer l'environnement, nettoyer, puis évaluer les résultats ou effets de bord.

Préparer l'environnement, exécuter les cas prévus, évaluer les résultats ou effets de bord, puis nettoyer si nécessaire.

Explication

Un test unitaire prépare d'abord l'environnement, exécute les cas prévus, évalue les résultats ou effets de bord, puis nettoie l'environnement si cela est nécessaire. Le nettoyage avant l'évaluation inverse les étapes prévues.

12. Dans une organisation classique avec JUnit 5, où place-t-on le code de test et quelles annotations marquent ses phases ?

Dans une classe de test séparée, avec @AfterAll ou @AfterEach pour la préparation, @Test pour les tests et @BeforeAll ou @BeforeEach pour le nettoyage.
Dans la classe du programme testé, avec @Test pour la préparation, @BeforeEach pour les tests et @AfterEach pour le nettoyage.
Dans la classe du programme testé, avec @BeforeAll pour la préparation, @AfterEach pour les tests et @Test pour le nettoyage.
Dans une classe de test séparée, avec @BeforeAll ou @BeforeEach pour la préparation, @Test pour les tests et @AfterAll ou @AfterEach pour le nettoyage.

Dans une classe de test séparée, avec @BeforeAll ou @BeforeEach pour la préparation, @Test pour les tests et @AfterAll ou @AfterEach pour le nettoyage.

Explication

Les tests JUnit 5 sont implémentés dans une classe séparée et utilisent les annotations de préparation, de test et de nettoyage correspondant à leurs phases. Employer les annotations de nettoyage pour préparer l'environnement confond les rôles des phases.

13. Un test doit vérifier que la valeur renvoyée par une méthode est égale à la valeur attendue ; quel mécanisme exprime cette condition ?

Une assumption, qui vérifie la validité du résultat du test.
Une assumption, qui compare la valeur obtenue à la valeur attendue.
Une assertion, qui décide si le contexte autorise l'exécution du test.
Une assertion, qui vérifie la validité du résultat du test.

Une assertion, qui vérifie la validité du résultat du test.

Explication

Une assertion exprime une condition de validité du test, par exemple l'égalité entre le résultat obtenu et celui attendu. Une assumption évalue plutôt si le contexte permet l'exécution du test.

14. Un test ne doit être exécuté que si une condition préalable sur son contexte est satisfaite ; quel mécanisme JUnit correspond à ce besoin ?

Une assumption, qui empêche l'exécution du test lorsque le contexte ne respecte pas le critère fixé.
Une assertion, qui vérifie le contexte et fait ignorer le test si le critère préalable échoue.
Une assumption, qui compare le résultat obtenu à la valeur attendue après l'exécution.
Une assertion, qui empêche l'exécution du test lorsque le résultat ne correspond pas à la valeur attendue.

Une assumption, qui empêche l'exécution du test lorsque le contexte ne respecte pas le critère fixé.

Explication

Les assumptions définissent les critères de validité du contexte et empêchent l'exécution lorsque ces critères ne sont pas respectés. Une assertion vérifie la validité du résultat, plutôt que l'autorisation contextuelle d'exécuter le test.

15. Une même fonctionnalité doit être testée automatiquement avec plusieurs valeurs issues de sources différentes ; quelle fonctionnalité JUnit convient ?

Un test paramétré, alimenté par des sources telles que @ValueSource, @MethodSource ou @CSVSource.
Un test imbriqué, qui organise des méthodes de test dans une structure de classes hiérarchique.
Une suite de tests, qui sélectionne des classes ou des packages et gère l'inclusion de tags.
Un test répété, qui relance un cas identique sans fournir un ensemble de paramètres issus de sources.

Un test paramétré, alimenté par des sources telles que @ValueSource, @MethodSource ou @CSVSource.

Explication

Les tests paramétrés exécutent la même fonctionnalité avec un ensemble de paramètres provenant de sources comme @ValueSource, @MethodSource ou @CSVSource. Un test répété relance le même test, mais ne vise pas à lui fournir plusieurs jeux de paramètres.

16. Pour observer plusieurs exécutions du même test, par exemple dans un cas impliquant de l'aléatoire, quelle annotation JUnit faut-il utiliser ?

@Nested, qui organise des tests dans des classes imbriquées.
@ParameterizedTest, qui fournit plusieurs paramètres à une même fonctionnalité.
@RepeatedTest(nb), qui lance plusieurs fois le même test.
@TestFactory, qui génère des tests dynamiques à l'exécution.

@RepeatedTest(nb), qui lance plusieurs fois le même test.

Explication

L'annotation @RepeatedTest(nb) sert à lancer plusieurs fois le même test, notamment pour examiner du code impliquant de l'aléatoire ou des performances. @TestFactory génère des tests dynamiques à l'exécution au lieu de répéter directement un même test.

Révisez avec les flashcards

Mémorisez les réponses avec 48 flashcards sur Tests logiciels et JUnit 5.

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 →

Approfondir avec la fiche

Consultez la fiche de révision complète sur Tests logiciels et JUnit 5.

Voir la fiche →

Cours similaires

Crée tes propres QCM

Importe ton cours et l'IA génère des QCM avec corrections en 30 secondes.

Générateur de QCM