IA para migrar COBOL: o que testar antes de confiar no código convertido
Imagine uma rotina de cobrança em COBOL que foi convertida para outra linguagem. Compilou, passou pelos testes mais óbvios e devolveu um valor diferente no fechamento. O original truncava uma casa decimal; a versão nova arredonda. É um exemplo hipotético, mas mostra por que ‘compilou’ não é um critério de aceite para uma migração dessas.
A OpenAI divulgou avaliações de programação em linguagens com menos dados de treinamento. Uma delas pede a implementação de um mecanismo compatível com SQLite em diferentes linguagens. Outra avalia a migração de programas COBOL para linguagens atuais, comparando as saídas observáveis com testes ocultos. São tarefas distintas, com métricas distintas. Os resultados reportados pela própria fornecedora são um sinal de que vale testar a assistência de IA; não são uma homologação do seu sistema financeiro.
Comece por uma rotina que caiba numa comparação
Antes de converter um módulo inteiro, escolha uma rotina com entrada e saída conhecidas. Pode ser o cálculo de uma cobrança ou a geração de um registro para outro sistema. Anote a versão exata do programa original, as dependências e as regras que não podem mudar. Se nem a equipe consegue descrever o comportamento esperado nas bordas, a tradução vai apenas deixar essa incerteza mais difícil de enxergar.
Eu montaria um piloto assim:
- Separe entradas autorizadas para o caso comum e para as bordas: valores decimais, registro ausente, campo vazio e uma falha esperada. Inclua situações que o sistema de fato aceita hoje, mesmo que pareçam estranhas.
- Execute original e convertido com as mesmas entradas, versões de dependências registradas e ambientes isolados. Guarde saídas, códigos de erro e efeitos sobre dados; não compare apenas o valor exibido na tela.
- Registre cada divergência com a entrada que a reproduz. Peça a quem conhece a regra de negócio que diga se aquilo é um bug antigo a corrigir ou um comportamento que a migração precisa preservar. Não deixe a ferramenta tomar essa decisão sozinha.
- Defina antes do teste o que interrompe o piloto. Uma diferença que afete cobrança, integridade dos dados ou autorização não entra na lista de ‘ajustes para depois’.
Use dados sintéticos ou anonimizados de forma adequada e aprovados para esse uso. Código legado, credenciais e dados pessoais não devem ser enviados a uma ferramenta externa só porque ela aceita colar um arquivo.
Saída igual ainda não significa operação igual
A comparação byte a byte das saídas de programas delimitados é um teste forte para aquele conjunto de entradas. Em produção, também importam gravações no banco, limites de transação, ordem de processamento, integrações externas, permissões e o comportamento quando uma etapa falha no meio. Uma rotina pode devolver o mesmo arquivo e ainda duplicar uma gravação ao ser executada novamente.
Por isso, amplie o piloto apenas depois de comparar também os efeitos persistidos em ambiente controlado. Planeje como voltar à versão anterior e como reconciliar dados caso a nova execução produza uma divergência. Desempenho e operação em paralelo pedem avaliações próprias; não cabem no resultado de um benchmark de tradução.
E talvez a melhor próxima mudança nem seja converter tudo. Encapsular uma rotina atrás de uma interface estável ou melhorar os testes do COBOL existente pode resolver a dor imediata com menos risco. A modernização envolve mais do que trocar a sintaxe: dados, arquitetura e operação continuam lá.
Nesta semana, dá para começar sem apostar a aplicação inteira: escolha uma rotina, salve três casos de referência e combine um critério de parada com quem responde por ela. Se a IA ajudar a produzir a primeira versão, ótimo. O aceite vem da comparação do comportamento e da revisão humana, não da velocidade com que o código apareceu.
Fontes para consulta
- OpenAI: avaliações em linguagens com menos dados e migração COBOL — resultados da própria fornecedora, em tarefas delimitadas.
- IBM: contexto técnico de COBOL e opções de modernização — distinção entre conversão de linguagem e mudanças no sistema.