
5 Probleme bei der Arbeit mit Legacy-Software. Wie geht man damit um?
In der dynamischen Technologiewelt sehen wir eine wachsende Herausforderung mit Legacy-Software, d.h. veraltete Systeme und Anwendungen. Die Gründe für die Aufrechterhaltung reichen von großen Infrastrukturinvestitionen bis hin zu Bedenken hinsichtlich Geschäftsunterbrechungen. In diesem Artikel skizzieren wir die Bedeutung von Legacy-Software, die damit verbundenen Herausforderungen und Strategien zur Verbesserung der Leistung, Sicherheit und Flexibilität von IT-Systemen.
Was ist Legacy-Software?
Legacy-Software bezieht sich auf veraltete Computersysteme oder Anwendungen, die trotz Einführung neuerer Technologien weiterhin verwendet werden. Solche Software kann auf älteren Programmiersprachen, Systemarchitekturen oder Technologien basieren, die schwer zu ersetzen oder zu aktualisieren sind.
Warum existiert Legacy-Software?
Organisationen halten häufig an Legacy-Software fest aufgrund bedeutender Infrastrukturinvestitionen, mangelnder Ressourcen (z.B. eines Teams, das für die Umsetzung von Änderungen zuständig ist) oder Bedenken hinsichtlich des Geschäftsrisikos und der Unterbrechung laufender Operationen.
Der Migrationsprozess von Legacy-Software kann darin bestehen, die Anwendung von Grund auf neu zu schreiben, sie auf eine andere Plattform zu verlagern oder schrittweise Upgrades und Verbesserungen am bestehenden IT-System vorzunehmen. In jeder dieser Optionen muss Arbeit geleistet werden, daher ist es üblich, dass Unternehmen beim aktuellen Legacy-System bleiben.
Warum an Legacy-IT-Software arbeiten?
Die Migration oder das Upgrade von Legacy-Software in einem Unternehmen ist eine wichtige Maßnahme. Moderne Technologien und Lösungen zahlen sich oft durch erhöhte Betriebseffizienz und geringere langfristige Kosten aus. Es lohnt sich Schritte zu unternehmen, um mögliche Probleme mit der Legacy-Technologie zu vermeiden und die Systemleistung, Sicherheit und Flexibilität zu verbessern.
Aus geschäftlicher Sicht kann Legacy-Software mehrere Schwierigkeiten erzeugen:
- Sie kann anfälliger für Sicherheitslücken sein, da ältere Systeme oft keine regelmäßigen Sicherheitsupdates erhalten,
- Sie kann schwer verständlich und wartbar sein, insbesondere für neue Entwickler, die mit veralteten Technologien nicht vertraut sind,
- Sie kann Herausforderungen für Organisationen darstellen, die sie in moderne Systeme integrieren oder durch neuere Software ersetzen möchten.
Welche Probleme begegnen Sie bei der Arbeit mit Legacy-Software?
Legacy-Software stellt jedoch die meisten Probleme für Entwickler dar, die an einem bestimmten System arbeiten. Schauen wir uns an, welche Herausforderungen das Team bei diesem Projekttyp erwarten.

