KI-Tools und Software-Migration

Hand eines Geschäftsmanns mit KI-Glaskugel und FragezeichenSOFTWARE-MIGRATION UND KI

Alan Turing, einer der einfluss­reichs­ten Vorden­ker im Bereich der Künst­li­chen Intel­li­genz, formu­lierte 1950 einen Intel­li­genz­test für Computer:
Ein Compu­ter sei intel­li­gent, wenn ein Mensch in einer Unter­hal­tung mit dem Compu­ter nicht erken­nen könne, ob es sich um einen Compu­ter oder einen Menschen handelt.

Turings Visio­nen sind heute Wirklich­keit. KI-Sprach­­mo­­delle können durch Erken­nung statis­ti­scher Korre­la­tio­nen zwischen Wörtern das wahrschein­lich nächste Wort ermit­teln (seman­ti­sche Wahrschein­lich­keit) und ermög­li­chen menschen­ähn­li­che Kommunikation.

Die aktuel­len Anwen­dungs­ge­biete der KI gehen jedoch weit über die Kommu­ni­ka­tion hinaus. Dies provo­ziert die Frage, worin die Möglich­kei­ten und die Grenzen der KI-Nutzung in der Software-Migration bestehen.

Nachfol­gend werden verschie­dene KI-Tools bezüg­lich ihrer Nutzung in der Software-Migration betrachtet.

Abgren­zung des Untersuchungsgegenstandes

Unter dem Begriff Software-Migration wird im Folgen­den die toolge­stützte, compi­ler­ba­sierte Software-Migration verstan­den. Und hier konkret der Prozess der Konver­tie­rung von Program­men von einer Legacy-Sprache in eine moderne Program­mier­spra­che unter Nutzung von Konver­tie­rungs­tools. Alter­na­tive Migra­ti­ons­an­sätze wie z.B. die manuelle Migration werden nicht betrach­tet. Auch die Unter­stüt­zung von Migra­ti­ons­pro­jek­ten durch z.B. Analy­se­tools oder Tools zur Testun­ter­stüt­zung etc. sind nicht Inhalt der nachfol­gen­den Betrachtung.

Die Unter­su­chun­gen beinhal­ten die Konver­tie­rung eines typischen COBOL-Program­­mes nach Java und dessen Abarbei­tung: zum einen mit diver­sen im Netz verfüg­ba­ren KI-Tools, zum anderen mit dem von pro et con entwi­ckel­ten Konver­tie­rungs­tool CoJaC (COBOL-Java-Conver­­­ter). Die Ergeb­nisse werden vergli­chen und bewertet.

Die Auswer­tung soll Aussa­gen liefern, inwie­weit die Ergeb­nisse der KI-Tools seman­tisch äquiva­lent zu den korrek­ten Ergeb­nis­sen sind, wie sie z.B. ein COBOL-Compi­­ler liefert. Seman­ti­sche Äquiva­lenz ist ein wesent­li­ches, wenn nicht das wichtigste Krite­rium in einem Migrationsprojekt.

Testba­sis

Die Testba­sis bildet ein einfa­ches COBOL-Programm. Das Programm besitzt keine Logik. Es beinhal­tet jedoch COBOL-typische Anwei­sun­gen, welche im produk­ti­ven Umfeld zahlreich Anwen­dung finden. Das COBOL-Programm erschließt sich versier­ten COBOL-Program­­mie­­rern unmit­tel­bar. Es werden unter­schied­li­che Daten­de­fi­ni­tio­nen mit gleich­zei­ti­ger Initia­li­sie­rung vorge­nom­men. Die Daten werden manipu­liert, z.B. durch Wertzu­wei­sun­gen bzw. Überla­ge­run­gen, und nach jeder Manipu­la­tion mit DISPLAY angezeigt.

Micro­­Fo­­cus-COBOL-Compi­­ler:

Das Programm wurde mit dem Micro­­Fo­­cus-COBOL-Compi­­ler übersetzt und anschlie­ßend ausge­führt. Es lieferte die folgen­den Ergebnisse.

KI-TOOLS

