Introducción al Prompt Engineering para QA

La Inteligencia Artificial ha revolucionado las pruebas de software, pero obtener resultados útiles de los modelos de IA requiere dominar el arte de la ingeniería de prompts. Como profesional de QA, saber cómo crear prompts efectivos puede mejorar dramáticamente tu productividad al trabajar con herramientas como ChatGPT, GitHub Copilot (como se discute en AI Copilot for Test Automation: GitHub Copilot, Amazon CodeWhisperer and the Future of QA) o asistentes de IA especializados en pruebas.

La ingeniería de prompts es la práctica de diseñar entradas que guían a los modelos de IA para producir las salidas deseadas. En QA, esta habilidad transforma la IA de una novedad en una herramienta práctica que ayuda con la generación de casos de prueba, análisis de bugs, documentación y creación de código de automatización.

Este artículo te enseñará técnicas probadas para crear prompts efectivos de IA específicamente adaptados para tareas de aseguramiento de calidad, con ejemplos del mundo real y mejores prácticas.

Comprendiendo el Comportamiento del Modelo de IA

Cómo los Modelos de Lenguaje Procesan Solicitudes de QA

Antes de crear prompts, comprende cómo los modelos de IA interpretan las consultas relacionadas con QA:

  • Ventana de contexto: Los modelos tienen memoria limitada (típicamente 4K-128K tokens). Proporciona el contexto esencial primero.
  • Sesgo de entrenamiento: Los modelos se entrenan con datos diversos pero pueden favorecer ciertos enfoques de prueba sobre otros.
  • Determinismo: El mismo prompt puede producir diferentes salidas. Usa controles de temperatura para consistencia.
  • Conocimiento del dominio: Los modelos conocen prácticas generales de QA pero pueden carecer de especificidades sobre tu stack tecnológico.

Errores Comunes en Prompts de QA

ErrorEjemploImpacto
Requisitos vagos“Genera pruebas para login”Casos de prueba genéricos, incompletos
Falta de contexto“Escribe código Selenium”Código que no coincide con tu framework
Alcance ambiguo“Prueba esta funcionalidad”Cobertura de pruebas desenfocada o excesiva
Sin formato de salida“Crea casos de prueba”Estructura inconsistente, difícil de usar

Técnicas Básicas de Prompt Engineering

1. El Patrón CONTEXTO-TAREA-FORMATO

Esta estructura de tres partes asegura respuestas completas y accionables:

CONTEXTO: [Información de fondo sobre tu sistema]
TAREA: [Acción específica que quieres que realice la IA]
FORMATO: [Cómo quieres que se estructure la salida]

Ejemplo:

CONTEXTO: Plataforma de comercio electrónico con frontend React, backend Node.js, base de datos PostgreSQL.
El flujo de registro de usuario incluye verificación de email (como se discute en [AI Code Smell Detection: Finding Problems in Test Automation with ML](/blog/ai-code-smell-detection)) y login social opcional (Google, Facebook).

TAREA: Genera escenarios de prueba positivos y negativos para la funcionalidad de registro de usuario.

FORMATO: Proporciona casos de prueba en sintaxis Gherkin con estructura Given-When-Then,
organizados por prioridad (Crítico, Alto, Medio).

2. Few-Shot Learning para Generación de Pruebas

Proporciona ejemplos de la salida deseada para guiar a la IA:

Genera casos de prueba API siguiendo este patrón:

Ejemplo 1:
Prueba: GET /api/users/{id} - Usuario válido
Precondición: El ID de usuario 123 existe
Solicitud: GET /api/users/123
Esperado: 200 OK, retorna objeto usuario con id, name, email
Validación: El esquema de respuesta coincide con UserDTO, rendimiento < 100ms

Ejemplo 2:
Prueba: GET /api/users/{id} - Usuario inexistente
Precondición: El ID de usuario 999 no existe
Solicitud: GET /api/users/999
Esperado: 404 Not Found, mensaje de error "User not found"
Validación: La respuesta de error sigue el formato estándar de error

Ahora genera casos de prueba similares para el endpoint POST /api/users.

3. Prompting Basado en Roles

Asigna a la IA un rol específico para alinear sus respuestas con experiencia en QA:

Actúa como un ingeniero senior de automatización de pruebas con 10 años de experiencia en Python y Pytest.

Nuestro proyecto usa:
- Framework Pytest con fixtures
- Patrón Page Object Model
- Selenium (como se discute en [AI-powered Test Generation: The Future Is Already Here](/blog/ai-powered-test-generation)) WebDriver 4.x
- Reportes Allure

Revisa este código de prueba y sugiere mejoras para mantenibilidad y confiabilidad:

[pega tu código de prueba]

Enfócate en: uso de fixtures, estrategias de espera, manejo de errores, y gestión de datos de prueba.

