75 votes

Qu'est-ce que la complexité cyclomatique ?

Un terme que je vois de temps en temps est "Complexité cyclomatique". Ici, sur SO, j'ai vu quelques questions sur "comment calculer la CC d'un langage X" ou "comment faire Y avec le minimum de CC", mais je ne suis pas sûr de comprendre vraiment ce que c'est.

Sur le Site web de NDepend J'ai vu une explication qui dit en gros : "Le nombre de décisions dans une méthode. Chaque if, for, && etc. ajoute +1 au "score" CC). Est-ce vraiment le cas ? Si oui, pourquoi est-ce mauvais ? Je peux comprendre que l'on puisse vouloir maintenir le nombre de déclarations if assez bas pour que le code reste facile à comprendre, mais est-ce vraiment tout ce qui compte ?

Ou y a-t-il un concept plus profond ?

2voto

Asiri Harisandu Points 21

La complexité cyclomatique est calculée à l'aide du graphe de flux de contrôle. Le nombre de mesures quantitatives de chemins linéairement indépendants dans le code source d'un programme est appelé complexité cyclomatique (if/ if else / for / while).

1voto

Strilanc Points 7161

Considérez le graphique du flux de contrôle de votre fonction, avec un bord supplémentaire allant de la sortie à l'entrée. La complexité cyclomatique est le nombre maximum de coupes que l'on peut faire sans séparer le graphe en deux morceaux.

Par exemple :

function F:
    if condition1:
       ...
    else:
       ...
    if condition2:
       ...
    else:
       ...

Control Flow Graph

Graphique du flux de contrôle

Vous pouvez probablement comprendre intuitivement pourquoi le graphe lié a une complexité cyclomatique de 3.

1 votes

Pouvez-vous expliquer comment et où vous effectuez les coupes dans le diagramme ci-dessus ?

1voto

aJ. Points 17014

La complexité cyclomatrique est essentiellement une métrique permettant de déterminer les zones du code qui nécessitent plus d'attention pour la maintenabilité. Il s'agirait essentiellement d'une entrée pour le remaniement. Elle donne certainement une indication de la zone d'amélioration du code en termes d'évitement des boucles imbriquées profondes, des conditions, etc.

1voto

T.E.D. Points 26829

C'est à peu près ça. Cependant, chaque branche d'une instruction "case" ou "switch" a tendance à compter pour 1. En fait, cela signifie que CC déteste les déclarations de cas, et tout code qui en a besoin (processeurs de commande, machines à état, etc.).

0 votes

@TetsujinnoOni - Mai oui. Le problème est que mon processeur de commande typique lit des commandes à partir d'une source externe, de sorte que je ne peux pas laisser le compilateur placer des éléments de données où il le souhaite, comme il doit le faire pour une classe dynamique polymorphe.

0voto

perfo Points 1

La complexité cyclomatrique est une mesure de la complexité d'une unité logicielle, c'est-à-dire du nombre de chemins différents qu'un programme peut suivre avec des constructions logiques conditionnelles (If, while, for, switch & cases, etc.) ....). Si vous souhaitez en savoir plus sur le calcul de la complexité cyclomatrique, vous pouvez regarder une superbe vidéo sur YouTube. https://www.youtube.com/watch?v=PlCGomvu-NM

Elle est importante dans la conception des cas de test car elle révèle les différents chemins ou scénarios qu'un programme peut prendre . "Pour avoir une bonne testabilité et maintenabilité, McCabe recommande que qu'aucun module de programme ne devrait dépasser une complexité cyclomatique de 10 "(Marsic,2012, p. 232).

Référence : Marsic., I. (2012, septembre). Génie logiciel . Université Rutgers. Récupéré de www.ece.rutgers.edu/~marsic/books/SE/book-SE_marsic.pdf

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X