Engenharia de Software

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.

Artigo de exemplo, criado para validar layout e SEO. Substituir por pauta editorial real.

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

  1. Identifique a fronteira de maior valor: a entrada do fluxo crítico — endpoint, comando ou job.
  2. Colete entradas reais de produção, com dados anonimizados.
  3. Execute contra o código atual e grave a saída como referência aprovada.
  4. Confirme que o teste falha ao alterar deliberadamente o comportamento — teste que nunca falha não protege nada.
  5. 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.

· 8 min