Legacy-Software mit Software Reengineering modernisieren
Anmerkung des Editors: Software-Modernisierung ist ein brennendes Thema für mehrere Unternehmen, die geschäftskritische Legacy-Software geerbt haben und heute mit sich daraus ergebenden Problemen konfrontiert werden. Als Softwarehaus mit langjähriger Erfahrung in der Softwareentwicklung und -Modernisierung helfen wir Ihnen gerne, Ihre historisch gewachsene Software zukunftsfähig zu machen.
Der Begriff Legacy-Software wurde aus dem Englischen entlehnt, aber findet zunehmend eine Verbreitung im deutschsprachigen Raum. Es geht um die Software, die sich in einem Unternehmen seit langer Zeit im Einsatz befindet. Aber mit „geerbten“ Software stehen Unternehmen vor mehreren Herausforderungen, darunter auch:
- Im Vergleich zu „jüngsten“ Systemen erfordern Legacy-Software erhöhten Aufwand für Wartung und Betrieb;
- Legacy-Software gehen Hand in Hand mit Sicherheitsproblemen, weil beispielweise der Hersteller keinen technischen Support mehr bietet oder benötigte Sicherheitsupdates und -funktionen fehlen, was diese Software fehleranfälliger und den Angriffen gegenüber empfindlich macht.
- Legacy-Anwendungen bremsen die digitale Transformation in einem Unternehmen.
Die Herausforderungen werden oft als die wichtigsten Gründe bezeichnet, Legacy-Software einfach wegzuwerfen oder mindestens zu ersetzen. Aber die Neuimplementierungen werden sicherlich mit unerwartet hohem Aufwand und noch größeren Sicherheitsrisiken verbunden sein.
Es gibt eine andere Alternative mit dem vielversprechenden und beruhigenden Namen – Modernisierung. In unserem Blogbeitrag möchten wir eine der Methoden zur Modernisierung – Software Reengineering – näherbringen und erklären, welche Aktivitäten das Reengineering umfasst, welche Risiken dabei zu beachten sind und wie diese gemindert und vermieden werden können.
Software Reengineering: Begriffserklärung
Das Software Reengineering ermöglicht es, unter dem Einsatz einer Reihe von Methoden den Code von Legacy-Software zu untersuchen und zu modifizieren, um diese Software in der Zukunft erneut implementieren, wiederverwenden und ändern zu können. Es gilt aber zu beachten, dass es beim Software Reengineering um keine wesentlichen Änderungen an der Architektur (z. B. eine App in Microservices aufzuteilen) und keine Einführung neuer Funktionen geht. Das Reengineering hilft dabei, die Transparenz hinsichtlich der Legacy-Software wiederherzustellen und dadurch die Basis für größere Änderungen und Verbesserungen an Legacy-Software zu bilden.
Das Software Reengineering umfasst mehrere Aktivitäten. Um herauszufinden, wie weit die Interventionen in Ihrem Projekt gehen sollten, betrachten wir näher 4 Aktivitäten, die den gesamten Prozess vom Reengineering voll abdecken: Reverse Engineering des vorhandenen Systems, Code-Umstrukturierung, Code-Modularisierung und Codeabdeckung.
Reverse Engineering
Das Reverse Engineering als die erste Phase beim Software Reengineering umfasst die Erforschung von bestehenden Systemen, um aktuelle Anforderungen (einschließlich aller Abhängigkeiten und Zusammenhänge) zu identifizieren, nicht mehr verfügbare Informationen über Schnittstellen zwischen Softwarekomponenten, Datendesign und -struktur zurückzugewinnen und zu analysieren. Um verlorene Informationen zu extrahieren, stehen die folgenden Quellen zur Verfügung: die vorhandene Dokumentation, Quellcode, Anwendungs- und Testfälle, Interviews mit Entwicklern und anderen Projektbeteiligten usw.
Wozu kann das Reverse Engineering zum Einsatz kommen:
- Um festzustellen, ob weitere Änderungen möglich sind oder ob das System ersetzt werden muss.
- Um zu identifizieren, ob die Wiederherstellung einer Legacy-Software zu kompliziert oder sogar unmöglich ist, und basierend auf den Ergebnissen das Reengineering oder den Ersatz zu planen.
- Um die Auswirkungen zukünftiger Verbesserungen und Änderungen in der Software vorherzusagen.
- Um die Verstehspanne für einen neuen Supportanbieter zu verkürzen.
- Um potenziell wiederverwendbare Komponenten für zukünftige Integrationen zu identifizieren.
Code-Restrukturierung
Legacy-Code kann entweder von Anfang an oder nach mehreren vorgenommenen Änderungen schlecht strukturiert und unverständlich sein. Mittels Restrukturierung wird die Qualität der Quellcode verbessert. Erst wird der Code durch die Beseitigung von ungenutzten Codeteilen „gesäubert“ und dann durch die Verbesserung der Codestruktur, die Überprüfung komplexer oder speicherintensiver Algorithmen und mehr optimiert.
Wozu kann die Code-Restrukturierung zum Einsatz kommen:
- Um die Lesbarkeit und die Verständlichkeit des Codes zu verbessern.
- Um die Wartbarkeit zu erhöhen, die Fehlerrate einer Software zu reduzieren und Wartungskosten zu senken;
- Um das Testen zu erleichtern.
- Um weitere Änderungen (z. B. die Architektur umzugestalten) und Erweiterungen (z. B. die Integration neuer Funktionen) zu ermöglichen.
- Um Software für die Migration vorzubereiten.
Code-Modularisierung
Die Code-Modularisierung stellt eine wichtige Technik beim Software Reengineering dar, die ermöglicht, verwandte Codeteile in einem Modul zusammenzufassen und dann wiederzuverwenden. Durch die Beseitigung von Redundanzen zwischen verschiedenen Modulen wird eine bessere Software-Performance erreicht.
Wozu kann die Code-Modularisierung zum Einsatz kommen:
- Um das Ändern sowie das Wiederverwenden von Anwendungskomponenten in anderen Systemen zu ermöglichen.
- Um die Software-Performance zu erhöhen.
Codeabdeckung
Entwickler verwenden Schnittstellen, um die Legacy-Software (oder einen Teil davon) mit anderen Systemen zu verknüpfen, ihre Verfügbarkeit über das Netzwerk und die Mobilfähigkeit sicherzustellen. Um beispielweise einen Zugriff auf die Funktionalität der Software in einem externen System zu ermöglichen, ergänzen Programmierer eine Legacy-Software oder ihren Teil mit APIs wie REST oder SOAP. Durch das Hinzufügen einer geeigneten API sind auch Zugriffe über mobile Geräte möglich. Die zunehmende Notwendigkeit, die Reichweite der Altsysteme zu erhöhen, verwandelt die API-Programmierung in einen der beliebtesten Geschäftstreiber beim Software Reengineering.
Wozu kann die Programmierung zum Einsatz kommen:
- Um einen Zugriff über mobile Geräte und über die Internetverbindung mit einem Web Browser zu ermöglichen.
- Um die Wiederverwendung der Anwendungsfunktionalität in externen Systemen zu ermöglichen.
Software Reengineering: Risiken und Herausforderungen
Reengineering-Projekte sind mit bestimmten Risiken und Herausforderungen verbunden, die berücksichtigt werden müssen, um ein Projekt erfolgreich umzusetzen.
- Hoher Zeitaufwand. Unvollständige oder nicht vorhandene Dokumentation; komplexe Architektur, die den modernen Anforderungen nicht entspricht; zahlreiche maßgeschneiderte Schnittstellen zu anderen Systemen, die oft zu komplex sind; technische Schulden wie ein duplizierter Code sind nur einige Gründe dafür, warum Reengineering-Projekte mit einem hohen zeitlichen Aufwand assoziiert werden. Häufig ist es einfach unklar, in welchem Zustand sich die Legacy-Software befindet. Und das erfordert viel Zeit, um den Ist-Zustand veralteter Software zu untersuchen, zu analysieren und die weitere Vorgehensweise festzulegen.
- Kosten. Man muss verstehen, dass es um über Jahre gewachsene Software und IT-Landschaft geht. Eines der Argumente gegen die Modernisierung ist die Meinung, dass es günstiger ist, alte Software mit hohen Wartungskosten laufen zu lassen, als ein Reengineering-Projekt zu starten. Häufig wird es auch prognostiziert, dass der Eingriff in die laufenden Geschäftsprozesse eines Unternehmens teure Ausfallzeiten und Störungen verursachen kann.
- Mangel an Ressourcen. Es ist einer der verbreitetsten Herausforderungen beim Starten von neuen Projekten. Erstens, es gibt einfach keine freien Ressourcen. Die vorhandenen sind durch unterschiedliche Aktivitäten ausgelastet (auch durch den Betrieb veralteter Software). Zweitens, es gibt wenige oder gar keine Fachkräfte mit dem entsprechenden Know-how.
Probleme und mögliche Lösungen
Aufgezählte Herausforderungen und Risiken liegen zugrunde, warum mehrere Unternehmen immer noch zögern, ein Reengineering-Projekt zu starten. Aber es gilt auch daran zu denken, welche Probleme Legacy-Software mit sich bringen und warum sie überhaupt keine Zukunft haben.
Um eine Entscheidung zu treffen, ob Ihre Legacy-Software durch Reengineering modernisiert werden muss, empfehlen wir den Wert und die Rolle veralteter Software sowie die Komplexität des potentiellen Modernisierungsprojektes aus verschiedenen Sichten zu analysieren und zu bewerten. Falls Systeme geschäftskritisch sind und Bedingungen für das Software Reengineering erfüllen können, ist es empfehlenswert, die Legacy-Software zu modernisieren.
Um Risiken zu minimieren und das Reengineering-Projekt erfolgreich umzusetzen, ist es empfehlenswert, das Projekt schrittweise durchzuführen und agile Methoden und Prinzipien einzusetzen; alle notwendigen Maßnahmen und Tätigkeiten (einschließlich Tests) maximal zu automatisieren und zu dokumentieren; Mitarbeiter aus anderen Nicht-IT-Abteilungen einzubeziehen, die bei der Extrahierung von notwendigen Informationen unterstützen können.
Zögern Sie immer noch? Es ist höchste Zeit, sich beraten zu lassen
Obwohl Reengineering mit bestimmten Risiken und Herausforderungen verbunden ist, gilt es als eine intelligente Option Ihre Software zukunftsfähig zu machen. Unser Team mit langjähriger Erfahrung in der Softwareentwicklung ist bereit, Sie bei der Planung und Umsetzung von Reengineering-Projekten zu unterstützen, um Ihre Investitionen aus der Vergangenheit zu schützen.