Removendo código inacessível
Em uma linguagem com princípios estatísticos, você sempre deve saber se o código é realmente acessível ou não: remova-o, compile-o, se não houver erro, ele não foi alcançável.
Infelizmente, nem todos os idiomas são estaticamente tipificados e nem todos os idiomas estaticamente tipificados são baseados em princípios. As 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 para que o código sob análise possa ser acessado em tempo de execução via reflexão, não será possível confiar no compilador. Essas linguagens incluem Python, Ruby ou Java.
Se você usar um idioma com sobrecarga sem princípios, a simples remoção de uma sobrecarga pode simplesmente mudar a resolução de sobrecarga para outra sobrecarga silenciosamente. Alguns idiomas permitem programar 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]]
or = delete
).
Portanto, a menos que você tenha muita sorte de trabalhar com linguagens estritas (Rust vem à mente), você pode realmente estar se atirando no pé confiando no compilador. E, infelizmente, os conjuntos de testes geralmente são incompletos, portanto também não ajudam muito mais.
Siga a próxima seção ...
Removendo código potencialmente não utilizado
Mais provavelmente, o código é realmente referenciado, no entanto, você suspeita que, na prática, as ramificações do código que fazem referência a ele nunca sejam obtidas.
Nesse caso, independentemente do idioma, o código é demonstrável alcançável e apenas a instrumentação em tempo de execução pode ser usada.
No passado, usei com sucesso uma abordagem em três fases para remover esse código:
- Em cada filial suspeita de NÃO ser tomada, registre um aviso.
- Após um ciclo, lance uma exceção / retorne um erro ao inserir um pedaço 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, eu esperaria um curto ciclo mensal (com salários sendo pagos no final do mês) e um longo ciclo anual. Nesse caso, é necessário aguardar pelo menos um ano para verificar se nenhum aviso foi emitido para o inventário de final de ano poderia usar caminhos de código que, de outra forma, nunca seriam usados.
Felizmente, a maioria dos aplicativos tem ciclos mais curtos.
Eu aconselho a colocar um comentário TODO, com uma data, informando quando avançar para a próxima etapa. E um lembrete no seu calendário.