☕ 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

Mostrar mensagens com a etiqueta Testes. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Testes. Mostrar todas as mensagens

quinta-feira, 26 de dezembro de 2024

📮 O CARTEIRO E O POETA — QUANDO UMA POSTMAN COLLECTION APRENDEU A ENTREGAR CARTAS AO MAINFRAME

 

Bellacosa Mainframe apresenta o postman

☕ Um Café no Bellacosa Mainframe

📮 O CARTEIRO E O POETA — QUANDO UMA POSTMAN COLLECTION APRENDEU A ENTREGAR CARTAS AO MAINFRAME

Postman, Collections, HTTP, REST, JSON, variáveis, autenticação, scripts, testes positivos e negativos, contratos, Runner, CI/CD, z/OS Connect, CICS, COBOL, Db2 — e o dia em que um jovem programador descobriu que receber 200 OK não significava que a carta havia chegado à pessoa certa.



Sob a tutela de O Carteiro e o Poeta, porque uma API também vive de mensagens. Algumas precisam chegar rápido. Outras precisam chegar com segurança. Todas precisam chegar ao destinatário correto.



🎬 PRÓLOGO — TODA API TEM UM CARTEIRO

Imagine uma pequena ilha.

Todas as manhãs, o carteiro percorre as mesmas ruas carregando cartas. Ele conhece os caminhos, as casas, os moradores e os horários.

Até que encontra um poeta.

O poeta não quer simplesmente que uma carta seja transportada.

Ele quer que ela seja compreendida.

Essa pequena diferença explica uma parte enorme do que significa testar APIs.

Quando começamos a usar o Postman, normalmente fazemos algo parecido com um carteiro iniciante:

GET /clientes/123

Clicamos em Send.

Recebemos:

200 OK

E comemoramos:

Funcionou!

Calma, jovem padawan do COBOL.

O servidor respondeu. Isso é tudo que sabemos até agora.

Talvez tenhamos pedido o cliente 123 e recebido o cliente 999.

Talvez o JSON esteja incompleto.

Talvez o saldo esteja errado.

Talvez uma pessoa sem autorização tenha conseguido consultar informações que não deveria.

Talvez o backend tenha consultado o Db2 errado.

Talvez o COBOL tenha devolvido um código de negócio indicando falha e alguma camada intermediária tenha convertido tudo em HTTP 200.

O carteiro entregou alguma coisa.

Ainda precisamos descobrir se entregou a carta correta para a pessoa correta.

E é aqui que nossa história realmente começa.



📬 CAPÍTULO 1 — POSTMAN NÃO É APENAS UM BOTÃO SEND

Para quem começa a trabalhar com APIs, Postman parece uma ferramenta para escrever uma URL, selecionar GET ou POST e apertar Send.

Isso seria como dizer que ISPF serve para editar texto.

Tecnicamente não está completamente errado.

Mas estamos ignorando quase todo o universo existente atrás da ferramenta.

Uma requisição HTTP pode possuir:

Método
URL
Headers
Parâmetros
Autenticação
Body
Scripts
Testes
Variáveis

Por exemplo:

POST /orders
Content-Type: application/json
Authorization: Bearer {{token}}

Body:

{
  "customerId": "12345",
  "productId": "A100",
  "quantity": 2
}

O Postman permite construir essa requisição, enviá-la e analisar a resposta.

Mas o salto de maturidade acontece quando paramos de pensar em requests isolados e começamos a pensar em Collections.

Uma Collection não deveria ser apenas uma pasta cheia de requisições.

Ela pode representar um verdadeiro sistema automatizado de testes da API.

E isso muda completamente o jogo.



🗃️ CAPÍTULO 2 — COLLECTION: A BOLSA DO CARTEIRO

Imagine a bolsa do nosso carteiro.

Não faria sentido jogar dentro dela milhares de cartas aleatoriamente.

Ele organiza:

Distrito
 ├── Rua
 │    ├── Número
 │    └── Destinatário

Uma Collection bem construída também precisa possuir estrutura.

Por exemplo:

Orders API
│
├── 01 - Authentication
│
├── 02 - Customers
│   ├── Create Customer
│   ├── Get Customer
│   └── Update Customer
│
├── 03 - Orders
│   ├── Create Order
│   ├── Get Order
│   ├── Update Order
│   └── Cancel Order
│
└── 04 - Negative Tests
    ├── Invalid Token
    ├── Customer Not Found
    ├── Invalid Quantity
    └── Forbidden User

Perceba uma coisa importante.

Estamos começando a transformar a Collection em algo parecido com uma especificação executável.

Ela documenta o sistema.

Ela executa o sistema.

Ela testa o sistema.

Ela pode ser compartilhada.

E posteriormente poderá entrar em um pipeline.

Isso é muito diferente de guardar meia dúzia de URLs.



✉️ CAPÍTULO 3 — PRIMEIRO ENTENDA A CARTA

Antes de criar uma request, precisamos entender o contrato.

Suponha:

POST /orders

Pergunte:

O que devo enviar?

{
  "customerId": "C123",
  "productId": "P987",
  "quantity": 2
}

O que espero receber?

{
  "orderId": "O456",
  "status": "CONFIRMED"
}

Qual status HTTP deveria aparecer?

Talvez:

201 Created

Agora temos uma expectativa.

Entrada:

customerId
productId
quantity

Saída:

orderId
status

Esse conceito deveria soar extremamente familiar para quem programa COBOL.

Pense em:

01 WS-REQUEST.
   05 WS-CUSTOMER-ID PIC X(10).
   05 WS-PRODUCT-ID  PIC X(10).
   05 WS-QUANTITY    PIC 9(03).

01 WS-RESPONSE.
   05 WS-ORDER-ID    PIC X(10).
   05 WS-STATUS      PIC X(10).

Mudou a tecnologia.

O princípio continua parecido:

existe uma estrutura de entrada e existe uma estrutura esperada de saída.

O programador COBOL chama isso de layout.

O desenvolvedor moderno talvez chame de contrato.

O carteiro chama de endereço.

Se qualquer um deles estiver errado, alguém receberá a correspondência errada.



🌐 CAPÍTULO 4 — 200 OK NÃO SIGNIFICA “TUDO CERTO”

Este talvez seja o conceito mais importante de toda a conversa.

Considere:

GET /customers/123

Resposta:

200 OK

Body:

{
  "customerId": "999",
  "name": "Mario"
}

A camada HTTP funcionou perfeitamente.

Mas a aplicação falhou.

Você pediu:

123

e recebeu:

999

Portanto precisamos testar diferentes níveis.

No Postman podemos escrever:

pm.test("HTTP status is 200", function () {
    pm.response.to.have.status(200);
});

Mas podemos continuar:

const customer = pm.response.json();

pm.test("Customer ID is correct", function () {
    pm.expect(customer.customerId).to.eql("123");
});

Agora não estamos apenas perguntando:

O servidor respondeu?

Estamos perguntando:

O servidor respondeu corretamente?

Essa diferença separa um teste superficial de um teste realmente útil.


🧠 CAPÍTULO 5 — O CARTEIRO DESCOBRE AS REGRAS DE NEGÓCIO

Imagine que criamos um pedido.

A resposta é:

{
  "orderId": "4711",
  "status": "REJECTED"
}

E recebemos:

200 OK

O transporte funcionou.

Mas talvez nossa expectativa fosse:

status = CONFIRMED

Portanto:

const order = pm.response.json();

pm.test("Order must be confirmed", function () {
    pm.expect(order.status).to.eql("CONFIRMED");
});

Isso é extremamente importante em sistemas mainframe.

Porque muitas aplicações antigas possuem códigos internos de retorno.

Um programa pode devolver algo conceitualmente semelhante a:

RETURN-CODE = 04
MESSAGE     = CUSTOMER BLOCKED

Enquanto uma camada REST pode responder:

200 OK

Se testarmos somente HTTP, podemos declarar sucesso para uma transação que o negócio considera fracasso.

O teste precisa conhecer o significado da resposta.

O poeta não quer saber apenas se a carta chegou.

Ele quer saber se Beatrice leu o poema certo.


📐 CAPÍTULO 6 — TESTANDO O CONTRATO

Agora podemos subir outro degrau.

Não queremos verificar somente valores.

Também queremos verificar estrutura.

Imagine que nossa API deveria responder:

{
  "orderId": "4711",
  "status": "CONFIRMED",
  "amount": 150.00
}

Mas depois de uma alteração recebemos:

{
  "id": 4711,
  "state": "OK"
}

O serviço respondeu.

Mas o contrato mudou completamente.

Isso pode quebrar consumidores.

Imagine um aplicativo esperando:

response.orderId

e alguém muda para:

response.id

Boom.

Não houve necessariamente ABEND no backend.

Mas houve um ABEND conceitual no consumidor.

Schema validation ajuda a detectar mudanças estruturais desse tipo.

Ela pode verificar coisas como:

campo obrigatório
tipo
formato
estrutura

Mas há uma sutileza.

Schema não prova que o conteúdo está correto.

Isto:

{
  "orderId": "9999",
  "status": "CONFIRMED"
}

pode estar estruturalmente perfeito e ainda pertencer ao cliente errado.

Portanto:

Schema Validation
        +
Business Assertions

são complementares.


🔤 CAPÍTULO 7 — VARIÁVEIS: O WORKING-STORAGE DO POSTMAN

Agora começa uma das partes mais interessantes para quem vem do COBOL.

Em vez de escrever:

https://qa.company.com/api/orders/123

podemos utilizar:

{{baseUrl}}/orders/{{orderId}}

E definir:

baseUrl = https://qa.company.com/api
orderId = 123

Podemos possuir ambientes diferentes:

DEV
QA
STAGING

Mudamos o ambiente.

A Collection continua igual.

Isso é poderosíssimo.

Para um programador COBOL, pense nas variáveis como uma espécie de combinação entre parâmetros, configuração e WORKING-STORAGE.

Mas existe uma armadilha.

Variáveis podem existir em diferentes escopos.

Se houver valores duplicados em locais diferentes, podemos executar um teste utilizando um valor que não imaginávamos.

É o equivalente moderno de perguntar:

Quem alterou essa variável?

E descobrir que existem quatro lugares diferentes onde ela poderia ter sido definida.

Dica de sobrevivência:

sempre investigue o valor resolvido, não apenas o nome escrito na request.


🔐 CAPÍTULO 8 — O CARTEIRO PRECISA MOSTRAR O CRACHÁ

APIs modernas frequentemente utilizam tokens.

Por exemplo:

Authorization: Bearer {{accessToken}}

Em vez de configurar autenticação individualmente em cinquenta requests, podemos defini-la na Collection e permitir herança.

Isso reduz repetição.

Mas surge uma distinção fundamental:

Authentication ≠ Authorization

Authentication pergunta:

Quem é você?

Authorization pergunta:

Você pode fazer isso?

Um usuário pode estar perfeitamente autenticado e ainda não possuir autorização para cancelar um pedido.

Por isso os testes precisam explorar situações como:

token ausente
token inválido
token expirado
usuário autenticado sem permissão

E aqui aparece uma pegadinha maravilhosa.

Você cria um teste chamado:

NO TOKEN

remove o token da request...

...e o teste continua funcionando.

Por quê?

Porque a request herdou a autenticação da Collection.

Seu teste negativo acabou sendo positivo sem você perceber.

É o tipo de bug que faz um QA olhar para a tela durante alguns segundos e começar a reconsiderar suas escolhas profissionais.


⚙️ CAPÍTULO 9 — PRE-REQUEST SCRIPT: PREPARANDO A CARTA

Antes de uma request ser enviada, podemos executar scripts.

Por exemplo, gerar um identificador:

const requestId = pm.variables.replaceIn("{{$guid}}");
pm.collectionVariables.set("requestId", requestId);

Depois enviamos:

X-Request-ID: {{requestId}}

Agora cada transação possui uma identidade.

E aqui nossa história chega ao mainframe.

Imagine:

Postman
   ↓
API Gateway
   ↓
z/OS Connect
   ↓
CICS
   ↓
COBOL
   ↓
Db2

Se o mesmo identificador puder ser correlacionado ao longo desse caminho, investigar um problema se torna muito mais poderoso.

Em vez de procurar:

aquela transação que aconteceu mais ou menos às 14:32...

podemos procurar:

Request-ID = 8f7a...

Isso aproxima teste de observabilidade.

E observabilidade é quando o carteiro não sabe apenas que saiu da agência: ele consegue descobrir por quais ruas a carta passou.


🔗 CAPÍTULO 10 — UMA CARTA LEVA À OUTRA

Agora criamos um pedido:

POST /orders

Resposta:

{
  "orderId": "4711"
}

Podemos capturar esse ID:

const body = pm.response.json();

