¿Qué hace Desarrollo Guiado por Pruebas?
Construye funcionalidades y corrige errores una rebanada vertical a la vez, usando las pruebas como bucle de retroalimentación.
Principio central
Las pruebas verifican el comportamiento a través de interfaces públicas, no detalles de implementación. Si refactorizas y la prueba se rompe sin que cambie el comportamiento, la prueba estaba mal.
Antipatrón: rebanadas horizontales
No escribas todas las pruebas primero, luego toda la implementación. Escribe una prueba, haz que pase, luego repite.
Incorrecto: PRUEBA roja prueba1, prueba2, prueba3 -> VERDE impl1, impl2, impl3
Correcto: PRUEBA roja prueba1 -> VERDE impl1 -> PRUEBA roja prueba2 -> VERDE impl2 -> ...
Flujo de trabajo
1. Planificar
- Confirma los cambios de interfaz con el usuario.
- Confirma qué comportamientos probar. No puedes probar todo.
- Enumera los comportamientos como resultados observables, no pasos de implementación.
- Obtén la aprobación del usuario antes de escribir código.
2. Bala trazadora
Escribe una prueba para un comportamiento. Obsérvala fallar. Escribe el código mínimo para que pase.
3. Bucle incremental
Para cada comportamiento restante:
- Escribe la siguiente prueba.
- Haz que pase con código mínimo.
- No anticipes pruebas futuras.
4. Refactorizar
Después de que todas las pruebas pasen:
- Extrae duplicación.
- Profundiza módulos: interfaz pequeña, implementación profunda.
- Ejecuta pruebas después de cada paso de refactorización.
Nunca refactorices mientras esté en ROJO.
Lista de verificación por ciclo
- La prueba describe comportamiento, no implementación.
- La prueba usa la interfaz pública.
- La prueba sobreviviría a una refactorización interna.
- El código es mínimo para esta prueba.
- No se agregaron características especulativas.
Reglas
- Escribe pruebas antes de la implementación para nuevo comportamiento.
- Usa sugerencias de tipo y nombres claros.
- Mantén las funciones pequeñas y de un solo propósito.
- Falla rápido con mensajes de error claros.