É desejável remover b()
uma vez que não seja mais usado, pelo mesmo motivo que é desejável não adicionar funções não usadas em primeiro lugar. Quer você chame de "legibilidade" ou qualquer outra coisa, tudo o mais é igual, é uma melhoria no código que não contém nada para o que não seja útil. Por uma questão de ter pelo menos uma medida específica pela qual é melhor não tê-la, removê-la garante que seu custo futuro de manutenção após essa alteração seja zero!
Não achei necessária nenhuma técnica especial para removê-la com seus testes, pois qualquer pensamento de substituição b()
por algo novo deve, é claro, ser acompanhado por uma consideração de todo o código que está sendo chamado atualmente b()
, e os testes são um subconjunto de "todo o código "
A linha de raciocínio que geralmente funciona para mim é que, no momento em que percebo que isso f()
se tornou b()
obsoleto, b()
deve ser pelo menos preterido, e estou procurando encontrar todas as chamadas b()
com a intenção de substituí-las por chamadas para f()
, I considere também o código de teste . Especificamente, se b()
não for mais necessário, eu posso e devo remover seus testes de unidade.
Você está certo de que nada me obriga a notar que b()
não é mais necessário. É uma questão de habilidade (e, como diz Slim, relatórios de cobertura de código em testes de nível superior). Se apenas testes de unidade e nenhum teste funcional se referirem b()
, posso ser cautelosamente otimista de que não faz parte de nenhuma interface publicada e, portanto, removê-la não é uma mudança de quebra para nenhum código que não esteja sob meu controle direto.
O ciclo vermelho / verde / refatorado não menciona explicitamente a remoção de testes. Além disso, a remoção b()
viola o princípio de abrir / fechar, pois claramente seu componente está aberto para modificações. Portanto, se você quiser pensar nesta etapa como algo fora do TDD simples, vá em frente. Por exemplo, você pode ter algum processo para declarar um teste como "ruim", que pode ser aplicado neste caso para remover o teste, alegando que ele testa algo que não deveria estar lá (a função desnecessária b()
).
Acho que, na prática, a maioria das pessoas provavelmente permite que uma certa quantidade de redesenho seja realizada junto com um ciclo de vermelho / verde / refator, ou eles consideram que a remoção de testes de unidade redundantes é uma parte válida de um "refator", embora seja estritamente falando não é refatoração. Sua equipe pode decidir quanto drama e papelada devem ser envolvidos para justificar essa decisão.
De qualquer forma, se isso b()
fosse importante, haveria testes funcionais para isso, e esses não seriam removidos levemente, mas você já disse que existem apenas testes de unidade. Se você não distinguir adequadamente entre testes de unidade (gravados no design interno atual do código, que você alterou) e testes funcionais (gravados em interfaces publicadas, que talvez você não queira alterar), será necessário ter mais cuidado sobre a remoção de testes de unidade.