☕ 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 manutenção. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta manutenção. Mostrar todas as mensagens

terça-feira, 14 de abril de 2026

🧠 SMP/E na Prática: O que são MCS — Modification Control Statements?


Bellacosa Mainframe apresenta SMP/E na pratica o fluxo de um MCS



🧠 SMP/E na Prática : O que são MCS — Modification Control Statements?

Os MCS (Modification Control Statements) são instruções de controle usadas pelo SMP/E para descrever o que um pacote de manutenção contém e como ele deve ser instalado.

👉 Pense no MCS como a “receita” que diz ao SMP/E:

  • quais módulos vão ser substituídos,
  • quais macros entram ou saem,
  • dependências necessárias,
  • pré-requisitos,
  • co-requisitos,
  • SYSMODs substituídos,
  • módulos afetados,
  • e onde tudo deve ser aplicado.

Essas instruções aparecem normalmente dentro de:

  • PTFs (Program Temporary Fixes)
  • APARs
  • USERMODs
  • FMIDs (instalação de produtos)

🧾 Como os MCS são emitidos?

Você não digita MCS manualmente durante a aplicação normal. Eles vêm dentro dos pacotes de manutenção, distribuídos pelo fornecedor (ex.: IBM).

O fluxo típico é:

  1. Você recebe um PTF/APAR.
  2. Dentro dele existem blocos MCS, como:
    • ++VER
    • ++MOD
    • ++MAC
    • ++JCLIN
    • ++HOLD
    • ++IF / ++REQ / ++PRE
  3. Esses blocos descrevem ao SMP/E:
    • quais módulos substituir
    • como montar link-edit
    • dependências
    • regras de instalação

⚙️ Onde o APPLY entra nessa história?

O comando APPLY do SMP/E processa as instruções MCS e efetivamente instala as mudanças no ambiente target.

Fluxo simplificado:

  1. RECEIVE
    • lê os MCS e registra no banco SMP/E.
  2. APPLY
    • valida dependências declaradas nos MCS.
    • verifica PRE/REQ/IF.
    • monta JCL se houver ++JCLIN.
    • atualiza módulos, macros, etc.
  3. ACCEPT
    • confirma no DLIB (distribution library).

🔄 Relação direta entre MCS e APPLY

✔ Os MCS dizem o que fazer.
✔ O APPLY executa o que foi declarado.

Exemplo conceitual:

++VER
++MOD(MYMOD) DISTLIB(AOSL)
++MAC(MYMAC)
++JCLIN

O APPLY vai:

  • validar PREs e REQs,
  • aplicar módulos,
  • montar e executar o JCLIN,
  • atualizar o ambiente.

🧩 O APPLY “lê” os MCS?

Exatamente. O SMP/E usa os MCS como instruções de engenharia. O APPLY:

  • lê os blocos ++VER / ++MOD / ++MAC / ++JCLIN
  • monta a sequência correta
  • valida integridade
  • garante consistência entre FMIDs, SYSMODs e bibliotecas

Sem MCS, o APPLY não saberia o que fazer.


🧪 Exemplo didático

Imagine um PTF que corrige um módulo COBOL:

O MCS pode declarar:

++VER(Z038) FMID(HBB7780).
++MOD(IGYCRCTL) DISTLIB(SIGYLOAD).

O APPLY irá:

  • verificar FMID HBB7780
  • garantir dependências
  • substituir o módulo IGYCRCTL na loadlib correta

🧠 Resumo prático

  • MCS = linguagem que descreve a manutenção.
  • SMP/E = interpretador/engine.
  • APPLY = ação que materializa as mudanças.

Um exemplo de MCS realista para um PTF que altera componentes do IBM Enterprise COBOL for z/OS e depende do runtime do IBM Language Environment (LE).

⚠️ Este é um exemplo didático (estrutura fiel, mas nomes ilustrativos).


📦 Exemplo — MCS de um PTF de COBOL/LE

Imagine um PTF que:

  • Atualiza o módulo IGZCCTL (runtime LE para COBOL)
  • Atualiza o compilador IGYCRCTL
  • Exige um pré-requisito
  • Inclui JCLIN para link-edit

Exemplo MCS

++PTF(UX12345) REWORK(20260413).
++VER(Z038)
FMID(HIGY170)
PRE(UJ99999)
REQ(LE37000).

++HOLD(UX12345)
SYSTEM
REASON(ACTION)
DATE(260413)
COMMENT(
'Este PTF atualiza módulos do compilador COBOL e
componentes de runtime LE. Requer rebind após APPLY.'
).

++MOD(IGYCRCTL) DISTLIB(SIGYCOMP) SYSLIB(SIGYCOMP).
++MOD(IGZCCTL) DISTLIB(SCEERUN) SYSLIB(SCEERUN).

++MAC(IGZMAC01) DISTLIB(SCEEMAC).

