4 min lectura • Guide 832 of 877
Workflow de Test-Driven Development
Los tests guían el diseño. GitScrum ayuda a equipos a trackear adopción de TDD y medir el impacto de prácticas test-first en calidad y velocity.
Fundamentos de TDD
CICLO DE TDD:
┌─────────────────────────────────────────────────────────────┐
│ │
│ EL CICLO: │
│ ───────── │
│ │
│ ┌─────────────────────────────────────┐ │
│ │ │ │
│ │ ┌────────┐ │ │
│ │ │ RED │ Escribe test que falla│ │
│ │ └───┬────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌────────┐ │ │
│ │ │ GREEN │ Hazlo pasar │ │
│ │ └───┬────┘ (código mínimo) │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌────────┐ │ │
│ └────┤REFACTOR│ Mejora diseño │ │
│ └────────┘ (tests siguen pasando)│ │
│ │
│ ─────────────────────────────────────────────────────────── │
│ │
│ PASO 1 - RED: │
│ Escribe test para comportamiento que no existe aún │
│ Ejecútalo → Falla (prueba que test funciona) │
│ │
│ PASO 2 - GREEN: │
│ Escribe solo el código suficiente para pasar el test │
│ No sobre-ingenierar, no optimizar │
│ Solo hazlo funcionar │
│ │
│ PASO 3 - REFACTOR: │
│ Ahora mejora el código │
│ Elimina duplicación, clarifica nombres, mejora diseño │
│ Tests aseguran que no rompiste nada │
│ │
│ REPITE para cada pequeño pedazo de comportamiento │
└─────────────────────────────────────────────────────────────┘
Ejemplo de Workflow
EJEMPLO DE TDD:
┌─────────────────────────────────────────────────────────────┐
│ │
│ FEATURE: Calcular total de orden con descuento │
│ │
│ ─────────────────────────────────────────────────────────── │
│ │
│ PASO 1 - RED (Escribe test que falla): │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ def test_apply_discount(): ││
│ │ order = Order(subtotal=100) ││
│ │ order.apply_discount(10) # 10% ││
│ │ assert order.total == 90 ││
│ │ ││
│ │ # CORRE → FALLA (Order no existe aún) ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ PASO 2 - GREEN (Hazlo pasar): │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ class Order: ││
│ │ def __init__(self, subtotal): ││
│ │ self.subtotal = subtotal ││
│ │ self.total = subtotal ││
│ │ ││
│ │ def apply_discount(self, percent): ││
│ │ self.total = self.subtotal * (1 - percent/100) ││
│ │ ││
│ │ # CORRE → PASA ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ PASO 3 - REFACTOR: │
│ Mejora nombres, estructura si es necesario │
│ Tests siguen pasando │
│ │
└─────────────────────────────────────────────────────────────┘
Cuándo Usar TDD
CUÁNDO USAR TDD:
┌─────────────────────────────────────────────────────────────┐
│ │
│ ✅ BUENO PARA TDD: │
│ • Lógica de negocio │
│ • Algoritmos │
│ • Data transformations │
│ • API endpoints │
│ • Código con requisitos claros │
│ │
│ ⚠️ TDD ES OPCIONAL PARA: │
│ • Prototipos exploratorios │
│ • UI layout/styling │
│ • Spikes de investigación │
│ • Código descartable │
│ │
│ DESPUÉS DE EXPLORAR → VUELVE A TDD │
└─────────────────────────────────────────────────────────────┘