inlining control-flow jumps in library usage graphs of

36
Ruben Opdebeeck Johan Fabry Coen De Roover [email protected] [email protected] [email protected] Inlining Control-Flow Jumps in Library Usage Graphs of Legacy Code Presentation Abstract

Upload: others

Post on 30-Jun-2022

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Inlining Control-Flow Jumps in Library Usage Graphs of

Ruben Opdebeeck

Johan Fabry

Coen De Roover

[email protected]

[email protected]

[email protected]

Inlining Control-Flow Jumps in Library Usage Graphs of Legacy Code

Presentation Abstract

Page 2: Inlining Control-Flow Jumps in Library Usage Graphs of

COBOL Library Usage Pattern Mining2

IDENTIFICATION DIVISION. PROGRAM-ID. BARTHOL. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. COPY TRANCTRL. COPY ACCCTRL. COPY SCREENIOV. 01 M-MENU. 05 M-SELECTION PIC X(1) VALUE SPACES. 05 M-TITLE PIC X(40) VALUE "Barthol Bank - Main menu". 05 M-OPTION. 10 M-OPT1 15 M-OPT1-CODE PIC X VALUE 'A'. 15 M-OPT1-TEXT PIC X(40) VALUE "Manage accounts". 10 M-OPT3 15 M-OPT1-CODE PIC X VALUE 'T'. 15 M-OPT1-TEXT PIC X(40) VALUE "Manage transactions". 10 M-OPT4 15 M-OPT1-CODE PIC X VALUE SPACES. 15 M-OPT1-TEXT PIC X(40) VALUE SPACES. 10 M-OPT5 15 M-OPT1-CODE PIC X VALUE 'Q'. 15 M-OPT1-TEXT PIC X(40) VALUE "Quit application". 10 M-OPT99 15 M-OPT1-CODE PIC X VALUE LOW-VALUE. 15 M-OPT1-TEXT PIC X(40) VALUE LOW-VALUE. 01 WRK-VARS. 05 WRK-INPUT-VAR PIC X(10). PROCEDURE DIVISION. DISPLAY "Starting". PERFORM INIT-WORK. PERFORM MAIN-LOOP. PERFORM CLOSE-WORK. DISPLAY "Done". GOBACK. INIT-WORK. CALL "TRANIO" USING TRAN-CTRL-BLK. CALL "ACCIO" USING ACC-CTRL-BLK. MAIN-LOOP. PERFORM WITH TEST AFTER UNTIL M-SELECTION='Q' PERFORM CLS CALL "RMENU" USING M-MENU EVALUATE M-SELECTION WHEN 'A' PERFORM MANAGE-ACCOUNTS WHEN 'T' PERFORM MANAGE-TRANSACTIONS END-EVALUATE END-PERFORM. MANAGE-ACCOUNTS. CALL "ACCMENU".

IDENTIFICATION DIVISION. PROGRAM-ID. ACCMENU. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. COPY TRANCTRL. COPY ACCCTRL. COPY SCREENIOV. COPY ACCOUNT REPLACING ==:PREFIX:== BY ====. COPY ACCOUNT REPLACING ==:PREFIX:== BY ==T-==. COPY TRANL REPLACING ==:PREFIX:== BY ====. COPY TRAN REPLACING ==:PREFIX:== BY ====. 01 M-MENU. 05 M-SELECTION PIC X(1) VALUE SPACES. 05 M-TITLE PIC X(40) VALUE "Barthol Bank - Account menu". 05 M-OPTION. 10 M-OPT1 15 M-OPT1-CODE PIC X VALUE 'C'. 15 M-OPT1-TEXT PIC X(40) VALUE "Create account". 10 M-OPT2 15 M-OPT1-CODE PIC X VALUE 'S'. 15 M-OPT1-TEXT PIC X(40) VALUE "Select account". 10 M-OPT3 15 M-OPT1-CODE PIC X VALUE 'E'. 15 M-OPT1-TEXT PIC X(40) VALUE "Edit account". 10 M-OPT35 15 M-OPT1-CODE PIC X VALUE 'D'. 15 M-OPT1-TEXT PIC X(40) VALUE "Delete account". 10 M-OPT4 15 M-OPT1-CODE PIC X VALUE 'H'. 15 M-OPT1-TEXT PIC X(40) VALUE "Account history". 10 M-OPT5 15 M-OPT1-CODE PIC X VALUE 'L'. 15 M-OPT1-TEXT PIC X(40) VALUE "List bank status". 10 M-OPT6 15 M-OPT1-CODE PIC X VALUE SPACES. 15 M-OPT1-TEXT PIC X(40) VALUE SPACES. 10 M-OPT7 15 M-OPT1-CODE PIC X VALUE 'Q'. 15 M-OPT1-TEXT PIC X(40) VALUE "Quit menu". 10 M-OPT99 15 M-OPT1-CODE PIC X VALUE LOW-VALUE. 15 M-OPT1-TEXT PIC X(40) VALUE LOW-VALUE. 01 WRK-VARS. 05 WRK-INPUT-VAR PIC X(10). 05 W-ACC-ID PIC 9(5). 05 W-AMOUNT PIC -ZZZ9.99. PROCEDURE DIVISION. PERFORM INIT-WORK. PERFORM MAIN-LOOP. GOBACK. INIT-WORK.

Goal: Understand library usages to estimate modernisation effort

Page 3: Inlining Control-Flow Jumps in Library Usage Graphs of

COBOL Library Usage Pattern Mining2

IDENTIFICATION DIVISION. PROGRAM-ID. BARTHOL. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. COPY TRANCTRL. COPY ACCCTRL. COPY SCREENIOV. 01 M-MENU. 05 M-SELECTION PIC X(1) VALUE SPACES. 05 M-TITLE PIC X(40) VALUE "Barthol Bank - Main menu". 05 M-OPTION. 10 M-OPT1 15 M-OPT1-CODE PIC X VALUE 'A'. 15 M-OPT1-TEXT PIC X(40) VALUE "Manage accounts". 10 M-OPT3 15 M-OPT1-CODE PIC X VALUE 'T'. 15 M-OPT1-TEXT PIC X(40) VALUE "Manage transactions". 10 M-OPT4 15 M-OPT1-CODE PIC X VALUE SPACES. 15 M-OPT1-TEXT PIC X(40) VALUE SPACES. 10 M-OPT5 15 M-OPT1-CODE PIC X VALUE 'Q'. 15 M-OPT1-TEXT PIC X(40) VALUE "Quit application". 10 M-OPT99 15 M-OPT1-CODE PIC X VALUE LOW-VALUE. 15 M-OPT1-TEXT PIC X(40) VALUE LOW-VALUE. 01 WRK-VARS. 05 WRK-INPUT-VAR PIC X(10). PROCEDURE DIVISION. DISPLAY "Starting". PERFORM INIT-WORK. PERFORM MAIN-LOOP. PERFORM CLOSE-WORK. DISPLAY "Done". GOBACK. INIT-WORK. CALL "TRANIO" USING TRAN-CTRL-BLK. CALL "ACCIO" USING ACC-CTRL-BLK. MAIN-LOOP. PERFORM WITH TEST AFTER UNTIL M-SELECTION='Q' PERFORM CLS CALL "RMENU" USING M-MENU EVALUATE M-SELECTION WHEN 'A' PERFORM MANAGE-ACCOUNTS WHEN 'T' PERFORM MANAGE-TRANSACTIONS END-EVALUATE END-PERFORM. MANAGE-ACCOUNTS. CALL "ACCMENU".

IDENTIFICATION DIVISION. PROGRAM-ID. ACCMENU. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. COPY TRANCTRL. COPY ACCCTRL. COPY SCREENIOV. COPY ACCOUNT REPLACING ==:PREFIX:== BY ====. COPY ACCOUNT REPLACING ==:PREFIX:== BY ==T-==. COPY TRANL REPLACING ==:PREFIX:== BY ====. COPY TRAN REPLACING ==:PREFIX:== BY ====. 01 M-MENU. 05 M-SELECTION PIC X(1) VALUE SPACES. 05 M-TITLE PIC X(40) VALUE "Barthol Bank - Account menu". 05 M-OPTION. 10 M-OPT1 15 M-OPT1-CODE PIC X VALUE 'C'. 15 M-OPT1-TEXT PIC X(40) VALUE "Create account". 10 M-OPT2 15 M-OPT1-CODE PIC X VALUE 'S'. 15 M-OPT1-TEXT PIC X(40) VALUE "Select account". 10 M-OPT3 15 M-OPT1-CODE PIC X VALUE 'E'. 15 M-OPT1-TEXT PIC X(40) VALUE "Edit account". 10 M-OPT35 15 M-OPT1-CODE PIC X VALUE 'D'. 15 M-OPT1-TEXT PIC X(40) VALUE "Delete account". 10 M-OPT4 15 M-OPT1-CODE PIC X VALUE 'H'. 15 M-OPT1-TEXT PIC X(40) VALUE "Account history". 10 M-OPT5 15 M-OPT1-CODE PIC X VALUE 'L'. 15 M-OPT1-TEXT PIC X(40) VALUE "List bank status". 10 M-OPT6 15 M-OPT1-CODE PIC X VALUE SPACES. 15 M-OPT1-TEXT PIC X(40) VALUE SPACES. 10 M-OPT7 15 M-OPT1-CODE PIC X VALUE 'Q'. 15 M-OPT1-TEXT PIC X(40) VALUE "Quit menu". 10 M-OPT99 15 M-OPT1-CODE PIC X VALUE LOW-VALUE. 15 M-OPT1-TEXT PIC X(40) VALUE LOW-VALUE. 01 WRK-VARS. 05 WRK-INPUT-VAR PIC X(10). 05 W-ACC-ID PIC 9(5). 05 W-AMOUNT PIC -ZZZ9.99. PROCEDURE DIVISION. PERFORM INIT-WORK. PERFORM MAIN-LOOP. GOBACK. INIT-WORK.

