Erstellt: 2025-12-25 | Aktualisiert: 2025-12-25

Was ist Code Hygiene?

Code Hygiene ist die kontinuierliche Pflege der technischen Sauberkeit. Sie fragt nicht nach Architektur oder Design, sondern:

Der Code Hygiene Score

Ein normalisierter Wert zwischen 0-100, der die hygienische Sauberkeit einer Code-Datei bewertet.

Formel

Score = Σ (Faktor_i × Gewicht_i) / Σ Gewicht_i

Jeder Faktor wird auf 0-100 normalisiert, bevor er gewichtet wird. Keine versteckten Sprünge, keine magischen Faktoren.

Unterkapitel

Interpretation

ScoreHygiene-StatusBedeutung
80-100SauberKeine Maßnahmen nötig
60-79GepflegtKleinere Aufräumarbeiten möglich
40-59VernachlässigtAufräumen empfohlen
20-39VerschmutztAufräumen erforderlich
0-19KritischSofortige Hygiene-Maßnahmen

Was der Score leistet

Was der Score nicht ist

Kein Architektur-Score. Keine Design-Bewertung. Keine Business-Logic-Analyse.

Nur Hygiene: Ordnung, Vergleichbarkeit, Auffälligkeiten sichtbar machen.

Erstellt: 2025-12-25 | Aktualisiert: 2025-12-27

Hygiene-Prinzip

Der Code Hygiene Score misst Ordnung und Sauberkeit, nicht Architektur. Die Faktoren beantworten:

1. Größen-Hygiene

„Dateien nicht ausufern lassen"

1.1 Lines of Code (LOC)

EigenschaftWert
Hygiene-FrageIst die Datei noch überschaubar?
Datenquellecode_analysis.line_count
Sauber≤ 100 Zeilen
Grenze600 Zeilen

1.2 Methoden-Anzahl

EigenschaftWert
Hygiene-FrageHat die Klasse zu viele Aufgaben?
Datenquellecode_analysis.functions
Sauber≤ 5 Methoden
Grenze20 Methoden

1.3 Klassen pro Datei

EigenschaftWert
Hygiene-FrageEine Datei = Eine Verantwortung?
Datenquellecode_analysis.classes
Sauber1 Klasse
Grenze3 Klassen

2. Kopplungs-Hygiene

„Abhängigkeiten im Griff behalten"

2.1 Dependencies

EigenschaftWert
Hygiene-FrageWie viele externe Abhängigkeiten?
Datenquellecode_analysis.uses (use-Statements)
Sauber≤ 3 Dependencies
Grenze20 Dependencies

use-Statements sind ein pragmatischer Hygiene-Proxy. Nicht perfekt, aber messbar.

3. Sicherheits-Hygiene

„Offensichtliche Risiken früh erkennen"

3.1 Hardcoded Secrets

EigenschaftWert
Hygiene-FrageLiegen Geheimnisse offen im Code?
ErkennungRegex: Passwörter, API-Keys, Tokens, IPs
Sauber0 Funde
KritischJeder Fund = schwere Hygiene-Verletzung

Härtung: Bei Secrets → Score ≤ 20 (Hard Fail)

3.2 Magic Numbers

EigenschaftWert
Hygiene-FrageSind Konstanten benannt?
ErkennungRegex: 100, 1000, 60, 24, 365, etc.
Sauber0 Funde
AusnahmeConfig-Dateien ignoriert

Niedrig gewichtet. Lesbarkeit, nicht Sicherheit.

4. Statische Analyse (geplant)

„Technische Schulden sichtbar machen"

4.1 PHPStan Errors

EigenschaftWert
Hygiene-FrageGibt es Typ-Fehler oder tote Pfade?
StatusGeplant (Level 5)
Sauber0 Errors

Ohne PHPStan bleibt Hygiene unvollständig, aber nicht falsch.

Zusammenfassung

KategorieFaktorenHygiene-ZweckStatus
GrößeLOC, Methoden, KlassenÜberschaubarkeit
KopplungDependenciesÄnderbarkeit
SicherheitSecrets, Magic NumbersRisiko-Erkennung
StatischPHPStanTechnische Schulden

Erstellt: 2025-12-25 | Aktualisiert: 2025-12-27

Prinzip

Jeder Faktor wird auf 0-100 normalisiert:

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
LOCScoreStatus
80100Sauber
20080Gepflegt
35050Vernachlässigt
50020Verschmutzt
600+0Kritisch

Methoden-Anzahl

normalize_methods(count):
    if count ≤ 5: return 100
    if count ≥ 20: return 0
    return 100 - ((count - 5) / 15) × 100
MethodenScore
5100
1067
1533
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:

DateitypAnpassungBegründung
ControllerMethoden-Grenze: 25Mehr Actions normal
EntityLOC-Grenze: 400Sollten schlank sein
RepositoryMethoden-Grenze: 25Viele CRUD-Methoden
ConfigMagic Numbers: ignoriertDort gehören sie hin
TestLOC-Grenze: 800Test-Setup braucht Platz

Erstellt: 2025-12-25 | Aktualisiert: 2025-12-27

Prinzip

Jeder normalisierte Faktor wird gewichtet. Die Gewichte spiegeln Hygiene-Relevanz, nicht Architektur-Bedeutung.

Standard-Gewichtung

FaktorGewichtHygiene-Begründung
Dependencies25%Kopplung = Hauptursache für Hygiene-Verfall
Lines of Code20%Überschaubarkeit der Datei
Methoden-Anzahl20%Verantwortlichkeits-Klarheit
Hardcoded Secrets15%Sicherheits-Hygiene
Klassen pro Datei10%Datei-Kohäsion
Magic Numbers10%Lesbarkeit

Score-Berechnung

hygiene_score = (
    deps_normalized × 0.25 +
    loc_normalized × 0.20 +
    methods_normalized × 0.20 +
    secrets_normalized × 0.15 +
    classes_normalized × 0.10 +
    magic_normalized × 0.10
)

Beispiel: ContentController.php

400 LOC, 16 Methoden, 1 Klasse, 6 Dependencies, 0 Secrets, 2 Magic Numbers

FaktorRohNormalisiert×Gewicht=Beitrag
Dependencies682×0.25=20.5
LOC40040×0.20=8.0
Methoden1627×0.20=5.4
Secrets0100×0.15=15.0
Klassen1100×0.10=10.0
Magic280×0.10=8.0
Hygiene Score66.9

Interpretation: Score 67 = „Gepflegt" (60-79)

Dateityp-Modifikatoren

Pragmatische Gewichtsanpassung nach Dateityp:

Controller

FaktorStandardController
Methoden20%10%
Dependencies25%30%

Controller haben viele Actions. Dafür ist Kopplung kritischer.

Entity/Model

FaktorStandardEntity
LOC20%30%
Dependencies25%15%

Entities müssen schlank bleiben. Framework-Dependencies sind unvermeidbar.

Repository

FaktorStandardRepository
Methoden20%10%
LOC20%30%

Viele CRUD-Methoden sind normal. LOC-Hygiene wichtiger.

Zukünftige Erweiterung

Bei Integration von PHPStan:

FaktorAktuellMit PHPStan
Dependencies25%20%
LOC20%15%
Methoden20%15%
Secrets15%12%
Klassen10%8%
Magic10%5%
PHPStan-25%

PHPStan wird hoch gewichtet - statische Analyse ist Kern-Hygiene.