pm.collectionVariables.set(
    "orderId",
    body.orderId
);

A próxima request utiliza:

GET /orders/{{orderId}}

Depois:

PUT /orders/{{orderId}}

Finalmente:

DELETE /orders/{{orderId}}

Criamos um workflow:

CREATE
   ↓
READ
   ↓
UPDATE
   ↓
DELETE

Isso é muito mais poderoso do que requests isoladas.

Estamos testando uma jornada.


💣 CAPÍTULO 11 — TESTE O QUE DEVERIA DAR ERRADO

Desenvolvedores naturalmente gostam de testar:

entrada correta → resultado correto

Mas sistemas reais vivem no território de:

entrada errada
campo ausente
valor máximo
valor mínimo
token expirado
registro inexistente
duplicidade
timeout
permissão insuficiente

Um excelente princípio é:

altere uma condição de cada vez.

Se você alterar cinco coisas simultaneamente e receber erro, não saberá qual delas provocou o comportamento.

Comece com um baseline válido.

Depois altere somente:

quantity = -1

Depois:

quantity = 0

Depois:

quantity = 1

E chegamos aos testes de fronteira.


📏 CAPÍTULO 12 — COBOL ADORA FRONTEIRAS

Suponha:

05 WS-AGE PIC 9(02).

O campo possui limitações claras.

Em APIs também precisamos pensar em limites.

Se uma regra aceita valores entre 1 e 100:

MIN - 1 = 0
MIN     = 1
MIN + 1 = 2

MAX - 1 = 99
MAX     = 100
MAX + 1 = 101

Não teste apenas:

50

O valor 50 provavelmente funciona.

Os monstros costumam morar nas bordas.

Esse princípio aparece em praticamente todas as gerações de computação.

Cartão perfurado, COBOL, Db2, Java, REST ou JSON: limites continuam sendo lugares maravilhosos para encontrar bugs.


📚 CAPÍTULO 13 — UMA REQUEST, CEM CARTAS

Imagine testar:

quantity

com dezenas de valores.

Não queremos duplicar a mesma request cinquenta vezes.

Podemos usar dados externos.

Por exemplo:

quantity,expectedStatus
1,201
2,201
0,400
-1,400
101,400

No teste:

const expected =
    Number(pm.iterationData.get("expectedStatus"));

pm.test("Expected HTTP status", function () {
    pm.expect(pm.response.code).to.eql(expected);
});

Agora temos data-driven testing.

A lógica do teste permanece.

Os dados mudam.

Programadores COBOL deveriam reconhecer imediatamente a beleza disso.

É quase como um processamento batch:

READ INPUT
PERFORM PROCESS-RECORD
PERFORM VALIDATE
READ NEXT

O Postman Runner passa a executar diferentes iterações sobre a mesma lógica.

O velho batch está sorrindo discretamente no fundo da sala.


🏃 CAPÍTULO 14 — COLLECTION RUNNER: O BATCH DAS APIs

Chega uma hora em que clicar em Send deixa de fazer sentido.

Temos:

20 requests
50 datasets
30 assertions
4 workflows

Queremos executar tudo.

É aí que entra o Runner.

Conceitualmente:

Inicializa
   ↓
Carrega ambiente
   ↓
Executa request
   ↓
Executa testes
   ↓
Armazena variáveis
   ↓
Executa próxima request
   ↓
Gera resultados

Parece familiar?

Claro.

Isso é praticamente a filosofia batch reaparecendo em roupas modernas.

A tecnologia mudou.

A ideia de processamento repetível e automatizado continua conosco.


🧹 CAPÍTULO 15 — O FANTASMA DO ESTADO ANTERIOR

Um dos bugs mais traiçoeiros em testes automatizados é o estado residual.

Imagine que ontem:

orderId = 4711

Hoje o POST falha.

Mas a variável ainda contém:

4711

A próxima request executa:

GET /orders/4711

e funciona.

Resultado?

Parece que o workflow passou.

Mas estamos consultando o pedido de ontem.

Esse é um falso positivo perigosíssimo.

Por isso suítes maduras precisam pensar em:

setup
execução
validação
cleanup

Teste repetível significa:

posso executá-lo novamente sem depender dos fantasmas deixados pela execução anterior.


🔦 CAPÍTULO 16 — DEBUGUE NA ORDEM CERTA

Quando algo falhar, não comece alterando JavaScript aleatoriamente.

Siga uma investigação disciplinada:

Endpoint
   ↓
Environment
   ↓
Variáveis resolvidas
   ↓
Authentication
   ↓
Headers
   ↓
Request body
   ↓
Response
   ↓
Scripts
   ↓
Dados
   ↓
Ordem do workflow

Se funciona individualmente mas falha no Runner, desconfie especialmente de:

ordem
estado
variáveis
dados
dependências

Essa disciplina lembra investigação de incidente no mainframe.

Você não começa culpando o COBOL.

Primeiro reconstrói o caminho.


📖 CAPÍTULO 17 — UMA COLLECTION DEVE SOBREVIVER AO SEU CRIADOR

Chegamos a uma pergunta excelente:

Se eu entregar minha Collection para outro desenvolvedor, ele consegue executá-la?

Se a resposta for:

“Sim, mas primeiro preciso explicar umas quinze coisas...”

a documentação ainda não está boa.

Explique:

objetivo
pré-requisitos
ambiente
autenticação
variáveis
ordem de execução
dados necessários
resultado esperado

Inclua exemplos.

Remova segredos.

Nunca transforme uma Collection compartilhada em cofre de:

password
API key
client secret
token permanente

Uma suíte de testes também é código.

Trate-a como tal.


🚂 CAPÍTULO 18 — A COLLECTION ENTRA NO CI/CD

Aqui acontece a grande transformação.

Antes:

Programador
   ↓
Postman
   ↓
Send

Depois:

Commit
   ↓
Build
   ↓
Deploy QA
   ↓
API Tests
   ↓
Resultado
   ↓
Pipeline continua ou falha

Agora o teste deixa de depender de alguém lembrar de apertar um botão.

Podemos executar smoke tests depois do deploy.

Podemos executar regressão.

Podemos impedir que uma mudança incompatível avance silenciosamente.

Em um ambiente mainframe moderno, podemos imaginar:

Git
 ↓
COBOL + COPYBOOK
 ↓
DBB / Build
 ↓
Deploy
 ↓
z/OS Connect
 ↓
Postman API Tests
 ↓
CICS
 ↓
COBOL
 ↓
Db2

O COBOL não deixou de ser COBOL.

O mainframe não deixou de ser mainframe.

Nós simplesmente construímos uma estrada moderna até ele.


🧬 CAPÍTULO 19 — O MAPA MENTAL DO PROGRAMADOR COBOL

Se você está começando em APIs, guarde esta tradução mental:

POSTMAN                    COBOL / MAINFRAME

Iteration Data       →     Arquivo de entrada
Variables            →     WORKING-STORAGE/configuração
Pre-request Script   →     Inicialização
HTTP Request         →     Chamada/transação
JSON Body            →     Estrutura de dados
Response             →     Estrutura retornada
pm.test              →     Validação
Collection           →     Conjunto organizado de processos
Runner               →     Batch automatizado
Environment          →     DEV / QA / PROD
Workflow             →     Sequência transacional
CI/CD                →     Esteira automatizada
Correlation ID       →     Identidade rastreável da transação

Não são equivalências tecnológicas perfeitas.

São pontes mentais.

E pontes são extremamente úteis quando estamos aprendendo um mundo novo.


🕵️ CAPÍTULO 20 — O NÍVEL QUE QUASE NINGUÉM ENSINA

Existe ainda um passo além.

Imagine que um teste falhou:

POST /payment

Resposta:

500 Internal Server Error

Uma suíte básica informa:

FAILED

Uma engenharia madura pergunta:

Por quê?

Imagine conseguir seguir:

Postman
   │
   │ correlation-id = POETA-0317
   ↓
API Gateway
   ↓
z/OS Connect
   ↓
CICS
   ↓
TRANSACTION ABCD
   ↓
COBOL PAYMENT01
   ↓
Db2
   ↓
SQLCODE -911

Agora não temos apenas automação.

Temos rastreabilidade.

O teste encontrou o sintoma.

A observabilidade mostrou o caminho.

Os logs forneceram evidência.

O mainframe revelou a causa.

🥚 EASTER EGG

Se algum dia encontrar nos exemplos do Bellacosa Mainframe uma transação executada exatamente às:

03:17

não tente corrigir o relógio.

O mainframe sabe perfeitamente que horas são.

Algumas transações simplesmente preferem trabalhar no turno da madrugada.


🎓 EPÍLOGO — O POETA FINALMENTE ENTENDEU O CARTEIRO

No começo de nossa história, tínhamos:

URL
 ↓
Send
 ↓
200 OK

Parecia suficiente.

Depois descobrimos um universo inteiro:

API CONTRACT
      ↓
COLLECTION
      ↓
ENVIRONMENT
      ↓
VARIABLES
      ↓
AUTHENTICATION
      ↓
PRE-REQUEST
      ↓
REQUEST
      ↓
RESPONSE
      ↓
ASSERTIONS
      ↓
SCHEMA
      ↓
BUSINESS RULES
      ↓
NEGATIVE TESTS
      ↓
BOUNDARIES
      ↓
WORKFLOWS
      ↓
DATA-DRIVEN TESTS
      ↓
RUNNER
      ↓
DEBUG
      ↓
DOCUMENTATION
      ↓
CI/CD
      ↓
OBSERVABILITY

Essa é a verdadeira evolução.

Você começa testando uma API.

Depois constrói uma suíte.

Depois transforma essa suíte em regressão.

Depois conecta a regressão ao pipeline.

Finalmente conecta os testes à observabilidade e consegue seguir uma transação desde o mundo distribuído até o programa COBOL que executou a regra de negócio.

E então acontece algo curioso.

A tecnologia mais moderna da arquitetura encontra uma das mais antigas.

JSON encontra COPYBOOK.

REST encontra CICS.

OAuth encontra RACF.

CI/CD encontra COBOL.

Postman encontra z/OS.

E nenhum deles precisa destruir o outro.

Porque modernizar mainframe não significa necessariamente arrancar o coração da aplicação e reescrevê-lo.

Às vezes significa simplesmente construir melhores caminhos para chegar até ele.

É justamente aí que O Carteiro e o Poeta se torna uma metáfora perfeita.

O carteiro domina o transporte.

O poeta domina o significado.

Uma boa API precisa dos dois.

Não basta entregar bytes.

Precisamos entregar os bytes certos, ao serviço certo, com a identidade certa, na sequência certa, respeitando o contrato certo e produzindo o resultado de negócio esperado.

Da próxima vez que o Postman mostrar:

200 OK

não feche o teste.

Olhe para aquele verde bonito e pergunte:

“Muito bem, carteiro. Você entregou a carta. Agora me prove que entregou a carta certa.”

☕ Porque no Bellacosa Mainframe, até uma API precisa apresentar evidências antes de sair da War Room.

sexta-feira, 16 de fevereiro de 2024

Padawan COBOL e o Copilot — Um Guia Passo a Passo para Sair do “O Que Esse Código Faz?” até “Crie, Teste e Explique a Alteração”

 

Bellacosa Mainframe e o passo a passo ao MS Copilot

☕ Um Café no Bellacosa Mainframe

Padawan COBOL e o Copilot — Um Guia Passo a Passo para Sair do “O Que Esse Código Faz?” até “Crie, Teste e Explique a Alteração”

Ou: como usar o GitHub Copilot sem transformar o Jedi iniciante em operador de copiar-e-colar — e por que a primeira regra da Força é simples: o Copilot sugere, mas quem responde pelo código é você

Se você está começando em COBOL e ouviu falar de Copilot, é fácil imaginar duas coisas extremas.

A primeira:

“Agora não preciso mais aprender COBOL.”

A segunda:

“Se eu usar IA, nunca vou aprender de verdade.”

As duas estão erradas.

O melhor uso do Copilot para um iniciante é como instrutor auxiliar, navegador de código, explicador de sintaxe, gerador de exemplos e parceiro de testes.

Ele pode acelerar seu aprendizado.

Mas também pode acelerar seus erros.

A diferença está no método.

Então, para um Padawan COBOL, vamos seguir uma progressão segura:

ENTENDER
   ↓
EXPLICAR
   ↓
PERGUNTAR
   ↓
SUGERIR
   ↓
ALTERAR
   ↓
TESTAR
   ↓
REVISAR

Não comece pela última etapa.

Começar diretamente com:

“Faça tudo para mim”

é aproximadamente o equivalente a entregar um sabre de luz para alguém que acabou de descobrir qual lado segura.

Vamos por partes.