IC102A (0)

IC102A (2)

order

DN1 (Group) (1)

use

use

IC102A (3)

use

order

IC102A (4)

order

IC102A (6)

order

DN2 (Group) (5)

use

use

STOP RUN (7)

order

418248 (no-op, L268) (8)

order

IC105A (0)

IC105A (3)

order

MAIN-DN2 (Group) (1)

use

use

IC105A (4)

use

IC105A (5)

use

MAIN-DN1 (Group) (2)

use

use

use

use

order

order

IC104A (6)

order

STOP RUN (10)

order

GROUP-02 (Group) (7)

use

GROUP-01 (Group) (8)

use

ELEM-77 (Group) (9)

use

1757336 (no-op, L272) (11)

order

IC107A (0)

STOP RUN (4)

order

TABLE-1 (Group) (1)

use

IDN1 (Group) (2)

use

TABLE-2 (Group) (3)

use

650331 (no-op, L275) (5)

order

IC109A (0)

STOP RUN (2)

order

GRP-01 (Group) (1)

use

454282 (no-op, L270) (3)

order

IC110A (0)

STOP PROGRAM (3)

order

GRP-01 (Group) (1)

use

WS1 (Group) (2)

use

IC111A (0)

STOP PROGRAM (4)

order

LS1 (Group) (1)

use

WS2 (Group) (2)

use

GRP-01 (Group) (3)

use

IC113A (0)

STOP RUN (6)

order

SQ-FS3R1-F-G-120 (Group) (1)

use

IC113A (5)

use

ERROR-FLAG (Group) (2)

use use

WRK-CS-09V00 (Group) (3)

use use

RECORDS-IN-ERROR (Group) (4)

use use

order

214890 (no-op, L343) (7)

order order

IC115A (0)

IC115A (3)

order

FILE-REC-SQ-FS3 (Group) (1)

use

use

IC115A (4)

use

IC115A (5)

use

IC115A (6)

use

GROUP-LINKAGE-VARIABLES (Group) (2)

use

use

use

use

useorder

order

order

STOP RUN (7)

order

180074 (no-op, L290) (8)

order

IC117M (0)

STOP RUN (1)

order

833320 (no-op, L279) (2)

order

IC118M (0)

STOP PROGRAM (1)

order

IC202A (0)

ID1[IC202A] (5)

order

DN3 (Group) (1)

use

use

ID2[] (6)

use

ID2[] (7)

use

ID1[IC202A] (9)

use

IC202A (11)

use

IC202A (12)

use

ID1[IC202A] (13)

use

ID1[IC202A] (14)

use

DN2 (Group) (2)

use

use

use

use

IC202A (8)

use

use

ID1[IC202A] (10)

use

use

use

use

use

DN4 (Group) (3)

use

use

use

use

use

use

use

use

use

DN1 (Group) (4)

use

use

use

use

use

use

use

use

use

use

use

order

order

order

order

order

order

order

order

order

STOP RUN (15)

order

518479 (no-op, L270) (16)

order

ID1[IC204A] (0)

ID1[IC204A] (3)

order

TABLE-1 (Group) (1)

use

use

IC204A (5)

use

IC204A (7)

use

IC204A (8)

use

ID1[IC204A] (10)

use

IC204A (11)

use

ID1[IC204A] (14)

use

IC205A (16)

use

ID1[IC204A] (18)

use

DN1 (Group) (2)

use

use

use

use

use

use

use

use

use

order

DN5 (Group) (4)

use

CANCEL IC204A (6)

order

order

order

CANCEL ID1[IC204A] (9)

order

order

order

CANCEL ID1[IC204A] (12)

order

CANCEL ID1[IC204A] (13)

order

order

CANCEL IC205A (15)

order

order

order

TABLE-2 (Group) (17)

use

CANCEL ID1[IC204A] (19)

order

STOP RUN (20)

order

1359146 (no-op, L272) (21)

order

Library Usages

Goal: Understand library usages to estimate modernisation effort

Page 4: Inlining Control-Flow Jumps in Library Usage Graphs of

COBOL Library Usage Pattern Mining2

IDENTIFICATION DIVISION. PROGRAM-ID. BARTHOL. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. COPY TRANCTRL. COPY ACCCTRL. COPY SCREENIOV. 01 M-MENU. 05 M-SELECTION PIC X(1) VALUE SPACES. 05 M-TITLE PIC X(40) VALUE "Barthol Bank - Main menu". 05 M-OPTION. 10 M-OPT1 15 M-OPT1-CODE PIC X VALUE 'A'. 15 M-OPT1-TEXT PIC X(40) VALUE "Manage accounts". 10 M-OPT3 15 M-OPT1-CODE PIC X VALUE 'T'. 15 M-OPT1-TEXT PIC X(40) VALUE "Manage transactions". 10 M-OPT4 15 M-OPT1-CODE PIC X VALUE SPACES. 15 M-OPT1-TEXT PIC X(40) VALUE SPACES. 10 M-OPT5 15 M-OPT1-CODE PIC X VALUE 'Q'. 15 M-OPT1-TEXT PIC X(40) VALUE "Quit application". 10 M-OPT99 15 M-OPT1-CODE PIC X VALUE LOW-VALUE. 15 M-OPT1-TEXT PIC X(40) VALUE LOW-VALUE. 01 WRK-VARS. 05 WRK-INPUT-VAR PIC X(10). PROCEDURE DIVISION. DISPLAY "Starting". PERFORM INIT-WORK. PERFORM MAIN-LOOP. PERFORM CLOSE-WORK. DISPLAY "Done". GOBACK. INIT-WORK. CALL "TRANIO" USING TRAN-CTRL-BLK. CALL "ACCIO" USING ACC-CTRL-BLK. MAIN-LOOP. PERFORM WITH TEST AFTER UNTIL M-SELECTION='Q' PERFORM CLS CALL "RMENU" USING M-MENU EVALUATE M-SELECTION WHEN 'A' PERFORM MANAGE-ACCOUNTS WHEN 'T' PERFORM MANAGE-TRANSACTIONS END-EVALUATE END-PERFORM. MANAGE-ACCOUNTS. CALL "ACCMENU".

IDENTIFICATION DIVISION. PROGRAM-ID. ACCMENU. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. COPY TRANCTRL. COPY ACCCTRL. COPY SCREENIOV. COPY ACCOUNT REPLACING ==:PREFIX:== BY ====. COPY ACCOUNT REPLACING ==:PREFIX:== BY ==T-==. COPY TRANL REPLACING ==:PREFIX:== BY ====. COPY TRAN REPLACING ==:PREFIX:== BY ====. 01 M-MENU. 05 M-SELECTION PIC X(1) VALUE SPACES. 05 M-TITLE PIC X(40) VALUE "Barthol Bank - Account menu". 05 M-OPTION. 10 M-OPT1 15 M-OPT1-CODE PIC X VALUE 'C'. 15 M-OPT1-TEXT PIC X(40) VALUE "Create account". 10 M-OPT2 15 M-OPT1-CODE PIC X VALUE 'S'. 15 M-OPT1-TEXT PIC X(40) VALUE "Select account". 10 M-OPT3 15 M-OPT1-CODE PIC X VALUE 'E'. 15 M-OPT1-TEXT PIC X(40) VALUE "Edit account". 10 M-OPT35 15 M-OPT1-CODE PIC X VALUE 'D'. 15 M-OPT1-TEXT PIC X(40) VALUE "Delete account". 10 M-OPT4 15 M-OPT1-CODE PIC X VALUE 'H'. 15 M-OPT1-TEXT PIC X(40) VALUE "Account history". 10 M-OPT5 15 M-OPT1-CODE PIC X VALUE 'L'. 15 M-OPT1-TEXT PIC X(40) VALUE "List bank status". 10 M-OPT6 15 M-OPT1-CODE PIC X VALUE SPACES. 15 M-OPT1-TEXT PIC X(40) VALUE SPACES. 10 M-OPT7 15 M-OPT1-CODE PIC X VALUE 'Q'. 15 M-OPT1-TEXT PIC X(40) VALUE "Quit menu". 10 M-OPT99 15 M-OPT1-CODE PIC X VALUE LOW-VALUE. 15 M-OPT1-TEXT PIC X(40) VALUE LOW-VALUE. 01 WRK-VARS. 05 WRK-INPUT-VAR PIC X(10). 05 W-ACC-ID PIC 9(5). 05 W-AMOUNT PIC -ZZZ9.99. PROCEDURE DIVISION. PERFORM INIT-WORK. PERFORM MAIN-LOOP. GOBACK. INIT-WORK.

