Ursachen-Metriken
1. Modularitaet (Newman’s Q)
Abschnitt betitelt „1. Modularitaet (Newman’s Q)“Theorie: Newman 2004, Graph-Community-Erkennung.
Misst, wie gut sich der Abhaengigkeitsgraph in unabhaengige Cluster zerlegen laesst. Vergleicht die tatsaechliche Kantendichte innerhalb von Modulen mit einem Zufallsgraphen gleicher Gradsequenz.
Q = (1/m) × Σ [A_ij - k_out_i × k_in_j / m] × δ(c_i, c_j)- Wertebereich: [-0,5, 1,0]. Q > 0,3 = signifikante modulare Struktur.
- Nicht manipulierbar: Das Hinzufuegen nutzloser Kanten naehert den Graphen einem Zufallsgraphen an, was Q verringert. Nur echte modulare Restrukturierung verbessert Q.
- Sprachunabhaengig: Funktioniert auf JEDEM Graphen. Nutzt sowohl Import-Kanten als auch Aufruf-Kanten.
- Ersetzt: Kopplung + Kohaesion + God-Files + Hotspots (alles Symptome eines niedrigen Q).
2. Azyklizitaet
Abschnitt betitelt „2. Azyklizitaet“Theorie: Martin 2003, Prinzip der azyklischen Abhaengigkeiten.
Misst die Abwesenheit von zirkulaeren Abhaengigkeiten. Zyklen machen die Build-Reihenfolge undefiniert, die Aenderungsausbreitung unvorhersehbar und das Testen schwierig.
- Berechnung: Tarjans SCC-Algorithmus zaehlt stark zusammenhaengende Komponenten mit mehr als einem Element.
- Normalisierung:
score = 1 / (1 + cycle_count)— Sigmoid, da die Anzahl unbegrenzt ist. - Fundamental: A haengt von B ab, B haengt von A ab — keines kann unabhaengig verstanden oder getestet werden.
3. Tiefe
Abschnitt betitelt „3. Tiefe“Theorie: Lakos 1996, Levelisierung und Schichtenarchitektur.
Misst die laengste Abhaengigkeitskette im DAG. Tiefe Ketten bedeuten, dass eine Aenderung am unteren Ende sich durch viele Schichten ausbreitet.
- Berechnung: Iterative Laengste-Pfad-DFS von Einstiegspunkten.
- Normalisierung:
score = 1 / (1 + depth / 8)— Mittelpunkt 8 (Tiefe 8 = Score 0,5). - Unabhaengig von Q: Ein Graph kann perfekte Modularitaet haben und trotzdem eine Kette von 20 Modulen aufweisen, die sequenziell voneinander abhaengen.
4. Gleichheit (Gini-Koeffizient)
Abschnitt betitelt „4. Gleichheit (Gini-Koeffizient)“Theorie: Gini 1912, urspruenglich aus der Oekonomie (Vermoegensungleichheit).
Misst, wie gleichmaessig die Komplexitaet ueber Funktionen verteilt ist. Eine Codebasis, in der eine God-Funktion CC=200 hat und alle anderen CC=2, hat einen hohen Gini-Wert. Eine Codebasis, in der alle Funktionen CC=5-10 haben, hat einen niedrigen Gini-Wert.
Sort values ascending.G = Σ (2i - n - 1) × x_i / (n × Σ x_i)- Score:
1 - G(niedrigerer Gini = bessere Gleichheit = hoeherer Score). - Warum es wichtig ist: God-Files sind die Hauptursache fuer Verwirrung bei KI-Agenten. Wenn 40 % der Komplexitaet in einer Datei steckt, kann der Agent nicht effektiv darueber nachdenken.
5. Redundanz
Abschnitt betitelt „5. Redundanz“Theorie: Kolmogorov-Komplexitaet — die Luecke zwischen tatsaechlichem Code und minimal aequivalentem Code.
Kombiniert tote Funktionen (von keiner Aufrufstelle referenziert) und doppelte Funktionen (identische Body-Hashes).
R = (dead_count + duplicate_count) / total_functionsscore = 1 - R- Fundamental: Jede Zeile toter oder doppelter Code ist strukturelle Verschwendung — vergroessert den Suchraum des KI-Agenten, ohne zum Verhalten beizutragen.
Warum genau 5?
Abschnitt betitelt „Warum genau 5?“Ein gerichteter Graph mit attributierten Knoten hat diese unabhaengigen strukturellen Eigenschaften:
| Dimension | Was sie erfasst | Eigenschaft von |
|---|---|---|
| Modularitaet | Kanten-Clustering | Kanten |
| Azyklizitaet | Zirkulaere Kanten | Kanten |
| Tiefe | Kantenkettenlaenge | Kanten |
| Gleichheit | Knoteneigenschafts-Konzentration | Knoten |
| Redundanz | Unnoetige Knoten | Knoten |
3 Kanteneigenschaften + 2 Knoteneigenschaften = 5 insgesamt. Mehr hinzuzufuegen wuerde entweder ueberlappen (Entropie ueberlappt mit Gini) oder etwas ausserhalb der statischen Analyse messen (Laufzeitverhalten).