Translate

Mostrar mensagens com a etiqueta Desenvolvimento COBOL. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Desenvolvimento COBOL. Mostrar todas as mensagens

sexta-feira, 3 de julho de 2026

Programando COBOL no GitHub com VS Code Sem Mainframe. Sem Compilar. Apenas Aprendendo como um Desenvolvedor Moderno.

 


Bellacosa Mainframe usando o vs code para programar cobol numa ide moderna

☕ Um Café no Bellacosa Mainframe

Programando COBOL no GitHub com VS Code

Sem Mainframe. Sem Compilar. Apenas Aprendendo como um Desenvolvedor Moderno.

"Todo Jedi começa treinando com um sabre de luz desligado. Todo desenvolvedor Mainframe também pode começar sem um z/OS."


Antes de começarmos...

Existe um mito enorme no mundo Mainframe.

"Para aprender COBOL preciso de um IBM Z."

Não.

Outro mito:

"Para editar programas COBOL preciso de um emulador."

Também não.

Outro:

"Preciso instalar um compilador."

Ainda não.

Hoje vamos aprender exatamente como milhares de desenvolvedores modernos trabalham quando estão estudando, revisando código ou preparando alterações para um projeto.

Você vai usar apenas:

  • GitHub

  • Visual Studio Code

  • IBM Z Open Editor

  • Git

Nada mais.

Nenhum z/OS.

Nenhum TSO.

Nenhum ISPF.

Nenhuma licença IBM.

E, ainda assim, estará utilizando praticamente o mesmo editor utilizado por desenvolvedores COBOL profissionais.

Pegue seu café.

Vamos montar nosso laboratório.


Bellacosa Mainframe passo a passo na instalacao

A grande mudança de mentalidade

Imagine um mecânico.

Ele não liga um caminhão para trocar o volante.

Primeiro ele trabalha na peça.

Depois instala.

No Mainframe acontece exatamente igual.

Você pode editar, estudar, revisar e versionar milhares de programas COBOL sem sequer possuir acesso ao IBM Z.

O Mainframe só entra quando chega a hora de:

  • compilar

  • executar

  • testar online

  • acessar DB2

  • acessar CICS

  • executar JCL

Até lá...

Tudo pode ser feito localmente.


Nossa arquitetura

Imagine esta jornada.

GitHub
     │
git clone
     │
VS Code
     │
IBM Z Open Editor
     │
Editar COBOL
     │
Git Commit
     │
Git Push
     │
GitHub

Perceba.

O Mainframe nem apareceu.


O que vamos instalar

Nosso kit Bellacosa Mainframe será composto por:

✅ Visual Studio Code

✅ Git

✅ IBM Z Open Editor

✅ GitHub Pull Requests

✅ Error Lens

✅ Material Icon Theme

✅ Markdown All in One

✅ Code Spell Checker

✅ Todo Tree

✅ Peacock

Opcionalmente:

  • GitLens

  • Better Comments

  • YAML

  • XML

  • Rainbow CSV

  • Hex Editor

  • REST Client

Você perceberá que quase tudo é gratuito.


Passo 1 — Instale o Git

Sem Git...

não existe GitHub.

Baixe:

https://git-scm.com

Durante a instalação aceite praticamente tudo.

Depois abra um terminal.

Digite:

git --version

Se aparecer algo parecido com:

git version 2.51

Parabéns.

Seu sabre de luz foi montado.


Passo 2 — Instale o VS Code

Baixe em

https://code.visualstudio.com

Instale normalmente.

Abra.

Você verá uma tela praticamente vazia.

É aqui que a mágica acontece.


Passo 3 — Faça login no GitHub

No canto inferior esquerdo existe o ícone da conta.

Clique.

Escolha:

Sign In with GitHub

O navegador abrirá.

Autorize.

Volte ao VS Code.

Pronto.

Agora seu VS Code conversa diretamente com o GitHub.


Passo 4 — Instale o IBM Z Open Editor

Abra Extensions.

Pesquise:

IBM Z Open Editor

Instale.

Este plugin entende COBOL.

Ele conhece:

  • DIVISION

  • SECTION

  • PARAGRAPH

  • COPY

  • EXEC SQL

  • EXEC CICS

  • comentários

  • copybooks

É praticamente um ISPF moderno.


O que ele faz?

Quando você abre:

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

Ele já entende que aquilo é COBOL.

Você ganha:

✔ Colorização

✔ Outline

✔ Auto Complete

✔ Navegação

✔ Hover

✔ Referências

✔ Folding

✔ Sintaxe

Tudo gratuitamente.


Passo 5 — Instale GitHub Pull Requests

Esse plugin é fantástico.

Ele permite:

  • abrir Pull Requests

  • revisar código

  • comentar linhas

  • aprovar alterações

Sem sair do VS Code.


Passo 6 — Material Icon Theme

Pequeno detalhe.

Grande diferença.

Agora:

📄 COBOL

📄 COPYBOOK

📄 JCL

📄 REXX

ganham ícones.

Seu projeto fica muito mais agradável.


Passo 7 — Error Lens

Esse plugin faz algo simples.

Mostra erros diretamente na linha.

Sem precisar olhar outro painel.

Economiza muito tempo.


Passo 8 — Better Comments

Imagine:

*> TODO

vira verde.

*> WARNING

fica amarelo.

*> BUG

fica vermelho.

Seu código passa a conversar com você.


Passo 9 — Todo Tree

Agora imagine possuir 3.000 programas.

Você procura:

TODO

Ele encontra todos.

Fantástico para projetos enormes.


Passo 10 — Clone seu GitHub

No terminal:

git clone https://github.com/seuusuario/IBMLearnCOBOL.git

ou simplesmente:

No VS Code:

Clone Repository

Cole a URL.

Pronto.


Estrutura típica

COBOL/
    HELLO.CBL
    CLIENTE.CBL
COPY/
    CLIENTE.CPY
JCL/
    COMPILA.JCL
REXX/
README.md

Tudo organizado.


Abrindo o projeto

Arquivo

Open Folder

Escolha:

IBMLearnCOBOL

Agora tudo aparece na lateral.

Exatamente como Java.

Exatamente como Python.


Editando um programa

Abra:

HELLO.CBL

Modifique:

DISPLAY "HELLO WORLD".

para

DISPLAY "HELLO BELLACOSA MAINFRAME".

Salve.

Só isso.


Observe o Git

Na lateral existe:

Source Control

Aparecerá:

M HELLO.CBL

M significa:

Modified.


Veja a diferença

Clique no arquivo.

O VS Code mostra:

esquerda

arquivo antigo

direita

arquivo novo.

Em verde:

linhas adicionadas.

Em vermelho:

linhas removidas.

É maravilhoso.


Criando um Commit

Na caixa superior escreva:

Alterado texto do HELLO WORLD

Clique:

Commit

Pronto.


Fazendo Push

Agora clique:

Sync

ou

Push

O Git envia tudo para o GitHub.

Seu código agora está online.


Histórico

Clique:

Timeline

Você verá:

  • quem alterou

  • quando

  • qual commit

  • diferença

É uma máquina do tempo.


GitLens

Se instalar GitLens...

fica ainda melhor.

Você passa o mouse.

Ele mostra:

Vagner Bellacosa

14 dias atrás

Commit:

Correção cálculo IRRF

Parece mágica.


Trabalhando com Branches

Nunca altere diretamente a Main.

Crie:

feature/curso-cobol

bugfix/cliente

feature/json

feature/db2

Isso é padrão de mercado.


Commits bons

Ruim:

teste

Ruim:

aaaa

Ruim:

mudança

Bom:

Inclui validação do CPF

Corrige cálculo de juros

Refatora rotina de leitura VSAM

Atualiza documentação

Organização Bellacosa

COBOL
COPY
JCL
BMS
DBRM
SQL
DOCS
LABS
QUIZZES

Tudo separado.

Tudo fácil.


Markdown

Documente tudo.

README.

Arquitetura.

Fluxo.

Exemplos.

O VS Code possui preview fantástico.


Dica de Ouro

Ative:

Auto Save

Você nunca esquecerá de salvar.


Outra dica

Use:

Minimap.

Você enxerga programas COBOL gigantes.


Outra

Breadcrumbs.

Você sabe exatamente:

DIVISION

SECTION

PARAGRAPH

onde está.


Outra

Outline.

Clique:

CALCULA-TOTAL

Vai direto para o parágrafo.

Adeus Page Down.


Outra

CTRL+P

Digite:

cliente

Abre CLIENTE.CBL imediatamente.


Outra

CTRL+SHIFT+O

Lista todos os parágrafos.

Fantástico.


Outra

CTRL+SHIFT+F

Procura em TODOS os programas.

Imagine localizar:

EXEC SQL

em 12.000 fontes.

Leva segundos.


Easter Egg nº 1

Troque o tema.

Experimente:

IBM Carbon Theme

ou

One Dark Pro.

Seu COBOL fica lindíssimo.


Easter Egg nº 2

Instale Peacock.

Cada Workspace ganha uma cor.

Nunca mais confundirá produção e laboratório.


Easter Egg nº 3

Digite:

>Preferences: Open Keyboard Shortcuts

Personalize tudo.


Easter Egg nº 4

Use emojis nos commits.

✨ Novo programa

🐞 Corrige bug

📚 Atualiza documentação

♻ Refatoração

🚀 Nova funcionalidade

Easter Egg nº 5

Use Copilot apenas para sugerir código.

Nunca aceite sem entender.

O bom desenvolvedor continua pensando.


Quando chegar o Mainframe...

Nada muda.

Você apenas instala:

IBM Zowe Explorer.

Então passa a acessar:

PDS

PDSE

USS

JES

Jobs

Datasets

O editor continua exatamente o mesmo.

É como aprender a dirigir em um simulador e depois entrar no carro real: os comandos principais permanecem familiares.


O verdadeiro objetivo

Aprender COBOL nunca foi decorar comandos do ISPF.

O objetivo é entender:

  • lógica de negócio;

  • arquitetura de sistemas;

  • qualidade de código;

  • versionamento;

  • colaboração;

  • documentação.