IC102A (0)

IC102A (2)

order

DN1 (Group) (1)

use

use

IC102A (3)

use

order

IC102A (4)

order

IC102A (6)

order

DN2 (Group) (5)

use

use

STOP RUN (7)

order

418248 (no-op, L268) (8)

order

IC105A (0)

IC105A (3)

order

MAIN-DN2 (Group) (1)

use

use

IC105A (4)

use

IC105A (5)

use

MAIN-DN1 (Group) (2)

use

use

use

use

order

order

IC104A (6)

order

STOP RUN (10)

order

GROUP-02 (Group) (7)

use

GROUP-01 (Group) (8)

use

ELEM-77 (Group) (9)

use

1757336 (no-op, L272) (11)

order

IC107A (0)

STOP RUN (4)

order

TABLE-1 (Group) (1)

use

IDN1 (Group) (2)

use

TABLE-2 (Group) (3)

use

650331 (no-op, L275) (5)

order

IC109A (0)

STOP RUN (2)

order

GRP-01 (Group) (1)

use

454282 (no-op, L270) (3)

order

IC110A (0)

STOP PROGRAM (3)

order

GRP-01 (Group) (1)

use

WS1 (Group) (2)

use

IC111A (0)

STOP PROGRAM (4)

order

LS1 (Group) (1)

use

WS2 (Group) (2)

use

GRP-01 (Group) (3)

use

IC113A (0)

STOP RUN (6)

order

SQ-FS3R1-F-G-120 (Group) (1)

use

IC113A (5)

use

ERROR-FLAG (Group) (2)

use use

WRK-CS-09V00 (Group) (3)

use use

RECORDS-IN-ERROR (Group) (4)

use use

order

214890 (no-op, L343) (7)

order order

IC115A (0)

IC115A (3)

order

FILE-REC-SQ-FS3 (Group) (1)

use

use

IC115A (4)

use

IC115A (5)

use

IC115A (6)

use

GROUP-LINKAGE-VARIABLES (Group) (2)

use

use

use

use

useorder

order

order

STOP RUN (7)

order

180074 (no-op, L290) (8)

order

IC117M (0)

STOP RUN (1)

order

833320 (no-op, L279) (2)

order

IC118M (0)

STOP PROGRAM (1)

order

IC202A (0)

ID1[IC202A] (5)

order

DN3 (Group) (1)

use

use

ID2[] (6)

use

ID2[] (7)

use

ID1[IC202A] (9)

use

IC202A (11)

use

IC202A (12)

use

ID1[IC202A] (13)

use

ID1[IC202A] (14)

use

DN2 (Group) (2)

use

use

use

use

IC202A (8)

use

use

ID1[IC202A] (10)

use

use

use

use

use

DN4 (Group) (3)

use

use

use

use

use

use

use

use

use

DN1 (Group) (4)

use

use

use

use

use

use

use

use

use

use

use

order

order

order

order

order

order

order

order

order

STOP RUN (15)

order

518479 (no-op, L270) (16)

order

ID1[IC204A] (0)

ID1[IC204A] (3)

order

TABLE-1 (Group) (1)

use

use

IC204A (5)

use

IC204A (7)

use

IC204A (8)

use

ID1[IC204A] (10)

use

IC204A (11)

use

ID1[IC204A] (14)

use

IC205A (16)

use

ID1[IC204A] (18)

use

DN1 (Group) (2)

use

use

use

use

use

use

use

use

use

order

DN5 (Group) (4)

use

CANCEL IC204A (6)

order

order

order

CANCEL ID1[IC204A] (9)

order

order

order

CANCEL ID1[IC204A] (12)

order

CANCEL ID1[IC204A] (13)

order

order

CANCEL IC205A (15)

order

order

order

TABLE-2 (Group) (17)

use

CANCEL ID1[IC204A] (19)

order

STOP RUN (20)

order

1359146 (no-op, L272) (21)

order

Library Usages Pattern Mining

Goal: Understand library usages to estimate modernisation effort

Page 5: Inlining Control-Flow Jumps in Library Usage Graphs of

COBOL Library Usage Pattern Mining2

IDENTIFICATION DIVISION. PROGRAM-ID. BARTHOL. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. COPY TRANCTRL. COPY ACCCTRL. COPY SCREENIOV. 01 M-MENU. 05 M-SELECTION PIC X(1) VALUE SPACES. 05 M-TITLE PIC X(40) VALUE "Barthol Bank - Main menu". 05 M-OPTION. 10 M-OPT1 15 M-OPT1-CODE PIC X VALUE 'A'. 15 M-OPT1-TEXT PIC X(40) VALUE "Manage accounts". 10 M-OPT3 15 M-OPT1-CODE PIC X VALUE 'T'. 15 M-OPT1-TEXT PIC X(40) VALUE "Manage transactions". 10 M-OPT4 15 M-OPT1-CODE PIC X VALUE SPACES. 15 M-OPT1-TEXT PIC X(40) VALUE SPACES. 10 M-OPT5 15 M-OPT1-CODE PIC X VALUE 'Q'. 15 M-OPT1-TEXT PIC X(40) VALUE "Quit application". 10 M-OPT99 15 M-OPT1-CODE PIC X VALUE LOW-VALUE. 15 M-OPT1-TEXT PIC X(40) VALUE LOW-VALUE. 01 WRK-VARS. 05 WRK-INPUT-VAR PIC X(10). PROCEDURE DIVISION. DISPLAY "Starting". PERFORM INIT-WORK. PERFORM MAIN-LOOP. PERFORM CLOSE-WORK. DISPLAY "Done". GOBACK. INIT-WORK. CALL "TRANIO" USING TRAN-CTRL-BLK. CALL "ACCIO" USING ACC-CTRL-BLK. MAIN-LOOP. PERFORM WITH TEST AFTER UNTIL M-SELECTION='Q' PERFORM CLS CALL "RMENU" USING M-MENU EVALUATE M-SELECTION WHEN 'A' PERFORM MANAGE-ACCOUNTS WHEN 'T' PERFORM MANAGE-TRANSACTIONS END-EVALUATE END-PERFORM. MANAGE-ACCOUNTS. CALL "ACCMENU".

IDENTIFICATION DIVISION. PROGRAM-ID. ACCMENU. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. COPY TRANCTRL. COPY ACCCTRL. COPY SCREENIOV. COPY ACCOUNT REPLACING ==:PREFIX:== BY ====. COPY ACCOUNT REPLACING ==:PREFIX:== BY ==T-==. COPY TRANL REPLACING ==:PREFIX:== BY ====. COPY TRAN REPLACING ==:PREFIX:== BY ====. 01 M-MENU. 05 M-SELECTION PIC X(1) VALUE SPACES. 05 M-TITLE PIC X(40) VALUE "Barthol Bank - Account menu". 05 M-OPTION. 10 M-OPT1 15 M-OPT1-CODE PIC X VALUE 'C'. 15 M-OPT1-TEXT PIC X(40) VALUE "Create account". 10 M-OPT2 15 M-OPT1-CODE PIC X VALUE 'S'. 15 M-OPT1-TEXT PIC X(40) VALUE "Select account". 10 M-OPT3 15 M-OPT1-CODE PIC X VALUE 'E'. 15 M-OPT1-TEXT PIC X(40) VALUE "Edit account". 10 M-OPT35 15 M-OPT1-CODE PIC X VALUE 'D'. 15 M-OPT1-TEXT PIC X(40) VALUE "Delete account". 10 M-OPT4 15 M-OPT1-CODE PIC X VALUE 'H'. 15 M-OPT1-TEXT PIC X(40) VALUE "Account history". 10 M-OPT5 15 M-OPT1-CODE PIC X VALUE 'L'. 15 M-OPT1-TEXT PIC X(40) VALUE "List bank status". 10 M-OPT6 15 M-OPT1-CODE PIC X VALUE SPACES. 15 M-OPT1-TEXT PIC X(40) VALUE SPACES. 10 M-OPT7 15 M-OPT1-CODE PIC X VALUE 'Q'. 15 M-OPT1-TEXT PIC X(40) VALUE "Quit menu". 10 M-OPT99 15 M-OPT1-CODE PIC X VALUE LOW-VALUE. 15 M-OPT1-TEXT PIC X(40) VALUE LOW-VALUE. 01 WRK-VARS. 05 WRK-INPUT-VAR PIC X(10). 05 W-ACC-ID PIC 9(5). 05 W-AMOUNT PIC -ZZZ9.99. PROCEDURE DIVISION. PERFORM INIT-WORK. PERFORM MAIN-LOOP. GOBACK. INIT-WORK.

