☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

segunda-feira, 22 de abril de 2024

Uncharted Entra no CPD — A IA Encontrou o COBOL, Mas o Tesouro Estava Escondido no JCL

 

Bellacosa Mainframe e a ia encontrou o mainframe cobol

☕ Um Café no Bellacosa Mainframe

Uncharted Entra no CPD — A IA Encontrou o COBOL, Mas o Tesouro Estava Escondido no JCL

Ou: por que Nathan Drake consegue ler o mapa, mas ainda precisa descobrir a passagem secreta, o CALL dinâmico, a PROC esquecida e o scheduler que alguém alterou em 2009

Existe uma cena clássica em qualquer aventura de Uncharted.

Nathan Drake encontra um mapa.

O papel está amarelado.

Há símbolos misteriosos.

Uma anotação feita há duzentos anos aponta para algum lugar impossível.

Sully olha para aquilo e provavelmente pensa:

— Garoto, isso vai dar problema.

Nathan responde alguma coisa otimista, pega a mochila, recarrega a arma e vai atrás do tesouro.

O erro seria imaginar que, porque ele encontrou o mapa, a aventura acabou.

Na realidade, foi exatamente naquele momento que ela começou.

Bem-vindo à modernização de aplicações mainframe com Inteligência Artificial.

Hoje temos ferramentas fantásticas capazes de pegar milhões de linhas COBOL, PL/I, Assembler, JCL e copybooks e fazer coisas que vinte anos atrás exigiriam equipes inteiras.

Elas podem:

  • explicar programas;

  • encontrar referências;

  • montar árvores de chamadas;

  • gerar documentação;

  • sugerir regras de negócio;

  • criar testes;

  • traduzir código;

  • localizar dependências;

  • produzir diagramas;

  • auxiliar numa migração.

Um programador COBOL iniciante olha para isso e pensa:

“Pronto. Coloca o repositório na IA e ela descobre o sistema.”

Calma, jovem explorador.

Você encontrou o mapa do tesouro.

Não encontrou necessariamente o tesouro.

E talvez nem saiba ainda onde estão as cobras.



Prólogo — Nathan Drake encontrou o COBOL

Imagine que chegamos a uma empresa fictícia chamada Bellacosa International Treasure Bank.

O banco possui:

18.000 programas COBOL
9.400 copybooks
26.000 JCLs
4.000 PROCs
centenas de tabelas Db2
milhares de datasets
CICS
IMS
MQ
VSAM
Assembler
REXX
sort cards
scheduler

Além disso, algumas pessoas que criaram partes importantes do sistema já se aposentaram.

Outras trabalham ali há trinta anos e sabem coisas que nunca foram documentadas.

A diretoria anuncia:

“Vamos modernizar.”

A palavra ecoa pelo CPD.

Modernizar.

Maravilhosa palavra.

Pode significar desde:

compilar COBOL com versão mais nova

até:

migrar metade da empresa para cloud
e descobrir seis meses depois
que alguém esqueceu um arquivo EBCDIC.

Para ajudar, chega a Inteligência Artificial.

Jogamos nela:

PAY001.CBL

A IA analisa o programa.

Encontra:

CALL 'PAY002'
CALL 'PAY003'

EXEC SQL
   SELECT ...
END-EXEC

Ela produz:

PAY001
 ├── PAY002
 ├── PAY003
 └── DB2

Excelente.

Nathan Drake encontrou o primeiro pedaço do mapa.

Só que existe isto:

CALL WS-PROGRAM USING WS-AREA

Sully imediatamente pergunta:

“E quem diabos é WS-PROGRAM?”

Ótima pergunta.


1. O primeiro templo — programa não é aplicação

Essa é provavelmente uma das lições mais importantes para quem começa em mainframe.

Quando estudamos programação, pensamos:

programa = aplicação

Isso pode funcionar num pequeno exercício.

Você tem:

CALCULA.CBL

O programa lê valores, calcula alguma coisa e termina.