Essas habilidades acompanham você em qualquer plataforma.


Conclusão

Durante décadas, muitos imaginaram que o desenvolvimento Mainframe dependia de telas verdes, terminais 3270 e comandos memorizados. Hoje, essa realidade mudou. O Visual Studio Code, aliado ao IBM Z Open Editor e ao GitHub, oferece uma experiência moderna, produtiva e acessível para estudar, revisar e evoluir programas COBOL sem a necessidade imediata de um ambiente z/OS.

Ao dominar Git, commits bem escritos, branches, documentação em Markdown e a organização de projetos, você desenvolve competências valorizadas em qualquer equipe de engenharia de software. Quando chegar o momento de conectar-se a um IBM Z com o Zowe Explorer, a curva de aprendizado será muito menor, pois o editor, os atalhos e o fluxo de trabalho continuarão praticamente os mesmos.

Você não está abandonando o Mainframe tradicional. Está adicionando ferramentas modernas à sua caixa de ferramentas. Como costumo dizer no Bellacosa Mainframe: o terminal pode mudar, mas a excelência em engenharia de software continua sendo a mesma.

domingo, 21 de junho de 2026

Natural x CICS BMS para Desenvolvedores COBOL

 

Bellacosa Mainframe e uma breve comparação entre Natural e CICS BMS

☕ Um Café no Bellacosa Mainframe

Natural x CICS BMS para Desenvolvedores COBOL

Entendendo duas filosofias diferentes de construir aplicações Online no Mainframe

Salve jovem Padawan.

Uma das dúvidas mais comuns de quem começa no mundo Mainframe é:

Se eu sei desenvolver online em Natural, já sei desenvolver em CICS?

A resposta curta é:

Não.

A resposta longa é:

Você conhece o objetivo, mas não conhece o mecanismo.

Natural e CICS possuem filosofias completamente diferentes para construir aplicações online.


A grande diferença

Natural é uma plataforma completa.

CICS é um monitor transacional.

Podemos pensar da seguinte maneira:

NaturalCICS
FrameworkMonitor Transacional
IDE integradaFerramentas separadas
Tela automáticaBMS
Segurança integradaRACF/CICS
Navegação nativaProgramada
Dicionário PredictCopybooks
Estado mantido pelo NaturalCOMMAREA
Desenvolvimento RADDesenvolvimento explícito

Arquitetura Natural

Em Natural normalmente temos:

Usuário

↓

Terminal 3270

↓

Natural Runtime

↓

Programa Natural

↓

Predict

↓

Adabas

Natural faz praticamente tudo.

O desenvolvedor apenas escreve:

INPUT

'CPF' CPF

'Nome' NOME


END-INPUT

Pronto.

Tela criada.


Arquitetura CICS

No CICS:

Usuário

↓

3270

↓

BMS

↓

MAPSET

↓

COBOL

↓

COMMAREA

↓

DB2


Tudo é responsabilidade do desenvolvedor.


Natural é quase um framework

Natural lembra.

Django

Rails

PowerBuilder

Oracle Forms


Exemplo Natural


INPUT USING MAP 'CLI001'

END-INPUT



Natural já sabe.

Mapa.

Campos.

Validação.

Cursor.

Ajuda.

PF Keys.

Tudo praticamente pronto.


CICS é uma caixa de ferramentas

CICS fornece:

SEND

RECEIVE

LINK

RETURN

HANDLE

Mas você constrói.


Exemplo


SEND MAP


RECEIVE MAP


VALIDA


CONSULTA DB2


SEND


RETURN



Predict

Aqui está uma grande diferença.


Natural usa Predict.

Predict é um catálogo.

Um dicionário corporativo.


Armazena.

Campos

Programas

Mapas

Arquivos

Views

Documentação

Relacionamentos


Exemplo


CLIENTE


CPF


NOME


ENDERECO


LIMITE




Natural gera automaticamente.

Campos.

Mapas.

Views.

Documentação.


Exemplo


1 CPF

1 NOME

1 CIDADE


Tudo centralizado.


CICS não possui Predict

No CICS.

Criamos.

Copybooks.

Layouts.

BMS.

Manualmente.


Exemplo


COPY CLIENTE.


COPY CLIMAP.




Construção de Menus

Natural

Muito simples.


MENU

1 Consulta

2 Inclusao

3 Alteracao



CICS

Criamos.

MAPSET.

COBOL.

Fluxo.

PF Keys.


Exemplo

MENU01


1 Consultar


2 Incluir


3 Alterar



PF3



Hierarquia de programas

Natural

Quase sempre.

Programa chama programa.



MENU


↓

CLIENTE


↓

CONSULTA


↓

ALTERA


Natural controla.


No CICS.

Mais cuidado.


Podemos usar.

LINK

XCTL

START


LINK

Retorna.


EXEC CICS LINK

PROGRAM('CLI002')

END-EXEC



XCTL

Não retorna.



EXEC CICS XCTL

PROGRAM('MENU')


END-EXEC



Como segregar funções

Boa prática.


MENU

Só navegação.


CLIENTE

Negócio.


DBCLI

DB2.


TELA

BMS.


UTIL

Rotinas.


Exemplo



MENU0001



CLI0001



DBCLI01



UTILCPF



MSGERRO




Segurança

Natural

Muito integrada.


Natural Security.

NSC.

Predict.

Menus.

Perfis.


Exemplo

Usuário João.

Pode.

Consultar.

Não alterar.


Natural faz.


No CICS.

Usamos.

RACF.


Transação.

Programa.

Arquivo.

Fila.

TSQ.

TDQ.


Exemplo


CLI1


CONS



ALT1


ADM1




RACF controla.


Navegação

Natural

Automática.


ENTER.

PF3.

PF12.


Tudo tratado.


CICS.

Manual.


Precisamos verificar.


COPY DFHAID





EVALUATE EIBAID



WHEN DFHPF3


PERFORM SAIR



WHEN DFHPF5


PERFORM REFRESH


END-EVALUATE



BMS

Natural

Mapas do Natural.


CICS

BMS.


MAP

Tela.


MAPSET

Conjunto de telas.


Exemplo



LOGIN



MENU



CLIENTE



CONSULTA



HELP




Mapset.


DFHMSD




Tela.


DFHMDI




Campo.


DFHMDF




PF Keys

Muito importante.


PF1

Ajuda


PF3

Sair


PF5

Atualizar


PF7

Anterior


PF8

Próximo


PF12

Cancelar


No terminal 3270

Emuladores modernos.

PCOMM.

Rocket.

Vista.

x3270.


Teclas mapeadas.


Exemplo.

F3

PF3


F7

PF7


Shift+F12

PF24


Clear

PA1


Attention

PA2


SYSREQ

PA3


Comportamento curioso

No 3270.

ENTER.

Não é.

Carriage Return.


É um.

AID.

Attention Identifier.


CICS recebe.


EIBAID



Natural trata.

Automaticamente.


Uma analogia moderna

Natural é parecido com:

Oracle Forms

PowerBuilder

GeneXus


CICS é parecido com.

HTML

CSS

Javascript

Backend Java


Natural oferece produtividade.

CICS oferece controle.


O que é melhor?

Depende.

Natural é excelente para:

Desenvolvimento rápido.

CRUD.

Adabas.


CICS é excelente para:

Grandes volumes.

Flexibilidade.

Integração.

APIs.

DB2.

MQ.


Minha recomendação para um COBOL Júnior

Aprenda primeiro:

  • BMS

  • SEND/RECEIVE

  • DFHAID

  • COMMAREA

  • Pseudo-conversação

  • LINK/XCTL

  • TSQ

  • CEDF

Depois estude:

  • Natural

  • Predict

  • Adabas

  • Natural Security

Quando você conhecer os dois mundos, perceberá algo interessante:

Natural tenta esconder a complexidade do CICS.

CICS mostra explicitamente como as engrenagens funcionam.

E, para quem deseja realmente entender os bastidores das aplicações bancárias e seguradoras do IBM Z, estudar CICS/BMS costuma ser uma excelente forma de aprender como um sistema transacional corporativo é construído desde a fundação.

sábado, 20 de junho de 2026

☕ LAB - CICS BMS para Padawans

 

Bellacosa Mainframe laboratorio pratico CICS BMS

☕ LAB Bellacosa Mainframe

CICS BMS para Padawans

Bem-vindo ao Laboratório Bellacosa Mainframe – CICS BMS para Padawans. Este conjunto de exercícios foi projetado para conduzir um desenvolvedor COBOL iniciante por uma jornada gradual de aprendizado, partindo da criação do primeiro MAPSET BMS até a construção de uma pequena aplicação pseudo-conversacional semelhante às encontradas em bancos, seguradoras e grandes empresas. 

O objetivo não é apenas aprender a sintaxe das macros DFHMSD, DFHMDI e DFHMDF, mas desenvolver a forma de pensar utilizada por desenvolvedores CICS experientes.

Ao longo dos laboratórios, o aluno será estimulado a raciocinar em termos de interface, estado, fluxo de navegação, persistência temporária de informações e interação entre usuário e aplicação. Inicialmente, o foco será compreender como uma tela 3270 é construída, como os campos são definidos, protegidos ou liberados para edição e como o BMS abstrai as características do terminal. 

Em seguida, serão introduzidos os conceitos de SEND MAP, RECEIVE MAP, EIBAID, DFHAID, posicionamento dinâmico de cursor e tratamento de teclas funcionais.

Nos desafios mais avançados, espera-se que o aluno seja capaz de projetar uma aplicação utilizando pseudo-conversação, COMMAREA, paginação, mensagens de erro e validações, adotando uma abordagem semelhante à empregada em sistemas corporativos reais. 

Mais importante do que memorizar comandos é desenvolver o raciocínio arquitetural necessário para compreender como aplicações CICS foram concebidas, evoluíram ao longo das décadas e continuam sustentando milhões de transações críticas diariamente no ecossistema IBM Z.

10 Laboratórios Práticos de BMS


LAB01 – Meu Primeiro BMS

Objetivo:

Criar o primeiro MAPSET.

Resultado esperado:

HELLO BMS

PF3=Sair