IC102A (0)

IC102A (2)

order

DN1 (Group) (1)

use

use

IC102A (3)

use

order

IC102A (4)

order

IC102A (6)

order

DN2 (Group) (5)

use

use

STOP RUN (7)

order

418248 (no-op, L268) (8)

order

IC105A (0)

IC105A (3)

order

MAIN-DN2 (Group) (1)

use

use

IC105A (4)

use

IC105A (5)

use

MAIN-DN1 (Group) (2)

use

use

use

use

order

order

IC104A (6)

order

STOP RUN (10)

order

GROUP-02 (Group) (7)

use

GROUP-01 (Group) (8)

use

ELEM-77 (Group) (9)

use

1757336 (no-op, L272) (11)

order

IC107A (0)

STOP RUN (4)

order

TABLE-1 (Group) (1)

use

IDN1 (Group) (2)

use

TABLE-2 (Group) (3)

use

650331 (no-op, L275) (5)

order

IC109A (0)

STOP RUN (2)

order

GRP-01 (Group) (1)

use

454282 (no-op, L270) (3)

order

IC110A (0)

STOP PROGRAM (3)

order

GRP-01 (Group) (1)

use

WS1 (Group) (2)

use

IC111A (0)

STOP PROGRAM (4)

order

LS1 (Group) (1)

use

WS2 (Group) (2)

use

GRP-01 (Group) (3)

use

IC113A (0)

STOP RUN (6)

order

SQ-FS3R1-F-G-120 (Group) (1)

use

IC113A (5)

use

ERROR-FLAG (Group) (2)

use use

WRK-CS-09V00 (Group) (3)

use use

RECORDS-IN-ERROR (Group) (4)

use use

order

214890 (no-op, L343) (7)

order order

IC115A (0)

IC115A (3)

order

FILE-REC-SQ-FS3 (Group) (1)

use

use

IC115A (4)

use

IC115A (5)

use

IC115A (6)

use

GROUP-LINKAGE-VARIABLES (Group) (2)

use

use

use

use

useorder

order

order

STOP RUN (7)

order

180074 (no-op, L290) (8)

order

IC117M (0)

STOP RUN (1)

order

833320 (no-op, L279) (2)

order

IC118M (0)

STOP PROGRAM (1)

order

IC202A (0)

ID1[IC202A] (5)

order

DN3 (Group) (1)

use

use

ID2[] (6)

use

ID2[] (7)

use

ID1[IC202A] (9)

use

IC202A (11)

use

IC202A (12)

use

ID1[IC202A] (13)

use

ID1[IC202A] (14)

use

DN2 (Group) (2)

use

use

use

use

IC202A (8)

use

use

ID1[IC202A] (10)

use

use

use

use

use

DN4 (Group) (3)

use

use

use

use

use

use

use

use

use

DN1 (Group) (4)

use

use

use

use

use

use

use

use

use

use

use

order

order

order

order

order

order

order

order

order

STOP RUN (15)

order

518479 (no-op, L270) (16)

order

ID1[IC204A] (0)

ID1[IC204A] (3)

order

TABLE-1 (Group) (1)

use

use

IC204A (5)

use

IC204A (7)

use

IC204A (8)

use

ID1[IC204A] (10)

use

IC204A (11)

use

ID1[IC204A] (14)

use

IC205A (16)

use

ID1[IC204A] (18)

use

DN1 (Group) (2)

use

use

use

use

use

use

use

use

use

order

DN5 (Group) (4)

use

CANCEL IC204A (6)

order

order

order

CANCEL ID1[IC204A] (9)

order

order

order

CANCEL ID1[IC204A] (12)

order

CANCEL ID1[IC204A] (13)

order

order

CANCEL IC205A (15)

order

order

order

TABLE-2 (Group) (17)

use

CANCEL ID1[IC204A] (19)

order

STOP RUN (20)

order

1359146 (no-op, L272) (21)

order

Library Usages Pattern Mining Library Usage Patterns

V1[C1] CANCEL V1[C1] C2 GOBACK

order order order

orderD3 (Group)D2 (Group)

D1 (Group)

use

use use

D5 (Group) D6 (Group)D4 (Group) D7 (Group)

use use

use

use

Goal: Understand library usages to estimate modernisation effort

Page 6: Inlining Control-Flow Jumps in Library Usage Graphs of

COBOL Library Usage Pattern Mining2

IDENTIFICATION DIVISION. PROGRAM-ID. BARTHOL. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. COPY TRANCTRL. COPY ACCCTRL. COPY SCREENIOV. 01 M-MENU. 05 M-SELECTION PIC X(1) VALUE SPACES. 05 M-TITLE PIC X(40) VALUE "Barthol Bank - Main menu". 05 M-OPTION. 10 M-OPT1 15 M-OPT1-CODE PIC X VALUE 'A'. 15 M-OPT1-TEXT PIC X(40) VALUE "Manage accounts". 10 M-OPT3 15 M-OPT1-CODE PIC X VALUE 'T'. 15 M-OPT1-TEXT PIC X(40) VALUE "Manage transactions". 10 M-OPT4 15 M-OPT1-CODE PIC X VALUE SPACES. 15 M-OPT1-TEXT PIC X(40) VALUE SPACES. 10 M-OPT5 15 M-OPT1-CODE PIC X VALUE 'Q'. 15 M-OPT1-TEXT PIC X(40) VALUE "Quit application". 10 M-OPT99 15 M-OPT1-CODE PIC X VALUE LOW-VALUE. 15 M-OPT1-TEXT PIC X(40) VALUE LOW-VALUE. 01 WRK-VARS. 05 WRK-INPUT-VAR PIC X(10). PROCEDURE DIVISION. DISPLAY "Starting". PERFORM INIT-WORK. PERFORM MAIN-LOOP. PERFORM CLOSE-WORK. DISPLAY "Done". GOBACK. INIT-WORK. CALL "TRANIO" USING TRAN-CTRL-BLK. CALL "ACCIO" USING ACC-CTRL-BLK. MAIN-LOOP. PERFORM WITH TEST AFTER UNTIL M-SELECTION='Q' PERFORM CLS CALL "RMENU" USING M-MENU EVALUATE M-SELECTION WHEN 'A' PERFORM MANAGE-ACCOUNTS WHEN 'T' PERFORM MANAGE-TRANSACTIONS END-EVALUATE END-PERFORM. MANAGE-ACCOUNTS. CALL "ACCMENU".

IDENTIFICATION DIVISION. PROGRAM-ID. ACCMENU. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. COPY TRANCTRL. COPY ACCCTRL. COPY SCREENIOV. COPY ACCOUNT REPLACING ==:PREFIX:== BY ====. COPY ACCOUNT REPLACING ==:PREFIX:== BY ==T-==. COPY TRANL REPLACING ==:PREFIX:== BY ====. COPY TRAN REPLACING ==:PREFIX:== BY ====. 01 M-MENU. 05 M-SELECTION PIC X(1) VALUE SPACES. 05 M-TITLE PIC X(40) VALUE "Barthol Bank - Account menu". 05 M-OPTION. 10 M-OPT1 15 M-OPT1-CODE PIC X VALUE 'C'. 15 M-OPT1-TEXT PIC X(40) VALUE "Create account". 10 M-OPT2 15 M-OPT1-CODE PIC X VALUE 'S'. 15 M-OPT1-TEXT PIC X(40) VALUE "Select account". 10 M-OPT3 15 M-OPT1-CODE PIC X VALUE 'E'. 15 M-OPT1-TEXT PIC X(40) VALUE "Edit account". 10 M-OPT35 15 M-OPT1-CODE PIC X VALUE 'D'. 15 M-OPT1-TEXT PIC X(40) VALUE "Delete account". 10 M-OPT4 15 M-OPT1-CODE PIC X VALUE 'H'. 15 M-OPT1-TEXT PIC X(40) VALUE "Account history". 10 M-OPT5 15 M-OPT1-CODE PIC X VALUE 'L'. 15 M-OPT1-TEXT PIC X(40) VALUE "List bank status". 10 M-OPT6 15 M-OPT1-CODE PIC X VALUE SPACES. 15 M-OPT1-TEXT PIC X(40) VALUE SPACES. 10 M-OPT7 15 M-OPT1-CODE PIC X VALUE 'Q'. 15 M-OPT1-TEXT PIC X(40) VALUE "Quit menu". 10 M-OPT99 15 M-OPT1-CODE PIC X VALUE LOW-VALUE. 15 M-OPT1-TEXT PIC X(40) VALUE LOW-VALUE. 01 WRK-VARS. 05 WRK-INPUT-VAR PIC X(10). 05 W-ACC-ID PIC 9(5). 05 W-AMOUNT PIC -ZZZ9.99. PROCEDURE DIVISION. PERFORM INIT-WORK. PERFORM MAIN-LOOP. GOBACK. INIT-WORK.