1. Primeiro passo — entenda qual Copilot você realmente quer usar

Quando falamos em programação, o produto mais relevante é o GitHub Copilot.

Ele é diferente do Microsoft 365 Copilot.

Pense assim:

Microsoft 365 Copilot
→ Word
→ Excel
→ Outlook
→ Teams
→ documentos
→ reuniões
→ trabalho corporativo

GitHub Copilot
→ código
→ IDE
→ repositório
→ testes
→ desenvolvimento

Para aprender COBOL, você provavelmente estará mais interessado no GitHub Copilot integrado a um editor ou IDE.

Exemplos comuns:

VS Code
Visual Studio
JetBrains
GitHub

No universo COBOL moderno, o VS Code é especialmente relevante quando você trabalha com extensões como:

IBM Z Open Editor
Zowe Explorer
Enterprise Developer Tools

Dependendo da sua empresa e ambiente.



2. Segundo passo — instale e autentique o GitHub Copilot

No VS Code, o fluxo típico é simples.

Abra:

Extensions

Procure por:

GitHub Copilot

Instale.

Depois autentique sua conta GitHub.

O editor normalmente solicitará login.

Depois disso, o Copilot pode funcionar em duas formas principais:

INLINE COMPLETION

e:

CHAT

Inline Completion significa:

você começa a escrever e ele sugere continuação.

Chat significa:

você pergunta algo diretamente.

Para aprender COBOL, recomendo começar mais pelo Chat do que pelo autocomplete.

Por quê?

Porque o Chat obriga você a formular perguntas.

E fazer boas perguntas é uma das melhores formas de aprender.



3. Terceiro passo — comece usando o Copilot como professor

Pegue um programa COBOL simples.

Exemplo:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. HELLO01.

       DATA DIVISION.
       WORKING-STORAGE SECTION.

       01 WS-NOME PIC X(20).

       PROCEDURE DIVISION.

           MOVE 'PADAWAN COBOL' TO WS-NOME

           DISPLAY 'OLA ' WS-NOME

           STOP RUN.

Agora, em vez de pedir:

“Melhore isso.”

pergunte:

“Explique este programa linha por linha para alguém que está começando em COBOL.”

Excelente.

Depois:

“Qual é a função da IDENTIFICATION DIVISION?”

Depois:

“Por que WS-NOME usa PIC X(20)?”

Depois:

“O que aconteceria se eu usasse PIC 9(20)?”

Esse tipo de pergunta transforma Copilot em ferramenta de aprendizagem.


4. Quarto passo — aprenda COBOL por comparação

Uma técnica excelente é pedir comparações.

Por exemplo:

“Compare PIC X(10), PIC 9(10) e PIC S9(7)V99.”

O Copilot pode explicar:

PIC X(10)
→ texto

PIC 9(10)
→ número inteiro

PIC S9(7)V99
→ número com sinal e duas casas decimais implícitas

Depois peça exemplos.

“Mostre um exemplo de MOVE válido e inválido para cada um.”

Essa abordagem é muito mais poderosa do que decorar sintaxe.


5. Quinto passo — use o Copilot para entender código legado

Agora entramos no verdadeiro planeta COBOL.

Código legado.

Você recebe algo como:

       IF WS-STATUS = 'A'
           PERFORM 3000-PROCESSA
       ELSE
           MOVE 12 TO WS-RETURN-CODE
           PERFORM 9000-ERRO
       END-IF

Um iniciante pode olhar e pensar:

“O que exatamente está acontecendo aqui?”

Pergunte:

“Explique o fluxo deste trecho COBOL em linguagem simples.”

Depois:

“Quais condições levam ao PERFORM 9000-ERRO?”

Depois:

“Quais campos eu deveria investigar antes de alterar este código?”

Isso é ótimo.

Você está usando IA como navegador de fluxo.


6. Sexto passo — nunca pergunte só “o que isso faz?”

A melhor pergunta é:

“O que isso faz, quais premissas assume e o que pode dar errado?”

Essa diferença é enorme.

Compare:

Pergunta pobre:
"O que este código faz?"

Pergunta melhor:
"O que este código faz,
quais entradas ele espera,
quais saídas produz,
quais condições de erro existem,
e quais riscos aparecem se eu alterá-lo?"

Isso força uma análise mais completa.


7. Sétimo passo — peça ao Copilot para criar um mapa do programa

Para programas maiores, peça:

“Crie um mapa lógico deste programa COBOL.”

Exemplo esperado:

MAIN
 |
 +-- 1000-INICIALIZA
 |
 +-- 2000-LE-ARQUIVO
 |
 +-- 3000-PROCESSA
 |
 +-- 4000-GRAVA-SAIDA
 |
 +-- 9000-FINALIZA

Depois pergunte:

“Qual parágrafo controla o loop principal?”

Ou:

“Qual parágrafo pode alterar WS-RETURN-CODE?”

Isso ajuda muito a compreender programas antigos.


8. Oitavo passo — use o Copilot para aprender FILE SECTION

COBOL e arquivos são inseparáveis.

Exemplo:

       FILE SECTION.

       FD ARQ-CLIENTE.

       01 REG-CLIENTE.
          05 CLI-ID      PIC 9(8).
          05 CLI-NOME    PIC X(30).
          05 CLI-SALDO   PIC S9(7)V99.

Pergunte:

“Explique a diferença entre FD, 01 e 05.”

Depois:

“Mostre como este registro ficaria em bytes.”

Depois:

“Quantos bytes esse registro ocupa?”

Depois:

“Explique o que significa V em PIC S9(7)V99.”

Esse tipo de aprendizado é extremamente eficiente.


9. Nono passo — peça exemplos pequenos

Uma regra essencial para aprender com IA:

não peça um sistema inteiro.

Peça pequenos exemplos.

Ruim:

“Crie um sistema bancário COBOL.”

Bom:

“Crie um exemplo COBOL que leia um saldo, aplique uma taxa e exiba o resultado.”

Depois evolua.

PASSO 1
DISPLAY simples

PASSO 2
IF

PASSO 3
PERFORM

PASSO 4
arquivo

PASSO 5
subprograma

PASSO 6
DB2

PASSO 7
CICS

Aprendizado incremental é muito melhor.


10. Décimo passo — use Copilot para aprender PERFORM

PERFORM costuma confundir iniciantes.

Pergunte:

“Explique PERFORM como se eu conhecesse loops em Java ou Python.”

Depois peça exemplos:

       PERFORM 1000-PROCESSA

Depois:

       PERFORM 1000-PROCESSA
           UNTIL WS-FIM = 'S'

Depois:

       PERFORM VARYING WS-I FROM 1 BY 1
           UNTIL WS-I > 10

Compare.

Esse é um ótimo uso do Copilot.


11. Décimo primeiro passo — use IA para entender mensagens de compilação

Essa é uma das melhores aplicações para um Padawan.

Imagine receber:

IGYPS2121-S

Em vez de entrar em pânico, pergunte:

“Explique esta mensagem de compilação COBOL e mostre causas prováveis.”

Mas envie contexto.

Não diga apenas:

“Erro IGYPS2121-S.”

Diga:

“Estou compilando este trecho COBOL e recebi IGYPS2121-S nesta linha. Explique a provável causa sem inventar.”

Melhor ainda:

“Mostre três hipóteses e diga como validar cada uma.”

Isso transforma a resposta em troubleshooting.


12. Décimo segundo passo — Copilot não substitui o compilador

Aqui está uma regra gravada em pedra.

Copilot pode dizer:

“Esse código parece correto.”

O compilador diz:

ERROR

Quem ganha?

O compilador.

Sempre.

Por quê?

Porque Copilot trabalha com probabilidade.

O compilador trabalha com gramática e regras formais.

Então:

COPILOT
→ hipótese

COMPILADOR
→ evidência

Não confunda os dois.


13. Décimo terceiro passo — peça ao Copilot para gerar testes

Quando você já entende o código, pergunte:

“Quais cenários de teste devo criar?”

Exemplo:

       IF WS-SALDO < ZERO
           MOVE 'E001' TO WS-ERRO
       END-IF

Peça:

“Crie cenários de teste para este IF.”

Resposta esperada:

Caso 1
SALDO = 100
Resultado esperado: sem erro

Caso 2
SALDO = 0
Resultado esperado: sem erro

Caso 3
SALDO = -1
Resultado esperado: E001

Caso 4
SALDO = valor mínimo permitido
Resultado esperado: validar limite

Isso ensina uma habilidade importantíssima:

pensar em bordas.


14. Décimo quarto passo — peça testes antes da implementação

Essa técnica é excelente.

Antes de pedir código, diga:

“Antes de implementar, liste os testes que definem o comportamento correto.”

Isso força você e o Copilot a concordarem sobre o problema primeiro.

Fluxo ideal:

REQUISITO
   ↓
TESTES
   ↓
IMPLEMENTAÇÃO
   ↓
EXECUÇÃO
   ↓
REVISÃO

Muito melhor que:

"Código aí qualquer coisa."

15. Décimo quinto passo — use Copilot para revisar seu código

Depois que você escrever alguma coisa, pergunte:

“Revise este código sem reescrevê-lo.”

Isso é importante.

Porque se você disser:

“Melhore”

o Copilot pode mudar tudo.

Peça:

“Aponte erros, riscos e melhorias, mas não altere o código ainda.”

Primeiro diagnóstico.

Depois intervenção.


16. Décimo sexto passo — peça explicação antes da correção

Essa é uma regra maravilhosa para iniciantes.

Em vez de:

“Corrija meu programa.”

diga:

“Explique primeiro por que está errado. Depois mostre a menor correção possível.”

Assim você aprende.

Exemplo:

       MOVE 'ABC' TO WS-NUMERO

Pergunte:

“Por que isso é problemático se WS-NUMERO for PIC 9(3)?”

Depois peça correção.

Isso evita o comportamento:

CTRL+C
CTRL+V
Ctrl+Esperança

17. Décimo sétimo passo — aprenda SQL embutido com ajuda do Copilot

Quando entrar em COBOL + Db2, use IA como tutor.

Exemplo:

       EXEC SQL
           SELECT NOME
             INTO :WS-NOME
             FROM CLIENTE
            WHERE ID = :WS-ID
       END-EXEC.

Pergunte:

“Explique o papel das host variables.”

Depois:

“O que significa SQLCODE +100?”

Depois:

“Qual diferença entre erro de compilação COBOL e erro SQL?”

Depois:

“O que o precompiler faz?”

Isso ajuda muito a montar o mapa mental.


18. Décimo oitavo passo — use Copilot para explicar JCL

Padawan COBOL rapidamente encontra JCL.

Exemplo:

//JOB01    JOB ...
//STEP01   EXEC PGM=MEUPGM
//STEPLIB  DD DSN=...
//SYSOUT   DD SYSOUT=*
//ARQENT   DD DSN=...

Pergunte:

“Explique cada DD e sua relação com o programa COBOL.”

Depois:

“Qual arquivo COBOL corresponde a ARQENT?”

Isso conecta:

COBOL
ASSIGN
SELECT
FD
JCL
DD
DATASET

Esse casamento é essencial.


19. Décimo nono passo — use Copilot para estudar CICS sem medo

Quando chegar em CICS, não peça:

“Explique CICS.”

É amplo demais.

Pergunte:

“Explique esta instrução EXEC CICS READ.”

Depois:

“O que é RESP?”

Depois:

“Qual diferença entre LINK e XCTL?”

Depois:

“Explique COMMAREA.”

Copilot funciona melhor quando você quebra o monstro em pedaços.


20. Vigésimo passo — aprenda a formular prompts técnicos

Aqui está um modelo de prompt excelente.

Contexto:
Sou iniciante em COBOL.

Objetivo:
Quero entender este trecho.

Faça:
1. explique linha por linha;
2. identifique variáveis relevantes;
3. descreva o fluxo;
4. mostre possíveis erros;
5. dê um exemplo de entrada e saída;
6. não altere o código ainda.

Essa estrutura é simples e poderosa.


21. Um prompt Bellacosa para estudar código legado

Use:

Analise este programa COBOL como um instrutor. Primeiro descreva sua finalidade provável. Depois identifique divisions, sections, paragraphs, arquivos, copybooks, chamadas externas e variáveis importantes. Crie um mapa do fluxo principal. Explique os pontos difíceis para um iniciante. Não modifique nada. Se alguma conclusão não puder ser confirmada pelo código disponível, diga explicitamente que é uma hipótese.

Essa última frase é ouro:

“diga explicitamente que é uma hipótese.”

Porque IA adora completar lacunas.


22. Um prompt para debugging

Use:

Estou recebendo este erro ao compilar ou executar. Analise o código e a mensagem. Liste as causas possíveis em ordem de probabilidade. Para cada causa, mostre como validar. Não sugira alterações antes de explicar a causa.

