Legacy-Modernisierung — Ein vollständiger Leitfaden

Legacy-Modernisierung

In this collection you'll learn

  • wie man eine Modernisierungsstrategie für Legacy-Apps aufbaut
  • wie wählt man zwischen Urknall und Trickle-Migration
  • wie man mit technischen Schulden umgeht
  • wie man eine technische Insolvenz vermeidet
  • welche Tools und Strategien zur Datenmigration Sie wählen sollten

ARTICLES IN THIS COLLECTION

Legacy-Modernisierung

Allgemeine Herausforderungen bei der Anwendungsmodernisierung

Werfen Sie einen Blick auf diese 8 wichtigsten Herausforderungen bei der Modernisierung eines Altsystems:

  • Komplexität und Abhängigkeiten: Umgang mit komplizierten Architekturen und Interdependenzen in Legacy-Anwendungen.
  • Qualifikationslücke: Suche nach Entwicklern, die sowohl mit älteren als auch mit modernen Technologien vertraut sind.
  • Ältere Hardware und Infrastruktur: Herausforderungen, die sich aus Anwendungen ergeben, die an bestimmte, veraltete Hardware oder Infrastruktur gebunden sind.
  • Risiko einer Betriebsunterbrechung: Mögliche Betriebsstörungen während des Modernisierungsprozesses.
  • Kosten- und Budgetbeschränkungen: Verwaltung erheblicher Kosten innerhalb der Budgetgrenzen.
  • Zeitliche Einschränkungen: Balancieren Sie den Modernisierungsbedarf mit den Fristen für neue Funktionen oder Updates.
  • Sicherheitsbedenken: Behebung von Sicherheitslücken, die während der Modernisierung entstehen könnten.
  • Kompatibilitätsprobleme: Sicherstellen, dass sich die modernisierte Anwendung nahtlos in bestehende Systeme und Anwendungen von Drittanbietern integrieren lässt.

Wie geht man mit technischen Schulden um

Best practices to deal with technical debt

Um technische Schulden effektiv zu verwalten, ist es wichtig:

  • Schulden identifizieren und messen: Erkennen Sie Anzeichen einer technischen Verschuldung und schätzen Sie die Zeit ein, die für deren Abbau erforderlich ist.
  • Priorisieren und planen Sie: Legen Sie Kodierungsstandards fest und planen Sie Zeiträume für die Rückzahlung von Schulden ein.
  • Refaktorieren und testen: Überarbeiten Sie den Code regelmäßig und führen Sie automatisierte Tests durch.
  • Bewerben Sie Code-Reviews: Implementieren Sie eine Kultur gründlicher Code-Reviews und kontinuierlicher Tests.
  • Managen Sie mit agilen Ansätzen: Nutzen Sie agile Methoden, um technische Schulden proaktiv zu behandeln.

So priorisieren Sie die Rückzahlung von technischen Schulden

Verwenden Sie diesen Prozess, um technische Schulden zu priorisieren:

  • Identifizieren und verstehen Sie die Schulden: Erkennen Sie Schuldenbereiche und ihre Auswirkungen.
  • Beurteilen Sie das Risiko: Bewerten Sie das mit jeder Schuld verbundene Risiko.
  • Berücksichtigen Sie die Auswirkungen auf das Geschäft: Analysieren Sie, wie sich die Schulden auf den Geschäftsbetrieb auswirken.
  • Priorisieren Sie auf der Grundlage einer Kosten-Nutzen-Analyse: Wägen Sie die Kosten der Rückzahlung gegen die Leistungen ab.
  • Erstellen Sie einen Tilgungsplan: Entwickeln Sie einen strategischen Plan zur Bewältigung der Schulden.

Technische Schuldenkennzahlen

Es gibt verschiedene Kennzahlen, die es Entwicklungsteams ermöglichen, technische Schulden effektiv zu verfolgen. Zum Beispiel:

Code Churn:

Code-Churn bezieht sich darauf, wie oft und wie stark sich die Codebasis über einen bestimmten Zeitraum ändert. Sie wird gemessen, indem die Hinzufügungen, Löschungen und Änderungen von Codezeilen nachverfolgt werden.

Abwanderungsdose mit hohem Code auf Instabilität oder ständige Überarbeitung des Codes hinweisen, was zu technischen Schulden führen kann. Die regelmäßige Messung der Codefluktuation hilft dabei, die Stabilität und den Reifegrad der Software zu verstehen und Entscheidungen darüber zu treffen, worauf die Entwicklungsbemühungen konzentriert werden sollten, um unnötige Nacharbeiten und Ineffizienzen zu vermeiden.

