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:
greppelos 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