כל מחשב מרכזי ארגוני מריץ שתי שפות שלובות זו בזו שרוב המפתחים המודרניים מעולם לא כתבו. COBOL מיישם לוגיקה עסקית, חישובים, עיבוד קבצים, טרנספורמציות רשומות ודיווח רגולטורי. JCL (שפת בקרת משימה) מתזמרת את ביצוע הלוגיקה הזו, מגדירה אילו תוכניות פועלות, באיזה סדר, עם אילו קבצים, באילו תנאים, ומה קורה כשהן מצליחות או נכשלות. אף אחת מהשפות אינה שלמה בלי השנייה. לתוכנית COBOL אין מושג מהיכן מגיעים קבצי הקלט שלה או לאן הולך הפלט שלה; JCL עונה על שתי השאלות לפני שהרשומה הראשונה נקראת.
עבור ארגונים המתחזקים, מבקרים או מודרניזים מערכות מיינפריים, הבנת הקשר בין JCL ל-COBOL אינה ידע רקע אופציונלי. זוהי תנאי הכרחי להכל: ניתוח השפעה לפני כל שינוי, תיעוד לפני כל הגירה, העברת ידע לפני פרישת מומחה כלשהו. התפקיד שמעבד את החיוב הלילי, ריצת האצווה שמייצרת דוחות רגולטוריים רבעוניים, ההליך שמזין נתונים ממערכת אחת לאחרת, כל אלה מוגדרים על ידי JCL, מבוצעים על ידי COBOL, ומובנים רק על ידי אוכלוסיית המהנדסים המצטמצמת שעבדה עם שניהם.
מה זה JCL?
JCL הוא ראשי תיבות של Job Control Language (שפת בקרת משימה). זוהי שפת הסקריפטים המשמשת במערכות מיינפריים של IBM לשליחת משימות אצווה לביצוע. JCL אינה מעבדת נתונים בעצמה. היא מורה למערכת ההפעלה כיצד להפעיל תוכניות: איזו תוכנית להפעיל, אילו קבצים להנגיש, אילו משאבי זיכרון ומעבד להקצות, מה לעשות אם שלב נכשל, ובאיזה רצף להפעיל מספר שלבים בתוך משימה אחת.
כל משימת JCL מורכבת משלושה סוגי משפטים בסיסיים:
הצהרת עבודה, מזהה את המשימה למערכת ומגדיר פרמטרים של חשבונאות, עדיפויות ותזמון.
הצהרת מנהלים, מציין את התוכנית או ההליך שיש לבצע בשלב מסוים.
הצהרת DD (הגדרת נתונים), מגדיר את מערכי הנתונים שהתוכנית תקרא או תכתוב, כולל מיקומם, הפורמט והמיקום שלהם.
jcl
//PAYBATCH JOB (ACCT#7), 'PAYROLL RUN',
// CLASS=A, MSGCLASS=X, NOTIFY=&SYSUID
//*
//STEP010 EXEC PGM=PAYROLL1
//STEPLIB DD DSN=PROD.PAYROLL.LOADLIB,DISP=SHR
//EMPFILE DD DSN=PROD.PAYROLL.EMPLOYEE,DISP=SHR
//TRANSACT DD DSN=PROD.PAYROLL.TRANS.D&&DATE,DISP=SHR
//PAYRPT DD SYSOUT=A
//SYSOUT DD SYSOUT=*
//SYSIN DD DUMMY
בדוגמה זו: PAYBATCH הוא שם התפקיד, STEP010 הוא שלב אחד בעבודה, PGM=PAYROLL1 קובעת את שם תוכנית ה-COBOL לביצוע, ומשפטי ה-DD מגדירים כל קובץ שהתוכנית יכולה לגשת אליו. PAYROLL1 לא יודע או לא אכפת לו איפה EMPFILE or TRANSACT אם הם מגיעים ממקור פיזי, הוא פשוט קורא אותם לפי שם ה-dd. JCL מפענח את המיקום הפיזי, את פורמט הרשומה ואת מצב הגישה לפני תחילת הביצוע.
נהלים מקוטלגים של JCL (PROCs)
במקום לכתוב את אותה תבנית JCL עבור כל משימה, צוותי מיינפריים מגדירים פרוצדורות מקוטלגות (PROCs) אשר מכילות דפוסי ביצוע רב פעמיים. PROC הוא תבנית המאוחסנת בספריית פרוצדורות; משימות בודדות מתייחסות אליה ועוקפות פרמטרים ספציפיים לפי הצורך.
jcl
//PAYPROC PROC RUNDATE=TODAY
//COMPILE EXEC PGM=IGYCRCTL,PARM='OBJECT,NODUMP'
//SYSIN DD DSN=PROD.COBOL.SRC(&MEMBER),DISP=SHR
//SYSOBJ DD DSN=&&OBJSET,DISP=(NEW,PASS),
// UNIT=SYSDA,SPACE=(TRK,(10,5))
//LKED EXEC PGM=IEWL,PARM='LIST,LET,XREF'
//SYSLIN DD DSN=&&OBJSET,DISP=(OLD,DELETE)
//SYSLMOD DD DSN=PROD.PAYROLL.LOADLIB(&MEMBER),
// DISP=SHR
// PEND
קריאה ל-PROC ממשימה:
jcl
//COMPILE EXEC PAYPROC,MEMBER=PAYROLL1,RUNDATE=20251205
משפט EXEC יחיד זה מתרחב ל-PROC המלא בזמן הביצוע, עם MEMBER ו RUNDATE מוחלף בכל מקום &MEMBER ו &RUNDATE מופיעים. פקודות PROC הן אחת הסיבות העיקריות לכך שמיפוי JCL ל-COBOL הוא מורכב: משימה עשויה להפעיל עשרות תוכניות COBOL דרך הפניה אחת של PROC, והתוכניות המופעלות בפועל תלויות בפרמטרים סמליים המשתנים מכל ריצה.
מה ההבדל בין JCL ל-COBOL?
JCL ו-COBOL מוזכרים לעתים קרובות יחד, אך הם ממלאים תפקידים שונים לחלוטין. אף אחד מהם אינו מחליף את השני, ושניהם נחוצים לתפקוד עיבוד אצווה של מיינפריים.
| מֵמַד | JCL | COBOL |
|---|---|---|
| מטרה | מתזמר את הביצוע | מיישם לוגיקה עסקית |
| מה זה מגדיר | משימות, שלבים, קבצים, תנאים | תוכניות, מבני נתונים, חישובים |
| כאשר זה פועל | לפני ביצוע התוכנית (התקנה) ואחריה (ניקוי) | במהלך ביצוע התוכנית |
| קורא/כותב נתונים | באמצעות הקצאת מערך נתונים (הצהרות DD) | דרך FILE SECTION ופקודות READ/WRITE |
| שגיאה בטיפול | קודי החזרה, ביצוע שלב מותנה | מטפלי חריגים, שגרות שגיאה של PERFORMS |
| ניידות | ספציפי ל-IBM z/OS | ניידות בין פלטפורמות בעזרת מהדרים |
| מי כותב את זה | מתכנתי מערכות, מהנדסי אצווה | מפתחי אפליקציות |
| מקבילה מודרנית | צינור CI/CD + תזמור מכולות | קוד אפליקציה (Java, Python, C++) |
הדרך הקלה ביותר לתאר את הקשר: JCL היא שכבת הפריסה והתזמור; COBOL היא שכבת היישומים. במערכת מודרנית המבוססת על ענן, תפקידה של JCL ימולא על ידי מניפסטי עבודה של Kubernetes, סקריפטי מעטפת ושלבי צינור CI/CD. תפקידה של COBOL ימולא על ידי שירותי יישומים שנכתבו ב-Java, Python או Go.
כיצד JCL מפעיל COBOL: שרשרת הביצוע
המסלול ממשימת JCL לביצוע COBOL עוקב אחר שרשרת עקבית. הבנת כל שלב היא הבסיס להבנת מה מפת JCL ל-COBOL חייבת ללכוד.
שלב 1: הגשת עבודה. משימת JCL נשלחת לתת-מערכת הזנת משימות (JES). JES מעביר את המשרה לתור ומתחיל לקרוא את ההצהרות שלה.
שלב 2: הגדרת שלב. עבור כל שלב EXEC, המערכת מאתרת את התוכנית בעלת השם בספריית הטעינה שצוינה על ידי משפט STEPLIB DD. אם לא צוין STEPLIB, המערכת מחפשת בספריית הקישורים של המערכת.
שלב 3: הקצאת מערך נתונים. לפני שהתוכנית רצה, המערכת מקצה את כל מערכי הנתונים שהוגדרו על ידי משפטי DD בשלב. זה כולל פתיחת קבצים, אימות קיומם של מערכי נתונים קלט ויצירת מערכי נתונים פלט.
שלב 4: ביצוע התוכנית. תוכנית COBOL מופעלת. היא ניגשת לקבצים באמצעות ddnames המוגדרים ב-JCL, OPEN INPUT EMPFILE ב-COBOL ממפה ישירות למשפט DD בשם EMPFILE ב-JCL.
שלב 5: הערכת קוד החזרה. כאשר תוכנית COBOL מסתיימת, היא מגדירה קוד החזרה (בדרך כלל 0 להצלחה, 4 לאזהרה, 8 לשגיאה, 12 או 16 לשגיאה חמורה). JCL משתמשת COND פרמטרים או IF/THEN/ELSE מבנים כדי לקבוע האם יש לבצע את השלבים הבאים בהתבסס על קוד זה.
שלב 6: סידור מערך הנתונים. לאחר השלב, המערכת מעבדת את הגדרות קבוצת הנתונים המוגדרות בכל משפט DD: שמירה, מחיקה, קטלוג, ביטול קטלוג או מעבר לשלב הבא.
הדוגמה הבאה מראה כיצד שרשרת זו נראית בפועל, JCL משמאל, אלמנטי COBOL המתאימים מימין:
jcl
//STEP020 EXEC PGM=ACCTREC
//STEPLIB DD DSN=PROD.ACCOUNT.LOADLIB,DISP=SHR
//INFILE DD DSN=PROD.ACCT.DAILY.INPUT,DISP=SHR ← maps to COBOL SELECT/ASSIGN
//OUTFILE DD DSN=PROD.ACCT.PROCESSED, ← maps to COBOL SELECT/ASSIGN
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,SPACE=(CYL,(5,2),RLSE)
//RPTFILE DD SYSOUT=A ← maps to COBOL WRITE report
//SYSOUT DD SYSOUT=*
תוכנית COBOL ACCTREC מכיל:
קובול
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INFILE ASSIGN TO INFILE. *> maps to DD INFILE
SELECT OUTFILE ASSIGN TO OUTFILE. *> maps to DD OUTFILE
SELECT RPTFILE ASSIGN TO RPTFILE. *> maps to DD RPTFILE
DATA DIVISION.
FILE SECTION.
FD INFILE
RECORDING MODE IS F
BLOCK CONTAINS 0 RECORDS
RECORD CONTAINS 200 CHARACTERS.
01 ACCOUNT-RECORD.
05 ACCT-NUMBER PIC X(10).
05 ACCT-BALANCE PIC S9(13)V99 COMP-3.
05 ACCT-STATUS PIC X(2).
השמיים SELECT INFILE ASSIGN TO INFILE במקטע FILE-CONTROL של COBOL מתחבר למשפט DD בשם INFILE ב-JCL. זהו יחסי המיפוי הבסיסיים: COBOL משתמש בשמות קבצים לוגיים; JCL מפענח אותם למערכי נתונים פיזיים.
קודי JCL Abend: מה המשמעות שלהם
קודי abend של JCL (קודי סיום חריגים) מזהים מדוע שלב במשימה הסתיים באופן בלתי צפוי. הם מופיעים בפלט המשימה כ- S000 (תקלה במערכת) או U0000 קודי (שבוע של משתמש). הבנתם חיונית לאבחון כשלים בעבודות אצווה.
| קוד אבנד | סוּג | גורם שכיח |
|---|---|---|
| S001 | מערכת | שגיאת קלט/פלט בקריאה או כתיבה של מערך נתונים |
| S013 | מערכת | אי התאמה בתכונות DCB, אורך רשומה או התאמה בפורמט בין JCL DD ו- COBOL FD |
| S0C4 | מערכת | חריג בהגנה על אחסון, התוכנית ניסתה לגשת לזיכרון מחוץ לאזור שהוקצה לה |
| S0C7 | מערכת | חריג נתונים, ניסיון חישוב על נתונים לא מספריים (חריגה נפוצה מאוד ב-COBOL) |
| S322 | מערכת | מגבלת הזמן חרגה, המשימה פעלה זמן רב יותר מהזמן המותר בפרמטר TIME |
| S806 | מערכת | מודול טעינה לא נמצא, תוכנית בשם ב-EXEC PGM= לא נמצאת באף ספריית טעינה שחיפשת |
| S913 | מערכת | הפרת אבטחת גישה למערכת נתונים, גישה שנדחתה על ידי RACF או מקבילה |
| U0000 | משתמש | תוכנית COBOL מוגדרת-אפליקציה, STOP RUN עם קוד משתמש |
| U4076 | משתמש | תקלה ספציפית ל-IMS, כשל בגישה למסד הנתונים |
תקלת הייצור הנפוצה ביותר, S0C7, מתרחש כאשר תוכנית COBOL מנסה לבצע חישוב על שדה המכיל רווחים או תווים שאינם מספריים. הסיבה האופיינית היא חוסר התאמה בין פורמט הנתונים הצפוי בתוכנית COBOL לבין הנתונים בפועל המסופקים על ידי JCL, וזה בדיוק סוג הפער שמיפוי JCL ל-COBOL מגלה לפני שהוא גורם לכשל ייצור בחצות.
פרמטר COND וביצוע מותנה
JCL שולט באילו שלבים פועלים בהתבסס על קודי החזרה משלבים קודמים באמצעות ה- COND פָּרָמֶטֶר:
jcl
//STEP010 EXEC PGM=VALIDATE,COND=(4,LT)
//STEP020 EXEC PGM=PROCESS, COND=(4,LT,STEP010)
//STEP030 EXEC PGM=CLEANUP, COND=(0,NE,STEP010)
COND=(4,LT) משמעות הדבר היא: דלג על שלב זה אם קוד ההחזרה של כל שלב קודם קטן מ-4. COND=(4,LT,STEP010) משמעות הדבר היא: דלג על שלב זה אם קוד ההחזרה של STEP010 קטן מ-4. COND=(0,NE,STEP010) פירושו: דלג על STEP030 אם קוד ההחזרה של STEP010 אינו שווה ל-0, כלומר, הפעל ניקוי רק אם STEP010 הצליח.
JCL המודרני משתמש ב- IF/THEN/ELSE/ENDIF מבנה במקום זאת, שהוא קריא יותר:
jcl
//IF010 IF (STEP010.RC = 0) THEN
//STEP020 EXEC PGM=PROCESS
// ENDIF
//IF020 IF (STEP010.RC > 4) THEN
//STEP030 EXEC PGM=ERRORHANDLER
// ENDIF
מיפוי נתיבי ביצוע מותנים הוא אחד האלמנטים הקריטיים והנפוץ ביותר שלא זוכים להבחנה בניתוח JCL ל-COBOL. תוכנית COBOL שפועלת רק כאשר שלב קודם נכשל עשויה לטפל בתנאי שגיאה, לוגיקת החזרה למצב קודם או הליכי שחזור, פונקציונליות שהיא בלתי נראית לחלוטין אם מסתכלים רק על מקור ה-COBOL ללא ה-JCL שמניע אותו.
JCL, COBOL ו-DB2: מחסנית שלוש השכבות
רוב מערכות הטרנזקציות המרכזיות כוללות רכיב שלישי לצד JCL ו-COBOL: DB2, מסד הנתונים הרלציוני של IBM. תוכניות COBOL ניגשות ל-DB2 דרך פקודות SQL מוטמעות (בלוקי EXEC SQL). JCL מנהלת את חיבור תת-המערכת של DB2 ואת ה-DBRM (מודול בקשת מסד נתונים) באמצעות פקודות DD ספציפיות.
jcl
//DBRM DD DSN=PROD.DBRMLIB.DATA(ACCTREC),DISP=SHR
//SYSPRINT DD SYSOUT=*
קובול
WORKING-STORAGE SECTION.
EXEC SQL
INCLUDE SQLCA
END-EXEC.
PROCEDURE DIVISION.
MAIN-LOGIC.
EXEC SQL
SELECT ACCT_BALANCE, ACCT_STATUS
INTO :WS-BALANCE, :WS-STATUS
FROM ACCOUNT_MASTER
WHERE ACCT_NUMBER = :WS-ACCT-NUM
END-EXEC.
IF SQLCODE NOT = 0
PERFORM DB2-ERROR-ROUTINE
END-IF.
במחסנית JCL-COBOL-DB2, JCL מספקת את סביבת זמן הריצה וגישה לנתוני הנתונים; COBOL מיישם לוגיקה עסקית וקורא למסד הנתונים; DB2 מאחסן ומאחזר נתונים בהתאם ל-SQL המוטמע בתוכנית COBOL. מפת תלויות מלאה של כל תוכנית COBOL המשתמשת ב-DB2 חייבת לכלול לא רק אילו עבודות JCL מפעילות אותה, אלא גם אילו טבלאות DB2 היא קוראת וכותבת, לאילו עמודות היא ניגשת, ואילו תוכניות אחרות ניגשות לאותן טבלאות, מכיוון ששינוי סכימה בטבלה משפיע על כל תוכנית COBOL שמפנה אליה.
מדוע מיפוי JCL ל-COBOL חשוב למודרניזציה
מיפוי JCL ל-COBOL אינו בעיקרו תרגיל טכני. זהו תרגיל ניהול סיכונים. כל שינוי במערכת מיינפריים, בין אם שינוי פרמטר JCL, הוספת שלב, שינוי שם של מערך נתונים או שינוי תוכנית ה-COBOL שמשימה מפעילה, נושא השלכות החורגות מעבר לרכיב שהשתנה. הדרך היחידה לתכנן את ההשלכות הללו במדויק לפני ביצוע שינוי היא שתהיה מפה מלאה של מה שקיים וכיצד הכל מתחבר.
לפני ההגירההעברת עומסי עבודה באצווה ממערכת המרכזית לענן דורשת לדעת אילו עבודות JCL קיימות, אילו תוכניות COBOL הן מפעילות, אילו מערכי נתונים זורמים בין שלבים, מהו רצף הביצוע ומה קורה כאשר שלבים נכשלים. ללא מפה זו, צוות ההעברה עובד מתיעוד חלקי, או ללא תיעוד כלל. שלבים מתפספסים. תלויות מתגלות בייצור. תאריכי חיתוך מחליפים.
לפני כל שינוי קודתוכנית COBOL ששונתה מבלי לבדוק אילו משימות JCL מפעילות אותה עלולה לשבש משימות הפועלות בתנאים שונים או עם תצורות שונות של מערך נתונים. שינוי בפרמטר JCL שנראה מקומי יכול להשפיע על התנהגותה של תוכנית COBOL המסתמכת על תכונות ספציפיות של מערך נתונים. ניתוח השפעה דורש הכרת שרשרת ה-JCL המלאה מ-COBOL למערך נתונים לפני ביצוע כל שינוי.
להעברת ידעכאשר מפתח COBOL שתחזק מערכת אצווה במשך עשרים שנה פורש לגמלאות, הוא לוקח איתו את המודל המנטלי של האופן שבו עבודות JCL ותוכניות COBOL מתחברות. מפה מתועדת היא המנגנון היחיד להעברת ידע זה לצוות הבא. בלעדיה, מפתחים חדשים יורשים מערכת שהם לא יכולים לשנות בבטחה.
עבור ביקורת תאימותביקורות רגולטוריות דורשות לעיתים קרובות הוכחה שחישובים פיננסיים, טרנספורמציות נתונים או בקרות גישה מתנהגים כפי שתועד. אם הקשר בין JCL ל-COBOL אינו מתועד, הוכחה זו בלתי אפשרית ללא הנדסה הפוכה של המערכת תחת לחץ ביקורת.
כלי ניהול ופלטפורמות ניתוח של JCL
האופי הרב-לשוני של נתוני Search Console עבור מאמר זה, עם שאילתות באיטלקית, צרפתית, ספרדית, יפנית וגרמנית שכולן שואלות על כלי ניהול JCL, משקף עד כמה קהילת ה-IT של מיינפריים מפוזרת ברחבי העולם ועד כמה צוותים בכל אזור מתמודדים באופן עקבי עם אותה בעיה: תיעוד JCL ו-COBOL שלהם אינו שלם, מיושן או לא קיים כלל.
הכלים הזמינים לניתוח וניהול JCL מתחלקים לשלוש קטגוריות:
כלים מקוריים של IBMIBM מציעה שירותי תת-מערכת הזנת עבודות, ניהול סלולים של JES ו-IBM z/OS Batch Runtime. אלה מטפלים בביצוע ובניטור אך אינם מספקים ניתוח או ויזואליזציה של תלות בין-תוכניות.
מתזמני משימות של צד שלישיCA7, TWS (Tivoli Workload Scheduler) ו-ESP Workload Automation של Broadcom מנהלים תזמון אצווה על פני אלפי משימות, מספקים תזמון מבוסס תלות ומתריעים על כשלים. הם מבינים תלויות ברמת המשימות אך בדרך כלל אינם מנתחים את תוכניות ה-COBOL המופעלות בכל שלב.
פלטפורמות לניתוח קוד סטטי ומיפוי תלותכלים המנתחים את קוד המקור של JCL ו-COBOL כדי לבנות מודל מבני של אילו משימות מפעילות אילו תוכניות, אילו תוכניות ניגשות לאילו מערכי נתונים, וכיצד נתונים זורמים במערכת. אלה מספקים נראות חוצת שכבות, שמתזמני משימות וכלים מקוריים של IBM אינם יכולים: הקשר בין משפט JCL DD ספציפי לבין ערך COBOL FILE-CONTROL שממופה אליו, או בין תוכנית COBOL שכותבת למערך נתונים לבין המשימה הבאה שקוראת את מערך הנתונים הזה כקלט.
SMART TS XL שייך לקטגוריה שלישית זו ומרחיב אותה כך שתכסה כל שפה בסביבת הארגון, COBOL, JCL, PL/I, אסמבלר, SQL, Java ואחרות, ומספק ניתוח מבני חוצה שפות שאף כלי בשפה אחת אינו יכול לספק.
איך SMART TS XL ממפה JCL ל-COBOL בקנה מידה ארגוני
מיפוי ידני של JCL ל-COBOL ניתן לניהול עבור משימה בודדת בשלושה שלבים. הוא אינו ניתן לניהול עבור ארגון עם 50,000 עבודות JCL, 200,000 תוכניות COBOL ומיליוני הפניות לערכת נתונים שנצברו במשך ארבעה עשורים. לא ניתן לעקוב ידנית בקנה מידה זה אחר הקשר בין PROC ספציפי, הפרמטרים הסמליים המשמשים להפעלתו, תוכניות COBOL שאליהם פרמטרים אלה נפתרים, ומערכות הנתונים שאליהם ניגשות התוכניות.
SMART TS XL מנתח קוד מקור של JCL ו-COBOL, כולל PROCs עם החלפת פרמטרים סמליים, פרוצדורות in-stream, חברי INCLUDE, overrides ולוגיקת ביצוע מותנית, ובונה מודל הפניה צולבת מאוחד המייצג כל קשר מבני במערכת. מודל זה ניתן לשאילתה, ניווט ותמיד עדכני מכיוון שהוא נוצר מחדש מהמקור במקום להיות מתוחזק כמסמך מעודכן ידנית.
השמיים הרחבת JCL היכולת פותרת החלפת פרמטרים סמליים כדי להציג את התוכניות ומערכי הנתונים בפועל המופעלים על ידי כל PROC, תוך התחשבות בעקיפות המיושמות על ידי כל משימת קריאה. PROC המשתמש &PGMNAME כפרמטר סמלי מופיע במודל ככל התוכניות הקונקרטיות שהוא פותר אליהן על פני כל הקוראים שלו, לא כהפניה בלתי פתורה.
השמיים מיפוי תלות יישומים היכולת בונה את הגרף המלא, החל ממשימת JCL דרך תוכנית COBOL, דרך טבלת DB2 ועד לתוכנית במורד הזרם, ומציגה כל רכיב במערכת וכל קשר ביניהם. לפני כל שינוי מודרניזציה, הצוות יכול לשאול: אילו משימות מפעילות תוכנית זו? אילו מערכי נתונים תוכנית זו קוראת? אילו תוכניות אחרות כותבות למערכי נתונים אלה? אילו משימות רצות בהמשך ברצף?
השמיים ניתוח השפעות היכולת מייצרת טווח מפורט של השלכות עבור כל שינוי מוצע: שינוי ספר עותקים זה וצפייה בכל תוכנית הכוללת אותו; שינוי פריסת מערך הנתונים וצפייה בכל משפט JCL DD המפנה אליו; הסרת שלב זה ממשימה וצפייה בכל שלב במורד הזרם שתלוי בפלט שלו.
עבור צוותים העומדים בפני מיפוי JCL ל-COBOL כחלק מ- מודרניזציה מורשת תָכְנִית, SMART TS XL מספק את הבסיס שספקי המודרניזציה, Astadia, TSRI, Advanced ואחרים, צריכים לפני תחילת כל עבודת המרה: מלאי מבני מלא ומדויק של מה שקיים, כך שהיקף ההמרה מוגדר על ידי ניתוח ולא על ידי הנחות.
המפה אינה הטריטוריה, אלא נקודת ההתחלה
JCL ו-COBOL לא ייעלמו. מערכות האצווה שמעבדות שכר, מטפלות בתביעות ביטוח, מפיקות דוחות רגולטוריים ומיישמות עסקאות פיננסיות ימשיכו לפעול על מחשבים מרכזיים בזמן שהגירות לענן מתוכננות, מאושרות, ממומנות ומבצעות, תהליך שבדרך כלל לוקח שנים ולא חודשים. במהלך שנים אלו, יש לתחזק, לשנות ולהבין את המערכות.
מיפוי JCL ל-COBOL אינו פרויקט חד פעמי. זוהי פרקטיקה מתמשכת: שמירה על המודל המבני עדכני ככל שתוכניות משתנות, מתווספות משימות ומערכי נתונים מאורגנים מחדש. הצוותים שמשקיעים בפרקטיקה זו שומרים על היכולת לבצע שינויים בטוחים במערכות שרוב התעשייה מתייחסת אליהם כקופסאות שחורות. הצוותים שלא עושים זאת מבצעים שינויים במערכות שהם לא יכולים לראות במלואן, בסביבות שבהן תלות שהוחמצה אינה מייצרת שגיאת קומפיילר, היא מייצרת כשל ייצור בשעה 3 לפנות בוקר במהלך ריצת האצווה הלילית.