KI-gestützte Software-Modernisierung

Legacy Systeme abzulösen war nie einfacher als jetzt!

Veraltete Systeme bremsen Innovation, verursachen hohe Kosten und binden wertvolle Ressourcen – und genau hier setzt KI an.

Im Blogbeitrag zeigen wir, wie KI die Modernisierung von Legacy-Software revolutioniert: von smarter Analyse über automatisierte Migration bis hin zu mehr Sicherheit und Qualität. Mit praxisnahen Beispielen und konkreten Erfolgsgeschichten machen wir deutlich, warum jetzt der perfekte Zeitpunkt ist, um Altlasten hinter sich zu lassen und Software zukunftssicher aufzustellen.

KI trifft Legacy-Software-Modernisierung

Die Industrie steht vor einem tiefgreifenden Transformationsprozess, der durch verschärften Wettbewerb, steigende Kosten, Fachkräftemangel und den wachsenden Bedarf an nachhaltigen Produkten ausgelöst wurde. Um diesen Herausforderungen zu begegnen, ist die Integration innovativer Technologien, wie z.B. KI um einen höheren Grad an Automatisierung zu erreichen, entscheidend. Doch veraltete und schwer erweiterbare Software-Systeme behindern die Innovationsfähigkeit. Eine gezielte Modernisierung dieser Systeme ist daher unerlässlich, um die Wettbewerbsfähigkeit zu sichern und die Effizienz zu steigern.

Durch KI ist die Modernisierung von Software jetzt deutlich effizienter und unkomplizierter geworden.

Dank moderner KI-Methoden ist es heute so einfach wie nie für Unternehmen bestehende Software-Systeme effizient zu analysieren und zu aktualisieren. Dies ermöglicht nicht nur eine Verbesserung der Usability und Anpassbarkeit, sondern auch eine nahtlose Integration mit anderen Systemen oder KI-basierten Lösungen. Durch die Modernisierung können Unternehmen erhebliche Einsparpotenziale realisieren und ihre Software zukunftssicher gestalten, um den steigenden Anforderungen gerecht zu werden und Innovationen zu fördern.

„As much as 70 percent of the software used by Fortune 500 companies was developed 20 or more years ago.“
(Nia Batten)

KI kann den Code von Altsystemen nicht nur analysieren, sondern auch dessen Logik verstehen und in eine moderne, wartbare Form übersetzen. KI-gestützte Tools können automatisch Abhängigkeiten identifizieren, Redundanzen aufspüren und selbstständig Code-Abschnitte für die Migration generieren. Sie sind in der Lage, aus dem vorhandenen Code implizite Regeln und Geschäftslogik zu extrahieren, die nie dokumentiert worden oder über die Jahre verloren gegangen sind. Indem die KI die repetitive und fehleranfällige manuelle Arbeit der Analyse und des Refactorings übernimmt, können Entwickler*innen sich auf die strategischen Aspekte der Modernisierung konzentrieren, die Architektur neugestalten und innovative Funktionen implementieren. KI-Technologien bieten somit eine beispiellose Möglichkeit, den jahrzehntelangen Rückstand an technischen Schulden schnell und effizient abzubauen und Altsysteme wieder zu agilen, zukunftssicheren Plattformen zu machen.

Software im Wandel: Gestern aktuell, heute veraltet

Der Begriff „Software-Verschleiß“ wirkt zuerst widersprüchlich. Im Gegensatz zu mechanischen Komponenten, etwa einem Auto-Motor, nutzt sich Code nicht durch die Benutzung ab. Dennoch zeigen sich bei veralteten Systemen typische Symptome, die auf eine Art Alterung hinweisen:

Emergentes Verhalten

Das System zeigt unvorhersehbares Verhalten durch komplexe, schwer steuerbare Wechselwirkungen.

Sicherheitslücken

Fehlende Updates und Implementierungsfehler gefährden die Betriebs- und Datensicherheit.

Hohe Kosten

