Suponga que uno tiene un programa relativamente grande (digamos 900k SLOC en C #), todos comentados / documentados a fondo, bien organizados y funcionando bien. Todo el código base fue escrito por un único desarrollador senior que ya no está en la compañía. Todo el código se puede probar tal cual y se utiliza IoC en todo momento, excepto por alguna extraña razón por la que no escribieron ninguna prueba unitaria. Ahora, su empresa quiere ramificar el código y quiere que se agreguen pruebas unitarias para detectar cuándo los cambios rompen la funcionalidad principal.
- ¿Agregar pruebas es una buena idea?
- Si es así, ¿cómo podría uno comenzar con algo como esto?
EDITAR
Bien, entonces no esperaba respuestas con 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 demasiado útil en este caso en particular.
No creo que esté solo aquí contemplando escribir pruebas para un sistema heredado. Voy a mantener 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 dentro de un año más o menos con mis resultados.
CONCLUSIÓN
Entonces resulta que es básicamente imposible agregar una prueba unitaria al código existente con cualquier apariencia de ortodoxia. Una vez que el código está funcionando, obviamente no puede iluminar en rojo / en verde sus pruebas, por lo general no está claro qué comportamientos son importantes para probar, no está claro por dónde comenzar y ciertamente no está claro cuando haya terminado. Realmente, incluso hacer esta pregunta pierde el punto principal de escribir pruebas en primer lugar. En la mayoría de los casos, encontré que en realidad era más fácil reescribir el código usando TDD que descifrar las funciones previstas y agregar retroactivamente pruebas unitarias. Al solucionar un problema o agregar una nueva característica, es una historia diferente, y creo que este es el momento de agregar pruebas unitarias (como algunos señalan a continuación). Con el tiempo, la mayoría del código se reescribe, a menudo antes de lo que cabría esperar, adoptando este enfoque.