Es deseable eliminar b()una vez que ya no se usa, por la misma razón que es deseable no agregar funciones no utilizadas en primer lugar. Ya sea que lo llames "legibilidad" u otra cosa, si todo lo demás es igual, es una mejora para el código que no contiene nada para lo que no sirve. ¡En aras de tener al menos una medida específica por la cual es mejor no tenerla, eliminarla garantiza que su costo de mantenimiento futuro después de ese cambio sea cero!
No he encontrado ninguna técnica especial que sea necesaria para eliminarlo realmente con sus pruebas, ya que cualquier pensamiento de reemplazar b()por algo nuevo debe, por supuesto, ir acompañado de una consideración de todo el código que se llama actualmente b(), y las pruebas son un subconjunto de "todo el código ".
La línea de razonamiento que generalmente funciona para mí es que en el punto en que me doy cuenta de que se f()ha vuelto b()obsoleto, por b()lo tanto, debe ser al menos obsoleto, y estoy buscando encontrar todas las llamadas b()con la intención de reemplazarlas con llamadas a f(), yo Considere también el código de prueba . Específicamente, si b()ya no es necesario, entonces puedo y debo eliminar sus pruebas unitarias.
Tienes toda la razón de que nada me obliga a notar que b()ya no es necesario. Eso es una cuestión de habilidad (y, como dice Slim, los informes de cobertura de código en pruebas de nivel superior). Si solo se refieren a pruebas unitarias y no a pruebas funcionales b(), entonces puedo ser cautelosamente optimista de que no es parte de ninguna interfaz publicada y, por lo tanto, eliminarla no es un cambio importante para ningún código que no esté bajo mi control directo.
El ciclo rojo / verde / refactor no menciona explícitamente la eliminación de las pruebas. Además, la eliminación b()viola el principio abierto / cerrado, ya que claramente su componente está abierto a modificaciones. Entonces, si desea pensar en este paso como algo fuera de TDD simple, continúe. Por ejemplo, es posible que tenga algún proceso para declarar que una prueba es "incorrecta", que se puede aplicar en este caso para eliminar la prueba porque prueba algo que no debería estar allí (la función innecesaria b()).
Creo que, en la práctica, la mayoría de las personas probablemente permita que se realice una cierta cantidad de rediseño junto con un ciclo rojo / verde / refactorizador, o consideren que eliminar las pruebas unitarias redundantes es una parte válida de un "refactorizador" aunque sea estrictamente hablando No está refactorizando. Su equipo puede decidir cuánto drama y papeleo deben estar involucrados para justificar esta decisión.
De todos modos, si b()fuera importante, habría pruebas funcionales para ello, y no se eliminarían a la ligera, pero ya ha dicho que solo hay pruebas unitarias. Si no distingue adecuadamente entre las pruebas unitarias (escritas en el diseño interno actual del código, que ha cambiado) y las pruebas funcionales (escritas en las interfaces publicadas, que tal vez no desee cambiar), entonces debe ser más cauteloso sobre la eliminación de pruebas unitarias.