Spezialwissen, Lizenzen und manueller Aufwand treiben die Wartungs- und Deploymentkosten in die Höhe.

Wissensmonopole und Silo-Wissen

Mit dem Weggang erfahrener Mitarbeiter geht auch das Wissen über das System verloren.

Schlechte Skalierbarkeit und Performance

Das System kommt mit steigenden Anforderungen und Nutzerzahlen nicht mehr mit.

Schwache Usability

Moderne Anforderungen an intuitive und barrierefreie Bedienung werden nicht erfüllt.

Unvollständige und veraltete Dokumentation

Die Dokumentation ist lückenhaft oder nicht mehr aktuell, was die Wartung erschwert.

Lange Entwicklungszyklen

Neue Funktionen lassen sich nur langsam oder gar nicht im bestehenden System umsetzen.

Fehlende Entwicklerattraktivität

Die Arbeit mit dem Altsystem ist mühsam und risikobehaftet. Das senkt die Motivation, neue Funktionen zu entwickeln.

Kaskadierende Fehler

Kleine Codeänderungen führen zu unerwarteten Problemen, die spät erkannt und teuer behoben werden.

Fehlende Testabdeckung

Automatisierte Tests fehlen, was Änderungen riskant macht und Regressionen begünstigt.

Veraltete Technologien

Das System basiert auf veralteten Technologien und Programmiersprachen, die nicht mehr gepflegt werden und kaum noch Entwickler*innen finden.

Probleme entstehen auch dadurch, dass Software über Jahre gewachsen ist und das Fundament der Software gar nicht bereit war, die neuen Features aufzunehmen. Entscheidungen, die zuvor auf Grundlage aller damals bekannter Faktoren getroffen wurden, müssen heute neu bewertet werden. Dadurch wird es immer schwieriger neue Funktionen wie z.B. AI-Agents zu integrieren, ohne dass das System in Schiefstand gerät. Die Innovationsfähigkeit des Unternehmens wird dadruch massiv eingeschränkt.
Eine weitere passende Analogie ist die „Technische Schuld“. Wenn über Jahre hinweg die Pflege und Erneuerung der Software nicht konsequent verfolgt wurde, bauen sich Schulden auf. Was einst als schneller Workaround oder pragmatischer „Hack“ zur kostengünstigen Umsetzung von Features oder zur kurzfristigen Behebung von Bugs diente, wird später zum Problem. Häufig fehlen Dokumentation und Spezifikation für solche Sonderlösungen, sodass nachfolgende Entwickler deren Existenz und Funktionsweise nicht mehr nachvollziehen können.

Wenn die Lösung immer komplizierter wird

Um die Kosten für die Integration neuer Features im Rahmen zu halten, ist es entscheidend, die Komplexität der Software zu reduzieren. Durch die Reduktion der Komplexität können nicht nur die Integrationskosten gesenkt, sondern auch die Wartbarkeit und Skalierbarkeit der Software verbessert werden.

Warum jetzt modernisieren?

Bisher standen Software-Modernisierungsprojekte vor erheblichen Herausforderungen:

  • Fehlende Dokumentation: Es fehlt sowohl an fachlicher Spezifikation und technischer Dokumentation der Bestandssoftware. Die Wahrheit liegt im Code.
  • Hohe Erwartungen der Nutzer: Die Nutzer der Software und auch die angeschlossenen Systeme erwarten das gleiche System-Verhalten wie vor der Modernisierung.
  • Kein Business Case: Das Investment in eine Software-Erneuerung bringt zunächst keinen Return on Investment (ROI), wenn nur eine technische Erneuerung vorgenommen wird. Das System erfüllt nachher zunächst „nur“ die gleiche Aufgabe wir zuvor.
  • Spätes Go-Live: Ein vollständiger Software-Rewrite birgt das erhebliche Risiko, dass erst nach Monaten der Entwicklung ein lauffähiger Stand mit Feature-Parität erreicht wird.

