Prinzip
Jeder Faktor wird auf 0-100 normalisiert:
- 100 = Hygienisch einwandfrei
- 0 = Hygiene-Grenze überschritten
Lineare Interpolation dazwischen. Keine Sprünge, keine Magie.
Normalisierungsformel
Für Metriken wo weniger = sauberer:
normalized = max(0, 100 - ((wert - optimal) / (grenze - optimal)) × 100)
Beispiel LOC:
- optimal = 100, grenze = 600
- Bei 350 LOC: 100 - ((350-100) / 500) × 100 = 50
Normalisierung pro Faktor
Lines of Code
normalize_loc(loc):
if loc ≤ 100: return 100 # sauber
if loc ≥ 600: return 0 # Grenze
return 100 - ((loc - 100) / 500) × 100
| LOC | Score | Status |
|---|---|---|
| 80 | 100 | Sauber |
| 200 | 80 | Gepflegt |
| 350 | 50 | Vernachlässigt |
| 500 | 20 | Verschmutzt |
| 600+ | 0 | Kritisch |
Methoden-Anzahl
normalize_methods(count):
if count ≤ 5: return 100
if count ≥ 20: return 0
return 100 - ((count - 5) / 15) × 100
| Methoden | Score |
|---|---|
| 5 | 100 |
| 10 | 67 |
| 15 | 33 |
| 20+ | 0 |
Klassen pro Datei
normalize_classes(count):
if count == 1: return 100
if count == 2: return 50
if count == 3: return 25
return 0
Dependencies
normalize_deps(count):
if count ≤ 3: return 100
if count ≥ 20: return 0
return 100 - ((count - 3) / 17) × 100
Hardcoded Secrets
normalize_secrets(count):
if count == 0: return 100
if count ≥ 1: return 20 # Hard Fail
Sonderregel: Secrets sind ein Hygiene-Killer. Ein Fund → Score maximal 20.
Magic Numbers
normalize_magic(count):
if count == 0: return 100
if count ≤ 5: return 100 - (count × 10)
return 50 # Floor
Weniger kritisch. Floor bei 50, nicht 0.
Dateityp-Anpassungen
Pragmatische Hygiene berücksichtigt Kontext:
| Dateityp | Anpassung | Begründung |
|---|---|---|
| Controller | Methoden-Grenze: 25 | Mehr Actions normal |
| Entity | LOC-Grenze: 400 | Sollten schlank sein |
| Repository | Methoden-Grenze: 25 | Viele CRUD-Methoden |
| Config | Magic Numbers: ignoriert | Dort gehören sie hin |
| Test | LOC-Grenze: 800 | Test-Setup braucht Platz |