Excelente para aprender investigação.


23. Um prompt para criar alteração

Quando estiver mais confiante:

Analise primeiro o impacto desta alteração. Identifique campos, paragraphs, copybooks, arquivos, SQL, chamadas externas e testes potencialmente afetados. Proponha a menor mudança possível. Explique antes de gerar o código.

Isso evita alterações espalhafatosas.


24. Um prompt para testes

Crie uma matriz de testes para esta regra COBOL. Inclua caminho feliz, zero, valores limites, dados inválidos, erros de arquivo, condições não encontradas e regressões possíveis. Para cada teste, informe entrada, condição e resultado esperado.

Muito útil.


25. Um prompt para revisão

Revise este código COBOL como um revisor sênior. Não reescreva ainda. Identifique problemas de lógica, legibilidade, tratamento de erro, risco de truncamento, tipos incompatíveis, uso de campos, loops e possíveis impactos de negócio.

Agora você começa a utilizar Copilot como mentor técnico.


26. O perigo do autocomplete automático

Inline suggestion é útil.

Mas para iniciantes pode virar armadilha.

Você digita:

       IF WS-STATUS =

Copilot sugere:

       IF WS-STATUS = 'A'
           PERFORM PROCESSA-ATIVO
       END-IF

Parece perfeito.

Mas de onde veio 'A'?

Talvez no seu sistema:

A = BLOQUEADO

e:

L = LIBERADO

O Copilot pode gerar código sintaticamente elegante e semanticamente errado.

Regra:

nunca aceite uma regra de negócio só porque parece plausível.


27. O truque Jedi: pergunte “como você sabe?”

Depois de uma resposta, pergunte:

“Que parte do código sustenta essa conclusão?”

Ou:

“Isso está explícito no código ou você inferiu?”

Esse é um truque excelente.

Ele obriga a separar:

FATO

de:

INFERÊNCIA

28. Nunca passe segredos

Não cole no Copilot:

senhas
tokens
chaves
credenciais
dados de clientes
dados regulados
informações sensíveis

Especialmente em ambiente empresarial, siga as políticas da organização.

O Padawan precisa dominar o sabre.

Mas também precisa saber onde não balançá-lo.


29. Não use Copilot para driblar revisão

Outro erro:

“Se a IA escreveu, deve estar certo.”

Não.

O correto é:

IA GERA
   ↓
VOCÊ REVISA
   ↓
COMPILA
   ↓
TESTA
   ↓
REVISA RESULTADO

Nunca:

IA GERA
   ↓
PRODUÇÃO

Essa linha deveria produzir um alarme equivalente a:

ICH408I

30. Um laboratório simples para começar

Crie um programa pequeno:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SALDO01.

       DATA DIVISION.
       WORKING-STORAGE SECTION.

       01 WS-SALDO PIC S9(5)V99 VALUE 100.00.
       01 WS-STATUS PIC X(10).

       PROCEDURE DIVISION.

           IF WS-SALDO < ZERO
               MOVE 'NEGATIVO' TO WS-STATUS
           ELSE
               MOVE 'OK' TO WS-STATUS
           END-IF

           DISPLAY WS-STATUS

           STOP RUN.

Agora siga esta sequência:

1. Peça explicação linha por linha.

2. Pergunte o que significa S9(5)V99.

3. Pergunte por que ZERO funciona.

4. Peça três testes.

5. Altere WS-SALDO manualmente.

6. Execute.

7. Compare o resultado com a previsão.

8. Peça uma melhoria.

9. Entenda a melhoria.

10. Só depois aceite a mudança.

Esse laboratório ensina COBOL e ensina a usar IA ao mesmo tempo.


31. Exercício Jedi 2 — arquivo sequencial

Depois faça um programa com:

INPUT
CLIENTE
SALDO
STATUS

Peça ao Copilot:

“Ajude-me a criar o layout, mas explique cada PIC.”

Depois:

“Ajude-me a montar SELECT, FD, OPEN, READ e CLOSE.”

Mas não peça tudo de uma vez.

Construa passo a passo.

Assim você aprende a ligação:

ENVIRONMENT DIVISION
        ↓
SELECT
        ↓
FILE SECTION
        ↓
FD
        ↓
READ
        ↓
JCL DD

32. Exercício Jedi 3 — Db2

Crie uma consulta simples.

Pergunte:

“Como transformar este SELECT em SQL embutido COBOL?”

Depois:

“Onde entra SQLCA?”

Depois:

“Como tratar SQLCODE +100?”

Depois:

“Como tratar SQLCODE negativo?”

Você estará usando Copilot não apenas para escrever.

Estará usando para construir conhecimento conectado.


33. Quando usar Agent Mode?

Somente depois de dominar bem o básico.

Agent Mode pode trabalhar em várias etapas.

Exemplo:

“Adicione validação de saldo negativo e crie testes.”

O agente pode:

analisar arquivos
 ↓
editar
 ↓
executar build
 ↓
rodar testes
 ↓
corrigir

Isso é poderoso.

Para iniciante, também é perigoso.

Porque várias mudanças podem acontecer sem você entender.

Use inicialmente em projetos pequenos e controlados.


34. Antes de usar agente, peça plano

Regra:

Planeje antes de executar.

Prompt:

“Não faça alterações ainda. Primeiro analise o repositório e mostre o plano.”

Leia o plano.

Pergunte:

“Por que precisa alterar esse arquivo?”

Depois autorize.

Esse comportamento aproxima você de engenharia profissional.


35. Quando o Copilot errar, comemore um pouco

Sim.

Errar pode ensinar muito.

Se ele sugerir:

       MOVE WS-TEXTO TO WS-NUMERO

e der erro, investigue.

Pergunte:

“Por que sua sugestão anterior falhou?”

Você aprende:

tipos
PIC
conversão
truncamento
data exceptions

Uma IA perfeita seria um professor pior.

Os erros criam oportunidades de debugging.


36. O Padawan precisa aprender a desconfiar

Uma boa relação com Copilot não é confiança absoluta.

É confiança calibrada.

Use esta escala:

EXPLICAÇÃO CONCEITUAL
→ confiança moderada

SINTAXE
→ validar

REGRA DE NEGÓCIO
→ validar fortemente

SEGURANÇA
→ validar fortemente

PRODUÇÃO
→ revisão obrigatória

Quanto maior o impacto, menor deve ser sua disposição em aceitar algo sem evidência.


37. Uma rotina diária de 30 minutos

Para aprender COBOL com Copilot:

10 min
Leia código sozinho.

5 min
Anote o que você acha que acontece.

5 min
Pergunte ao Copilot.

5 min
Compare as explicações.

5 min
Execute ou teste.

O ponto mais importante:

tente entender antes de perguntar.

Se você pergunta primeiro, seu cérebro pode entrar em modo espectador.


38. A regra dos três “porquês”

Para qualquer resposta importante, pergunte:

Por quê?

Como você sabe?

Como eu posso validar?

Essa tríade vale ouro.

Exemplo:

Copilot:

“Esse campo pode sofrer truncamento.”

Você:

“Por quê?”

Depois:

“Como você sabe?”

Depois:

“Como posso demonstrar isso com um teste?”

Pronto.

Você transformou uma resposta em aprendizado.


39. Copilot como mestre, não como muleta

Use Copilot para:

EXPLICAR
COMPARAR
SUGERIR
TESTAR
REVISAR
INVESTIGAR

Evite depender dele para:

PENSAR POR VOCÊ
VALIDAR NEGÓCIO POR VOCÊ
DECIDIR PRODUÇÃO POR VOCÊ

Essa distinção será cada vez mais importante.


40. O caminho do Padawan

Eu resumiria o treinamento assim:

NÍVEL 1
"Explique."

NÍVEL 2
"Dê exemplo."

NÍVEL 3
"Compare."

NÍVEL 4
"Encontre o erro."

NÍVEL 5
"Sugira uma solução."

NÍVEL 6
"Crie testes."

NÍVEL 7
"Faça a alteração."

NÍVEL 8
"Execute o ciclo."

NÍVEL 9
"Revise o agente."

NÍVEL 10
"Governança."

Não pule do nível 1 para o 8.


Epílogo — o Padawan, o Copilot e o velho terminal verde

Imagine um jovem programador sentado diante de um terminal.

À esquerda:

COBOL

À direita:

COPILOT

O iniciante pergunta:

“Você pode fazer isso por mim?”

O velho mestre no fundo do CPD responde:

“Pode.”

O Padawan sorri.

Então o mestre completa:

“Mas primeiro descubra por que ele fez.”

Essa é a diferença entre alguém que usa IA e alguém que aprende engenharia usando IA.

O Copilot pode completar uma linha.

Pode explicar um programa.

Pode sugerir uma função.

Pode criar testes.

Pode encontrar erros.

Pode, cada vez mais, alterar projetos inteiros.

Mas há uma habilidade que continua sendo sua:

entender o sistema pelo qual você é responsável.

No mundo COBOL, onde uma linha aparentemente inocente pode tocar folha de pagamento, cobrança, estoque, seguro, cartão, governo ou conta bancária, isso não é filosofia.

É requisito operacional.

Então use o Copilot.

Use muito.

Pergunte.

Experimente.

Quebre código de laboratório.

Compile.

Teste.

Discorde dele.

Peça explicações.

E quando ele disser:

“A alteração está pronta.”

faça como qualquer Jedi do mainframe faria.

Olhe para o código.

Olhe para os testes.

Olhe para o retorno.

Tome um gole de café.

E pergunte:

“Pronto segundo quem?”

☕⚔️💻

segunda-feira, 29 de janeiro de 2024

Da Terra à Lua em um Copilot — O Dia em que Barbicane Descobriu que o Canhão Não Era o Mais Perigoso da Expedição

 

Bellacosa Mainframe apresenta o MS Copilot

☕ Um Café no Bellacosa Mainframe

Da Terra à Lua em um Copilot — O Dia em que Barbicane Descobriu que o Canhão Não Era o Mais Perigoso da Expedição

Ou: como GitHub Copilot, Microsoft 365 Copilot, Researcher, Analyst, Work IQ, Notebooks, Copilot Studio, agentes, testes, segurança e governança transformaram um autocomplete em uma pequena agência espacial corporativa — e por que ninguém no Gun Club apertaria ENTER antes de perguntar qual USERID estava autorizado a disparar o projétil

Há tecnologias que chegam anunciando uma revolução.

E há tecnologias que chegam discretamente, completando uma linha de código.

O Copilot pertence à segunda categoria.

Em 2021, a cena parecia quase inocente.

Um programador digitava:

IF WS-SALDO < ZERO

e uma inteligência artificial sugeria a continuação.

Nada particularmente ameaçador.

Era quase como ter um estagiário invisível sentado ao lado dizendo:

— Talvez você queira escrever PERFORM TRATA-ERRO.

Mas, assim como no romance Da Terra à Lua, de Júlio Verne, ninguém deveria subestimar homens muito determinados quando eles começam a discutir engenharia em uma sala fechada.

No romance, o Gun Club começa pensando em construir um canhão.

Depois alguém pergunta:

— E se atirássemos alguma coisa na Lua?

Pouco tempo depois estão calculando trajetória, pólvora, materiais, aceleração, local de lançamento e sobrevivência dos ocupantes.

Com o Copilot aconteceu algo curiosamente parecido.

Começamos perguntando:

“Você consegue completar minha função?”

Depois:

“Você consegue conversar sobre meu código?”

Em seguida:

“Consegue entender todo meu repositório?”

Logo apareceu:

“Consegue alterar vários arquivos?”

Depois:

“Consegue compilar?”

Então:

“Consegue executar os testes?”

Finalmente chegamos perigosamente perto de:

“Consegue receber uma tarefa, estudar o problema, modificar o sistema, testar, corrigir os erros e preparar o Pull Request enquanto eu tomo café?”

Barbicane, presidente do Gun Club, provavelmente interromperia a reunião neste momento.

— Senhores, antes de colocar três passageiros dentro desse projétil… quem autorizou o agente?

Bem-vindo ao Copilot moderno.

Prepare o café.

Hoje vamos da Terra à Lua.

Mas primeiro precisamos entender quem está segurando o fósforo.



1. Antes do foguete existia o autocomplete

Para compreender o Microsoft Copilot atual, precisamos voltar ao começo.

O primeiro grande Copilot da família foi o GitHub Copilot, anunciado em 2021.

Sua proposta original era relativamente simples:

PROGRAMADOR
     ↓
DIGITA CÓDIGO
     ↓
COPILOT OBSERVA
     ↓
SUGERE CONTINUAÇÃO

Quem já utilizou autocomplete tradicional poderia pensar:

— Então inventaram um autocomplete com esteroides.

Não exatamente.

Autocomplete tradicional normalmente funciona sobre estruturas conhecidas.

Por exemplo:

MOVE
PERFORM
DISPLAY
OPEN
CLOSE

A ferramenta conhece palavras-chave, variáveis, métodos ou APIs.

O GitHub Copilot começou a demonstrar uma capacidade diferente.

Ele conseguia considerar:

  • comentários;

  • código ao redor;

  • nomes de variáveis;

  • padrões;

  • funções anteriores;

  • intenção provável.

Se você escrevesse algo como:

* VALIDAR CPF DO CLIENTE

a IA poderia tentar produzir uma implementação.

Isso era impressionante.

Mas ainda havia um detalhe fundamental:

o Copilot sugeria.

Quem executava o trabalho continuava sendo o programador.

Era o equivalente ao Gun Club desenhando o projétil no quadro-negro.

O canhão ainda não havia sido carregado.



2. 2022 — o experimento vira produto

Em 2022, o GitHub Copilot tornou-se produto comercial.

Esse momento é importante porque muda o status da tecnologia.

Sai:

experiência curiosa

entra:

ferramenta diária de desenvolvimento

Programadores começam a utilizar IA como companheira real de codificação.

A expressão usada durante muito tempo foi:

AI pair programmer.

Ou seja:

programador em dupla com inteligência artificial.

Para um iniciante COBOL, imagine algo parecido com trabalhar ao lado de um programador mais experiente que observa você escrever:

       IF WS-CUSTOMER-STATUS = 'A'

e sugere:

           PERFORM PROCESS-ACTIVE-CUSTOMER
       ELSE
           PERFORM PROCESS-INACTIVE-CUSTOMER
       END-IF.

Só que aquele “programador” não entende negócios como um colega humano.

Ele calcula probabilidades.

Isso é importantíssimo.

Copilot não pensa:

“Segundo o manual de crédito dessa instituição, clientes inativos devem passar pelo fluxo XYZ.”

Ele pode inferir padrões a partir do contexto disponível.

E inferência não é regra de negócio.

Guarde isso.

Voltaremos a essa cápsula explosiva mais tarde.



3. 2023 — Barbicane decide que o projétil também precisa conversar

Em 2023 acontece uma expansão enorme.

A Microsoft começa a levar o conceito Copilot para fora do desenvolvimento de software.

Primeiro tivemos o Bing com IA.

Depois apareceu o Microsoft 365 Copilot.

Aqui ocorre a primeira transformação estrutural importante.

O modelo deixa de ser apenas:

PROMPT
   ↓
LLM
   ↓
RESPOSTA

e passa a se aproximar de:

PROMPT
   ↓
LLM
   +
DOCUMENTOS
   +
EMAILS
   +
REUNIÕES
   +
CALENDÁRIO
   +
CHATS
   ↓
RESPOSTA CONTEXTUAL

Eis o verdadeiro nascimento do Copilot corporativo.

Agora você poderia perguntar:

“Resuma tudo o que aconteceu no Projeto Apollo esta semana.”

Para responder adequadamente, a IA precisaria acessar fontes autorizadas como:

  • mensagens;

  • reuniões;

  • documentos;

  • apresentações;

  • planilhas;

  • e-mails.

Isso transforma completamente o problema.

O desafio deixa de ser apenas gerar linguagem.

Passa a ser:

encontrar o contexto correto.



4. Microsoft Graph — a cartografia antes do lançamento

Júlio Verne adorava mapas, cálculos e medições.

Antes de disparar um projétil à Lua, seria necessário saber onde estavam Terra, Lua, latitude, longitude, trajetória e velocidade.

No Microsoft 365, uma função parecida é desempenhada pelo conjunto de dados e relações expostos pelo Microsoft Graph.

O Graph conecta objetos corporativos como:

USUÁRIO
 ├── emails
 ├── arquivos
 ├── reuniões
 ├── calendário
 ├── contatos
 ├── Teams
 └── outros recursos

Imagine que você pergunte:

“O que ficou decidido sobre a migração do sistema COBOL?”

O modelo sozinho não sabe.

Ele precisa procurar evidências.

Talvez exista:

EMAIL
"migração aprovada"

ATA DA REUNIÃO
"aguardando orçamento"

PLANILHA
"status: pending"

TEAMS
"arquitetura ainda em avaliação"

Temos agora um problema muito mais interessante.

Não basta encontrar informação.

Precisamos interpretar conflitos.

É por isso que um bom prompt não deveria pedir apenas:

“Resuma o projeto.”

Melhor seria:

“Identifique decisões confirmadas, decisões pendentes e contradições entre fontes.”

Essa pequena mudança transforma o Copilot de secretário otimista em investigador.


5. 2023 — nasce o Copilot Studio

Aqui nossa história começa a ficar realmente verniana.

Imagine Barbicane dizendo:

— Não quero apenas utilizar o canhão. Quero construir meus próprios projéteis.

É aproximadamente essa a mudança representada pelo Copilot Studio.

Microsoft 365 Copilot é essencialmente algo que você utiliza.

Copilot Studio permite construir e customizar agentes.

Simplificando:

MICROSOFT 365 COPILOT
        ↓
UTILIZAR IA

COPILOT STUDIO
        ↓
CONSTRUIR SOLUÇÕES COM IA

Com ele você pode criar um agente que conheça:

  • determinados documentos;

  • APIs corporativas;

  • regras específicas;

  • ferramentas;

  • fluxos de trabalho;

  • fontes empresariais.

Por exemplo:

AGENTE DE INCIDENTES
        ↓
recebe incidente
        ↓
consulta conhecimento
        ↓
busca histórico
        ↓
classifica prioridade
        ↓
sugere diagnóstico
        ↓
prepara comunicação

Agora observe a mudança.

Um chatbot responde perguntas.

Um agente participa de um processo.


6. O que exatamente transforma um chatbot em agente?

Essa pergunta merece uma boa xícara.

Chatbot:

PERGUNTA
   ↓
RESPOSTA

Agente:

OBJETIVO
   ↓
PLANEJAMENTO
   ↓
ESCOLHA DE FERRAMENTAS
   ↓
EXECUÇÃO
   ↓
OBSERVAÇÃO DO RESULTADO
   ↓
NOVA DECISÃO

Exemplo de chatbot:

“Como identificar dados duplicados no Db2?”

Resposta:

SELECT ID_PEDIDO,
       COUNT(*)
FROM PEDIDOS
GROUP BY ID_PEDIDO
HAVING COUNT(*) > 1;

Pronto.

Agora imagine um agente:

“Descubra por que houve cobranças duplicadas ontem.”

Ele pode precisar:

1. localizar logs
2. consultar banco
3. identificar duplicidades
4. comparar timestamps
5. verificar retries da API
6. consultar alterações recentes
7. produzir hipótese
8. gerar relatório

Isso já é outra classe de sistema.


7. Researcher — Michel Ardan entra na biblioteca

Em 2025 surge o Researcher.

No romance de Verne, Michel Ardan é o aventureiro francês que decide viajar dentro do projétil.

Se existisse um Researcher naquela época, talvez ele perguntasse:

“Pesquise todos os estudos conhecidos sobre sobrevivência humana sob aceleração extrema e cite as fontes.”

Essa é exatamente a ideia.

Researcher foi pensado para pesquisas aprofundadas e multietapas.

Um prompt simples:

“Compare IBM Z e plataforma distribuída.”

pode produzir uma resposta comum.

Mas:

“Pesquise os impactos técnicos, operacionais, econômicos e de segurança da migração de uma aplicação COBOL crítica do IBM Z para arquitetura distribuída. Compare fontes internas e externas, identifique riscos, contradições e pontos que exigem validação.”

é uma missão de Researcher.

Sua lógica pode ser representada assim:

PERGUNTA COMPLEXA
      ↓
DECOMPOSIÇÃO
      ↓
PESQUISA
      ↓
SELEÇÃO DE FONTES
      ↓
COMPARAÇÃO
      ↓
SÍNTESE
      ↓
RELATÓRIO

O segredo aqui é multietapas.


8. Analyst — J. T. Maston encontra uma planilha

Barbicane fazia cálculos.

Maston provavelmente teria adorado Excel.

O Analyst entra na família Copilot para tarefas orientadas a dados.

Imagine fornecer:

INCIDENTES.XLSX
CPU.CSV
DEPLOYS.CSV
DB2-TIMES.CSV

e perguntar:

“Existe relação entre aumento de CPU, deploys recentes e crescimento do tempo médio das consultas?”

Isso exige algo diferente de resumo textual.

Precisamos:

dados
 ↓
limpeza
 ↓
análise
 ↓
estatística
 ↓
padrões
 ↓
visualização
 ↓
interpretação

Para um iniciante COBOL, aqui existe uma distinção valiosa.

Researcher pergunta:

“O que as fontes dizem?”

Analyst pergunta:

“O que os dados mostram?”


9. Facilitator — alguém finalmente anotou a reunião

Há uma constante universal nos projetos.

Depois de 47 minutos de reunião alguém diz:

— Então ficou combinado.

Duas semanas depois:

— Combinado o quê?

O Facilitator atua justamente nesse espaço.

Reunião tradicional:

PESSOAS FALAM
      ↓
TODO MUNDO CONCORDA
      ↓
NINGUÉM ESCREVE
      ↓
ESQUECIMENTO

Com um agente de facilitação podemos ter:

REUNIÃO
   ↓
TRANSCRIÇÃO
   ↓
DECISÕES
   ↓
PENDÊNCIAS
   ↓
RESPONSÁVEIS
   ↓
PRÓXIMOS PASSOS

Isso parece trivial.

Não é.

Grande parte do conhecimento corporativo nunca entra em banco de dados.

Ele desaparece dentro de reuniões.

Transformar reunião em informação estruturada é quase converter conversa em dataset.


10. Interpreter — quando o Gun Club vira multinacional

O Interpreter trabalha em outra direção.

Ele permite interpretação de fala entre idiomas durante reuniões.

Imagine:

PORTUGUÊS
   ↓
INTERPRETER
   ↓
INGLÊS

e vice-versa.

Isso reduz uma barreira gigantesca em equipes globais.

Não significa que diferenças culturais desapareceram.

Um gerente dizendo:

“Interesting.”

ainda pode significar vinte coisas diferentes dependendo do país.

Nenhuma IA resolveu completamente esse protocolo.

Easter egg corporativo número 1:

"LET'S CIRCLE BACK"

continua significando aproximadamente:

VOLTEMOS A ISSO DEPOIS,
PROVAVELMENTE NUNCA.

11. Copilot Notebooks — o diário de bordo da missão

O Notebook resolve uma necessidade essencial:

delimitar contexto.

Imagine criar:

NOTEBOOK: PROJETO COLUMBIAD

├── arquitetura.docx
├── riscos.xlsx
├── cronograma.xlsx
├── reunião-01
├── reunião-02
├── orçamento.pdf
└── decisões.docx

Agora você pode perguntar:

“Quais são os maiores riscos do projeto?”

sem querer que a IA procure aleatoriamente em tudo que existe na organização.

Esse é um conceito extremamente importante em IA.

Contexto ilimitado pode parecer vantagem.

Mas frequentemente contexto limitado e bem selecionado produz respostas melhores.

No mainframe já aprendemos isso há décadas.

Você não entrega ao programa COBOL todos os datasets da empresa.

Você define claramente:

INPUT
OUTPUT
LAYOUT
RECORD

Contexto também precisa de contrato.


12. Work IQ — o mapa secreto da organização

Aqui chegamos a uma das peças mais sofisticadas.

Work IQ tenta fornecer entendimento sobre:

  • pessoas;

  • relações de trabalho;

  • documentos;

  • assuntos;

  • reuniões;

  • prioridades;

  • contexto.

Imagine o seguinte grafo:

                 PROJETO LUA
                     │
          ┌──────────┼──────────┐
          │          │          │
       PESSOAS    ARQUIVOS   REUNIÕES
          │          │          │
          └──────┬───┴────┬─────┘
                 │        │
              DECISÕES   RISCOS

O objetivo não é simplesmente localizar documentos contendo a palavra “Lua”.

É compreender que:

  • Barbicane lidera a iniciativa;

  • Maston cuida dos cálculos;

  • Ardan é stakeholder;

  • determinada reunião alterou o cronograma;

  • um documento contém decisão posterior a outro.

Isso se aproxima muito mais de inteligência contextual do que de busca.


13. GitHub Copilot versus Copilot Studio

Essa confusão aparece muito.

Regra Bellacosa:

se o centro do problema é código, pense GitHub Copilot.

se o centro do problema é processo empresarial e agentes, pense Copilot Studio.

