La métrique Cyclomatic Complexity est utilisée pour mesurer la complexité d'un programme en comptabilisant le nombre de chemins linéairement indépendants dans le code source.
La métrique Cyclomatic Complexity est calculée à l'aide du graphique de contrôle de déroulement du programme. Cette mesure de complexité dépend des points de condition et de décision inclus dans ce graphique.
Exemple :
Aucune condition ou point de décision : Complexité = 1 (un chemin à travers le code).
Une instruction IF : Complexité = 2 (deux chemins à travers le code).
Une instruction IF avec deux conditions : Complexité = 3 (trois chemins à travers le code).
Il existe différentes interprétations/implémentations de la métrique Cyclomatic Complexity en fonction de l'outil d'analyse utilisé. Certains outils ne tiennent pas compte les expressions avec AND/OR/... dans les instructions IF, REPEAT, WHILE, etc. La métrique McCabe Cyclomatic Complexity est toujours incrémentée de 1. D'autres outils prennent également en compte les expressions du flux de code (hors instruction IF, REPEAT, etc.), mais utilisées ultérieurement dans une instruction IF ou REPEAT, ce qui produit un résultat Cyclomatic Complexity plus élevé. L'implémentation de Cyclomatic Complexity dans EcoStruxure Machine Expert considère les expressions avec AND/OR/... mais pas les expressions précalculées dans le flux de code ou spécifiées dans un appel de méthode.
Exemple
Exemple de calcul de la métrique Cyclomatic Complexity :
// MCC +1 (Initial Value)
// MCC +0 (Pre calculation of condition not considered)
a := b OR c;
// MCC +0 (Method call with condition not considered in calling implementation)
METH4(a);
IF a AND b OR c XOR d AND NOT e THEN
// MCC +5 (IF with 5 conditions)
CASE i OF
1..4:
// MCC +1 (CASE range is considered as one condition)
FOR i := 1 TO 10 DO // MCC +1
METH1();
END_FOR
10, 11, 12, 13:
// MCC +1 (multiple CASE labels considered as one condition)
REPEAT
// MCC +1 (one condition in REPEAT)
WHILE (a = TRUE AND b = FALSE) DO
// MCC +2 (two conditions in WHILE)
METH2();
END_WHILE
UNTIL (TRUE) END_REPEAT
ELSE
// MCC +0 (Default path through CASE statement)
METH3();
END_CASE
END_IF
Résultat de la métrique Cyclomatic Complexity
Cyclomatic Complexity (MCC) = 12