Mas aplicações corporativas que nasceram há décadas são outra criatura.

Um sistema real pode ser:

COBOL
+
COPYBOOK
+
JCL
+
PROC
+
DB2
+
VSAM
+
CICS
+
IMS
+
MQ
+
Scheduler
+
Control Tables
+
Assembler
+
REXX
+
Configuração
+
Dados
+
Operação
+
Conhecimento humano

O COBOL é importante.

Mas ele é apenas uma sala do templo.

E algumas das passagens secretas ficam fora dela.


2. O mapa encontrado pela IA

Vamos usar um programa simples.

IDENTIFICATION DIVISION.
PROGRAM-ID. PAY001.

DATA DIVISION.

WORKING-STORAGE SECTION.

01 WS-PROGRAM PIC X(8).

PROCEDURE DIVISION.

    MOVE 'PAY002' TO WS-PROGRAM

    CALL WS-PROGRAM

    GOBACK.

Um analisador consegue identificar:

CALL variável

Mas o destino pode depender de lógica anterior.

Agora imagine:

EXEC SQL
   SELECT PROGRAM_NAME
     INTO :WS-PROGRAM
     FROM CONTROL_TABLE
    WHERE OPERATION = :WS-OPERATION
END-EXEC

CALL WS-PROGRAM.

O programa chamado não está literalmente escrito no comando CALL.

Pode ser:

PAY002
PAY003
PAY099
PAY777

dependendo do conteúdo da tabela.

A IA pode perceber que existe uma chamada dinâmica.

Mas sem conhecer os valores possíveis daquela tabela, ela não consegue afirmar com certeza qual programa será chamado.

Portanto:

SOURCE CODE

diz:

“Existe uma chamada dinâmica.”

Enquanto:

RUNTIME

pode dizer:

“Nas últimas 48 horas, PAY002 foi chamado 800 mil vezes e PAY777 foi chamado três vezes.”

Essas três execuções podem ser exatamente as três que movem cinquenta milhões de reais.

Agora você entende por que quantidade de execução e importância de negócio não são a mesma coisa.


3. Curiosidade Bellacosa — o código que quase nunca executa pode ser o mais importante

Um iniciante normalmente pensa:

“Se roda pouco, deve ser pouco importante.”

Não necessariamente.

Imagine:

ROTINA-A

executa 4 milhões de vezes por dia.

Ela formata um nome.

Agora:

ROTINA-B

executa uma vez por ano.

Ela fecha o exercício fiscal.

Qual você prefere quebrar?

Pois é.

Modernização exige algo que Uncharted ensina muito bem:

Nem toda porta escondida guarda o mesmo perigo.


4. O segundo templo — COPYBOOK não é só Ctrl+C corporativo

No começo, copybook parece simples.

COPY CLIENTE.

E dentro:

01 CLIENTE.
   05 CODIGO PIC 9(08).
   05 TIPO   PIC X.
   05 SALDO  PIC S9(11)V99 COMP-3.

Você pensa:

“É apenas uma estrutura compartilhada.”

Sim.

E não.

Esse layout pode ser usado por:

programa COBOL online
batch noturno
Easytrieve
SORT
MQ
arquivo VSAM
interface externa
warehouse
Java
Python
ETL

Agora alguém altera:

01 CLIENTE.
   05 CODIGO PIC 9(08).
   05 PAIS   PIC X(02).
   05 TIPO   PIC X.
   05 SALDO  PIC S9(11)V99 COMP-3.

Do ponto de vista da aplicação que recompilou:

Tudo certo.

Mas talvez exista um programa distante que não tenha copybook algum.

Ele simplesmente sabe:

byte 9 = tipo do cliente

Você inseriu dois bytes antes desse campo.

Agora:

byte 9

não significa mais a mesma coisa.

Parabéns.

Você acabou de descobrir uma armadilha do templo.


5. Nathan Drake encontra REDEFINES e quase cai num abismo

Agora chegamos numa das maravilhas do COBOL:

01 WS-REGISTRO.
   05 WS-TIPO PIC X.
   05 WS-DADOS PIC X(100).

01 WS-CLIENTE REDEFINES WS-REGISTRO.
   05 ...

01 WS-CONTA REDEFINES WS-REGISTRO.
   05 ...

O mesmo conjunto de bytes pode ser interpretado de formas diferentes.

Para um analisador estático:

layout CLIENTE existe
layout CONTA existe

Perfeito.

Mas qual deles é usado em produção?

Talvez:

CLIENTE = 99,98%
CONTA   = 0,02%

O problema é que aqueles 0,02% podem aparecer somente no encerramento anual.

Você migra o sistema em maio.

Testa maio.

Testa junho.

Testa julho.

Tudo verde.

Chega dezembro.

O velho sistema olha para você e diz:

SOC7

Feliz Natal.


6. Terceiro templo — JCL é parte da aplicação

Aqui muitos programadores iniciantes cometem um erro.

Eles estudam COBOL e enxergam JCL como:

“A coisa estranha que executa meu programa.”

Só que JCL pode mudar drasticamente o comportamento real.

Considere:

//STEP10 EXEC PGM=PAY001
//INPUT  DD DSN=PROD.PAY.INPUT

Você conclui:

PAY001 recebe PROD.PAY.INPUT

Agora descubra que o job verdadeiro chama uma PROC:

//STEP10 EXEC PROC=PAYPROC

e depois faz override:

//STEP10.RUN.INPUT DD DSN=PROD.SPECIAL.PAY.INPUT

Pronto.

A informação originalmente lida na PROC não corresponde necessariamente ao dataset utilizado naquela execução.

É exatamente como encontrar um mapa do templo mostrando uma porta.

Só que alguém construiu uma passagem lateral em 2004.

E nunca atualizou o mapa.


7. PROC — a passagem secreta atrás da estante

Cataloged procedures existem para reutilizar JCL.

Ótimo conceito.

Mas imagine décadas de alterações.

Temos:

JOB
 ↓
PROC
 ↓
PROC
 ↓
override
 ↓
symbolic parameter
 ↓
dataset

A IA precisa resolver isso tudo.

Porque:

JCL que você vê

não é necessariamente:

JCL efetivamente executado

Antes de modernizar um fluxo batch, tente produzir a versão resolvida do JCL.

Ou seja:

qual PGM?
qual PARM?
qual dataset?
qual DISP?
qual STEPLIB?
qual PROC?
qual override?

Essa é uma excelente prática de discovery.


8. Quarto templo — scheduler contém lógica de negócio

A primeira vez que alguém percebe isso geralmente fica olhando para a tela alguns segundos.

Imagine:

JOBB

executa somente se:

JOBA terminou OK
AND hoje é último dia útil
AND FILE-X chegou
AND país != feriado
AND JOBZ não está rodando

Onde está essa lógica?

Talvez não esteja no COBOL.

Talvez nem no JCL.

Está no:

Control-M
IBM Workload Scheduler
CA-7
ESP
ou outro scheduler

Portanto:

scheduler configuration

é parte da aplicação.

Se durante uma migração você copiar:

COBOL
JCL
DB2

mas não reproduzir corretamente a orquestração, você poderá ter um sistema funcional que executa na hora errada.

E em processamento financeiro, “certo na hora errada” costuma significar simplesmente:

ERRADO

9. Quinto templo — control table é código disfarçado de dado

Aqui Nathan Drake acende a tocha.

Imagine esta tabela:

OPERATION   PROGRAM
---------------------
PAYMENT     PAY001
REFUND      REF010
REVERSAL    REV777

E o COBOL:

SELECT PROGRAM
INTO WS-PROGRAM
FROM CONTROL_TABLE
WHERE OPERATION = WS-OPERATION.

CALL WS-PROGRAM.

Agora alguém executa:

UPDATE CONTROL_TABLE
SET PROGRAM = 'PAY900'
WHERE OPERATION = 'PAYMENT';

Pergunta:

O source COBOL mudou?

Não.

Houve novo compile?

Não.

Houve link-edit?

Não.

O comportamento da aplicação mudou?

SIM.

Logo:

Alguns dados são, na prática, configuração executável.

Essa é uma das razões pelas quais repositório de source não representa obrigatoriamente todo o sistema.


10. Sexto templo — compiler options também importam

Agora entramos numa área que muitos iniciantes ignoram.

Você possui:

PAY001.CBL

e imagina que o source define tudo.

Mas programas COBOL são compilados.

E opções do compilador podem alterar comportamento.

Entre elas encontramos temas relacionados a:

aritmética
truncamento
debug
otimização
chamadas
compatibilidade
representação
runtime checking

Ou seja:

mesmo source
+
configuração diferente
=
possível comportamento diferente

É por isso que discovery sério deve coletar:

source
compiler listing
compiler options
binder information
load module information

A IA não deveria simplesmente olhar um .CBL solitário e proclamar:

“Eu compreendi tudo.”

Nathan Drake olhando uma inscrição na parede não sabe automaticamente qual mecanismo ela aciona.

Ele precisa olhar o chão também.


11. Sétimo templo — Db2 Package: o mapa que lembra como chegar ao dado

Com SQL estático em COBOL, existe outra peça importante.

Você escreve:

EXEC SQL
   SELECT SALDO
     INTO :WS-SALDO
     FROM CONTA
    WHERE CONTA_ID = :WS-CONTA
END-EXEC

Mas o ecossistema de execução envolve também elementos de Db2 como:

DBRM
BIND
PACKAGE
PLAN
access path

Dependendo do ambiente e da arquitetura.

Para modernization discovery, você quer saber:

qual programa usa qual package?
qual package referencia quais objetos?
qual versão?
qual bind?

Porque a arquitetura real não termina no EXEC SQL.


12. Oitavo templo — runtime é o chão onde as pegadas aparecem

Chegamos ao conceito mais poderoso do artigo original.

Static analysis diz:

“Isso pode acontecer.”

Runtime diz:

“Isso aconteceu.”

É uma diferença brutal.

Considere:

PGMA pode chamar:
PGMB
PGMC
PGMD

Static analysis apresenta três caminhos.

Mas produção mostra:

PGMB = 9.000.000 execuções
PGMC = 37 execuções
PGMD = 0 execuções

Agora temos evidência operacional.

Podemos olhar:

SMF
logs
CICS
Db2 traces
IMS
MQ
scheduler history
dataset activity
job history
APM

Cada plataforma terá fontes diferentes.

O objetivo é confrontar:

POSSIBLE

contra:

OBSERVED

Isso é ouro para discovery.


13. Mas cuidado: “não observado” não significa “não existe”

Essa é outra armadilha.

Suponha:

PGMD = 0 execuções em 90 dias

Podemos aposentá-lo?

Talvez.

Mas pergunte:

ele roda mensalmente?
trimestralmente?
anualmente?
só em desastre?
somente em fechamento?
somente em contingência?

Um programa DR pode não executar durante cinco anos e continuar essencial.

Portanto:

NOT OBSERVED

não significa automaticamente:

DEAD CODE

Isso precisa virar hipótese.


14. A grande tabela do explorador: D, R, H e U

Uma técnica extremamente útil seria classificar cada descoberta.

Use:

[D] Deterministic
[R] Runtime observed
[H] Hypothesis
[U] Unknown

Por exemplo:

[D] PAY001 contém CALL PAY002.

[D] JOBPAY executa PAY001.

[R] PAY001 executou 8.231 vezes em 30 dias.

[R] PAY002 foi carregado 7.994 vezes.

[H] Parte das demais execuções seleciona PAY010 dinamicamente.

[U] 237 targets ainda não resolvidos.

Isso muda completamente a conversa.

Em vez de dizer:

“Mapeamos a aplicação.”

Você diz:

“Temos 91% das relações críticas confirmadas, 7% observadas apenas em runtime e quatro dependências de alto impacto ainda não resolvidas.”

Muito mais profissional.


15. Curiosidade — 100% de linhas analisadas pode significar quase nada

Imagine o relatório:

18 milhões de linhas analisadas
100% repository coverage

Executivo feliz.

PowerPoint verde.

Mas escondido numa nota:

11 dynamic CALLs unresolved
3 vendor modules sem source
2 interfaces externas desconhecidas
1 scheduler condition não documentada

Então temos:

100% CODE SCANNED

mas não:

100% SYSTEM UNDERSTOOD

Por isso o objetivo de discovery não deveria ser obsessão por “completude”.

Deveria ser redução controlada de incerteza.


16. O conceito Bellacosa de UNKNOWN WITH CONSEQUENCE

Nem todo desconhecido merece a mesma energia.

Imagine:

UnknownContextoRisco
CALL desconhecidorelatório internobaixo
arquivo desconhecidoprocesso mensalmédio
consumidor desconhecidopagamentocrítico
módulo sem sourcesettlementcrítico

Agora discovery passa a priorizar risco.

Podemos usar uma heurística:

RISCO =
PROBABILIDADE
× IMPACTO
× INCERTEZA

Não precisa ser ciência matemática perfeita.

É uma ferramenta de decisão.

Exemplo:

Dynamic CALL X

Probabilidade: 5
Impacto:       5
Incerteza:     4

Risco = 100

Compare com:

Relatório antigo

Probabilidade: 1
Impacto:       1
Incerteza:     4

Risco = 4

Você sabe onde colocar Nathan Drake primeiro.


17. Nono templo — conhecimento tribal

Agora chegamos ao inimigo final.

Pergunte:

“Por que JOBABC não pode rodar antes do JOBXYZ?”

Resposta:

“Porque dá problema.”

Pergunte:

“Onde está documentado?”

Resposta:

“Não está.”

“Scheduler?”

“Também não.”

“JCL?”

“Não.”

“Então como vocês sabem?”

Resposta:

“O Cláudio sabe.”

Cláudio está na empresa desde 1987.

Cláudio sabe que:

quando último dia útil cai numa sexta-feira
e segunda é feriado
JOBABC precisa esperar arquivo X

Onde está essa regra?

Na cabeça do Cláudio.

Isso se chama:

institutional knowledge

ou, informalmente:

conhecimento tribal.

É patrimônio operacional.

E é também um risco enorme.


18. Aqui IA pode virar Indiana Jones... quer dizer, Nathan Drake corporativo

Entrevistas com SMEs podem ser transcritas.

A IA pode extrair afirmações.

Exemplo:

Cláudio diz:

“PAY099 só roda quando há reversão manual.”

Transformamos isso em:

[H] PAY099 executa apenas em reversões manuais.

Depois verificamos:

runtime history
scheduler
transactions
JCL
Db2

Se confirmar:

[D/R] CONFIRMED

Se não:

CONTRADICTION

Isso é muito mais poderoso do que simplesmente produzir atas de reunião.

Estamos transformando memória humana em hipóteses verificáveis.


19. O grande perigo — IA verificando IA

Agora chegamos à armadilha mais moderna de todas.

Imagine:

IF STATUS = 'A'

A IA interpreta:

A = ACTIVE

Só que no sistema:

A = AWAITING SETTLEMENT

A IA gera documentação:

STATUS A means ACTIVE

Depois cria teste:

Given an active account
STATUS = A

Depois gera Java.

Depois executa seus próprios testes.

Resultado:

PASS
PASS
PASS
PASS

A diretoria comemora.

Só existe um pequeno problema.

Tudo está errado.

Mas está coerentemente errado.

Esse é um dos maiores perigos da geração automática.


20. Regra Bellacosa: quem escreve a prova não pode sozinho corrigir a própria prova

Ou, tecnicamente:

Verification must exist outside the generation loop.

Se IA:

interpreta
gera
testa
valida

tudo usando a mesma hipótese inicial, ela pode perpetuar o erro.

Precisamos de fontes externas de verdade.

Exemplos:

compiler output
runtime traces
immutable specs
regression suites
parallel run
production reconciliation
known datasets
SME validation

Ou seja:

AI OUTPUT
     ↓
INDEPENDENT EVIDENCE

e não:

AI OUTPUT
     ↓
AI CHECKS AI
     ↓
PARABÉNS

21. O décimo templo — parallel run

Uma técnica poderosíssima em modernização é executar:

sistema antigo

e:

sistema novo

em paralelo.

Mesmas entradas.

Depois comparar:

saídas
saldos
transações
contagens
erros
tempos
efeitos

Exemplo:

LEGACY:
10.000.000 transações
resultado financeiro X

NEW:
10.000.000 transações
resultado financeiro X

Excelente.

Agora imagine:

NEW divergiu em 17 transações

Essas 17 são lixo?

Ou são justamente:

clientes judiciais
contas especiais
operações antigas
casos de fechamento

A reconciliação encontra justamente as pequenas exceções que documentação gerada pode esconder.


22. O verdadeiro mapa: Evidence Graph

Se eu estivesse montando uma arquitetura de discovery moderna, criaria um grafo.

Nós:

PROGRAM
COPYBOOK
JOB
PROC
STEP
DATASET
TABLE
PACKAGE
TRANSACTION
QUEUE
API
SCHEDULER
CONTROL TABLE
LOAD MODULE

Relacionamentos:

CALLS
READS
WRITES
EXECUTES
USES
BINDS
TRIGGERS
CONSUMES
PRODUCES
DEPENDS ON

Mas não basta guardar a relação.

Precisamos guardar a evidência.

Exemplo:

PAY001
   |
   | CALLS
   |
PAY002

Metadata:

source: compiler listing
type: deterministic
confidence: 100%

Outro:

PAY001
   |
   | CALLS
   |
PAY099

Metadata:

source: runtime trace
observed: 37 times
type: runtime

Outro:

PAY001
   |
   | POSSIBLY CALLS
   |
PAY777

Metadata:

source: LLM inference
type: hypothesis
confidence: 63%

Agora sim temos algo valioso.

Não apenas:

knowledge graph.

Mas:

evidence-backed knowledge graph.


23. Passo a passo para um iniciante fazer discovery

Vamos transformar tudo isso numa sequência prática.

Passo 1 — escolha uma capacidade pequena

Não comece:

“Vamos entender o banco inteiro.”

Comece:

“Vamos entender consulta de saldo.”

Ou:

“Vamos entender pagamento.”

Passo 2 — encontre os pontos de entrada

Pode ser:

CICS transaction
JCL
API
MQ
IMS transaction
batch

Pergunte:

como essa capacidade começa?

Passo 3 — descubra os programas

Mapeie:

programas chamados
CALLs estáticos
CALLs dinâmicos
subprogramas
assembler
utilities

Passo 4 — expanda COPYBOOKs

Não analise apenas:

COPY ACCOUNT.

Resolva o conteúdo real.

Observe:

offset
length
REDEFINES
OCCURS
COMP
COMP-3

Passo 5 — resolva JCL e PROC

Descubra o job efetivo.

Inclua:

symbolics
overrides
datasets
STEPLIB
PARM
COND

Passo 6 — analise acesso a dados

Procure:

Db2
VSAM
QSAM
IMS
MQ
files

Passo 7 — busque configuração externa

Inclua:

scheduler
control tables
CICS definitions
IMS definitions
Db2 package info
MQ configuration

Passo 8 — olhe produção

Pergunte:

o que realmente executou?

Use evidência disponível.


Passo 9 — registre unknowns

Exemplo:

U-001 Dynamic CALL unresolved
U-002 Consumer of dataset unknown
U-003 Vendor module source unavailable

