Supongamos que uno tiene un programa relativamente grande (digamos 900k SLOC en C #), todo comentado / documentado a fondo, bien organizado y funcionando bien. El código base completo fue escrito por un único desarrollador senior que ya no está en la empresa. Todo el código es verificable tal como está y IoC se usa en todas partes, excepto por alguna extraña razón por la que no escribieron ninguna prueba unitaria. Ahora, su empresa desea ramificar el código y desea que se agreguen pruebas unitarias para detectar cuándo los cambios rompen la funcionalidad principal.
- ¿Es una buena idea agregar pruebas?
- Si es así, ¿cómo se podría empezar con algo como esto?
EDIT
Bien, entonces no esperaba respuestas haciendo buenos argumentos para conclusiones opuestas. El problema puede estar fuera de mis manos de todos modos. También he leído las "preguntas duplicadas" y el consenso general es que "escribir exámenes es bueno" ... sí, pero no es muy útil en este caso en particular.
No creo que esté solo aquí al contemplar las pruebas de escritura para un sistema heredado. Mantendré las métricas sobre cuánto tiempo se gasta y cuántas veces las nuevas pruebas detectan problemas (y cuántas veces no lo hacen). Volveré y actualizaré esto en un año más o menos a partir de ahora con mis resultados.
CONCLUSION
Resulta que es básicamente imposible simplemente agregar una prueba de unidad al código existente con cualquier apariencia de ortodoxia. Una vez que el código está funcionando, es obvio que no puede hacer una luz roja / luz verde en sus pruebas, por lo general no está claro qué comportamientos son importantes para probar, no está claro por dónde empezar y, por supuesto, no está claro cuándo termina. Realmente, incluso hacer esta pregunta pierde el punto principal de escribir pruebas en primer lugar. En la mayoría de los casos, me resultó más fácil reescribir el código usando TDD que descifrar las funciones deseadas y agregar retroactivamente las pruebas unitarias. Cuando se soluciona un problema o se agrega una nueva característica, es una historia diferente, y creo que este es el momento de agregar pruebas unitarias (como se señala a continuación). Con el tiempo, la mayoría de los códigos se reescriben, a menudo antes de lo que esperabas. Al utilizar este enfoque, he podido agregar cobertura de prueba a una parte sorprendentemente grande del código base existente.