Refatorar sem teste é trocar risco conhecido por risco invisível. O código pode ficar mais bonito e ainda assim quebrar uma regra que ninguém lembrava, especialmente em sistemas com comportamento acumulado ao longo dos anos.
Cobertura útil não começa tentando alcançar porcentagem alta. Ela começa protegendo caminhos críticos: cálculo, permissão, integração, pagamento, importação, relatório e qualquer fluxo que cause dano se mudar sem intenção.
Escolha o alvo
Identifique os pontos que mais mudam ou mais quebram. Histórico de incidentes, chamados de suporte, logs e medo declarado da equipe são bons sinais de onde teste deve entrar primeiro.
Depois escreva testes de comportamento observável. Em legado, testar detalhe interno demais prende a refatoração que você justamente quer fazer.
Proteja contratos
Se o módulo conversa com API, banco ou arquivo, registre exemplos reais de entrada e saída. Esses testes funcionam como cerca: permitem reorganizar por dentro sem alterar o contrato usado por outros fluxos.
Quando não for possível automatizar tudo, combine testes de caracterização com checagens manuais documentadas. O importante é reduzir surpresa antes de mexer.
Refatore em passos
Faça mudanças pequenas, rode testes com frequência e remova duplicação apenas depois de entender comportamento. Teste não garante perfeição, mas dá chão para melhorar sem depender de sorte.