Comment analyser la complexité cyclomatique de votre code

Plusieurs facteurs peuvent contribuer à la complexité d'un type ou d'une méthode se rapportant à un type dans le code de votre application. La complexité cyclomatique est une métrique populaire utilisée pour mesurer la complexité de votre programme. En d'autres termes, c'est une métrique logicielle qui fournit une mesure quantitative de la complexité d'un programme.

En substance, la complexité cyclomatique est une mesure des chemins linéairement indépendants qui sont disponibles dans votre programme. Sa valeur dépend en fait du nombre de branches ou de constructions conditionnelles dans votre code. Ainsi, la complexité cyclomatique sera élevée pour les méthodes qui ont un grand nombre de constructions conditionnelles (c'est-à-dire les instructions switch / if / while / for / foreach).

Le MSDN déclare: "La complexité cyclomatique mesure le nombre de chemins linéairement indépendants à travers la méthode, qui est déterminé par le nombre et la complexité des branches conditionnelles. Une faible complexité cyclomatique indique généralement une méthode qui est facile à comprendre, tester et maintenir."

Voici comment la complexité cyclomatique est calculée:

CC = E - N + 1

Où,

CC désigne la complexité cyclomatique

E désigne le nombre d'arêtes dans le graphique

N désigne le nombre de nœuds dans le graphe

Notez qu'un nœud représente la branche logique et un bord représente la ligne connectée entre les nœuds. Soit dit en passant, plus la valeur de la complexité cyclomatique d'une méthode est faible, plus elle est facile à tester et à maintenir, donc mieux c'est. Vous pouvez profiter de la complexité cyclomatique pour calculer la complexité des méthodes, des types et également des modules de votre application.

Étant donné que la complexité cyclomatique indique les chemins linéairement indépendants à travers le programme, plus la valeur de la complexité cyclomatique est élevée, plus le nombre de cas de test dont vous auriez besoin pour votre programme est élevé - le nombre de cas de test dont vous auriez besoin serait généralement équivalent au cyclomatic complexité dans ce cas. Si la valeur de la complexité cyclomatique est inférieure (une valeur inférieure ou égale à 10 est considérée comme géniale), le code est supposé être bien structuré, hautement testable et maintenable.

Comment vérifier la complexité cyclomatique?

Les versions plus récentes de Visual Studio prennent en charge le calcul de la complexité cyclomatique à l'aide de l'IDE de Visual Studio. Vous pouvez calculer les métriques de code pour l'ensemble de la solution ou pour les projets que vous avez sélectionnés. Lorsque vous l'exécutez, la fenêtre Résultats des métriques de code vous montrera les résultats de l'analyse de code organisés en indice de maintenabilité, complexité cyclomatique, profondeur d'héritage, couplage de classe et également les lignes de code. Dans cet article, nous explorerons la complexité cyclomatique et je présenterai une discussion sur les autres points dans un article ultérieur ici.

Maintenant, reportez-vous à l'extrait de code ci-dessous.

private void DisplayMessage(string str)

       {

           Console.WriteLine(str);

       }

Lorsque vous calculez la complexité cyclomatique pour la méthode DisplayMessage à l'aide de Visual Studio, il affiche la valeur comme 1. Considérez maintenant cette méthode qui contient une vérification pour voir si le paramètre passé à la méthode en tant qu'argument est nul ou vide.

private void DisplayTextMessage(string str)

       {

           if(!string.IsNullOrEmpty(str))

           Console.WriteLine(str);

       }

Si vous exécutez à nouveau Code Metrics pour la solution, vous observerez que la complexité cyclomatique de la méthode DisplayTextMessage est de 2.

Comment réduire la complexité cyclomatique du code?

Bien que dans certains cas, il soit difficile d'adopter une stratégie particulière pour réduire la complexité cyclomatique de votre code, car les constructions conditionnelles peuvent l'être car elle est inhérente à votre problème, vous pouvez adopter diverses stratégies pour obtenir une valeur de complexité cyclomatique inférieure. Les deux approches à suivre pour atténuer la complexité cyclomatique élevée sont les tests unitaires et la refactorisation du code. Alors que les tests unitaires vous aideront à minimiser les risques, vous devez tirer parti de la refactorisation du code pour rendre votre code moins complexe, plus facile à tester et à maintenir.

Vous pouvez réduire la complexité cyclomatique de votre programme en remplaçant les constructions conditionnelles par le polymorphisme. En utilisant le polymorphisme, vous pouvez ajouter beaucoup de flexibilité à votre code - votre code devient plus testable et vous pouvez ajouter, modifier ou même supprimer des conditions sans trop de changement dans votre code. En substance, moins la valeur de la complexité cyclomatique est faible, plus votre code est facile à lire, à tester et à maintenir. Dans certains cas, je vous recommande de tirer parti des modèles de conception comportementale tels que le modèle de conception de stratégie pour réduire la complexité cyclomatique de votre code.