Problemfall
Wer kennt es nicht, eine über viele Jahre gewachsene Eigenentwicklung soll modernisiert und zukunftssicher gemacht werden, doch wie stellen wir sicher, dass nach der Modernisierung die Funktionalität nicht gelitten hat und es im schlechtesten Falle zu Fehlern in etablierten Prozessen kommt.
Für die Modernisierung kann es verschiedene Gründe geben:
- Der bisherige Einsatz von veralteten Entwicklungsumgebungen und Frameworks, die nicht aktiv weiterentwickelt werden
- Der Berg der technischen Schuld ist so sehr angewachsen, dass Anpassungen und Erweiterungen nur im alten Tech Stack durchgeführt werden können
- Die Konzentration von Prozesswissen und Softwarelogik auf wenige Entwickler, im schlimmsten Falle auch Einzelpersonen
Lösungsansätze
Die Erfahrung zeigt uns, dass verschieden Vermeidungsstrategien und Testszenarien hier zum Erfolg führen und eine entspannte und jederzeit beherrschbare Migration garantieren.
Vermeidung einer Big Bang Umstellung
Einer der wichtigsten Punkte ist es, dass es unter allen Umständen vermieden werden sollte, eine Big Bang Umstellung durchzuführen, denn damit können Sie dann auch gleich die nächsten Abende und Wochenenden aus Ihrer privaten Planung herausnehmen. Die Identifizierung von Modulen und Komponenten ist hier der entscheidende Faktor, um eine überschaubare Anzahl an Teilmigrationen zu definieren.
Parallelbetrieb
Eine bewährte Methode zur Sicherstellung der Funktionalität während der Modernisierung ist der Parallelbetrieb. Dabei wird die alte und die neue Version der Software gleichzeitig betrieben. Durch diesen Ansatz können beide Systeme parallel genutzt und verglichen werden, um sicherzustellen, dass alle Funktionen wie erwartet arbeiten. Vorteile des Parallelbetriebs sind:
- Direkter Vergleich der Ergebnisse und Performance beider Systeme
- Möglichkeit zur schrittweisen Umstellung von Benutzern oder Modulen
- Geringeres Risiko, da bei Problemen schnell auf die alte Version zurückgegriffen werden kann
Automatisierte Testverfahren
Automatisierte Tests spielen eine zentrale Rolle bei der Sicherstellung der Funktionalität während Modernisierungsprojekten. Durch den Einsatz von kontinuierlichen Testmethodiken kann die Integrität des Systems gewährleistet werden und somit auch eine reibungslose Migration ermöglichen. Folgende Aspekte werden durch automatisierte Tests berücksichtigt:
- Schnelle Identifikation und Behebung von Fehlern
- Sicherstellung, dass neue Änderungen keine bestehenden Funktionen beeinträchtigen
- Möglichkeit, umfangreiche Testfälle regelmäßig und konsistent auszuführen
- Reduzierung des manuellen Testaufwands und dadurch Zeitersparnis
Aus unserer Erfahrung haben sich hier primär die Integrationstests als unabdingbar herausgestellt. Dabei werden unter anderem echte Geschäftsvorfälle getestet und mit bisherigen Ergebnissen aus dem Altsystem verglichen. Durch den Einsatz von In-Memory-Datenbanken kann eine gute Performance bei einer großen Anzahl an Testfällen ermöglicht werden, dies trägt damit auch zu einer sehr hohen Codeabdeckung bei.
Fallbeispiel
In einem aktuellen Fall ging es um die komplexe Berechnung und Erstellung von Maschinenprogrammen für die Textilindustrie. Durch die bereits beschriebene Strategie konnten wir eine erfolgreiche Modernisierung durchführen. Im ersten Schritt wurde die bisherige Codebasis in Module aufgeteilt, dies konnte fachlich durch die Unterteilung in verschieden Produktgruppen erfolgen. Somit war sichergestellt, dass eine Migration schrittweise je Produktgruppe erfolgen konnte.
Die Generierung einer Vielzahl von Maschinenprogrammen durch das Altsystem lieferte uns eine große Menge an Testdaten, die wir nutzen konnten, um unsere Integrationstests zu füttern, eine Codeabdeckung der entscheidenden Module > 95% wurde dabei angestrebt.
Nach dem Go-Live einzelner Produktgruppen wurde durch einen Parallelbetrieb sichergestellt, dass neue Maschinenprogramme, durch den Vergleich mit dem Altsystem, auch in der modernisierten Software korrekt berechnet werden. Tatsächlich ist nach dem Go-Live bisher noch kein Fehler aufgetreten, der zu einer Anpassung des modernisierten Codes geführt hat. Insofern können wir hier sicherlich von einer gelungenen Modernisierung sprechen und einer Weiterentwicklung mit dem aktuellen Tech Stack steht somit nichts im Wege.