Durch die KI haben wir jetzt ein mächtiges Werkzeug, dass uns bei der Software-Modernisierung unterstützt und damit das Risiko verringert.

So modernisieren wir mit KI

Unser bewährtes Vorgehen in Migrationsprojekten ist dreigeteilt und berücksichtigt Kontext, Strategie und Durchführung:

  • Analyse und Bewertung
    • Um eine zielgerichtete Modernisierung zu planen, muss das Bestandssystem hinsichtlich Anforderungen und Technik verstanden sowie dessen Komponenten qualitativ bewertet werden. Zusätzlich werden die Pain-Points und Architekturziele erfasst und fließen in die Strategie mit ein.
  • Entwicklung der Migrationsstrategie
    • Bestehende Softwareprojekte sind individuelle Lösungen für komplexe Probleme und erfordern demnach eine kontextspezifische Migrationsstrategie um eine möglichst kosteneffiziente Migration sicherzustellen.
  • Durchführung des Migration-Projekts
    • Je nach Strategie, werden schrittweise Software-Komponenten modernisiert, ausgetauscht oder erneuert.

In jeder Phase können uns KI-Tools unterstützen, in dem sie zeitraubende Aktivitäten automatisieren oder den Systemkontext verständlich aufbereiten. Im Weiteren beschreiben wir konkrete Unterstützungspotentiale in den jeweiligen Phasen anhand von Praxisbeispielen.

Analyse & Bewertung der Bestandssoftware

In der Analyse werden unter anderem funktionale Abhängigkeiten analysiert, Business Requirements extrahiert und die technologische Landschaft des Unternehmens bewertet, um sicherzustellen, dass die neue Lösung nahtlos in die bestehende Infrastruktur integriert werden kann. Der Einsatz von KI ist vor allem bei den folgenden Aspekten vielversprechend:

  • Erkennung von semantischen Zusammenhängen, funktionale Features und „Reverse Engineering“ der Anforderungen
  • Generierung aktueller Architektur-Dokumentation (z.B. UML Diagramme)
  • Analyse und Rekonstruktion der Verhaltensweise der Software bspw. durch Analyse von Log-Dateien oder dem automatisierten einfügen von Log-Statements durch KI
  • Bewertung der Bedienbarkeit (Usability): Die Nutzerfreundlichkeit der Software wird aus Sicht der Endanwender betrachtet. KI kann hier durch die Analyse von Nutzerinteraktionen oder durch Usability-Tests mit simulierten Nutzern wertvolle Erkenntnisse liefern.
  • Bewertung von Software-Architektur und -design unter Berücksichtigung der Modularität, Skalierbarkeit & Wartbarkeit sowie Umsetzung von Architekturpatterns
  • Bewertung der Code-Qualität bestehend aus Aspekten wie Lesbarkeit, Komplexität, Testabdeckung und technischen Schulden.
Praxisbeispiel: KI-gestützte Analysephase während der Migration eines Bestandprojekts

Ein Softwareprodukt eines Kunden ist nur auf einer abgekündigten Betriebssystemversion lauffähig. Da diese auf einer neuen Hardwaregeneration aufgrund von Treiberproblemen nicht mehr unterstützt wird, ist es nötig die bestehende Software zu migrieren. XITASO entwickelte dabei eine Migrationsstrategie die u.a. beantworten sollte, ob Virtualisierung der Bestandssoftware oder Portierung der Kernfunktionalitäten mit Schnittstellen ein gangbarer Weg ist oder gar eine vollständige Neuentwicklung nötig ist. Dazu musste, in knappem Zeit- und Budgetrahmen, die Bestandssoftware hinsichtlich ihrer Portierbarkeit analysiert werden.