Atividades

Criar um DFHMSD

Criar um DFHMDI

Criar dois DFHMDF

Gerar Physical Map

Gerar Symbolic Map


Solução

HELLO DFHMSD TYPE=&SYSPARM,
       LANG=COBOL,
       MODE=OUT,
       TIOAPFX=YES

TELA1 DFHMDI SIZE=(24,80)

      DFHMDF POS=(5,25),
              LENGTH=10,
              INITIAL='HELLO BMS',
              ATTRB=(PROT,BRT)

      DFHMDF POS=(22,2),
              LENGTH=8,
              INITIAL='PF3=Sair',
              ATTRB=(ASKIP)

      DFHMSD TYPE=FINAL

END

LAB02 – Criando Campo de Entrada

Objetivo

Campo editável.


Resultado

Nome :

______________

Atividades

Adicionar campo input

Posicionar cursor

Testar MDT


Solução

NOME DFHMDF POS=(5,15),
              LENGTH=30,
              ATTRB=(UNPROT,IC)

LAB03 – Campos Protegidos

Objetivo

Criar labels.


Resultado

CPF:


Cidade:


Email:

Solução

DFHMDF POS=(1,1),
        LENGTH=4,
        INITIAL='CPF:',
        ATTRB=(ASKIP)

LAB04 – Tela Cadastro Cliente

Objetivo

Montar tela completa.


Resultado

Codigo:


Nome:


CPF:


Cidade:


Telefone:



PF3


PF5


ENTER

Atividades

Criar 5 campos

Criar mensagens

Criar PF Keys


Solução

CODIGO DFHMDF
        POS=(5,15),
        LENGTH=6,
        ATTRB=(UNPROT,IC)



CPF DFHMDF
        POS=(7,15),
        LENGTH=11,
        ATTRB=(UNPROT,NUM)

LAB05 – SEND MAP

Objetivo

Mostrar tela.


Atividades

Criar programa COBOL

Executar SEND


Solução

EXEC CICS SEND MAP

MAP('TELA01')

MAPSET('CLIMAP')

ERASE

FREEKB

END-EXEC.

LAB06 – RECEIVE MAP

Objetivo

Receber dados.


Atividades

Capturar nome.

Capturar CPF.


Solução

EXEC CICS RECEIVE

MAP('TELA01')

MAPSET('CLIMAP')

INTO(TELA01I)

END-EXEC.

LAB07 – Tratando ENTER e PF3

Objetivo

Usar DFHAID.


Atividades

Copy DFHAID

Verificar tecla


Solução

COPY DFHAID.



EVALUATE EIBAID


WHEN DFHENTER

PERFORM PROCESSA



WHEN DFHPF3

PERFORM SAIR



END-EVALUATE

LAB08 – Cursor Dinâmico

Objetivo

Cursor em campo inválido.


Exemplo

CPF inválido


Cursor volta CPF

Solução

MOVE -1 TO CPFL



EXEC CICS SEND

CURSOR

END-EXEC

LAB09 – Pseudo Conversação

Objetivo

Implementar COMMAREA.


Atividades

Salvar contexto

Retornar transação


Solução

EXEC CICS RETURN


TRANSID('CLI1')


COMMAREA(WS-COMM)


LENGTH(100)


END-EXEC.

Primeira vez

IF EIBCALEN = ZERO

PERFORM PRIMEIRA-VEZ

END-IF.

LAB10 – Mini Sistema Bancário

Objetivo

Criar aplicação real.


Funcionalidades

Consultar Cliente

Cadastrar

Alterar

Excluir

Paginar

PF7

PF8

PF3


Tela


==================================

CLIENTES


Codigo


Nome


CPF



PF3=Sair

PF5=Limpar

PF7=Anterior

PF8=Próximo


==================================


Desafio Extra

Implementar:

MAPFAIL

HANDLE CONDITION

HANDLE AID

FSET

FRSET

DATAONLY

MAPONLY


Gabarito Esperado

Ao final dos 10 labs o aluno deverá dominar:

✅ DFHMSD

✅ DFHMDI

✅ DFHMDF

✅ SEND MAP

✅ RECEIVE MAP

✅ DFHAID

✅ EIBAID

✅ CURSOR

✅ MDT

✅ FSET

✅ COMMAREA

✅ Pseudo-conversação

✅ CEDA

✅ CEMT

✅ INSTALL

✅ BMS Physical

✅ Symbolic Maps


🏆 Desafio Bellacosa Mainframe (Boss Fight)

Construa uma aplicação semelhante a um sistema bancário contendo:

  • Login

  • Menu Principal

  • Consulta Cliente

  • Inclusão

  • Alteração

  • Exclusão

  • Paginação PF7/PF8

  • Help PF1

  • Mensagens de erro

  • COMMAREA

  • TSQ para paginação

  • DB2 (simulado)

  • CEDF para debug

Se conseguir completar este laboratório, você estará muito próximo do nível esperado de um Desenvolvedor COBOL/CICS Júnior pronto para atuar em projetos corporativos IBM Z.


quarta-feira, 3 de junho de 2026

☕💣📋 HOW TO PAY BACK TECHNICAL DEBT — O DIA EM QUE O PROGRAMADOR COBOL DESCOBRIU QUE ESTAVA PAGANDO JUROS POR UMA DECISÃO TOMADA EM 1998

 

Bellacosa Mainframe como pagar dividas tecnicas em mainframe



☕💣📋 HOW TO PAY BACK TECHNICAL DEBT — O DIA EM QUE O PROGRAMADOR COBOL DESCOBRIU QUE ESTAVA PAGANDO JUROS POR UMA DECISÃO TOMADA EM 1998

Existe uma frase muito conhecida no mercado de tecnologia:

"Toda empresa tem dívida técnica. Algumas apenas ainda não receberam a cobrança."

Para um programador COBOL Mainframe júnior, a expressão "dívida técnica" parece algo moderno, criado por arquitetos ágeis, consultores de transformação digital ou gurus do DevOps.

Mas a verdade é muito mais divertida.

Muito antes de alguém inventar Scrum, Kanban, DevOps, GitHub ou Microservices, os programadores COBOL já acumulavam dívida técnica sem saber.

Toda vez que alguém dizia:

"Depois a gente arruma."

Nascia uma nova parcela.

E em muitos ambientes z/OS, ainda estamos pagando prestações de decisões tomadas há 20 ou 30 anos.

Pegue seu café porque hoje vamos entender como identificar, medir, controlar e pagar dívida técnica sem derrubar a produção.


O QUE É DÍVIDA TÉCNICA?

A definição mais simples é:

Dívida técnica é o custo futuro criado por uma decisão técnica tomada para resolver um problema rapidamente hoje.

Imagine um programa COBOL.

Você precisa entregar uma alteração urgente.

O correto seria:

  • Revisar arquitetura

  • Atualizar documentação

  • Criar testes

  • Refatorar módulos

Mas o prazo é amanhã.

Então alguém faz:

IF CLIENTE = '999999'
    GO TO TRATAMENTO-ESPECIAL.

Entrega.

Produção funciona.

Cliente feliz.

Projeto encerrado.

Mas daqui a dois anos ninguém lembra por que aquele IF existe.

A dívida nasceu.


O MAIOR MITO DO MAINFRAME

Muita gente acredita que:

"Código antigo é dívida técnica."

Errado.

Código antigo pode ser excelente.

Existem programas COBOL escritos nos anos 80 que ainda hoje são exemplos de engenharia.

Por outro lado, existem programas escritos há seis meses que já nasceram endividados.

A idade do código não importa.

O que importa é:

  • Complexidade

  • Manutenibilidade

  • Clareza

  • Testabilidade

  • Documentação


COMO IDENTIFICAR DÍVIDA TÉCNICA

O primeiro passo é aprender a enxergá-la.

Alguns sintomas clássicos:

Programa que ninguém quer alterar

Quando uma demanda chega e todos falam:

"Tomara que não seja naquele programa..."

Existe dívida.


Alteração simples demora dias

Mudança:

Trocar 20 para 25.

Tempo gasto:

3 dias

Existe dívida.


Muitos abends

Se o mesmo módulo gera incidentes frequentemente:

  • S0C7

  • S0C4

  • SQLCODE negativos

  • Arquivos inconsistentes

Existe dívida.


Dependência de especialistas

Quando apenas uma pessoa entende o sistema.

Isso é uma dívida técnica humana.

Extremamente perigosa.


A METÁFORA DO CARTÃO DE CRÉDITO

A IBM utiliza uma analogia excelente.

Imagine um cartão.

Você compra algo hoje.

O benefício é imediato.

O pagamento fica para depois.

Dívida técnica funciona igual.

Benefício imediato:

Entreguei no prazo

Pagamento futuro:

Mais manutenção
Mais defeitos
Mais testes
Mais retrabalho

O problema não é usar o cartão.

O problema é esquecer da fatura.


COMO MAPEAR A DÍVIDA TÉCNICA

A primeira atividade prática é criar um inventário.

Monte uma planilha contendo:

SistemaProblemaImpactoPrioridade
CadastroGO TO excessivoMédioMédia
CobrançaSem documentaçãoAltoAlta
FaturamentoAlta complexidadeAltoAlta

Você não consegue corrigir aquilo que não consegue enxergar.


MÉTRICA 1 – COMPLEXIDADE CICLOMÁTICA

Uma das métricas mais famosas.

Ela mede quantos caminhos lógicos existem em um programa.

Exemplo:

IF A
   ...
ELSE
   ...
END-IF

Pouca complexidade.

Agora imagine:

IF A
 IF B
  IF C
   IF D

A complexidade explode.

Quanto maior a complexidade:

  • Mais difícil testar

  • Mais difícil manter

  • Maior risco de erro

Regra prática:

ValorSituação
1 a 10Boa
11 a 20Atenção
Acima de 20Risco

MÉTRICA 2 – TEMPO DE MANUTENÇÃO

Métrica simples.

Quanto tempo leva para implementar uma mudança?

Exemplo:

Alteração simples:

4 horas

Virou:

3 dias

A dívida está cobrando juros.


MÉTRICA 3 – QUANTIDADE DE INCIDENTES