1. Fehlende oder veraltete Dokumentation
Eine der Hauptherausforderungen bei Legacy-Software ist das Fehlen von Code-Dokumentation, was das Verständnis erschwert, wie sie funktioniert, und zu vielen Konsequenzen führt.
Vor allem müssen sich Programmierer, die für die Entwicklung und Wartung der Software verantwortlich sind, auf ihre eigene Codeanalyse verlassen, was zeitaufwändig und problematisch ist. Das Fehlen klarer Dokumentation verlängert die Reaktionszeiten auf Fehler und erschwert notwendige Änderungen oder Updates am System.
Darüber hinaus macht fehlende Dokumentation Entwickler abhängig von Personen, die in der Vergangenheit am Code gearbeitet haben. Wenn sie das Team verlassen, stehen ihr Wissen und ihre Fähigkeiten den anderen Mitgliedern nicht mehr zur Verfügung. Dies führt zu der Gefahr, dass die Organisation Schwierigkeiten haben könnte, die Legacy-Software zu warten und weiterzuentwickeln, wenn wichtige Spezialisten verloren gehen.
Unklare oder undokumentierte Codeabschnitte können eine Quelle für schwer zu lokalisierende und zu behebende Fehler sein. Dies wiederum beeinträchtigt die Stabilität und Zuverlässigkeit des Systems negativ.
2. Code ohne Testbarkeit
Die Unfähigkeit, Legacy-Software zu testen, ist eine weitere Risikofaktor für Entwickler, die neue Funktionalitäten einführen oder bestehende Probleme beheben wollen. Ältere Systeme wurden oft nicht mit einfacher Testbarkeit im Auge entwickelt, und die Code-Struktur und Architektur können es schwierig machen, automatisierte Tests zu implementieren.
Das Fehlen von automatisierten Tests für Legacy-Software hat viele negative Konsequenzen. Erstens kann es das Risiko erhöhen, Fehler und Regressionen bei der Modifikation des Codes einzuführen. Darüber hinaus erschwert es die Erkennung und Beseitigung von Fehlern in der Software. Jede Modifikation oder Fehlerbehebung im System muss manuell getestet werden, was zeitaufwändig ist und menschlichen Fehlern unterliegt. Dies erhöht die Kosten und schränkt die Möglichkeit ein, das System schnell zu ändern.
3. Versionskonflikte und Inkompatibilität mit neueren Systemen
Software verbindet sich oft mit anderen Systemen oder Anwendungen. Bei Legacy kann dies auf verschiedenen Ebenen schwierig sein.
- Abhängigkeiten von Bibliotheken und Modulen: Die Einführung einer neuen Softwareversion kann Updates der zugehörigen Bibliotheken und Module erforderlich machen. Wenn bestehende Anwendungen oder Systeme auf älteren Versionen dieser Bibliotheken basieren, kann es zu Inkompatibilitäten kommen, die zu Fehlern und Instabilität führen.
- Änderungen in Syntax und Funktionalität: Neue Softwareversionen führen oft Änderungen in Syntax und Funktionalität ein, die mit dem bestehenden Code nicht kompatibel sind. Dies kann eine Überarbeitung und Anpassung des bestehenden Codes erfordern, um korrekt mit der neuen Version zu arbeiten.
- Lack of Support für ältere Versionen: Software erhält oft aktive Unterstützung und Sicherheitsupdates, während ältere Versionen möglicherweise nicht mehr unterstützt werden. Das bedeutet, dass Organisationen, die veraltete Versionen verwenden, einem höheren Risiko von Sicherheitslücken und Cyberangriffen ausgesetzt werden.
4. Probleme gemäß der Broken-Windows-Theorie
Im Kontext der Herausforderungen mit Legacy-Software ist es sinnvoll, die Broken-Windows-Theorie in Erinnerung zu rufen. Diese aus der Kriminologie abgeleitete Problematik bezieht sich auf Konzepte des Software-Managements und der Projektentwicklung. Sie soll die Folgen der Ignorierung von Fehlern, Problemen und Mängeln in den frühen Phasen eines Projekts hervorheben.
Die Broken-Windows-Theorie zeigt, dass, wenn Fehler, Mängel oder Veralterung im bestehenden Code festgestellt und nicht umgehend behoben werden, die Gefahr besteht, dass nachfolgende Änderungen und neue Funktionalitäten ebenfalls zu Problemen führen (z.B. Qualitätsminderung des Codes verursachen).
Mit anderen Worten, wenn wir die “zerbrochenen Fenster” in unserem Code nicht reparieren, neigen wir dazu, dasselbe Muster in neuen Teilen des Systems fortzusetzen, und die Gesamtqualität des Codes verschlechtert sich.
Deshalb ist es wichtig, sich nicht nur auf das Hinzufügen neuer Funktionen und Lösungen zu konzentrieren, sondern auch auf die Behebung von Fehlern und die Verbesserung des bestehenden Codes. Die Arbeit mit Legacy-Code kann dazu beitragen, die Qualität, Verständlichkeit und Wartbarkeit des Systems zu verbessern.
5. Legacy-Software vs. erschwerte Projektschätzung
Wie bereits erwähnt, kann Legacy-Software oft schlecht dokumentiert und schwer zu verstehen sein. Sie kann veraltete Technologien, ungewöhnliche Lösungen oder eine inkonsistente Struktur enthalten. Dieser Zustand kann es Entwicklern deutlich erschweren, den Arbeitsumfang zu verstehen und die Zeit zu schätzen, die für die Fertigstellung des Projekts benötigt wird.
Oft wird dies durch das Fehlen angemessen automatisierter Einheits- oder Integrationstests verschärft, was die Erkennung und Behebung von Fehlern kompliziert. Als Ergebnis müssen Entwickler zusätzliche Zeit für Tests und Fehlerbehebung einplanen.
Bei Legacy-Software sind versteckte Probleme, wie unbekannte Abhängigkeiten oder falsch implementierte Funktionen, auch Risiken, die die Aufgabe verlängern können. Daher erfordert die Schätzung solcher Projekte eine gründlichere Analyse des Codes und der Anforderungen, was die Schwierigkeit und Dauer des Projekts erhöhen kann. Diese Faktoren zu berücksichtigen und ihnen mit Vorsicht zu begegnen, ist wichtig, um potenzielle Verzögerungen und Probleme zu vermeiden.
Wie mit Legacy-Software arbeiten?
Die Arbeit mit Legacy-Software kann herausfordernd sein, aber Sie können einige Schritte unternehmen, um effektiv in einer solchen Umgebung zu arbeiten.
Ein allgemeiner Ansatz für Legacy-Technologien
Unabhängig von der vorkommenden Technologie ist es sinnvoll, ein paar universelle Prinzipien bei der Arbeit mit Legacy-Software zu verkörpern.
- Wissen gewinnen: Das Verständnis des bestehenden Codes und dessen Funktionsweise ist entscheidend. Es ist eine gute Idee, die verfügbare Dokumentation, falls vorhanden, zu studieren und den Quellcode zu analysieren. Möglicherweise müssen Sie während der Arbeit Menschen konsultieren, die zuvor mit dem Code gearbeitet haben, um zusätzliche Informationen zu erhalten.
- Dokumentieren Sie Ihre Änderungen: Auf diese Weise können Sie es anderen Entwicklern erleichtern, die von Ihnen vorgenommenen Modifikationen zu verstehen. Es ist wichtig, Änderungen schrittweise vorzunehmen und sich auf die kritischsten Bereiche des Systems zu konzentrieren.
- Testen Sie die Software: Es ist entscheidend, die vorgenommenen Änderungen durch Erstellen einer Reihe von Einheits- und Integrationstests zu überprüfen.
- Führen Sie Code-Refactoring ein: Dies wird dazu beitragen, die Struktur und Sauberkeit zu verbessern.
- Verbessern Sie den Code in der Legacy-Software: Es macht Sinn, sich darauf zu konzentrieren, die kritischsten Bereiche zu verbessern, die am meisten Wert bringen, wenn sie geändert werden.
- Verwenden Sie Werkzeuge, die Ihre Arbeit automatisieren.
Prozessautomatisierung
Was Sie automatisch tun können, lohnt sich in dieser Weise zu implementieren. Es gibt verschiedene Werkzeuge, die wir implementieren können, um in der Zukunft viel Zeit und Ressourcen zu sparen. Hier sind einige Beispiele basierend auf PHP-Arbeit:
- Einheitentests: Das Erstellen von Einheitentests ermöglicht es Ihnen zu überprüfen, ob Ihre Änderungen den bestehenden Code nicht negativ beeinflussen. Die Automatisierung der Ausführung von Tests bietet eine schnelle und effiziente Möglichkeit zu überprüfen, dass die vorgenommenen Modifikationen keine Fehler erzeugen.