Zyklomatische Komplexität:

Die zyklomatische Komplexität ist eine Metrik, mit der die Komplexität eines Programms bestimmt wird, indem die Anzahl der linear unabhängigen Pfade durch den Quellcode des Programms gemessen wird.

EIN Ein höherer Wert steht für komplexeren Code, der schwieriger zu verstehen, zu testen und zu verwalten sein kann, wodurch die technische Verschuldung steigt. Eine regelmäßige Bewertung der zyklomatischen Komplexität hilft dabei, übermäßig komplexe Codeabschnitte zu identifizieren, die möglicherweise überarbeitet werden müssen, um den technischen Aufwand zu vereinfachen und den damit verbundenen technischen Aufwand zu verringern.

Technische Schuldenquote:

Bei der technischen Schuldenquote werden die Kosten für die Behebung technischer Schulden (z. B. Refactoring von Code, Behebung von Fehlern) mit den Kosten für die Entwicklung des Codes verglichen. Es bietet eine quantitatives Maß für die Höhe der technischen Schulden eines Projekts im Verhältnis zu seiner Größe. Dieses Verhältnis hilft beim Verständnis des Ausmaßes der technischen Verschuldung und kann als Grundlage für die Prioritätensetzung und Mittelzuweisung für Maßnahmen zum Schuldenabbau dienen.

Codeabdeckung:

Die Codeabdeckung misst den Prozentsatz der Codebasis, der durch automatisierte Tests (wie Komponententests, Integrationstests) getestet wird.

Eine hohe Codeabdeckung weist im Allgemeinen auf eine geringere Wahrscheinlichkeit unentdeckter Bugs und Probleme im Code hin, was zu technischen Schulden führen kann. Die Messung der Codeabdeckung hilft dabei, Bereiche des Codes zu identifizieren, die nicht ausreichend getestet wurden und daher anfälliger für Fehler sind, sodass Teams diese Bereiche gezielt untersuchen und die Tests und die Qualitätssicherung verbessern können.

Probleme mit der statischen Codeanalyse:

Statische Codeanalysetools scannen den Code nach Problemen wie Verstößen gegen Codierungsstandards, potenziellen Fehlern, Sicherheitslücken und Codegerüchen. Wenn Sie die Anzahl und den Schweregrad der von diesen Tools identifizierten Probleme verfolgen, erhalten Sie Einblicke in die Qualität der Codebasis.

EIN Eine hohe Anzahl kritischer Probleme kann auf erhebliche technische Schulden hinweisen, die sofortige Aufmerksamkeit erfordern. Die kontinuierliche Überwachung von Problemen bei der statischen Codeanalyse hilft dabei, die Codequalität aufrechtzuerhalten und die Entstehung technischer Schulden im Laufe der Zeit zu reduzieren.

Denken Sie daran, die für Ihren Fall relevanten Kennzahlen zu verfolgen, experimentieren Sie und vermeiden Sie, nur eine Metrik zu verfolgen, um falsche Ergebnisse zu vermeiden.

Tools zur Messung der technischen Verschuldung

Sie können die technische Verschuldung mit einigen der folgenden Tools messen:

  • Über Arqube: Eine Open-Source-Plattform für die kontinuierliche Überprüfung der Codequalität.
  • Jira Software: Ein Tool zur Problem- und Projektverfolgung, das angepasst werden kann, um technische Schulden zu verfolgen.
  • Squore: Ein Software-Analysetool, das Einblicke und Kennzahlen für technische Schulden bietet.
  • nDepend: Ein statisches Analysetool für .NET-Anwendungen, das eine technische Schuldenschätzung beinhaltet.
  • Besetzungssoftware: Eine Application-Intelligence-Plattform, die umfassende Analysen für technische Schulden bietet.

Technische Schuldenquote: Warum und wie berechnet man

Technical debt ratio in a nutshell

Die technische Schuldenquote ist eine Kennzahl, die vergleicht die Kosten für die Behebung von Codeproblemen mit den Kosten für die Entwicklung des Codes. Dies ist eine wichtige Maßnahme, da sie die Höhe der technischen Schulden eines Projekts quantifiziert und so ein besseres Verständnis der Projektqualität ermöglicht.

Wenn Teams das Verhältnis kennen, können sie fundierte Entscheidungen darüber, ob technische Schulden sofort behoben oder verschoben werden sollen, basierend auf den potenziellen Auswirkungen auf die zukünftigen Entwicklungs- und Wartungskosten des Projekts.

Wie berechnet man?

Berechnen Sie die Kosten für die Entwicklung des vorhandenen Codes (c_DEV):

