Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

đŸ§Ÿ COBOL – Guide complet (Mainframe / Enterprise)

Syntaxe, Data Division, fichiers, subprograms, DB2, CICS, JCL, performance, migration et modernisation.

Focus
Production-grade
OS
Mainframe & distributed
Runtime
Batch & online
DB
DB2 / VSAM / files
1.1

Vue d’ensemble COBOL

OĂč vit COBOL, pourquoi ça tient encore, et les grands modes d’exĂ©cution.

HistoryEnterpriseBatch/Online
1.2

Structure d’un programme

IDENTIFICATION, ENVIRONMENT, DATA, PROCEDURE. Sections, paragraphs, PERFORM.

DivisionsPERFORMFlow
2.1

DATA DIVISION (fondations)

Level numbers, PIC, USAGE, REDEFINES, OCCURS, 88-level, COMP/COMP-3.

PICCOMP-3OCCURS
2.2

PROCEDURE DIVISION

IF/EVALUATE, PERFORM, CALL, erreurs, gestion du contrÎle et lisibilité.

EVALUATECALLPERFORM
3.1

Fichiers & I/O

SELECT/FD, READ/WRITE/REWRITE/DELETE, file status, sequential vs indexed.

FDFile StatusI/O
3.2

VSAM (concepts)

KSDS/ESDS/RRDS, clés, browse, accÚs aléatoire, patterns transactionnels.

VSAMKSDSBrowse
3.3

COPYBOOKS & standardisation

COPY, REPLACING, conventions, layouts, partage inter-programmes.

COPYREPLACINGLayout
4.1

Subprograms & LINKAGE

CALL, USING, LINKAGE SECTION, conventions d’appel, RETURN-CODE.

LINKAGECALLRC
4.2

Batch & JCL (lecture pratique)

JOB/EXEC/DD, datasets, étapes, parameters, return codes, rerun safe.

JCLBatchDD
5.1

DB2 & SQL embarqué

EXEC SQL, host variables, cursors, commits, -911/-913, performance.

DB2Embedded SQLCursor
5.2

CICS (online)

Transactions, COMMAREA, channels/containers, BMS maps, syncpoints.

CICSCOMMAREABMS
6.1

Debug & troubleshooting

ABEND, dumps, file status, SQLCODE, logs, diagnostics reproductibles.

ABENDSQLCODEStatus
6.2

Tests & qualité

Jeux de données, golden files, non-regression, contract tests batch/online.

NRTDataQuality
6.3

Performance & tuning

I/O patterns, sort/merge, DB2 access, buffer usage, design de record.

I/ODB2Batch
7.1

Sécurité & conformité

ContrĂŽles d’accĂšs, sĂ©paration des environnements, audit, data masking.

AuditAccessMasking
7.2

Modernisation COBOL

Strangler pattern, APIs, wrappers, refactoring safe, migration DB/files.

APIRefactorMigration

0.x Carte mentale COBOL

Architecture globale : programme, fichiers, batch, DB2, CICS, monitoring.

MapBig Picture

Cheat-sheet

Mini-rappels : PIC, COMP-3, IF/EVALUATE, I/O, DB2, CICS, JCL patterns.

Quick RefSnippets
0.x COBOL – Overview (architecture et contexte)
COBOL en 2026 : oĂč on le rencontre

COBOL reste central dans de nombreux SI “core” (compta, paiements, assurance, back-office), parce qu’il gĂšre des volumes colossaux avec des schĂ©mas de donnĂ©es stables, et une chaĂźne outillĂ©e (batch, ordonnancement, I/O, DB2/CICS) industrialisĂ©e.

Objectif du guide
Comprendre rapidement la structure d’un programme, manipuler la Data Division (PIC/COMP-3), maĂźtriser l’I/O, et lire/maintenir du COBOL intĂ©grĂ© (DB2, CICS, batch/JCL).
SchĂ©ma global “1 slide”
Program (COBOL)
  ├─ Divisions
  │   ├─ IDENTIFICATION
  │   ├─ ENVIRONMENT (files, assign)
  │   ├─ DATA (FD, WS, LK)
  │   └─ PROCEDURE (logic)
  │
  ├─ Execution modes
  │   ├─ Batch (JCL, scheduler)
  │   └─ Online (CICS transaction)
  │
  ├─ Data sources
  │   ├─ Files (SEQ, VSAM)
  │   └─ DB2 (embedded SQL)
  │
  └─ Ops
      ├─ Monitoring (return codes, abends)
      └─ Change (copybooks, versioning, regression)
            
