Parece que escribir pruebas es un trabajo extra, da a las personas una muleta cuando escriben el código real y puede no ser efectivo con mucha frecuencia.
Las pruebas unitarias tienen valor como muleta. Es compatible con sus esfuerzos de desarrollo, lo que le permite cambiar su implementación sin temor a que su aplicación deje de funcionar según sea necesario. Las pruebas unitarias también son mucho más que una muleta, ya que le brindan una herramienta con la que puede validar que su implementación cumpla con los requisitos.
Todas las pruebas, ya sean pruebas unitarias, pruebas de aceptación, pruebas de integración, etc., son tan efectivas como las personas que las usan. Si aborda su trabajo de manera descuidada, sus pruebas serán descuidadas y su implementación tendrá problemas. ¿Entonces, para qué molestarse? Se molesta en probar porque necesita probarse a usted mismo y a sus clientes que su software funciona y no tiene ningún problema que pueda evitar que se use el software. Sí, las pruebas son definitivamente un trabajo extra, pero la forma en que realice las pruebas determinará cuánto esfuerzo necesitará para corregir los errores después del lanzamiento, y cuánto esfuerzo requerirá su código para cambiar y mantener.
Entiendo cómo funcionan las pruebas unitarias y cómo escribirlas, pero ¿alguien puede argumentar que es realmente una buena idea y que vale la pena el esfuerzo y el tiempo?
TDD, y realmente cualquier método que requiera que usted escriba pruebas antes de codificar toma el enfoque que puso en un esfuerzo temprano como un anticipo de la deuda técnica futura. A medida que trabaja en el proyecto, cualquier cosa que se pierda o que no se implemente bien incurrirá en una deuda más técnica en forma de una mayor dificultad de mantenimiento, que afecta directamente los costos futuros y los requisitos de recursos. Las pruebas por adelantado aseguran que no solo ha hecho un esfuerzo para abordar la deuda técnica futura, sino que también asegura que codifica sus requisitos de tal manera que puedan verificarse simplemente ejecutando su código. La prueba primero también le brinda la oportunidad de validar su comprensión del dominio del problema antes de comprometerse a resolver el problema en el código, y valida sus esfuerzos de implementación.
Realmente se trata de intentar maximizar el valor comercial de su código. El código que en gran medida no se ha probado y es difícil de mantener es generalmente barato y rápido de crear, y muy costoso de mantener durante la vida útil del producto después del lanzamiento. El código que se ha probado exhaustivamente a nivel de la unidad es generalmente más costoso de crear, pero su mantenimiento es relativamente bajo durante la vida útil del producto después del lanzamiento.
Además, ¿hay algo que haga que TDD sea especialmente bueno para SCRUM?
TDD no es específicamente bueno para ninguna metodología en particular. Es simplemente una herramienta. Una práctica que puede integrar en sus procesos de desarrollo para ayudarlo a lograr sus resultados específicos. Entonces, para responder a su pregunta, TDD es complementario a su método, ya sea SCRUM o cualquier otro enfoque.