Dies kann geschätzt werden, indem Sie die Gesamtzahl der Codezeilen (LOC) in Ihrem Projekt mit den durchschnittlichen Kosten pro Codezeile multiplizieren. Die Kosten pro Zeile können je nach Faktoren wie der verwendeten Programmiersprache, der Komplexität des Codes und dem geografischen Standort der Entwickler variieren.

Schätzen Sie die Kosten für die Behebung der technischen Schulden (c_Debt):

Dazu gehört die Identifizierung von Problemen im Code, die zu technischen Problemen beitragen, wie Bugs, Codegerüche, Duplikate und Verstöße gegen Codierungsstandards. Tools wie SonarQube, JIRA oder andere statische Code-Analysetools können dabei helfen, diese Probleme zu identifizieren. Schätzen Sie nach der Identifizierung die Zeit ab, die zur Behebung dieser Probleme erforderlich ist, und multiplizieren Sie diese Zeit dann mit dem durchschnittlichen Stundensatz Ihres Entwicklungsteams, um die Kosten zu ermitteln.

Berechnen Sie die technische Schuldenquote:

Technischer Schuldenstand = C Dev/C-Verschuldung × 100

Dieses Verhältnis wird als Prozentsatz ausgedrückt. Ein höherer Prozentsatz deutet auf eine höhere technische Verschuldung im Verhältnis zu den gesamten Entwicklungskosten hin.

Beispiele für technische Schulden und wie man damit umgeht

Schauen Sie sich diese 5 Beispiele für technische Schulden an und lernen Sie, wie Sie mit jedem von ihnen umgehen können:

Veraltete Bibliotheken

Verwendung älterer Versionen von Bibliotheken, die möglicherweise nicht unterstützt werden oder Sicherheitslücken aufweisen.

Wie geht man damit um: Aktualisieren Sie Bibliotheken regelmäßig auf neuere Versionen, um den Support und die Sicherheit zu verbessern.

Fehlende Dokumentation

Fehlende oder veraltete Dokumentation, die das Verstehen und Ändern von Code erschwert.

Wie geht man damit um: Erstellen und pflegen Sie eine umfassende, aktuelle Dokumentation, um den Code besser zu verstehen und Änderungen zu vereinfachen.

Codeduplizierung

Wiederholte Codeblöcke, die den Wartungsaufwand und das Fehlerrisiko erhöhen.

Wie geht man damit um: Refaktorieren Sie den Code, um Duplikate zu vermeiden, die Wartbarkeit zu verbessern und das Fehlerrisiko zu reduzieren.

Fehlende Tests

Unzureichende automatisierte Tests, die zu potenziellen unentdeckten Problemen im Code führen.

Wie geht man damit um: Implementieren Sie robuste automatisierte Tests, um Probleme frühzeitig zu erkennen und die Zuverlässigkeit des Codes sicherzustellen.

Komplexer Code

Unnötig komplexer oder schlecht strukturierter Code, der schwer zu pflegen und zu verstehen ist.

Wie geht man damit um: Vereinfachen und restrukturieren Sie den Code für eine einfachere Wartung und ein einfacheres Verständnis.

Urknallmigration im Vergleich zu inkrementellem Ansatz (Trickle-Migration)

Die Urknallmigration beinhaltet Übertragung aller Komponenten eines Systems in eine neue Umgebung auf einmal, in der Regel in einer kurzen, intensiven Zeit ausgeführt. Es eignet sich für kleinere oder weniger komplexe Systeme, bei denen Ausfallzeiten überschaubar sind.

Trickle Migration beinhaltet dagegen schrittweise Verschiebung von Teilen eines Systems im Laufe der Zeit, wodurch Störungen minimiert werden erfordert jedoch eine komplexere Koordination. Es wird für größere, komplexe Systeme bevorzugt, bei denen die Aufrechterhaltung des Betriebs während des Übergangs von entscheidender Bedeutung ist.

Big bang approach vs other migration strategies

Blau/grüne Bereitstellung für die Modernisierung älterer Systeme

Blue/Green Deployment ist eine Strategie für Aktualisierung von Anwendungen mit minimalen Ausfallzeiten und Risiken.

Es funktioniert unter Beibehaltung von zwei identischen Produktionsumgebungen: „Blau“ (aktiv) und „Grün“ (inaktiv). Neue Versionen werden in der grünen Umgebung bereitgestellt, getestet und nach der Überprüfung wird der Datenverkehr von Blau auf Grün umgestellt.