Die Experi­mente wurden mit folgen­den KI-Tools durch­ge­führt: ChatGPT (GPT-4o und GPT‑3.5), Copilot, CodeCon­vert, CodeGPT, Cursor und Black­box AI.
Aus dem COBOL-Programm wurden von allen KI-Tools Java-Programme erzeugt, welche eine identi­sche Funktio­na­li­tät besit­zen sollten. Es muss angemerkt werden, dass die verschie­de­nen KI-Tools nicht für die gestellte Aufgabe spezi­ell trainiert wurden.

Nachfol­gend werden die generier­ten Java-Programme einschließ­lich der Ergeb­nisse zur Laufzeit dokumen­tiert. Es wird sich dabei auf die zwei KI-Tools ChatGPT-4o und Copilot konzen­triert. Die Tests der übrigen unter­such­ten KI-Tools liefer­ten identi­sche Ergebnisse:

ChatGPT-4o

Bei der Ausfüh­rung des konver­tier­ten Programms liefert dieses falsche Ergebnisse.
Eine nochma­lige Konver­tie­rung liefert einen anderen Source Code.
Die (fehler­haf­ten) Ergeb­nisse beider Konver­tie­run­gen unter­schei­den sich.

Copilot (v1.94)

Bei der Ausfüh­rung des konver­tier­ten Programms liefert dieses falsche Ergebnisse.
Eine nochma­lige Konver­tie­rung liefert einen anderen Source Code.
Die (fehler­haf­ten) Ergeb­nisse beider Konver­tie­run­gen unter­schei­den sich.

COJAC (COBOL TO JAVA CONVERTER)

CoJaC wird neben anderen Tools in Migra­ti­ons­pro­jek­ten von pro et con für die Konver­tie­rung der COBOL-Programme nach Java genutzt.
Deshalb bietet es sich an, die Ergeb­nisse 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 kompi­liert und ausge­führt. Zur Laufzeit lieferte das Java-Programm identisch zum COBOL-Programm die korrek­ten Ergebnisse.

Auch eine erneute Konver­tie­rung lieferte logischer­weise identi­schen Java-Code und identi­sche, korrekte Ergeb­nisse zur Laufzeit.

