Teste de caracterização: como refatorar legado sem medo
Não dá para refatorar com segurança um sistema sem testes. Mas dá para criar a rede de segurança antes — capturando o comportamento atual, inclusive o que ninguém documentou.
O impasse é conhecido: o código precisa ser refatorado, mas não tem teste; escrever teste exige entender o código, e ninguém entende mais o código. O sistema segue rodando, e a cada ano fica mais caro tocar nele.
A saída não é entender antes
Teste de caracterização inverte a lógica do teste convencional. Em vez de verificar o comportamento correto, ele registra o comportamento atual — incluindo os defeitos, que provavelmente já viraram dependência de alguma parte da operação.
Não é um teste que valida requisito. É um sismógrafo: ele não diz se o sistema está certo, diz se algo mudou.
Como construir a rede
- Identifique a fronteira de maior valor: a entrada do fluxo crítico — endpoint, comando ou job.
- Colete entradas reais de produção, com dados anonimizados.
- Execute contra o código atual e grave a saída como referência aprovada.
- Confirme que o teste falha ao alterar deliberadamente o comportamento — teste que nunca falha não protege nada.
- Só então refatore, executando a suíte a cada passo.
[Theory]
[MemberData(nameof(AmostrasDeProducao))]
public void CalculoDeFrete_mantem_comportamento(PedidoDto entrada)
{
var resultado = _servico.Calcular(entrada);
// Aprova a saída atual como referência. Qualquer divergência
// futura falha o teste — inclusive divergência intencional,
// que passa a exigir reaprovação explícita.
Approvals.Verify(resultado, nomeDoCaso: entrada.Id);
}Cuidados que evitam falso conforto
- Fixe tempo, aleatoriedade e identificadores gerados — senão o teste falha por motivo errado.
- Anonimize os dados de produção antes de versioná-los no repositório.
- Priorize por risco: cobrir 100% do legado não é objetivo realista nem necessário.
- Registre em comentário quando a saída aprovada contém um defeito conhecido, para que ninguém a trate como especificação.
O teste de caracterização não descreve o sistema que você queria ter. Descreve o que a sua operação depende hoje — e é exatamente isso que precisa ser preservado durante a refatoração.
Na prática, essa rede costuma ser construída em duas a três semanas para os fluxos críticos de um sistema de porte médio. É o investimento que transforma "não podemos mexer nisso" em "podemos mexer nisso com segurança".
Artigos relacionados
Quando microsserviços são a decisão errada
Microsserviço resolve um problema organizacional antes de resolver um problema técnico. Se o seu problema não é organizacional, você está comprando complexidade sem contrapartida.
RAG em produção: o que ninguém conta na demonstração
Um protótipo de RAG fica pronto em uma tarde. A distância entre esse protótipo e um sistema confiável é feita de avaliação, chunking, reranking e controle de custo.
Sua conta de nuvem não é um problema de infraestrutura
Custo de nuvem é sintoma de decisão de arquitetura. Cortar instância resolve o mês; mudar o que gera o gasto resolve o ano.