Es ist besonders nützlich in Umgebungen, in denen eine kontinuierliche Verfügbarkeit von entscheidender Bedeutung ist, da es ein sofortiges Rollback ermöglicht, falls Probleme mit der neuen Version auftreten.

Strategie zur Datenmigration — schrittweiser Prozess

  • Umfassende Datenauswertung: Analysieren Sie die Daten im vorhandenen System sorgfältig und konzentrieren Sie sich dabei auf Qualität, Größe, Abhängigkeiten und Datenformate.
  • Klare Migrationsziele: Legen Sie klar definierte, quantifizierbare Ziele für die Migration fest, die den allgemeinen Geschäftszielen entsprechen.
  • Detaillierte Projektplanung: Erstellen Sie einen umfassenden Plan, der den Umfang, die Dauer, die Ressourcen, das Budget und die wichtigsten Meilensteine des Projekts abdeckt.
  • Auswahl der richtigen Tools und Technologien: Entscheiden Sie sich für Migrationstools und -technologien, die sowohl für alte als auch für neue Systeme geeignet sind.
  • Datenmapping und Integritätsprüfungen: Planen Sie den Übergang von Daten vom alten zum neuen System und stellen Sie dabei die Datenintegrität sicher.
  • Risikomanagementstrategie: Identifizieren Sie mögliche Risiken und Herausforderungen und bereiten Sie sich darauf vor.
  • Testen und Validieren: Führen Sie in allen Phasen der Migration umfangreiche Tests durch, um die Richtigkeit der Daten und die Systemleistung zu überprüfen.
  • Überprüfung und Unterstützung nach der Migration: Führen Sie nach der Migration eine eingehende Überprüfung durch und bieten Sie den Benutzern kontinuierlichen Support und Schulungen.
Ingredients of a successful app modernization project
Bericht: Stand der Softwaremodernisierung 2024

Der Strangler Pattern-Ansatz zur Modernisierung von Altsystemen

Das Strangler-Muster ist ein Strategie zur schrittweisen Modernisierung von Altsystemen. Es beinhaltet den Bau eines neuen Systems an den Rändern des bestehenden Systems und den schrittweisen Austausch alter Komponenten.

Diese Methode ist ideal für große Anlagen, bei denen eine komplette Überholung zu riskant oder störend ist. Sie ermöglicht stetiger Fortschritt, kontinuierliche Integration neuer Funktionen und Tests ohne vollständige Systemabschaltung. Dieser Ansatz ist besonders vorteilhaft, wenn es um komplexe, monolithische Anwendungen geht, die modernisiert werden müssen, ohne den laufenden Geschäftsbetrieb zu beeinträchtigen.

Von Monolith zu Microservices mit Strangler Pattern

10 Phasen der Migration von Monolith zu Microservices

1. Identifizieren und isolieren Sie Komponenten

2. Baue die Strangler-Fassade

3. Entwerfen und entwickeln Sie Microservices

4. Entwickeln Sie eine Strategie für Datenmigration und -management

5. Funktionen schrittweise ersetzen

6. Testen Sie jeden Microservice

7. Richten Sie eine kontinuierliche Bereitstellung und Integration ein

8. Den Monolithen schrittweise außer Betrieb nehmen

9. Überwachen und optimieren Sie die Leistung

10. Aktualisieren Sie die Dokumentation und teilen Sie Wissen

Die besten Tools zur Datenmigration

  1. Informatica PowerCenter
  2. Talend-Datenintegration
  3. Oracle-Datenintegrator (ODI)
  4. IBM InfoSphere DataStage
  5. SAP-Datendienste
  6. Microsoft SQL Server-Integrationsdienste (SSIS)
  7. AWS-Datenmigrationsservice (DMS)
  8. Google Cloud-Datenfluss
  9. Azure-Datenfabrik
  10. Fivetran

So vermeiden Sie eine technische Insolvenz

Warning signals of technical bankruptcy

Technischer Konkurs tritt auf, wenn akkumulierte technische Schulden die Funktionalität eines Systems oder den Betrieb eines Unternehmens erheblich beeinträchtigen.

Um eine technische Insolvenz zu vermeiden:

  • Sorgen Sie für kontinuierliche Codequalität und Standards.
  • Refaktorieren und aktualisieren Sie die Codebasis regelmäßig.
  • Priorisieren Sie den technischen Schuldenabbau bei der Projektplanung.
  • Sorgen Sie für eine angemessene Dokumentation und einen Wissensaustausch.
  • Gehen Sie proaktiv vor, um Probleme frühzeitig zu lösen.

So erstellen Sie eine Roadmap zur Modernisierung älterer Apps

How to create a legacy app modernization roadmap - 8 steps