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 ?

5voto

steamer25 Points 4224

Un autre point intéressant que j'ai entendu :

Les endroits de votre code présentant les plus gros retraits devraient avoir le CC le plus élevé. Ce sont généralement les zones les plus importantes pour assurer la couverture des tests car on s'attend à ce qu'elles soient plus difficiles à lire/maintenir. Comme d'autres réponses l'indiquent, ce sont également les régions du code les plus difficiles à couvrir.

3voto

Peter Perháč Points 8007

La complexité cyclomatique n'est vraiment qu'un mot à la mode effrayant. En fait, il s'agit d'une mesure de la complexité du code utilisée dans le développement de logiciels pour mettre en évidence les parties les plus complexes du code (plus susceptibles d'être boguées, et qui doivent donc être testées avec soin et minutie). Vous pouvez le calculer en utilisant la formule E-N+2P, mais je vous suggère de le faire calculer automatiquement par un plugin. J'ai entendu parler d'une règle empirique selon laquelle vous devriez vous efforcer de garder le CC en dessous de 5 pour maintenir une bonne lisibilité et une bonne maintenabilité de votre code.

J'ai récemment expérimenté le Plugin Eclipse Metrics sur mes projets Java, et il dispose d'un fichier d'aide vraiment agréable et concis qui s'intégrera bien sûr à l'aide habituelle d'Eclipse et vous pourrez y lire d'autres définitions de diverses mesures de complexité et des conseils et astuces pour améliorer votre code.

2voto

JoshBerke Points 34238

C'est tout, l'idée est qu'une méthode qui a un CC faible a moins de fourches, de boucles, etc. qui rendent une méthode plus complexe. Imaginez que vous passiez en revue 500 000 lignes de code, avec un analyseur, et que vous voyiez quelques méthodes qui ont un CC supérieur d'un ordre de grandeur. Cela vous permet de vous concentrer sur le remaniement de ces méthodes pour une meilleure compréhension (il est également courant qu'un CC élevé soit associé à un taux de bogues élevé).

2voto

Michael Burr Points 181287

Chaque point de décision dans une routine (boucle, switch, if, etc...) se résume essentiellement à un équivalent de l'instruction if. Pour chaque if vous avez 2 chemins de code qui peuvent être pris. Ainsi, avec la première branche, il y a 2 chemins de code, avec la deuxième, il y a 4 chemins possibles, avec la troisième, il y en a 8 et ainsi de suite. Il y a au moins 2**N chemins de code où N est le nombre de branches.

Il est donc difficile de comprendre le comportement du code et de le tester lorsque N dépasse un petit nombre.

2voto

Jay Abraham Points 159

Les réponses fournies jusqu'à présent ne mentionnent pas la corrélation entre la qualité des logiciels et la complexité cyclomatique. La recherche a montré que le fait d'avoir une métrique de complexité cyclomatique plus faible devrait aider à développer des logiciels de meilleure qualité. Elle peut contribuer aux attributs de qualité des logiciels que sont la lisibilité, la maintenabilité et la portabilité. En général, il faut essayer d'obtenir une mesure de complexité cyclomatique comprise entre 5 et 10.

L'une des raisons d'utiliser des mesures telles que la complexité cyclomatique est qu'en général, un être humain ne peut suivre qu'environ 7 (plus ou moins 2) éléments d'information simultanément dans son cerveau. Par conséquent, si votre logiciel est excessivement complexe et comporte de multiples chemins de décision, il est peu probable que vous puissiez visualiser le comportement de votre logiciel (c'est-à-dire qu'il aura une métrique de complexité cyclomatique élevée). Cela conduirait très probablement au développement d'un logiciel erroné ou truffé de bogues. Vous trouverez de plus amples informations à ce sujet ici et aussi sur Wikipedia .

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