Monitore:

  • Chamados

  • Tickets

  • Problemas recorrentes

Se determinado programa gera:

20% dos incidentes

Ele deve entrar imediatamente no backlog técnico.


MÉTRICA 4 – COBERTURA DE TESTES

Quanto do sistema possui testes?

Exemplo:

10%

Muito arriscado.

80%

Muito saudável.

No mundo COBOL isso pode envolver:

  • Unit Test

  • Testes automatizados

  • Batch Validation


MÉTRICA 5 – TEMPO MÉDIO DE RECUPERAÇÃO

MTTR

Mean Time To Recovery.

Quanto tempo leva para resolver um problema?

Exemplo:

10 minutos

Excelente.

8 horas

Existe forte dívida técnica.


A REGRA DOS 20%

Uma prática muito utilizada é reservar:

80% desenvolvimento
20% redução de dívida técnica

Isso impede que a dívida cresça infinitamente.


TÉCNICA 1 – REFATORAÇÃO CONTÍNUA

Refatorar significa melhorar sem alterar comportamento.

Exemplo:

Antes:

GO TO ERRO.
GO TO ERRO.
GO TO ERRO.

Depois:

PERFORM TRATA-ERRO.

Mesmo resultado.

Código mais limpo.


TÉCNICA 2 – MODULARIZAÇÃO

Programas gigantes são fábricas de dívida.

Já encontrei programas com:

80.000 linhas

Divida responsabilidades.

Crie módulos menores.

Mais simples de entender.

Mais simples de testar.


TÉCNICA 3 – DOCUMENTAÇÃO VIVA

Documentação morta é inútil.

Documentação viva é atualizada junto com o sistema.

Documente:

  • Fluxos

  • Arquivos

  • Tabelas

  • Regras de negócio


TÉCNICA 4 – ELIMINAÇÃO DE CÓDIGO MORTO

Existe um cemitério escondido em todo sistema.

Trechos como:

IF FLAG = 'X'

Que nunca mais executam.

Remover código morto reduz:

  • Complexidade

  • Risco

  • Tempo de manutenção


TÉCNICA 5 – BACKLOG TÉCNICO

Crie um backlog específico.

Exemplo:

Remover GO TO
Documentar módulo
Automatizar teste
Eliminar código morto

A dívida precisa aparecer oficialmente.

Caso contrário ela nunca será priorizada.


FERRAMENTAS ÚTEIS NO MUNDO MAINFRAME

IBM Application Discovery

Mapeia dependências.

Mostra:

  • Programas

  • Arquivos

  • CICS

  • DB2

Excelente para arqueologia de sistemas.


IBM ADDI

Application Discovery and Delivery Intelligence.

Permite visualizar relacionamentos invisíveis.

Muito útil para sistemas legados.


SonarQube

Mesmo para COBOL.

Detecta:

  • Complexidade

  • Duplicação

  • Código suspeito


IBM Developer for z/OS

Auxilia:

  • Navegação

  • Análise

  • Refatoração


Jira

Controle de backlog técnico.

Muitas empresas utilizam para registrar dívida técnica.


EASTER EGG MAINFRAME

Quer descobrir rapidamente onde existe dívida?

Procure:

GO TO
ALTER
NEXT SENTENCE

Ou:

STEP099
STEP100
STEP101

Sem documentação.

Você provavelmente encontrou um sítio arqueológico corporativo.


O ERRO MAIS COMUM DOS JUNIORES

Pensar:

"Vou reescrever tudo."

Não.

Esse é o caminho para o desastre.

A melhor estratégia quase sempre é:

Pequenas melhorias contínuas.

Todo dia.

Toda sprint.

Todo projeto.

Toda manutenção.


COMO EVOLUIR COMO PROFISSIONAL

Programadores experientes não são aqueles que escrevem mais código.

São aqueles que reduzem complexidade.

Quando você consegue olhar para um sistema e dizer:

"Esse trecho vai gerar problema daqui a dois anos."

Você começou a pensar como arquiteto.


O SEGREDO DOS MELHORES ANALISTAS DE SISTEMAS

Eles não combatem apenas bugs.

Eles combatem as causas dos bugs.

Essa é a diferença entre apagar incêndios e construir sistemas duradouros.


CONCLUSÃO

Dívida técnica não é um defeito.

Ela é uma ferramenta.

Em alguns momentos vale a pena assumir a dívida para entregar rapidamente.

O problema surge quando ninguém controla o saldo.

O programador COBOL júnior que aprender a:

  • Identificar dívida

  • Medir dívida

  • Priorizar dívida

  • Reduzir dívida

  • Monitorar dívida

Terá uma visão muito mais próxima de um arquiteto de sistemas do que de um simples codificador.

Porque no fim das contas, o maior segredo do Mainframe não é fazer programas funcionarem.

É garantir que eles continuem funcionando daqui a 30 anos sem que alguém precise vender a alma para entender por quê.



segunda-feira, 6 de fevereiro de 2023

Entendendo Mainframe Datasets (PS, PDS e PDSE)

 

Bellacosa Mainframe e os datasets ps pds e pdse no z/os

Entendendo Mainframe Datasets (PS, PDS e PDSE)

Uma análise aprofundada para desenvolvedores COBOL Jr.

A imagem resume um dos conceitos mais importantes do ecossistema z/OS: datasets. Se você está iniciando em COBOL, JCL, DB2, CICS ou suporte Mainframe, compreender datasets não é apenas importante — é obrigatório.

Muitos iniciantes vêm do mundo Windows, Linux ou Cloud e tentam enxergar o Mainframe usando a lógica de diretórios, arquivos e pastas tradicionais. Esse é um dos primeiros erros.

No Mainframe, a unidade fundamental de armazenamento não é o arquivo ("file"), mas sim o dataset.


1. O que é um Dataset?

Um dataset é uma estrutura lógica utilizada para armazenar informações dentro do z/OS.

Ele pode conter:

  • Programas COBOL

  • Fontes Assembler

  • Membros JCL

  • Procedures

  • Relatórios

  • Arquivos de entrada

  • Arquivos de saída

  • Dados transacionais

  • Bibliotecas de Load Modules

Em ambientes distribuídos você pensa:

Windows/Linux

Diretório
 ├── arquivo1.txt
 ├── arquivo2.txt
 └── arquivo3.txt

No Mainframe:

Dataset

ou

Dataset
 ├── membro1
 ├── membro2
 └── membro3

Dependendo do tipo.


2. Por que o Mainframe usa Datasets?

Quando o OS/360 foi criado nos anos 60, não existia o conceito moderno de sistemas de arquivos hierárquicos como conhecemos hoje.

O Mainframe foi projetado para:

  • Processamento em lote (Batch)

  • Alta performance

  • Baixo overhead

  • Grandes volumes de dados

Por isso surgiu o conceito de datasets.

Até hoje ele continua porque funciona extremamente bem.


3. Os Três Tipos Fundamentais

A imagem apresenta:

PS

Physical Sequential

PDS

Partitioned Dataset

PDSE

Partitioned Dataset Extended

Esses três tipos aparecem diariamente em qualquer ambiente corporativo.


4. PS – Physical Sequential Dataset

Imagine uma folha de papel.

Você escreve:

Linha 1
Linha 2
Linha 3
Linha 4

Você lê exatamente nessa sequência.

Isso é um PS.


Estrutura

Registro 1
Registro 2
Registro 3
Registro 4
Registro 5

Sem divisões internas.

Sem membros.

Sem pastas.

É um único bloco de informação.


Analogia Bellacosa

Imagine um PDF.

Você abre.

Existe apenas um documento.

Não existe:

Capítulo como arquivo separado

Tudo está dentro dele.

PS é exatamente isso.


Exemplos reais

Arquivo de clientes:

CLIENTES.DIARIO

Arquivo de vendas:

VENDAS.MENSAL

Relatório batch:

RELATORIO.FINANCEIRO

Arquivo de entrada:

INPUT.ARQ001

5. Como um programa COBOL lê um PS?

Exemplo:

SELECT CLIENTES
ASSIGN TO CLIENTES.

FD:

FD CLIENTES.

01 REG-CLIENTE.
   05 ID-CLIENTE PIC 9(5).
   05 NOME       PIC X(30).

O COBOL irá:

Read registro 1
Read registro 2
Read registro 3
...
EOF

Sequencialmente.


6. Características do PS

Vantagens

Muito rápido.

Baixo overhead.

Excelente para batch.

Menos controle interno.


Desvantagens

Não possui membros.

Difícil organizar múltiplos objetos.

Pouca flexibilidade.


7. Onde um COBOL Jr vê PS?

Todos os dias.

Arquivos:

INPUT
OUTPUT
SORTWK
EXTRACT
REPORT

Normalmente são PS.

Exemplo JCL:

//INFILE DD DSN=USER.CLIENTES,
// DISP=SHR

Esse dataset costuma ser PS.


8. PDS – Partitioned Dataset

Agora imagine um armário de arquivos.


Estrutura:

Armário
 ├── Gaveta A
 ├── Gaveta B
 ├── Gaveta C

O armário é o dataset.

As gavetas são membros.


Estrutura real

USER.COBOL.SOURCE

Contendo:

PROG001
PROG002
PROG003
PROG004

Cada membro é um programa.


Analogia Bellacosa

Imagine uma pasta Windows:

COBOL
 ├── PROG001.CBL
 ├── PROG002.CBL
 └── PROG003.CBL

No Mainframe:

USER.COBOL.SOURCE

com membros:

PROG001
PROG002
PROG003

9. O Diretório do PDS

O segredo do PDS está no diretório.

Ele mantém a lista dos membros.

Exemplo:

PROG001
PROG002
PROG003
PROG004

Toda vez que você abre:

USER.COBOL.SOURCE

o sistema consulta esse diretório.


10. O Problema Histórico do PDS

Aqui aparece uma questão clássica de entrevista.

O PDS sofre com:

Directory Full

ou

Space Fragmentation


Imagine:

PROG001
PROG002
PROG003

Você apaga:

PROG002

O espaço não é totalmente reaproveitado.

