Tu Fábrica Personal de Datos de Prueba: Usando LLMs para Romper tus Apps
Deja de usar datos de prueba genéricos y aburridos. Aprende cómo aprovechar los LLMs para generar datos complejos y realistas que te ayudarán a encontrar bugs antes que tus usuarios.
Seamos honestos. Una de las tareas más tediosas y menospreciadas del desarrollo es crear buenos datos de prueba. Durante años, hemos sobrevivido con `lorem ipsum`, nombres como 'John Doe' y scripts que generan cadenas de texto aleatorias. Funcionaba, más o menos. Pero el software de hoy es demasiado complejo para datos tan simples.
Te lo digo por experiencia: he visto interfaces romperse porque el nombre de un usuario real era mucho más largo que 'Test User'. He visto sistemas fallar porque nadie probó qué pasaba cuando un producto tenía 50 variantes en lugar de 3. Los datos de prueba mediocres no encuentran los *edge cases* interesantes, esos que tus usuarios descubrirán a los cinco minutos de usar tu app.
Por suerte, los tiempos están cambiando. Hoy tenemos una herramienta increíblemente potente para esto: los Modelos de Lenguaje Grandes (LLMs).
El problema con los datos de prueba de siempre
Antes de saltar a la solución, entendamos bien el problema. Los generadores de datos tradicionales o los datos escritos a mano suelen ser:
* Poco realistas: Nombres, direcciones y descripciones no se parecen en nada a los datos del mundo real. Esto no solo afecta las pruebas de lógica, sino también el aspecto visual de la UI. * Demasiado uniformes: No capturan la variedad y el caos de los datos de verdad. No hay valores nulos inesperados, ni caracteres especiales, ni esas combinaciones raras que solo un usuario real podría inventar. * Desconectados: Crear datos con relaciones complejas (un usuario con varios pedidos, cada pedido con varios productos y reseñas asociadas) es un infierno manual. Los scripts pueden hacerlo, pero mantenerlos es un trabajo en sí mismo.
Tu factoría de datos personal: LLMs al rescate
Imagina que en lugar de escribir un script para generar datos, simplemente los *describes* en lenguaje natural. Eso es exactamente lo que puedes hacer con un LLM como GPT-4, Llama 3 o Claude.
Empecemos con algo sencillo. Necesitas una lista de 10 usuarios para tu base de datos. En lugar de inventártelos, le pides esto al LLM:
Genera una lista de 10 perfiles de usuario ficticios en formato JSON. Cada usuario debe tener:
- un 'id' (UUID v4)
- un 'nombreCompleto' realista (considera nombres de diferentes culturas)
- un 'email' único y válido
- una 'fechaDeRegistro' en formato ISO 8601 del último año
- un campo 'activo' (booleano)
En segundos, obtienes un array JSON perfecto, listo para importar. La clave aquí es la especificidad. Le has dicho el formato, los campos, los tipos de datos e incluso le has dado restricciones (nombres realistas, fechas del último año).
Subiendo el nivel: Datos relacionales y complejos
Aquí es donde la magia realmente ocurre. Digamos que estás construyendo un e-commerce. Necesitas productos, usuarios y reseñas que conecten a ambos. Intentar hacer esto a mano es una locura.
Con un LLM, puedes plantear un prompt más ambicioso:
Crea un conjunto de datos de prueba para un e-commerce en formato JSON. Necesito:1. Un array llamado 'usuarios' con 5 usuarios. Cada uno con 'idUsuario' (entero incremental) y 'nombre'. 2. Un array llamado 'productos' con 3 productos. Cada uno con 'idProducto' (entero incremental), 'nombreProducto' y 'precio'. 3. Un array llamado 'reseñas' con 10 reseñas. Cada reseña debe tener: - 'idReseña' (entero incremental) - 'idUsuario' que corresponda a uno de los usuarios creados. - 'idProducto' que corresponda a uno de los productos creados. - 'calificacion' (un número del 1 al 5). - 'comentario' (un texto de 1 a 3 frases, con tono variable: algunos positivos, otros negativos, alguno neutro).
Asegúrate de que los 'idUsuario' y 'idProducto' en las reseñas sean consistentes con los IDs generados en los arrays de usuarios y productos. ```
El resultado es un objeto JSON con tres listas de datos interconectados y coherentes. Has generado un universo de datos en miniatura con una simple petición. Esto es un cambio de paradigma total para las pruebas de integración y E2E.
Consejos de trinchera para no fallar
He pasado bastante tiempo usando esta técnica y he aprendido algunas cosas por el camino:
* Sé absurdamente específico: No dejes nada a la imaginación del LLM. Especifica formatos de fecha, longitud de cadenas, rangos de números, posibles valores para un enum, etc. Cuanto más guíes al modelo, mejor será el resultado. * Pide el formato que necesitas: No te conformes con texto plano. Pide explícitamente `JSON`, `CSV`, `XML` o `SQL INSERT statements`. Te ahorrará horas de parsing. * Itera sobre tu prompt: Tu primer prompt no será perfecto. Trátalo como si fuera código. Ejecútalo, mira el resultado, ajústalo y vuelve a intentarlo. Guarda tus prompts finales en tu repositorio para poder regenerar los datos cuando quieras. * Usa 'few-shot prompting': Si quieres un formato muy específico, dale un ejemplo. Empieza tu prompt con `"Aquí tienes un ejemplo de cómo quiero la salida: ... Ahora, genera 10 más como este."`. Funciona de maravilla. * Controla la 'temperatura': Si usas la API de un LLM, juega con el parámetro `temperature`. Un valor bajo (ej. 0.2) te dará resultados más predecibles y consistentes, ideal para datos estructurados. Un valor más alto (ej. 0.8) te dará más creatividad, útil para generar textos de comentarios variados. * Considera el coste y las herramientas locales: Usar APIs como la de OpenAI tiene un coste (aunque suele ser mucho menor que el tiempo de un desarrollador). Para tareas más sencillas o si la privacidad es una preocupación, puedes usar modelos locales con herramientas como `Ollama`. ¡Es gratis!
El futuro es descriptivo
Estamos dejando atrás la era de *programar* nuestros datos de prueba para entrar en la era de *describirlos*. Esto no solo nos ahorra una cantidad ingente de tiempo, sino que nos permite crear escenarios de prueba mucho más ricos y realistas.
La próxima vez que te enfrentes a una pantalla vacía y necesites poblar una base de datos, no abras un generador de 'lorem ipsum'. Abre una conversación con un LLM y pídele exactamente lo que necesitas. Tus pruebas, tu producto y tus usuarios te lo agradecerán.