IC102A (0)

IC102A (2)

order

DN1 (Group) (1)

use

use

IC102A (3)

use

order

IC102A (4)

order

IC102A (6)

order

DN2 (Group) (5)

use

use

STOP RUN (7)

order

418248 (no-op, L268) (8)

order

IC105A (0)

IC105A (3)

order

MAIN-DN2 (Group) (1)

use

use

IC105A (4)

use

IC105A (5)

use

MAIN-DN1 (Group) (2)

use

use

use

use

order

order

IC104A (6)

order

STOP RUN (10)

order

GROUP-02 (Group) (7)

use

GROUP-01 (Group) (8)

use

ELEM-77 (Group) (9)

use

1757336 (no-op, L272) (11)

order

IC107A (0)

STOP RUN (4)

order

TABLE-1 (Group) (1)

use

IDN1 (Group) (2)

use

TABLE-2 (Group) (3)

use

650331 (no-op, L275) (5)

order

IC109A (0)

STOP RUN (2)

order

GRP-01 (Group) (1)

use

454282 (no-op, L270) (3)

order

IC110A (0)

STOP PROGRAM (3)

order

GRP-01 (Group) (1)

use

WS1 (Group) (2)

use

IC111A (0)

STOP PROGRAM (4)

order

LS1 (Group) (1)

use

WS2 (Group) (2)

use

GRP-01 (Group) (3)

use

IC113A (0)

STOP RUN (6)

order

SQ-FS3R1-F-G-120 (Group) (1)

use

IC113A (5)

use

ERROR-FLAG (Group) (2)

use use

WRK-CS-09V00 (Group) (3)

use use

RECORDS-IN-ERROR (Group) (4)

use use

order

214890 (no-op, L343) (7)

order order

IC115A (0)

IC115A (3)

order

FILE-REC-SQ-FS3 (Group) (1)

use

use

IC115A (4)

use

IC115A (5)

use

IC115A (6)

use

GROUP-LINKAGE-VARIABLES (Group) (2)

use

use

use

use

useorder

order

order

STOP RUN (7)

order

180074 (no-op, L290) (8)

order

IC117M (0)

STOP RUN (1)

order

833320 (no-op, L279) (2)

order

IC118M (0)

STOP PROGRAM (1)

order

IC202A (0)

ID1[IC202A] (5)

order

DN3 (Group) (1)

use

use

ID2[] (6)

use

ID2[] (7)

use

ID1[IC202A] (9)

use

IC202A (11)

use

IC202A (12)

use

ID1[IC202A] (13)

use

ID1[IC202A] (14)

use

DN2 (Group) (2)

use

use

use

use

IC202A (8)

use

use

ID1[IC202A] (10)

use

use

use

use

use

DN4 (Group) (3)

use

use

use

use

use

use

use

use

use

DN1 (Group) (4)

use

use

use

use

use

use

use

use

use

use

use

order

order

order

order

order

order

order

order

order

STOP RUN (15)

order

518479 (no-op, L270) (16)

order

ID1[IC204A] (0)

ID1[IC204A] (3)

order

TABLE-1 (Group) (1)

use

use

IC204A (5)

use

IC204A (7)

use

IC204A (8)

use

ID1[IC204A] (10)

use

IC204A (11)

use

ID1[IC204A] (14)

use

IC205A (16)

use

ID1[IC204A] (18)

use

DN1 (Group) (2)

use

use

use

use

use

use

use

use

use

order

DN5 (Group) (4)

use

CANCEL IC204A (6)

order

order

order

CANCEL ID1[IC204A] (9)

order

order

order

CANCEL ID1[IC204A] (12)

order

CANCEL ID1[IC204A] (13)

order

order

CANCEL IC205A (15)

order

order

order

TABLE-2 (Group) (17)

use

CANCEL ID1[IC204A] (19)

order

STOP RUN (20)

order

1359146 (no-op, L272) (21)

order

Library Usages Pattern Mining Library Usage Patterns

V1[C1] CANCEL V1[C1] C2 GOBACK

order order order

orderD3 (Group)D2 (Group)

D1 (Group)

use

use use

D5 (Group) D6 (Group)D4 (Group) D7 (Group)

use use

use

use

Goal: Understand library usages to estimate modernisation effort

Page 7: Inlining Control-Flow Jumps in Library Usage Graphs of

COBOL Library Usage Pattern Mining2

IDENTIFICATION DIVISION. PROGRAM-ID. BARTHOL. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. COPY TRANCTRL. COPY ACCCTRL. COPY SCREENIOV. 01 M-MENU. 05 M-SELECTION PIC X(1) VALUE SPACES. 05 M-TITLE PIC X(40) VALUE "Barthol Bank - Main menu". 05 M-OPTION. 10 M-OPT1 15 M-OPT1-CODE PIC X VALUE 'A'. 15 M-OPT1-TEXT PIC X(40) VALUE "Manage accounts". 10 M-OPT3 15 M-OPT1-CODE PIC X VALUE 'T'. 15 M-OPT1-TEXT PIC X(40) VALUE "Manage transactions". 10 M-OPT4 15 M-OPT1-CODE PIC X VALUE SPACES. 15 M-OPT1-TEXT PIC X(40) VALUE SPACES. 10 M-OPT5 15 M-OPT1-CODE PIC X VALUE 'Q'. 15 M-OPT1-TEXT PIC X(40) VALUE "Quit application". 10 M-OPT99 15 M-OPT1-CODE PIC X VALUE LOW-VALUE. 15 M-OPT1-TEXT PIC X(40) VALUE LOW-VALUE. 01 WRK-VARS. 05 WRK-INPUT-VAR PIC X(10). PROCEDURE DIVISION. DISPLAY "Starting". PERFORM INIT-WORK. PERFORM MAIN-LOOP. PERFORM CLOSE-WORK. DISPLAY "Done". GOBACK. INIT-WORK. CALL "TRANIO" USING TRAN-CTRL-BLK. CALL "ACCIO" USING ACC-CTRL-BLK. MAIN-LOOP. PERFORM WITH TEST AFTER UNTIL M-SELECTION='Q' PERFORM CLS CALL "RMENU" USING M-MENU EVALUATE M-SELECTION WHEN 'A' PERFORM MANAGE-ACCOUNTS WHEN 'T' PERFORM MANAGE-TRANSACTIONS END-EVALUATE END-PERFORM. MANAGE-ACCOUNTS. CALL "ACCMENU".

IDENTIFICATION DIVISION. PROGRAM-ID. ACCMENU. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. COPY TRANCTRL. COPY ACCCTRL. COPY SCREENIOV. COPY ACCOUNT REPLACING ==:PREFIX:== BY ====. COPY ACCOUNT REPLACING ==:PREFIX:== BY ==T-==. COPY TRANL REPLACING ==:PREFIX:== BY ====. COPY TRAN REPLACING ==:PREFIX:== BY ====. 01 M-MENU. 05 M-SELECTION PIC X(1) VALUE SPACES. 05 M-TITLE PIC X(40) VALUE "Barthol Bank - Account menu". 05 M-OPTION. 10 M-OPT1 15 M-OPT1-CODE PIC X VALUE 'C'. 15 M-OPT1-TEXT PIC X(40) VALUE "Create account". 10 M-OPT2 15 M-OPT1-CODE PIC X VALUE 'S'. 15 M-OPT1-TEXT PIC X(40) VALUE "Select account". 10 M-OPT3 15 M-OPT1-CODE PIC X VALUE 'E'. 15 M-OPT1-TEXT PIC X(40) VALUE "Edit account". 10 M-OPT35 15 M-OPT1-CODE PIC X VALUE 'D'. 15 M-OPT1-TEXT PIC X(40) VALUE "Delete account". 10 M-OPT4 15 M-OPT1-CODE PIC X VALUE 'H'. 15 M-OPT1-TEXT PIC X(40) VALUE "Account history". 10 M-OPT5 15 M-OPT1-CODE PIC X VALUE 'L'. 15 M-OPT1-TEXT PIC X(40) VALUE "List bank status". 10 M-OPT6 15 M-OPT1-CODE PIC X VALUE SPACES. 15 M-OPT1-TEXT PIC X(40) VALUE SPACES. 10 M-OPT7 15 M-OPT1-CODE PIC X VALUE 'Q'. 15 M-OPT1-TEXT PIC X(40) VALUE "Quit menu". 10 M-OPT99 15 M-OPT1-CODE PIC X VALUE LOW-VALUE. 15 M-OPT1-TEXT PIC X(40) VALUE LOW-VALUE. 01 WRK-VARS. 05 WRK-INPUT-VAR PIC X(10). 05 W-ACC-ID PIC 9(5). 05 W-AMOUNT PIC -ZZZ9.99. PROCEDURE DIVISION. PERFORM INIT-WORK. PERFORM MAIN-LOOP. GOBACK. INIT-WORK.

