Qual seria a melhor abordagem? Escreva testes de unidade para eles ou pergunte por que eles estão lá?
Excluir código é uma coisa boa.
Quando você não pode excluir o código, certamente pode marcá-lo como @ Deprecated , documentando qual versão principal você está direcionando para remover o método. Então você pode excluí-lo "mais tarde". Nesse meio tempo, ficará claro que nenhum novo código deve ser adicionado que depende dele.
Eu não recomendaria investir em métodos obsoletos - portanto, não há novos testes de unidade apenas para atingir as metas de cobertura.
A diferença entre os dois é principalmente se os métodos fazem ou não parte da interface publicada . A exclusão arbitrária de partes da interface publicada pode ser uma surpresa desagradável para os consumidores que dependiam da interface.
Não posso falar com EclEmma, mas, pelas minhas experiências, uma das coisas com as quais você precisa tomar cuidado é a reflexão. Se, por exemplo, você usar arquivos de configuração de texto para escolher quais classes / métodos acessar, a distinção usada / não utilizada pode não ser óbvia (fui queimado por isso algumas vezes).
Se o seu projeto for uma folha no gráfico de dependência, o caso de descontinuação será enfraquecido. Se o seu projeto for uma biblioteca, o caso de descontinuação será mais forte.
Se sua empresa usa um mono-repo , a exclusão é um risco menor do que no caso de vários repo.
Conforme observado por l0b0 , se os métodos já estiverem disponíveis no controle de origem, recuperá-los após a exclusão é um exercício direto. Se você estava realmente preocupado com a necessidade de fazer isso, pense em como organizar seus commits para que você possa recuperar as alterações excluídas, se precisar delas.
Se a incerteza for alta o suficiente, considere comentar o código , em vez de excluí-lo. É um trabalho extra no caminho feliz (onde o código excluído nunca é restaurado), mas facilita a restauração. Meu palpite é que você deve preferir uma exclusão direta até que você se queime por isso algumas vezes, o que lhe dará algumas idéias sobre como avaliar a "incerteza" nesse contexto.
pergunta por que eles estão lá?
O tempo investido na captura do conhecimento não é necessariamente desperdiçado. Soube realizar uma remoção em duas etapas: primeiro, adicionando e enviando um comentário explicando o que aprendemos sobre o código e, em seguida, excluindo o código (e o comentário).
Você também pode usar algo análogo aos registros de decisão arquitetônicos como uma maneira de capturar o conhecimento com o código-fonte.