++JCLIN.
//LKED EXEC PGM=IEWL,PARM='LIST,XREF,LET'
//SYSLMOD DD DSN=CEE.SCEERUN,DISP=SHR
//SYSLIN DD *
INCLUDE SYSLIB(IGZCCTL)
ENTRY IGZCCTL
NAME IGZCCTL(R)
/*
++END

🧠 O que cada bloco faz?

✔️ ++PTF

Define o SYSMOD e metadados.

✔️ ++VER

Define o FMID alvo (feature a ser mantida) e dependências:

  • PRE → pré-requisitos
  • REQ → requisitos obrigatórios

✔️ ++HOLD

Impede instalação automática e obriga ação manual (por exemplo, rebind).

✔️ ++MOD

Declara módulos a substituir e onde instalá-los.

✔️ ++MAC

Declara macros a atualizar.

✔️ ++JCLIN

Fornece instruções de link-edit que o SMP/E executará no APPLY.


⚙️ Como isso interage com APPLY?

Quando você executa:

SET BDY(TGT1).
APPLY PTFS(UX12345).

O SMP/E irá:

  1. Verificar FMID e PRE/REQ
  2. Validar HOLDS
  3. Copiar módulos declarados em ++MOD
  4. Rodar o JCLIN para link-edit
  5. Registrar o resultado no CSI

🧩 Resumo rápido

  • MCS = contrato do PTF
  • APPLY = motor que executa esse contrato
  • O ++JCLIN evita você montar manualmente link-edits 

domingo, 17 de outubro de 2021

Technical Debt Rules : Quando um Programador COBOL Descobriu que Cada Atalho Criava um Agente Smith Dentro do Sistema

 

Bellacosa Mainframe e as technical debt rules

☕ Um Café no Bellacosa Mainframe

Technical Debt Rules sem Mistérios

Quando um Programador COBOL Descobriu que Cada Atalho Criava um Agente Smith Dentro do Sistema

"Infelizmente, ninguém pode explicar o que é a Dívida Técnica. Você precisa vê-la por si mesmo." — inspirado no universo de Matrix


Bem-vindo à Matrix do Desenvolvimento

Imagine que você acorda em uma sala escura.

Na sua frente existe um monitor verde.

Linhas de caracteres descem como chuva.

Um homem de óculos escuros aproxima-se.

Não é Morpheus.

É o Analista de Sistemas mais antigo da empresa.

Ele coloca duas fitas magnéticas sobre a mesa.

Uma vermelha.

Outra azul.

A azul compila hoje.

A vermelha exige refatoração, testes, documentação e arquitetura.

Você pergunta:

— Qual delas devo escolher?

Ele sorri.

— A azul entrega o projeto este mês.

— A vermelha salva os próximos dez anos.

Naquele instante você entende que toda equipe de desenvolvimento vive diariamente essa escolha.

Esse é o universo da Technical Debt, ou Dívida Técnica, um dos conceitos mais importantes — e mais mal compreendidos — da Engenharia de Software.

Para quem trabalha com COBOL, CICS, Db2, JCL e sistemas legados, entender a Dívida Técnica é quase tão importante quanto saber interpretar um ABEND. Ela explica por que alguns sistemas envelhecem com dignidade enquanto outros se tornam um labirinto impossível de manter.


O que é Technical Debt?

Technical Debt é o custo futuro provocado por decisões técnicas tomadas para ganhar velocidade no presente.

Em outras palavras:

É quando você economiza tempo hoje emprestando tempo do seu próprio futuro.

Assim como um empréstimo bancário, a dívida técnica pode ser útil quando administrada conscientemente.

O problema não é contrair uma dívida.

O problema é esquecer que ela existe.


A origem do termo

O termo Technical Debt foi criado em 1992 por Ward Cunningham, um dos autores do Manifesto Ágil e criador do primeiro Wiki da história.

Ward percebeu que muitos gestores entendiam dinheiro, juros e empréstimos, mas tinham dificuldade para compreender problemas de arquitetura de software.

Então fez uma analogia brilhante.

Ele disse:

"Entregar um software antes de terminar sua arquitetura é como fazer um empréstimo. Pode ser uma boa decisão, desde que você pague rapidamente."

O problema aparece quando os juros começam.

E em software...

...os juros aparecem em forma de:

  • bugs

  • retrabalho

  • lentidão

  • dificuldades para alterar regras

  • aumento do tempo de testes

  • aumento de incidentes


Matrix explica melhor que muitos livros

Imagine que cada linha de código seja parte da Matrix.

Quando tudo é desenvolvido corretamente...

a simulação permanece estável.

Mas sempre existe alguém dizendo:

"Depois a gente arruma."

Esse "depois" nunca chega.

Cada pequeno atalho cria pequenas distorções.

No começo parecem insignificantes.

Depois surgem pequenos defeitos.

Mais tarde aparecem exceções.

Finalmente...

a Matrix inteira começa a produzir Agentes Smith.


Quem são os Agentes Smith?

No mundo do software, os Agentes Smith representam problemas que surgem continuamente.

Cada vez que um desenvolvedor resolve um bug rapidamente sem corrigir sua causa...

nasce um novo Smith.

Cada IF duplicado...

mais um Smith.

Cada variável mal nomeada...

outro Smith.

Cada programa COBOL de cinquenta mil linhas...

centenas deles.

Eles continuam se multiplicando até dominar todo o sistema.


Um exemplo COBOL

Imagine este código:

IF TIPO = "A"
    MOVE 15 TO DESCONTO
END-IF

Alguns meses depois.

Nova regra.

IF TIPO = "A"
    MOVE 20 TO DESCONTO
END-IF

Mais tarde.

Outro programador.

IF CLIENTE-PREMIUM
    MOVE 25 TO DESCONTO
END-IF

Depois.

Outro módulo.

Mesmo código.

Depois outro.

E outro.

Agora existem quinze versões diferentes da mesma regra.

Toda alteração exige procurar manualmente.

Esse é um clássico exemplo de dívida técnica.


O que gera Technical Debt?

Pressão por prazo

"Entrega sexta."

Mesmo sabendo que deveria levar três semanas.


Falta de testes

"Depois escrevemos."

Nunca escrevem.


Documentação inexistente

"Todo mundo entende."

Dois anos depois ninguém entende.


Copiar código

CTRL+C

CTRL+V

CTRL+C

CTRL+V

Assim nasce o caos.


Arquitetura improvisada

Funciona.

Mas ninguém sabe explicar.


Falta de revisão

Sem Code Review...

os problemas entram em produção.


Falta de treinamento

Programadores repetem erros porque nunca aprenderam alternativas melhores.


A dívida nem sempre é ruim

Essa é uma curiosidade interessante.

Nem toda dívida técnica é um erro.

Imagine um banco.

Existe uma exigência legal.

Prazo:

48 horas.

A equipe decide criar uma solução provisória.

Entrega.

Banco evita multas.

Depois reserva tempo para refatorar.

Excelente decisão.

Foi uma dívida consciente.


Dívida consciente x dívida inconsciente

Dívida consciente

"Sabemos que esse código está temporário."

Existe plano.

Existe prazo.

Existe orçamento.


Dívida inconsciente

"Nunca percebemos que fizemos errado."

Muito mais perigosa.


Os juros da dívida

Todo empréstimo possui juros.

Software também.

Os juros aparecem como:

Mais tempo para manutenção

Uma alteração simples leva dias.


Bugs recorrentes

Conserta um.

Quebra outro.


Medo

"Não mexe."

Frase clássica do legado.


Performance

Cada remendo adiciona processamento.

No mainframe isso significa:

  • CPU

  • MIPS

  • consumo

  • custo


Novos profissionais demoram meses

Porque entender ficou difícil.


Como a dívida cresce?

Imagine um cartão de crédito.

Primeiro mês:

100 reais.

Segundo mês:

Terceiro:

Depois:

Depois:

Software faz exatamente isso.

Cada nova funcionalidade construída sobre código ruim aumenta exponencialmente a complexidade.


O Mainframe sofre muito?

Curiosamente...

sim.

E não.

Mainframes normalmente possuem código extremamente robusto.

Mas muitos sistemas existem há quarenta anos.

Durante quatro décadas...

centenas de programadores passaram por eles.

Cada geração deixou pequenas modificações.

O resultado pode ser:

  • GOTO esquecidos

  • IFs duplicados

  • COPYBOOKS redundantes

  • programas gigantescos

  • tabelas obsoletas

  • JCLs nunca revisados


Um exemplo realista

Imagine um programa COBOL chamado:

PGMFIN01

1988

2.300 linhas.

1992

3.800 linhas.

1998

6.500 linhas.

2007

11.000 linhas.

2016

19.000 linhas.

2026

41.000 linhas.

Ninguém teve coragem de dividir.

Cada manutenção ficou mais cara.

A dívida cresceu silenciosamente.


O Oráculo explica

No universo Matrix, o Oráculo nunca entrega respostas prontas.

Ela oferece entendimento.

Na Engenharia de Software acontece igual.

A dívida técnica raramente aparece em relatórios.

Ela aparece nos sintomas.

Equipe cansada.

Prazo aumentando.

Mudanças simples demorando semanas.

Clientes reclamando.

ABENDs aparecendo após pequenas alterações.

Esses são os sinais.


Como reduzir a dívida?

Refatoração

Melhorar código sem alterar comportamento.

É a principal arma.


Testes automatizados

Permitem mudar com segurança.


Revisão de código

Dois olhos veem mais que um.


Arquitetura

Planejamento evita improvisos.


Documentação viva

Nunca deixe conhecimento apenas na memória.


Pair Programming

Conhecimento compartilhado.


Mentoria

Programadores experientes aceleram iniciantes.


Limpeza contínua

Nunca espere uma grande reescrita.

Melhore um pouco todos os dias.


A Regra do Escoteiro

Robert C. Martin popularizou uma ideia simples:

Deixe o código um pouco melhor do que encontrou.

Imagine milhares de desenvolvedores fazendo isso durante anos.

A dívida diminui naturalmente.


Atenção!

Existe um erro muito comum.

Confundir:

Refatoração

com

Reescrita.

São coisas completamente diferentes.

Refatorar melhora.

Reescrever substitui.

Nem sempre reescrever é inteligente.

Muitos projetos falharam tentando "começar do zero".


O perigo da Grande Reescrita

Na Matrix Reloaded, Neo descobre que destruir tudo não resolve.

Em software acontece igual.

Jogar fora um sistema COBOL de quarenta anos pode significar perder décadas de conhecimento de negócio.

O ideal é evoluir gradualmente.


Ferramentas que ajudam

Hoje existem excelentes ferramentas.

  • IBM ADDI

  • IBM Application Discovery

  • SonarQube

  • IBM COBOL Check

  • IBM Z Open Editor

  • IBM Developer for z/OS

  • GitHub Copilot

  • ChatGPT

  • Claude

  • ZUnit

Elas ajudam a identificar:

  • duplicações

  • complexidade

  • dependências

  • código morto

  • riscos


Sinais de alerta

Você deve investigar dívida técnica quando ouvir frases como:

"Não sabemos por que funciona."

"Não mexe nesse módulo."

"Compila assim mesmo."

"Só o João entende."

"Depois documentamos."

"Tem um GOTO aí... mas deixa."

"É gambiarra temporária."

Seis meses depois...

continua igual.


O papel do Programador COBOL Padawan

Um Padawan costuma pensar:

"Meu trabalho é escrever código."

Na verdade, não.

Seu trabalho é entregar soluções sustentáveis.

Sempre pergunte:

  • Isso poderá ser entendido daqui cinco anos?

  • Outro programador conseguirá manter?

  • Existe teste?

  • Existe documentação?

  • Existe duplicação?

  • Essa regra deveria estar em um COPYBOOK?

  • Esse programa precisa mesmo crescer mais mil linhas?

Essas perguntas evitam que você alimente a Matrix com novos Agentes Smith.


Curiosidades sobre a Dívida Técnica

  • Existem empresas que dedicam 20% do tempo de desenvolvimento apenas para pagar dívida técnica.

  • Grandes bancos mantêm backlogs exclusivos de refatoração, separados das novas funcionalidades.

  • Algumas organizações medem a dívida técnica com ferramentas que estimam quantos dias de trabalho seriam necessários para corrigir todos os problemas encontrados.

  • Em projetos críticos, reduzir dívida técnica pode gerar economia significativa em horas de manutenção, consumo de CPU, incidentes e retrabalho.


Outros "parentes" da Dívida Técnica

Ela costuma caminhar ao lado de diversos conceitos conhecidos:

  • Code Smell – sinais de que algo pode estar mal projetado.

  • Big Ball of Mud – sistema sem arquitetura definida.

  • Spaghetti Code – código confuso e altamente acoplado.

  • God Object – um único módulo faz tudo.

  • Bus Factor – conhecimento concentrado em poucas pessoas.

  • Shotgun Surgery – uma pequena alteração exige modificar dezenas de arquivos.

  • Lava Flow – código antigo que ninguém remove por medo.

Todos esses conceitos frequentemente aparecem juntos.


A Grande Escolha: Pílula Azul ou Pílula Vermelha?

No final de Matrix, Neo percebe que conhecer a verdade traz responsabilidade.

Na Engenharia de Software acontece exatamente o mesmo.

Você pode escolher a pílula azul:

  • copiar código;

  • ignorar testes;

  • adiar documentação;

  • aceitar "gambiarras permanentes";

  • acreditar que "funcionando está bom".

Ou pode escolher a pílula vermelha:

  • compreender a arquitetura;

  • investir em refatoração;

  • escrever código legível;

  • compartilhar conhecimento;

  • documentar regras de negócio;

  • pensar no próximo programador que abrirá aquele programa COBOL daqui a dez anos.

A primeira opção parece mais rápida, mas cobra juros crescentes. A segunda exige disciplina, porém constrói sistemas resilientes que atravessam décadas — exatamente como os grandes sistemas IBM Z que sustentam bancos, seguradoras, governos e companhias aéreas ao redor do mundo.

No universo Bellacosa Mainframe, a maior lição é clara: o inimigo não é o legado; é o legado abandonado. Sistemas COBOL envelhecem muito bem quando recebem manutenção consciente, arquitetura sólida e equipes comprometidas em reduzir continuamente a dívida técnica. Assim como Neo precisou aprender a enxergar além do código verde da Matrix, o Programador COBOL Padawan precisa aprender a enxergar além da próxima entrega e pensar no impacto que cada linha escrita hoje terá no futuro da organização.

Porque, no fim, toda dívida será paga. A única dúvida é quem pagará a conta: você hoje ou toda a equipe amanhã?

domingo, 2 de maio de 2021

Spaghetti Code Rules: Quando um Programador COBOL Descobriu que a Matrix Era Feita de Espaguete e Cada GO TO Criava um Novo Labirinto

 

Bellacosa Mainframe e o spaghetti code rules

☕ Um Café no Bellacosa Mainframe

Spaghetti Code Rules sem Mistérios

Quando um Programador COBOL Descobriu que a Matrix Era Feita de Espaguete e Cada GO TO Criava um Novo Labirinto

"A Matrix não aprisionava apenas pessoas. Ela também aprisionava programas dentro de um emaranhado de caminhos onde ninguém mais sabia como chegar à saída."


Prólogo — O Labirinto Invisível da Matrix

Neo acabara de receber uma missão aparentemente simples.

Corrigir um erro no cálculo dos juros de um financiamento.

Morpheus entregou um único arquivo.

FINANCEIRO01.CBL

Neo sorriu.

— Apenas um programa?

Morpheus respondeu.

— Sim.

Só um.

Neo abriu o código.

A barra de rolagem diminuiu.

Muito.

Muito mesmo.

O programa possuía:

  • 68.000 linhas

  • 2.400 parágrafos

  • centenas de GO TO

  • dezenas de ALTER

  • milhares de variáveis

  • comentários escritos por gerações diferentes

Neo tentou localizar a regra do financiamento.

Cinco minutos depois...

estava em outra rotina.

Dez minutos depois...

entrou em um PERFORM.

Depois um GO TO.

Depois outro.

Depois um PERFORM THRU.

Depois um ALTER.

Depois um EXIT.

Depois voltou.

Depois foi para outro programa.

Depois retornou.

Finalmente perguntou:

— Morpheus...

onde exatamente começa esse cálculo?

Morpheus sorriu.

— Essa pergunta já foi feita por pelo menos cinquenta programadores antes de você.

O Oráculo apareceu.

Olhou para Neo.

E disse:

"Você não entrou apenas em um programa. Entrou em um prato de espaguete."


O que é Spaghetti Code?

Spaghetti Code (Código Espaguete) é um antipadrão de software caracterizado por uma estrutura extremamente confusa, onde o fluxo de execução é difícil de compreender, seguir ou modificar.

O nome vem da aparência do fluxo lógico.

Imagine um prato cheio de espaguete.

Os fios cruzam-se em todas as direções.

Você tenta puxar um.

Leva metade do prato junto.

No software acontece exatamente igual.

Uma alteração aparentemente simples afeta dezenas de outras partes.


A origem do termo

O termo surgiu na década de 1970.

Naquela época muitos sistemas eram escritos utilizando:

  • GOTO

  • Jumps

  • Branches

  • Fluxos não estruturados

Os diagramas de execução pareciam literalmente um prato de macarrão.

Daí nasceu o nome.


Matrix explica melhor que qualquer livro

Imagine que Neo precisa chegar até o Arquiteto.

Mas cada corredor leva para outro corredor.

Cada porta abre outra porta.

Cada elevador muda de direção.

Cada escolha cria um novo caminho.

Após meia hora...

Neo percebe.

A Matrix inteira virou um labirinto.

É exatamente essa sensação que um desenvolvedor experimenta ao abrir um sistema com Spaghetti Code.


O nascimento do espaguete

Curiosamente...

ninguém acorda pensando:

"Hoje vou criar um código horrível."

O Spaghetti Code nasce lentamente.

Primeiro.

Um pequeno ajuste.

Depois.

Outro.

Depois.

Uma exceção.

Depois.

Uma regra temporária.

Depois.

Outra urgência.

Depois.

Uma correção rápida.

Cinco anos depois...

o prato está servido.


Um exemplo COBOL

Imagine este fluxo.

INICIO

↓

VALIDA

↓

CALCULA

↓

GRAVA

↓

FIM

Bonito.

Agora imagine vinte anos depois.

INICIO

↓

VALIDA

↓

GO TO ROTINA-X

↓

PERFORM Y

↓

ALTER Z

↓

GO TO A

↓

PERFORM THRU B

↓

ROTINA-C

↓

GO TO D

↓

VALIDA NOVAMENTE

↓

VOLTA

↓

FIM

Ninguém mais entende.


Como surge?

Existem várias causas.

Crescimento contínuo

Programa pequeno.

Depois médio.

Depois enorme.


Falta de arquitetura

Cada desenvolvedor cria sua própria organização.


Pressão por prazo

"Depois organizamos."

Nunca organizam.


Excesso de GO TO

O clássico dos clássicos.


Código duplicado

Trechos espalhados.


Ausência de revisão

Ninguém verifica consistência.


O COBOL é culpado?

Não.

Essa talvez seja a maior injustiça da história da computação.

COBOL moderno incentiva:

  • PERFORM

  • Modularização

  • COPYBOOK

  • CALL

  • Programas estruturados

  • Classes

  • Métodos (Enterprise COBOL moderno)

O problema nunca foi COBOL.

Foi a forma como algumas pessoas programaram.


Matrix Reloaded

O Arquiteto mostra milhares de versões anteriores da Matrix.

Cada versão acumulava pequenos remendos.

Nenhum parecia perigoso.

Todos juntos criaram enorme complexidade.

Software evolui exatamente assim.


O efeito psicológico

Existe uma armadilha.

Quando modificamos um programa conhecido.

Pensamos:

"Vou colocar só mais um IF."

Depois outro.

Depois outro.

Cada alteração parece pequena.

A soma delas não é.


O Programador COBOL Padawan

Todo Padawan abre um programa antigo e pensa.

"Vou entender rapidamente."

Uma hora depois.

Ainda tenta descobrir onde começou.


O Agente Smith adora Spaghetti Code

Porque sistemas confusos criam:

medo.

Ninguém gosta de alterar.

Cada mudança parece perigosa.

Smith nem precisa atacar.

O próprio código afasta os desenvolvedores.


Um exemplo inspirado na Matrix

Imagine que Neo precisa abrir uma porta.

Mas antes precisa:

abrir outra.

Depois outra.

Depois voltar.

Depois pegar uma chave.

Depois retornar.

Depois abrir outra porta.

É exatamente isso que acontece em muitos fluxos de programas antigos.


Como reconhecer?

Existem sinais claros.

Muitos GO TO

Principal indicador.


Programas enormes

30 mil.

50 mil.

100 mil linhas.


Variáveis sem significado

A1

B2

X99

WK01

WK02

WK03

Regras espalhadas

Mesmo cálculo aparece em cinco lugares.


Dependências circulares

Programa chama outro.

Que chama outro.

Que volta ao primeiro.


Um caso realista

Imagine.

Sistema bancário.

Criado em:

Mais de:

400 modificações.

Nenhuma refatoração.

Resultado.

Cada alteração exige:

  • dois analistas

  • três programadores

  • uma semana de testes

Não porque a regra seja difícil.

Mas porque ninguém sabe o impacto.


Os riscos

Bugs

Alteração pequena.

Impacto gigante.


Performance

Fluxo desnecessário.


CPU

Mais instruções.

Mais custo.


Manutenção

Tempo explode.


Onboarding

Novos profissionais sofrem.


Burnout

Especialistas tornam-se gargalos.


O custo invisível

Imagine.

Alteração.

15 minutos.

Mas entender o programa leva:

dois dias.

Isso é custo.


O impacto no Mainframe

Mainframe processa:

milhões de transações.

Spaghetti Code aumenta:

  • CPU

  • consumo

  • risco

  • testes

  • tempo de homologação

Tudo fica mais caro.


Existe ferramenta para medir?

Sim.

Hoje existem ferramentas excelentes.

  • IBM ADDI

  • IBM Application Discovery

  • SonarQube

  • IBM COBOL Check

  • IBM Developer for z/OS

  • Enterprise Analyzer

Elas calculam:

  • complexidade ciclomática

  • dependências

  • acoplamento

  • fluxo


Como evitar?

Modularização

Divida responsabilidades.


PERFORM

Prefira estruturas claras.


CALL

Separe funcionalidades.


COPYBOOK

Padronize estruturas.


Refatoração contínua

Não espere dez anos.


Comentários úteis

Explique:

por quê.

Não:

o quê.


Testes

Protegem refatorações.


Atenção!

Existe diferença entre:

Programa grande

e

Spaghetti Code.

Alguns sistemas possuem:

200 mil linhas.

Mas excelente organização.

Outros possuem:

2 mil linhas.

Completamente caóticos.

O tamanho não define qualidade.


O papel da arquitetura

Arquitetura cria limites.

Cada módulo possui função.

Sem arquitetura.

Tudo conversa com tudo.


Matrix e os Sentinelas

Os Sentinelas encontram Zion porque seguem caminhos claros.

Imagine se existissem milhões de túneis aleatórios.

Eles demorariam muito mais.

Código também.

Fluxos claros facilitam manutenção.


Curiosidade

A Structured Programming Movement dos anos 70 surgiu justamente para combater o Spaghetti Code.

Nomes como:

  • Edsger Dijkstra

  • Niklaus Wirth

  • Donald Knuth

mudaram completamente a forma de programar.

O famoso artigo:

"Go To Statement Considered Harmful"

transformou a indústria.


O COBOL moderno

Enterprise COBOL oferece recursos para escrever código extremamente limpo.

  • Inline PERFORM

  • EVALUATE

  • Functions

  • Nested Programs

  • OO COBOL

  • User Defined Functions

  • XML

  • JSON

Não existe desculpa para criar espaguete.


Erros clássicos

  • Misturar regras de negócio e acesso a dados.

  • Usar GO TO excessivamente.

  • Duplicar lógica.

  • Não remover código morto.

  • Acrescentar IFs infinitamente.

  • Não modularizar.


Boas práticas

  • Uma responsabilidade por módulo.

  • Nomes significativos.

  • Fluxo previsível.

  • Revisões frequentes.

  • Refatoração incremental.

  • Diagramas atualizados.

  • Documentação viva.


O Ensinamento do Oráculo

O Oráculo entrega um prato de espaguete para Neo.

Ele tenta puxar um fio.

Todo o prato vem junto.

Ela então entrega uma caixa organizada de peças LEGO.

Cada bloco possui uma função.

Ela sorri.

"Software deve parecer LEGO.
Nunca espaguete."


Aplicabilidade

Spaghetti Code aparece em:

  • COBOL

  • Java

  • Python

  • C

  • C++

  • JavaScript

  • PHP

  • Rust

  • Go

  • Assembly

Nenhuma linguagem está imune.


Lições para um Programador COBOL Padawan

Quando você começar sua carreira em um ambiente IBM Z, encontrará programas escritos há décadas. Alguns serão verdadeiras obras-primas da engenharia. Outros parecerão um labirinto digno da Matrix.

A tentação será adicionar "apenas mais um IF" ou "mais um GO TO" para resolver rapidamente um incidente. Resista.

Sempre que possível:

  • extraia responsabilidades para novos módulos;

  • elimine duplicações;

  • substitua fluxos confusos por estruturas claras;

  • escreva nomes compreensíveis;

  • documente regras de negócio;

  • mantenha testes atualizados.

Cada pequena melhoria reduz um pouco o emaranhado do espaguete e facilita o trabalho do próximo desenvolvedor.


Conclusão — Saindo do Prato de Espaguete da Matrix

No final da trilogia Matrix, Neo percebe que compreender a estrutura da Matrix é mais poderoso do que simplesmente reagir a ela.

Na Engenharia de Software, acontece exatamente o mesmo.

O maior problema do Spaghetti Code não é ser feio.

É transformar cada alteração em uma aventura imprevisível.

Em sistemas COBOL responsáveis por processar milhões de transações financeiras, isso significa mais tempo de manutenção, maior risco de incidentes, consumo adicional de CPU, testes mais demorados e equipes receosas de evoluir o software.

No universo Bellacosa Mainframe existe uma máxima que todo Programador COBOL Padawan deveria guardar:

"Cada GO TO desnecessário é mais um corredor dentro da Matrix. Cada módulo bem organizado é uma porta de saída."

O objetivo não é escrever o código mais inteligente.

É escrever o código que outro programador — talvez você mesmo daqui a dez anos — consiga entender sem precisar da ajuda do Oráculo.

Porque o verdadeiro Escolhido não é aquele que cria o maior labirinto.

É aquele que sabe construir o caminho mais simples até a solução.

sexta-feira, 5 de março de 2021

Lasagna Code Rules: Quando um Programador COBOL Descobriu que a Matrix Tinha Tantas Camadas que Nem o Arquiteto Sabia Mais Onde Estava o Problema

 

Bellacosa Mainframe e a lasagna code rules

☕ Um Café no Bellacosa Mainframe

Lasagna Code Rules sem Mistérios

Quando um Programador COBOL Descobriu que a Matrix Tinha Tantas Camadas que Nem o Arquiteto Sabia Mais Onde Estava o Problema

"Às vezes o problema não é falta de arquitetura. É arquitetura demais."


Prólogo — Quantas Matrix Existem Dentro da Matrix?

Neo finalmente conseguiu derrotar vários Agentes Smith.

A missão parecia simples.

Um cliente do banco não conseguia visualizar seu saldo.

Morpheus entregou a tarefa.

— Neo, descubra por que o saldo não aparece.

Neo sorriu.

— Deve ser um problema no programa COBOL.

Morpheus respondeu.

— Gostaria que fosse.

Neo iniciou a investigação.

Primeira camada.

Portal Web.

Segunda camada.

API Gateway.

Terceira camada.

Microserviço.

Quarta camada.

Camada de Segurança.

Quinta camada.

Camada de Auditoria.

Sexta camada.

Camada de Observabilidade.

Sétima camada.

Orquestrador.

Oitava camada.

Middleware.

Nona camada.

MQ.

Décima camada.

z/OS Connect.

Décima primeira camada.

CICS.

Décima segunda camada.

Programa COBOL.

Décima terceira camada.

COPYBOOK.

Décima quarta camada.

Db2.

Neo respirou fundo.

Perguntou:

— O saldo está errado onde?

Morpheus respondeu.

— Ainda não sabemos.

Você só chegou na metade.

O Oráculo apareceu.

Sorriu.

— Bem-vindo ao Lasagna Code.


O que é Lasagna Code?

Lasagna Code (Código Lasanha) é um antipadrão onde um sistema possui tantas camadas de abstração, componentes intermediários e níveis de encapsulamento que compreender o fluxo completo torna-se extremamente difícil.

Enquanto o Spaghetti Code representa um fluxo caótico e desorganizado...

o Lasagna Code representa um fluxo extremamente organizado...

mas exageradamente profundo.

Cada camada parece correta.

O problema é que existem camadas demais.


A origem do termo

O termo começou a aparecer na década de 1990.

Ele surgiu como contraponto ao famoso Spaghetti Code.

A ideia era simples.

Se o espaguete é um emaranhado horizontal...

a lasanha cresce verticalmente.

Camada.

Sobre camada.

Sobre camada.

Até ninguém mais enxergar a base.


Matrix explica perfeitamente

Durante toda a trilogia descobrimos algo surpreendente.

Existe:

A Matrix.

Dentro dela existem programas.

Dentro dos programas existem agentes.

Dentro dos agentes existem regras.

Depois descobrimos:

O Arquiteto.

O Oráculo.

O Merovíngio.

O Chaveiro.

O Código Fonte.

Cada descoberta revela outra camada.

O software moderno também.


O nascimento da Lasanha

Curiosamente...

Lasagna Code nasce por boas intenções.

Alguém diz:

"Vamos separar responsabilidades."

Excelente ideia.

Depois.

"Vamos criar outra camada."

Boa ideia.

Depois.

"Mais uma para desacoplar."

Também boa.

Depois.

"Outra para facilitar manutenção."

Ainda parece correto.

Quando percebem...

existem quinze camadas para executar um único SELECT.


Um exemplo simples

Objetivo.

Consultar saldo.

Fluxo ideal.

Tela

↓

Programa COBOL

↓

Db2

Agora imagine uma arquitetura exagerada.

Tela

↓

Frontend

↓

BFF

↓

API Gateway

↓

REST

↓

Load Balancer

↓

Service Mesh

↓

Microserviço A

↓

Microserviço B

↓

Serviço de Autenticação

↓

Serviço de Logging

↓

Serviço de Auditoria

↓

MQ

↓

z/OS Connect

↓

CICS

↓

COBOL

↓

Db2

Todas as camadas possuem justificativa.

Mas será que todas são realmente necessárias?


O Programador COBOL Padawan

Imagine.

Você recebe um chamado.

"Corrigir o cálculo do limite."

Você abre o COBOL.

Nada errado.

Depois descobre.

O problema estava:

na serialização JSON.

Não.

Na verdade.

Na camada REST.

Também não.

Era um timeout do Gateway.

Horas depois.

Descobre.

Era uma configuração do Balanceador.


O efeito psicológico

Existe um comportamento curioso.

Arquitetos gostam de criar abstrações.

E abstrações realmente resolvem muitos problemas.

O perigo aparece quando começamos a abstrair...

a própria abstração.


Matrix Reloaded

Neo conversa com o Arquiteto.

O Arquiteto explica.

Existe:

uma Matrix.

Mas também:

uma Matrix para controlar a Matrix.

Depois mecanismos para controlar quem controla.

Arquitetura excessiva segue exatamente essa lógica.


O Arquiteto da Matrix

Imagine um Arquiteto de Software dizendo:

"Vamos criar uma camada para desacoplar outra camada que desacopla uma terceira camada responsável por abstrair a quarta camada."

Pode parecer sofisticado.

Mas talvez ninguém consiga manter isso daqui cinco anos.


Como reconhecer Lasagna Code?

Faça uma pergunta simples.

Quantas camadas um dado percorre?

Se uma consulta simples passa por quinze componentes...

talvez exista excesso.


O exemplo COBOL

Cliente consulta saldo.

Fluxo.

HTML

JavaScript

React

REST

OAuth

Gateway

NGINX

MQ

JSON

CICS

COBOL

COPYBOOK

SQL

Db2

Cada etapa adiciona:

latência.

Complexidade.

Risco.

Logs.

Monitoramento.

Testes.


O Agente Smith adora Lasanha

Porque cada camada cria mais lugares para esconder bugs.

Agora um erro pode estar:

na API.

No Gateway.

No MQ.

No CICS.

No COBOL.

No Db2.

Ou simplesmente na conversão UTF-8.


Os sintomas

Muitas dependências

Tudo depende de tudo.


Debug difícil

Breakpoint atravessa quinze tecnologias.


Logs espalhados

Cada camada gera um log diferente.


Tempo de resposta aumenta

Cada salto possui custo.


Testes demorados

Mais componentes.

Mais cenários.


O Mainframe sofre?

Curiosamente.

Às vezes.

Hoje um programa COBOL pode conversar com:

REST.

JSON.

Kafka.

MQ.

Cloud.

Mobile.

IA.

Tudo isso é excelente.

Desde que exista necessidade.


Um exemplo inspirado na Matrix

Neo pergunta:

"Quem autorizou esta transação?"

Resposta.

"Precisamos consultar sete serviços."

Neo responde.

"Mas ontem eram dois."

Morpheus suspira.

"Ontem havia menos camadas."


Como nasce?

Primeiro.

Uma camada.

Depois.

Outra.

Depois.

Um Framework.

Depois.

Outro Framework.

Depois.

Outro Middleware.

Depois.

Outro Proxy.

Depois.

Outro Adaptador.

Cada um resolve um pequeno problema.

Todos juntos criam um problema maior.


Existe Lasagna boa?

Sim.

Toda arquitetura moderna possui camadas.

MVC.

Hexagonal.

Clean Architecture.

DDD.

Onion.

Todas utilizam camadas.

O segredo está no equilíbrio.

Camadas devem:

reduzir complexidade.

Nunca aumentá-la.


A diferença

Arquitetura saudável.

Cada camada possui responsabilidade clara.

Arquitetura Lasanha.

Cada camada apenas encaminha chamadas.

Sem agregar valor.


O custo invisível

Imagine.

Uma alteração simples.

Antes.

Um programa.

Hoje.

Treze repositórios.

Quatro equipes.

Cinco pipelines.

Duas aprovações.

O mesmo requisito.


O impacto financeiro

Cada camada possui:

infraestrutura.

monitoramento.

backup.

segurança.

deploy.

licenciamento.

Suporte.

Camadas custam dinheiro.


Atenção!

Nem toda arquitetura complexa é ruim.

Bancos precisam:

segurança.

auditoria.

resiliência.

alta disponibilidade.

Mas existe diferença entre:

complexidade necessária

e

complexidade acidental.


O papel do COBOL

COBOL costuma ficar exatamente na última camada.

Recebe dados.

Executa regras.

Grava Db2.

Ele normalmente não cria a lasanha.

Mas participa dela.


Ferramentas ajudam

Hoje podemos visualizar dependências utilizando:

  • IBM ADDI

  • Application Discovery

  • Dynatrace

  • Instana

  • OpenTelemetry

  • Jaeger

  • Zipkin

Elas mostram exatamente quantas camadas existem.


Os riscos

Latência

Cada camada adiciona milissegundos.


Custos

Mais servidores.


Debug

Muito mais difícil.


Segurança

Mais pontos de ataque.


Disponibilidade

Mais componentes.

Maior chance de falhas.


Curiosidade

Grandes empresas descobriram que alguns microsserviços estavam fazendo apenas:

Receber.

Chamar outro.

Retornar.

Sem nenhuma lógica.

Esses serviços foram eliminados.

A arquitetura ficou:

mais simples.

Mais rápida.

Mais barata.


O ensinamento do Oráculo

O Oráculo entrega uma lasanha para Neo.

Pergunta.

"O que você vê?"

Neo responde.

"Camadas."

Ela sorri.

"E se eu colocar cinquenta camadas?"

Neo pensa.

"Não conseguirei comer."

Ela responde.

"Nem manter."


Como evitar?

Cada camada precisa justificar sua existência


Remova abstrações inúteis


Faça diagramas


Meça latência


Revise arquitetura regularmente


Evite Framework por moda


Questione

"Esta camada agrega valor?"


Erros clássicos

  • Criar adaptadores desnecessários.

  • Framework para resolver problema inexistente.

  • Microserviços extremamente pequenos.

  • Excesso de interfaces.

  • Objetos que apenas chamam outros objetos.

  • Camadas vazias.


Aplicabilidade

Lasagna Code aparece em:

  • Java

  • .NET

  • COBOL

  • Cloud

  • Kubernetes

  • APIs

  • Microsserviços

  • Mobile

  • Sistemas Bancários

  • DevOps


Lições para um Programador COBOL Padawan

Ao ingressar em um ambiente corporativo, especialmente no universo IBM Z, você perceberá que sistemas modernos dificilmente são compostos apenas por COBOL e Db2. Eles convivem com APIs REST, gateways, filas MQ, microsserviços, autenticação federada, monitoramento distribuído e plataformas em nuvem.

Essas camadas são importantes quando resolvem problemas reais, como segurança, escalabilidade, desacoplamento ou auditoria. Entretanto, o bom engenheiro aprende a perguntar constantemente:

  • Esta camada tem uma responsabilidade clara?

  • Ela agrega valor ao negócio?

  • Poderia ser removida sem perda funcional?

  • Está simplificando ou apenas escondendo a complexidade?

Essa capacidade de questionar evita que arquiteturas elegantes no papel se tornem impossíveis de manter na prática.


Conclusão — Nem Toda Matrix Precisa de Outra Matrix

No final de Matrix Reloaded, Neo descobre que a realidade era muito mais profunda do que imaginava. Cada resposta revelava uma nova camada. Porém, diferente do filme, na Engenharia de Software nós podemos escolher quando criar uma nova camada — e quando parar.

Uma arquitetura em camadas é uma das maiores conquistas da engenharia moderna. Ela organiza responsabilidades, facilita testes e melhora a manutenção. Mas, quando utilizada sem critério, transforma-se em Lasagna Code, onde cada solicitação percorre um caminho tão longo que localizar um simples defeito torna-se uma expedição.

Para um Programador COBOL, essa lição é especialmente importante. O IBM Z continuará sendo o coração de muitos sistemas críticos, mas esse coração não precisa ficar escondido atrás de dezenas de camadas desnecessárias. Arquitetura existe para reduzir a complexidade percebida, não para multiplicá-la.

No universo Bellacosa Mainframe existe uma regra digna do Arquiteto da Matrix:

"Uma nova camada só merece existir quando elimina mais complexidade do que cria."

Se ela apenas empilha software sobre software, talvez você não esteja construindo uma arquitetura.

Talvez esteja apenas preparando uma lasanha tão alta que ninguém mais conseguirá encontrar o prato.

segunda-feira, 4 de janeiro de 2021

Big Ball of Mud Rules: Quando um Programador COBOL Descobriu que a Matrix Não Era um Sistema... Era uma Enorme Bola de Lama Digital

 

Bellacosa Mainframe e a big ball of mud rules

☕ Um Café no Bellacosa Mainframe

Big Ball of Mud Rules sem Mistérios

Quando um Programador COBOL Descobriu que a Matrix Não Era um Sistema... Era uma Enorme Bola de Lama Digital

"A Matrix não caiu porque era antiga. Ela quase caiu porque ninguém mais conseguia explicar onde começava, onde terminava e por que tudo dependia de tudo."


Prólogo — A Cidade Perdida Dentro da Matrix

Neo recebe sua missão mais difícil.

Não é derrotar o Agente Smith.

Não é salvar Zion.

Não é conversar com o Arquiteto.

Sua missão é muito pior.

Documentar um sistema legado.

Morpheus entrega um HD antigo.

Na etiqueta existe apenas uma inscrição.

COREBANK
1986

Neo pergunta:

— Quantos programas existem?

Morpheus responde:

— Não sabemos.

— Quantos bancos de dados?

— Também não.

— Existe documentação?

Morpheus sorri.

— Existia...

em 1994.

Neo conecta o sistema.

Começa a navegar.

Programa chama programa.

Programa chama JCL.

JCL chama PROC.

PROC chama SORT.

SORT chama outro programa.

CICS chama MQ.

MQ chama outro CICS.

Db2 chama Stored Procedure.

Stored Procedure chama Java.

Java chama REST.

REST chama Python.

Python grava novamente no Db2.

Neo pergunta:

— Onde começa a transação?

Morpheus responde:

— Essa pergunta já destruiu a sanidade de muitos arquitetos.

O Oráculo aproxima-se.

Olha para Neo.

E diz:

"Você não entrou em um sistema. Você entrou em uma Big Ball of Mud."


O que é Big Ball of Mud?

Big Ball of Mud (Grande Bola de Lama) é um antipadrão arquitetural que descreve um sistema gigantesco, complexo e sem uma arquitetura clara.

Ao contrário do Spaghetti Code, que normalmente se refere ao código interno de um programa...

A Big Ball of Mud descreve:

o sistema inteiro.

Ela representa aplicações que cresceram durante anos ou décadas sem planejamento arquitetural consistente.

Tudo funciona.

Mas ninguém sabe exatamente por quê.


A origem do termo

O conceito foi formalizado em 1997 por:

  • Brian Foote

  • Joseph Yoder

No famoso artigo:

Big Ball of Mud

Eles observaram que muitos sistemas corporativos bem-sucedidos não possuíam arquitetura elegante.

Mesmo assim...

continuavam funcionando.

Esses sistemas cresciam organicamente.

Como uma bola de lama rolando morro abaixo.

Cada alteração adicionava mais material.

Sem nunca reorganizar a estrutura.


Matrix explica perfeitamente

Imagine a Matrix.

Milhões de linhas de código.

Milhares de programas.

Centenas de agentes.

Regras antigas.

Novas regras.

Exceções.

Correções.

Remendos.

Durante décadas.

Agora imagine.

Ninguém mais possui o diagrama original.

Essa é exatamente uma Big Ball of Mud.


O nascimento da Bola de Lama

Curiosamente...

ela raramente nasce por incompetência.

Ela nasce por sucesso.

O sistema funciona.

Recebe novas funcionalidades.

Mais clientes.

Mais integrações.

Mais regras.

Mais urgências.

Mais exceções.

Mais mudanças.

Depois de trinta anos.

Virou um universo próprio.


O COBOL conhece bem isso

Muitos sistemas bancários começaram assim.

Programa pequeno.

Novo módulo.

Internet Banking.

Mobile.

APIs.

Cloud.

Open Finance.

IA Generativa.

Tudo conectado.

Sem jamais parar para reorganizar completamente.


Um exemplo simples

Sistema original.

Tela

↓

COBOL

↓

Db2

Quarenta anos depois.

Internet

↓

Portal

↓

Gateway

↓

API

↓

MQ

↓

Java

↓

REST

↓

CICS

↓

COBOL

↓

Db2

↓

ETL

↓

Data Lake

↓

Kafka

↓

Analytics

↓

IA

Nenhuma etapa é necessariamente ruim.

O problema é:

ninguém possui a visão completa.


O Programador COBOL Padawan

Imagine.

Primeiro dia na empresa.

Seu líder diz.

"Você ficará responsável pelo CORE."

Você pergunta.

"Existe documentação?"

Resposta.

"Boa sorte."


Como reconhecer?

Existem sinais muito claros.

Tudo depende de tudo

Alterar um campo quebra cinco sistemas.


Não existe dono

Todos mexem.

Ninguém conhece.


Documentação desatualizada

Fluxos reais são diferentes.


Regras duplicadas

Mesma regra aparece vinte vezes.


Arquitetura desconhecida

Cada desenvolvedor explica de um jeito.


Matrix Reloaded

Neo conversa com o Arquiteto.

O Arquiteto mostra diversas versões anteriores da Matrix.

Cada uma herdou partes da anterior.

Nenhuma foi totalmente reconstruída.

Software corporativo evolui exatamente assim.


O efeito psicológico

Existe um fenômeno interessante.

Quanto maior o sistema...

menor a coragem para reorganizá-lo.

Então cada desenvolvedor pensa:

"Vou alterar só este pedacinho."

Todos fazem isso.

Durante vinte anos.

A lama cresce.


O Agente Smith adora isso

Porque sistemas gigantescos produzem:

medo.

Especialistas tornam-se indispensáveis.

Mudanças ficam lentas.

Arquitetura desaparece.

Smith não precisa atacar.

O próprio sistema torna-se resistente à evolução.


Um exemplo COBOL

Imagine.

Existem.

4.200 programas.

3.800 COPYBOOKs.

1.600 JCLs.

780 PROCs.

320 CICS.

410 tabelas Db2.

Pergunta.

Existe mapa de dependências?

Não.

Bem-vindo.


Como nasce?

Etapa 1.

Sistema simples.

Etapa 2.

Urgências.

Etapa 3.

Novos clientes.

Etapa 4.

Integrações.

Etapa 5.

Exceções.

Etapa 6.

Mais remendos.

Etapa 7.

Ninguém mais entende.


O custo invisível

Nova funcionalidade.

Implementação:

2 dias.

Descobrir impacto:

3 semanas.


O impacto financeiro

Mais testes.

Mais homologação.

Mais reuniões.

Mais especialistas.

Mais CPU.

Mais incidentes.

Tudo fica caro.


Atenção!

Big Ball of Mud não significa:

Sistema ruim.

Muitos dos maiores bancos do mundo operam sistemas extremamente antigos.

Que continuam confiáveis.

O problema não é idade.

É ausência de organização.


Curiosidade

Alguns sistemas COBOL possuem mais de:

50 milhões de linhas de código.

Mesmo assim.

Continuam processando bilhões de dólares diariamente.

Isso mostra que:

idade

não é defeito.


A diferença

Sistema Legado

Pode possuir excelente arquitetura.


Big Ball of Mud

Arquitetura praticamente desapareceu.


Como evitar?

Documentação contínua

Nunca espere o projeto acabar.


Diagramas

Fluxos atualizados.


Refatoração

Pequenas melhorias constantes.


Modularização

Divida responsabilidades.


APIs

Reduza acoplamento.


Testes

Protegem mudanças.


Descoberta arquitetural

Ferramentas ajudam.


Ferramentas modernas

IBM possui soluções excelentes.

  • IBM ADDI

  • Application Discovery

  • IBM Developer for z/OS

  • IBM COBOL Check

  • Z Open Editor

  • Instana

  • OpenTelemetry

Elas conseguem descobrir dependências automaticamente.


O papel da IA

Hoje IA ajuda muito.

Ela pode:

explicar programas.

Criar diagramas.

Resumir módulos.

Encontrar dependências.

Mas existe um limite.

Se o sistema inteiro virou lama...

nem a IA faz milagres.


Matrix e Zion

Imagine Zion construída durante cem anos.

Sem planta.

Sem mapas.

Cada engenheiro criou túneis.

Cada geração abriu novos corredores.

Depois de décadas.

Ninguém sabe onde passam todos os cabos.

É exatamente isso.


Os riscos

Mudanças lentas


Bugs inesperados


Alto acoplamento


Baixa produtividade


Custos elevados


Dependência de especialistas


Dificuldade para integrar IA


Big Ball of Mud e DevOps

DevOps acelera deploy.

Mas não resolve arquitetura ruim.

Aliás.

Pode acelerar problemas.


O papel do Arquiteto

Arquitetos modernos fazem uma pergunta simples.

"Este sistema ainda possui forma?"

Se ninguém conseguir responder.

Talvez a bola de lama já exista.


Um exemplo inspirado na Matrix

Neo pergunta.

"Qual programa calcula o saldo?"

Resposta.

"Depende."

"Depende do quê?"

"Da agência."

"E se for PIX?"

"Outro programa."

"E TED?"

"Outro."

"DOC?"

"Também."

"Open Finance?"

"Mais três."

"Cartão?"

"Depende."

Neo suspira.


Existe cura?

Sim.

Mas ela raramente acontece através de uma grande reescrita.

O caminho normalmente é:

Mapear.

Entender.

Documentar.

Refatorar.

Modularizar.

Modernizar.

Gradualmente.


Erros clássicos

  • Reescrever tudo.

  • Não documentar.

  • Misturar responsabilidades.

  • Criar dependências ocultas.

  • Duplicar regras.

  • Ignorar arquitetura.


Aplicabilidade

Big Ball of Mud aparece em:

  • COBOL

  • Java

  • ERP

  • Sistemas Bancários

  • Telecom

  • Governo

  • Seguradoras

  • Cloud

  • Microsserviços

  • ERPs gigantes


Curiosidades

O artigo original afirma algo curioso.

Muitas Big Balls of Mud foram extremamente lucrativas.

Porque resolviam problemas reais.

O problema aparecia décadas depois.

Quando evoluir passou a ser mais caro que criar.


O ensinamento do Oráculo

O Oráculo entrega uma pequena esfera de barro para Neo.

Ela pergunta.

"O que você vê?"

Neo responde.

"Lama."

Ela amassa.

A esfera cresce.

Depois cresce novamente.

Depois outra vez.

Ela sorri.

"Toda exceção adiciona um pouco mais."


Lições para um Programador COBOL Padawan

Você provavelmente trabalhará em sistemas que nasceram antes mesmo da Internet comercial. Não tenha preconceito com isso. Muitos desses sistemas sustentam operações críticas de bancos, seguradoras e governos com níveis de disponibilidade impressionantes.

Ao mesmo tempo, não aceite a desorganização como algo inevitável. Sempre que possível:

  • documente o que descobrir;

  • desenhe fluxos;

  • elimine duplicações;

  • isole responsabilidades;

  • proponha APIs claras;

  • registre decisões arquiteturais;

  • compartilhe conhecimento com a equipe.

Cada pequena melhoria reduz um pouco da lama acumulada ao longo dos anos e prepara o sistema para as próximas décadas.


Conclusão — A Matrix Não Era um Monólito... Era uma Bola de Lama Viva

No final da saga Matrix, Neo entende que o sistema nunca foi estático. Ele evoluiu continuamente, acumulando regras, exceções e adaptações para sobreviver.

Os grandes sistemas corporativos fazem exatamente o mesmo.

Uma Big Ball of Mud não surge porque alguém decidiu construir um software ruim. Ela surge porque o sistema foi útil durante muito tempo, recebeu centenas de melhorias, integrou novas tecnologias e continuou entregando valor ao negócio sem uma renovação arquitetural proporcional.

Para um Programador COBOL, essa é uma lição fundamental. O legado não deve ser visto como inimigo, mas como um organismo vivo que precisa de cuidados constantes. Modernizar não significa destruir; significa compreender, documentar, simplificar e evoluir.

No universo Bellacosa Mainframe existe uma máxima digna do Arquiteto da Matrix:

"Todo sistema começa como uma ideia elegante. O que determina seu futuro é a disciplina com que ele evolui."

Porque a verdadeira missão do Programador COBOL Padawan não é apenas manter a Matrix funcionando.

É impedir que ela se transforme em uma bola de lama tão grande que ninguém mais consiga encontrar a saída.

sexta-feira, 4 de dezembro de 2020

Lava Flow Rules: Quando um Programador COBOL Descobriu que a Matrix Estava Coberta por Fluxos de Lava Digital que Ninguém Tinha Coragem de Remover

 

Bellacosa Mainframe e a lava flow rules

☕ Um Café no Bellacosa Mainframe

Lava Flow Rules sem Mistérios

Quando um Programador COBOL Descobriu que a Matrix Estava Coberta por Fluxos de Lava Digital que Ninguém Tinha Coragem de Remover

"O maior perigo dos sistemas legados nem sempre é o código que executa. Muitas vezes é o código que ninguém ousa apagar."


Prólogo — A Sala Proibida da Matrix

Depois de inúmeras batalhas contra o Agente Smith, Neo acreditava conhecer praticamente toda a Matrix.

Foi então que o Arquiteto abriu uma porta que nunca havia sido mostrada.

Atrás dela existia um gigantesco datacenter.

Milhares de programas.

Milhões de linhas de código.

No centro da sala havia uma placa metálica.

NÃO MODIFICAR

Neo perguntou:

— O que existe aí?

O Arquiteto respondeu:

— Não sabemos exatamente.

Neo estranhou.

— Como assim?

— Esse código foi escrito antes mesmo da sexta versão da Matrix.

— Ele ainda é usado?

O Arquiteto permaneceu em silêncio.

O Oráculo apareceu.

Olhou para Neo.

Depois para o enorme programa.

Sorriu.

— Talvez sim.

Talvez não.

Neo perguntou:

— Então por que ninguém remove?

O Oráculo respondeu:

"Porque ninguém quer descobrir a resposta em plena produção."

Bem-vindo ao Lava Flow.


O que é Lava Flow?

Lava Flow é um antipadrão de software onde partes antigas do sistema permanecem indefinidamente porque ninguém sabe se ainda são utilizadas.

São blocos de código que:

  • ninguém compreende completamente;

  • aparentemente não possuem função;

  • não aparecem na documentação;

  • mas continuam existindo por medo de removê-los.

Eles se tornam verdadeiros fósseis digitais.


A origem do nome

O termo surgiu no livro clássico AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis, publicado em 1998 por William J. Brown, Raphael Malveau, Hays McCormick III e Thomas Mowbray.

A metáfora é brilhante.

Quando um vulcão entra em erupção, a lava escorre livremente.

Depois de esfriar...

ela endurece.

Com o tempo ninguém consegue mais movê-la.

Mesmo que atrapalhe a construção de estradas ou cidades.

No software acontece exatamente isso.

Uma decisão antiga endurece.

Ninguém mais consegue removê-la.


Matrix explica perfeitamente

Imagine que cada versão da Matrix deixa pequenos trechos de código esquecidos.

Programas antigos.

Rotinas obsoletas.

Protocolos desativados.

Funções nunca mais chamadas.

Mas ninguém ousa apagar.

Porque talvez...

alguma parte escondida ainda dependa delas.


Como nasce um Lava Flow?

Quase sempre começa assim.

Um projeto urgente.

Uma solução temporária.

O desenvolvedor comenta:

"Depois limpamos."

Mas o projeto termina.

A equipe muda.

O conhecimento desaparece.

O código continua.


O COBOL conhece muito bem esse fenômeno

Imagine um programa escrito em 1989.

Em determinado momento existia uma regra para calcular uma antiga taxa bancária.

Essa taxa deixou de existir em 1998.

Mas a rotina continua lá.

Em 2004 alguém perguntou:

— Podemos apagar?

Resposta:

— Melhor não...

Vai que algum lote ainda usa.

Em 2012 outra pessoa perguntou.

Mesma resposta.

Em 2026...

A rotina continua.


Um exemplo clássico

Imagine um trecho como este.

IF WS-TIPO = "X"
    PERFORM CALCULA-TAXA-ESPECIAL
END-IF

Pergunta.

Existe algum cliente com tipo X?

Ninguém sabe.

A consulta nunca foi feita.

Então o código permanece.


Outro exemplo COBOL

Você encontra:

PERFORM ROTINA-LEGADA.

Procura quem chama essa rotina.

Descobre que:

ninguém.

Mas ninguém remove.

Porque talvez exista:

  • um JCL antigo;

  • um programa batch esquecido;

  • uma PROC histórica;

  • um processo anual.


Matrix Reloaded

Lembra dos programas exilados?

Merovíngio abriga programas antigos que deveriam ter sido removidos.

Eles continuam existindo porque encontraram maneiras de sobreviver.

Esses personagens representam perfeitamente o conceito de Lava Flow.

São códigos que perderam sua função original, mas continuam ocupando espaço na Matrix.


O efeito psicológico

Existe uma frase muito conhecida em equipes de manutenção.

"Se está funcionando, não mexa."

Ela protege a estabilidade.

Mas também pode proteger código morto.

O medo da mudança faz com que partes inteiras do sistema permaneçam congeladas por décadas.


O Programador COBOL Padawan

Você abre um programa.

Encontra:

IF WS-FLAG-1987 = "S"

Pergunta ao analista mais experiente.

— O que significa?

Resposta.

— Acho que tem relação com um produto antigo.

"Acho."

Essa palavra deveria acender um alerta.


O Agente Smith adora Lava Flow

Porque código morto aumenta:

  • complexidade;

  • tempo de leitura;

  • dificuldade de testes;

  • risco de manutenção.

Quanto mais difícil compreender o sistema, mais fácil ele se torna de dominar.


Um exemplo inspirado na Matrix

Neo encontra uma porta.

Ela não leva a lugar nenhum.

Pergunta ao Chaveiro.

— Posso removê-la?

O Chaveiro responde.

— Talvez.

Neo insiste.

— Alguém usa?

O Chaveiro sorri.

— Faz muito tempo que ninguém passa por ela...

Mas ninguém quer ser o primeiro a descobrir.


Como reconhecer Lava Flow?

Alguns sinais são clássicos.

Comentários antigos

TEMPORÁRIO
REMOVER DEPOIS

E o comentário tem quinze anos.


Código nunca executado

Cobertura de testes mostra zero chamadas.


Variáveis sem uso

Declaradas.

Nunca lidas.


COPYBOOKs esquecidos

Presentes.

Jamais referenciados.


JCLs históricos

Executados pela última vez em 2014.


O custo invisível

Cada novo desenvolvedor precisa entender:

o código ativo

o código morto.

Mesmo que metade nunca execute.


O impacto no Mainframe

Mainframes corporativos costumam preservar compatibilidade por décadas.

Isso é excelente para o negócio.

Mas também significa que:

  • programas antigos sobrevivem;

  • interfaces antigas permanecem;

  • layouts históricos continuam disponíveis.

Nem tudo pode ser removido imediatamente.


Atenção!

Lava Flow não significa simplesmente "código antigo".

Código antigo pode ser extremamente importante.

O problema é:

código antigo

sem propósito conhecido.


A diferença

Legado

Ainda possui função.


Lava Flow

Ninguém sabe se possui função.


Curiosidade

Diversos sistemas bancários ainda mantêm rotinas para formatos de arquivos que não são utilizados há muitos anos, apenas porque existe a possibilidade de algum cliente institucional ainda depender deles em um processamento específico.


Ferramentas ajudam

Hoje é possível descobrir muito mais do que antigamente.

Ferramentas como:

  • IBM Application Discovery and Delivery Intelligence (ADDI);

  • IBM Developer for z/OS;

  • IBM COBOL Check;

  • SonarQube;

  • Enterprise Analyzer;

permitem identificar:

  • programas sem referências;

  • COPYBOOKs não utilizados;

  • dependências reais;

  • fluxo de chamadas;

  • cobertura de execução.

Elas reduzem significativamente o medo de remover código.


Como evitar?

Descoberta arquitetural

Conheça dependências reais.


Testes automatizados

Eles fornecem confiança.


Monitoramento

Descubra quem realmente utiliza cada componente.


Refatoração contínua

Pequenas limpezas são mais seguras do que grandes reescritas.


Documentação viva

Explique por que algo permanece.


Revisões periódicas

Reserve tempo para eliminar o que perdeu utilidade.


O perigo da limpeza precipitada

O extremo oposto também é perigoso.

Imagine remover uma rotina porque "parece inútil".

Na madrugada do último dia útil do ano...

ela é executada pelo fechamento contábil.

Resultado:

ABEND.

Incidente crítico.

Por isso remover exige evidências.

Nunca intuição.


Matrix e os Programas Exilados

O Merovíngio colecionava programas antigos.

Eles não tinham mais função oficial.

Mesmo assim continuavam vivos.

Esses personagens representam exatamente os componentes esquecidos que permanecem escondidos em sistemas corporativos.

Nem todos causam problemas.

Mas todos aumentam a complexidade.


O papel da IA

Ferramentas baseadas em IA podem:

  • localizar código aparentemente morto;

  • resumir módulos antigos;

  • mapear dependências;

  • identificar duplicações;

  • sugerir candidatos à remoção.

Entretanto, a decisão final continua sendo humana.

Especialmente em ambientes críticos.


Os riscos

Complexidade crescente

Mais código para entender.


Testes maiores

Mais cenários.


Custos

Mais manutenção.


Bugs

Mudanças evitadas por medo.


Segurança

Bibliotecas antigas podem permanecer vulneráveis.


Conhecimento perdido

Ninguém sabe mais o propósito original.


Erros clássicos

  • Nunca revisar código legado.

  • Confundir estabilidade com imobilidade.

  • Manter funcionalidades desativadas indefinidamente.

  • Não registrar decisões arquiteturais.

  • Ignorar ferramentas de análise de dependência.


Boas práticas

  • Mantenha inventário de componentes.

  • Monitore utilização real.

  • Elimine código comprovadamente morto.

  • Escreva testes antes de remover.

  • Documente exceções de negócio.

  • Faça limpezas graduais.


Aplicabilidade

Lava Flow aparece em praticamente qualquer tecnologia:

  • COBOL;

  • PL/I;

  • Java;

  • C#;

  • Python;

  • C++;

  • APIs;

  • microsserviços;

  • aplicações em nuvem;

  • sistemas embarcados.

Quanto maior a vida útil do software, maior a chance desse antipadrão surgir.


O ensinamento do Oráculo

O Oráculo leva Neo até um antigo rio de lava endurecida.

Ela pergunta:

— O que você vê?

Neo responde.

— Pedra.

Ela toca a superfície.

Debaixo dela ainda existe calor.

Então diz:

"No software acontece igual. O código pode parecer morto, mas ainda pode sustentar parte da montanha."

Antes de remover.

Investigue.


Lições para um Programador COBOL Padawan

Ao iniciar sua carreira no universo IBM Z, você encontrará programas com décadas de existência. Alguns conterão comentários escritos por pessoas que já se aposentaram. Outros farão referência a produtos, moedas, legislações e tecnologias que nem existem mais.

Não assuma que tudo isso é lixo.

Também não assuma que tudo é indispensável.

Seu papel é agir como um arqueólogo digital:

  • entender o contexto;

  • mapear dependências;

  • conversar com especialistas;

  • validar com testes;

  • registrar descobertas;

  • remover apenas aquilo cuja inutilidade esteja comprovada.

Essa disciplina preserva a estabilidade do negócio e, ao mesmo tempo, impede que a lama endurecida continue crescendo indefinidamente.


Conclusão — Nem Toda Rocha Deve Permanecer Para Sempre

Na Matrix, programas antigos podiam sobreviver escondidos entre versões sucessivas da simulação. Alguns ainda tinham propósito. Outros apenas ocupavam espaço.

Nos sistemas corporativos acontece exatamente o mesmo.

O Lava Flow representa decisões antigas que endureceram com o tempo. Elas deixaram de ser questionadas porque questioná-las parece perigoso.

Mas engenharia madura não significa apagar tudo.

Significa compreender antes de agir.

Para um Programador COBOL, essa é uma das maiores demonstrações de responsabilidade profissional. Cada remoção deve ser sustentada por evidências, testes, monitoramento e conhecimento do negócio.

No universo Bellacosa Mainframe existe uma máxima que o próprio Oráculo aprovaria:

"O código mais perigoso não é o antigo. É aquele cujo propósito ninguém mais consegue explicar."

Porque, assim como na Matrix, o verdadeiro desafio não é destruir o passado.

É descobrir quais partes dele ainda sustentam o presente e quais já podem, finalmente, descansar.

sexta-feira, 27 de novembro de 2020

God Object Rules: Quando um Programador COBOL Descobriu que Nem Mesmo o Arquiteto da Matrix Deveria Controlar Tudo Sozinho

 

Bellacosa Mainframe e a god object rules

☕ Um Café no Bellacosa Mainframe

God Object Rules sem Mistérios

Quando um Programador COBOL Descobriu que Nem Mesmo o Arquiteto da Matrix Deveria Controlar Tudo Sozinho

"Todo sistema precisa de liderança. Nenhum sistema sobrevive quando uma única entidade tenta fazer absolutamente tudo."


Prólogo — O Programa que Governava Toda a Matrix

Neo caminhava pelos corredores infinitos da Matrix.

Depois de atravessar dezenas de portas, finalmente chegou até a sala do Arquiteto.

Mas desta vez havia algo diferente.

No centro da sala existia apenas um gigantesco programa.

Seu nome era:

SYSTEM-CORE-MASTER-PROCESSOR-UNIVERSAL

Neo perguntou:

— O que esse programa faz?

O Arquiteto respondeu calmamente.

— Tudo.

Neo estranhou.

— Tudo?

— Sim.

Ele:

  • autentica usuários;

  • calcula empréstimos;

  • processa PIX;

  • envia e-mails;

  • controla cartões;

  • consulta saldo;

  • gera boletos;

  • grava auditoria;

  • imprime relatórios;

  • conversa com APIs;

  • envia mensagens MQ;

  • acessa o Db2;

  • manipula VSAM;

  • chama CICS;

  • controla segurança;

  • gera logs;

  • cria arquivos;

  • calcula impostos;

  • fecha o mês;

  • abre o dia.

Neo ficou em silêncio.

Olhou para o tamanho do programa.

412.873 linhas

Morpheus respirou profundamente.

— Neo...

você acaba de encontrar um God Object.


O que é God Object?

God Object (Objeto Deus) é um antipadrão onde um único componente concentra responsabilidades demais.

Ele conhece tudo.

Controla tudo.

Decide tudo.

Depende de todos.

E todos dependem dele.

Em Programação Orientada a Objetos normalmente é uma classe gigantesca.

No universo COBOL, normalmente aparece como:

  • um programa enorme;

  • um módulo central;

  • um "programa mestre";

  • um controlador universal.


A origem do termo

O conceito surgiu durante a popularização da Programação Orientada a Objetos nos anos 80 e 90.

Quando OO começou a crescer, percebeu-se que muitos desenvolvedores criavam classes responsáveis por praticamente todo o sistema.

Essas classes violavam praticamente todos os princípios de bom projeto.

Receberam então o apelido de:

God Object

Porque pareciam onipresentes.


Matrix explica isso perfeitamente

Durante boa parte da trilogia acreditamos que:

O Arquiteto controla tudo.

Depois descobrimos que não.

Existe também:

  • Oráculo

  • Merovíngio

  • Chaveiro

  • Agentes

  • Programas independentes

  • Sentinelas

Cada um possui responsabilidades diferentes.

Imagine se apenas o Arquiteto tentasse executar tudo sozinho.

A Matrix entraria em colapso.


O nascimento do God Object

Curiosamente...

ele costuma nascer de uma boa intenção.

Primeira versão.

Programa de Clientes

Depois.

"Vamos colocar autenticação."

Depois.

"Aproveita e grava log."

Depois.

"Já calcula limite."

Depois.

"Também envia e-mail."

Depois.

"Também atualiza cartão."

Depois.

"Também consulta PIX."

Cinco anos depois.

O programa virou um universo inteiro.


O COBOL conhece isso muito bem

Imagine um programa chamado:

CLIENTE01

Originalmente fazia apenas cadastro.

Anos depois passou a:

  • consultar saldo;

  • emitir extratos;

  • calcular tarifas;

  • atualizar endereço;

  • validar CPF;

  • gerar auditoria;

  • integrar Open Finance;

  • enviar SMS;

  • gerar arquivos CNAB.

O nome permaneceu.

A responsabilidade desapareceu.


Um exemplo simples

Arquitetura saudável.

CLIENTE

↓

Cadastro

↓

Consulta

↓

Atualização

Agora.

God Object.

CLIENTE

↓

Tudo.

O efeito psicológico

Existe uma razão interessante.

Nosso cérebro gosta de centralizar.

Quando surge uma nova funcionalidade pensamos.

"Vou colocar aqui mesmo."

É mais rápido.

Mais fácil.

Mais conveniente.

Até deixar de ser.


Matrix Reloaded

Imagine Neo.

Cada novo poder descoberto.

Voar.

Parar balas.

Ler código.

Controlar máquinas.

Agora imagine.

Além disso.

Ele também:

pilota a nave.

Conserta motores.

Programa a Matrix.

Opera comunicações.

Faz medicina.

Cozinha.

Conserta o Db2.

Absurdo.

Mas exatamente isso acontece com um God Object.


Como reconhecer?

Existem sinais clássicos.

Programa enorme

Dezenas de milhares de linhas.


Muitas responsabilidades

Faz tudo.


Muitas dependências

Conhece dezenas de módulos.


Muitas chamadas

Todo mundo depende dele.


Alterações frequentes

Sempre muda.

Porque tudo passa por ele.


O Agente Smith adora isso

Porque basta derrubar um único componente.

Todo o sistema sofre.

É um enorme ponto único de falha.


Um exemplo COBOL

Programa:

PGMCORE

Ele:

  • acessa Db2;

  • grava VSAM;

  • chama MQ;

  • consulta REST;

  • gera XML;

  • gera JSON;

  • controla autenticação;

  • calcula impostos;

  • imprime relatórios.

Pergunta.

Qual é sua responsabilidade?

Resposta.

Todas.


O custo invisível

Nova regra.

Antes.

Alterava um programa.

Agora.

Precisa entender:

80 mil linhas.


O impacto no Mainframe

Quanto maior o God Object.

Maior:

  • CPU;

  • tempo de compilação;

  • tempo de testes;

  • risco;

  • dependência.


Existe God Object em arquitetura?

Sim.

Às vezes não é um programa.

É um microsserviço.

Chamado:

CoreService.

Ele atende:

todos.

Isso também é um God Object.


A diferença

Módulo central.

Coordena.


God Object.

Executa tudo.


O papel do Arquiteto

O verdadeiro arquiteto distribui responsabilidades.

Nunca concentra.


O princípio SOLID

God Object viola vários princípios.

Principalmente.

SRP

Single Responsibility Principle.

Um módulo.

Uma responsabilidade.


Matrix e o Oráculo

O Oráculo não tenta controlar toda a Matrix.

Ela aconselha.

O Chaveiro cuida das chaves.

O Merovíngio controla informações.

Cada programa possui função específica.

Essa divisão torna o sistema resiliente.


Como evitar?

Modularização

Divida funções.


CALL

Extraia responsabilidades.


APIs

Separe serviços.


COPYBOOK

Compartilhe estruturas.

Não comportamento.


Refatoração

Remova responsabilidades pouco a pouco.


Revisões

Questione sempre.

"Esse módulo realmente deveria fazer isso?"


Atenção!

Existe uma diferença importante.

Um programa pode ser grande.

Sem ser God Object.

O problema não é o tamanho.

É a quantidade de responsabilidades.


Curiosidade

Muitos sistemas bancários antigos possuem programas chamados:

MASTER

CORE

MAIN

CONTROL

MANAGER

Nem todos são God Objects.

Mas muitos acabaram se tornando.


O perigo

Acoplamento

Tudo depende dele.


Baixa reutilização

Funções ficam escondidas.


Testes difíceis

Cenários infinitos.


Deploy arriscado

Qualquer alteração afeta tudo.


Conhecimento concentrado

Poucas pessoas entendem.


Um exemplo inspirado na Matrix

Imagine.

Existe apenas um personagem.

Ele é:

Arquiteto.

Oráculo.

Neo.

Trinity.

Smith.

Merovíngio.

Chaveiro.

Todos ao mesmo tempo.

A história seria impossível.

Software também.


Ferramentas ajudam

Hoje conseguimos identificar God Objects usando:

  • SonarQube

  • IBM ADDI

  • IBM Application Discovery

  • Enterprise Analyzer

  • IBM COBOL Check

Elas medem:

  • acoplamento;

  • complexidade;

  • dependências;

  • tamanho;

  • responsabilidades.


O papel da IA

IA consegue identificar:

métodos enormes.

Dependências.

Objetos excessivos.

Mas ainda depende da análise humana para decidir como dividir responsabilidades.


Aplicabilidade

God Object aparece em:

  • COBOL

  • Java

  • C#

  • Python

  • PHP

  • JavaScript

  • Microsserviços

  • APIs

  • Cloud

Nenhuma tecnologia escapa.


Erros clássicos

  • Colocar tudo no mesmo programa.

  • Misturar negócio com infraestrutura.

  • Misturar interface com persistência.

  • Acrescentar funcionalidades indefinidamente.

  • Evitar modularização.


Boas práticas

  • Alta coesão.

  • Baixo acoplamento.

  • Uma responsabilidade.

  • Pequenas funções.

  • Interfaces claras.

  • Código reutilizável.

  • Documentação.


O ensinamento do Oráculo

O Oráculo entrega um espelho para Neo.

Ele olha.

Vê apenas um rosto.

Depois o espelho se quebra.

Agora aparecem centenas de pequenos espelhos.

Ela pergunta.

"Qual deles é mais resistente?"

Neo responde.

"Os pequenos."

Ela sorri.

"Quando um quebra, os outros continuam refletindo."

Essa é exatamente a ideia da arquitetura modular.


Lições para um Programador COBOL Padawan

Ao longo da carreira, você encontrará programas que parecem controlar o universo inteiro. A tentação será continuar acrescentando funcionalidades porque "já existe muita coisa ali".

Resista.

Sempre que possível:

  • identifique responsabilidades distintas;

  • extraia regras para módulos especializados;

  • separe acesso a dados das regras de negócio;

  • utilize programas chamados (CALL) para funcionalidades reutilizáveis;

  • mantenha interfaces simples e bem definidas.

Cada responsabilidade removida de um God Object reduz riscos, facilita testes e torna o sistema mais compreensível.


Curiosidades

O antipadrão God Object possui "parentes" famosos:

  • Blob – um objeto gigante rodeado de objetos quase vazios.

  • God Class – termo usado em Java e C# para classes com centenas de métodos.

  • Swiss Army Knife Class – classe que tenta oferecer uma ferramenta para qualquer situação.

  • Manager Mania – classes chamadas Manager, Helper ou Util que acabam concentrando comportamento demais.

Todos compartilham a mesma característica: excesso de responsabilidades.


Conclusão — Nem Mesmo o Arquiteto Controlava Tudo

No universo Matrix existe uma lição fascinante.

Embora o Arquiteto parecesse controlar toda a simulação, ele não fazia tudo sozinho. A estabilidade do sistema dependia da colaboração entre diversas entidades, cada uma especializada em uma função.

A Engenharia de Software segue exatamente esse princípio.

Quando um único programa COBOL, uma classe Java ou um microsserviço tenta assumir todas as responsabilidades, ele se transforma em um God Object. No início parece eficiente. Depois torna-se pesado, difícil de testar, arriscado de modificar e praticamente impossível de compreender.

Para um Programador COBOL, especialmente em ambientes IBM Z que processam milhões de transações críticas, a maior virtude não é escrever o maior programa da empresa.

É construir componentes pequenos, coesos, bem definidos e capazes de cooperar entre si.

No universo Bellacosa Mainframe existe uma máxima digna do Oráculo:

"Um sistema forte não nasce de um único programa poderoso. Nasce de muitos módulos simples que sabem exatamente qual é sua missão."

Porque até a Matrix precisou aprender que nenhum programa deveria tentar ser um deus.

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