Qu'est-ce que Couverture des branches (couverture des décisions) ?

Critère de couverture du test boîte blanche qui exige que la branche vraie et la branche fausse de chaque décision (comme une instruction if) d'un programme soient exécutées au moins une fois. On l'appelle aussi couverture des décisions ou C1, et il est plus fort que la couverture des instructions (C0), qui exige que chaque instruction soit exécutée au moins une fois.

Nom japonais: 分岐網羅

« Couverture des branches (couverture des décisions) » apparaît dans 2 questions d'entraînement réparties sur 1 thèmes, dont Développement logiciel et gestion de projet.

Domaine: Développement logiciel et gestion de projet

Différence avec la couverture des instructions

La couverture des instructions (C0) est atteinte dès que chaque instruction a été exécutée au moins une fois. Pour if (a) { S1; } sans else, un seul cas de test avec a vrai exécute S1 et atteint la couverture des instructions, mais la branche où a est faux, et où l'exécution passe simplement à la suite, n'est jamais exécutée. La couverture des branches (C1) exige aussi ce côté faux, ce qui permet de trouver plus facilement des erreurs comme un traitement manquant qui serait nécessaire quand a est faux. Atteindre la couverture des branches permet aussi d'atteindre la couverture des instructions.

Lien avec la couverture des conditions et les conditions composées

Quand une décision se compose de plusieurs conditions, comme « A et B », la couverture des conditions exige que chaque condition individuelle prenne la valeur vrai et la valeur faux. Les deux cas de test (A = vrai, B = faux) et (A = faux, B = vrai) atteignent la couverture des conditions, mais la décision est fausse dans les deux cas, si bien que la couverture des branches n'est pas atteinte. On utilise donc des critères comme la couverture décision/condition, qui satisfait les deux, et MC/DC (couverture des conditions et décisions modifiée), qui vérifie que chaque condition influe indépendamment sur le résultat de la décision. MC/DC est exigée au niveau de sécurité le plus élevé de DO-178C, la norme des logiciels embarqués aéronautiques, et elle est aussi fortement recommandée au niveau ASIL D de l'ISO 26262, la norme de sécurité fonctionnelle des véhicules routiers.

Interpréter les chiffres de couverture

La couverture s'exprime comme le nombre de branches exécutées ÷ le nombre total de branches, et elle peut se mesurer avec des fonctions des compilateurs ou des outils de test. Même une couverture de 100 % ne trouve ni les traitements présents dans la spécification mais jamais implémentés, ni les erreurs dont le résultat dépend des valeurs. La couverture doit servir d'outil pour trouver les parties que les tests n'ont pas exercées, en combinaison avec le test boîte noire. La même idée est utilisée en vérification du matériel sous la forme de la couverture de code RTL.

S'entraîner : questions sur Couverture des branches (couverture des décisions)

Les valeurs de vérité de a, b et c peuvent être choisies indépendamment les unes des autres. Pour le code « if (a) { S1; } if (b) { S2; } if (c) { S3; } », quel est le nombre minimal de cas de test nécessaires pour atteindre la couverture des branches (exécuter au moins une fois l'issue vraie et l'issue fausse de chaque décision) ?

  1. A1
  2. B2
  3. C8
Afficher la réponse et l'explication

Réponse : B. 2

Chacune des trois décisions doit être prise dans les deux sens, vrai et faux. Avec les deux cas de test (a, b et c tous vrais) et (tous faux), l'issue vraie et l'issue fausse de chaque décision sont exécutées chacune une fois : le minimum est donc 2. Un seul cas de test (tous vrais) exécute toutes les instructions S1 à S3 et atteint donc la couverture des instructions, mais les branches fausses (les chemins qui ne font rien et passent à la suite) ne sont pas exécutées. 8 est le nombre de toutes les 2³ = 8 combinaisons de vrai et faux.

Questions fréquentes

Que signifient C0 et C1 ?

Ce sont des abréviations de critères de couverture : C0 est la couverture des instructions (chaque instruction exécutée au moins une fois) et C1 la couverture des branches (côté vrai et côté faux de chaque branchement exécutés au moins une fois). Atteindre C1 permet aussi d'atteindre C0.

Faut-il viser 100 % de couverture des branches ?

Pour les logiciels liés à la sécurité, des normes ou des règles d'entreprise peuvent fixer des objectifs de couverture des branches ou de MC/DC. Sinon, plutôt que d'exiger 100 %, il importe de vérifier si chaque branche non exécutée est vraiment inutile ou si des tests manquent. Le code qui ne s'exécute qu'en situation anormale doit être testé, par exemple par injection de fautes.

« Couverture des branches (couverture des décisions) » dans les explications

Questions mentionnant « Couverture des branches (couverture des décisions) » (2)

  1. Les valeurs de vérité de a, b et c peuvent être choisies indépendamment les unes des autres. Pour le code « if (a) { S1; } if (b) { S2; } if (c) { S3; } », quel est le nombre minimal de cas de test nécessaires pour atteindre la couverture des branches (exécuter au moins une fois l'issue vraie et l'issue fausse de chaque décision) ?
  2. Pour la décision « A et B » (A et B sont des conditions dont les valeurs de vérité peuvent être fixées indépendamment), on a exécuté deux cas de test : (A = vrai, B = faux) et (A = faux, B = vrai). Quelle affirmation sur les critères de couverture est correcte ?

Termes associés

Évaluation en court-circuit Analyse des valeurs limites (boundary value analysis) CI/CD (intégration continue et livraison continue) Cycle en V (modèle en V) Développement agile Développement piloté par les tests (TDD) Gestion de la valeur acquise (EVM) Méthode du chemin critique (CPM) Modèle en cascade (waterfall) Partitionnement en classes d'équivalence (equivalence partitioning)

Retour au glossaire