TDAD — Test-Driven Agentic Development
TDAD: Test-Driven Agentic Development Guide
Sección titulada «TDAD: Test-Driven Agentic Development Guide»Companion del AI Software Factory OS v7.7
Version: 1.0.0 | Fecha: Marzo 2026 Fuentes: arXiv:2603.17973 (Marzo 2026) — 70% reduccion de regresiones con dependency maps
1. Que es TDAD
Sección titulada «1. Que es TDAD»Test-Driven Agentic Development es la practica de construir y mantener un mapa de dependencias entre codigo fuente y tests para que los agentes autonomos sepan exactamente que tests verificar antes de commitear.
No es TDD clasico (escribir tests primero). Es una capa de inteligencia sobre los tests existentes: un indice que conecta cada archivo de codigo con los tests que lo cubren.
2. El Problema
Sección titulada «2. El Problema»Los agentes de desarrollo tienen dos comportamientos disfuncionales con los tests:
Escenario A: Ejecutar TODOS los tests
Sección titulada «Escenario A: Ejecutar TODOS los tests»- Despues de cada cambio, el agente corre
npm testopytest - En proyectos grandes: 5-30 minutos por ejecucion
- Feedback loop lento → el agente pierde contexto mientras espera
- Costo computacional alto en CI
Escenario B: No ejecutar NINGUNO
Sección titulada «Escenario B: No ejecutar NINGUNO»- El agente confia en que CI detectara los problemas
- Commitea codigo roto → CI falla → rollback → tiempo perdido
- Regresiones silenciosas que se acumulan
El resultado
Sección titulada «El resultado»- 70% de las regresiones en desarrollo agentico vienen de cambios no validados contra tests relevantes (arXiv:2603.17973)
3. La Solucion: Dependency Map
Sección titulada «3. La Solucion: Dependency Map»Un dependency map es un archivo que mantiene dos relaciones:
- source → tests: Para cada archivo de codigo, que tests lo cubren
- test → sources: Para cada test, que archivos de codigo depende
Cuando un agente modifica src/api/users.ts, consulta el map y ejecuta SOLO:
tests/api/users.test.tstests/integration/auth.test.ts
En lugar de los 847 tests del proyecto completo.
4. Como Construir el Dependency Map
Sección titulada «4. Como Construir el Dependency Map»Opcion A: Coverage-based (recomendada)
Sección titulada «Opcion A: Coverage-based (recomendada)»La mas precisa. Usa datos reales de ejecucion.
# 1. Correr tests con coverage (ejemplo: vitest)npx vitest run --coverage --coverage.reporter=json
# 2. Parsear coverage report para extraer file→test mappingpython3 scripts/build-test-map.py --from-coverage coverage/coverage-final.json
# 3. Output: test_dependency_map.yamlVentaja: Captura dependencias reales (incluyendo indirectas). Desventaja: Requiere correr toda la suite una vez.
Opcion B: Import-based (rapida)
Sección titulada «Opcion B: Import-based (rapida)»Analiza los imports de cada test file para inferir dependencias.
# Analizar imports estaticamentepython3 scripts/build-test-map.py --from-imports tests/Ventaja: Rapida, no requiere ejecucion. Desventaja: No captura dependencias indirectas ni runtime.
Opcion C: AI-assisted (complementaria)
Sección titulada «Opcion C: AI-assisted (complementaria)»Un LLM analiza el codigo y los tests para inferir dependencias no obvias.
# LLM analiza codigo + tests para dependencias semanticaspython3 scripts/build-test-map.py --ai-assisted --model claude-sonnet-4-5Ventaja: Captura dependencias semanticas que imports no revelan. Desventaja: No determinista, requiere validacion.
Recomendacion
Sección titulada «Recomendacion»Usar A + B combinadas. Opcion C como complemento para cubrir gaps.
5. Formato del Dependency Map
Sección titulada «5. Formato del Dependency Map»# Generado: 2026-03-28 | Metodo: coverage + imports# Actualizar semanalmente o cuando cambien tests
version: "1.0"generated_at: "2026-03-28T10:00:00Z"method: "coverage+imports"
source_to_tests: "src/api/users.ts": - "tests/api/users.test.ts" - "tests/integration/auth.test.ts" "src/api/billing.ts": - "tests/api/billing.test.ts" - "tests/e2e/checkout.test.ts" "src/services/email.ts": - "tests/services/email.test.ts" - "tests/integration/notifications.test.ts" "src/lib/validators.ts": - "tests/lib/validators.test.ts" - "tests/api/users.test.ts" - "tests/api/billing.test.ts"
# Archivos sin tests mapeados (requieren atencion)unmapped_sources: - "src/utils/logger.ts" - "src/config/constants.ts"6. Workflow del Agente con TDAD
Sección titulada «6. Workflow del Agente con TDAD»┌─────────────────────────────────────────────────┐│ 1. Agent recibe tarea: "Fix bug en billing" ││ 2. Agent modifica: src/api/billing.ts ││ 3. Agent consulta: test_dependency_map.yaml ││ 4. Map retorna: ││ - tests/api/billing.test.ts ││ - tests/e2e/checkout.test.ts ││ 5. Agent ejecuta SOLO esos 2 test files ││ 6. Tests pasan → commit ││ 7. Tests fallan → fix → re-run → retry │└─────────────────────────────────────────────────┘
Tiempo con TDAD: ~15 segundos (2 archivos)Tiempo sin TDAD: ~8 minutos (suite completa)Speedup: ~32x7. Integracion con OSSFIA
Sección titulada «7. Integracion con OSSFIA»7.1 Builder Agent (F06)
Sección titulada «7.1 Builder Agent (F06)»El builder agent lee el map antes de cada commit:
# En el skill de f06_build o fab_orchestrator# Paso pre-commit:# 1. Identificar archivos modificados (git diff --name-only)# 2. Consultar test_dependency_map.yaml# 3. Ejecutar tests relevantes# 4. Solo commitear si pasan7.2 Gate E — Test Quality (fab-gate-check.py)
Sección titulada «7.2 Gate E — Test Quality (fab-gate-check.py)»Gate E puede verificar que los tests relevantes pasaron:
- Obtener archivos modificados del PR
- Consultar el map para tests requeridos
- Verificar que esos tests estan en el reporte de CI
- Rechazar si faltan tests relevantes
7.3 CI Parallelization
Sección titulada «7.3 CI Parallelization»El map permite optimizar CI:
- Dividir tests por modulo segun el map
- Ejecutar en paralelo solo los grupos afectados
- Reducir tiempo de CI de 15 min a 3 min
7.4 Eval Workflow (F07)
Sección titulada «7.4 Eval Workflow (F07)»Integrar con el skill eval_workflow:
- El map alimenta la seleccion de tests para eval suites
- Detectar archivos sin cobertura de tests (unmapped_sources)
- Priorizar creacion de tests para archivos criticos sin map
8. Mantenimiento del Map
Sección titulada «8. Mantenimiento del Map»| Frecuencia | Accion | Metodo |
|---|---|---|
| Semanal | Regenerar map completo | Coverage-based (Opcion A) |
| En cada PR | Validar que archivos nuevos tienen tests | CI check |
| Mensual | Revisar unmapped_sources | Manual + AI-assisted |
| Trimestral | Evaluar precision del map vs regresiones reales | Metricas |
Senales de map degradado
Sección titulada «Senales de map degradado»unmapped_sourcescrece → falta cobertura- Tests que fallan no estan en el map del archivo modificado → map incompleto
- Map tiene mas de 30 dias → regenerar
9. Beneficios Medidos
Sección titulada «9. Beneficios Medidos»| Metrica | Sin TDAD | Con TDAD | Fuente |
|---|---|---|---|
| Regresiones por sprint | 12 | 3.6 | arXiv:2603.17973 |
| Tiempo de feedback | 5-30 min | 10-30 seg | Medicion interna |
| Tests ejecutados por commit | 100% suite | 5-15% relevantes | Dependency map |
| Costo de CI | $1.00/run | $0.15/run | Estimacion |
10. Referencias
Sección titulada «10. Referencias»- Paper: arXiv:2603.17973 — “Test-Driven Agentic Development” (Marzo 2026)
- Skills relacionados:
eval_workflow,f07_tevv,f06_build - Scripts relacionados:
fab-gate-check.py(Gate E),compliance-linter.py - Guias relacionadas:
Evals_Framework_Guide.md,Vibe_Coding_Practices_Guide.md