Die zyklomatische Komplexität, nach ihrem Vordenker auch McCabe-Metrik genannt, soll dabei helfen, Software-Module begreifbar zu halten. Die Messgröße zollt damit dem Umstand Tribut, dass Quellcode vom Menschen geschrieben und von diesen gewartet wird.
Die McCabe-Metrik bemisst anhand der Knotenpunkte und Kanten im Kontrollflussgraphen die Komplexität eines Software-Moduls.
Komplexität bedeutet für Software nicht zwangsläufig Qualität, denn gerade einfache Software ist einfacher zu warten und weniger fehleranfällig. In der faktischen Messung der Komplexität kann mit der McCabe-Metrik, auch zyklomatische Komplexität, eine vergleichbare Messgröße zu Rate gezogen werden, die den Quellcode auf seine Komplexität hin untersucht.
Als quantifizierbarer Wert wird hierfür die Anzahl linear unabhängiger Pfade genutzt. Die zyklomatische Komplexität lässt sich zudem durch ein Knotendiagramm visualisieren, wobei jeder Knoten eine unteilbare Gruppe von Befehlen repräsentiert. Diese Visualisierung dient nicht nur als Indikator dafür, wie komplex eine Software ist, sondern auch an welchen Programmstellen sich die Komplexität bündelt.
Als Metrik kann die zyklomatische Komplexität nicht nur auf Programmebene angewandt werden. sie lässt sich auch auf Klassen, Funktionen, Methoden und Module herunterbrechen.
Die McCabe-Metrik verstehen
Eingeführt von Thomas J. McCabe hilft die zyklomatische Komplexität dabei, übermäßige Komplexität zu vermeiden. Angewendet wird die Metrik in der Regel auf einen bestimmten Abschnitt des Quellcodes.
Die zyklomatische Komplexität wird in der Regel als Anzahl der Kanten abzüglich der Anzahl der Knoten +1 angegeben. Ein Knoten ist hierbei ein Logic-Branch-Punkt, eine Kante die Verbindung zwischen den Knoten. Es kann auch gemessen werden als Anzahl von Branches in verzweigenden Anweisungen (IF, WHILE, DO) oder als Anzahl von CASE-Anweisungen innerhalb eines SWITCH.
Ein Abschnitt ohne Entscheidungspunkte und Bedingungen (Kontrollflussanweisungen) gilt als linear unabhängiger Pfad mit der niedrigstmöglichen Komplexität von 1. Ohne Kontrollflussanweisungen gibt es lediglich einen einzigen Weg durch den Pfad. Eine einfache Kontrollflussanweisung wie eine IF-Bedingung öffnet zwei verschiedene Pfade über TRUE und FALSE und erhöht die Komplexität des Quellcode-Abschnitts somit auf 2.
Zyklomatische Komplexität in der Praxis – anhand des Basis-Pfadtests
Mit einem Basis-Pfadtest können Sie über eine Ermittlung der Anzahl von Testfällen feststellen, wie viele linear unabhängige Pfade es in einer Software gibt. Für jeden linear unabhängigen Pfad wird in dieser Methode ein Testfall erstellt, was sämtliche Verzweigungen innerhalb einer Software abdeckt, ohne alle Pfade des Kontrollflussdiagramms abdecken zu müssen.
Der Vorteil hierin liegt in der einfacheren Ermittlung der Kanten den Kontrollflussdiagramms bei gleichzeitiger Zeit- und Ressourcenersparnis. Weil für jeden linear unabhängigen Pfad ein Testfall erstellt wird, entspricht die zyklomatische Komplexität hier der Anzahl der Testfälle.
Zyklomatische Komplexität in der Praxis
Die Zahl linear unabhängiger Pfade widergespiegelt als zyklomatische Zahl ist ein Wert, der 1 nicht unterschreiten kann, da jedes noch so einfache Programm mindestens einen linear unabhängigen Pfad benötigt.
In der Praxis gibt es viele Tools, die Entwicklerinnen und Entwickler bei der Messung der zyklomatischen Komplexität helfen und die die McCabe-Metrik zu jeder Entwicklungsphase für einen bestimmten Code-Abschnitt anzeigen können. Zu den wichtigsten Tools zählen beispielsweise Visual Studio, FXCop oder Eclipse for Java.
Grundsätzlich gilt, dass Developer mit niedrigerer Komplexität eine geringere Fehlerwahrscheinlichkeit schaffen können. Konkret lassen sich die zyklomatischen Zahlen wie folgt einordnen:
1 bis 10: wenig komplexe Software mit geringem Fehlerrisiko
11 bis 20: mittelmäßig komplexe Software mit bescheidenem Fehlerrisiko
21 bis 50: hohe Komplexität bei hoher (und steigender) Wahrscheinlichkeit eines Fehlers
51 und mehr: zu hohe Komplexität in einem untestbaren System mot sehr hohem Fehlerrisiko
Warum zyklomatische Komplexität eine relevante Messgröße ist
Die McCabe-Metrik dient unter anderem als Richtwert dafür, welche Module oder Methoden innerhalb einer Software weiter vereinfacht werden können. Ebenso liefert sie Hinweise darauf, wenn die Komplexität einer Software vom Development-Team kaum noch überblickt werden kann.
Wird die zyklomatische Komplexität ermittelt, so lässt sich das Programm so wenig komplex wie möglich halten und dadurch für Erweiterungen öffnen und die Zahl potentieller Fehler reduzieren. Die Ermittlung der zyklomatischen Komplexität spiegelt sich also direkt in geringeren Wartungskosten wider und lohnt alleine deshalb den wirtschaftlichen und zeitlichen Aufwand.
Stand: 08.12.2025
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel IT-Medien GmbH, Max-Josef-Metzger-Straße 21, 86157 Augsburg, einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von Newslettern und Werbung nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Meine Einwilligung umfasst zudem die Verarbeitung meiner E-Mail-Adresse und Telefonnummer für den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern wie z.B. LinkedIN, Google und Meta. Hierfür darf die Vogel Communications Group die genannten Daten gehasht an Werbepartner übermitteln, die diese Daten dann nutzen, um feststellen zu können, ob ich ebenfalls Mitglied auf den besagten Werbepartnerportalen bin. Die Vogel Communications Group nutzt diese Funktion zu Zwecken des Retargeting (Upselling, Crossselling und Kundenbindung), der Generierung von sog. Lookalike Audiences zur Neukundengewinnung und als Ausschlussgrundlage für laufende Werbekampagnen. Weitere Informationen kann ich dem Abschnitt „Datenabgleich zu Marketingzwecken“ in der Datenschutzerklärung entnehmen.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden. Dies gilt nicht für den Datenabgleich zu Marketingzwecken.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://contact.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung.
Eine kritische Auseinandersetzung mit der zyklomatischen Komplexität ist vor allem in Bezug auf McCabes eigene Forderung zur maximalen Komplexität von Teilprogrammen angebracht. Diese solle laut McCabe einen Wert von 10 nicht überschreiten, was aus mehreren Gründen strittig ist. Während beispielsweise verzweigende Anweisungen die Komplexität erhöhen, gilt gleiches nicht für sonstige Anweisungen (wie bspw. Ausgaben).
In diesem Fall würde die McCabe-Metrik aufgrund ihrer eigenen Beschränkungen eher den Testaufwand als die tatsächliche Komplexität messen. Die zyklomatische Zahl bedarf somit der Interpretation der Developer, um die tatsächliche Komplexität adäquat abschätzen zu können.