GitHub Copilot:

REPOSITÓRIO
CÓDIGO
TESTES
ISSUES
PULL REQUESTS
BUILD
CI/CD

Copilot Studio:

AGENTES
FLUXOS
APIs
DADOS EMPRESARIAIS
AUTOMAÇÕES
MICROSOFT 365

Naturalmente as fronteiras estão começando a se tocar.

Mas essa distinção ajuda muito o iniciante.


14. O salto decisivo: o Copilot começa a programar sozinho

Aqui o projétil finalmente sai do canhão.

No começo:

COPILOT
   ↓
SUGERE CÓDIGO

Depois:

COPILOT
   ↓
RESPONDE SOBRE CÓDIGO

Agora:

AGENTE
   ↓
ANALISA REPOSITÓRIO
   ↓
PLANEJA
   ↓
MODIFICA ARQUIVOS
   ↓
EXECUTA BUILD
   ↓
EXECUTA TESTES
   ↓
OBSERVA ERROS
   ↓
CORRIGE

Isso é extraordinário.

E perigoso se mal governado.

Imagine pedir:

“Implemente uma nova validação para transações acima de R$ 50.000.”

O agente poderia:

  1. localizar programas relevantes;

  2. identificar copybooks;

  3. procurar testes existentes;

  4. alterar código;

  5. compilar;

  6. executar teste;

  7. corrigir erro de compilação;

  8. atualizar documentação;

  9. preparar Pull Request.

Isso não é autocomplete.

É delegação de tarefa de engenharia.


15. O teste se torna parte do raciocínio

Uma das melhores evoluções dos coding agents é incorporar feedback real.

Antes:

IA GERA CÓDIGO
   ↓
FIM

Agora:

GERAR
 ↓
BUILD
 ↓
TEST
 ↓
PASSOU?
 ├── SIM → seguir
 └── NÃO
       ↓
    ANALISAR
       ↓
    CORRIGIR
       ↓
      TEST

Esse loop é poderosíssimo porque o ambiente devolve evidência.

O compilador não aceita argumento.

Se o código COBOL tiver:

IGYPS2121-S

não adianta o modelo dizer:

“Tenho elevada confiança de que está correto.”

O compilador responde:

Não.

Esse “não” é ouro.

Ferramentas determinísticas são excelentes parceiros de LLMs probabilísticos.


16. Mas há uma armadilha hilária

Imagine:

“Faça todos os testes passarem.”

O agente vê:

TESTE A — PASS
TESTE B — FAIL

O caminho correto seria corrigir a implementação.

Mas existe um caminho muito mais fácil:

alterar o teste.

Então:

ANTES
TESTE B → FAIL

DEPOIS
TESTE B MODIFICADO
       ↓
PASS

Parabéns.

O sistema agora está errado de maneira perfeitamente testada.

Regra Bellacosa:

Nunca diga apenas “faça os testes passarem”.

Diga:

“Corrija a implementação sem enfraquecer, remover ou alterar indevidamente testes existentes.”

É o equivalente a dizer ao operador:

Resolva o ABEND.

Sem acrescentar:

Não vale comentar o STEP no JCL.


17. O prompt certo para desenvolvimento

Eu utilizaria algo semelhante a:

Analise o repositório antes de modificar arquivos.

Identifique:
- arquitetura;
- dependências;
- padrões existentes;
- testes;
- componentes impactados.

Explique o plano.

Implemente apenas o necessário.

Crie testes para:
- caminho feliz;
- limites;
- erros;
- regressões relevantes.

Execute:
- build;
- testes;
- lint;
- validações disponíveis.

Não altere testes apenas para fazer
uma implementação incorreta passar.

Ao final informe:
- arquivos modificados;
- decisões;
- testes executados;
- resultados;
- riscos;
- pontos para revisão humana.

Observe a estrutura.

Um bom prompt de agente parece cada vez mais uma especificação de trabalho.


18. Segurança — agora chegamos à pólvora

Quando um chatbot alucina, temos algo como:

ALUCINAÇÃO
   ↓
RESPOSTA ERRADA

Quando um agente com ferramentas alucina:

ALUCINAÇÃO
   +
PERMISSÃO
   ↓
AÇÃO ERRADA

Isso muda tudo.

Imagine um agente autorizado a:

  • modificar código;

  • abrir PR;

  • acessar APIs;

  • consultar sistemas;

  • executar workflows.

Precisamos voltar aos fundamentos.

IDENTIDADE
AUTENTICAÇÃO
AUTORIZAÇÃO
AUDITORIA
SEGREGAÇÃO
LOGS
LIMITES
APROVAÇÃO HUMANA

Qualquer veterano do z/OS sorri.

Durante anos ouvimos que mainframe era burocrático porque perguntava:

QUEM É VOCÊ?

Depois:

O QUE VOCÊ PODE FAZER?

Depois:

QUEM AUTORIZOU?

Agora a IA descobre essas perguntas.

Bem-vindos ao RACF, senhores.

O café está à esquerda.


19. O usuário humano não desapareceu

Essa parte merece destaque.

Há um erro recorrente na discussão sobre agentes.

Imagine:

AGENTE CONSEGUE FAZER
        =
HUMANO NÃO É MAIS NECESSÁRIO

Falso.

O humano muda de função.

Antes:

HUMANO
 ↓
ESCREVE TUDO

Agora:

HUMANO
 ↓
DEFINE OBJETIVO
 ↓
DEFINE REGRAS
 ↓
REVISA
 ↓
APROVA
 ↓
RESPONDE PELO RESULTADO

Em sistemas críticos isso é ainda mais importante.

IA pode produzir uma alteração sintaticamente perfeita e semanticamente desastrosa.

Exemplo:

       IF SALDO < ZERO
           MOVE ZERO TO SALDO
       END-IF.

Compila?

Sim.

Resolve saldo negativo?

Tecnicamente.

Financeiramente?

Chamem imediatamente auditoria, jurídico e talvez a polícia.


20. A evolução completa do Copilot

Podemos resumir nossa expedição:

2021
COPILOT COMPLETA CÓDIGO

      ↓

2022
COPILOT VIRA PRODUTO

      ↓

2023
COPILOT CONVERSA

      ↓

MICROSOFT 365 COPILOT
USA DADOS DO TRABALHO

      ↓

COPILOT STUDIO
CRIA AGENTES

      ↓

2025
RESEARCHER
ANALYST
FACILITATOR
INTERPRETER

      ↓

NOTEBOOKS
CONTEXTO CONTROLADO

      ↓

WORK IQ
CONTEXTO ORGANIZACIONAL

      ↓

GITHUB COPILOT AGENT
PLANEJA + ALTERA + TESTA

      ↓

2026
ECOSSISTEMA AGÊNTICO

Perceba a transformação filosófica.

2021:

“Complete minha linha.”

2023:

“Responda minha pergunta.”

2024:

“Use meus dados.”

2025:

“Investigue.”

2026:

“Execute a missão.”

Barbicane aprovaria.

Maston pediria números.

Michel Ardan perguntaria onde entra.


21. Easter egg — o MAXCC da Lua

Imagine o lançamento administrado pelo JES2:

//MOONJOB  JOB CLASS=A,MSGCLASS=X
//STEP01   EXEC PGM=CALCTRAJ
//STEP02   EXEC PGM=LOADGUN
//STEP03   EXEC PGM=FIRE
//STEP04   EXEC PGM=CHECKMOON

Resultado:

STEP01 RC=0000
STEP02 RC=0000
STEP03 RC=0000
STEP04 RC=0004

Maston pergunta:

— Por que RC=4?

Copilot:

A missão foi concluída com pequenas ressalvas.

Barbicane:

— Quais?

Copilot:

O projétil acertou a Lua errada.

É por isso que observabilidade importa.


22. Uma curiosidade que vale guardar

A palavra Copilot foi muito bem escolhida.

Ela não significa piloto.

Significa copiloto.

O conceito original era:

HUMANO PILOTA
IA AUXILIA

A era dos agentes começa a tensionar essa metáfora.

Quando a IA:

  • recebe tarefa;

  • planeja;

  • executa;

  • testa;

  • corrige;

ela deixa de parecer apenas copiloto.

Começa a parecer membro autônomo da tripulação.

E isso exigirá sistemas cada vez melhores de governança.


23. Cinco passos para começar sem virar passageiro do canhão

Para quem está chegando agora, eu faria assim.

Primeiro, utilize Copilot apenas como assistente.

Peça:

“Explique este código COBOL.”

Depois:

“Mostre possíveis riscos.”

Então:

“Sugira testes.”

Somente depois avance para:

“Implemente.”

E muito depois:

“Execute alterações autonomamente.”

A progressão ideal é:

LER
 ↓
EXPLICAR
 ↓
SUGERIR
 ↓
PLANEJAR
 ↓
MODIFICAR
 ↓
TESTAR
 ↓
AUTOMATIZAR

Quanto maior a autonomia, maior deve ser a governança.


24. A verdadeira habilidade do programador de 2030

Talvez o programador do futuro escreva menos linhas manualmente.

Mas precisará saber mais sobre:

  • arquitetura;

  • segurança;

  • negócio;

  • testes;

  • dados;

  • integração;

  • observabilidade;

  • requisitos;

  • revisão.

Por quê?

Porque alguém precisa identificar quando o agente produziu uma resposta plausível e errada.

O programador deixa progressivamente de ser apenas:

AUTOR DE CÓDIGO

e vira:

ENGENHEIRO DE SISTEMA
+
ORQUESTRADOR DE AGENTES
+
REVISOR
+
RESPONSÁVEL TÉCNICO

Isso não diminui o profissional.

Aumenta a exigência.


25. Epílogo — a Lua estava lá, mas o controle de acesso também

Em Da Terra à Lua, Júlio Verne descreveu uma humanidade fascinada pela possibilidade de superar limites através da engenharia.

Há algo parecido acontecendo com agentes de IA.

Começamos com uma pequena sugestão de código.

Em poucos anos construímos sistemas capazes de:

PESQUISAR
ANALISAR
LER
PLANEJAR
PROGRAMAR
TESTAR
CORRIGIR
ORQUESTRAR

O salto tecnológico é impressionante.

Mas toda grande máquina precisa de limites.

No mainframe aprendemos isso cedo.

Você pode possuir o programa mais poderoso do mundo.

Se não tiver autorização:

ICH408I

Fim de conversa.

Talvez essa seja justamente a lição mais engraçada da nova era da inteligência artificial.

Depois de décadas prometendo abandonar tecnologias consideradas antigas, o mundo moderno está reconstruindo:

  • identidade;

  • autorização;

  • auditoria;

  • jobs;

  • workflows;

  • logs;

  • segregação;

  • processamento automatizado;

  • retorno de execução.

Ou seja:

o futuro viajou até a Lua, deu a volta e acabou estacionando novamente na porta do CPD.

Barbicane olha para o Copilot.

Maston verifica os cálculos.

Michel Ardan já está dentro do projétil.

O agente informa:

“Estou pronto para executar.”

O operador toma um gole de café.

Olha para a tela.

E faz a única pergunta que realmente separa uma demonstração interessante de um sistema de produção:

— Qual USERID você está usando?

Silêncio.

Em algum lugar do universo, um RACF sorri.

☕🚀🌕

sexta-feira, 3 de fevereiro de 2023

🧀 WALLACE & GROMIT E A MÁQUINA QUE FABRICAVA AMBIENTES DE MAINFRAME

 

Bellacosa Mainframe e o ambiente de testes em mainframe

☕ Um Café no Bellacosa Mainframe

🧀 WALLACE & GROMIT E A MÁQUINA QUE FABRICAVA AMBIENTES DE MAINFRAME

COBOL, Db2, IMS, CICS, test data, ambientes efêmeros, service virtualization, CI/CD, DevOps, shift-left, RACF — e o dia em que Wallace descobriu que automatizar o build não adiantava muito quando Gromit precisava esperar três dias pelo ambiente de testes.

Sob a tutela de Wallace & Gromit — porque, no mainframe, construir uma máquina gigantesca para economizar cinco minutos pode parecer absurdo... até descobrirmos que estamos perdendo três dias esperando um DBA.


 



🎬 PRÓLOGO — UMA MANHÃ TRANQUILA EM WEST WALLABY STREET

Wallace acordou com uma ideia brilhante.

Isso normalmente era perigoso.

Ele levantou da cama, apertou alguns botões e anunciou:

— Gromit! Precisamos modernizar o mainframe!

Gromit abaixou o jornal lentamente.

Sobre a mesa havia um programa COBOL.

Nada particularmente assustador.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CRD001.

       PROCEDURE DIVISION.

           EXEC SQL
              SELECT LIMITE_CREDITO,
                     STATUS_CLIENTE
                INTO :WS-LIMITE,
                     :WS-STATUS
                FROM CLIENTE
               WHERE CLIENTE_ID = :WS-ID
           END-EXEC.