Batch (traitement différé)
  • ExĂ©cution planifiĂ©e (ordonnanceur) : traitements de masse, clĂŽtures, calculs.
  • ChaĂźne : JCL → step(s) → datasets → return codes → reruns contrĂŽlĂ©s.
  • Points critiques : I/O, tri, accĂšs DB2, contention, volumes, reprise.
JOB
  STEP1: extract
  STEP2: sort/merge
  STEP3: transform
  STEP4: load/report
            
Online (transactionnel)
  • Temps rĂ©el : CICS, transaction code, Ă©crans BMS ou APIs internes.
  • UnitĂ©s de travail : syncpoints, rollback, locking.
  • Patterns : COMMAREA, channels/containers, pseudo-conversation.
User action
  → CICS transaction
     → program
        → DB2 read/update
     → response screen/message
            
Flux de données typique
Batch:
  Input file(s) → validate → enrich (DB2) → output file/report
Online:
  Request → validate → DB2 update → commit/rollback → response
        
ZoneSymptĂŽmeReflexeAction
FilesUnexpected EOF / wrong recordCheck FD, record layout, statusValidate status codes, align copybook
DB2Slow cursor / lock waitAccess path, commit frequencyIndex, predicates, reduce row-by-row
CICSAbend / timeoutTransaction trace, syncpointShorten UOW, handle errors
1.1 COBOL – Vue d’ensemble, concepts clĂ©s
Les points Ă  connaĂźtre
  • Data-centric : la structure de donnĂ©es (records) est souvent plus importante que l’algorithme.
  • LisibilitĂ© : style verbeux, sections/paragraphs explicites, “business rules” proches du texte.
  • ÉcosystĂšme : batch/JCL, fichiers (SEQ/VSAM), DB2, CICS.
  • Maintenance : copybooks, conventions PIC, tests de non-rĂ©gression.
Rùgle d’or
Avant de toucher le code : comprendre le layout des records et les contrats d’I/O.
Mini glossaire
TermeIdée
CopybookDéfinition partagée (layout record) incluse via COPY.
COMP-3Decimal packed (stockage compact des décimaux).
FDFile Description : structure du record fichier.
88-levelConditions nommées (valeurs symboliques).
ABENDAbnormal end : arrĂȘt avec diagnostic/dump.

Pourquoi c’est toujours là ?

Parce que les chaĂźnes de traitement “core business” sont stables, auditĂ©es, et coĂ»tent trĂšs cher Ă  remplacer. Les modernisations gagnantes sont souvent progressives (wrappers, APIs, strangler pattern), pas des “big bang rewrites”.

1.2 Structure d’un programme COBOL (Divisions, Sections, Flow)
Programme minimal
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOCBL.

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-ZOS.
OBJECT-COMPUTER. IBM-ZOS.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-MSG PIC X(24) VALUE "HELLO FROM COBOL.".

PROCEDURE DIVISION.
MAIN-PARA.
    DISPLAY WS-MSG
    GOBACK.
            
Lecture guidée
  • PROGRAM-ID : identitĂ© (et parfois conventions de build/packaging).
  • DATA : structures (records), variables de travail, buffers, layouts.
  • PROCEDURE : logique, appels, I/O, SQL, CICS, etc.
Tip maintenabilité
Gardez MAIN court : déléguez via PERFORM à des paragraphs nommés.
Sections & paragraphs

Un style courant : “control paragraphs” (INIT / PROCESS / FINALIZE) + paragraphs dĂ©diĂ©s (READ, VALIDATE, TRANSFORM, WRITE).

PROCEDURE DIVISION.
MAIN.
    PERFORM INIT
    PERFORM PROCESS UNTIL EOF-FLAG = "Y"
    PERFORM FINALIZE
    GOBACK.

INIT.
    MOVE "N" TO EOF-FLAG
    PERFORM OPEN-FILES.

