Couverture des conditions/décisions modifiées (Modified condition/decision coverage - MC/DC - MCDC)Exemple simpleConsidérons l'extrait de code suivant :
où A, B et C représentent 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 soient vérifiés sur cet exemple, il faut que A, B et C aient été évalués au moins une fois "true" et une fois "false" lors des tests, ce qui serait le cas avec 2 tests aboutissants aux évaluations respectives de A, B et C suivantes : A = true / B = true / C = true A = false / B = false / C = false Pour que les critères de la couverture des décisions soient en outre satisfaits, il faut que la décision A = true / B = true / C = true ---> la décision est évaluée à "true" A = false / B = false / C = false ---> la décision est évaluée à "false" et donc la couverture des décisions est elle-aussi réalisée. Cependant, ces deux tests ne permettent une couverture des conditions/décisions modifiées qui exige que chaque variable booléenne soit évaluée une fois à "true" et une fois à "false" tout en ayant une influence sur le résultat final. C'est-à-dire que d'un cas de test à l'autre, le changement d'une seule condition atomique changera aussi la décision ; or avec les deux seuls tests précédents, il est impossible de savoir quel booléen influence l'évaluation de la décision... En pratique, pour n opérandes booléens, il faut trouver au minimum n+1 tests pour pouvoir assurer la couverture des conditions/décisions modifiées. Ayant 3 opérandes booléens (A, B et C), on pourra (par exemple) choisir le lot de tests suivant : A = false / B = false / C = true ---> la décision est évaluée à "false" A = false / B = true / C = true ---> la décision est évaluée à "true" A = false / B = true / C = false ---> la décision est évaluée à "false" A = true / B = false / C = true ---> la décision est évaluée à "true" En effet dans ce cas :
De plus, les critères de couverture de décisions et de conditions sont toujours respectés (chaque variable booléenne prend au moins une fois les valeurs "true" et "false", de même que la décision globale). La couverture des conditions/décisions modifiées est alors assurée. Exemple plus conséquentRemplaçons la condition Une couverture de test intégrale consisterait à construire la table de vérité suivante et tester chaque cas :
En revanche, dans le cadre d'une couverture des conditions/décisions modifiées, il nous suffirait (par exemple) de tester uniquement les cinq combinaisons 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.
|