DISKUS­SION DER ERGEBNISSE

  1. Alle getes­te­ten KI-Tools liefern falsche Ergeb­nisse. Die Ursache liegt darin, dass COBOL-spezi­­fi­­sche Sprach­ele­mente mit Java-Bordmi­t­­teln abgebil­det werden. Das funktio­niert nur bedingt, da z.B. für die komple­xen COBOL-Daten­­­be­­schrei­­bun­­gen und deren Eigen­schaf­ten keine seman­tisch äquiva­len­ten Java-Daten­­­ty­­pen/-Varia­­blen existie­ren. KI-Modelle treffen anhand von Wahrschein­lich­keit Vorher­sa­gen, welche sich einer 100%igen seman­ti­schen Äquiva­lenz nur annähern können. Zwar können die zugrun­de­lie­gen­den Machine- oder Deep-Learning-Modelle durch laufen­des Training optimiert werden, jedoch bleibt offen, ob – und wenn ja, mit welchem Trainings­auf­wand – diese 100%ige seman­ti­sche Äquiva­lenz vollstän­dig erreicht werden kann. Demge­gen­über besitzt CoJaC eine Biblio­thek, in welcher alle in COBOL vorkom­men­den Daten­be­schrei­bun­gen in Form von Java-Klassen und ‑Packa­ges enthal­ten sind. Diese emulie­ren die COBOL-Daten­­­be­­schrei­­bun­­gen im Java-Code. So ist eine seman­ti­sche Äquiva­lenz zwischen COBOL-Programm und Java-Programm gegeben.
  2. Alle getes­te­ten KI-Tools liefer­ten bei wieder­hol­ter Java-Generie­rung einen verän­der­ten Source Code. Eine Konver­tie­rung bei einem KI-Tool ist demnach nicht 1:1 wieder­hol­bar. In einem meist mehrere Millio­nen LOC umfas­sen­den Migra­ti­ons­pro­jekt besteht die Notwen­dig­keit, eine bestimmte Menge von Program­men (z.B. bei Weiter­ent­wick­lun­gen) in mehre­ren Itera­tio­nen erneut zu konver­tie­ren. Ein dadurch sich ständig ändern­der Source Code erzeugt Diskre­pan­zen bei zusam­men­hän­gen­den Kompo­nen­ten (Referen­zie­run­gen, Klassen, Schnitt­stel­len), da jedes Programm über Schnitt­stel­len mit anderen Program­men des Programm­sys­tems kommu­ni­ziert. Das ist in einem Migra­ti­ons­pro­jekt nicht zu akzep­tie­ren. Mit einem compi­ler­ba­sier­ten Migra­ti­ons­tool wie CoJaC kann eine Programm­kon­ver­tie­rung belie­big oft wieder­holt werden und liefert immer identi­schen Source Code.
  3. Quali­fi­zierte COBOL-Program­­mie­­rer werden erkannt haben, dass das COBOL-Programm an mehre­ren Stellen unsau­ber program­miert ist (z.B. wird eine zweistel­lige Zahl auf eine einstel­lige Varia­ble zugewie­sen). Das ist offen­sicht­lich kein guter Stil, kommt aller­dings in der Reali­tät nun mal vor, beson­ders bei langlau­fen­den, komple­xen Projek­ten, was bei Legacy-Software in der Regel der Fall ist. Es kann niemand garan­tie­ren, dass zum Zeitpunkt einer Migration alles sauber program­miert ist. Und diesem Umstand muss eine Migration gerecht werden, indem bei kriti­scher Software auch jeder Sonder­fall 1:1 seman­tisch äquiva­lent abgebil­det wird. Genau das können KI-Tools defini­tiv nicht leisten, der compi­ler­ba­sierte Ansatz hinge­gen schon.
  4. “Das” COBOL existiert nicht. Die Sprache ist abhän­gig von der Hardware-Platt­­form, von Compi­­ler-Dialek­­ten und projekt­spe­zi­fi­schen Compi­­ler-Einstel­­lun­­gen, welche das Verhal­ten des Systems verän­dern und nicht im COBOL-Code selbst stehen. Auch verschie­denste Präcom­pi­ler sind verbrei­tet. Dadurch ist jedes Legacy-System indivi­du­ell und setzt eine ebenso indivi­du­elle Bearbei­tung voraus. Auch hier stoßen KI-Tools an ihre Grenzen, wohin­ge­gen der compi­ler­ba­sierte Ansatz diese indivi­du­elle Bearbei­tung unterstützt.

FAZIT

  • Aktuell können KI-Tools in einem Migra­ti­ons­pro­jekt zum Einsatz kommen, aber eben nur als Assis­ten­ten. Beim IBM watsonx Code Assistant for Z ist diese Funktio­na­li­tät schon im Namen hinter­legt. Es lassen sich damit z.B. Unit-Tests generie­ren, deren manuelle Erstel­lung aufwen­dig ist. Auch können sie z.B. bei der Kommen­tie­rung des Codes, bei der Refak­to­ri­sie­rung und der Programm­do­ku­men­ta­tion unter­stüt­zen. Es finden sich sicher noch weitere Einsatzmöglichkeiten.
  • Bei der eigent­li­chen Konver­tie­rung von Program­men sind KI-Tools aktuell nur bedingt einsetz­bar. Ohne Training bzw. manuelle Anpas­sung liefern sie Ergeb­nisse zur Laufzeit, welche nicht seman­tisch äquiva­lent zum origi­na­len Programm sind. Seman­ti­sche Äquiva­lenz ist aber unabding­bare Voraus­set­zung für ein erfolg­rei­ches Projekt.
  • Sowohl das Training der KI-Tools als auch die manuelle Anpas­sung sind ressour­cen- und zeitauf­wen­dig und nähern sich so bezüg­lich des Aufwan­des dem einer Neuent­wick­lung an.
  • Wenn der Kunde in überschau­ba­rer Projekt­zeit und mit überschau­ba­rem Budget einen Wechsel der Program­mier­spra­che und/oder einen Platt­form­wech­sel wünscht, dann ist aktuell die toolge­stützte, compi­ler­ba­sierte Software-Migration das Mittel der Wahl. KI-Tools können dabei wertvolle, assis­tenz­ba­sierte Unter­stüt­zung leisten.