logo

Les différents niveaux de la couverture de test

Couverture des fonctions

(Function coverage)

→ Quelles fonctions dans le code ont été appelées ?

La couverture de fonction mesure au cours des tests :

  • combien de fois chaque fonction a été appelée ;
  • combien de fois son accollade fermante a été atteinte ( ≈ combien de fois le code de la fonction a été parcouru en intégralité).
C´est une mesure de couverture tout à fait insuffisante, mais elle permet de vérifier le pourcentage de code testé jusqu'alors.



Couverture des décisions (ou des branches)

(Decision coverage - Branch coverage)

→ Quelles décisions du code (conditions dans les if-statements et boucles) ont été évaluées "vraies" ET "fausses" ?

Pour chaque fonction, la couverture de décision mesure si :

  • chaque branche d'un switch-statement a été prise ;
  • chaque saut fonctionnel (goto, break, continue, return, throw) a été pris ;
  • chaque cas d'exception ("exception handler") a été testé.
Cette mesure de couverture permet, par rapport à la couverture de fonction, d´affiner le pourcentage de code testé jusqu'alors.



Couverture des points de tests

(Condition coverage)

→ Quelles sous-décisions du code (par exemple, expressions booléennes séparées par un "or" dans un if-statement) ont été évaluées "vraies" ET "fausses" ?

Ressemblant quelque peu à la couverture de décision, la couverture de condition vérifie, pour chaque noeud conditionnel de chaque fonction, si toutes les sous-expressions booléennes atomiques formant la condition ont déjà été évaluées "vraies" ET "fausses".


Couverture des conditions/décisions modifiées

(Modified condition/decision coverage - MC/DC - MCDC)

→ Quelles sous-décisions du code ont été évaluées "vraies" ET "fausses" en influençant indépendemment la décision finale ?

En plus des critères de couverture de condition et de décision, la couverture des conditions/décisions modifiées impose que chaque sous-décision soit évaluée (au moins une fois) dans un cas où elle a une influence sur la valeur finale de la décision.

Cette mesure, créée par Boeing, se conforme à la norme technique internationale DO-178B précisant les critères pour la certification des logiciels pour l´équipement dans l´industrie aéronautique.

  • Avantage : nécessite moins de cas de tests que la MCC
    ( n conditions ⇒ n+1 tests).
  • Inconvénient : les cas de tests ne sont pas toujours faciles à trouver...


Couverture des conditions multiples

(Multicondition coverage - Multiple condition coverage - MCC)

→ Quelles décisions du code ont été évaluées avec toutes les combinaisons possibles de sous-décision ?

En plus des critères de couverture de condition, la couverture de condition multiple impose que chaque combinaison de valeurs booléennes possible pour les sous-conditions soit évaluée.

  • Avantage : une qualité de code assurée puisque toutes les possibilités sont explorées.
  • Inconvénient : un nombre de cas de tests accru
    ( n conditions ⇒ 2n tests).



Memento :

Condition (ou Opérande booléen ou Sous-décision) : une formule logique insécable (atomique). On parle souvent de variable booléenne, elle est représentée par une lettre majuscule (A, B, C, etc.), peut avoir pour valeur "vrai" ou "faux", mais ne peut pas être redivisée en d´autres "sous-conditions" plus simples.

Décision : une formule logique pouvant être composée de plusieurs conditions séparées par des connecteurs logiques tels "ou", "et", "ou exclusif", etc.

L´outil d´analyse de couverture du code Testwell CTC++ englobe toutes les catégories de couvertures de test, y compris les niveaux les plus élevés : la couverture des conditions / décisions modifiées (MC/DC) et surtout celle des conditions multiples (MCC). Il peut ainsi être utilisé pour obtenir des certifications.