Ir al contenido

TDAD — Test-Driven Agentic Development

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

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.

Los agentes de desarrollo tienen dos comportamientos disfuncionales con los tests:

  • Despues de cada cambio, el agente corre npm test o pytest
  • En proyectos grandes: 5-30 minutos por ejecucion
  • Feedback loop lento → el agente pierde contexto mientras espera
  • Costo computacional alto en CI
  • El agente confia en que CI detectara los problemas
  • Commitea codigo roto → CI falla → rollback → tiempo perdido
  • Regresiones silenciosas que se acumulan
  • 70% de las regresiones en desarrollo agentico vienen de cambios no validados contra tests relevantes (arXiv:2603.17973)

Un dependency map es un archivo que mantiene dos relaciones:

  1. source → tests: Para cada archivo de codigo, que tests lo cubren
  2. 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.ts
  • tests/integration/auth.test.ts

En lugar de los 847 tests del proyecto completo.

La mas precisa. Usa datos reales de ejecucion.

Ventana de terminal
# 1. Correr tests con coverage (ejemplo: vitest)
npx vitest run --coverage --coverage.reporter=json
# 2. Parsear coverage report para extraer file→test mapping
python3 scripts/build-test-map.py --from-coverage coverage/coverage-final.json
# 3. Output: test_dependency_map.yaml

Ventaja: Captura dependencias reales (incluyendo indirectas). Desventaja: Requiere correr toda la suite una vez.

Analiza los imports de cada test file para inferir dependencias.

Ventana de terminal
# Analizar imports estaticamente
python3 scripts/build-test-map.py --from-imports tests/

Ventaja: Rapida, no requiere ejecucion. Desventaja: No captura dependencias indirectas ni runtime.

Un LLM analiza el codigo y los tests para inferir dependencias no obvias.

Ventana de terminal
# LLM analiza codigo + tests para dependencias semanticas
python3 scripts/build-test-map.py --ai-assisted --model claude-sonnet-4-5

Ventaja: Captura dependencias semanticas que imports no revelan. Desventaja: No determinista, requiere validacion.

Usar A + B combinadas. Opcion C como complemento para cubrir gaps.

test_dependency_map.yaml
# 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"
┌─────────────────────────────────────────────────┐
│ 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: ~32x

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 pasan

7.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

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

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
FrecuenciaAccionMetodo
SemanalRegenerar map completoCoverage-based (Opcion A)
En cada PRValidar que archivos nuevos tienen testsCI check
MensualRevisar unmapped_sourcesManual + AI-assisted
TrimestralEvaluar precision del map vs regresiones realesMetricas
  • unmapped_sources crece → falta cobertura
  • Tests que fallan no estan en el map del archivo modificado → map incompleto
  • Map tiene mas de 30 dias → regenerar
MetricaSin TDADCon TDADFuente
Regresiones por sprint123.6arXiv:2603.17973
Tiempo de feedback5-30 min10-30 segMedicion interna
Tests ejecutados por commit100% suite5-15% relevantesDependency map
Costo de CI$1.00/run$0.15/runEstimacion
  • 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