Messung von McCabe-Metriken mit Testwell CMT++ und CMTJava (Code Complexity Measures Tools)Zweck und HerkunftDie 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-MetrikenDie 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. Für den dynamischen Test von Software ist die zyklomatische Zahl v(G) eine der wichtigsten Komplexitätswerte. Die zyklomatische Zahl einer Funktion sollte unter 15 liegen. Bei einem v(G) von 15, gibt es mindestens 15 (meist jedoch mehr) Ausführungspfade. 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. Es ist zu beachten, dass v(G) insensitive bezüglich unkonditionneller Zweige wie goto-, return- und break-Statements ist, obwohl diese sicherlich die Komplexität erhöhen. CMT++ zählt 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. weitere Informationen über Testwell Code Complexity Measures Tools: last updated: 05.06.2010 © 2006-2010 Testwell Oy / Verifysoft Technology GmbH |