Com o tempo:

Espaço livre espalhado

começa a existir dentro do dataset.


Consequências:

  • desperdício de espaço

  • lentidão

  • necessidade de manutenção


11. Compress do PDS

Por isso surgiu o famoso:

IEBCOPY COMPRESS

ou

3.1 Compress

no ISPF.


O processo reorganiza:

Membro 1
Membro 2
Membro 3

removendo os buracos.


Analogia:

Desfragmentação de disco.


12. Onde o PDS é usado?

Muito comum para:

JCL

USER.JCL

COBOL Sources

USER.COBOL

PROC Libraries

USER.PROCLIB

Copybooks

USER.COPYLIB

13. Como acessar um membro?

Sintaxe:

USER.COBOL(PROG001)

Dataset:

USER.COBOL

Membro:

PROG001

14. JCL utilizando membro

//SYSIN DD DSN=USER.JCL(MYJOB),
 // DISP=SHR

ou

EXEC PROC=PROC001

onde:

USER.PROCLIB(PROC001)

contém a procedure.


15. PDSE – A Evolução do PDS

IBM percebeu:

"PDS gera manutenção demais."

Resultado:

PDSE.

Partitioned Dataset Extended.


O que mudou?

Praticamente tudo internamente.

Externamente parece igual.


Você continua acessando:

USER.COBOL(PROG001)

Mas internamente o gerenciamento mudou completamente.


16. PDSE é um Sistema Inteligente

PDS:

Gerenciamento manual

PDSE:

Gerenciamento automático

Analogia Bellacosa:

PDS:

Arquivo de aço dos anos 80

PDSE:

Google Drive

17. Eliminação do Compress

Maior vantagem.

PDS:

Compress obrigatório

PDSE:

Compress não existe

O próprio sistema gerencia.


18. Espaço Dinâmico

PDS:

Diretório fixo

PDSE:

Diretório expansível

Isso resolve:

Directory Full

19. Melhor Performance

PDSE utiliza estruturas modernas.

Possui cache.

Melhor gerenciamento interno.

Menor contenção.


Em ambientes grandes:

Milhares de acessos simultâneos

a diferença é perceptível.


20. PDSE para Load Libraries

Muito importante.

Bibliotecas de programas compilados:

LOADLIB
STEPLIB
LINKLIB

normalmente são PDSE.


Exemplo:

USER.LOADLIB

Membros:

PROGA
PROGB
PROGC

Cada membro é um módulo executável.


21. Geração de Objetos COBOL

Fluxo clássico:

Source
 ↓
Compile
 ↓
Object
 ↓
Link Edit
 ↓
Load Module

Onde ficam?

Source:

PDS/PDSE

Objeto:

PDS/PDSE

Load:

PDSE

22. Fluxo Completo de Desenvolvimento COBOL

Imagine:

USER.COBOL

Membro:

PGMCLI01

Compilação:

IGYCRCTL

gera:

USER.OBJLIB

Depois:

USER.LOADLIB

Finalmente:

EXEC PGM=PGMCLI01

executa o módulo armazenado na LOADLIB.


23. O que um Dev COBOL Jr precisa decorar?

PS

Pergunta:

"Possui membros?"

Resposta:

Não

PDS

Pergunta:

"Precisa compress?"

Resposta:

Sim

PDSE

Pergunta:

"Precisa compress?"

Resposta:

Não

PDS

Pergunta:

"Directory fixo?"

Resposta:

Sim

PDSE

Pergunta:

"Directory expansível?"

Resposta:

Sim

24. Perguntas Clássicas de Entrevista

Qual a diferença entre PDS e PDSE?

Resposta curta:

PDS utiliza diretório fixo e requer compressão periódica. PDSE possui gerenciamento automático de espaço, diretório dinâmico e não necessita compressão.


O que é um membro?

Resposta:

Uma subdivisão lógica dentro de um PDS ou PDSE.


Um PS possui membros?

Resposta:

Não.


Como referenciar um membro?

Resposta:

DSN(MEMBER)

Exemplo:

USER.COBOL(PROG001)

Onde ficam os fontes COBOL?

Resposta:

Normalmente:

PDS ou PDSE

25. Visão Arquitetural que Poucos Iniciantes Entendem

A maioria dos juniores pensa:

PS = ruim
PDS = melhor
PDSE = moderno

Mas isso é simplificação excessiva.

A verdade é:

Cada um resolve um problema diferente.


PS

Especialista em:

Grande volume sequencial

PDS

Especialista em:

Organização de membros

PDSE

Especialista em:

Organização moderna de membros

Portanto:

PS ≠ PDS
PDS ≠ PDSE

Eles não competem diretamente.


26. Como enxergar isso como um profissional Mainframe

Visualize uma aplicação bancária:

Fontes COBOL
     ↓
USER.COBOL (PDSE)

Copybooks
     ↓
USER.COPYLIB (PDSE)

Objetos
     ↓
USER.OBJLIB (PDSE)

Executáveis
     ↓
USER.LOADLIB (PDSE)

Arquivo de clientes
     ↓
CLIENTE.MESTRE (PS)

Arquivo de transações
     ↓
TRANSACOES.DIA (PS)

Relatório
     ↓
RELATORIO.FINAL (PS)

Perceba a lógica:

  • Código → PDS/PDSE

  • Dados → PS

Essa separação é um dos pilares da arquitetura Mainframe.


Conclusão

A imagem apresenta apenas a superfície do assunto. Para um desenvolvedor COBOL Jr., o entendimento profundo é que datasets são a espinha dorsal do z/OS. Quase tudo que você fará no Mainframe envolverá abrir, criar, catalogar, alocar, ler, gravar, copiar, compactar ou referenciar datasets.

Guarde a regra mental mais importante:

PS   = Arquivo único (Single File)

PDS  = Biblioteca com membros (Folder)

PDSE = Biblioteca inteligente (Smart Folder)

E, no dia a dia profissional:

Dados de negócio     → PS
Fontes COBOL         → PDSE
Copybooks            → PDSE
JCLs                 → PDSE
PROCs                → PDSE
Load Modules         → PDSE

Quando você dominar datasets, começará a enxergar o Mainframe da forma correta: não como um "Linux antigo", mas como um sistema operacional projetado para processar bilhões de transações com confiabilidade, organização e desempenho que continuam sendo referência mundial décadas depois de sua criação.


quinta-feira, 24 de fevereiro de 2022

Da Compilação à Execução de um Programa COBOL — Parte II

 

Bellacosa Mainframe e a compilação cobol parte II

☕ Um Café no Bellacosa Mainframe

Da Compilação à Execução de um Programa COBOL — Parte II

CICS, Db2, IMS e Adabas: O que Acontece com o Código Antes de o Compilador Entrar em Cena

Introdução

Na primeira parte desta jornada, conhecemos o nascimento de um programa COBOL.

Vimos que tudo começa com o código-fonte armazenado em uma biblioteca, geralmente um PDS ou PDSE, e que os copybooks funcionam como contratos reutilizáveis entre programas, arquivos, mensagens e sistemas.

Também descobrimos uma diferença essencial:

COPY inclui código-fonte.
CALL executa outro módulo.

Porém, quando abrimos um programa corporativo real, especialmente em um banco, seguradora, indústria ou grande empresa, encontramos instruções que parecem COBOL, mas que não pertencem diretamente à linguagem.

Por exemplo:

           EXEC CICS
                READ FILE('CLIENTE')
                INTO(REGISTRO-CLIENTE)
                RIDFLD(WS-CHAVE)
           END-EXEC.

Ou:

           EXEC SQL
                SELECT NOME
                  INTO :WS-NOME
                  FROM CLIENTES
                 WHERE CODIGO = :WS-CODIGO
           END-EXEC.

Também podemos encontrar chamadas como:

           CALL 'CBLTDLI'
                USING GU-FUNCTION
                      PCB-MASK
                      AREA-SEGMENTO
                      SSA-CLIENTE.

Ou estruturas utilizadas na comunicação com Adabas.

O Programador COBOL Padawan olha para tudo isso e pode imaginar que o compilador entende todos esses comandos naturalmente.

Mas não é exatamente assim.

Antes que o compilador COBOL possa transformar o fonte em código objeto, outros componentes precisam preparar partes específicas do programa.

É como uma grande cozinha corporativa.

O compilador é o chef principal, mas alguns ingredientes precisam ser preparados por especialistas antes de chegar à bancada.

Nesta segunda parte, vamos entender:

  • o papel do tradutor CICS;

  • como o Db2 processa comandos EXEC SQL;

  • o que é um DBRM;

  • por que o BIND do Db2 não é linkedição;

  • como programas COBOL acessam IMS;

  • como ocorre a comunicação com Adabas;

  • o que todas essas tecnologias possuem em comum.

Prepare o café, abra o ISPF e venha descobrir o que realmente acontece com o código antes da compilação.


1. Nem tudo o que aparece no programa é COBOL puro

COBOL possui instruções próprias, como:

MOVE
ADD
SUBTRACT
MULTIPLY
DIVIDE
COMPUTE
IF
EVALUATE
PERFORM
READ
WRITE
REWRITE
DELETE
OPEN
CLOSE
CALL

Essas instruções fazem parte da linguagem e podem ser analisadas diretamente pelo compilador.

Porém, comandos como:

EXEC CICS
EXEC SQL

pertencem a ambientes externos.

Eles foram incorporados ao fonte por meio de uma sintaxe padronizada, mas precisam ser interpretados por componentes especializados.

Uma representação simples seria:

Programa COBOL
   ├── comandos COBOL
   ├── comandos CICS
   ├── comandos SQL
   ├── chamadas IMS
   └── interfaces Adabas

O compilador entende plenamente a primeira parte.

As demais exigem preparação, tradução, bibliotecas ou interfaces específicas.


2. O que é o CICS?

CICS significa Customer Information Control System.

Na prática, ele é uma plataforma de processamento de transações online.

Quando um cliente consulta o saldo, realiza uma transferência, altera um endereço ou solicita uma segunda via de documento, existe uma grande possibilidade de algum componente CICS estar envolvido em ambientes tradicionais IBM Z.

