23 April 2021

Was ist Komplexität in der Softwareentwicklung?

Wenn man von Komplexität in der Softwareentwicklung redet muss man zwei Gesichtspunkte betrachten. Zum Einen die Komplexität einer einzelnen Code-Einheit oder eines Moduls (kann eine Subsystem, Service etc. sein) und die Komplexität des gesamten Software-Systems, in dem die einzelnen Code-Einheiten oder Module zusammenarbeiten bzw. ineinandergreifen.

Komplexität eines Software-Systems

Bei einem solchen System, daß in Produktion läuft, bestehen meist mehrere Ebenen, die voneinander abhängig sind oder aufeinander aufbauen. Ändert sich etwas in einer Ebene könnte das Auswirkungen auf andere Ebenen haben. Aber auch in der Vertikalen, also in einer Ebene, gibt es Abhängigkeiten untereinander. So kann bzw. muss ein Service auf einen anderen Service zugreifen, um arbeiten zu können. Es entsteht ein komplexes System, was für Menschen schwer erfassbar sein kann. Sie müssen gut beschrieben sein. Ein aussagekräftiges Maß für die Komplexität gibt es bei Software-Systemen nicht. Auf Code-Ebene allerdings schon.

Komplexität auf Code-Ebene

Für die Komplexität auf Code-Ebene wiederum gibt es Metriken. Eine sehr bekannte und akzeptierte Metrik ist McCabe, die die zyklomatische Komplexität misst. Diese Metrik ist eine absolute Zahl (0 bis unendlich), die für z.B. eine Code-Unit (Datei) ermittelt wird. Sie berücksichtigt die statements und conditions und ist entsprechend hoch, je mehr statements innerhalb von conditions und sub-conditions "versteckt" sind. Ein McCabe von unter 10 wird als positiv angesehen, sprich die Komplexität ist "gering". Dementsprechend besteht die Möglichkeit die Komplexität auf Modul-Ebene zu kalkulieren, z.B. in dem man einen Durchschnitt für alle Code-Units innerhalb dieses Moduls bildet.