COBOL-Modernisierungsintelligenz
Die meisten Modernisierungsprojekte scheitern, weil Werkzeuge Code als Text lesen, nicht als Topologie. CodeGraph parst Ihr Mainframe-Estate in einen typisierten Wissensgraphen und löst den vollständigen transitiven Abhängigkeitsabschluss einer Änderung auf — über Copybooks, REDEFINES, COMP-3, DB2 und JCL hinweg, mit file:line-Provenienz für jede Kante und einem Beweis, wie viel es auflösen konnte. Die Karte ist das Produkt. Übersetzung ist ein nachgelagerter Anwendungsfall.
9/9 vs 3/9
Wiederhergestellte Abhängigkeiten: Graph vs. Einzeldatei-Fenster
Auf der TRN-LIMIT-Fixture, gegen eine bekannte Ground-Truth-Menge
97.1%
Referenzen aufgelöst (33 of 34), 1 zur Prüfung markiert
Deterministisches Completeness Gate, gleiches Ergebnis bei jedem Lauf
47 / 70
Knoten und Kanten über 7 Knotentypen
Die ausgelieferte synthetische Bank-Fixture
Dies ist eine lauffähige Demo. Das Estate ist synthetisch und für die Demo verfasst, der Graph liegt im Speicher plus SQLite, und die DB2-, JCL- und naiven Einzeldatei-Sichten sind Datei-Fixtures und Simulationen, keine Live-Konnektoren.
Der Fehlermodus ist kontextuelle Blindheit, und ein größeres Modell beseitigt sie nicht.
70 to 80% der Mainframe-Modernisierungsprojekte verfehlen ihre Ziele (branchenweite Meta-Analyse, 2025). Nicht weil die Übersetzung falsch ist, sondern weil die Werkzeuge Code als Text statt als Topologie behandeln. Ein handelsüblicher Übersetzer liest die eine Datei, die er sehen kann. Die Tatsache, die tatsächlich zählt, ist in einem Einzeldatei-Kontextfenster unsichtbar.
Die Einsätze sind nicht akademisch. Rund 220 Milliarden Zeilen COBOL laufen noch in Produktion und tragen etwa 95% der Geldautomaten-Transaktionen, 43% der Bankensysteme und 3 Billionen Dollar Aktivität pro Tag (Reuters, 2017), gegenüber geschätzten 1.52 Billionen Dollar akkumulierter US-technischer Schulden (CISQ, 2022). Das ist der Kern des Banken- und Versicherungsstacks, und genau der Code, den niemand blind anfassen will.
Das konkrete Gleichnis ist ein Überweisungsprogramm, das auf einem Feld namens TRN-LIMIT rechnet. In der einen Datei, die ein Übersetzer sehen kann, wirkt die Arithmetik trivial. Aber TRN-LIMIT ist ein COMP-3 packed decimal, drei Copybooks entfernt definiert, seine Interpretation wird von einem Flag gewählt, das in einem anderen Programm gesetzt wird, und dieses Flag wird von einem JCL-Batch-Job um 2 Uhr morgens geschrieben, der vor dem Überweisungsjob läuft. Nur mit den sichtbaren Fakten ausgestattet, emittiert ein Modell ein plain long; das Java kompiliert, besteht Unit-Tests und korrumpiert dann die Datenbank bei der ersten Live-Überweisung. Dieser referenzielle Integritätsfehler tritt in der UAT zutage. Das Versagen war kontextuelle Blindheit.
Das altert nicht, wenn Modelle besser werden. Ein reales Estate umfasst 1 bis 10 Millionen Zeilen oder mehr und passt in kein Kontextfenster, weder heute noch künftig. Der harte Teil ist, den exakten transitiven Ausschnitt abzurufen, den eine Änderung berührt, und zu beweisen, dass Sie alles gefunden haben. Das ist ein Topologie-, Abruf- und Evidenzproblem, kein Problem der Reasoning-Qualität. Agenten beraten, Code entscheidet.
Parsen Sie das Estate in einen typisierten Graphen und führen Sie dann deterministische Analysen aus. Kein LLM sitzt im kritischen Pfad.
Die Pipeline läuft Fixture-Estate, dann Parse (COBOL, Copybooks, JCL, DB2 DDL), dann Aufbau eines typisierten Wissensgraphen, dann transitiver Impact-Abschluss plus Provenienz, dann die deterministischen Analysen, dann Audit und Evidenz-Export, dann das interaktive Dashboard. Beim Laden führt die App das live über Server-Sent Events aus, sodass jede Stufe mit ihrer real gemessenen Latenz in einer Konsole erzählt, Panels sich schrittweise füllen und eine persistente Stufenleiste die Input-, Processing- und Output-Spur jeder Stufe öffnen lässt. Ein einziges Steuerelement spielt den gesamten Lauf erneut ab.
Gebaut mit networkx und gehalten im Speicher plus SQLite, hat der Graph sieben Knotentypen (program, copybook, variable, table, jcl, dataset und ein unaufgelöster Platzhalter) und typisierte Kanten wie DEFINES, IMPORTS, REDEFINES, CONTROLS_TYPE_OF, WRITES_VAR, REFERENCES, CALLS, READS and WRITES, EXECUTES, USES_DATASET und PRECEDES. Auf der ausgelieferten Fixture hat der Graph 47 Knoten und 70 Kanten: 14 Programme, 5 Copybooks, 17 Variablen, 3 DB2-Tabellen, 3 JCL-Jobs, 4 Datasets und 1 unaufgelöster Knoten.
Das sind schlichte Graphalgorithmen, keine Modellaufrufe, sodass dieselbe Fixture bei jedem Lauf dasselbe Ergebnis liefert.
Der transitive Abhängigkeitsausschnitt einer Änderung, wobei jede Kante ihre file:line-Quelle trägt, sodass Sie nicht nur sehen, was betroffen ist, sondern wo die Evidenz liegt.
Der Abschluss des Graphen, bewertet gegen die bekannte Ground-Truth-Abhängigkeitsmenge der Fixture, gegenüber einem simulierten Einzeldatei-Fenster, also dem, was ein textbasiertes Werkzeug einem Modell tatsächlich zuführt.
Ein Kopplungs- und Blast-Radius-Score je Programm (Kopplung gewichtet drei, COMP-3-Fallen gewichtet zwei, JCL-Kritikalität gewichtet zwei, unaufgelöste Calls gewichtet fünf), der eine sichere Strangler-Fig-Migrationsreihenfolge rangiert.
Jeder PERFORM, CALL, COPY und jede DB2-Referenz muss aufgelöst oder als prüfungsbedürftig markiert werden, niemals stillschweigend verworfen. Unerreichbare Paragraphen werden als Illustration berichtet, nicht als Leitmetrik bewertet.
Ein Schalter macht den Unterschied greifbar. Aktivieren Sie die naive AI-Kontextsicht, und der Graph verdunkelt sich auf die einzelne Quelldatei mit wenigen Kontextzeilen. Sechs der neun Überweisungsfakten verschwinden, ein rotes Banner nennt die Konsequenz, und das Zurückschalten stellt 9/9 mit Belegen wieder her. Dieser Schalter illustriert, welchen Kontext die Abrufschicht liefern muss, er ist nicht die Quelle des Werts.
Wenn Sie fertig sind, schreibt Export JSON eine Datei migration-evidence.json, und Evidence report rendert einen druckbaren Codebase Topology and Completeness Report: die Knoten- und Kantenzusammenfassung, Closures je Modul mit file:line-Provenienz, das Recall-Ergebnis und die Methode, die rangierte Extraktionssequenz, die Liste toten Codes und einen Zeitstempel. Wir positionieren das als DORA-ICT-Asset-Inventar und als SOC-2-Change-Control-Beleg. Eine optionale Pydantic-AI-Schicht kann Fragen über den Abschluss beantworten, ist aber standardmäßig aus und schlüsselgesteuert, und die deterministische Demo zeichnet das Ergebnis ohne jeden Schlüssel auf.
Eine Änderung an einem Feld, aufgelöst gegen eine bekannte Ground-Truth-Menge. Jedes Bild unten ist ein Screenshot der laufenden App.
Die Standardansicht landet auf dem Überweisungs-Subsystem mit ausgewähltem TRN-LIMIT. Das Impact-Panel zeigt Graph-Abruf bei 9/9 (100%) gegen einen naiven Einzeldatei-Kontext von 3/9 (33%), bewertet gegen die bekannte Ground-Truth-Abhängigkeitsmenge der Fixture. Drei Fakten sind in der einen Datei sichtbar: WIRETXN verwendet TRN-LIMIT in einem COMPUTE (WIRETXN.cbl:33), das Copybook CBACCT wird namentlich importiert (WIRETXN.cbl:13), und ein UPDATE auf der DB2-Tabelle ACCOUNTS erfolgt (WIRETXN.cbl:37). Die sechs, die die Korrektheit entscheiden, sind es nicht: TRN-LIMIT ist ein PIC S9(9)V99 COMP-3 packed decimal, das ein BigDecimal werden muss und kein long (CBACCT.cpy:11), TRN-LIMIT-ALPHA REDEFINES es als Text über dieselben sechs Bytes (CBACCT.cpy:12), LIMIT-TYPE-FLAG entscheidet, welche Interpretation live ist (CBACCT.cpy:13), zwei Programme (LIMITSET und BATCHUPD) schreiben dieses Flag, und der JCL-Job NIGHTLY um 02:00 läuft vor WIREJOB, sodass das Flag gesetzt ist, bevor die Überweisung läuft.
Aktivieren Sie die naive AI-Kontextsicht, und der Graph verdunkelt sich auf das, was in WIRETXN.cbl liegt. Der COMP-3-Typ, das REDEFINES-Overlay, das steuernde Flag, seine zwei modulübergreifenden Schreiber und der 02:00-JCL-Vorgänger grauen alle aus, und ein rotes Banner nennt die Konsequenz: nur mit den drei sichtbaren Fakten ausgestattet, gibt ein Modell ein plain long TRN_LIMIT aus und schreibt korrumpierte Bytes in ACCOUNTS.TRN_LIMIT, das ist der UAT-Fehler. Das ist genau die Lücke kontextueller Blindheit, die ein Textfenster-Werkzeug strukturell nicht schließen kann, in einem Klick sichtbar gemacht.
Die Extraktionsansicht rangiert alle 14 Programme nach einem Kopplungs- und Blast-Radius-Score. AUDITLOG ist die sichere erste Extraktion auf Rang 1 mit einem Risiko-Score von 0 und null Kopplung. WIRETXN sitzt auf Rang 11 (Risiko 4, eine COMP-3-Falle plus JCL-Kritikalität). DISPATCH rangiert 12 (Risiko 5) wegen seines unaufgelösten dynamischen CALL, und das God-Program ACCTMGR wird zuletzt auf Rang 14 extrahiert (Kopplung 5, Risiko 15). Das ist eine Strangler-Fig-Reihenfolge, die Sie verteidigen können: niedrigstes Risiko zuerst, höchste Kopplung zuletzt.
Der Audit-Tab berichtet 97.1% der Referenzen aufgelöst, das sind 33 of 34, mit genau einem zur Prüfung markiert und nicht stillschweigend verworfen. Das eine ist DISPATCHs dynamischer CALL WS-PROGNAME, dessen Ziel zur Laufzeit berechnet wird (DISPATCH.cbl:15) und daher nicht statisch auflösbar ist. Der Tab listet außerdem toten Code nach Erreichbarkeit: AUDITLOGs Paragraph LEGACY-FORMAT und WIRETXNs Paragraph OLD-LIMIT-CHECK sind unerreichbar. Eine Auflösung vorzutäuschen zu verweigern ist das ehrliche Verhalten, und es ist das Verhalten, das ein Regulator sehen will.
Alles oben exportiert in einen druckbaren Codebase Topology and Completeness Report: die Zusammenfassung mit 47 Knoten und 70 Kanten, die 97.1% Abdeckung, die neun TRN-LIMIT-Abhängigkeitsfakten mit ihrer Einzeldatei-Sichtbarkeit und file:line-Provenienz, die rangierte Extraktionssequenz und einen Generierungszeitstempel. Weil das Estate synthetisch und verfasst ist, ist die wahre Abhängigkeitsmenge per Konstruktion bekannt, und genau das macht die Recall-Zahl zu einer reproduzierbaren gelabelten Messung statt einer Behauptung. Wir schreiben 9/9, 3/9 und 97.1% dieser ausgelieferten Fixture zu, niemals als Open-World-Garantie über beliebige COBOL-Estates.
Derselbe Schalter, gegen den die Demo vergleicht, nebeneinander, auf der Überweisungs-Fixture.
| Dimension | Einzeldatei-Kontextfenster | CodeGraph-Wissensgraph |
|---|---|---|
| Wiederhergestellte TRN-LIMIT-Abhängigkeiten | 3 of 9 | 9 of 9, gegen eine bekannte Ground-Truth-Menge |
| COMP-3-Typ über Copybooks hinweg | Unsichtbar | Aufgelöst mit file:line-Provenienz |
| REDEFINES-Overlay und steuerndes Flag | Unsichtbar | Aufgelöst, einschließlich modulübergreifender Schreiber |
| Nur-JCL-Ordnungskante (NIGHTLY vor WIREJOB) | Unsichtbar | Modelliert als PRECEDES-Kante |
| Vollständigkeitsbeweis | Keiner | 97.1% aufgelöst, Unaufgelöstes zur Prüfung markiert |
| Sichere Extraktionsreihenfolge | Keine | Rangiert nach Kopplung und Blast-Radius |
| Audit-Artefakt | Keines | Exportierbarer Topology- und Completeness-Report |
Nein. CodeGraph ist die Verständnisschicht, kein Übersetzer, und fügt bewusst kein COBOL ein und gibt kein Java aus. Es baut einen typisierten Abhängigkeitsgraphen Ihres Estates und löst den exakten transitiven Ausschnitt auf, den eine Änderung berührt, mit file:line-Provenienz und einem Vollständigkeitsbeweis. Übersetzung ist ein nachgelagerter Anwendungsfall, und jedes Übersetzungswerkzeug braucht diese Karte trotzdem, um zu wissen, was eine Änderung tatsächlich berührt.
Nein, und das ist der belastbare Punkt. Ein reales Estate umfasst 1 bis 10 Millionen Zeilen oder mehr und passt in kein Kontextfenster, weder heute noch künftig. Der harte Teil ist, den exakten transitiven Ausschnitt abzurufen und zu beweisen, dass Sie alles gefunden haben, was ein Topologie-, Abruf- und Evidenzproblem ist, kein Problem der Reasoning-Qualität. Ein perfektes Modell kann einem Regulator trotzdem nicht beweisen, welche Abhängigkeiten abgerufen wurden, braucht trotzdem eine sichere Extraktionsreihenfolge und schuldet trotzdem ein ICT-Asset-Inventar.
Das Completeness Gate verlangt, dass jeder PERFORM, CALL, COPY und jede DB2-Referenz entweder aufgelöst oder zur Prüfung markiert wird, niemals stillschweigend verworfen. Auf der ausgelieferten Fixture sind das 33 of 34 aufgelöste Referenzen, das ist 97.1% Abdeckung, mit der einen nicht auflösbaren Referenz markiert. Sie können einen druckbaren Codebase Topology and Completeness Report exportieren mit der Knoten- und Kantenzusammenfassung, Closures je Modul mit file:line-Provenienz, dem Recall-Ergebnis und der Methode, der rangierten Extraktionssequenz und der Liste toten Codes, positioniert als DORA-ICT-Asset-Inventar und SOC-2-Change-Control-Beleg.
Sie wird zur Prüfung markiert, nicht stillschweigend verworfen, und genau dieses ehrliche Verhalten ist der Punkt. Auf der Fixture ist die eine nicht auflösbare Referenz DISPATCHs dynamischer CALL WS-PROGNAME, dessen Ziel zur Laufzeit berechnet wird (DISPATCH.cbl:15), sodass es nicht statisch auflösbar ist. CodeGraph zeichnet es als prüfungsbedürftig auf und rangiert DISPATCH genau deshalb nahe am Ende der sicheren Extraktionsreihenfolge.
Nicht in dieser Demo. Der Graph liegt im Speicher plus SQLite, und die DB2-, JCL- und Scheduler-Eingaben sind Datei-Fixtures, während die naive Einzeldatei-Sicht ein simuliertes Kontextfenster ist. Ein Produktiv-Deployment würde eine Graphplattform wie Neo4j oder Memgraph benennen und Ihr reales Estate lesen, aber nichts hier impliziert eine Live-z/OS-Pipeline. Die Demo beweist den Mechanismus auf einem synthetischen Estate, kein Deployment.
Wir beanspruchen nicht, IBMs Parser oder den eines Systemintegrators zu schlagen, und der Demo-Parser deckt eine realistische synthetische Teilmenge von COBOL ab, nicht jeden Dialekt, ALTER oder OCCURS DEPENDING ON. Die Unterscheidung ist das Lieferergebnis: ein repository-bewusster Wissensgraph plus ein Vollständigkeitsbeweis und eine sichere Extraktionsreihenfolge, statt einer Übersetzung je Datei. Es ist die Verständnisschicht, die jede Übersetzungsanstrengung zuerst braucht, und es ist die Schicht, die ein besseres Basismodell nicht beseitigt.
Es ist eine lauffähige Demo, die den Mechanismus beweist, keine ausgerollte Pipeline. Das Bank-Estate ist synthetisch und für diese Demo verfasst, sodass die wahre Abhängigkeitsmenge per Konstruktion bekannt ist, und genau das macht die Recall-Metrik zu einer reproduzierbaren gelabelten Messung statt einer Behauptung. Das Parsen, der Graph und alle vier Analysen sind deterministisches schlichtes Python (FastAPI plus networkx, Cytoscape.js-UI), das ohne API-Schlüssel und ohne Datenbank läuft. Eine optionale LLM-Schicht für Fragenbeantwortung existiert, ist aber standardmäßig aus, und der Wert hängt nicht davon ab.
Die Forschung hinter dieser Demo — die Architektur, das Verifizierungsdesign und die Enterprise-Blaupause.
Vollständige Lösung
Entdecken Sie die Lösung Legacy COBOL Modernization →Die Verständnisschicht ist der harte Teil. Wir bauen zuerst die Karte.
Wenn Ihr Team abwägt, wie ein COBOL-Estate modernisiert werden kann, ohne eine UAT-Überraschung durch eine Abhängigkeit, die niemand sehen konnte, würden wir wirklich gern hören, wie Sie darüber nachdenken. Das Problem ist branchenweit, und die Antworten werden es auch sein.