O CICS gerencia elementos como:

  • transações;

  • programas;

  • terminais;

  • sessões;

  • arquivos;

  • filas;

  • segurança;

  • recuperação;

  • sincronização;

  • comunicação entre sistemas;

  • controle de recursos;

  • integração com Db2, MQ e outras tecnologias.

O programa COBOL contém a regra de negócio.

O CICS controla o ambiente transacional em que essa regra será executada.

Imagine uma transação chamada:

C001

Ela pode estar associada ao programa:

PGMCLI01

Quando o usuário informa C001, o CICS localiza o programa, cria uma task, verifica segurança, entrega o controle e acompanha sua execução.


3. Os comandos EXEC CICS

Um programa pode utilizar comandos como:

           EXEC CICS
                RECEIVE MAP('MAPCLI')
                        MAPSET('SETCLI')
                        INTO(AREA-MAPA)
           END-EXEC.

Esse comando solicita o recebimento dos dados de uma tela.

Outro exemplo:

           EXEC CICS
                SEND MAP('MAPCLI')
                     MAPSET('SETCLI')
                     FROM(AREA-MAPA)
                     ERASE
           END-EXEC.

Nesse caso, o programa solicita o envio de um mapa para o terminal.

Também podemos encontrar:

           EXEC CICS
                READ FILE('ARQCLI')
                     INTO(REGISTRO-CLIENTE)
                     RIDFLD(WS-CODIGO)
                     RESP(WS-RESP)
           END-EXEC.

Ou:

           EXEC CICS
                LINK PROGRAM('PGM002')
                     COMMAREA(AREA-COMUNICACAO)
                     LENGTH(WS-TAMANHO)
           END-EXEC.

Esses comandos parecem fazer parte do COBOL porque estão misturados ao código.

Entretanto, o compilador COBOL puro não sabe implementar operações como:

  • enviar uma tela;

  • ler um arquivo controlado pelo CICS;

  • iniciar outra transação;

  • acessar uma fila temporária;

  • chamar outro programa por meio do CICS;

  • devolver o controle ao monitor transacional.

Por isso, entra em cena o tradutor CICS.


4. O tradutor CICS

O tradutor CICS analisa os comandos:

EXEC CICS
...
END-EXEC

e os transforma em estruturas que o compilador COBOL consegue processar.

O fluxo conceitual é:

Fonte COBOL com EXEC CICS
             ↓
Tradutor CICS
             ↓
Fonte COBOL traduzido
             ↓
Compilador COBOL

O tradutor não executa a transação.

Ele apenas prepara o fonte.

Imagine o seguinte comando:

           EXEC CICS
                WRITEQ TS
                QUEUE('TEMP001')
                FROM(WS-DADOS)
                LENGTH(WS-TAMANHO)
           END-EXEC.

O tradutor converte essa instrução em uma sequência de chamadas e estruturas internas utilizadas pela interface do CICS.

Depois dessa tradução, o compilador enxerga COBOL válido.

Durante a execução, o programa chama os serviços CICS correspondentes.


5. EXEC CICS é uma macro?

No cotidiano do mainframe, alguns profissionais chamam os comandos EXEC CICS de macros.

Essa forma de falar é compreensível, mas pode gerar confusão.

Uma macro, em outros contextos, costuma ser um trecho expandido diretamente durante a montagem ou compilação.

O comando EXEC CICS é melhor compreendido como uma instrução embutida que precisa ser traduzida por um processador específico.

Portanto, tecnicamente, é mais correto dizer:

EXEC CICS é um comando CICS embutido no programa COBOL.

A distinção pode parecer pequena, mas ajuda o iniciante a compreender que existe uma etapa especializada antes da compilação.


6. CICS controla o recurso, não o programa COBOL

Considere:

           EXEC CICS
                READ FILE('CLIENTES')
                     INTO(REG-CLIENTE)
                     RIDFLD(WS-CODIGO)
                     RESP(WS-RESP)
           END-EXEC.

O programa não abre diretamente o arquivo físico.

Ele pede ao CICS que realize a leitura.

O CICS pode cuidar de:

  • localização do recurso;

  • compartilhamento;

  • segurança;

  • recuperação;

  • bloqueios;

  • integridade;

  • controle transacional;

  • resposta de erro.

O programa recebe o resultado e continua a regra de negócio.

Esse modelo é poderoso porque separa responsabilidades.

Programa COBOL → lógica de negócio
CICS          → controle transacional

7. O que é o Db2?

Db2 é o sistema gerenciador de banco de dados relacional da IBM amplamente utilizado no IBM Z.

Ele organiza informações em:

  • tabelas;

  • colunas;

  • linhas;

  • índices;

  • views;

  • tablespaces;

  • databases;

  • schemas;

  • packages;

  • plans;

  • collections.

O COBOL pode acessar dados Db2 por meio de SQL embutido.

Exemplo:

           EXEC SQL
                SELECT NOME,
                       SALDO
                  INTO :WS-NOME,
                       :WS-SALDO
                  FROM CLIENTES
                 WHERE CODIGO = :WS-CODIGO
           END-EXEC.

Esse SQL está inserido dentro do fonte COBOL.

Porém, ele não pertence diretamente à linguagem COBOL.

Assim como ocorre com o CICS, o SQL precisa ser processado antes da compilação.


8. O pré-compilador Db2

Historicamente, programas COBOL com SQL passavam pelo pré-compilador Db2.

O fluxo clássico é:

Fonte COBOL com EXEC SQL
              ↓
Pré-compilador Db2
              ↓
Fonte COBOL modificado
              +
             DBRM

O pré-compilador realiza duas tarefas importantes.

Primeiro, ele substitui ou prepara os comandos SQL no fonte para que o compilador COBOL possa processá-los.

Segundo, ele gera o DBRM.

Em ambientes modernos, pode ser utilizado um coprocessador SQL integrado ao compilador.

Para o iniciante, o conceito fundamental permanece:

O SQL precisa ser analisado por uma tecnologia Db2 antes ou durante a compilação COBOL.


9. O que é o DBRM?

DBRM significa Database Request Module.

Ele contém informações extraídas dos comandos SQL presentes no programa.

Considere:

           EXEC SQL
                UPDATE CONTAS
                   SET SALDO = SALDO - :WS-VALOR
                 WHERE AGENCIA = :WS-AGENCIA
                   AND CONTA   = :WS-CONTA
           END-EXEC.

O Db2 precisa conhecer essa instrução para preparar sua execução.

O DBRM representa as requisições SQL encontradas no programa.

Posteriormente, ele será utilizado em uma operação de BIND.

O fluxo é:

Programa com SQL
       ↓
DBRM
       ↓
BIND PACKAGE
       ↓
Package Db2

O package contém a preparação necessária para que o Db2 execute as instruções SQL.


10. O BIND do Db2

O BIND do Db2 transforma o DBRM em um package executável pelo subsistema.

Durante esse processo, o Db2 pode avaliar:

  • existência das tabelas;

  • existência das colunas;

  • existência dos índices;

  • autorizações;

  • estatísticas;

  • opções de isolamento;

  • caminhos de acesso;

  • versões;

  • collections;

  • parâmetros de execução.

O Db2 decide como determinada instrução poderá ser executada.

Por exemplo:

SELECT NOME
FROM CLIENTES
WHERE CODIGO = ?

O Db2 poderá utilizar:

  • um índice;

  • uma varredura de tabela;

  • um índice composto;

  • uma combinação de acessos;

  • alguma estratégia definida pelo otimizador.

O programa COBOL informa o que deseja.

O Db2 decide como localizar os dados.


11. BIND Db2 não é linkedição

Este é um dos pontos mais importantes deste capítulo.

No mainframe, a palavra “bind” pode aparecer em contextos diferentes.

Existe o Binder do z/OS, responsável pela criação do módulo executável.

E existe o BIND do Db2, responsável pela preparação do SQL.

Binder z/OS → cria load module ou program object
BIND Db2    → cria package

Portanto:

Compilação + linkedição ≠ BIND Db2

Um programa pode estar perfeitamente compilado e linkedidado, mas falhar porque:

  • o package não existe;

  • o package está inválido;

  • a collection está incorreta;

  • o usuário não possui autorização;

  • os objetos Db2 foram alterados;

  • a versão do package não corresponde ao programa.


12. As duas trilhas de um programa Db2

Um programa COBOL com Db2 segue duas trilhas paralelas.

Trilha COBOL

Fonte
  ↓
Compilador
  ↓
Código objeto
  ↓
Binder
  ↓
Módulo executável

Trilha Db2

EXEC SQL
  ↓
DBRM
  ↓
BIND
  ↓
Package

Na execução, as duas trilhas se encontram.

O módulo executável inicia a lógica COBOL.

Quando chega a um comando SQL, ele aciona a interface Db2, que utiliza o package correspondente.

O load module sozinho não é suficiente.

O package sozinho também não é suficiente.

Eles trabalham em conjunto.


13. Host variables

Campos COBOL utilizados dentro de instruções SQL são chamados de host variables.

Exemplo:

       01  WS-CODIGO            PIC 9(09).
       01  WS-NOME              PIC X(40).

No SQL:

           EXEC SQL
                SELECT NOME
                  INTO :WS-NOME
                  FROM CLIENTES
                 WHERE CODIGO = :WS-CODIGO
           END-EXEC.

Os dois-pontos indicam que os campos pertencem ao programa COBOL.

Sem essa indicação, o Db2 poderia interpretar o nome como uma coluna ou outro elemento SQL.

As host variables formam a ponte entre:

Memória COBOL ↔ Db2

14. A SQLCA

SQLCA significa SQL Communication Area.

Ela contém informações sobre a execução do último comando SQL.

Sua inclusão pode ser feita assim:

           EXEC SQL
                INCLUDE SQLCA
           END-EXEC.

Depois de uma instrução SQL, o programa pode testar:

           EVALUATE SQLCODE
               WHEN 0
                   DISPLAY 'OPERACAO REALIZADA'
               WHEN 100
                   DISPLAY 'REGISTRO NAO ENCONTRADO'
               WHEN OTHER
                   DISPLAY 'ERRO SQL: ' SQLCODE
           END-EVALUATE.

