Legacy Code
Vorhandener Quellcode, der funktioniert, aber schwer zu warten, zu testen oder zu erweitern ist. Das Konzept fokussiert Bewertung, Priorisierung und Strategien zur sicheren Modernisierung.
Klassifikation
- KomplexitätHoch
- AuswirkungTechnisch
- EntscheidungstypArchitektur
- OrganisationsreifeFortgeschritten
Technischer Kontext
Prinzipien & Ziele
Use Cases & Szenarien
Kompromisse
- Regressionen und Betriebsstörungen während Änderungen.
- Überschreitung von Budget und Zeitplänen.
- Wissenstransferverlust bei Schlüsselpersonen.
- Kleine, überprüfbare Schritte statt umfangreicher Rewrites.
- Automatisierte Tests vor größeren Änderungen etablieren.
- Priorisierung nach Geschäftsrelevanz und Risiko.
I/O & Ressourcen
- Quellcode-Repositories und Branch-Historie
- Betriebs- und Fehlerprotokolle
- Stakeholder-Anforderungen und Business-Kriterien
- Priorisierte Maßnahmenliste
- Modernisierungs-Roadmap und Pilot-Plan
- Metriken zur Überwachung der Verbesserung
Beschreibung
Legacy Code bezeichnet vorhandenen, oft veralteten Quellcode, der funktional ist, aber schwer zu warten, zu testen oder zu erweitern ist. Er entsteht durch historische Entscheidungen, fehlende Dokumentation und technische Schulden. Das Konzept hilft beim Bewerten von Risiken, Priorisierung von Refactoring- oder Modernisierungsmaßnahmen und bei der Entscheidungsfindung für Upgrade-Strategien.
✔Vorteile
- Verbesserte Wartbarkeit und geringeres Ausfallrisiko.
- Höhere Entwicklungsgeschwindigkeit nach Stabilisierung.
- Bessere Planbarkeit und geringere Betriebskosten langfristig.
✖Limitationen
- Hoher kurzfristiger Aufwand und Investitionsbedarf.
- Manche Legacy-Abhängigkeiten sind nicht sofort entfernbar.
- Risiko von Regressionen bei unvollständigen Tests.
Trade-offs
Metriken
- Testabdeckung
Anteil des Codes, der durch automatisierte Tests abgedeckt wird; wichtig zur Messung von Sicherheitsgrad bei Änderungen.
- Time-to-fix
Durchschnittliche Zeit zur Behebung von Fehlern in Legacy-Komponenten; Indikator für Wartbarkeit.
- Technische-Schulden-Index
Relative Bewertung von ungelösten Problemen, Codequalität und notwendigem Aufwand zur Modernisierung.
Beispiele & Implementierungen
Monolithische Bestandsanwendung
Alte monolithische Webanwendung mit engen Abhängigkeiten, geringer Testabdeckung und wachsenden Betriebsproblemen.
Legacy-API ohne Dokumentation
Serviceschnittstelle, die intern stark genutzt wird, aber schlecht dokumentiert ist und selten verändert wurde.
Alte Batch-Jobs auf veralteter Plattform
Batch-Prozesse laufen auf veralteter Infrastruktur; Migration erfordert Koordination mit Betriebsteam und Tests.
Implementierungsschritte
Analyse und Inventarisierung der Legacy-Komponenten.
Bewertung nach Risiko und Geschäftswert.
Aufsetzen von Tests und CI für kritische Pfade.
Schrittweises Refactoring oder Strangler-Pattern anwenden.
Kontinuierliches Monitoring und Metriken zur Erfolgsmessung.
⚠️ Technische Schulden & Engpässe
Tech Debt
- Harte Kopplungen zwischen Modulen
- Unzureichende Testabdeckung kritischer Pfade
- Veraltete Build- und Deployment-Prozesse
Bekannte Engpässe
Beispiele für Missbrauch
- Kompletter Rewrite wegen kosmetischer Probleme.
- Sofortige Abschaltung kritischer Legacy-Funktionen ohne Fallback.
- Budgetkürzung für Tests während großer Modernisierungsprojekte.
Typische Fallen
- Unterschätzen der Abhängigkeiten zu Drittbibliotheken.
- Fehlende Migrationspfade für Daten und Schemaänderungen.
- Verlust von historischem Wissen beim Personalwechsel.
Erforderliche Fähigkeiten
Drivers (Architectural Drivers)
Constraints
- • Budget- und Zeitbegrenzungen
- • Abhängigkeiten zu Drittanbietern oder alten Plattformen
- • Produktionsexterne Betriebsbedingungen und SLAs