Removendo o código inacessível
Em uma linguagem de tipo estaticamente estável, você deve sempre saber se o código está realmente acessível ou não: remova-o, compile, se não houver erro, ele não poderá ser acessado.
Infelizmente, nem todas as linguagens são estaticamente digitadas, e nem todas as linguagens estaticamente tipadas são baseadas em princípios. Coisas que podem dar errado incluem (1) reflexão e (2) sobrecarga sem princípios.
Se você usar uma linguagem dinâmica ou uma linguagem com reflexão suficientemente poderosa de que o fragmento de código sob exame poderia ser acessado em tempo de execução via reflexão, então você não pode confiar no compilador. Essas linguagens incluem Python, Ruby ou Java.
Se você usar um idioma com sobrecarga sem princípios, simplesmente remover uma sobrecarga poderia simplesmente mudar a resolução de sobrecarga para outra sobrecarga silenciosamente. Algumas dessas linguagens permitem que você programe um aviso / erro em tempo de compilação associado ao uso do código, caso contrário, você não pode confiar no compilador. Essas linguagens incluem Java (use @Deprecated
) ou C ++ (use [[deprecated]]
ou = delete
).
Então, a menos que você tenha muita sorte de trabalhar com linguagens estritas (Rust vem à mente), você pode estar atirando no próprio pé confiando no compilador. E, infelizmente, as suítes de testes são geralmente incompletas, então não há muito mais ajuda.
Sugiro a próxima seção ...
Removendo código potencialmente não utilizado
Mais provavelmente, o código é realmente referenciado, mas você suspeita de que na prática os ramos de código que o referenciam nunca são utilizados.
Neste caso, não importa o idioma, o código é demonstravelmente acessível, e somente a instrumentação em tempo de execução pode ser usada.
No passado, usei com sucesso uma abordagem de três fases para remover esse código:
- Em cada ramo suspeito de NÃO ser levado, registre um aviso.
- Após um ciclo, lançar uma exceção / retornar um erro ao inserir o trecho de código específico.
- Após outro ciclo, exclua o código.
O que é um ciclo? É o ciclo de uso do código. Por exemplo, para uma aplicação financeira, esperaria um ciclo mensal curto (com salários pagos no final do mês) e um ciclo anual longo. Nesse caso, você deve aguardar pelo menos um ano para verificar se nenhum aviso é emitido para o inventário de final de ano que poderia usar caminhos de código que nunca seriam usados.
Espero que a maioria dos aplicativos tenha ciclos mais curtos.
Eu aconselho colocar um comentário TODO, com uma data, aconselhando sobre quando passar para a próxima etapa. E um lembrete no seu calendário.