אינטליגנציית מודרניזציה של COBOL
רוב פרויקטי המודרניזציה נכשלים כי הכלים קוראים קוד כטקסט, לא כטופולוגיה. CodeGraph מפענח את נכס המיינפריים שלכם לגרף ידע מוטה-טיפוסים ופותר את הסגירה הטרנזיטיבית המלאה של תלויות של שינוי, על פני copybooks, REDEFINES, COMP-3, DB2 ו-JCL, עם מקור file:line לכל קשת והוכחה כמה הצליח לפתור. המפה היא המוצר. תרגום הוא תרחיש שימוש במורד הזרם.
9/9 מול 3/9
תלויות ששוחזרו: גרף מול חלון קובץ בודד
על מתקן TRN-LIMIT, מול סט אמת-ייחוס ידוע
97.1%
הפניות שפוענחו (33 of 34), 1 מסומן לבדיקה
שער שלמות דטרמיניסטי, אותה תוצאה בכל הרצה
47 / 70
צמתים וקשתות על פני 7 סוגי צמתים
מתקן הבנק הסינתטי שסופק
זו הדגמה ניתנת-להרצה. הנכס סינתטי ונכתב עבור ההדגמה, הגרף בזיכרון יחד עם SQLite, ותצוגות DB2, JCL והקובץ-הבודד הנאיבי הן קבצי מתקן וסימולציות, לא מחברים חיים.
אופן הכשל הוא עיוורון הקשרי, ומודל גדול יותר אינו מסיר אותו.
70 to 80% מפרויקטי מודרניזציית מיינפריים אינם עומדים ביעדיהם (מטא-אנליזה תעשייתית, 2025). לא כי התרגום שגוי, אלא כי הכלים מתייחסים לקוד כטקסט במקום כטופולוגיה. מתרגם מדף קורא את הקובץ האחד שהוא רואה. העובדה שבאמת חשובה בלתי נראית בחלון הקשר של קובץ בודד.
הסיכונים אינם אקדמיים. כ-220 billion שורות COBOL עדיין רצות בייצור, ונושאות כ-95% מעסקאות הכספומט, 43% ממערכות הבנקאות, ו-3 trillion דולר של פעילות ביום (Reuters, 2017), מול הערכת 1.52 trillion דולר של חוב טכני מצטבר בארה״ב (CISQ, 2022). זהו ליבת מחסנית הבנקאות והביטוח, וזה בדיוק הקוד שאף אחד לא רוצה לגעת בו בעיניים עצומות.
המשל המוחשי הוא תוכנית העברה בנקאית שמחשבת על שדה בשם TRN-LIMIT. בקובץ האחד שמתרגם יכול לראות, החשבון נראה טריוויאלי. אבל TRN-LIMIT הוא COMP-3 packed decimal המוגדר שלושה copybooks משם, הפרשנות שלו נבחרת על ידי דגל שמוגדר בתוכנית אחרת, ואת הדגל כותבת עבודת אצווה JCL בשעה 2 לפנות בוקר שרצה לפני עבודת ההעברה. כשמקבלים רק את העובדות הנראות, מודל פולט long פשוט, ה-Java מתקמפל, עובר בדיקות יחידה, ואז משחית את מסד הנתונים בהעברה החיה הראשונה. כשל שלמות-ההפניות הזה מתגלה ב-UAT. הכשל היה עיוורון הקשרי.
זה אינו מתיישן ככל שהמודלים משתפרים. נכס אמיתי הוא 1 to 10 million שורות או יותר ואינו נכנס לשום חלון הקשר, בהווה או בעתיד. החלק הקשה הוא לאחזר את הפרוסה הטרנזיטיבית המדויקת ששינוי נוגע בה ולהוכיח שמצאתם את כולה. זו בעיית טופולוגיה, אחזור וראיות, לא בעיית איכות-הסקה. סוכנים מייעצים, הקוד מחליט.
פענחו את הנכס לגרף מוטה-טיפוסים, ואז הריצו ניתוחים דטרמיניסטיים. אף LLM אינו יושב בנתיב הקריטי.
הצינור מריץ נכס מתקן, אחר כך פענוח (COBOL, copybooks, JCL, DB2 DDL), אחר כך בניית גרף ידע מוטה-טיפוסים, אחר כך השפעת סגירה טרנזיטיבית פלוס מקור, אחר כך הניתוחים הדטרמיניסטיים, אחר כך ייצוא ביקורת וראיות, אחר כך לוח הבקרה האינטראקטיבי. בטעינה האפליקציה מריצה זאת בשידור חי על Server-Sent Events, כך שכל שלב מקריין עם ההשהיה הנמדדת האמיתית שלו בקונסולה, הפאנלים מתמלאים בהדרגה, ומסילת שלבים קבועה מאפשרת לפתוח את עקבות הקלט, העיבוד והפלט של כל שלב. פקד יחיד מנגן מחדש את כל ההרצה.
בנוי עם networkx ומוחזק בזיכרון יחד עם SQLite, לגרף שבעה סוגי צמתים (program, copybook, variable, table, jcl, dataset, ומציין-מקום לא מפוענח) וקשתות טיפוסיות כגון DEFINES, IMPORTS, REDEFINES, CONTROLS_TYPE_OF, WRITES_VAR, REFERENCES, CALLS, READS ו-WRITES, EXECUTES, USES_DATASET ו-PRECEDES. במתקן שסופק לגרף 47 צמתים ו-70 קשתות: 14 programs, 5 copybooks, 17 variables, 3 טבלאות DB2, 3 עבודות JCL, 4 datasets, ו-1 צומת לא מפוענח.
אלה אלגוריתמי גרף פשוטים, לא קריאות למודל, כך שאותו מתקן מניב אותה תוצאה בכל הרצה.
פרוסת התלויות הטרנזיטיבית של שינוי, כשכל קשת נושאת את מקור file:line שלה, כך שניתן לראות לא רק מה מושפע אלא היכן חיה הראיה.
סגירת הגרף מנוקדת מול סט התלויות באמת-הייחוס הידועה של המתקן, מול חלון קובץ בודד מדומה, שהוא מה שכלי מבוסס-טקסט באמת מאכיל למודל.
ציון צימוד ורדיוס-פיצוץ לכל תוכנית (צימוד משוקלל שלוש, מלכודות COMP-3 משוקללות שתיים, קריטיות JCL משוקללת שתיים, קריאות לא מפוענחות משוקללות חמש) שמדרג סדר הגירת strangler-fig בטוח.
כל הפניית PERFORM, CALL, COPY ו-DB2 חייבת להתפענח או להיות מסומנת כדורשת בדיקה, לעולם לא להיות מושמטת בשקט. פסקאות בלתי-נגישות מדווחות כהמחשה, לא מנוקדות כמדד כותרת.
מתג אחד הופך את ההבדל למוחשי. סמנו את תצוגת ההקשר הנאיבית של AI והגרף מתעמעם לקובץ המקור הבודד עם כמה שורות הקשר. שש מתוך תשע עובדות ההעברה הבנקאית נעלמות, באנר אדום מציין את התוצאה, וההיפוך חזרה משחזר 9/9 עם קבלות. המתג הוא המחשה של איזה הקשר שכבת האחזור חייבת לספק, לא מקור הערך.
כשמסיימים, ייצוא JSON כותב קובץ migration-evidence.json, ודוח ראיות מייצר דוח Codebase Topology and Completeness Report להדפסה: סיכום הצמתים והקשתות, סגירות לכל מודול עם מקור file:line, תוצאת ה-recall והשיטה, רצף החילוץ המדורג, רשימת הקוד המת, וחותמת זמן. אנו ממקמים זאת כמלאי נכסי ICT של DORA וכתקבלה של בקרת-שינויים SOC-2. שכבת Pydantic-AI אופציונלית יכולה לענות על שאלות על הסגירה, אך היא כבויה כברירת מחדל ונעולה במפתח, וההדגמה הדטרמיניסטית מתעדת את התוצאה בלי כל מפתח.
שינוי אחד בשדה אחד, מפוענח מול סט אמת-ייחוס ידוע. כל תמונה למטה היא צילום מסך של האפליקציה הרצה.
תצוגת ברירת המחדל נוחתת על תת-מערכת ההעברה הבנקאית עם TRN-LIMIT נבחר. פאנל ההשפעה מציג שליפת גרף ב-9/9 (100%) מול הקשר קובץ-בודד נאיבי של 3/9 (33%), מנוקד מול סט התלויות באמת-הייחוס הידועה של המתקן. שלוש עובדות נראות בקובץ האחד: WIRETXN משתמש ב-TRN-LIMIT ב-COMPUTE (WIRETXN.cbl:33), copybook CBACCT מיובא בשם (WIRETXN.cbl:13), ו-UPDATE על טבלת DB2 ACCOUNTS מתרחש (WIRETXN.cbl:37). השש שמכריעות נכונות אינן: TRN-LIMIT הוא PIC S9(9)V99 COMP-3 packed decimal שחייב להפוך ל-BigDecimal ולא ל-long (CBACCT.cpy:11), TRN-LIMIT-ALPHA REDEFINES אותו כטקסט על אותם שישה בתים (CBACCT.cpy:12), LIMIT-TYPE-FLAG מחליט איזו פרשנות חיה (CBACCT.cpy:13), שתי תוכניות (LIMITSET ו-BATCHUPD) כותבות את הדגל, ועבודת JCL NIGHTLY ב-02:00 רצה לפני WIREJOB כך שהדגל מוגדר לפני שההעברה רצה.
סמנו את תצוגת ההקשר הנאיבית של AI והגרף מתעמעם למה שחי בתוך WIRETXN.cbl. טיפוס ה-COMP-3, שכבת-העל REDEFINES, דגל הבקרה, שני הכותבים חוצי-המודולים שלו, והקודם ב-JCL ב-02:00 כולם מתאפרים, ובאנר אדום מציין את התוצאה: כשמקבלים רק את שלוש העובדות הנראות, מודל פולט TRN_LIMIT מסוג long פשוט וכותב בתים משובשים ל-ACCOUNTS.TRN_LIMIT, שזה כשל ה-UAT. זה בדיוק פער העיוורון ההקשרי שכלי חלון-טקסט אינו יכול לסגור מבנית, נעשה נראה בלחיצה אחת.
תצוגת החילוץ מדרגת את כל 14 programs לפי ציון צימוד ורדיוס-פיצוץ. AUDITLOG הוא החילוץ הראשון הבטוח ב-rank 1 עם ציון סיכון 0 וצימוד אפס. WIRETXN יושב ב-rank 11 (risk 4, מלכודת COMP-3 אחת פלוס קריטיות JCL). DISPATCH ב-rank 12 (risk 5) בגלל CALL דינמי לא מפוענח, ותוכנית-האל ACCTMGR מחולצת אחרונה ב-rank 14 (coupling 5, risk 15). זה סדר strangler-fig שניתן להגן עליו, סיכון נמוך ביותר ראשון, צימוד גבוה ביותר אחרון.
לשונית הביקורת מדווחת על 97.1% מההפניות שפוענחו, שזה 33 of 34, עם בדיוק אחת מסומנת לבדיקה ולא מושמטת בשקט. זו CALL הדינמי WS-PROGNAME של DISPATCH, שמטרתו מחושבת בזמן ריצה (DISPATCH.cbl:15) ולכן לא ניתן לפענח אותה סטטית. הלשונית גם מפרטת קוד מת לפי נגישות: פסקת LEGACY-FORMAT של AUDITLOG ופסקת OLD-LIMIT-CHECK של WIRETXN אינן נגישות. הסירוב לזייף פענוח הוא ההתנהגות הישרה, וזו ההתנהגות שרגולטור רוצה לראות.
כל האמור לעיל מיוצא לדוח Codebase Topology and Completeness Report להדפסה: הסיכום של 47-node, 70-edge, הכיסוי 97.1%, תשע עובדות התלות של TRN-LIMIT עם נראות הקובץ-הבודד ומקור file:line, רצף החילוץ המדורג, וחותמת יצירה. מכיוון שהנכס סינתטי ונכתב, סט התלויות האמיתי ידוע מתוקף הבנייה, וזה מה שהופך את נתון ה-recall למדידה מתויגת שניתנת לשחזור ולא לטענה. אנו מייחסים 9/9, 3/9 ו-97.1% למתקן שסופק זה, לעולם לא כערבות עולם-פתוח על נכסי COBOL שרירותיים.
אותו מתג שההדגמה משווה מולו, זה לצד זה, על מתקן ההעברה הבנקאית.
| ממד | חלון הקשר של קובץ בודד | גרף הידע של CodeGraph |
|---|---|---|
| תלויות TRN-LIMIT ששוחזרו | 3 of 9 | 9 of 9, מול סט אמת-ייחוס ידוע |
| טיפוס COMP-3 על פני copybooks | בלתי נראה | מפוענח עם מקור 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%, עם ההפניה האחת שאינה ניתנת לפענוח מסומנת. ניתן לייצא דוח Codebase Topology and Completeness Report להדפסה עם סיכום הצמתים והקשתות, סגירות לכל מודול עם מקור file:line, תוצאת ה-recall והשיטה, רצף החילוץ המדורג, ורשימת הקוד המת, ממוקם כמלאי נכסי ICT של DORA וכתקבלה של בקרת-שינויים SOC-2.
היא מסומנת לבדיקה, לא מושמטת בשקט, והתנהגות הכנות הזו היא הנקודה. במתקן ההפניה האחת שאינה ניתנת לפענוח היא CALL הדינמי WS-PROGNAME של DISPATCH, שמטרתו מחושבת בזמן ריצה (DISPATCH.cbl:15), ולכן לא ניתן לפענח אותה סטטית. CodeGraph מתעד אותה כדורשת בדיקה ומדרג את DISPATCH ליד סוף סדר החילוץ הבטוח בדיוק מסיבה זו.
לא בהדגמה הזו. הגרף בזיכרון יחד עם SQLite, וקלטי DB2, JCL והמתזמן הם קבצי מתקן, בעוד תצוגת הקובץ הבודד הנאיבית היא חלון הקשר מדומה. פריסת ייצור הייתה נוקבת פלטפורמת גרף כגון Neo4j או Memgraph וקוראת את הנכס האמיתי שלכם, אך דבר כאן אינו מרמז על צינור z/OS חי. ההדגמה מוכיחה את המנגנון על נכס סינתטי, לא פריסה.
איננו טוענים שאנו מנצחים את המפענח של IBM או של אינטגרטור מערכות, ומפענח ההדגמה מכסה תת-קבוצה סינתטית מציאותית של COBOL, לא כל דיאלקט, ALTER, או OCCURS DEPENDING ON. ההבחנה היא בתוצר: גרף ידע ברמת המאגר פלוס הוכחת שלמות וסדר חילוץ בטוח, ולא תרגום לכל-קובץ. זו שכבת ההבנה שכל מאמץ תרגום צריך קודם, וזו השכבה שמודל בסיס טוב יותר אינו מסיר.
זו הדגמה ניתנת-להרצה שמוכיחה את המנגנון, לא צינור פרוס. נכס הבנק סינתטי ונכתב עבור ההדגמה הזו, כך שסט התלויות האמיתי ידוע מתוקף הבנייה, וזה מה שהופך את מדד ה-recall למדידה מתויגת שניתנת לשחזור ולא לטענה. הפענוח, הגרף, וכל ארבעת הניתוחים הם Python דטרמיניסטי פשוט (FastAPI פלוס networkx, ממשק Cytoscape.js) שרצים בלי מפתח API ובלי מסד נתונים. שכבת LLM אופציונלית לשאלות-ותשובות קיימת אך כבויה כברירת מחדל, והערך אינו תלוי בה.
המחקר מאחורי ההדגמה הזו — הארכיטקטורה, עיצוב האימות, ותכנית האב הארגונית.
פתרון מלא
חקרו את פתרון מודרניזציית COBOL המורשת →שכבת ההבנה היא החלק הקשה. אנו בונים את המפה קודם.
אם הצוות שלכם שוקל כיצד למודרן נכס COBOL בלי הפתעת UAT מתלות שאף אחד לא יכול היה לראות, נשמח באמת לשמוע איך אתם חושבים על כך. הבעיה היא כלל-תעשייתית וגם התשובות יהיו.