Parece que escribir pruebas es un trabajo extra, le da a las personas una muleta cuando escriben el código real y es posible que no sea muy efectivo con mucha frecuencia.
La prueba de la unidad tiene 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 cumple 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 forma descuidada, sus pruebas serán descuidadas y su implementación tendrá problemas. ¿Entonces, para qué molestarse? Se molesta en las pruebas porque necesita probarse a sí mismo y a sus clientes que su software funciona y no tiene ningún problema que pueda impedir que se use el software. Sí, las pruebas son definitivamente un trabajo extra, pero la forma en que las pruebas determinarán cuánto esfuerzo necesitarás poner para corregir errores después de la publicación y cuánto esfuerzo requerirá cambiar y mantener tu código.
Entiendo cómo funcionan las pruebas unitarias y cómo escribirlas, pero ¿puede alguien afirmar que realmente es una buena idea y que vale la pena el esfuerzo y el tiempo?
TDD, y en realidad, cualquier método que requiera que usted escriba pruebas antes de codificar adopta el enfoque que realizó en un esfuerzo inicial como pago inicial de deuda técnica futura. A medida que trabaje en el proyecto, todo lo que se pierda o no se implemente bien incurrirá en más deuda 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 haya hecho un esfuerzo para abordar futuras deudas técnicas, sino que también garantiza que codifique sus requisitos de tal manera que puedan verificarse simplemente ejecutando su código. La primera prueba 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 en el nivel de la unidad es generalmente más costoso de crear, pero su costo es relativamente pequeño 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 complementa su método, ya sea SCRUM o cualquier otro enfoque.