Cómo enseñar a agentes de IA a escribir mejores tests con TDD

Fuentes: My Agent Skill for Test-Driven Development
Imagen generada por IA con el prompt: A clean editorial illustration of a laptop screen showing test code with green checkmarks, a subtle neural network pattern woven into the background, blue and white tones, minimalist style
Imagen generada con IA

Los agentes de IA, en el momento de escribir este artículo, suelen ser malos escribiendo tests: las pruebas que generan tienden a ser vagas, crípticas, excesivamente complicadas, chapuceras, desorganizadas, tautológicas, performativas, superficiales o directamente inútiles. El autor, Jason Swett, atribuye el problema a que los modelos aprenden de ejemplos humanos, y muchos de esos ejemplos —incluidos los que se enseñan en tutoriales— son de baja calidad.

Swett ha comprobado que, con una guía adecuada, los agentes pueden seguir un proceso de TDD racional y producir tests claros y significativos. La versión corta de esa guía es el Canon TDD de Kent Beck: con la simple instrucción de "seguir el Canon TDD de Kent Beck", el agente ya cubre aproximadamente el 60% del camino. La versión completa está recogida en su skill personal de TDD, publicada en GitHub como un documento vivo.

El núcleo de la skill es el bucle specify-encode-fulfill (SEF), alternativa personal de Swett al clásico red-green-refactor. Consta de tres pasos: especificar los requisitos, codificarlos como tests automatizados y escribir solo el código mínimo necesario para cumplirlos, evitando el speculative coding. Por debajo de SEF se sitúa el Canon TDD de Kent Beck, reformulado por Swett en los siguientes términos: hacer una lista de especificaciones, convertir cada una en un test, modificar el código solo lo justo para que desaparezca el fallo actual, refactorizar opcionalmente (siempre tras un commit del cambio de comportamiento) y repetir el ciclo hasta vaciar la lista.

Como la skill de TDD no gobierna el diseño de los tests, Swett la complementa con una skill de Test Design Review que lanza un agente independiente para detectar violaciones de principios de diseño, como tests centrados en medios en lugar de fines. Además, ejecuta una Software Design Review sobre las pruebas, ya que muchos problemas de diseño de tests son, en el fondo, problemas de diseño de software.

Un hallazgo sorprendente: una instrucción en la skill que sugiere que la dificultad para escribir un test puede indicar la necesidad de "limpiar la cocina antes de cocinar" ha sido adoptada con entusiasmo por Claude, que ahora se detiene con frecuencia para proponer refactorizaciones pendientes —y casi siempre acierta.

Swett concluye que las mayores ganancias de productividad con IA se obtienen al combinar la herramienta con principios intemporales —en este caso, los fundamentos de TDD y diseño de tests, establecidos hace décadas y tan vigentes hoy como entonces.