PROCESS.
    PERFORM READ-IN
    IF EOF-FLAG = "N"
        PERFORM VALIDATE-IN
        PERFORM TRANSFORM-IN
        PERFORM WRITE-OUT
    END-IF.
        
PERFORM UNTIL
PERFORM READ-IN
PERFORM UNTIL EOF-FLAG = "Y"
    PERFORM HANDLE-RECORD
    PERFORM READ-IN
END-PERFORM
            
PERFORM VARYING
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
    ADD 1 TO WS-COUNTER
END-PERFORM
            

Anti-patterns fréquents
Anti-patternPourquoiAlternative
GO TO everywhereFlow illisiblePERFORM + paragraphs petits
One giant paragraphDebug pénibleINIT/PROCESS/FINALIZE
Hidden assumptionsIncidents prodExplicit status checks
Error handling : discipline
  • Centraliser la gestion des erreurs : FILE STATUS, SQLCODE, CICS RESP/RESP2.
  • Tracer les codes de retour (RETURN-CODE) et abends “owning team”.
  • PrĂ©voir la reprise (rerun) : idempotence, checkpoints, commits.
IF WS-FILE-STATUS NOT = "00"
    DISPLAY "FILE ERROR STATUS=" WS-FILE-STATUS
    MOVE 12 TO RETURN-CODE
    GOBACK
END-IF
        
2.1 DATA DIVISION – Levels, PIC, USAGE, OCCURS, REDEFINES
Variables courantes
01 WS-NAME          PIC X(30).
01 WS-AGE           PIC 9(03).
01 WS-AMOUNT        PIC 9(07)V99.
01 WS-FLAG          PIC X.
            

X pour alphanumĂ©rique, 9 pour numĂ©rique affichable, V pour “decimal point implied”.

Group items (records)
01 WS-CUSTOMER-REC.
   05 WS-CUST-ID    PIC 9(10).
   05 WS-CUST-NAME  PIC X(30).
   05 WS-CUST-ADDR.
      10 WS-STREET  PIC X(40).
      10 WS-CITY    PIC X(20).
      10 WS-ZIP     PIC 9(05).
            

Un group item n’a pas de PIC, il regroupe des sous-champs.

Binary (COMP)
01 WS-COUNT          PIC 9(09) COMP.
01 WS-SMALL          PIC 9(04) COMP.
            

Stockage binaire, performant pour compteurs/indices.

Packed decimal (COMP-3)
01 WS-PRICE          PIC 9(07)V99 COMP-3.
01 WS-TAX            PIC 9(03)V99 COMP-3.
            

Standard finance : compact, exact en décimal, trÚs utilisé en legacy.


UsageQuandAttention
DISPLAYInterfaces humaines / logsPlus lent, plus volumineux
COMPComptage, indices, loopsAlignement/portabilité
COMP-3Montants, comptaConversion en sortie
OCCURS : tables et itérations
01 WS-ITEMS.
   05 WS-ITEM OCCURS 10 TIMES.
      10 WS-ITEM-ID     PIC 9(05).
      10 WS-ITEM-QTY    PIC 9(03) COMP.
      10 WS-ITEM-PRICE  PIC 9(07)V99 COMP-3.

01 I PIC 9(02) COMP.

PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
    ADD WS-ITEM-QTY(I) TO WS-TOTAL-QTY
END-PERFORM
        
Tip
SĂ©parez l’index (COMP) des champs mĂ©tier, et documentez la taille (TIMES).
REDEFINES : vue alternative
01 WS-BUFFER         PIC X(10).
01 WS-BUFFER-NUM REDEFINES WS-BUFFER PIC 9(10).
            

MĂȘme zone mĂ©moire, interprĂ©tation diffĂ©rente. Puissant, mais dangereux si abusĂ©.

88-level : conditions nommées
01 WS-STATUS         PIC X.
   88 STATUS-OK      VALUE "0".
   88 STATUS-ERR     VALUE "9".

IF STATUS-OK
    CONTINUE
ELSE
    MOVE 12 TO RETURN-CODE
END-IF
            
