IA para la generación de pruebas: dónde ayuda y dónde miente

La IA escribe pruebas rápido. También escribe pruebas que parecen reales pero verifican las cosas incorrectas. Puede que veas aumentar tu cobertura, pero tu código seguirá fallando.

La IA es excelente para ciertas tareas. Úsala para:

  • Extrapolar a partir de un buen ejemplo. Si escribes una prueba perfecta, la IA puede escribir diez más con tu estilo exacto.
  • Gestionar la escritura repetitiva. Úsala para bloques de configuración (setup), de limpieza (teardown) y ayudantes de fábrica (factory helpers).
  • Crear la estructura inicial (scaffolding). Te lleva al editor más rápido que un archivo en blanco.

El peligro comienza cuando dejas que la IA decida el "contrato".

Si le das a la IA una función y le pides pruebas, lee el código y prueba lo que el código hace actualmente. No prueba lo que el código debería hacer. Esto crea un bucle cerrado. La IA hace una suposición, escribe el código y luego escribe pruebas que coinciden con esa misma suposición.

Cuando los errores llegan a producción, es porque la suite de pruebas estaba del lado del error.

Cuidado con estas tres trampas:

  1. Pruebas ligadas a la implementación La IA suele probar las rutas lógicas en lugar de las reglas de negocio. Si cambias un pequeño detalle interno, las pruebas fallan incluso si el resultado sigue siendo correcto. Esto convierte la refactorización en una pesadilla.

  2. Casos de borde superficiales La IA es buena probando nulos, cadenas vacías y ceros. Estos son obvios. No puede encontrar los "límites del dominio". No conoce tus errores específicos de zona horaria, las peculiaridades de tu base de datos o tus reglas de negocio únicas.

  3. Mocks frágiles A la IA le encanta simularlo (mock) todo. Esto conlleva dos problemas:

  • El mock es incorrecto. Imita una versión falsa de una API que no coincide con la realidad.
  • El mock congela la implementación. Prueba cómo tu código llama a otras funciones en lugar de probar el resultado final.

Cómo usar la IA correctamente:

Mantén la "intención" fuera del alcance de la IA.

  • Escribe el contrato primero. Escribe una frase en lenguaje natural para cada prueba. Ejemplo: "Los códigos expirados deben devolver el monto original".
  • Pásale esas frases a la IA. Deja que escriba las aserciones, pero tú proporciona el significado.
  • Haz mocks en los límites. Solo simula APIs externas o bases de datos. Usa versiones reales de tus propios módulos internos.
  • Escribe un caso de borde del dominio a mano. Cada vez que termines una función, escribe la única cosa que te asusta. Úsala como prompt para la IA.

La IA es una herramienta de productividad, no un reemplazo para el pensamiento. Úsala para escribir el cuerpo de la prueba, pero nunca dejes que decida para qué sirve la prueba.

Source: https://dev.to/nazar_boyko/ai-for-test-generation-where-it-helps-and-where-it-lies-jhm

Optional learning community: https://t.me/GyaanSetuAi