Antes de refatorar com IA, capture o comportamento que os testes não descrevem
Testes de caracterização criam uma referência anterior à mudança. O objetivo é revisar diferenças de comportamento, não congelar todo defeito.
Um artigo do Stack Overflow Blog defende testes que registrem o comportamento efetivo do software antes de uma mudança, em vez de representar apenas a intenção de quem implementou a funcionalidade.[15] Os testes de caracterização, associados a Michael Feathers, avisam quando esse comportamento muda sem afirmar que ele seja necessariamente correto.[15] Essa distinção é especialmente útil quando um agente altera código e testes na mesma tarefa.
O que muda para quem desenvolve
O texto aponta detalhes que consumidores podem passar a depender sem documentação explícita: ordenação, mensagens de erro, valores padrão e diferença entre campo ausente e null.[15] Também recomenda observar efeitos além do retorno HTTP, como consultas, chamadas a dependências e mensagens emitidas.[15]
Minha análise é que a referência precisa existir antes da refatoração. Se ela for criada depois, com base na explicação do mesmo agente que mudou o código, perde parte do valor como verificação independente.
Golden masters, approval tests e snapshots podem reduzir o trabalho de capturar saídas extensas, mas exigem revisão das diferenças.[15] Um teste vermelho indica alteração de comportamento, não prova automática de defeito.[15] O trabalho de engenharia está em decidir se aquela mudança era desejada e coordenada.
Como aplicar
Escolha uma operação difícil de refatorar e registre um conjunto pequeno de casos: sucesso, entrada inválida, ausência de resultado e falha de uma dependência. Use dados sintéticos ou anonimizados, sem transportar tráfego sensível para ferramentas externas.
Capture resposta e efeitos relevantes em um ambiente isolado. Por exemplo, em uma consulta de pedidos, registre a estrutura JSON, a ordenação e as interações esperadas com armazenamento e mensageria. Defina quais dessas propriedades fazem parte do contrato que precisa ser preservado.
Depois execute a refatoração e examine cada diferença. Uma mudança intencional deve vir com justificativa e atualização consciente da referência. Uma mudança não explicada deve bloquear a integração até ser entendida.
Sugiro manter a captura inicial em uma etapa separada da implementação. Isso dificulta que a solução adapte silenciosamente o teste para aceitar o próprio erro. O experimento termina com um diff revisado, não com a aprovação automática de todos os novos snapshots.
Cuidados e limites
Campos não determinísticos, como horários e identificadores gerados, precisam de normalização pontual; ignorar diferenças amplas demais destrói o sinal da suíte.[15] Tampouco convém transformar toda consulta interna em contrato eterno. Escolha observações que protejam consumidores ou efeitos importantes.
O artigo destaca refatoração de legado, atualização de frameworks e reescritas como casos de uso.[15] Minha recomendação é começar por uma fronteira estreita e de alto risco. Caracterização não substitui especificação nem teste de segurança; ela acrescenta uma resposta concreta para a pergunta que costuma ficar sem evidência: o que mudou de verdade?
Fonte
[15] Fonte: Stack Overflow Blog