2.2 PROCEDURE DIVISION – EVALUATE, IF, loops, CALL
IF / ELSE
IF WS-AMOUNT > 0
    ADD WS-AMOUNT TO WS-SUM
ELSE
    SUBTRACT WS-AMOUNT FROM WS-SUM
END-IF
          
EVALUATE (switch)
EVALUATE WS-ACTION
  WHEN "C" PERFORM CREATE-REC
  WHEN "U" PERFORM UPDATE-REC
  WHEN "D" PERFORM DELETE-REC
  WHEN OTHER
       MOVE 16 TO RETURN-CODE
END-EVALUATE
          
CALL : découper et contractualiser
CALL "SUBP001" USING LK-IN, LK-OUT
IF RETURN-CODE NOT = 0
    DISPLAY "CALL FAILED RC=" RETURN-CODE
    GOBACK
END-IF
          
Tip
Chaque CALL doit documenter : inputs, outputs, RC, errors, idempotence.

Pattern “read loop” robuste
PERFORM READ-IN
PERFORM UNTIL EOF-FLAG = "Y"
    PERFORM PROCESS-REC
    PERFORM READ-IN
END-PERFORM
      
3.1 Files & I/O – SELECT/FD, READ/WRITE, File Status
ENVIRONMENT: SELECT
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT INFILE ASSIGN TO INFILE
           ORGANIZATION IS SEQUENTIAL
           FILE STATUS IS WS-IN-STATUS.
            
DATA: FD + record
DATA DIVISION.
FILE SECTION.
FD INFILE.
01 IN-REC.
   05 IN-ID    PIC 9(10).
   05 IN-NAME  PIC X(30).

WORKING-STORAGE SECTION.
01 WS-IN-STATUS PIC XX VALUE "00".
            
OPEN / READ / CLOSE
OPEN INPUT INFILE
PERFORM READ-IN
PERFORM UNTIL EOF-FLAG = "Y"
    PERFORM PROCESS-REC
    PERFORM READ-IN
END-PERFORM
CLOSE INFILE

READ-IN.
    READ INFILE
        AT END MOVE "Y" TO EOF-FLAG
    END-READ.
        
WRITE (output)
OPEN OUTPUT OUTFILE
MOVE WS-OUT-REC TO OUT-REC
WRITE OUT-REC
CLOSE OUTFILE
        
File Status : réflexe #1
StatusIdéeAction
00OKContinue
10End of file (common)Set EOF flag
35File not foundCheck dataset / DD / assign
39Mismatch attributesCheck organization / record layout
IF WS-IN-STATUS NOT = "00" AND WS-IN-STATUS NOT = "10"
    DISPLAY "INFILE STATUS=" WS-IN-STATUS
    MOVE 12 TO RETURN-CODE
    GOBACK
END-IF
        
Patterns robustes I/O
  • Valider le record layout via copybook unique.
  • Centraliser READ-IN / WRITE-OUT.
  • Tracer : status, key, record count, checkpoint.
01 WS-REC-COUNT PIC 9(09) COMP VALUE 0.

PROCESS-REC.
    ADD 1 TO WS-REC-COUNT
    IF WS-REC-COUNT > 1000000
        DISPLAY "PROGRESS COUNT=" WS-REC-COUNT
    END-IF
        
3.2 VSAM – KSDS/ESDS/RRDS (concepts et patterns)
Les 3 familles
TypeAccĂšsUsage
KSDSKeyedLookup par clé, browse
ESDSEntry sequenceAppend/read sequential
RRDSRelative recordAccÚs par numéro
Tip perf
En online, minimiser browse long, privilégier accÚs par clé courte + commit control.
Browse (idée générale)
START INVSAM KEY IS >= WS-KEY
READ INVSAM NEXT RECORD
  ...
READ INVSAM NEXT RECORD
END-READ
          

Les verbs et options exacts dépendent du dialecte et des conventions site.

3.3 COPYBOOKS – standardiser les layouts et contrats
Inclure un copybook
WORKING-STORAGE SECTION.
COPY CUSTOMER-REC.
          
REPLACING (variation contrÎlée)
COPY CUSTOMER-REC REPLACING ==:PREFIX:== BY ==WS==.
          
