COBOLモダナイゼーション・インテリジェンス
モダナイゼーション案件の大半が失敗するのは、ツールがコードをトポロジーではなくテキストとして読むからです。CodeGraphはメインフレーム資産を型付き知識グラフへ解析し、コピーブック、REDEFINES、COMP-3、DB2、JCLを横断して、変更の完全な推移的依存閉包を解決します。すべてのエッジにfile:line出所を付け、どれだけ解決できたかの証明を示します。地図がプロダクトです。翻訳は下流のユースケースです。
9/9 vs 3/9
回収された依存:グラフ対単一ファイルウィンドウ
TRN-LIMITフィクスチャで、既知のグランドトゥルース集合に対して
97.1%
解決された参照(33 of 34)、1件はレビュー対象としてフラグ
決定論的完全性ゲート、毎回同じ結果
47 / 70
7つのノード型にわたるノードとエッジ
出荷済みの合成銀行フィクスチャ
これは実行可能なデモです。資産はデモ用に作成された合成物であり、グラフはインメモリとSQLiteであり、DB2、JCL、および素朴な単一ファイルビューはファイルフィクスチャとシミュレーションであって、ライブコネクタではありません。
失敗モードは文脈的盲目であり、より大きなモデルでは取り除けません。
メインフレーム・モダナイゼーション案件の70 to 80%が目標を達成できません(業界メタ分析、2025)。翻訳が誤っているからではなく、ツールがコードをトポロジーではなくテキストとして扱うからです。汎用翻訳器は見える1ファイルだけを読みます。実際に重要な事実は、単一ファイルのコンテキストウィンドウでは不可視です。
利害は学術的ではありません。およそ220 billion行のCOBOLがいまも本番で動き、ATM取引の約95%、銀行システムの43%、1日あたり3 trillion dollarsの活動を担っています(Reuters, 2017)。対して、米国の累積技術的負債は推定1.52 trillion dollarsです(CISQ, 2022)。これは銀行と保険スタックの中核であり、まさに誰も盲目で触れたくないコードです。
具体的なたとえは、TRN-LIMITというフィールドで計算する電信送金プログラムです。翻訳器が見える1ファイルでは、算術は自明に見えます。しかしTRN-LIMITは3つのコピーブック先で定義されたCOMP-3パック10進であり、その解釈は別プログラムでセットされるフラグによって選ばれ、そのフラグは電信ジョブの前に走る午前2時のJCLバッチジョブが書き込みます。見える事実だけを渡されると、モデルはプレーンなlongを出力し、Javaはコンパイルし、単体テストは通り、そして最初の本番電信送金でデータベースを破損します。その参照整合性の失敗はUATで表面化します。失敗は文脈的盲目でした。
これはモデルが改善しても古びません。実際の資産は1 to 10 million行以上であり、現在も将来もどのコンテキストウィンドウにも収まりません。難しいのは、変更が触れる正確な推移スライスを取り出し、すべて見つけたことを証明することです。それはトポロジー、検索、証拠の問題であり、推論品質の問題ではありません。エージェントは助言し、コードが決める。
資産を型付きグラフへ解析し、次いで決定論的分析を実行します。クリティカルパスにLLMは入りません。
パイプラインはFixture estate、次いでparse(COBOL、コピーブック、JCL、DB2 DDL)、次いで型付き知識グラフの構築、次いで出所付き推移閉包インパクト、次いで決定論的分析、次いで監査とエビデンスのエクスポート、次いでインタラクティブダッシュボード、の順で走ります。読み込み時、アプリはこれをServer-Sent Events経由でライブ実行するので、各段階がコンソールに実測レイテンシで語り、パネルは段階的に埋まり、永続するステージレールで任意の段階のInput、Processing、Outputトレースを開けます。一つのコントロールで実行全体を再生します。
networkxで構築され、インメモリとSQLiteに保持されるグラフには、7つのノード型(program、copybook、variable、table、jcl、dataset、および未解決プレースホルダ)と、DEFINES、IMPORTS、REDEFINES、CONTROLS_TYPE_OF、WRITES_VAR、REFERENCES、CALLS、READS and WRITES、EXECUTES、USES_DATASET、PRECEDESといった型付きエッジがあります。出荷済みフィクスチャ上でグラフは47ノードと70エッジです:14 programs、5 copybooks、17 variables、3 DB2 tables、3 JCL jobs、4 datasets、1 unresolved node。
これらはプレーンなグラフアルゴリズムであり、モデル呼び出しではないため、同じフィクスチャは毎回同じ結果を生みます。
変更の推移的依存スライス。各エッジがそのfile:lineソースを運ぶので、影響を受けるものだけでなく、証拠がどこにあるかも見えます。
グラフの閉包を、フィクスチャの既知グランドトゥルース依存集合に対して採点し、シミュレーションした単一ファイルウィンドウ——テキストベースのツールが実際にモデルへ渡すもの——と対比します。
プログラムごとの結合度とブラスト半径スコア(結合度の重み3、COMP-3トラップの重み2、JCL重要度の重み2、未解決呼び出しの重み5)が、安全なストラングラーフィグ移行順を順位付けします。
すべてのPERFORM、CALL、COPY、およびDB2参照は解決されるか、要レビューとしてフラグされなければならず、黙って破棄されることはありません。到達不能な段落は例示として報告され、見出し指標としては採点されません。
トグル一つで差が手に取れます。素朴なAIコンテキストビューにチェックを入れると、グラフは数行のコンテキスト付きの単一ソースファイルへ暗くなります。電信送金の九つの事実のうち六つが消え、赤いバナーが帰結を述べ、戻せば証跡付きで9/9が復元されます。そのトグルは、検索レイヤーが供給しなければならないコンテキストの例示であり、価値の源泉ではありません。
終わったら、Export JSONはmigration-evidence.jsonファイルを書き、Evidence reportは印刷可能なCodebase Topology and Completeness Reportを描画します:ノードとエッジの要約、file:line出所付きのモジュールごとの閉包、再現率の結果と手法、順位付けされた抽出シーケンス、デッドコードリスト、タイムスタンプ。私たちはそれをDORA ICT資産インベントリおよびSOC-2変更管理の証跡として位置づけます。任意のPydantic-AIレイヤーは閉包に対して質問に答えられますが、既定ではオフでAPIキーでゲートされており、決定論的デモはキーなしで結果を記録します。
一つのフィールドに対する一つの変更を、既知のグランドトゥルース集合に対して解決。以下の画像はすべて、実行中のアプリのスクリーンショットです。
既定ビューは、TRN-LIMITが選択された電信送金サブシステムに着地します。インパクトパネルは、フィクスチャの既知グランドトゥルース依存集合に対して、グラフ検索が9/9(100%)、素朴な単一ファイルコンテキストが3/9(33%)と示します。1ファイルで見える事実は三つです:WIRETXNがCOMPUTEでTRN-LIMITを使う(WIRETXN.cbl:33)、コピーブックCBACCTが名前でインポートされる(WIRETXN.cbl:13)、DB2テーブルACCOUNTSへのUPDATEが起きる(WIRETXN.cbl:37)。正しさを決める六つは見えません:TRN-LIMITはPIC S9(9)V99 COMP-3パック10進であり、longではなくBigDecimalにしなければならない(CBACCT.cpy:11)、TRN-LIMIT-ALPHAが同じ6バイト上でテキストとしてREDEFINESする(CBACCT.cpy:12)、LIMIT-TYPE-FLAGがどちらの解釈が生きているかを決める(CBACCT.cpy:13)、二つのプログラム(LIMITSETとBATCHUPD)がそのフラグを書き、02:00のJCLジョブNIGHTLYがWIREJOBの前に走るので、電信が走る前にフラグがセットされます。
素朴なAIコンテキストビューにチェックを入れると、グラフはWIRETXN.cblの内部へ暗くなります。COMP-3型、REDEFINESオーバーレイ、制御フラグ、その二つのモジュール横断の書き込み側、02:00のJCL先行ジョブがすべてグレーアウトし、赤いバナーが帰結を述べます:見える三つの事実だけを渡されると、モデルはプレーンなlongのTRN_LIMITを出力し、壊れたバイトをACCOUNTS.TRN_LIMITへ書き込み、それがUAT失敗です。これはテキストウィンドウ型ツールが構造的に埋められない、まさに文脈的盲目のギャップを、ワンクリックで可視化したものです。
抽出ビューは、結合度とブラスト半径スコアですべての14 programsを順位付けします。AUDITLOGはrank 1、risk 0、結合度ゼロの安全な最初の抽出です。WIRETXNはrank 11(risk 4、COMP-3トラップ1つに加えJCL重要度)に位置します。DISPATCHは未解決の動的CALLのためrank 12(risk 5)、ゴッドプログラムACCTMGRは最後に抽出、rank 14(coupling 5、risk 15)です。それは擁護できるストラングラーフィグ順であり、最低リスクが先、最高結合度が最後です。
監査タブは、解決された参照が97.1%、すなわち33 of 34であり、ちょうど1件がレビュー対象としてフラグされ、黙って破棄されていないと報告します。その1件はDISPATCHの動的CALL WS-PROGNAMEであり、ターゲットは実行時に計算されるため(DISPATCH.cbl:15)、静的には解決できません。タブは到達可能性によるデッドコードも列挙します:AUDITLOGのLEGACY-FORMAT段落とWIRETXNのOLD-LIMIT-CHECK段落は到達不能です。解決を偽らないことが正直な振る舞いであり、規制当局が見たい振る舞いです。
上記のすべては、印刷可能なCodebase Topology and Completeness Reportへエクスポートされます:47ノード、70エッジの要約、97.1%カバレッジ、単一ファイル可視性とfile:line出所付きの九つのTRN-LIMIT依存事実、順位付けされた抽出シーケンス、生成タイムスタンプ。資産は合成で作成されているため、真の依存集合は構成上既知であり、だから再現率の数字は主張ではなく、再現可能なラベル付き測定になります。私たちは9/9、3/9、97.1%をこの出荷済みフィクスチャに帰属させ、任意のCOBOL資産に対するオープンワールド保証としては帰属させません。
デモが対比する同じトグルを、電信送金フィクスチャ上で並べて。
| 観点 | 単一ファイルのコンテキストウィンドウ | CodeGraph知識グラフ |
|---|---|---|
| 回収されたTRN-LIMIT依存 | 3 of 9 | 9 of 9、既知のグランドトゥルース集合に対して |
| コピーブックを横断するCOMP-3型 | 不可視 | file:line出所付きで解決 |
| REDEFINESオーバーレイと制御フラグ | 不可視 | 解決済み、モジュール横断の書き込み側も含む |
| JCLのみの順序エッジ(NIGHTLY before WIREJOB) | 不可視 | PRECEDESエッジとしてモデル化 |
| 完全性の証明 | なし | 97.1%解決、未解決はレビュー対象としてフラグ |
| 安全な抽出順序 | なし | 結合度とブラスト半径で順位付け |
| 監査成果物 | なし | エクスポート可能なトポロジーおよび完全性レポート |
いいえ。CodeGraphは理解レイヤーであって翻訳器ではなく、COBOLを貼り付けてJavaを出すことは意図的に行いません。資産の型付き依存グラフを構築し、変更が触れる正確な推移スライスを、file:line出所と完全性の証明付きで解決します。翻訳は下流のユースケースであり、あらゆる翻訳ツールが、変更が実際に何に触れるかを知るために、なおこの地図を必要とします。
いいえ、そしてそれが持続する論点です。実際の資産は1 to 10 million行以上であり、現在も将来もどのコンテキストウィンドウにも収まりません。難しいのは正確な推移スライスを取り出し、すべて見つけたことを証明することであり、それはトポロジー、検索、証拠の問題であって、推論品質の問題ではありません。完璧なモデルでも、どの依存が取り出されたかを規制当局に証明できず、なお安全な抽出順序を必要とし、なおICT資産インベントリを負います。
完全性ゲートは、すべてのPERFORM、CALL、COPY、およびDB2参照が解決されるか、レビュー対象としてフラグされることを要求し、黙って破棄されることはありません。出荷済みフィクスチャでは、解決された参照は33 of 34、すなわち97.1%カバレッジで、解決不能な1件はフラグされます。ノードとエッジの要約、file:line出所付きのモジュールごとの閉包、再現率の結果と手法、順位付けされた抽出シーケンス、デッドコードリストを含む印刷可能なCodebase Topology and Completeness Reportをエクスポートでき、DORA ICT資産インベントリおよびSOC-2変更管理の証跡として位置づけます。
レビュー対象としてフラグされ、黙って破棄されません。その正直な振る舞いが要点です。フィクスチャ上で解決不能な1件の参照はDISPATCHの動的CALL WS-PROGNAMEであり、ターゲットは実行時に計算されるため(DISPATCH.cbl:15)、静的には解決できません。CodeGraphはそれを要レビューとして記録し、まさにその理由でDISPATCHを安全な抽出順序の末尾近くに順位付けします。
このデモではしません。グラフはインメモリとSQLiteであり、DB2、JCL、スケジューラ入力はファイルフィクスチャ、素朴な単一ファイルビューはシミュレーションしたコンテキストウィンドウです。本番導入ではNeo4jやMemgraphのようなグラフ基盤を指名し、実際の資産を読みますが、ここにライブのz/OSパイプラインは含意されません。デモは合成資産上で仕組みを証明するのであって、導入ではありません。
IBMやシステムインテグレーターのパーサに勝つとは主張せず、デモのパーサは現実的な合成サブセットのCOBOLをカバーし、すべての方言、ALTER、OCCURS DEPENDING ONはカバーしません。違いは成果物です。ファイル単位の翻訳ではなく、リポジトリ認識型知識グラフに加え、完全性の証明と安全な抽出順序です。それはあらゆる翻訳の取り組みがまず必要とする理解レイヤーであり、より良い基盤モデルでは取り除けないレイヤーです。
仕組みを証明する実行可能なデモであり、導入済みパイプラインではありません。銀行資産は本デモ用に作成された合成物なので、真の依存集合は構成上既知であり、だから再現率メトリクスは主張ではなく、再現可能なラベル付き測定になります。解析、グラフ、四つの分析はすべて決定論的なプレーンPython(FastAPI plus networkx、Cytoscape.js UI)であり、APIキーもデータベースもなしで走ります。質問応答用の任意LLMレイヤーは存在しますが既定ではオフであり、価値はそれに依存しません。
このデモの背後にある研究——アーキテクチャ、検証設計、エンタープライズの青写真。
ソリューション全体
レガシーCOBOLモダナイゼーション・ソリューションを見る →理解レイヤーこそが難しい部分です。私たちはまず地図を構築します。
チームが、誰にも見えなかった依存からのUATサプライズなしにCOBOL資産をモダナイズする方法を検討しているなら、その考え方をぜひお聞かせください。問題は業界全体のものであり、答えもそうなるでしょう。