HOME > SOFTWARE-MIGRATION > KI
SOFTWARE-MIGRATION UND KI
Alan Turing, einer der einflussreichsten Vordenker im Bereich der Künstlichen Intelligenz, formulierte 1950 einen Intelligenztest für Computer:
Ein Computer sei intelligent, wenn ein Mensch in einer Unterhaltung mit dem Computer nicht erkennen könne, ob es sich um einen Computer oder einen Menschen handelt.
Turings Visionen sind heute Wirklichkeit. KI-Sprachmodelle können durch Erkennung statistischer Korrelationen zwischen Wörtern das wahrscheinlich nächste Wort ermitteln (semantische Wahrscheinlichkeit) und ermöglichen menschenähnliche Kommunikation.
Die aktuellen Anwendungsgebiete der KI gehen jedoch weit über die Kommunikation hinaus. Dies provoziert die Frage, worin die Möglichkeiten und die Grenzen der KI-Nutzung in der Software-Migration bestehen.
Nachfolgend werden verschiedene KI-Tools bezüglich ihrer Nutzung in der Software-Migration betrachtet.
Abgrenzung des Untersuchungsgegenstandes
Unter dem Begriff Software-Migration wird im Folgenden die toolgestützte, compilerbasierte Software-Migration verstanden. Und hier konkret der Prozess der Konvertierung von Programmen von einer Legacy-Sprache in eine moderne Programmiersprache unter Nutzung von Konvertierungstools. Alternative Migrationsansätze wie z.B. die manuelle Migration werden nicht betrachtet. Auch die Unterstützung von Migrationsprojekten durch z.B. Analysetools oder Tools zur Testunterstützung etc. sind nicht Inhalt der nachfolgenden Betrachtung.
Die Untersuchungen beinhalten die Konvertierung eines typischen COBOL-Programmes nach Java und dessen Abarbeitung: zum einen mit diversen im Netz verfügbaren KI-Tools, zum anderen mit dem von pro et con entwickelten Konvertierungstool CoJaC (COBOL-Java-Converter). Die Ergebnisse werden verglichen und bewertet.
Die Auswertung soll Aussagen liefern, inwieweit die Ergebnisse der KI-Tools semantisch äquivalent zu den korrekten Ergebnissen sind, wie sie z.B. ein COBOL-Compiler liefert. Semantische Äquivalenz ist ein wesentliches, wenn nicht das wichtigste Kriterium in einem Migrationsprojekt.
Testbasis
Die Testbasis bildet ein einfaches COBOL-Programm. Das Programm besitzt keine Logik. Es beinhaltet jedoch COBOL-typische Anweisungen, welche im produktiven Umfeld zahlreich Anwendung finden. Das COBOL-Programm erschließt sich versierten COBOL-Programmierern unmittelbar. Es werden unterschiedliche Datendefinitionen mit gleichzeitiger Initialisierung vorgenommen. Die Daten werden manipuliert, z.B. durch Wertzuweisungen bzw. Überlagerungen, und nach jeder Manipulation mit DISPLAY angezeigt.
MicroFocus-COBOL-Compiler:
Das Programm wurde mit dem MicroFocus-COBOL-Compiler übersetzt und anschließend ausgeführt. Es lieferte die folgenden Ergebnisse.
KI-TOOLS
Die Experimente wurden mit folgenden KI-Tools durchgeführt: ChatGPT (GPT-4o und GPT‑3.5), Copilot, CodeConvert, CodeGPT, Cursor und Blackbox AI.
Aus dem COBOL-Programm wurden von allen KI-Tools Java-Programme erzeugt, welche eine identische Funktionalität besitzen sollten. Es muss angemerkt werden, dass die verschiedenen KI-Tools nicht für die gestellte Aufgabe speziell trainiert wurden.
Nachfolgend werden die generierten Java-Programme einschließlich der Ergebnisse zur Laufzeit dokumentiert. Es wird sich dabei auf die zwei KI-Tools ChatGPT-4o und Copilot konzentriert. Die Tests der übrigen untersuchten KI-Tools lieferten identische Ergebnisse:
ChatGPT-4o
Bei der Ausführung des konvertierten Programms liefert dieses falsche Ergebnisse.
Eine nochmalige Konvertierung liefert einen anderen Source Code.
Die (fehlerhaften) Ergebnisse beider Konvertierungen unterscheiden sich.
Copilot (v1.94)
Bei der Ausführung des konvertierten Programms liefert dieses falsche Ergebnisse.
Eine nochmalige Konvertierung liefert einen anderen Source Code.
Die (fehlerhaften) Ergebnisse beider Konvertierungen unterscheiden sich.
COJAC (COBOL TO JAVA CONVERTER)
CoJaC wird neben anderen Tools in Migrationsprojekten von pro et con für die Konvertierung der COBOL-Programme nach Java genutzt.
Deshalb bietet es sich an, die Ergebnisse von CoJaC mit denen der KI-Tools zu vergleichen:
Das COBOL-Programm wurde mit dem Werkzeug CoJaC von pro et con nach Java konvertiert.
Das Java-Programm wurde kompiliert und ausgeführt. Zur Laufzeit lieferte das Java-Programm identisch zum COBOL-Programm die korrekten Ergebnisse.
Auch eine erneute Konvertierung lieferte logischerweise identischen Java-Code und identische, korrekte Ergebnisse zur Laufzeit.
DISKUSSION DER ERGEBNISSE
- Alle getesteten KI-Tools liefern falsche Ergebnisse. Die Ursache liegt darin, dass COBOL-spezifische Sprachelemente mit Java-Bordmitteln abgebildet werden. Das funktioniert nur bedingt, da z.B. für die komplexen COBOL-Datenbeschreibungen und deren Eigenschaften keine semantisch äquivalenten Java-Datentypen/-Variablen existieren. KI-Modelle treffen anhand von Wahrscheinlichkeit Vorhersagen, welche sich einer 100%igen semantischen Äquivalenz nur annähern können. Zwar können die zugrundeliegenden Machine- oder Deep-Learning-Modelle durch laufendes Training optimiert werden, jedoch bleibt offen, ob – und wenn ja, mit welchem Trainingsaufwand – diese 100%ige semantische Äquivalenz vollständig erreicht werden kann. Demgegenüber besitzt CoJaC eine Bibliothek, in welcher alle in COBOL vorkommenden Datenbeschreibungen in Form von Java-Klassen und ‑Packages enthalten sind. Diese emulieren die COBOL-Datenbeschreibungen im Java-Code. So ist eine semantische Äquivalenz zwischen COBOL-Programm und Java-Programm gegeben.
- Alle getesteten KI-Tools lieferten bei wiederholter Java-Generierung einen veränderten Source Code. Eine Konvertierung bei einem KI-Tool ist demnach nicht 1:1 wiederholbar. In einem meist mehrere Millionen LOC umfassenden Migrationsprojekt besteht die Notwendigkeit, eine bestimmte Menge von Programmen (z.B. bei Weiterentwicklungen) in mehreren Iterationen erneut zu konvertieren. Ein dadurch sich ständig ändernder Source Code erzeugt Diskrepanzen bei zusammenhängenden Komponenten (Referenzierungen, Klassen, Schnittstellen), da jedes Programm über Schnittstellen mit anderen Programmen des Programmsystems kommuniziert. Das ist in einem Migrationsprojekt nicht zu akzeptieren. Mit einem compilerbasierten Migrationstool wie CoJaC kann eine Programmkonvertierung beliebig oft wiederholt werden und liefert immer identischen Source Code.
- Qualifizierte COBOL-Programmierer werden erkannt haben, dass das COBOL-Programm an mehreren Stellen unsauber programmiert ist (z.B. wird eine zweistellige Zahl auf eine einstellige Variable zugewiesen). Das ist offensichtlich kein guter Stil, kommt allerdings in der Realität nun mal vor, besonders bei langlaufenden, komplexen Projekten, was bei Legacy-Software in der Regel der Fall ist. Es kann niemand garantieren, dass zum Zeitpunkt einer Migration alles sauber programmiert ist. Und diesem Umstand muss eine Migration gerecht werden, indem bei kritischer Software auch jeder Sonderfall 1:1 semantisch äquivalent abgebildet wird. Genau das können KI-Tools definitiv nicht leisten, der compilerbasierte Ansatz hingegen schon.
- “Das” COBOL existiert nicht. Die Sprache ist abhängig von der Hardware-Plattform, von Compiler-Dialekten und projektspezifischen Compiler-Einstellungen, welche das Verhalten des Systems verändern und nicht im COBOL-Code selbst stehen. Auch verschiedenste Präcompiler sind verbreitet. Dadurch ist jedes Legacy-System individuell und setzt eine ebenso individuelle Bearbeitung voraus. Auch hier stoßen KI-Tools an ihre Grenzen, wohingegen der compilerbasierte Ansatz diese individuelle Bearbeitung unterstützt.
FAZIT
- Aktuell können KI-Tools in einem Migrationsprojekt zum Einsatz kommen, aber eben nur als Assistenten. Beim IBM watsonx Code Assistant for Z ist diese Funktionalität schon im Namen hinterlegt. Es lassen sich damit z.B. Unit-Tests generieren, deren manuelle Erstellung aufwendig ist. Auch können sie z.B. bei der Kommentierung des Codes, bei der Refaktorisierung und der Programmdokumentation unterstützen. Es finden sich sicher noch weitere Einsatzmöglichkeiten.
- Bei der eigentlichen Konvertierung von Programmen sind KI-Tools aktuell nur bedingt einsetzbar. Ohne Training bzw. manuelle Anpassung liefern sie Ergebnisse zur Laufzeit, welche nicht semantisch äquivalent zum originalen Programm sind. Semantische Äquivalenz ist aber unabdingbare Voraussetzung für ein erfolgreiches Projekt.
- Sowohl das Training der KI-Tools als auch die manuelle Anpassung sind ressourcen- und zeitaufwendig und nähern sich so bezüglich des Aufwandes dem einer Neuentwicklung an.
- Wenn der Kunde in überschaubarer Projektzeit und mit überschaubarem Budget einen Wechsel der Programmiersprache und/oder einen Plattformwechsel wünscht, dann ist aktuell die toolgestützte, compilerbasierte Software-Migration das Mittel der Wahl. KI-Tools können dabei wertvolle, assistenzbasierte Unterstützung leisten.