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 ?

56voto

Greg D Points 24218

Je ne suis pas au courant d'un concept plus profond. Je crois qu'il est généralement considéré dans le contexte d'un indice de maintenabilité. Plus il y a de branches dans une méthode particulière, plus il est difficile de maintenir un modèle mental du fonctionnement de cette méthode (en général).

Les méthodes ayant une complexité cyclomatique plus élevée sont également plus difficiles à obtenir une couverture complète du code dans les tests unitaires. (Merci Mark W !)

Cela fait intervenir tous les autres aspects de la maintenabilité, bien sûr. Probabilité d'erreurs/de régressions/etc. Le concept de base est assez simple, cependant.

10 votes

En outre, il est plus difficile de procéder à des tests unitaires et d'obtenir une couverture complète du code.

1 votes

C'est vrai parce qu'on dit qu'on ne peut garder qu'une poignée de choses dans sa conscience à un moment donné.

4 votes

La complexité cyclomatique d'une méthode indique également le nombre de cas de tests unitaires nécessaires pour atteindre une couverture de code de 100 % pour cette méthode.

41voto

Tetsujin no Oni Points 3646

La complexité cyclomatique mesure le nombre de fois que vous devez exécuter un bloc de code avec des paramètres variables afin d'exécuter chaque chemin à travers ce bloc. Un nombre plus élevé est mauvais car il augmente les chances que des erreurs logiques échappent à votre stratégie de test.

13voto

Nirali Points 4203
Cyclocmatic complexity = Number of decision points + 1

Les points de décision peuvent être vos instructions conditionnelles telles que if, if else, switch, for loop, while loop, etc.

Le tableau suivant décrit le type de l'application.

  • La complexité cyclomatique se situe entre 1 et 10 A considérer comme normale. d'application normale

  • La complexité cyclomatique réside 11 - 20 Application modérée

  • La complexité cyclomatique réside 21 - 50 Application risquée

  • La complexité cyclomatique est supérieure à 50 Application instable

4 votes

"Complexité cyclique = nombre de points de décision + 1". Dans tous les cas que j'ai essayés, cela semble être vrai. Je n'ai qu'une question : pourquoi s'embarrasser de diagrammes de flux et de formules, alors que les decision_points+1 est tout ce dont nous avons besoin ? (En tout cas, merci pour cette méthode très simple).

11voto

azheglov Points 3548

Wikipedia peut être votre ami sur ce point : Définition de la complexité cyclomatique

En gros, vous devez imaginer votre programme comme une graphique du flux de contrôle et ensuite

La complexité est (...) définie comme suit :

M = E − N + 2P

  • M = complexité cyclomatique,
  • E = le nombre d'arêtes du graphe
  • N = le nombre de nœuds du graphe
  • P = le nombre de composants connectés

CC est un concept qui tente de capturer la complexité de votre programme et la difficulté de le tester en un seul nombre entier.

7voto

Oui, c'est vraiment ça. Plus votre code peut prendre de chemins d'exécution, plus il y a de choses à tester, et plus la probabilité d'erreur est élevée.

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