O SQLCODE é um dos campos mais conhecidos.

Alguns resultados comuns são:

SQLCODE 0    → sucesso
SQLCODE 100  → nenhuma linha encontrada
SQLCODE negativo → erro
SQLCODE positivo → aviso ou situação específica

O programa precisa tratar esses resultados.

Ignorar o SQLCODE é como atravessar uma rodovia sem olhar os sinais.


15. Indicadores de nulo

No Db2, uma coluna pode aceitar valor nulo.

COBOL, porém, trabalha com campos que possuem conteúdo físico.

Para representar um nulo, é comum utilizar uma variável indicadora.

Exemplo:

       01  WS-TELEFONE          PIC X(15).
       01  WS-IND-TELEFONE      PIC S9(04) COMP.

No SQL:

           EXEC SQL
                SELECT TELEFONE
                  INTO :WS-TELEFONE
                       :WS-IND-TELEFONE
                  FROM CLIENTES
                 WHERE CODIGO = :WS-CODIGO
           END-EXEC.

Se o indicador retornar valor negativo, a coluna estava nula.

Sem o indicador adequado, o programa pode receber erros ao tentar trabalhar com valores nulos.


16. Um programa CICS com Db2

Em sistemas online, é comum encontrar CICS e Db2 dentro do mesmo programa.

Exemplo:

           EXEC CICS
                RECEIVE MAP('MAPCLI')
                        MAPSET('SETCLI')
                        INTO(AREA-MAPA)
           END-EXEC.

           MOVE MAP-CODIGO TO WS-CODIGO.

           EXEC SQL
                SELECT NOME,
                       SALDO
                  INTO :WS-NOME,
                       :WS-SALDO
                  FROM CLIENTES
                 WHERE CODIGO = :WS-CODIGO
           END-EXEC.

           EXEC CICS
                SEND MAP('MAPCLI')
                     MAPSET('SETCLI')
                     FROM(AREA-MAPA)
           END-EXEC.

Nesse caso, o programa utiliza:

  • CICS para controlar a transação e a tela;

  • Db2 para acessar os dados;

  • COBOL para executar a regra de negócio.

O fluxo pode envolver:

Fonte com CICS e SQL
          ↓
Tradução CICS
          ↓
Processamento Db2
          ↓
Compilação COBOL
          ↓
Linkedição
          ↓
BIND do package Db2

A sequência exata pode variar conforme as ferramentas e versões.

Mas todos esses elementos precisam ser preparados.


17. O que é IMS?

IMS significa Information Management System.

É uma plataforma histórica e extremamente importante no ecossistema IBM Z.

Ela pode ser dividida em duas grandes áreas:

IMS DB → gerenciamento de banco de dados hierárquico
IMS TM → gerenciamento de transações e mensagens

Um banco IMS não organiza os dados exatamente como uma tabela relacional.

Ele utiliza uma estrutura hierárquica baseada em segmentos.

Podemos imaginar:

CLIENTE
   ├── CONTA
   │      ├── MOVIMENTO
   │      └── CARTAO
   └── ENDERECO

O segmento CLIENTE pode ser o pai.

CONTA e ENDERECO podem ser filhos.

MOVIMENTO pode ser filho de CONTA.

Essa estrutura lembra uma árvore.


18. Chamadas DL/I

Programas COBOL acessam IMS por meio da interface DL/I.

DL/I significa Data Language/I.

Uma chamada conceitual pode ser:

           CALL 'CBLTDLI'
                USING GU-FUNCTION
                      PCB-MASK
                      SEGMENTO-CLIENTE
                      SSA-CLIENTE.

A função GU significa Get Unique.

Ela solicita a localização de um segmento específico.

Outras funções comuns incluem:

GU    Get Unique
GN    Get Next
GNP   Get Next Within Parent
GHU   Get Hold Unique
GHN   Get Hold Next
ISRT  Insert
REPL  Replace
DLET  Delete

O programa envia uma solicitação ao IMS.

O IMS navega pela estrutura hierárquica e retorna o segmento solicitado.


19. O PCB no IMS

PCB significa Program Communication Block.

Ele representa a comunicação entre o programa e um banco ou fila de mensagens IMS.

Após uma chamada DL/I, o programa pode verificar campos da PCB para descobrir:

  • status da operação;

  • nome do segmento;

  • nível hierárquico;

  • informações de processamento;

  • resultado da chamada.

É semelhante ao papel do FILE STATUS em arquivos ou do SQLCODE no Db2.

Cada tecnologia possui sua maneira de informar ao programa o resultado da operação.

QSAM/VSAM → FILE STATUS
Db2       → SQLCODE e SQLSTATE
IMS       → status da PCB
CICS      → RESP e RESP2
Adabas    → response code

Um bom programador não ignora nenhum desses retornos.


20. O que são DBD e PSB?

O ambiente IMS utiliza definições importantes.

DBD

DBD significa Database Description.

Ele descreve a estrutura do banco IMS:

  • segmentos;

  • relacionamentos;

  • campos-chave;

  • organização;

  • métodos de acesso;

  • características físicas e lógicas.

PSB

PSB significa Program Specification Block.

Ele define quais recursos um programa pode acessar e como poderá acessá-los.

O PSB pode conter PCBs para:

  • bancos IMS;

  • filas de mensagens;

  • outros recursos.

Podemos imaginar:

DBD → descreve o banco
PSB → descreve a visão do programa
PCB → interface usada durante a execução

21. IMS Transaction Manager

O IMS TM controla transações baseadas em mensagens.

Um fluxo simplificado pode ser:

Terminal, API ou outro sistema
             ↓
Mensagem de entrada
             ↓
Fila IMS
             ↓
Código de transação
             ↓
Programa COBOL
             ↓
Processamento
             ↓
Mensagem de saída

O programa pode receber a mensagem por meio de uma PCB de entrada e produzir uma resposta.

Assim como o CICS, o IMS controla o ambiente transacional.

Mas sua arquitetura, seus conceitos e sua forma de programação são diferentes.


22. Regiões IMS

Programas IMS podem executar em diferentes tipos de regiões.

Entre elas:

  • MPP;

  • BMP;

  • batch DL/I;

  • regiões utilitárias;

  • ambientes controlados pelo IMS.

MPP

Message Processing Program.

Processa mensagens e transações IMS.

BMP

Batch Message Processing.

Executa processamento batch com acesso controlado a bancos IMS e, em certos casos, filas.

O programa COBOL continua sendo compilado e linkedidado.

Porém, sua execução depende do ambiente IMS e das definições corretas.


23. O que é Adabas?

Adabas é um sistema de gerenciamento de banco de dados criado pela Software AG.

Ele se tornou muito conhecido em ambientes que utilizam Natural, mas também pode ser acessado por programas COBOL.

O Adabas possui uma arquitetura própria e utiliza componentes como:

  • Nucleus;

  • arquivos Adabas;

  • control blocks;

  • buffers;

  • interfaces de chamada;

  • códigos de resposta.

O Nucleus é o componente central que processa as solicitações.

Uma representação simplificada seria:

Programa COBOL
      ↓
Interface Adabas
      ↓
Adabas Nucleus
      ↓
Arquivo Adabas

24. Control Block e buffers Adabas

Um programa pode utilizar um control block para informar:

  • comando;

  • arquivo;

  • identificadores;

  • opções;

  • códigos de resposta;

  • informações de navegação;

  • parâmetros da operação.

Também podem existir buffers como:

Format Buffer

Define os campos que serão lidos ou atualizados.

Record Buffer

Recebe ou envia os dados do registro.

Search Buffer

Descreve os critérios de pesquisa.

Value Buffer

Contém os valores utilizados na pesquisa.

ISN Buffer

Pode armazenar números internos de sequência de registros.

Essas estruturas são fornecidas à interface Adabas durante a chamada.


25. Response Code Adabas

Após uma operação, o programa precisa verificar o código de resposta.

Um retorno de sucesso indica que a solicitação foi processada.

Outros códigos podem indicar:

  • registro não encontrado;

  • arquivo indisponível;

  • comando inválido;

  • conflito;

  • erro de formato;

  • problema de segurança;

  • falha de comunicação;

  • inconsistência de parâmetros.

Assim como no Db2, IMS, CICS ou VSAM, nunca se deve presumir que uma operação foi bem-sucedida sem verificar o retorno.


26. Natural e Adabas

Muitos iniciantes associam Adabas exclusivamente à linguagem Natural.

Essa associação existe porque as duas tecnologias são frequentemente utilizadas juntas.

Porém:

Natural é uma linguagem e ambiente de desenvolvimento.
Adabas é um sistema gerenciador de banco de dados.

Um programa COBOL também pode acessar Adabas por meio de interfaces apropriadas.

Da mesma forma, um programa Natural pode acessar outros recursos.

Não confunda a linguagem com o banco de dados.


27. O padrão comum entre CICS, Db2, IMS e Adabas

Apesar das diferenças, existe um padrão arquitetural comum.

O programa COBOL não controla diretamente toda a infraestrutura.

Ele solicita serviços.

COBOL → descreve a regra de negócio
CICS  → controla a transação
Db2   → gerencia dados relacionais
IMS   → gerencia dados hierárquicos e mensagens
Adabas → gerencia dados em sua arquitetura

Cada ambiente fornece:

  • interfaces;

  • comandos;

  • códigos de retorno;

  • controle de recursos;

  • segurança;

  • recuperação;

  • mecanismos de diagnóstico.

O programa COBOL deve respeitar os contratos de cada um.


28. O código de retorno é parte da lógica

Considere um programador que escreve:

           EXEC SQL
                UPDATE CONTAS
                   SET SALDO = SALDO - :WS-VALOR
                 WHERE CONTA = :WS-CONTA
           END-EXEC.

           DISPLAY 'OPERACAO REALIZADA'.

Esse programa exibe sucesso sem verificar o SQLCODE.

Se a conta não existir, o programa poderá informar uma operação que não aconteceu.