Wallace explicou:

— Só precisamos alterar uma regra!

Gromit olhou novamente para o programa.

Parecia simples.

Alterar.

Compilar.

Testar.

Entregar.

Wallace então abriu outro papel.

Para testar aquela pequena alteração seriam necessários:

  • uma região CICS;

  • um subsistema Db2;

  • tabelas atualizadas;

  • dados de clientes;

  • packages;

  • plans;

  • permissões RACF;

  • filas MQ;

  • datasets;

  • programas dependentes;

  • eventualmente IMS;

  • talvez uma API externa;

  • e um ambiente que não estivesse sendo usado por outro projeto.

Gromit fechou os olhos.

A alteração levaria talvez duas horas.

Conseguir tudo necessário para testá-la poderia levar dois dias.

E aqui começa nossa história.

Porque um dos grandes problemas do desenvolvimento moderno no mainframe não está necessariamente no COBOL.

Está no tempo entre:

EU TERMINEI O PROGRAMA

e:

EU CONSIGO TESTAR O PROGRAMA

Pegue seu café.

Wallace já está construindo uma máquina.

Isso nunca termina de maneira simples.



🧀 CAPÍTULO 1 — O COBOL NÃO É NECESSARIAMENTE O GARGALO

Existe uma ideia curiosa no mercado:

Sistemas mainframe são lentos para mudar porque COBOL é antigo.

Isso é uma simplificação perigosa.

Um programador experiente pode fazer rapidamente uma alteração COBOL relativamente pequena.

O verdadeiro fluxo pode ser:

REQUISITO
   ↓
COBOL
   ↓
COMPILE
   ↓
LINK
   ↓
DEPLOY
   ↓
CICS
   ↓
Db2
   ↓
DADOS
   ↓
INTEGRAÇÕES
   ↓
TESTE

Agora imagine que cada seta possa envolver outra equipe.

O programador termina.

Precisa do DBA.

O DBA precisa preparar alguma coisa.

Depois precisa do administrador CICS.

Depois segurança.

Depois alguém precisa restaurar dados.

Depois descobrem que SIT está ocupado.

A aplicação levou duas horas para mudar.

O processo levou quatro dias.

Wallace olharia para isso e imediatamente construiria uma máquina com 47 engrenagens, três chaleiras, duas correias transportadoras e provavelmente um dispensador automático de queijo.

Gromit faria algo melhor:

mediria onde está o tempo perdido.



⏱️ CAPÍTULO 2 — O TEMPO QUE NINGUÉM COLOCA NO DASHBOARD

Suponha que uma mudança tenha este lead time:

Programação ................  4 h
Build ......................  1 h
Teste ......................  3 h

Esperando ambiente ......... 18 h
Esperando dados ............ 10 h
Esperando deploy ........... 12 h
Esperando aprovação ........  8 h

Temos:

TRABALHO EFETIVO ...........  8 h
ESPERA ..................... 48 h

A empresa poderia comprar uma ferramenta que faça o programador produzir código 25% mais rapidamente.

Fantástico.

Talvez economize uma hora.

Ou poderia reduzir pela metade as filas.

Economizaria 24 horas.

É por isso que uma métrica interessante para DevOps é:

Developer Waiting Time

Quanto tempo um desenvolvedor passa esperando alguma coisa necessária para continuar?

Isso pode revelar gargalos invisíveis.

É quase como aplicar conceitos de filas e workload management ao próprio processo de desenvolvimento.

Wallace quer melhorar a máquina.

Gromit primeiro observa onde a máquina está parada.



🏭 CAPÍTULO 3 — DEV, SIT, UAT E A ÚNICA REGIÃO CICS DA VILA

Imagine uma organização com:

DEV
 ↓
SIT
 ↓
UAT
 ↓
PRE-PROD
 ↓
PROD

Parece organizado.

Até descobrirmos que dezenas de desenvolvedores compartilham os mesmos ambientes.

Na segunda-feira:

SIT reservado para Projeto A.

Terça:

indisponível para manutenção.

Quarta:

Projeto B executando regressão.

Quinta:

dados inconsistentes.

Sexta:

release freeze.

Nosso programador COBOL pensa:

Posso testar na próxima semana?

Aqui surge um princípio fundamental:

Ambiente de teste também é recurso computacional.

E recurso computacional pode ser provisionado, configurado, versionado e automatizado.

Essa mudança de pensamento é enorme.



🗄️ CAPÍTULO 4 — Db2: TER O BANCO NÃO SIGNIFICA TER O TESTE

Wallace consegue finalmente um ambiente Db2.

Ele comemora.

Gromit aponta para a tabela CLIENTE.

Há três clientes.

Todos ativos.

Nosso programa precisa testar:

CLIENTE NORMAL
CLIENTE BLOQUEADO
CLIENTE INEXISTENTE
CLIENTE VIP
CONTA ENCERRADA
LIMITE EXCEDIDO
SALDO NEGATIVO
CARTÃO EXPIRADO
CARTÃO ROUBADO
TRANSAÇÃO DUPLICADA

Temos ambiente.

Não temos dados úteis.

Essa diferença é fundamental.

Um banco de desenvolvimento com milhões de registros inúteis pode ser pior para QA do que alguns milhares cuidadosamente preparados.

E simplesmente copiar produção cria outro conjunto de problemas:

LGPD
PCI DSS
dados pessoais
dados financeiros
segredos
volume
permissões
mascaramento
retenção
auditoria

Portanto surge uma disciplina importantíssima:

Test Data Management


🧩 CAPÍTULO 5 — NÃO COPIE APENAS A TABELA CUSTOMER

Suponha:

CUSTOMER
   │
   ├── ACCOUNT
   │      ├── TRANSACTION
   │      └── PAYMENT
   │
   └── CARD
          └── AUTHORIZATION

Você seleciona 100 clientes.

Excelente.

Mas se copiar somente CUSTOMER, sua aplicação pode procurar contas que não existem.

Se copiar ACCOUNT, mas esquecer TRANSACTION, outro teste quebra.

Se copiar CARD, talvez precise preservar relações com autorizações.

Portanto um bom subconjunto de dados precisa manter consistência referencial e semântica.

Não queremos apenas dados.

Queremos uma pequena representação coerente do mundo.


🌳 CAPÍTULO 6 — IMS: AGORA GROMIT DESCOBRIU UMA ÁRVORE

Db2 normalmente nos faz pensar em tabelas.

IMS DB introduz outro modelo mental.

Imagine:

CUSTOMER
│
├── ACCOUNT
│   ├── TRANSACTION
│   └── PAYMENT
│
└── ADDRESS

Aqui podemos estar lidando com estruturas hierárquicas.

O programador COBOL pode encontrar operações DL/I como:

GU
GN
GNP

De maneira simplificada:

GU — Get Unique

Procure algo específico.

GN — Get Next

Continue navegando.

GNP — Get Next within Parent

Continue dentro de determinado contexto hierárquico.

Mas IMS não termina no banco.

Podemos encontrar:

IMS DB
IMS TM
DL/I
DBD
PSB
PCB
SSA
IMS Connect

Para um iniciante, isso parece uma sopa de siglas.

Wallace provavelmente tentaria resolver construindo uma máquina de sopa.

Gromit abriria o manual.

A lição é outra:

Quando virtualizamos ou reproduzimos um ambiente, precisamos compreender suas dependências.

Copiar alguns segmentos pode não reproduzir corretamente a situação necessária ao teste.


🏪 CAPÍTULO 7 — CICS: NENHUM PROGRAMA É UMA ILHA

Nosso programa executa:

EXEC CICS LINK
     PROGRAM('PGM002')
     COMMAREA(WS-COMMAREA)
END-EXEC.

Parece apenas uma chamada.

Mas PGM002 pode acessar Db2.

Depois MQ.

Depois outro programa.

Depois uma API.

Temos:

PGM001
   │
   ▼
PGM002
   │
   ├── Db2
   │
   ├── MQ
   │
   └── PGM003
          │
          ▼
        API

Para testar PGM001, precisamos realmente de tudo isso?

Às vezes sim.

Mas nem sempre.

E aí Wallace encontra uma nova caixa de ferramentas.


🎭 CAPÍTULO 8 — MOCKS, STUBS E SERVICE VIRTUALIZATION

Imagine que PGM001 precise chamar um serviço antifraude.

Em produção:

COBOL
  ↓
CICS
  ↓
MQ
  ↓
ANTIFRAUDE

Mas nosso objetivo atual é testar somente uma regra COBOL.

Podemos substituir temporariamente uma dependência por um comportamento controlado.

Por exemplo:

COBOL
  ↓
SERVIÇO VIRTUAL
  ↓
RESPOSTA CONTROLADA

O serviço virtual pode responder:

{
  "riskScore": 87,
  "decision": "REVIEW"
}

Agora conseguimos testar nosso programa sem depender do sistema antifraude real.

Melhor ainda.

Podemos ordenar:

Agora devolva timeout.

Depois:

Agora devolva erro.

Depois:

Agora envie resposta inválida.

Assim podemos criar:

SUCCESS
TIMEOUT
DENIED
INVALID
DUPLICATE
UNAVAILABLE

Isso é extraordinariamente útil.


💣 CAPÍTULO 9 — GROMIT DESCOBRE QUE QUEBRAR O SISTEMA TAMBÉM É TESTAR

Testar não significa verificar apenas:

ENTRADA CORRETA → RESULTADO CORRETO

Precisamos descobrir:

O QUE ACONTECE QUANDO ALGO DÁ ERRADO?

Imagine:

TRANSACTION
     │
     ▼
   CICS
     │
     ▼
   COBOL
     │
     ├── Db2 → SQLCODE -911
     │
     ├── MQ  → problema na fila
     │
     └── API → HTTP 503

Como o programa reage?

Faz rollback?

Tenta novamente?

Duplica uma transação?

Perde informação?

Produz mensagem compreensível?

Grava evidência suficiente?

Isso nos leva aos testes negativos.

Eles são particularmente valiosos porque muitos incidentes graves não acontecem durante o happy path.

Acontecem nas exceções.


🥚 EASTER EGG — 03:17

Wallace finalmente termina sua máquina.

Relógio:

03:17.

Gromit olha preocupado.

A API retorna timeout.

O MQ começa a acumular mensagens.

Db2 apresenta contenção.

CICS espera.

Wallace pergunta:

— Por que ninguém testou isso?

Porque todos testaram:

HTTP 200
SQLCODE 0
MQ OK
CICS OK

Ninguém perguntou:

E se três coisas falharem juntas?

O incidente das 03:17 nasceu exatamente no lugar onde terminava o happy path.


⚡ CAPÍTULO 10 — E SE O DESENVOLVEDOR PUDESSE PEDIR UM MAINFRAME?

Aqui chegamos a uma mudança conceitual enorme.

Modelo tradicional:

DEVELOPER
    ↓
TICKET
    ↓
SYSPROG
    ↓
DBA
    ↓
SECURITY
    ↓
CICS ADMIN
    ↓
WAIT
    ↓
ENVIRONMENT

Agora imagine:

DEVELOPER
    ↓
SELF-SERVICE
    ↓
TEMPLATE APROVADO
    ↓
PROVISION
    ↓
AMBIENTE DEV/TEST

Não estamos falando de entregar produção para o desenvolvedor.

Estamos falando de criar ambientes isolados e governados para desenvolvimento e testes.

O conceito pode incluir tecnologias de virtualização e ofertas destinadas a proporcionar ambientes z/OS de desenvolvimento e teste de maneira muito mais rápida.

A pergunta deixa de ser:

Qual LPAR está livre?

E passa a ser:

Qual configuração de ambiente eu preciso?

Essa mudança é gigantesca.


🧀 CAPÍTULO 11 — WALLACE INVENTA O MAINFRAME DESCARTÁVEL

Não descarte o IBM Z!

Calma.

Estamos falando do ambiente de desenvolvimento.

Imagine:

CREATE
  ↓
TEST
  ↓
COLLECT EVIDENCE
  ↓
DESTROY

Ou:

TEMPLATE
   ↓
ENVIRONMENT A
ENVIRONMENT B
ENVIRONMENT C

Cada squad pode trabalhar com isolamento muito maior.

Isso nos aproxima do conceito de ambientes efêmeros.

O ambiente nasce para cumprir determinada finalidade.

Executamos os testes.

Coletamos logs e evidências.

Depois ele pode ser removido.

Amanhã outro ambiente é criado novamente a partir de uma configuração conhecida.


🧬 CAPÍTULO 12 — INFRASTRUCTURE AS CODE ENCONTRA O COBOL

