Die Serie
Im vorigen Artikel haben einige grundlegende Strukturbetrachtungen gezeigt, dass zyklische Abhängigkeiten zu zwei Gruppen negativer Effekte führen können, die ich als Infizierbarkeit und Schwergewichtigkeit bezeichnet habe:
- Als Infizierbarkeit habe ich Sachverhalt bezeichnet, dass mit der Menge und Größe von Zyklen die Wahrscheinlichkeit wächst, dass einzelne problematische Elemente negativen Einfluss auf andere Teile des Systems ausüben.
- Schwergewichtigkeit bezeichnet das Problem, dass mit der Menge und Größe von Zyklen auch die jeweiligen Arbeitspakete der am System arbeitenden Menschen dazu tendieren, größer und komplexer zu werden.
Erläuterung zur Korrektheit
In der Studie "Transition and Defect Patterns of Components in Dependency Cycles during Software Evolution" (siehe [Oyetoyan2014]) wird der Einfluss von Klassen-Zyklen auf die Fehleranfälligkeit von Software-Systemen untersucht. Zu diesem Zweck wurde für die Klassen mehrerer Software-Systeme ermittelt, ob sie an einem Zyklus beteiligt sind oder nicht. Für alle untersuchten Systeme lagen zudem Daten aus einem Defect Tracking System vor, die es erlaubten, die Fehleranfälligkeit der einzelnen Klassen in der Historie des Systems nachzuvollziehen. Eines der wesentlichen Ergebnisse der Studie ist, dass die Fehleranfälligkeit von Klassen, die an einem Zyklus beteiligt sind, signifikant höher ist als diejenige von Klassen, die nicht an einem Zyklus beteiligt sind.Eine mögliche Erklärung dieses Sachverhalts sehen die Autoren der Studie darin, dass für die betroffenen innerzyklischen Klassen über die Zeit auch ein durchweg ansteigener CRSS-Wert sowie zusätzlich ein Anstieg ihrer Größenmaße ermittelt werden konnte. Dies konnte für außerzyklische Klassen nicht im selben Ausmaß beobachtet werden. Die mit den CRSS-Werten ansteigende Schwergewichtigkeit, welche die zu ändernden Systemteile umfangreicher und komplexer werden lässt, könnte beispielsweise die Fehlerquote der am System arbeitenden Entwickler erhöhen und die Testbarkeit der geänderten Teile reduzieren. Hinzu kommt, dass eventuelle Fehler infektiöser auf andere Systemteile wirken, was auch die Wahrscheinlichkeit eines tatsächlichen Auftretens und Entdeckens der ins System eingebrachten Fehler erhöht.