So analysieren Sie die zyklomatische Komplexität Ihres Codes

Es gibt verschiedene Faktoren, die zur Komplexität eines Typs oder einer Methode beitragen können, die sich auf einen Typ im Code Ihrer Anwendung bezieht. Die zyklomatische Komplexität ist eine beliebte Metrik, mit der die Komplexität Ihres Programms gemessen wird. Mit anderen Worten, es ist eine Software-Metrik, die ein quantitatives Maß für die Komplexität eines Programms liefert.

Im Wesentlichen ist die zyklomatische Komplexität ein Maß für die linear unabhängigen Pfade, die über Ihr Programm verfügbar sind. Sein Wert hängt tatsächlich von der Anzahl der bedingten Verzweigungen oder Konstrukte in Ihrem Code ab. Daher ist die zyklomatische Komplexität für Methoden mit einer großen Anzahl von bedingten Konstrukten hoch (d. H. Switch / if / while / for / foreach-Anweisungen).

In der MSDN heißt es: "Die zyklomatische Komplexität misst die Anzahl linear unabhängiger Pfade durch die Methode, die durch die Anzahl und Komplexität der bedingten Verzweigungen bestimmt wird. Eine geringe zyklomatische Komplexität weist im Allgemeinen auf eine Methode hin, die leicht zu verstehen, zu testen und zu warten ist."

So wird die zyklomatische Komplexität berechnet:

CC = E - N + 1

Wo,

CC bezeichnet die zyklomatische Komplexität

E bezeichnet die Anzahl der Kanten im Diagramm

N bezeichnet die Anzahl der Knoten im Diagramm

Beachten Sie, dass ein Knoten den logischen Zweig darstellt und eine Kante die verbundene Linie zwischen den Knoten darstellt. Je niedriger der Wert der zyklomatischen Komplexität einer Methode ist, desto einfacher ist es übrigens zu testen und zu warten, und desto besser. Sie können die zyklomatische Komplexität nutzen, um die Komplexität von Methoden, Typen und auch Modulen in Ihrer Anwendung zu berechnen.

Da die zyklomatische Komplexität die linienunabhängigen Pfade durch das Programm angibt, ist die Anzahl der Testfälle, die Sie für Ihr Programm benötigen würden, umso höher, je höher der Wert der zyklomatischen Komplexität ist. Die Anzahl der Testfälle, die Sie benötigen würden, entspricht normalerweise der zyklomatischen Komplexität in diesem Fall. Wenn der Wert der zyklomatischen Komplexität geringer ist (ein Wert kleiner oder gleich 10 wird als fantastisch angesehen), wird angenommen, dass der Code gut strukturiert, in hohem Maße testbar und wartbar ist.

Wie überprüfe ich die zyklomatische Komplexität?

Die neueren Versionen von Visual Studio bieten Unterstützung für die Berechnung der zyklomatischen Komplexität mithilfe der Visual Studio-IDE. Sie können Code-Metriken für die gesamte Lösung oder für die von Ihnen ausgewählten Projekte berechnen. Wenn Sie es ausführen, werden im Fenster Code Metrics Results die Ergebnisse der Codeanalyse angezeigt, die in den Wartbarkeitsindex, die zyklomatische Komplexität, die Vererbungstiefe, die Klassenkopplung und auch die Codezeilen unterteilt sind. In diesem Beitrag werden wir die zyklomatische Komplexität untersuchen und ich werde in einem späteren Beitrag hier eine Diskussion über die anderen Punkte präsentieren.

Lesen Sie nun das unten angegebene Code-Snippet.

private void DisplayMessage(string str)

       {

           Console.WriteLine(str);

       }

Wenn Sie die zyklomatische Komplexität für die DisplayMessage-Methode mit Visual Studio berechnen, wird der Wert als 1 angezeigt. Betrachten Sie nun diese Methode, die eine Überprüfung enthält, um festzustellen, ob der als Argument an die Methode übergebene Parameter null oder leer ist.

private void DisplayTextMessage(string str)

       {

           if(!string.IsNullOrEmpty(str))

           Console.WriteLine(str);

       }

Wenn Sie Code Metrics für die Lösung erneut ausführen, stellen Sie fest, dass die zyklomatische Komplexität für die DisplayTextMessage-Methode 2 beträgt.

Wie reduziere ich die zyklomatische Komplexität im Code?

Obwohl es in einigen Fällen schwierig ist, eine bestimmte Strategie zur Reduzierung der zyklomatischen Komplexität in Ihrem Code anzuwenden, da die bedingten Konstrukte möglicherweise Ihrem Problem inhärent sind, können Sie verschiedene Strategien anwenden, um einen niedrigeren Wert für die zyklomatische Komplexität zu erzielen. Die beiden Ansätze, die Sie befolgen sollten, um die hohe zyklomatische Komplexität zu verringern, sind Unit-Tests und Code-Refactoring. Während Unit-Tests Ihnen helfen, die Risiken zu minimieren, sollten Sie Code-Refactoring nutzen, um Ihren Code weniger komplex, einfacher zu testen und zu warten.

Sie können die zyklomatische Komplexität in Ihrem Programm reduzieren, indem Sie die bedingten Konstrukte durch Polymorphismus ersetzen. Durch die Verwendung von Polymorphismus können Sie Ihrem Code viel Flexibilität verleihen - Ihr Code wird testbarer und Sie können Bedingungen hinzufügen, bearbeiten oder sogar entfernen, ohne dass sich Ihr Code wesentlich ändert. Je geringer der Wert der zyklomatischen Komplexität ist, desto einfacher ist es, Ihren Code zu lesen, zu testen und zu warten. In einigen Fällen würde ich empfehlen, dass Sie die Verhaltensentwurfsmuster wie das Strategieentwurfsmuster nutzen, um die zyklomatische Komplexität in Ihrem Code zu reduzieren.