Mi experiencia al hacer la transición.
Durante muchos años tuve la idea errónea de que no tenía tiempo suficiente para escribir pruebas unitarias para mi código. Cuando escribí las pruebas, estaban hinchadas, cosas pesadas que solo me animaron a pensar que solo debería escribir pruebas unitarias cuando sabía que eran necesarias.
Recientemente me animaron a usar Test Driven Development y descubrí que es una revelación completa. Ahora estoy firmemente convencido de que no tengo tiempo para no escribir pruebas unitarias .
En mi experiencia, al desarrollar teniendo en cuenta las pruebas, termina con interfaces más limpias, clases y módulos más enfocados y, en general , un código más SÓLIDO y comprobable.
Cada vez que trabajo con código heredado que no tiene pruebas unitarias y tengo que probar algo manualmente, sigo pensando "esto sería mucho más rápido si este código ya tuviera pruebas unitarias". Cada vez que tengo que probar y agregar funcionalidad de prueba unitaria al código con alto acoplamiento, sigo pensando "esto sería mucho más fácil si se hubiera escrito de forma desacoplada".
Comparando y contrastando las dos estaciones experimentales que apoyo. Uno ha existido por un tiempo y tiene una gran cantidad de código heredado, mientras que el otro es relativamente nuevo.
Cuando se agrega funcionalidad al antiguo laboratorio, a menudo se trata de ir al laboratorio y pasar muchas horas trabajando sobre las implicaciones de la funcionalidad que necesitan y cómo puedo agregar esa funcionalidad sin afectar ninguna de las otras funciones. El código simplemente no está configurado para permitir pruebas fuera de línea, por lo que casi todo tiene que ser desarrollado en línea. Si intentara desarrollar fuera de línea, terminaría con más objetos simulados de lo que sería razonable.
En el laboratorio más nuevo, generalmente puedo agregar funcionalidad desarrollándola fuera de línea en mi escritorio, burlándome solo de las cosas que se requieren de inmediato y luego solo pasando un corto tiempo en el laboratorio, solucionando los problemas restantes que no se solucionaron -línea.
Mi consejo
Parece que ha comenzado bien, cada vez que vaya a hacer grandes cambios en su flujo de trabajo de desarrollo, debe asegurarse de que todos participen en la toma de esa decisión, y lo ideal es que la mayoría de la gente lo haya aceptado. Según su pregunta, parece que lo ha entendido bien. Si la gente no tiene entusiasmo por la idea, está condenada al fracaso o a generar mala voluntad.
A menos que pueda presentar un caso comercial convincente, no recomendaría una implementación completa de pruebas unitarias y especificaciones para todo su sistema. Como mencioné anteriormente, si un sistema no está diseñado teniendo en cuenta las pruebas, puede ser muy difícil escribir pruebas automatizadas para él.
En cambio, recomendaría comenzar de a poco y usar la Regla de Boy Scout :
Siempre deje el campamento más limpio de lo que lo encontró.
Si mientras implementa algo en esta base de código, puede identificar las pruebas específicas requeridas para probar el comportamiento existente y la transición del comportamiento antiguo al nuevo, entonces ha documentado el cambio en las especificaciones y ha comenzado a implementar pruebas de unidades para tu sistema.
Los módulos que no toca no reciben pruebas unitarias, pero si no los toca, probablemente se deba a que ya se probaron exhaustivamente y no necesitan cambios, o nunca se usan.
Lo que desea evitar es desperdiciar una gran cantidad de esfuerzo del desarrollador escribiendo pruebas que nunca serán necesarias ( YAGNI funciona tan bien para el código de prueba como para el código de producción * 8 '), nunca volverá a usarse y desmoralizará a las personas pensando que las pruebas son inútiles después de todo.
Resumen
Comience de a poco, cree confianza en las pruebas de forma incremental y gane valor comercial al desarrollar pruebas cuando y donde beneficien más a su equipo.