2010-02-02 7 views
4

Au travail, nous étudions des problèmes courants qui conduisent à une complexité cyclomatique élevée. Par exemple, avoir une grande instruction if-else peut conduire à une complexité cyclomatique élevée, mais peut être résolue en remplaçant les conditionnels par un polymorphisme. Quels autres exemples avez-vous trouvé?Causes communes de la complexité cyclomatique et de leurs solutions

+0

Toute construction qui a un comportement de branchement augmente la complexité cyclomatique –

+0

http://en.wikipedia.org/wiki/Cyclomatic_complexity: –

+0

Vous dites "complexité cyclomatique" comme si c'était une chose intrinsèquement mauvaise. Ne feriez-vous pas mieux en regardant ce qui cause des problèmes réels? –

Répondre

5

Voir le definition of Cyclomatic Complexity de NDepend.

Nesting Depth est également une bonne métrique de code.

La complexité cyclomatique est une métrique de logiciel procédural populaire égale au nombre de décisions pouvant être prises dans une procédure. Concrètement, en C#, le CC d'une méthode est 1 + {le nombre d'expressions suivantes trouvées dans le corps de la méthode}:

si | alors que | pour | foreach | cas | défaut | continuer | goto | & & | || | attraper | opérateur ternaire?: | ??

expressions suivantes ne sont pas comptés pour le calcul CC:

autre | fais | commutateur | essayer | utilisant | jeter | enfin | retour | création d'objet | appel de méthode | accès au champ

Adaptée au monde OO, cette métrique est définie à la fois sur les méthodes et classes/structures (comme la somme de ses méthodes CC). Notez que le CC d'une méthode anonyme n'est pas compté lors du calcul du CC de sa méthode externe. Recommandations: Les méthodes où CC est supérieur à 15 sont difficiles à comprendre et à maintenir. Les méthodes où CC est supérieur à 30 sont extrêmement complexes et doivent être divisées en méthodes plus petites (sauf si elles sont générées automatiquement par un outil).

+0

Sympa de votre part d'ajouter comment c'est calculé. –

1

Un autre exemple pour éviter d'utiliser autant de ifs, c'est l'implémentation d'une machine à états finis. Parce que les événements déclenchent des transitions, les conditions sont implicites de manière plus claire avec ces transitions qui changent l'état du système. Le contrôle est plus facile.

vous laisser un lien où mentionne quelques-uns des avantages de ESt:

http://www.skorks.com/2011/09/why-developers-never-use-state-machines/

Questions connexes