Zur Analyse wurde eine Kombination von traditionellen, statischen Analysetools und KI eingesetzt. Die traditionellen Tools wurden eingesetzt, um einen Überblick über verwendete Funktionen zu erhalten während KI die Funktionen semantisch beschrieb (vgl. „Reverse Engineering“ der Anforderungen) und anhand eines zuvor festgelegten Schemas die Portierbarkeit bewertete. Da die zu analysierende Codebasis nicht vollständig in den Kontext der verwendeten KI-Modelle passte, wurden Techniken eingesetzt die jeweiligen Klassen semi-automatisiert syntaktisch und semantisch zusammenzufassen, um den KI-Modellen auch in der komplexen Codebasis den „Überblick“ zu ermöglichen. Im Vergleich zur direkten, rein KI generierten, Code-Embeddings ermöglicht dies eventuelle Missstände frühzeitig zu identifizieren und zu beheben. Es steigert dadurch Transparenz, Nachvollziehbarkeit und, durch den integrierten Kontrollschritt, Qualität der Zusammenfassungen was bei den Entwicklern zu gesteigerter Akzeptanz und Vertrauen in das System führt.

Basierend auf den Beschreibungen und Bewertungen gelang es unseren Entwicklern deutlich schneller ein tiefgreifendes Verständnis der Software zu erhalten und eine vielversprechende Strategie zu identifizieren die aktuell erfolgsversprechend umgesetzt wird.

KI-gestützte Migration

Die iterative Umsetzung der Migrationsstrategie bildet das Herzstück eines erfolgreichen Migrationsprojekts. Die neue Lösung wird dabei schrittweise implementiert, wobei kontinuierliche Tests und Validierungen sicherstellen, dass Funktionalität und Performance den Anforderungen entsprechen. Ein strukturierter Rollout-Plan minimiert Risiken und sorgt für eine reibungslose Übergangsphase. Der Einsatz von KI ist vor allem bei den folgenden Aspekten vielversprechend:

Einsatz von KI als intelligenter Search-And-Replace

Bei der Migration auf neue Bibliotheken oder beim Austausch nicht mehr unterstützter Komponenten reichen klassische „Suchen-und-Ersetzen“-Mechanismen oft nicht aus. KI kann anhand von Beispielen und bereitgestellter Dokumentation komplexe Anpassungen automatisiert und zuverlässig durchführen.

KI beim Code-Verständnis

Software-Entwickler verbringen erheblich mehr Zeit mit dem Lesen und Verstehen von Code als mit dem tatsächlichen Programmieren. Die KI kann als Sparringspartner beim Verstehen von Klassen und Methoden helfen und die gewonnenen Erkenntnisse direkt als Code-Dokumentation festhalten. Mithilfe des Model-Context-Protocols  (MCP) lassen sich weitere Informationsquellen (z.B. JIRA, Wiki) oder Tools für die Generierung von Diagrammen einbinden.

KI-gestützte Testgenerierung

Gerade in Legacy-Projekten fehlen häufig automatisierte Tests, um das Systemverhalten während einem Umbau abzusichern. KI kann hier unterstützen, indem sie Tests auf hoher Abstraktionsebene (z. B. für REST-Schnittstellen oder das User-Interface) generiert und so die Qualität und Wartbarkeit nachhaltig verbessert.

KI zur Verbesserung der Code-Qualität