IC102A (0)

IC102A (2)

order

DN1 (Group) (1)

use

use

IC102A (3)

use

order

IC102A (4)

order

IC102A (6)

order

DN2 (Group) (5)

use

use

STOP RUN (7)

order

418248 (no-op, L268) (8)

order

IC105A (0)

IC105A (3)

order

MAIN-DN2 (Group) (1)

use

use

IC105A (4)

use

IC105A (5)

use

MAIN-DN1 (Group) (2)

use

use

use

use

order

order

IC104A (6)

order

STOP RUN (10)

order

GROUP-02 (Group) (7)

use

GROUP-01 (Group) (8)

use

ELEM-77 (Group) (9)

use

1757336 (no-op, L272) (11)

order

IC107A (0)

STOP RUN (4)

order

TABLE-1 (Group) (1)

use

IDN1 (Group) (2)

use

TABLE-2 (Group) (3)

use

650331 (no-op, L275) (5)

order

IC109A (0)

STOP RUN (2)

order

GRP-01 (Group) (1)

use

454282 (no-op, L270) (3)

order

IC110A (0)

STOP PROGRAM (3)

order

GRP-01 (Group) (1)

use

WS1 (Group) (2)

use

IC111A (0)

STOP PROGRAM (4)

order

LS1 (Group) (1)

use

WS2 (Group) (2)

use

GRP-01 (Group) (3)

use

IC113A (0)

STOP RUN (6)

order

SQ-FS3R1-F-G-120 (Group) (1)

use

IC113A (5)

use

ERROR-FLAG (Group) (2)

use use

WRK-CS-09V00 (Group) (3)

use use

RECORDS-IN-ERROR (Group) (4)

use use

order

214890 (no-op, L343) (7)

order order

IC115A (0)

IC115A (3)

order

FILE-REC-SQ-FS3 (Group) (1)

use

use

IC115A (4)

use

IC115A (5)

use

IC115A (6)

use

GROUP-LINKAGE-VARIABLES (Group) (2)

use

use

use

use

useorder

order

order

STOP RUN (7)

order

180074 (no-op, L290) (8)

order

IC117M (0)

STOP RUN (1)

order

833320 (no-op, L279) (2)

order

IC118M (0)

STOP PROGRAM (1)

order

IC202A (0)

ID1[IC202A] (5)

order

DN3 (Group) (1)

use

use

ID2[] (6)

use

ID2[] (7)

use

ID1[IC202A] (9)

use

IC202A (11)

use

IC202A (12)

use

ID1[IC202A] (13)

use

ID1[IC202A] (14)

use

DN2 (Group) (2)

use

use

use

use

IC202A (8)

use

use

ID1[IC202A] (10)

use

use

use

use

use

DN4 (Group) (3)

use

use

use

use

use

use

use

use

use

DN1 (Group) (4)

use

use

use

use

use

use

use

use

use

use

use

order

order

order

order

order

order

order

order

order

STOP RUN (15)

order

518479 (no-op, L270) (16)

order

ID1[IC204A] (0)

ID1[IC204A] (3)

order

TABLE-1 (Group) (1)

use

use

IC204A (5)

use

IC204A (7)

use

IC204A (8)

use

ID1[IC204A] (10)

use

IC204A (11)

use

ID1[IC204A] (14)

use

IC205A (16)

use

ID1[IC204A] (18)

use

DN1 (Group) (2)

use

use

use

use

use

use

use

use

use

order

DN5 (Group) (4)

use

CANCEL IC204A (6)

order

order

order

CANCEL ID1[IC204A] (9)

order

order

order

CANCEL ID1[IC204A] (12)

order

CANCEL ID1[IC204A] (13)

order

order

CANCEL IC205A (15)

order

order

order

TABLE-2 (Group) (17)

use

CANCEL ID1[IC204A] (19)

order

STOP RUN (20)

order

1359146 (no-op, L272) (21)

order

Library Usages Pattern Mining Library Usage Patterns

V1[C1] CANCEL V1[C1] C2 GOBACK

order order order

orderD3 (Group)D2 (Group)

D1 (Group)

use

use use

D5 (Group) D6 (Group)D4 (Group) D7 (Group)

use use

use

use

Goal: Understand library usages to estimate modernisation effort

Today

Page 8: Inlining Control-Flow Jumps in Library Usage Graphs of

Groums for OO languages3

Collection.stream()List Predicate

Stream.filter(Predicate)Stream

Stream.count() Streamlong

order

order

use

use

use

use

def

def

def

void my_method(List<String> lst) { return lst.stream() .filter(s -> s.startsWith("test_")) .count(); }

Graph-based object usage modelJava snippet using Collection API

Page 9: Inlining Control-Flow Jumps in Library Usage Graphs of

Groums for OO languages3

Collection.stream()List Predicate

Stream.filter(Predicate)Stream

Stream.count() Streamlong

order

order

use

use

use

use

def

def

def

void my_method(List<String> lst) { return lst.stream() .filter(s -> s.startsWith("test_")) .count(); }

Graph-based object usage modelJava snippet using Collection API

Library calls

Control flow

Page 10: Inlining Control-Flow Jumps in Library Usage Graphs of

Groums for OO languages3

Collection.stream()List Predicate

Stream.filter(Predicate)Stream

Stream.count() Streamlong

order

order

use

use

use

use

def

def

def

void my_method(List<String> lst) { return lst.stream() .filter(s -> s.startsWith("test_")) .count(); }

Graph-based object usage modelJava snippet using Collection API

Data

Data flow

Page 11: Inlining Control-Flow Jumps in Library Usage Graphs of

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3.

PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

COBOL Primer4

Page 12: Inlining Control-Flow Jumps in Library Usage Graphs of

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3.

PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

COBOL Primer4

Paragraphs

Page 13: Inlining Control-Flow Jumps in Library Usage Graphs of

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3.

PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

COBOL Primer4

Call statement Calls an external program.

“Library call”Perform statement

Jump to P1, execute until P3, jump back

Go to statement Jump to P3 and continue

execution

Page 14: Inlining Control-Flow Jumps in Library Usage Graphs of

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3.

PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

COBOL Primer4

Jumping leads to complex control flow

Page 15: Inlining Control-Flow Jumps in Library Usage Graphs of

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3.

PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

Groums for COBOL5

Single paragraph (often) too small

Page 16: Inlining Control-Flow Jumps in Library Usage Graphs of

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3.

PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

Groums for COBOL5

Single paragraph (often) too small

Inter-paragraph Groums

Page 17: Inlining Control-Flow Jumps in Library Usage Graphs of

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3.

PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

Groums for COBOL5

Single paragraph (often) too small

Inter-paragraph Groums

Inter-paragraph control flow

Page 18: Inlining Control-Flow Jumps in Library Usage Graphs of

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3.

PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

Groums for COBOL5

Single paragraph (often) too small

Inter-paragraph Groums

Inter-paragraph control flow

⇒Graph inlining

Page 19: Inlining Control-Flow Jumps in Library Usage Graphs of

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3.

PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

Groums for COBOL5

Single paragraph (often) too small

Inter-paragraph Groums

Inter-paragraph control flow

⇒Graph inlining

Other challenges - Definition of library calls - Absence of “def” edges - Iteration through jumps - Exit calls - …

Page 20: Inlining Control-Flow Jumps in Library Usage Graphs of

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3.

PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

Phase 1: Intermediate Groum Construction6

Page 21: Inlining Control-Flow Jumps in Library Usage Graphs of

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3.

PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

Phase 1: Intermediate Groum Construction6

logger

PERFORM P1 THRU P3

GO TO After_P0

order

order

Page 22: Inlining Control-Flow Jumps in Library Usage Graphs of

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3.

PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

Phase 1: Intermediate Groum Construction6

logger

PERFORM P1 THRU P3