Bonnes pratiques
  • Un copybook = un contrat (I/O ou interface CALL).
  • Versionner (mĂȘme en legacy) : changelog, compatibilitĂ©, tests.
  • Nommer les champs de façon stable (Ă©viter renames frĂ©quents).
Risque majeur
Mismatch layout : “garbage data” sans crash immĂ©diat. Toujours valider longueurs et champs clĂ©s.
4.1 Subprograms – CALL/USING, LINKAGE SECTION, conventions
Caller
CALL "RATECALC" USING WS-IN, WS-OUT
IF RETURN-CODE NOT = 0
    DISPLAY "RATECALC FAILED RC=" RETURN-CODE
    GOBACK
END-IF
          

Toujours documenter : “input/output layout”, RCs, et rùgles d’erreur.

Callee (LINKAGE)
IDENTIFICATION DIVISION.
PROGRAM-ID. RATECALC.

DATA DIVISION.
LINKAGE SECTION.
01 LK-IN.
   05 LK-AMOUNT PIC 9(07)V99 COMP-3.
01 LK-OUT.
   05 LK-RATE   PIC 9(03)V99 COMP-3.

PROCEDURE DIVISION USING LK-IN LK-OUT.
    COMPUTE LK-RATE = LK-AMOUNT * 0.05
    GOBACK.
          

Checklist interface
ItemPourquoi
Layout stableCompatibilité inter-programmes
Return codesMonitoring & rerun behavior
Error handlingFail fast, no silent corruption
IdempotenceBatch rerun safe
4.2 Batch & JCL – lecture pratique (JOB/EXEC/DD, RC, rerun)
Structure minimaliste
//MYJOB    JOB (ACCT),'BATCH RUN',CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
//STEP01   EXEC PGM=MYPROG
//INFILE   DD  DSN=APP.INPUT.DATA,DISP=SHR
//OUTFILE  DD  DSN=APP.OUTPUT.DATA,DISP=(NEW,CATLG,DELETE),
//             SPACE=(CYL,(10,5)),DCB=(RECFM=FB,LRECL=200,BLKSIZE=0)
//SYSOUT   DD  SYSOUT=*
        
DD: points qui cassent tout
  • RECFM/LRECL : doit matcher FD/record layout.
  • DISP : SHR vs NEW, CATLG, DELETE, volumes, espace.
  • Naming conventions : environnements (DEV/QA/PROD).
//INFILE   DD DSN=APP.INPUT.DATA,DISP=SHR
//SYSIN    DD *
  PARAM1=VALUE