O correto seria:

           EXEC SQL
                UPDATE CONTAS
                   SET SALDO = SALDO - :WS-VALOR
                 WHERE CONTA = :WS-CONTA
           END-EXEC.

           EVALUATE SQLCODE
               WHEN 0
                   DISPLAY 'OPERACAO REALIZADA'
               WHEN 100
                   DISPLAY 'CONTA NAO ENCONTRADA'
               WHEN OTHER
                   DISPLAY 'ERRO DB2: ' SQLCODE
           END-EVALUATE.

O mesmo princípio vale para:

RESP CICS
FILE STATUS
PCB IMS
Response Code Adabas

No mainframe, tratar retorno não é uma recomendação opcional.

É parte da regra de negócio.


29. O perigo das opções implícitas

Alguns comandos utilizam tratamento automático de erro.

No CICS, por exemplo, certos erros podem transferir o controle para mecanismos padrão caso o programa não utilize opções como:

RESP
RESP2
NOHANDLE
HANDLE CONDITION

Em programas modernos, é comum preferir tratamento explícito por RESP e RESP2.

Exemplo:

           EXEC CICS
                READ FILE('ARQCLI')
                     INTO(REG-CLIENTE)
                     RIDFLD(WS-CODIGO)
                     RESP(WS-RESP)
                     RESP2(WS-RESP2)
           END-EXEC.

           EVALUATE WS-RESP
               WHEN DFHRESP(NORMAL)
                   CONTINUE
               WHEN DFHRESP(NOTFND)
                   DISPLAY 'CLIENTE NAO ENCONTRADO'
               WHEN OTHER
                   DISPLAY 'ERRO CICS: ' WS-RESP
           END-EVALUATE.

O objetivo é impedir que falhas sejam tratadas de forma inesperada.


30. Copybooks especializados

Esses ambientes também utilizam copybooks.

No CICS, podem existir:

  • layouts de COMMAREA;

  • mapas BMS;

  • estruturas de mensagens;

  • áreas de resposta;

  • contratos entre programas.

No Db2, podem existir:

  • DCLGENs;

  • estruturas de tabelas;

  • SQLCA;

  • áreas de entrada e saída.

No IMS:

  • layouts de segmentos;

  • PCBs;

  • SSAs;

  • áreas de mensagens.

No Adabas:

  • control blocks;

  • buffers;

  • layouts de registros;

  • constantes e códigos.

Portanto, o copybook apresentado na primeira parte continua sendo fundamental.

Ele liga o programa às interfaces dos subsistemas.


31. DCLGEN no Db2

DCLGEN significa Declarations Generator.

Ele pode gerar estruturas COBOL compatíveis com colunas de uma tabela Db2.

Exemplo conceitual:

       01  DCLCLIENTES.
           10 CLIENTE-CODIGO     PIC S9(9) COMP.
           10 CLIENTE-NOME       PIC X(40).
           10 CLIENTE-SALDO      PIC S9(11)V99 COMP-3.

O programa inclui essa estrutura por meio de um copybook ou processo equivalente.

Isso reduz a possibilidade de divergência entre os campos COBOL e as definições do banco.

Porém, a geração não elimina a necessidade de análise.

Tipos, precisão, nulos e conversões precisam ser compreendidos.


32. O programa ainda não é executável

Depois da tradução CICS, do processamento SQL e da preparação das interfaces IMS ou Adabas, o programa ainda não está pronto para executar.

Neste momento, temos algo semelhante a:

Fonte COBOL preparado
Copybooks expandidos ou localizados
Comandos CICS traduzidos
Comandos SQL processados
DBRM gerado
Interfaces disponíveis

O próximo passo será a compilação.

O compilador transformará o fonte em código objeto.

Depois, o Binder realizará a linkedição.

Somente então surgirá o módulo executável.


33. O fluxo completo desta etapa

Podemos representar a Parte II assim:

Fonte COBOL
     ↓
Identificação de comandos externos
     ↓
EXEC CICS → tradução CICS
     ↓
EXEC SQL → pré-compilação ou coprocessamento Db2
     ↓
Geração do DBRM
     ↓
Chamadas IMS → preparação das interfaces DL/I
     ↓
Chamadas Adabas → uso de control blocks e buffers
     ↓
Fonte preparado para compilação

Em paralelo:

DBRM
  ↓
BIND Db2
  ↓
Package

34. Erros típicos antes da compilação

Nesta fase, podem ocorrer problemas como:

CICS

  • comando EXEC CICS inválido;

  • opção incompatível;

  • copybook CICS ausente;

  • tamanho incorreto de COMMAREA;

  • referência a campo inexistente;

  • estrutura de mapa incorreta.

Db2

  • host variable não declarada;

  • SQLCA ausente;

  • sintaxe SQL inválida;

  • DCLGEN incompatível;

  • indicador de nulo inexistente;

  • DBRM não gerado.

IMS

  • PCB incompatível;

  • SSA incorreta;

  • função DL/I inválida;

  • layout de segmento divergente;

  • ordem incorreta dos parâmetros.

Adabas

  • control block incorreto;

  • buffer incompatível;

  • código de comando inválido;

  • tamanho inconsistente;

  • interface ausente.

O segredo é identificar em qual tecnologia o erro está ocorrendo.


35. O Padawan pergunta: quem executa primeiro?

A resposta depende do programa.

Um programa COBOL batch simples pode seguir diretamente para o compilador.

Um programa CICS pode precisar de tradução.

Um programa Db2 precisa de processamento SQL.

Um programa CICS Db2 precisa dos dois.

Um programa IMS ou Adabas precisa das interfaces corretas durante compilação, linkedição e execução.

Portanto:

Não existe um único fluxo universal.

Existe um fluxo-base que recebe etapas adicionais conforme as tecnologias utilizadas.


36. O verdadeiro papel do COBOL

O COBOL continua sendo o centro da regra de negócio.

Exemplo:

           IF WS-SALDO >= WS-VALOR
               PERFORM DEBITAR-CONTA
               PERFORM REGISTRAR-MOVIMENTO
           ELSE
               MOVE 'SALDO INSUFICIENTE'
                 TO WS-MENSAGEM
           END-IF.

Porém, as operações internas podem utilizar vários subsistemas.

DEBITAR-CONTA        → Db2
REGISTRAR-MOVIMENTO  → IMS
ENVIAR-MENSAGEM      → CICS ou MQ
CONSULTAR-CADASTRO   → Adabas

O COBOL orquestra a regra.

Os subsistemas fornecem capacidades especializadas.


37. Uma analogia com uma missão espacial

Imagine uma nave espacial.

O programa COBOL é o comandante da missão.

Ele decide:

  • qual objetivo deve ser atingido;

  • qual operação deve ser realizada;

  • o que fazer em caso de falha;

  • quando continuar;

  • quando interromper.

O CICS é o centro de controle de missões online.

O Db2 é o banco de dados científico organizado em tabelas.

O IMS é o sistema hierárquico de navegação e mensagens.

O Adabas é outro repositório especializado de dados.

O tradutor CICS e o pré-compilador Db2 são intérpretes que transformam os comandos do comandante em instruções compreensíveis por cada sistema.

O compilador, que veremos no próximo capítulo, será o engenheiro que converterá toda a missão em instruções executáveis pela máquina.


38. Conselhos do Mestre Bellacosa

Ao trabalhar com programas que utilizam CICS, Db2, IMS ou Adabas, sempre pergunte:

  • Quais processadores precisam preparar o fonte?

  • Existe tradução CICS?

  • Existe pré-compilação ou coprocessador Db2?

  • O DBRM foi gerado?

  • O package correto foi criado?

  • O programa utiliza a versão certa do DCLGEN?

  • As host variables estão compatíveis?

  • O SQLCODE está sendo tratado?

  • O RESP CICS está sendo validado?

  • A PCB IMS corresponde ao PSB utilizado?

  • Os códigos de resposta Adabas são verificados?

  • Os copybooks estão na versão correta?

  • O ambiente de compilação utiliza as bibliotecas corretas?

  • O processo automatizado esconde quais etapas?

Essas perguntas transformam um iniciante em um profissional que entende arquitetura.


Conclusão

Um programa COBOL corporativo pode conter muito mais do que instruções COBOL tradicionais.

Comandos EXEC CICS precisam ser traduzidos para que o compilador possa processá-los.

Comandos EXEC SQL precisam ser analisados pelo pré-compilador ou coprocessador Db2, gerando um fonte preparado e um DBRM.

O DBRM será utilizado no BIND para criação de um package.

No IMS, o programa utiliza chamadas DL/I, PCBs, PSBs, DBDs e layouts hierárquicos.

No Adabas, o acesso ocorre por meio de interfaces, control blocks, buffers e códigos de resposta.

Apesar das diferenças, todos esses ambientes compartilham o mesmo princípio:

O programa COBOL descreve a regra de negócio e solicita serviços a subsistemas especializados.

O CICS controla transações.

O Db2 gerencia dados relacionais.

O IMS processa bancos hierárquicos e mensagens.

O Adabas administra dados por meio de sua própria arquitetura.

E o COBOL permanece no centro, coordenando decisões, cálculos, validações e fluxos empresariais.

Mas ainda falta uma etapa fundamental.

Até agora, o código foi apenas preparado.

Ele ainda não se tornou um módulo executável.

No próximo capítulo

Na Parte III — Compilação, Linkedição e Load Library, entraremos no coração da transformação.

Veremos passo a passo:

  • como o compilador analisa o programa;

  • como o fonte se transforma em código objeto;

  • por que o objeto ainda não é o executável final;

  • como funciona o Binder;

  • o que são chamadas estáticas e dinâmicas;

  • como nasce um load module;

  • onde o executável é armazenado;

  • como interpretar return codes e listagens.

Se nesta parte conhecemos os tradutores que preparam a mensagem, no próximo capítulo conheceremos a fábrica que transforma palavras em instruções de máquina.

Prepare outra xícara de café.

A verdadeira transformação do programa COBOL está prestes a começar.

“O Padawan enxerga CICS, Db2, IMS e Adabas como comandos misturados ao COBOL. O especialista enxerga contratos entre arquiteturas, cada uma responsável por uma parte essencial do processamento corporativo.”