Messung von McCabe-Metriken mit Testwell CMT++ (Complexity Measures Tool)
Zweck und Herkunft
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-Metriken
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 diese zu verstehen.
Es sei darauf hingewiesen, dass die Cyclomatic-Number die Komplexität von
Datenstrukturen, Datenfluss und Modul-Interfaces unberücksichtigt läßt.
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.
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 CMT++
last updated: 17.10.2006
© 1996-2006 Testwell Oy / Verifysoft Technology GmbH
CTA++, CTC++, CMT++ and CMTJava are products of Testwell Oy, Tampere (Finland)
all other trademarks of this site are the property of their respective owners.