Neue Sprachfeatures (z. B. in C# 14) ermöglichen es, Code kürzer und verständlicher zu schreiben. KI erkennt veraltete oder inkonsistente Codestellen und kann diese automatisiert modernisieren.

Durch die Anwendung einheitlicher Coding-Guidelines und Architektur-Richtlinien sorgt KI zudem für eine Harmonisierung unterschiedlicher Programmierstile und prüft die konsistente Anwendung von Design-Patterns und Strukturen (z. B. Services, Handler)

KI-gestützte Code-Reviews

Code-Reviews sind ein zentraler Bestandteil der Qualitätssicherung. KI kann hier unterstützen, indem sie Änderungen hinsichtlich Lesbarkeit, Fehleranfälligkeit, Sicherheit, Design und Architektur analysiert und gezielte Verbesserungsvorschläge liefert. Das erhöht die Code-Qualität und reduziert den Zeitaufwand für manuelle Reviews deutlich.

KI-gestützte Security Analyse

Angesichts der aktuellen Bedrohungslage sind die Sicherheitsanforderungen an Legacy-Software im Vergleich zu ihrer ursprünglichen Entwicklung erheblich gestiegen. Um diesen gestiegenen Anforderungen gerecht zu werden, können automatisierte Analysen des Bestandcodes, beispielsweise durch statische Anwendungssicherheitstests (SAST) Tools, eingesetzt werden, die sich nahtlos in DevSecOps-Pipelines integrieren lassen. Diese Tools neigen jedoch dazu, hohe Fehlalarmraten zu erzeugen, was ihre Effektivität erheblich beeinträchtigt. Der Einsatz von Künstlicher Intelligenz zur automatisierten Bewertung der SAST-Ergebnisse mittels „LLM-as-a-judge“ bietet eine vielversprechende Lösung. Durch die deutliche Reduzierung von Fehlalarmen, ohne dabei echte Schwachstellen zu übersehen, wird die Effektivität der SAST-Systeme gesteigert. Dies führt nicht nur zu einer höheren Akzeptanz bei Entwicklern, sondern auch zu sichereren Softwarelösungen, die den gestiegenen Sicherheitsanforderungen gerecht werden.

Unsere Publikation zu diesem Thema wurde auf der 2025 IEEE Conference on Intelligence and Security Informatics mit dem Best Paper Award ausgezeichnet.

KI zur Portierung von Quellcode in neue Technologien

Bei größeren Migrationsschritten ist es notwendig, wie in der klassischen Programmierung, die Aufgabe in verschiedene Schritte und Arbeitspakete zu zerlegen. Der KI-Agent kann immer nur einen begrenzten Kontext überschauen und kleinere Aufgaben sind auch für eine Überprüfung von Vorteil. Ebenso hilft es die Komplexität der jeweiligen Aufgabe zu reduzieren und bei der Eingrenzung der Ursache von auftretenden Fehlern. Diese Aufgabenbeschreibung und Meilensteine können bereits im Sparring mit der KI erstellt werden und in Dokumentationsdateien abgelegt werden. Dabei können bei gewissen Wahlmöglichkeiten in der neuen Programmiersprache Präferenzen hinterlegt werden (z.B. Enums vs. String Literals). Der eigentliche Prompt an die KI kann kurz sein, da die eigentlichen Arbeitsanweisungen bereits hinterlegt sind.

Praxisbeispiel: KI-gestützte Portierung

In einem historisch gewachsenen Kundenprojekt sollte Programm-Code von C# auf Typescript portiert werden. Konkret betraf dies Daten-Modelle, selbst geschriebene Binary-Serialisierung mit XML/JSON Metadaten und JSON Ausgabe.

Mithilfe von Jetbrains Junie konnten die benötigten Klassen mit nur ca. 20 Prompts von C# in TypeScript portiert werden. Der Outcome waren 2363 LoC übersetzter Code mit 79 automatisierten Testfällen. Dafür benötigte Junie 5h, in denen der Entwickler anderen Aufgaben nachgehen konnte. Eine Abschätzung für die Arbeit ohne KI-Unterstützung lag bei ca. 10 PT. Daraus ergibt sich eine Beschleunigung um den Faktor 15 – ohne die Parallelisierbarkeit der Aufgabe zu berücksichtigen!

Bemerkenswert: Die KI hat nach jeder der ca. 10 Aufgabenblöcke einen lauffähigen Stand mit funktionierenden Tests erzeugt. Manuelle Korrekturen oder Verbesserungen waren dafür nicht notwendig.

Chatten Sie mit Tix – Ihr Experte für Software-Modernisierung

Tix - Berater für High-End Software Engineering

Autoren

Michael Brunner

Dr. Richard Nordsieck