GO TO After_P0

order

order

loggerZ

STOP RUN

order

Page 23: Inlining Control-Flow Jumps in Library Usage Graphs of

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3.

PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

Phase 1: Intermediate Groum Construction6

logger

PERFORM P1 THRU P3

GO TO After_P0

order

order

loggerZ

STOP RUN

order

loggerB

GO TO After_P3

order

Page 24: Inlining Control-Flow Jumps in Library Usage Graphs of

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3.

PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

Phase 1: Intermediate Groum Construction6

logger

PERFORM P1 THRU P3

GO TO After_P0

order

order

loggerZ

STOP RUN

order

loggerB

GO TO After_P3

order

loggerA

GO TO P3

order

Page 25: Inlining Control-Flow Jumps in Library Usage Graphs of

P3

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3. PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

Phase 2: Groum Inlining7

logger

PERFORM P1 THRU P3

GO TO After_P0

order

order

loggerZ

STOP RUN

order

loggerB

GO TO After_P3

order

loggerA

GO TO P3

order

After_P0 PZ

After_P3 P0

Jump TableP0

P1

PZ

Page 26: Inlining Control-Flow Jumps in Library Usage Graphs of

P3

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3. PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

Phase 2: Groum Inlining7

logger

PERFORM P1 THRU P3

GO TO After_P0

order

order

loggerZ

STOP RUN

order

loggerB

GO TO After_P3

order

loggerA

GO TO P3

order

After_P0 PZ

After_P3 P0

Jump Table

logger

PERFORM P1 THRU P3

GO TO After_P0

order

order

P0

P1

PZ

Page 27: Inlining Control-Flow Jumps in Library Usage Graphs of

P3

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3. PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

Phase 2: Groum Inlining7

logger

PERFORM P1 THRU P3

GO TO After_P0

order

order

loggerZ

STOP RUN

order

loggerB

GO TO After_P3

order

loggerA

GO TO P3

order

After_P0 PZ

After_P3 P0

Jump Table

logger

PERFORM P1 THRU P3

GO TO After_P0

order

order

P0

PERFORM - Inline first paragraph - Adjust last paragraph in

jump table

P1

PZ

Page 28: Inlining Control-Flow Jumps in Library Usage Graphs of

PERFORM - Inline first paragraph - Adjust last paragraph in

jump table

Phase 2: Groum Inlining8

After_P0 PZ

After_P3

Jump Table

logger

loggerA

GO TO P3

GO TO After_P0

order

order logger

loggerA

GO TO P3

GO TO After_P0

order

order

P3

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3. PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

logger

PERFORM P1 THRU P3

GO TO After_P0

order

order

loggerZ

STOP RUN

order

loggerB

GO TO After_P3

order

loggerA

GO TO P3

order

P0

P1

PZ

Page 29: Inlining Control-Flow Jumps in Library Usage Graphs of

Phase 2: Groum Inlining8

After_P0 PZ

After_P3

Jump Table

logger

loggerA

GO TO P3

GO TO After_P0

order

order logger

loggerA

GO TO P3

GO TO After_P0

order

order

GO TO Inline target paragraph

P3

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3. PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

logger

PERFORM P1 THRU P3

GO TO After_P0

order

order

loggerZ

STOP RUN

order

loggerB

GO TO After_P3

order

loggerA

GO TO P3

order

P0

P1

PZ

Page 30: Inlining Control-Flow Jumps in Library Usage Graphs of

Phase 2: Groum Inlining9

After_P0 PZ

After_P3

Jump Table

logger

loggerA

GO TO P3

GO TO After_P0

order

order

logger

loggerA

loggerB

GO TO After_P3

GO TO After_P0

order

order

order

P3

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3. PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

logger

PERFORM P1 THRU P3

GO TO After_P0

order

order

loggerZ

STOP RUN

order

loggerB

GO TO After_P3

order

loggerA

GO TO P3

order

P0

P1

PZ

GO TO Inline target paragraph

Page 31: Inlining Control-Flow Jumps in Library Usage Graphs of

Phase 2: Groum Inlining9

After_P0 PZ

After_P3

Jump Table

logger

loggerA

GO TO P3

GO TO After_P0

order

order

logger

loggerA

loggerB

GO TO After_P3

GO TO After_P0

order

order

order

Implicit jump after paragraph Consult jump table

P3

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3. PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

logger

PERFORM P1 THRU P3

GO TO After_P0

order

order

loggerZ

STOP RUN

order

loggerB

GO TO After_P3

order

loggerA

GO TO P3

order

P0

P1

PZ

End of PERFORM Reset jump table entry

Page 32: Inlining Control-Flow Jumps in Library Usage Graphs of

Phase 2: Groum Inlining10

After_P0 PZ

After_P3 P0

Jump Table

logger

loggerA

loggerB

GO TO After_P0

order

order

order

P3

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3. PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

logger

PERFORM P1 THRU P3

GO TO After_P0

order

order

loggerZ

STOP RUN

order

loggerB

GO TO After_P3

order

loggerA

GO TO P3

order

P0

P1

PZ

Implicit jump after paragraph Consult jump table

End of PERFORM Reset jump table entry

Page 33: Inlining Control-Flow Jumps in Library Usage Graphs of

Phase 2: Groum Inlining10

After_P0 PZ

After_P3 P0

Jump Table

logger

loggerA

loggerB

GO TO After_P0

order

order

order

P3

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3. PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

logger

PERFORM P1 THRU P3

GO TO After_P0

order

order

loggerZ

STOP RUN

order

loggerB

GO TO After_P3

order

loggerA

GO TO P3

order

P0

P1

PZ

Implicit jump after paragraph Consult jump table

Page 34: Inlining Control-Flow Jumps in Library Usage Graphs of

Phase 2: Groum Inlining11

After_P0 PZ

After_P3 P0

Jump Table

logger

loggerA

loggerB

loggerZ

STOP RUN

order

order

order

order

P3

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3. PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

logger

PERFORM P1 THRU P3

GO TO After_P0

order

order

loggerZ

STOP RUN

order

loggerB

GO TO After_P3

order

loggerA

GO TO P3

order

P0

P1

PZ

Implicit jump after paragraph Consult jump table

Page 35: Inlining Control-Flow Jumps in Library Usage Graphs of

Next Steps: Mining, Visualisation12

Library Usage Patterns

Future work

IC102A (0)

IC102A (2)

order

DN1 (Group) (1)

use

use

IC102A (3)

use

order

IC102A (4)

order

IC102A (6)

order

DN2 (Group) (5)

use

use

STOP RUN (7)

order

418248 (no-op, L268) (8)

order

IC105A (0)

IC105A (3)

order

MAIN-DN2 (Group) (1)

use

use

IC105A (4)

use

IC105A (5)

use

MAIN-DN1 (Group) (2)

use

use

use

use

order

order

IC104A (6)

order

STOP RUN (10)

order

GROUP-02 (Group) (7)

use

GROUP-01 (Group) (8)

use

ELEM-77 (Group) (9)

use

1757336 (no-op, L272) (11)

order

IC107A (0)

STOP RUN (4)

order

TABLE-1 (Group) (1)

use

IDN1 (Group) (2)

use

TABLE-2 (Group) (3)

use

650331 (no-op, L275) (5)

order

IC109A (0)

STOP RUN (2)

order

GRP-01 (Group) (1)

use

454282 (no-op, L270) (3)

order

IC110A (0)

STOP PROGRAM (3)

order

GRP-01 (Group) (1)

use

WS1 (Group) (2)

use

IC111A (0)

STOP PROGRAM (4)

order

LS1 (Group) (1)

use

WS2 (Group) (2)

use

GRP-01 (Group) (3)

use

IC113A (0)

STOP RUN (6)

order

SQ-FS3R1-F-G-120 (Group) (1)

use

IC113A (5)

use

ERROR-FLAG (Group) (2)

use use

WRK-CS-09V00 (Group) (3)

use use

RECORDS-IN-ERROR (Group) (4)

use use

order

214890 (no-op, L343) (7)

order order

IC115A (0)

IC115A (3)

order

FILE-REC-SQ-FS3 (Group) (1)

use

use

IC115A (4)

use

IC115A (5)

use

IC115A (6)

use

GROUP-LINKAGE-VARIABLES (Group) (2)

use

use

use

use

useorder

order

order

STOP RUN (7)

order

180074 (no-op, L290) (8)

order

IC117M (0)

STOP RUN (1)

order

833320 (no-op, L279) (2)

order

IC118M (0)

STOP PROGRAM (1)

order

IC202A (0)

ID1[IC202A] (5)

order

DN3 (Group) (1)

use

use

ID2[] (6)

use

ID2[] (7)

use

ID1[IC202A] (9)

use

IC202A (11)

use

IC202A (12)