/*
        
Return codes

Le RC est la base du pilotage (monitoring / ordonnancement). En COBOL, on influence souvent via RETURN-CODE.

MOVE 0  TO RETURN-CODE
IF FATAL-ERROR
    MOVE 12 TO RETURN-CODE
END-IF
GOBACK
        
Rerun safe (reprise)
  • Éviter les doubles Ă©critures : checkpoints / datasets temporaires.
  • Commit frequency maĂźtrisĂ©e (si DB2) + logs.
  • Sortir des “control totals” pour validation.
Strategy:
  step writes to temp output
  verify totals
  rename/switch temp to final
        
5.1 DB2 – Embedded SQL, cursors, commits, errors, performance
Host variables : idée
EXEC SQL
  SELECT COL1, COL2
    INTO :HV-COL1, :HV-COL2
    FROM MYTABLE
   WHERE KEYCOL = :HV-KEY
END-EXEC
        

Les host variables sont souvent alignées avec la WORKING-STORAGE (ou copybooks dédiés).

Cursor : pattern de base
EXEC SQL
  DECLARE C1 CURSOR FOR
    SELECT KEYCOL, AMOUNT
      FROM MYTABLE
     WHERE STATUS = :HV-STATUS
END-EXEC

EXEC SQL
  OPEN C1
END-EXEC

PERFORM UNTIL SQLCODE NOT = 0
  EXEC SQL
    FETCH C1 INTO :HV-KEY, :HV-AMOUNT
  END-EXEC
  IF SQLCODE = 0
     PERFORM PROCESS-ROW
  END-IF
END-PERFORM

EXEC SQL
  CLOSE C1
END-EXEC
        
Commit frequency : batch reality
  • Commit trop rare : locks longs, logs Ă©normes, rollback coĂ»teux.
  • Commit trop frĂ©quent : overhead, throughput baisse.
  • Approche : commit par N enregistrements + checkpointing.
IF WS-REC-COUNT MOD 5000 = 0
    EXEC SQL COMMIT END-EXEC
END-IF
        
SQLCODE / SQLSTATE
CodeIdéeRéflexe
0OKContinue
100No row foundHandle end / missing
-911Deadlock/timeout rollbackRetry strategy, shorten UOW
-913Timeout/lockCommit frequency, access path
IF SQLCODE NOT = 0 AND SQLCODE NOT = 100
    DISPLAY "DB2 ERROR SQLCODE=" SQLCODE
    EXEC SQL ROLLBACK END-EXEC
    MOVE 12 TO RETURN-CODE
    GOBACK
END-IF
        
5.2 CICS – transactions, COMMAREA, BMS, syncpoint
Concepts clés
  • Transaction code → programme
  • COMMAREA ou channels/containers pour passer l’état
  • Unit of work : syncpoint / rollback
  • Maps BMS pour UI legacy (ou intĂ©grations gateway)
Point critique
UOW courte : éviter de garder des locks longtemps en online.
Pseudo-flow
RECEIVE request (COMMAREA)
  validate
  read/update DB2
  if ok: syncpoint
  else: rollback
SEND response (map/message)
          

Les verbes exacts (EXEC CICS ...) dĂ©pendent des conventions et du type d’écran.

6.1 Debug & troubleshooting – ABEND, dumps, status, SQLCODE
Checklist incident (pragmatique)
SignalCause probableAction
ABENDData exception, I/O, memoryDump + last record + RC
Bad totalsLayout mismatch, roundingCompare copybooks, PIC/COMP-3
Slow batchI/O, cursor row-by-rowReduce I/O, set-based SQL
Lock waitsCommit too rareCommit strategy, indexes
Instrumentation minimale (safe)
DISPLAY "START STEP"
DISPLAY "COUNT=" WS-REC-COUNT
DISPLAY "STATUS=" WS-IN-STATUS
DISPLAY "SQLCODE=" SQLCODE
          
Tip
Tracer peu mais “utile” : key, count, status, checkpoints.
6.2 Tests & qualitĂ© – data sets, non-regression, control totals
Stratégie test batch
  • Jeux d’entrĂ©e “small but representative”
  • Golden output + compare
  • Control totals : count/sum par clĂ©
  • ScĂ©narios erreurs : bad record, missing key, EOF
Control totals:
  input_count
  output_count
  sum_amount_in
  sum_amount_out
          
Qualité data-centric
CheckBut
Field lengthPrevent truncation/corruption
Numeric validityAvoid data exception
Key uniquenessConsistency
Totals invariantsDetect regressions
Tip
La non-régression en COBOL passe souvent par des invariants data.
6.3 Performance & tuning – I/O, DB2 access, batch patterns
Les “gros leviers”
  • I/O : rĂ©duire les passes sur fichiers, bufferiser, Ă©viter REWRITE coĂ»teux.
  • DB2 : Ă©viter row-by-row quand possible, indexer sur prĂ©dicats, cursor stable.
  • Sort : external sort/merge optimisĂ©, moins de transformations avant tri.
  • Commit : frĂ©quence adaptĂ©e au volume et Ă  la contention.
Table “symptîme → action”
SymptĂŽmeDiagnosticAction
Batch x3 slowerI/O spikeReduce reads, merge passes
DB2 CPU highBad access pathIndex/predicate, stats
Lock waitsLong UOWCommit strategy, shorten scope
High sort timeLarge intermediateFilter early, better keys

Rule of thumb (batch)
Prefer:
  read sequential once
  transform in memory
  write sequential once

Avoid:
  random I/O loops
  SQL inside tight loops without batching
      
7.1 SĂ©curitĂ© & conformitĂ© – accĂšs, audit, data protection
Axes majeurs
  • ContrĂŽles d’accĂšs (principe du moindre privilĂšge).
  • SĂ©paration DEV/QA/PROD et gestion des datasets.
  • TraçabilitĂ© : qui a exĂ©cutĂ© quel job, quand, avec quel input.
  • Protection donnĂ©es : masking, chiffrement, purge, retention.
Audit “batch” concret
Audit items:
  job name
  step name
  input dataset
  output dataset
  record count
  return code
  timestamp
          
Tip
Le RC + totals sont souvent plus utiles qu’un log verbeux.
7.2 Modernisation COBOL – stratĂ©gies, patterns, migration progressive
Les 4 approches classiques
ApprocheAvantageRisque
EncapsulateRapide, low riskLegacy remains
Refactor insideQualité long termeNeeds strong tests
Strangler patternProgressive replaceComplex routing
Big bang rewriteClean slateHigh failure rate
Recommandation
Toujours commencer par la visibilité : mapping des jobs, data contracts, tests, totals.
Wrapper / façade

Expose COBOL via service layer (batch trigger, message queue, API gateway interne).

Pattern:
  API → translate request → COBOL program → translate response
            
Contract-first

Définir un contrat stable (schema), puis adapter la Data Division.

Contract:
  request fields
  response fields
  error codes
  idempotency keys
            
Safe refactor : méthode
  1. Capture behavior : golden outputs + totals.
  2. Isolate I/O : READ/WRITE paragraphs.
  3. Modularize : subprograms + copybooks.
  4. Introduce checks : status, SQLCODE, assertions.
  5. Rollout progressive : shadow runs, compare results.
Shadow run:
  old job produces output A
  new job produces output B
  compare A vs B
  only then switch
        
Migration data : piĂšges
  • COMP-3 conversions and rounding rules
  • Record layout versioning
  • Key semantics and uniqueness
  • Historical anomalies in files
Tip
Avant migration : profiler les données (distributions, null-like values, invalid numerics).
Cheat-sheet COBOL – snippets et rappels
Data quick ref
PIC X(10)                 alphanumeric
PIC 9(05)                 numeric display
PIC 9(07)V99 COMP-3       packed decimal
PIC 9(09) COMP            binary
88 condition-name         named condition
REDEFINES                 overlay
OCCURS n TIMES            array/table
          
Control flow
IF ... END-IF
EVALUATE ... END-EVALUATE
PERFORM para
PERFORM UNTIL condition
PERFORM VARYING I FROM 1 BY 1 UNTIL ...
GOBACK
          
File & DB2 quick ref
OPEN INPUT/OUTPUT file
READ file AT END ...
WRITE record
CLOSE file
FILE STATUS IS WS-STATUS

EXEC SQL SELECT ... INTO :hostvars END-EXEC
EXEC SQL DECLARE cursor END-EXEC
EXEC SQL OPEN/FETCH/CLOSE END-EXEC
EXEC SQL COMMIT/ROLLBACK END-EXEC
          
Batch/JCL essentials
JOB / EXEC / DD
SYSOUT=*
DISP=SHR or DISP=(NEW,CATLG,DELETE)
RECFM/LRECL must match record layout
Return codes drive scheduling
          

Template program (compact)
IDENTIFICATION DIVISION.
PROGRAM-ID. TEMPLATE.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT INFILE ASSIGN TO INFILE
           ORGANIZATION IS SEQUENTIAL
           FILE STATUS IS WS-IN-STATUS.

DATA DIVISION.
FILE SECTION.
FD INFILE.
01 IN-REC PIC X(200).

WORKING-STORAGE SECTION.
01 EOF-FLAG      PIC X VALUE "N".
01 WS-IN-STATUS  PIC XX VALUE "00".
01 WS-REC-COUNT  PIC 9(09) COMP VALUE 0.

PROCEDURE DIVISION.
MAIN.
    OPEN INPUT INFILE
    PERFORM READ-IN
    PERFORM UNTIL EOF-FLAG = "Y"
        ADD 1 TO WS-REC-COUNT
        PERFORM PROCESS-REC
        PERFORM READ-IN
    END-PERFORM
    CLOSE INFILE
    MOVE 0 TO RETURN-CODE
    GOBACK.

READ-IN.
    READ INFILE
        AT END MOVE "Y" TO EOF-FLAG
    END-READ.

PROCESS-REC.
    CONTINUE.