2

Achei a mesma função escrita 3 vezes no mesmo projeto — e um jeito rápido de caçar isso

Semana passada abri o repositório de um produto que passou por vários freelancers ao longo de uns três anos. Fui atrás de um bug num e-mail de redefinição de senha e, no caminho, dei de cara com três funções diferentes mandando e-mail: cada uma escrita por uma pessoa que nunca leu as outras duas.

Não é preguiça de ninguém. Quando você entra num projeto por duas semanas, ler trinta arquivos pra descobrir que já existe um mailer pela metade não cabe no prazo. Escrever um novo é mais rápido e mais seguro pra quem vai embora. O problema é que isso vai empilhando, e um dia você conserta um bug num lugar e ele reaparece em dois outros que eram cópias.

Se você desconfia que tem disso na sua base, dá pra checar em uns 20 minutos, sem ferramenta paga:

  • grep pelos verbos do domínio: sendMail|sendEmail|mailer|notify. Se voltam nomes diferentes fazendo a mesma coisa, achou.
  • Cace os utilitários repetidos: formatação de data, conversão de moeda, validação de CPF ou e-mail. Quase sempre têm 2 ou 3 versões.
  • Rode um detector de clones: npx jscpd ./src (Node) ou PMD CPD (Java e outras linguagens). Em minutos ele cospe a % de duplicação e aponta os blocos.
  • Olhe quem passou por ali: git log --format='%an' | sort | uniq -c. Muitos autores com pouca sobreposição no tempo é sinal de memória do sistema perdida a cada troca de pessoa.

O custo da duplicação não é disco nem código feio. É a correção que vale pra um pedaço só e deixa os outros quebrados sem avisar ninguém. Você acha que resolveu; o suporte descobre que não.

Escrevi a história completa, com o número do estrago, no blog. Versão completa: https://revin.com.br/pt/blog/paguei-pela-mesma-funcao-tres-vezes

Carregando publicação patrocinada...