Passo 10 — classifique risco

Algo como:

LOW
MEDIUM
HIGH
CRITICAL

Passo 11 — use IA para correlação

Agora sim.

Entregue os fatos.

Peça:

explique
correlacione
documente
sugira testes
aponte inconsistências

A IA passa a trabalhar sobre evidência.


Passo 12 — valide fora da IA

Use:

compiler
runtime
SME
tests
parallel run

24. Easter egg — “Sic Parvis Magna”

Fãs de Uncharted reconhecerão imediatamente:

Sic Parvis Magna

“Grandeza a partir de pequenos começos.”

É praticamente uma metodologia perfeita para modernização.

Não tente modernizar:

30 milhões de linhas

de uma vez.

Comece:

1 capability
1 fluxo
1 domínio
1 slice

Descubra.

Valide.

Execute.

Aprenda.

Atualize o mapa.

Depois avance.

small slice
↓
evidence
↓
deployment
↓
observation
↓
new evidence
↓
next slice

Sic Parvis Magna, versão z/OS.


25. Discovery não deve terminar numa enciclopédia

Outro erro comum:

Passamos nove meses criando:

4.000 páginas de documentação

Todos ficam felizes.

Seis meses depois:

20% já está desatualizado.

Discovery não existe para produzir a Wikipédia definitiva do mainframe.

Existe para permitir decisão.

Exemplo:

RETAIN
EXPOSE
REPLACE
RETIRE
REIMAGINE

26. RETAIN — não mexa no templo que está funcionando

Às vezes você descobre:

COBOL
estável
rápido
barato
confiável
bem testado

Então por que reescrever?

Modernização pode significar:

novo compiler
CI/CD
APIs
testes
observabilidade
Git
DevOps

mantendo o core.


27. EXPOSE — abra uma porta moderna

Imagine:

CICS → COBOL

que funciona há vinte anos.

Talvez a necessidade moderna seja:

Mobile
   ↓
REST API
   ↓
CICS
   ↓
COBOL

Você não precisa necessariamente destruir o castelo.

Talvez baste construir uma ponte.


28. REPLACE — troque o que realmente perdeu sentido

Existem partes que podem ser substituídas.

Exemplo:

relatório antigo
utility obsoleto
interface redundante

Mas a decisão deve nascer da descoberta.

Não do preconceito:

“É COBOL, portanto precisa morrer.”


29. RETIRE — finalmente aposente o fantasma

Discovery pode encontrar programas que:

não executam
não são chamados
não têm consumidores
não possuem valor

Ótimo candidato a aposentadoria.

Mas lembre:

not observed
≠
not needed

Cheque ciclos anuais, contingência e requisitos regulatórios.


30. REIMAGINE — não traduza o passado linha por linha

Aqui mora uma das maiores confusões de modernization.

Você pega:

COBOL

e traduz para:

Java

Parabéns.

Agora você pode ter:

um sistema COBOL escrito em Java.

As mesmas:

dependências
batch windows
control tables
arquivos
acoplamentos
processos

continuam lá.

Modernizar não é necessariamente trocar linguagem.

Reimaginar significa perguntar:

“Como essa capacidade deveria existir hoje?”

Isso pode gerar uma arquitetura completamente diferente.


31. Migration e modernization são parentes, não gêmeos

Migrar:

A → B

Modernizar:

A → algo melhor

Às vezes coincidem.

Às vezes não.

Você pode migrar sem modernizar.

Pode modernizar sem migrar.

E pode realizar uma migração tão ruim que termina com um sistema mais complexo do que antes.

Nathan Drake também sabe disso.

Nem todo caminho novo leva ao tesouro.

Alguns levam ao precipício.


32. Métricas que não impressionariam Sully

Evite celebrar apenas:

20 milhões de linhas escaneadas
50 milhões de tokens
900 diagramas gerados
10 mil páginas documentadas

Essas são métricas de atividade.

Pergunte:

Quantos riscos críticos fechamos?

Quantas decisões foram tomadas?

Quantas dependências foram confirmadas?

Quantos unknowns de alto impacto restam?

Quantas mudanças chegaram com segurança à produção?

Qual KPI melhorou?

Isso é resultado.


33. A aventura completa

No final, nosso mapa fica assim:

SOURCE
   ↓
STATIC ANALYSIS
   ↓
CONFIGURATION
   ↓
RUNTIME
   ↓
EVIDENCE
   ↓
AI
   ↓
INTERPRETATION
   ↓
HYPOTHESES
   ↓
VALIDATION
   ↓
RISK
   ↓
DECISION

E finalmente:

RETAIN
EXPOSE
REPLACE
RETIRE
REIMAGINE

Essa é uma metodologia muito mais saudável do que:

COBOL
 ↓
LLM
 ↓
Java
 ↓
PRODUCTION

Se alguém propuser exatamente esse último diagrama numa reunião, recomendo verificar se Sully já está preparando o avião para fugir.


Epílogo — o tesouro nunca esteve apenas no COBOL

O programador iniciante chega ao mainframe e pensa:

“Preciso aprender COBOL.”

Correto.

Depois descobre:

JCL

Depois:

Db2

Depois:

VSAM

Depois:

CICS

Depois:

IMS

Depois:

MQ

Depois:

scheduler

Depois:

RACF

Depois vê control tables, compiler options, PROCs, SMF, load libraries, binder, copybooks e pessoas que conhecem regras de 1993.

Nesse momento ele entende:

Mainframe não é uma linguagem. É um ecossistema.

E aplicações antigas são frequentemente organismos históricos.

Foram construídas em camadas.

Uma mudança em 1988.

Outra em 1994.

Um workaround em 1999.

Euro em 2002.

Regulatório em 2008.

Novo canal em 2013.

API em 2018.

Cloud em 2024.

IA em 2026.

Cada geração deixou alguma coisa no templo.

O trabalho da Inteligência Artificial não é fingir que conhece todas as câmaras escondidas.

É ajudar você a encontrá-las.

Ela pode ler inscrições numa velocidade impossível para uma equipe humana.

Pode conectar copybooks.

Pode explicar COBOL.

Pode comparar milhares de programas.

Pode gerar hipóteses.

Pode localizar padrões.

Pode transformar documentação ruim em algo utilizável.

Pode auxiliar na geração de testes.

Pode tornar discovery dramaticamente mais rápido.

Mas ainda precisamos perguntar:

De onde veio essa afirmação?

É fato?

É runtime?

É hipótese?

É unknown?

Qual o risco se estiver errada?

Essa é a diferença entre demonstração bonita e engenharia de modernização.

Portanto, quando alguém disser:

“Nossa IA analisou 100% do COBOL.”

Sorria.

Tome um gole de café.

Olhe para o horizonte como Nathan Drake olhando para mais uma cidade perdida.

E pergunte:

“Ótimo. Agora me mostre os CALLs dinâmicos, os overrides de JCL, as tabelas de controle, o histórico do scheduler, os consumidores dos arquivos, os packages Db2, o runtime e aquilo que ainda não sabemos.”

Se a sala ficar silenciosa...

parabéns.

Você acabou de encontrar a entrada da próxima ruína.

E, lá no fundo do CPD, provavelmente existe uma placa antiga dizendo:

SIC PARVIS MAGNA

Grandeza a partir de pequenos começos.

Ou, em português de mainframe:

Não tente mapear o planeta inteiro antes de descobrir quem está alterando o DDNAME do STEP030.

☕ Gostou deste café?
Siga o Bellacosa Mainframe e acompanhe os próximos artigos.
SEGUIR O BLOG

Sem comentários:

Enviar um comentário

De Fã para Fã. Conteúdo não oficial produzido como homenagem, comentário, análise ou paródia. Personagens, marcas e obras eventualmente mencionados pertencem aos seus respectivos titulares.
Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...