No hubo un proceso de desarrollo basado en pruebas durante el desarrollo debido a plazos muy ajustados
Esta afirmación es muy preocupante. No porque signifique que se desarrolló sin TDD o porque no está probando todo. Esto es preocupante, porque muestra que piensas que TDD te retrasará y te hará perder una fecha límite.
Mientras lo vea de esta manera, no estará listo para TDD. TDD no es algo en lo que pueda relajarse gradualmente. O sabes cómo hacerlo o no. Si intentas hacerlo a la mitad, lo lograrás y te verás mal.
TDD es algo que primero debes practicar en casa. Aprende a hacerlo, porque te ayuda a codificar ahora . No porque alguien te haya dicho que lo hagas. No porque ayudará cuando hagas cambios más tarde. Cuando se convierte en algo que haces porque tienes prisa, entonces estás listo para hacerlo profesionalmente.
TDD es algo que puedes hacer en cualquier tienda. Ni siquiera tiene que entregar su código de prueba. Puede guardarlo para usted si los demás desdeñan las pruebas. Cuando lo haces bien, las pruebas aceleran tu desarrollo incluso si nadie más las ejecuta.
Por otro lado, si otros aman y ejecutan sus pruebas, debe tener en cuenta que incluso en una tienda TDD no es su trabajo verificar las pruebas. Es crear un código de producción comprobado que funcione. Si resulta ser comprobable, ordenado.
Si cree que la gerencia tiene que creer en TDD o que sus compañeros codificadores deben respaldar sus pruebas, entonces está ignorando lo mejor que TDD hace por usted. Rápidamente le muestra la diferencia entre lo que cree que hace su código y lo que realmente hace.
Si no puede ver cómo eso, por sí solo, puede ayudarlo a cumplir con una fecha límite más rápido, entonces no está listo para TDD en el trabajo. Necesitas practicar en casa.
Dicho esto, es bueno cuando el equipo puede usar sus pruebas para ayudarlos a leer su código de producción y cuando la gerencia comprará nuevas herramientas TDD.
¿Es una buena idea escribir todos los casos de prueba posibles después de transformar el equipo a TDD?
Independientemente de lo que esté haciendo el equipo, no siempre es una buena idea escribir todos los casos de prueba posibles. Escribe los casos de prueba más útiles. La cobertura del 100% del código tiene un costo. No ignore la ley de rendimientos decrecientes solo porque hacer un juicio es difícil.
Ahorre su energía de prueba para la interesante lógica de negocios. Lo que toma decisiones y hace cumplir la política. Prueba el diablo de eso. El código de pegamento estructural obvio, fácil de leer y aburrido que simplemente conecta cosas juntas no necesita pruebas tan mal.
(1) ¿Todavía está bien o es una buena idea detener la mayor parte del desarrollo y comenzar a escribir todos los casos de prueba posibles desde el principio, a pesar de que todo funciona completamente BIEN (¡todavía!)? O
No. Este es el pensamiento de "hagamos una reescritura completa". Esto destruye el conocimiento difícilmente ganado. No le pida a la gerencia tiempo para escribir exámenes. Solo escribe pruebas. Una vez que sepa lo que está haciendo, las pruebas no lo retrasarán.
(2) es mejor esperar a que ocurra algo malo y luego, durante la reparación, escribir nuevas pruebas unitarias, o
(3) incluso olvídate de los códigos anteriores y solo escribe pruebas unitarias para los nuevos códigos y pospone todo al siguiente refactor principal.
Contestaré 2 y 3 de la misma manera. Cuando cambia el código, por cualquier motivo, es realmente bueno si puede pasar una prueba. Si el código es heredado, actualmente no es bienvenido una prueba. Lo que significa que es difícil probarlo antes de cambiarlo. Bueno, como lo estás cambiando de todos modos, puedes cambiarlo en algo comprobable y probarlo.
Esa es la opción nuclear. Es arriesgado. Estás haciendo cambios sin pruebas. Hay algunos trucos creativos para poner a prueba el código heredado antes de cambiarlo. Busca lo que se llama costuras que le permiten cambiar el comportamiento de su código sin cambiar el código. Cambia los archivos de configuración, crea archivos, lo que sea necesario.
Michael Feathers nos dio un libro sobre esto: Trabajando efectivamente con código heredado . Léelo y verás que no tienes que quemar todo lo viejo para hacer algo nuevo.