tdd-cycle
npx machina-cli add skill 686f6c61/alfred-dev/tdd-cycle --openclawCiclo TDD (Test-Driven Development)
Resumen
Este skill implementa el ciclo rojo-verde-refactor de TDD de forma estricta. La regla fundamental es que no se escribe ni una línea de código de producción sin un test que falle primero. Esto no es una sugerencia, es un HARD-GATE: si no hay test fallando, no se escribe implementación.
El TDD no es solo una técnica de testing, es una técnica de diseño. Escribir el test primero obliga a pensar en la interfaz pública antes que en la implementación, lo que produce código más limpio y con menor acoplamiento.
Proceso
Paso 1: Rojo - escribir un test que falle
- Escribir un único test que describa el comportamiento esperado.
- El test debe ser específico: probar UN aspecto del comportamiento, no varios.
- Nombrar el test de forma descriptiva:
deberia_devolver_error_cuando_email_es_invalido, notest1. - El test debe fallar por la razón correcta (el código no existe o no implementa el comportamiento), no por un error de sintaxis.
Paso 2: Ejecutar y verificar que falla
- HARD-GATE: ejecutar el test y confirmar que falla.
- Verificar que el mensaje de error es el esperado. Si el test falla por una razón distinta a la esperada, corregir el test antes de continuar.
- Este paso no se puede saltar. Un test que pasa sin implementación significa que el test no está probando nada útil.
Paso 3: Verde - implementación mínima
- Escribir el mínimo código necesario para que el test pase.
- "Mínimo" significa literalmente lo mínimo. Si el test espera que una función devuelva
true, devolvertruedirectamente es válido en este paso. - No anticipar requisitos futuros. No añadir lógica que ningún test pide.
- No preocuparse por la elegancia del código en este paso.
Paso 4: Ejecutar y verificar que pasa
- Ejecutar todos los tests (no solo el nuevo) y verificar que pasan.
- Si algún test existente se rompe, corregir la implementación sin cambiar los tests existentes (salvo que haya un test mal escrito).
- HARD-GATE: no avanzar hasta que todos los tests estén en verde.
Paso 5: Refactorizar
- Ahora, con la red de seguridad de los tests, mejorar el código.
- Eliminar duplicación, mejorar nombres, extraer funciones, simplificar condicionales.
- Ejecutar los tests después de cada cambio de refactoring para asegurar que no se rompe nada.
- La refactorización no cambia comportamiento, solo estructura.
Paso 6: Commit atómico
- Hacer commit del test y la implementación juntos. El commit debe ser atómico: si se revierte, el proyecto sigue en un estado consistente.
- Formato del commit:
feat: [descripción]otest: [descripción]según corresponda. - Volver al paso 1 con el siguiente comportamiento a implementar.
Criterios de éxito
- No existe código de producción sin un test correspondiente que lo valide.
- Cada test se ha visto fallar antes de escribir la implementación.
- Los tests son independientes entre sí (no dependen de orden de ejecución ni de estado compartido).
- El refactoring se ha realizado con todos los tests en verde.
- Los commits son atómicos y cada uno deja el proyecto en estado funcional.
Source
git clone https://github.com/686f6c61/alfred-dev/blob/main/skills/desarrollo/tdd-cycle/SKILL.mdView on GitHub Overview
Este skill aplica el ciclo rojo-verde-refactor de TDD de forma estricta: no se escribe código de producción sin un test que falle primero. Esta disciplina de diseño prioriza interfaces claras y reduce el acoplamiento al pensar en el comportamiento esperado antes de implementar.
How This Skill Works
El flujo es Rojo - escribir un test que falle, Verde - implementar la mínima funcionalidad para que el test pase y Refactorizar - mejorar la estructura sin cambiar el comportamiento. Es un HARD-GATE: no se produce código de producción sin un test que falle primero; tras cada ciclo, se ejecutan todos los tests y se realiza un commit atómico.
When to Use It
- Cuando diseñas una API pública antes de escribir código de producción.
- Para forzar un contrato público claro y evitar implementaciones prematuras.
- Al introducir una funcionalidad nueva crítica para el negocio, donde el comportamiento debe estar respaldado por tests.
- En la refactorización de código legado para asegurar que el comportamiento existente se mantiene.
- Cuando es importante mantener commits atómicos que combinen tests y código correspondientes.
Quick Start
- Step 1: Rojo - escribe un test que falle describiendo el comportamiento esperado.
- Step 2: Verde - implementa la mínima funcionalidad para que el test pase.
- Step 3: Refactor - ejecuta todos los tests, refactoriza y haz un commit atómico.
Best Practices
- Escribe un test único que describa un comportamiento concreto.
- Asegúrate de que el test falle por la razón esperada antes de continuar.
- Mantén la implementación Verde mínima y evita anticipar futuras necesidades.
- Ejecuta toda la batería de tests tras cada cambio.
- Realiza commits atómicos que incluyan tests y código correspondientes.
Example Use Cases
- Validar que una función de validación de email devuelve un error cuando el email es inválido.
- Añadir una nueva validación de negocio mediante un test que falle al principio.
- Crear una API de usuario con una prueba de contrato de interfaz y luego implementar.
- Refactorizar un servicio de autenticación manteniendo el comportamiento con tests existentes.
- Hacer un commit atómico tras cada ciclo Rojo-Verde-Refactor.