use

ID1[IC202A] (13)

use

ID1[IC202A] (14)

use

DN2 (Group) (2)

use

use

use

use

IC202A (8)

use

use

ID1[IC202A] (10)

use

use

use

use

use

DN4 (Group) (3)

use

use

use

use

use

use

use

use

use

DN1 (Group) (4)

use

use

use

use

use

use

use

use

use

use

use

order

order

order

order

order

order

order

order

order

STOP RUN (15)

order

518479 (no-op, L270) (16)

order

ID1[IC204A] (0)

ID1[IC204A] (3)

order

TABLE-1 (Group) (1)

use

use

IC204A (5)

use

IC204A (7)

use

IC204A (8)

use

ID1[IC204A] (10)

use

IC204A (11)

use

ID1[IC204A] (14)

use

IC205A (16)

use

ID1[IC204A] (18)

use

DN1 (Group) (2)

use

use

use

use

use

use

use

use

use

order

DN5 (Group) (4)

use

CANCEL IC204A (6)

order

order

order

CANCEL ID1[IC204A] (9)

order

order

order

CANCEL ID1[IC204A] (12)

order

CANCEL ID1[IC204A] (13)

order

order

CANCEL IC205A (15)

order

order

order

TABLE-2 (Group) (17)

use

CANCEL ID1[IC204A] (19)

order

STOP RUN (20)

order

1359146 (no-op, L272) (21)

order

Groums Frequent Subgraph Mining

V1[C1] CANCEL V1[C1] C2 GOBACK

order order order

orderD3 (Group)D2 (Group)

D1 (Group)

use

use use

D5 (Group) D6 (Group)D4 (Group) D7 (Group)

use use

use

use

Visualisation Tool

Page 36: Inlining Control-Flow Jumps in Library Usage Graphs of

Conclusion13

COBOL Library Usage Pattern Mining2

IDENTIFICATION DIVISION. PROGRAM-ID. BARTHOL. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. COPY TRANCTRL. COPY ACCCTRL. COPY SCREENIOV. 01 M-MENU. 05 M-SELECTION PIC X(1) VALUE SPACES. 05 M-TITLE PIC X(40) VALUE "Barthol Bank - Main menu". 05 M-OPTION. 10 M-OPT1 15 M-OPT1-CODE PIC X VALUE 'A'. 15 M-OPT1-TEXT PIC X(40) VALUE "Manage accounts". 10 M-OPT3 15 M-OPT1-CODE PIC X VALUE 'T'. 15 M-OPT1-TEXT PIC X(40) VALUE "Manage transactions". 10 M-OPT4 15 M-OPT1-CODE PIC X VALUE SPACES. 15 M-OPT1-TEXT PIC X(40) VALUE SPACES. 10 M-OPT5 15 M-OPT1-CODE PIC X VALUE 'Q'. 15 M-OPT1-TEXT PIC X(40) VALUE "Quit application". 10 M-OPT99 15 M-OPT1-CODE PIC X VALUE LOW-VALUE. 15 M-OPT1-TEXT PIC X(40) VALUE LOW-VALUE. 01 WRK-VARS. 05 WRK-INPUT-VAR PIC X(10). PROCEDURE DIVISION. DISPLAY "Starting". PERFORM INIT-WORK. PERFORM MAIN-LOOP. PERFORM CLOSE-WORK. DISPLAY "Done". GOBACK. INIT-WORK. CALL "TRANIO" USING TRAN-CTRL-BLK. CALL "ACCIO" USING ACC-CTRL-BLK. MAIN-LOOP. PERFORM WITH TEST AFTER UNTIL M-SELECTION='Q' PERFORM CLS CALL "RMENU" USING M-MENU EVALUATE M-SELECTION WHEN 'A' PERFORM MANAGE-ACCOUNTS WHEN 'T' PERFORM MANAGE-TRANSACTIONS END-EVALUATE END-PERFORM. MANAGE-ACCOUNTS. CALL "ACCMENU".

IDENTIFICATION DIVISION. PROGRAM-ID. ACCMENU. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. COPY TRANCTRL. COPY ACCCTRL. COPY SCREENIOV. COPY ACCOUNT REPLACING ==:PREFIX:== BY ====. COPY ACCOUNT REPLACING ==:PREFIX:== BY ==T-==. COPY TRANL REPLACING ==:PREFIX:== BY ====. COPY TRAN REPLACING ==:PREFIX:== BY ====. 01 M-MENU. 05 M-SELECTION PIC X(1) VALUE SPACES. 05 M-TITLE PIC X(40) VALUE "Barthol Bank - Account menu". 05 M-OPTION. 10 M-OPT1 15 M-OPT1-CODE PIC X VALUE 'C'. 15 M-OPT1-TEXT PIC X(40) VALUE "Create account". 10 M-OPT2 15 M-OPT1-CODE PIC X VALUE 'S'. 15 M-OPT1-TEXT PIC X(40) VALUE "Select account". 10 M-OPT3 15 M-OPT1-CODE PIC X VALUE 'E'. 15 M-OPT1-TEXT PIC X(40) VALUE "Edit account". 10 M-OPT35 15 M-OPT1-CODE PIC X VALUE 'D'. 15 M-OPT1-TEXT PIC X(40) VALUE "Delete account". 10 M-OPT4 15 M-OPT1-CODE PIC X VALUE 'H'. 15 M-OPT1-TEXT PIC X(40) VALUE "Account history". 10 M-OPT5 15 M-OPT1-CODE PIC X VALUE 'L'. 15 M-OPT1-TEXT PIC X(40) VALUE "List bank status". 10 M-OPT6 15 M-OPT1-CODE PIC X VALUE SPACES. 15 M-OPT1-TEXT PIC X(40) VALUE SPACES. 10 M-OPT7 15 M-OPT1-CODE PIC X VALUE 'Q'. 15 M-OPT1-TEXT PIC X(40) VALUE "Quit menu". 10 M-OPT99 15 M-OPT1-CODE PIC X VALUE LOW-VALUE. 15 M-OPT1-TEXT PIC X(40) VALUE LOW-VALUE. 01 WRK-VARS. 05 WRK-INPUT-VAR PIC X(10). 05 W-ACC-ID PIC 9(5). 05 W-AMOUNT PIC -ZZZ9.99. PROCEDURE DIVISION. PERFORM INIT-WORK. PERFORM MAIN-LOOP. GOBACK. INIT-WORK.

IC102A (0)

IC102A (2)

order

DN1 (Group) (1)

use

use

IC102A (3)

use

order

IC102A (4)

order

IC102A (6)

order

DN2 (Group) (5)

use

use

STOP RUN (7)

order

418248 (no-op, L268) (8)

order

IC109A (0)

STOP RUN (2)

order

GRP-01 (Group) (1)

use

454282 (no-op, L270) (3)

order

IC110A (0)

STOP PROGRAM (3)

order

GRP-01 (Group) (1)

use

WS1 (Group) (2)

use

IC117M (0)

STOP RUN (1)

order

833320 (no-op, L279) (2)

order

IC118M (0)

STOP PROGRAM (1)

order

Library Usages Pattern Mining Library Usage Patterns

V1[C1] CANCEL V1[C1] C2 GOBACK

order order order

orderD3 (Group)D2 (Group)

D1 (Group)

use

use use

D5 (Group) D6 (Group)D4 (Group) D7 (Group)

use use

use

use

Goal: Understand library usages to estimate modernisation e!ort

Today

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3.

PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

Groums for COBOL5

Single paragraph (often) too small

Inter-paragraph Groums

⇒Inter-paragraph control !ow

⇒Graph inlining

Other challenges - De!nition of library calls - Absence of “def” edges - Iteration through jumps - Exit calls - …

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3.

PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

Phase 1: Intermediate Groum Construction6

logger

PERFORM P1 THRU P3

GO TO After_P0

order

order

loggerZ

STOP RUN

order

loggerB

GO TO After_P3

order

loggerA

GO TO P3

order

Phase 2: Groum Inlining10

After_P0 PZ

After_P3 P0

Jump Table

logger

loggerA

loggerB

GO TO After_P0

order

order

order

P3

IDENTIFICATION DIVISION. PROGRAM-ID. exc. PROCEDURE DIVISION. P0. DISPLAY "--- Start ---". CALL "logger". PERFORM P1 THRU P3. PZ. CALL "loggerZ". DISPLAY "--- End ---". STOP RUN. P3. CALL "loggerB" P1. CALL "loggerA". GO TO P3.

logger

PERFORM P1 THRU P3

GO TO After_P0

order

order

loggerZ

STOP RUN

order

loggerB

GO TO After_P3

order

loggerA

GO TO P3

order

P0

P1

PZ

Implicit jump after paragraph Consult jump tableEnd of PERFORM

Reset jump table entry