Die zyklomatische Komplexität ist eine Metrik im Software-Engineering, welche die Komplexität und damit die Fehlerträchtigkeit und Wartbarkeit von Code zu bestimmen hilft. Die zyklomatische Komplexität wird auch als Mc Cabe Maß bezeichnet.
Bestimmung der zyklomatischen Komplexität
Diese Metrik gibt an, wie viele linear unabhängige Pfade es durch einen Programmgraf gibt. Einen Pfad definiert man dann als linear unabhängig, wenn er mindestens eine neue Kante (Linie in Abb. 1) enthält.
In folgenden Beispiel gibt es vier linear unabhängige Pfade.
Diese Pfade sind durch die arabischen Ziffern an den Kanten (Linien) des Programmgrafs gekennzeichnet:
- 2 – 7
- 1 – 4 – 6 – 9 – 10
- 1 – 4 – 6 – 9 – 8 – 9 -10
- 1 – 3 – 5 – 9 – 10
D.h. die Zahlen geben die Kanten an, die jeweils durchlaufen werden.
Hersteller bestimmen diese Metrik nicht von Hand, sondern mit einem Werkzeug wie:
- Eclipse for Java
- Visual Studio
- FXCop
- uvm.
Zielwerte für die zyklomatische Komplexität
Im obigen Beispiel gibt es vier unabhängige Pfade. Das wären eine niedrige Komplexität und damit eine niedrige Wahrscheinlichkeit eines Fehlers. Man unterscheidet oft folgende Bereiche:
- 1-10: Nicht komplex, geringes Fehlerrisiko
- 11-20: Mittlere Komplexität, moderates Fehlerrisiko
- 21-50: Hohe Komplexität, hone Wahrscheinlichkeit eines Fehlers
- > 50: Untestbares System, sehr hohe Wahrscheinlichkeit eines Fehlers
Hersteller sollten die zyklomatische Komplexität pro Komponente bzw. Methode bestimmen, um die „Hotspots“ zu identifizieren, an denen ein Refactoring besonders notwendig.
Regulatorischer Hintergrund
Eine gesetzliche Pflicht, die zyklomatische Komplexität zu bestimmen, gibt es nicht. Allerdings wird dieses Mc Cabe Maß oft als Stand der Technik bezeichnet.
Bei Medizinprodukten ist die Software-Norm IEC 62304 maßgeblich. Sie verlangt in Kapitel 5.5.3, Akzeptanzkriterien für Software-Einheiten festzulegen und deren Einhaltung zu prüfen. Eine Möglichkeit, solche Akzeptanzkriterien zu bestimmen, sind Software-Metriken. Die zyklomatische Komplexität bietet sich als eine sehr aussagekräftige Metrik an.
Die Festlegung, dass das McCabe Maß bestimmt werden muss, treffen die Hersteller entweder in einer übergreifenden Verfahrensanweisung oder in einem produkt- bzw. projektspezifischen Entwicklungsplan.
Lesen Sie in dem Fachartikel zu Verfahrensanweisungen versus Entwicklungsplänen, nach welchen Kriterien Sie Anforderungen auf die beiden Dokumententypen aufteilen.
Die zyklomatische Komplexität ist nur eine von vielen Metriken. Aber alleine deren Aussage ist eine hilfreiche Heuristik, um über die Güte einer Softwareentwicklung Bescheid zu wissen. Wenn dieses Metrik nicht bestimmt wird, ist das auch eine Aussage.
Wie Sie Ihre Software-Einheiten schnell und normenkonform entwickeln und verifizieren, erfahren Sie übrigens im Kompaktseminar „medizinische Software“.
Änderungshistorie
- 2024-09-19: Artikel grundlegend überarbeitet
- 2015-09-14: Erste Version des Artikels erstellt
Hallo Herr Johner,
es gibt noch den weiteren Pfad 1 3 5 9 8 9 10!
Hallo Herr Johner,
ich frage mich, ob die zyklomatische Komplexität noch diese Aussagekraft besitzt um die Komplexität von Software zu messen. Die zyklomatische Komplexität basiert auf einem Kontrollfluss, der explizt durch Iterationsanweisungen und bedingte Anweisungen gesteuert wird. Dies Art zu Programmieren ist meiner Ansicht nach aber typisch für die strukturierte Programmierung, der zunehmende an Bedeutung verliert.
Schaue ich mir aber den statischen (Templates in C++) oder dynamischen (Objektorientierung) Polymorphismus an, so wird hier der Kontrollfluss implizit gesteuert. So steuert beim statischen Polymorphismus in C++ Patternmaching den Kontrollfluss, so steuert beim dynamischen Polymorphismus das Überschreiben einer Methode den Kontrollfluss des Programmes.
Es kann daher durchaus vorkommen, dass eine Funktion eine niedrige zyklomatische Komplexität besitzt, tatsächlich aber hochkomplex ist, da die sehr viele Entscheidungen erst zu Compilezeit oder Laufzeit des Programmes implizit aufgelöst werden.
Lieber Herr Grimm,
herzlichen Dank für diesen sehr wichtigen Gedanken!
Ich stimme Ihnen zu, und sehe auch keinen wirklichen Dissens.
Über die absolute Bedeutung der Metrik lässt sich sicher immer streiten. Für mich ist sie eine, vielleicht die aussagekräftigste, um die kritischen Stellen zu identifizieren. Denn dort, wo es „stinkt“, finden sich meist noch anderen „Sünden“.
Nochmals besten Dank für Ihre wichtige Ergänzung!
Viele Grüße
Christian Johner