58 votes

Trouvez-vous que la complexité cyclomatique est une mesure utile?

J'ai été jouer avec la mesure de la complexité cyclomatique d'une grosse base de code.

La complexité cyclomatique est le nombre d'indépendance linéaire des chemins à travers un code source du programme et il y a beaucoup d'outils gratuits pour la langue de votre choix.

Les résultats sont intéressants, mais pas surprenant. Qui est, les pièces que je sais être bien poilue étaient en fait les plus complexes (avec une cote de > 50). Mais ce que je trouve utile est qu'un béton "méchanceté" numéro est attribué à chaque méthode comme quelque chose que je peux point au moment de décider par où commencer refactoring.

Utilisez-vous la complexité cyclomatique? Ce qui est le plus complexe des bits de code que vous avez trouvé?

41voto

kenj0418 Points 2428

Nous refactorisons sans merci et utilisons la complexité de Cyclomatic comme l'un des indicateurs permettant au code de figurer dans notre liste de résultats. 1-6 nous n'indiquons pas la complexité (bien qu'elle puisse être mise en doute pour d'autres raisons), 7-9 est discutable, et toute méthode au-dessus de 10 est supposée mauvaise, sauf preuve du contraire.

Le pire que nous ayons vu est 87 d'une chaîne monstrueuse si-sinon-si dans un code hérité que nous devions prendre en charge.

19voto

bagheera Points 1407

En fait, la complexité cyclomatique peut être mis à l'utiliser au-delà de juste au niveau de la méthode des seuils. Pour commencer, un grand méthode avec une haute complexité peut être divisé en plusieurs petits méthodes avec moins de complexité. Mais il a vraiment amélioré la base de code? Certes, vous pouvez obtenir un peu meilleure lisibilité par tous les noms de méthode. Mais le total de la logique conditionnelle n'a pas changé. Et le total de la logique conditionnelle, peuvent souvent être réduits par le remplacement des conditionnelles avec le polymorphisme.

Nous avons besoin d'une métrique qui ne s'allume pas en vert par la simple méthode de décomposition. J'appelle cela le CC100.

CC100 = 100 * (Total complexité cyclomatique de la base de code) / (Total des lignes de code)

14voto

Ken Points 687

C'est utile pour moi de la même manière que le big-O est utile: je sais ce que c'est, et vous pouvez l'utiliser pour obtenir une intuition pour savoir si une méthode est bonne ou mauvaise, mais je n'ai pas besoin de la calculer pour chaque fonction que j'ai écrite.

Je pense de plus simple indicateurs de LOC, sont au moins aussi bons dans la plupart des cas. Si une fonction ne tient pas sur un seul écran, peu importe comment il est simple. Si une fonction prend 20 paramètres et fait 40 variables locales, il n'a pas d'importance si sa complexité cyclomatique est 1.

7voto

Mark Sherretta Points 5272

Nous avons récemment commencé à l'utiliser. Nous utilisons NDepend à faire une certaine analyse de code statique, et il mesure la complexité cyclomatique. Je suis d'accord, c'est une manière décente pour identifier des méthodes de refactoring.

Malheureusement, nous l'avons vu #'s au-dessus de 200 pour certaines méthodes créées par nos développeurs offshore.

6voto

David Plumpton Points 1345

Vous saurez complexité quand vous le voyez. La principale chose que ce genre d'outil est utile pour signaler les parties du code qui ont été échapper à votre attention.

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