4. Prompts Impulsados por Restricciones

Especifica limitaciones para obtener soluciones enfocadas y prácticas:

Crea una estrategia de automatización de pruebas para nuestra app móvil con estas restricciones:

RESTRICCIONES:
- Presupuesto: $0 (solo herramientas gratuitas/open-source)
- Equipo: 2 ingenieros QA, experiencia limitada en programación
- Plazo: 3 meses para implementar
- Objetivo de cobertura: Solo flujos críticos de usuario
- Plataformas: Android e iOS

Recomienda herramientas, enfoque, y un roadmap de 3 meses.

Prompts Prácticos para Tareas Comunes de QA

Generación de Casos de Prueba

Análisis de Valores Límite:

Genera casos de prueba de valores límite para la siguiente función:

Función: calculateShippingCost(weight, distance)
- weight: 0.1 a 50.0 kg (decimal)
- distance: 1 a 5000 km (entero)
- Retorna: costo de envío en USD

Incluye: mínimo, máximo, justo debajo/encima de límites, y valores típicos.
Formato como tabla con columnas: ID Prueba, Peso, Distancia, Resultado Esperado, Categoría.

Pruebas de Transición de Estados:

Crea casos de prueba de transición de estados para un sistema de gestión de pedidos:

Estados: Creado → Confirmado → Enviado → Entregado → Completado
Flujos alternativos: Cualquier estado → Cancelado, Entregado → Devuelto

Incluye: transiciones válidas, transiciones inválidas, casos límite.
Proporciona como: diagrama de estados (sintaxis Mermaid) + tabla de casos de prueba.

Análisis y Clasificación de Bugs

Prompt de Análisis de Causa Raíz:

Analiza este reporte de bug y sugiere causas raíz potenciales:

REPORTE DE BUG:
Título: Checkout falla intermitentemente en Safari móvil
Frecuencia: ~30% de los intentos
Entorno: iOS 15+, navegador Safari
Pasos: Agregar artículo al carrito → Proceder al checkout → Ingresar detalles de pago → Click en "Realizar Pedido"
Real: Cargador girando, sin respuesta, consola muestra "Network request failed"
Esperado: Página de confirmación de pedido

Sistema: React SPA, REST API, almacén de sesiones Redis, base de datos PostgreSQL

Proporciona:
1. Top 3 causas raíz probables con estimaciones de probabilidad
2. Áreas específicas a investigar (frontend, backend, red, etc.)
3. Pasos de diagnóstico para confirmar cada hipótesis
4. Pruebas rápidas para reproducir

Generación de Datos de Prueba

Creación de Dataset Realista:

Genera datos de prueba realistas para perfiles de usuario con estos requisitos:

ESQUEMA:
- userId: UUID
- email: formato válido, mix de dominios
- firstName, lastName: nombres realistas de diversos orígenes
- dateOfBirth: edades 18-80, varios formatos
- phoneNumber: formatos internacionales (US, UK, India)
- address: completa con calle, ciudad, estado, código postal, país

Genera 20 registros incluyendo:
- 10 perfiles válidos
- 5 con casos límite (nombres muy largos, caracteres especiales, etc.)
- 5 con problemas de validación (email inválido, menor de edad, etc.)

Formato como array JSON.

Revisión de Código y Refactorización

Verificación de Calidad de Código de Prueba:

Revisa esta prueba de Selenium para anti-patrones y sugiere mejoras:

```python
def test_login():
    driver.get("https://example.com/login")
    time.sleep(2)
    driver.find_element(By.ID, "username").send_keys("admin")
    driver.find_element(By.ID, "password").send_keys("admin123")
    driver.find_element(By.ID, "loginBtn").click()
    time.sleep(3)
    assert "Dashboard" in driver.page_source

Enfócate en:

  • Estrategias de espera (reemplaza sleep con esperas explícitas)
  • Estrategias de localizadores (usa selectores robustos)
  • Aserciones (mejora métodos de verificación)
  • Organización de código (Page Object Model)
  • Manejo de datos de prueba (externaliza credenciales)

Proporciona código refactorizado con explicaciones.


## Técnicas Avanzadas

### Chain-of-Thought Prompting

Para análisis complejo, guía a la IA a través de razonamiento paso a paso:

Diseñemos una estrategia de prueba para limitación de tasa de API. Piensa en esto paso a paso:

Paso 1: ¿Cuáles son los comportamientos clave que necesitamos verificar en la limitación de tasa? Paso 2: ¿Qué tipos de casos de prueba cubrirían estos comportamientos (positivos, negativos, casos límite)? Paso 3: ¿Qué datos de prueba y escenarios necesitaríamos? Paso 4: ¿Cómo automatizaríamos esto eficientemente? Paso 5: ¿Qué métricas indicarían buena cobertura?

Trabaja en cada paso, luego proporciona un plan de prueba completo.


### Refinamiento Iterativo

Comienza amplio, luego enfoca a través de prompts de seguimiento:

Prompt inicial: “¿Qué tipos de prueba deberíamos incluir para una funcionalidad de procesamiento de pagos?”

Prompt de seguimiento: “Enfócate en las pruebas de integración. ¿Qué escenarios específicos para integración de pagos Stripe?”

Prompt de refinamiento: “Para el escenario de ‘reintento de pago fallido’, proporciona pasos de prueba detallados y configuraciones mock.”


### Biblioteca de Plantillas de Prompts

Crea plantillas reutilizables para tareas comunes de QA:

**Plantilla: Pruebas de Contrato de API**

Genera pruebas de contrato para {API_ENDPOINT} con estas especificaciones:

API: {METHOD} {PATH} Solicitud: {REQUEST_SCHEMA} Respuesta: {RESPONSE_SCHEMA} Reglas de Negocio: {RULES}

Incluye pruebas para:

  1. Solicitud válida con todos los campos
  2. Solicitud válida con campos opcionales omitidos
  3. Solicitud inválida (tipos incorrectos, campos requeridos faltantes)
  4. Valores límite para campos numéricos/string
  5. Validación de esquema de respuesta

Framework: {TESTING_FRAMEWORK}


## Midiendo la Efectividad de los Prompts

### Métricas de Calidad para Pruebas Generadas por IA

| Métrica | Buen Indicador | Indicador Pobre |
|---------|---------------|-----------------|
| Cobertura | Aborda casos límite, caminos de error | Solo escenarios de camino feliz |
| Especificidad | Valores concretos, aserciones claras | Expectativas vagas |
| Ejecutabilidad | Ejecutable con ediciones mínimas | Requiere trabajo significativo |
| Relevancia | Coincide con tu stack tecnológico | Código genérico, incompatible |
| Completitud | Incluye setup, teardown, datos | Falta componentes críticos |

### Pruebas A/B de tus Prompts

Compara diferentes enfoques de prompts:

Versión A (vago): “Escribe pruebas para login”

Versión B (específico): “Genera casos de prueba Pytest para endpoint API de login (/auth/login) incluyendo credenciales válidas, credenciales inválidas, campos faltantes, intentos de inyección SQL. Usa parametrize para datos de prueba.”

Mide: Tiempo ahorrado, ediciones necesarias, tasa de detección de defectos.


## Mejores Prácticas y Errores

### Hacer

✅ **Sé específico**: Incluye stack tecnológico, frameworks, patrones

✅ **Proporciona contexto**: Comparte arquitectura del sistema relevante

✅ **Especifica formato**: Define estructura de salida (Gherkin, código, tabla)

✅ **Incluye ejemplos**: Muestra estilo de salida deseado

✅ **Establece restricciones**: Presupuesto, tiempo, habilidades del equipo

✅ **Itera**: Refina prompts basándote en resultados

✅ **Valida salida**: Siempre revisa contenido generado por IA

### No Hacer

❌ **No asumas conocimiento**: La IA no conoce tus sistemas internos

❌ **No omitas validación**: Nunca uses salida de IA sin revisión

❌ **No sobre-confíes**: La IA asiste pero no reemplaza juicio de QA

❌ **No ignores privacidad**: Evita compartir datos sensibles en prompts

❌ **No esperes perfección**: La IA comete errores, especialmente en casos límite

## Conclusión

La ingeniería de prompts se está convirtiendo en una habilidad esencial para los profesionales modernos de QA. Al dominar técnicas como prompts estructurados, aprendizaje few-shot e instrucciones basadas en roles, puedes aprovechar la IA para aumentar dramáticamente la productividad en generación de casos de prueba, análisis de bugs y automatización de pruebas.

Recuerda: La IA es un asistente poderoso, no un reemplazo para la experiencia en QA. Los mejores resultados provienen de combinar prompts bien elaborados con juicio humano, conocimiento del dominio y pensamiento crítico.

Comienza a experimentar con estas técnicas hoy, construye tu propia biblioteca de prompts y comparte patrones exitosos con tu equipo. A medida que los modelos de IA continúan evolucionando, los profesionales de QA que dominen la ingeniería de prompts tendrán una ventaja competitiva significativa.

## Recursos Adicionales

- Guía de Prompt Engineering de OpenAI: Mejores prácticas de líderes en IA
- Bibliotecas de prompts específicas para pruebas en GitHub
- Comunidades de QA compartiendo patrones de prompts de IA (Ministry of Testing, Test Automation University)
- Tu propia colección de prompts: Documenta lo que funciona para tu contexto

*Domina los prompts, domina las pruebas. El futuro de QA es inteligencia colaborativa.*