Test Drive Development (TDD)
Test-Driven Development (Desarrollo Guiado por Pruebas, TDD) es una metodología de desarrollo de software que se basa en el ciclo iterativo de escribir pruebas automatizadas antes de escribir la implementación del código. Este ciclo se conoce como el ciclo Red-Green-Refactor y consiste en los siguientes pasos:
- Red (Rojo):
- Escribir una Prueba (Test): Antes de comenzar a escribir el código de producción, se escribe una prueba que capture un nuevo requisito o mejora en el código existente. En este punto, la prueba fallará porque el código aún no ha sido implementado.
// Ejemplo en C# usando xUnit public class CalculadoraTests { [Fact] public void Sumar_DosNumeros_PositiveTest() { // Arrange Calculadora calculadora = new Calculadora(); // Act int resultado = calculadora.Sumar(2, 3); // Assert Assert.Equal(5, resultado); } }
- Escribir una Prueba (Test): Antes de comenzar a escribir el código de producción, se escribe una prueba que capture un nuevo requisito o mejora en el código existente. En este punto, la prueba fallará porque el código aún no ha sido implementado.
- Green (Verde):
- Escribir la Mínima Cantidad de Código para Hacer Pasar la Prueba: El objetivo en esta etapa es escribir la cantidad mínima de código necesario para que la prueba pase. No se busca perfección en este punto, solo que la prueba pase.
public class Calculadora { public int Sumar(int a, int b) { return a + b; } }
- Escribir la Mínima Cantidad de Código para Hacer Pasar la Prueba: El objetivo en esta etapa es escribir la cantidad mínima de código necesario para que la prueba pase. No se busca perfección en este punto, solo que la prueba pase.
- Refactor (Refactorizar):
- Mejorar el Código sin Cambiar su Comportamiento: Después de que la prueba ha pasado, se realiza la refactorización del código para mejorar su calidad sin cambiar su comportamiento. Esto asegura que el código sea mantenible y cumpla con estándares de diseño.
public class Calculadora { public int Sumar(int primerNumero, int segundoNumero) { return primerNumero + segundoNumero; } }
- Mejorar el Código sin Cambiar su Comportamiento: Después de que la prueba ha pasado, se realiza la refactorización del código para mejorar su calidad sin cambiar su comportamiento. Esto asegura que el código sea mantenible y cumpla con estándares de diseño.
Luego, el ciclo se repite para cada nueva funcionalidad o mejora. La idea fundamental detrás de TDD es que las pruebas unitarias actúan como especificaciones del código. Antes de escribir cualquier implementación, se definen las expectativas en forma de pruebas. Esto ayuda a garantizar que el código cumpla con los requisitos y a detectar errores temprano en el proceso de desarrollo.
Beneficios de TDD:
- Detección Temprana de Errores: Al escribir pruebas antes de la implementación, los errores se detectan en una etapa temprana del desarrollo.
- Mejora la Diseñabilidad: TDD promueve el diseño modular y la cohesión al centrarse en pequeñas unidades de código.
- Facilita el Refactorizado: Al tener una suite de pruebas sólida, se puede refactorizar el código con confianza, sabiendo que las pruebas actuarán como salvaguarda contra cambios inadvertidos.
- Documentación Ejecutable: Las pruebas unitarias actúan como documentación ejecutable que muestra cómo se espera que funcione el código.
- Aumenta la Confianza en el Código: TDD proporciona una red de seguridad continua, lo que aumenta la confianza en la robustez del código.
TDD es una práctica que puede requerir tiempo para familiarizarse, pero muchos desarrolladores encuentran que a largo plazo mejora la calidad del código y acelera el desarrollo.
https://softwarecrafters.io/javascript/tdd-test-driven-development
https://es.wikipedia.org/wiki/Desarrollo_guiado_por_pruebas
https://www.paradigmadigital.com/dev/tdd-como-metodologia-de-diseno-de-software/
https://www.xeridia.com/blog/beneficios-del-tdd-en-entornos-devops