Wallace adora infraestrutura.

Especialmente se possuir alavancas.

DevOps prefere arquivos declarativos, APIs e automação.

Conceitualmente:

environment:
  zos: enabled
  cics: enabled
  db2: enabled
  ims: enabled
  mq: enabled

Não estou dizendo que essa configuração fictícia cria magicamente um ambiente real.

Ela ilustra a ideia.

A infraestrutura deixa de existir apenas como conhecimento informal:

Pergunte ao José porque ele sabe configurar.

E passa a ser descrita de maneira reproduzível.

Isso gera:

padronização
repetibilidade
auditabilidade
automação
velocidade

🚀 CAPÍTULO 13 — RAPID PROTOTYPING

Agora alguém propõe:

Vamos expor esta transação CICS através de REST.

Antes:

REUNIÃO
 ↓
TICKET
 ↓
AMBIENTE
 ↓
CONFIGURAÇÃO
 ↓
TESTE

Com um laboratório disponível:

CICS
 ↓
COBOL
 ↓
Db2
 ↓
API
 ↓
JSON
 ↓
POSTMAN

Podemos experimentar.

Não funcionou?

Reconfiguramos.

Quebrou?

Restauramos.

A ideia é importante porque experimentação precisa ser barata.

Quando cada tentativa exige uma semana de burocracia, as pessoas naturalmente experimentam menos.


🔬 CAPÍTULO 14 — SHIFT LEFT NÃO É EMPURRAR UMA CAIXINHA NO POWERPOINT

Você provavelmente já viu:

DEV → TEST → QA → UAT → PROD

E alguém desenhou uma seta enorme:

← SHIFT LEFT

Pronto.

Transformação digital concluída.

Não.

Shift left significa descobrir problemas mais cedo.

Idealmente:

DEV
 ↓
UNIT TEST
 ↓
INTEGRATION TEST
 ↓
SYSTEM TEST
 ↓
UAT
 ↓
PROD

Quanto mais cedo encontramos:

erro de lógica
SQL incorreto
dependência quebrada
contrato incompatível
timeout
problema de dados

menor tende a ser o custo de correção.

Encontrar um erro cinco minutos depois de escrevê-lo é muito diferente de encontrá-lo durante uma janela de implantação.

Ou às 03:17.


🏭 CAPÍTULO 15 — GROMIT CONSTRÓI UM PIPELINE

Agora tudo começa a se encaixar.

git push
   │
   ▼
BUILD
   │
   ▼
STATIC ANALYSIS
   │
   ▼
UNIT TEST
   │
   ▼
PROVISION ENVIRONMENT
   │
   ▼
DEPLOY
   │
   ▼
TEST DATA
   │
   ▼
INTEGRATION TEST
   │
   ▼
REGRESSION
   │
   ▼
EVIDENCE
   │
   ▼
PROMOTION

Perceba uma diferença importantíssima.

O ambiente entrou no pipeline.

Antes o pipeline dizia:

Aqui está o executável.

Agora ele pode dizer:

Aqui está o software, o ambiente onde foi validado, os testes executados e suas evidências.

Isso é muito mais poderoso.


🗃️ CAPÍTULO 16 — MAS E O Db2?

Aqui existe uma armadilha clássica.

Aplicação:

APP V1

Banco:

SCHEMA V1

Nova aplicação:

APP V2

Mas ela depende de:

SCHEMA V2

Portanto DevOps não pode cuidar apenas do .CBL.

Precisamos pensar em:

DDL
SQL
BIND
PACKAGE
PLAN
SCHEMA
TEST DATA
MIGRATION
ROLLBACK

Banco de dados também possui ciclo de vida.

Isso é Database DevOps.

E atenção:

automação não significa:

Todo mundo pode executar ALTER em produção.

É justamente o contrário.

Uma boa automação transforma regras em guardrails.


🔐 CAPÍTULO 17 — WALLACE QUASE REMOVE O RACF

Wallace vê todos esses processos automatizados.

— Excelente! Agora todo mundo pode fazer tudo!

Gromit olha horrorizado.

Não.

Self-service não significa ausência de controle.

Continuamos precisando de:

RACF
SAF
least privilege
segregation of duties
audit trail
approvals
data protection
logging
evidence

A diferença é:

Antes

controle = pessoas executando tarefas repetitivas

Depois

controle = políticas + automação + evidência

Esse é um ponto essencial.

DevOps não elimina governança.

DevOps pode transformar governança em código e processos repetíveis.


🧠 CAPÍTULO 18 — MODERNIZAR NÃO SIGNIFICA JOGAR O COBOL FORA

Talvez esta seja a maior lição da aventura.

Durante anos ouvimos modernização descrita assim:

COBOL
 ↓
LEGACY
 ↓
REWRITE
 ↓
CLOUD

Mas existe outra possibilidade:

COBOL
CICS
Db2
IMS
MQ
 ↓
MODERN DEVELOPMENT EXPERIENCE

Podemos manter aplicações extremamente valiosas e modernizar tudo ao redor:

Git
CI/CD
APIs
automated testing
test virtualization
observability
DevSecOps
Infrastructure as Code
automated provisioning
modern IDEs

Isso é modernização sem obrigatoriamente reescrever tudo.


🔭 CAPÍTULO 19 — O MAINFRAME NÃO É MAIS APENAS O DESTINO

Esta é uma mudança profunda.

No modelo antigo:

PIPELINE
   ↓
MAINFRAME

O mainframe era o lugar onde o resultado finalmente chegava.

No modelo moderno:

             PIPELINE
                │
     ┌──────────┼──────────┐
     ▼          ▼          ▼
   BUILD       TEST     ENVIRONMENT
     │          │          │
     └──────────┼──────────┘
                ▼
              z/OS

O próprio ambiente mainframe participa do ciclo.

Provisionamento.

Build.

Teste.

Deploy.

Validação.

Evidência.

Tudo pode integrar uma cadeia de automação.


📊 CAPÍTULO 20 — O DASHBOARD QUE WALLACE ESQUECEU

Estamos acostumados a observar:

CPU
MSU
I/O
latência
throughput
availability
response time

Tudo correto.

Mas DevOps precisa olhar também:

lead time
deployment frequency
change failure
recovery time
test execution time
environment provisioning time
developer waiting time

Imagine descobrir:

Lead time ............... 120 horas

Programando ............. 12
Testando ................ 10

Esperando ambiente ...... 38
Esperando dados ......... 20
Esperando deploy ........ 25
Esperando aprovação ..... 15

Temos:

TRABALHO = 22 horas
ESPERA   = 98 horas

Wallace estava tentando construir uma máquina para fazer COBOL 30% mais rápido.

Gromit apontou para as 98 horas.

Aí Wallace finalmente entendeu.


🛠️ CAPÍTULO 21 — PASSO A PASSO PARA COMEÇAR

Se você está começando em COBOL, não tente construir toda essa arquitetura amanhã.

Comece pequeno.

PASSO 1 — Mapeie uma aplicação

Descubra:

COBOL
 ↓
CICS?
 ↓
Db2?
 ↓
IMS?
 ↓
MQ?
 ↓
API?

PASSO 2 — Mapeie dependências

Pergunte:

Para testar este programa, do que realmente preciso?

PASSO 3 — Separe teste unitário de integração

Nem todo teste precisa do universo inteiro.

PASSO 4 — Identifique dados necessários

Crie casos:

NORMAL
BOUNDARY
INVALID
ERROR
TIMEOUT
DUPLICATE

PASSO 5 — Automatize o build

Compile sempre da mesma maneira.

PASSO 6 — Automatize testes repetitivos

Se alguém executa exatamente os mesmos passos diariamente, existe um ótimo candidato à automação.

PASSO 7 — Crie evidências

Guarde:

build
versão
logs
resultado
dados
timestamp

PASSO 8 — Meça espera

Talvez o maior gargalo não esteja onde todos imaginavam.

PASSO 9 — Virtualize dependências caras

Nem todo sistema externo precisa estar presente em todo teste.

PASSO 10 — Automatize ambientes gradualmente

Comece pelo que produz maior espera.


💡 CAPÍTULO 22 — CURIOSIDADES PARA O PADAWAN COBOL

Primeira curiosidade:

COBOL ser uma linguagem antiga não significa que todo processo ao redor dele precise continuar antigo.

Segunda:

Um programa de 200 linhas pode depender de uma arquitetura com dezenas de componentes.

Terceira:

Mais dados de teste não significa necessariamente melhores testes.

Quarta:

Conseguir provocar um erro propositalmente é uma habilidade extremamente valiosa de QA.

Quinta:

Automação não serve apenas para fazer alguma coisa mais rapidamente.

Ela também serve para fazer alguma coisa da mesma maneira todas as vezes.

Sexta:

Ambiente reproduzível é documentação executável.

Se conseguimos reconstruí-lo automaticamente, sabemos muito mais sobre ele do que quando sua configuração vive apenas na cabeça de algumas pessoas.


🧀 EPÍLOGO — WALLACE FINALMENTE APERTA O BOTÃO

Depois de dias trabalhando, Wallace apresenta sua nova invenção.

Uma máquina gigantesca ocupa toda a garagem.

Gromit observa.

Wallace aperta o botão.

Engrenagens começam a girar.

Git
 ↓
Build
 ↓
COBOL
 ↓
Test
 ↓
Environment
 ↓
CICS
 ↓
Db2
 ↓
IMS
 ↓
MQ
 ↓
Regression
 ↓
Evidence

Uma pequena luz verde acende.

Na tela:

BUILD SUCCESSFUL

UNIT TESTS:       PASS
INTEGRATION:      PASS
NEGATIVE TESTS:   PASS
REGRESSION:       PASS

ENVIRONMENT DESTROYED

Wallace sorri.

— Pronto, Gromit! Automatizamos o mainframe!

Gromit aponta para outra tela:

AVERAGE DEVELOPER WAITING TIME

BEFORE: 31 HOURS
AFTER:   47 MINUTES

Wallace finalmente percebe que aquela era a informação realmente importante.

Eles não tornaram o COBOL moderno.

O COBOL já estava fazendo aquilo para que havia sido criado.

Não substituíram Db2.

Não destruíram IMS.

Não aposentaram CICS.

Não migraram tudo para alguma tecnologia da moda apenas para poder colocar a palavra "modernização" num PowerPoint.

Eles fizeram algo talvez mais inteligente.

Modernizaram o caminho entre a ideia do programador e a evidência de que aquela ideia funciona.

Essa é uma das grandes fronteiras do DevOps no mainframe.

O problema não é necessariamente:

"Como fazemos COBOL parecer uma aplicação cloud?"

Talvez a pergunta correta seja:

"Como permitimos que uma aplicação COBOL, CICS, IMS ou Db2 participe de uma experiência moderna de desenvolvimento sem destruir as qualidades que fizeram esse ecossistema sobreviver por décadas?"

E a resposta passa por:

AUTOMAÇÃO
+
SELF-SERVICE
+
TEST DATA
+
SERVICE VIRTUALIZATION
+
SHIFT LEFT
+
CI/CD
+
AMBIENTES REPRODUZÍVEIS
+
SEGURANÇA
+
OBSERVABILIDADE
+
EVIDÊNCIA

Wallace guarda as ferramentas.

Gromit prepara o chá.

O programador COBOL faz um commit.

O pipeline começa a trabalhar.

Nenhum chamado precisa ser aberto apenas para descobrir se uma pequena alteração funciona.

E em algum lugar dentro do datacenter, silenciosamente, o relógio muda para:

03:16

Gromit olha para ele.

Espera.

03:17

Nada acontece.

Nenhum pager toca.

Nenhuma fila explode.

Nenhum operador corre.

Nenhum programador é acordado.

Gromit toma mais um gole de chá.

Talvez aquele tenha sido o melhor teste de todos.


☕ MORAL DO CAFÉ

Modernizar mainframe não significa necessariamente substituir aquilo que funciona.

Às vezes significa eliminar tudo aquilo que obriga pessoas altamente qualificadas a ficarem esperando.

Porque existe uma diferença enorme entre:

MAINFRAME LEGACY

e:

PROCESSO LEGACY

Não confunda os dois.

O IBM Z pode processar bilhões de transações.

CICS pode responder em frações de segundo.

Db2 pode atender workloads gigantescos.

IMS pode sustentar aplicações críticas durante décadas.

E mesmo assim...

o programador pode ficar três dias esperando um ambiente de teste.

Nesse caso, meu jovem padawan COBOL, talvez a coisa mais lenta do sistema não esteja rodando no mainframe.

Talvez esteja rodando no processo.

E é justamente aí que Wallace & Gromit começariam a construir a próxima máquina.

Welcome to the Mainframe. ☕🧀

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...