Testfenster in der PHPUnit-Anwendung
- Werkzeuge zur statischen Code-Analyse: Durch die Verwendung von Tools wie PHPStan oder Psalm können potenzielle Fehler, Inkonsistenzen oder ungewöhnliche Funktionen erkannt werden. Die automatische Code-Analyse hilft dabei, Bereiche für Verbesserungen zu identifizieren.
- Continuous Integration/Continuous Deployment (CI/CD) Systeme: Diese Tools ermöglichen die automatische Kompilierung, das Testen und Bereitstellen von Änderungen. Dies ermöglicht es, schnell zu überprüfen, dass die vorgenommenen Modifikationen keine Regressionen verursachen und Änderungen automatisch auf den Produktionsserver bereitzustellen.
- Linting-Tools: Der Einsatz von Lintern wie Stylelint, PHPLint oder PHP_CodeSniffer ermöglicht es, die Einhaltung der akzeptierten Kodierungsstandards automatisch zu überprüfen. Die automatische Syntax- und Code-Stilüberprüfung hilft, Konsistenz im Projekt zu wahren.

Beispiel für Fehler, die vom Stylelint-Tool gemeldet werden
- Werkzeuge, die Code-Refactoring automatisieren: PHP Rector, beispielsweise eine auf PHP-Parser basierende Bibliothek, die automatische Änderungen am bestehenden Code ermöglicht und die wiederholbare Aufgabe des Upgrades und der Code-Verbesserung eliminiert.
- Automatische Code-Formatierung: Der Einsatz von Tools wie PHP-CS-Fixer oder PHP_CodeSniffer mit Code-Formatierungs-Konfiguration hilft, bestehenden Code automatisch an bestimmte Regeln anzupassen. Dies erleichtert die Aufrechterhaltung von Konsistenz und Lesbarkeit des Codes.

