Messung der zyklomatischen Komplexität (McCabe-Metrik)
mit Testwell CMT++ und Testwell CMTJava
Testwell CMT++ und CMTJava sind Werkzeuge zur Messung der Softwarekomplexität in C, C++, Java und C#.
Die Werkzeuge zeigen unter anderem die zyklomatische Komplexität (McCabe-Metrik) an.
Die Werkzeuge zeigen unter anderem die zyklomatische Komplexität (McCabe-Metrik) an.
Die zyklomatische Komplexität (auch bekannt als Programmkomplexität oder McCabe-Komplexität) ist die am weitesten verbreiteste statische Softwaremetrik. Sie wird genutzt, um die Stichhaltigkeit und das Vertrauen in das Programms zu messen. Die zyklomatische Komplexität wurde bereits 1976 durch Thomas McCabe eingeführt. Sie zeigt die Anzahl voneinander unabhängiger linearer Pfade eines Softwaremoduls an. Die McCabe-Komplexität ist eine der meist akzeptiertesten Softwaremetriken. Sie ist unabhängig von der Programmiersprache.
Interpretiation der McCabe-Metrik
Die die zyklomatische Zahl McCabes (McCabe´s Cyclomatic Number), abgekürzt mit v(G), zeigt die Komplexität des Kontrollflusses im Code. v(G) ist die Anzahl der konditionellen Zweige des Flussdiagramms. Für ein Programm, welches lediglich aus einem einzigen sequentiellen Statement besteht, beträgt v(G) = 1.Für eine einzelne Funktion ist v(G) um eins geringer als die Anzahl der Verzweigungspunkte für Bedingungen (conditional branching points) in dieser Funktion.
Je größer die zyklomatische Zahl ist, um so mehr Pfade sind in der Funktion und desto schwieriger ist es, diese zu verstehen.
Für den dynamischen Test von Software ist die zyklomatische Zahl v(G) eine der wichtigsten Komplexitätswerte. Da die zyklomatische Zahl die Kontrollflusskomplexität beschreibt, ist es offensichtlich, dass Module und Funktionen mit einer hohen zyklomatischen Komplexität mehr Testfälle als solche mit einem niedrigen McCabe-Wert. Als Faustregel kann man festhalten, dass für jede Funktion mindestens so viele Testfälle ausgeführt werden sollten wie v(G) angibt.
Die zyklomatische Zahl einer Funktion sollte unter 15 liegen. Bei einem v(G) von 15, gibt es mindestens 15 (meist jedoch mehr) Ausführungspfade. Mehr als 15 Pfade sind jedoch schwierig zu identifizieren und zu testen. Funktionen mit einem "Selection-Statement" mit mehreren Zweigen sind eine Ausnahme.
Eine vernünftige Obergrenze für die zyklomatische Zahl einer Datei liegt bei 100.
Wie wird die McCabe-Metrik mit CMT++ berechnet?
Die McCabe Cyclomatic Number v(G) wird auf der Basis von (Member) Funktionsdefinitionen und Class-/Struct-Deklarationen gemessen.Jedes If-Statement führt einen neuen Zweig ein und erhöht deshalb v(G) um den Wert 1.
Iterationskonstrukte wie For- und Whileschleifen haben ebenfalls neue Zweige zur Folge. Jede case-Anweisung in den Switch-Statement erhöht v(G) um eins.
Case-Zweige erhöhen v(G) nicht, da die Anzahl der Zweige im Kontrollfluss nicht erhöhen. Bei zwei oder mehr case-Anweisungen, die keinen Code beinhalten wird die McCabe-Zahl lediglich um den Wert Eins für die Gesamtheit dieser case-Anweisungen inkrementiert.
Jede catch-Anweisung in einem Try-Block erhöht v(G) um Eins. Dies gilt auch für die Anweisung exprl ? expr2 : expr3.
v(G) ist insensitive bezüglich unkonditionneller Zweige wie goto-, return- und break-Statements, obwohl diese sicherlich die Komplexität erhöhen.
Testwell CMT++ und CMTJava zählen auch die Zweige, die durch konditionelle Kompilationsdirektiven entstehen, um den v(G)-Wert zu erhalten. Konditionelle Kompilationsdirektiven führen zwar nicht zu neuen Zweigen im Kontrollfluss des Programms, erhöhen aber die Komplexität des Programms welches der Nutzer sieht.
Zusammenfassend kann man festhalten, dass die folgenden Sprachkonstrukte die zyklomatische Zahl um den Wert Eins erhöhen: if (...), for (...), while (...), case ...:, catch (...), &&, ||, ?, #if, #ifdef, #ifndef, #elif.
Testwell CMT++ und CMTJava zeigen die folgenden Softwaremetriken an:
- Zeilenmetriken/Lines-of-code (LOC) Metriken
- Halstead-Metriken
- McCabe Cyclomatic Number v(G)
- Wartungsaufwand (Maintainability Index)
CodeSonar und Imagix 4D
Neben Testwell CMT++ und CMTJava bietet Verifysoft Technology in den deutschsprachigen Ländern folgende Werkzeuge an, die unter anderem auch die Code-Komplexität messen:Wir beraten Sie gerne bei der Auswahl des für Sie besten Werkzeugs.
Kontaktieren Sie uns jetzt!