Couverture de test → Couverture de conditions multiples

[English][Deutsch]

Exemple de couverture des conditions multiples (Multicondition coverage - Multiple condition coverage - MCC)


Exemple simple

Considérons l'extrait de code suivant :

if ( (A || B) && C )
{
/* instructions */
}
else
{
/* instructions */
}

où A, B et C représente des expressions booléennes atomiques (i.e. non redivisibles en d'autres sous-expressions booléennes).

Pour que les critères de la couverture des conditions multiples soient vérifiés sur cet exemple, il faut que chaque combinaison de valeurs pour A, B et C ait été testée au moins une fois.

Ainsi, dans notre exemple, il nous faut 23=8 tests aboutissants aux évaluations respectives de A, B et C pour valider la couverture des conditions multiples :

  1. A = true  / B = true  / C = true
  2. A = true  / B = true  / C = false
  3. A = true  / B = false / C = true
  4. A = true  / B = false / C = false
  5. A = false / B = true  / C = true
  6. A = false / B = true  / C = false
  7. A = false / B = false / C = true
  8. A = false / B = false / C = false

Cependant, Testwell CTC++ utilisé pour la couverture des conditions multiples (option d'instrumentation "-i m") présentera les résultats des tests de la manière suivante :

  1. A = true  / B = not eval / C = true
  2. A = true  / B = not eval / C = false
  3. A = false / B = true       / C = true
  4. A = false / B = true       / C = false
  5. A = false / B = false      / C = not eval

Par exemple, pour le 1er cas, si A est "true", le système ne calculera pas la valeur de B puisque de toute façon (A ou B) sera "true". Ceci veut dire en fait que les 1er et 2e cas de la 1ère liste seront évalués de la même manière par le système et que Testwell CTC++ suivra cette logique dans la présentation des résultats.




Exemple plus conséquent

Remplaçons la condition ( (A || B) & C )
par : ( ((u == 0) || (x>5)) & ((y<6) || (z == 0)) )

Une couverture de test intégrale consisterait à construire la table de vérité suivante et tester chaque cas :

Cas de test n° A : (u == 0) B : (x>5) C : (y<6) D : (z == 0) ( (A || B) && (C || D) )
1 F F F F F
2 F F F V F
3 F F V _ F
4 F V F F F
5 F V F V V
6 F V V _ V
7 V _ F F F
8 V _ F V V
9 V _ V _ V

Et dans le cadre d'une couverture des conditions multiples, il nous faudrait tester chaque combinaisons, donc les 9 possibles ci-dessus surlignées en jaune.

Revoir les différents niveaux de couverture de test

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 "true" ou "false", 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 comme par exemple DO-178B.


last updated: 28.07.2010

© 2010 Verifysoft Technology GmbH
Author: Christophe Sourisse, Verifysoft Technology GmbH
CTA++, CTC++, CMT++ and CMTJava are products of Testwell Oy, Tampere (Finland)
all other trademarks of this site are the property of their respective owners.