Ansicht des PHP_CodeSniffer-Tools zur automatischen Code-Formatierung
- Automatische Migrationen: Im Fall von Datenbankänderungen können Sie automatisierte Migrationsverwaltungstools verwenden, wie z.B. Doctrine Migrations, um das Update des Datenbankschemas direkt aus dem PHP-Code zu unterstützen.
Automatisierung in PHP bei der Verbesserung der Legacy-Technologie kann den Prozess beschleunigen, die Effizienz erhöhen und das Risiko der Einführung von Fehlern reduzieren. Automatisierte Tests, statische Analyse, Linter, CI/CD-Systeme, automatische Code-Formatierung und Migrationen sind Werkzeuge und Techniken, die für diesen Zweck genutzt werden können.
Arbeiten mit Symfony
Im Symfony Framework ist es möglich, bestehenden Code innerhalb der Struktur zu kapseln und ihn nach und nach auf neue Komponenten zu portieren. Das bedeutet, dass Sie Symfony-Funktionalitäten und -Komponenten nutzen können und gleichzeitig den älteren Legacy-Code weiterhin betreiben können. Beispielsweise können Sie die Protokollierung in Symfony implementieren und dennoch den Rest der Anwendung den alten Code verwenden lassen.
Wie funktioniert das in der Praxis? Der Prozess beinhaltet die schrittweise Übertragung von Routen einer bestehenden Anwendung zu neuen Symfony-Komponenten. Wenn eine bestimmte URL nicht durch das Framework aufgelöst wird, verweist sie auf den älteren Code und läuft weiter. Dies ermöglicht einen kontrollierten Transfer von Funktionalität und eine schrittweise Anpassung der Anwendung an die neuen Symfony-Standards.
Dieser Ansatz ermöglicht es Ihnen, eine in Symfony geschriebene Anwendung zu modernisieren und dabei die Integrität und Funktionalität Ihres bestehenden Codes beizubehalten. So können Sie schrittweise neue Symfony-Komponenten und -Funktionen einführen und gleichzeitig die Vorteile und Werkzeuge dieses Frameworks genießen.
Dies ist eine wertvolle Lösung für Projekte mit Legacy-Software, die die Vorteile von Symfony nutzen möchten, aber die gesamte Anwendung nicht von Grund auf neu schreiben können oder wollen. Sie gibt Ihnen die Möglichkeit, sukzessive Änderungen und Upgrades vorzunehmen und gleichzeitig das Risiko von Störungen der bestehenden Anwendung zu minimieren.
Arbeiten mit Drupal
Wenn Sie es mit Legacy-Software zu tun haben, während Sie mit Drupal arbeiten, ist eine empfohlene Möglichkeit, mit diesem Zustand umzugehen, auf eine höhere Version des Systems zu wechseln.
Migration von Drupal 7 zu höheren Versionen
Bei der Migration von Drupal 7 zu Drupal 9 können Sie verschiedene Lösungen verwenden, um den Prozess zu erleichtern. Hier sind Beispiele für beliebte migrationsbezogene Werkzeuge.
Drupal Upgrade Status
Dieses Tool hilft Ihnen, Ihre Bereitschaft für die Migration von Drupal 7 zu 9 zu bewerten. Es scannt Code, Module und Themen, um potenzielle Migrationsprobleme zu identifizieren. Außerdem liefert es Informationen über Updates zu Modulen und Themen, die während der Migration erforderlich sein können.
Drupal 9 Readiness Checker
Diese Lösung hilft, die Bereitschaft von Modulen und Themen für die Migration von Drupal 7 zu 9 zu bewerten. Sie überprüft, ob Module mit der neuen Version von Drupal kompatibel sind und bietet Informationen über potenzielle Probleme und Upgrades.
Drupal Rector
Dieses Tool zur automatischen Konvertierung von Code von Drupal 7 zu Drupal 8 oder 9 basiert auf dem Rector-Tool zur automatischen Refaktorierung von Code in PHP.
Drupal Rector analysiert den Drupal 7-Code und identifiziert Stellen, an denen automatische Transformationen angewendet werden können, um den Code mit Drupal 8 oder 9 kompatibel zu machen. Beispiele für Modifikationen umfassen das Umbenennen von Funktionen, Klassen und Methoden, das Aktualisieren der Konfigurationsverwaltung, die Verbesserung der Versionierung von APIs und vieles mehr.
Mit Drupal Rector können Sie den Migrationsprozess beschleunigen, da viele manuelle Änderungen, die normalerweise erforderlich wären, automatisiert werden können. Dieses Tool ist besonders nützlich, wenn Sie eine große Menge an Drupal 7-Code haben und diesen schnell an eine neuere Version anpassen möchten.
Beachten Sie jedoch, dass Drupal Rector nicht immer den gesamten Code automatisch konvertieren kann. Häufig gibt es Fälle von nicht-standardisierten Lösungen, die manuelle Anpassungen erfordern. Daher ist es wichtig, nach der Verwendung von Drupal Rector ordentliche Tests und Qualitätskontrollen durchzuführen.
Probleme mit Legacy-Software - Zusammenfassung
Im Artikel haben wir die Natur und die Herausforderungen von Legacy-Software beschrieben, d.h. veraltete Computersysteme oder Anwendungen, die trotz der Existenz neuerer Technologien weiterverwendet werden. Die Arbeit an einem solchen Projekt kann aus verschiedenen Gründen schwierig sein, wie fehlende Code-Dokumentation oder die Unfähigkeit, automatisierte Tests durchzuführen.
Mit dem richtigen Ansatz, Werkzeugen und Planung kann Legacy-Software jedoch effektiv verwaltet und aktualisiert werden, sodass Organisationen potenzielle Risiken vermeiden und sich an die sich ändernden Technologieanforderungen anpassen können. Wenn Sie Hilfe bei der Arbeit mit Legacy-Software in Ihrem Projekt benötigen, wie z.B. einer Webanwendung auf Drupal, Symfony oder PHP, können unsere Entwickler ihre Expertise anbieten.