El diseño efectivo de casos de prueba es la base del aseguramiento de calidad exitoso. Los casos de prueba bien diseñados no solo encuentran bugs sino que también documentan el comportamiento del sistema, facilitan la transferencia de conocimiento y proporcionan trazabilidad desde los requisitos hasta la ejecución. En esta guía completa, exploraremos el arte y la ciencia de crear casos de prueba que entregan valor real.
Introducción: Por Qué Importa el Diseño de Casos de Prueba
Un mal diseño de casos de prueba conduce a:
- Recursos desperdiciados — probando cosas incorrectas o duplicando esfuerzos
- Bugs perdidos — cobertura inadecuada de escenarios críticos
- Pesadillas de mantenimiento — imposible actualizar o entender más tarde
- Fallas de comunicación — expectativas y criterios de aceptación poco claros
El excelente diseño de casos de prueba entrega:
- Máxima cobertura con mínimo esfuerzo — técnicas inteligentes cubren más con menos
- Documentación clara — cualquiera puede entender y ejecutar las pruebas
- Trazabilidad — enlace directo de requisitos a resultados de prueba
- Mantenibilidad — fácil de actualizar a medida que evoluciona el sistema
- Reutilización — las pruebas pueden adaptarse para regresión, automatización
La Anatomía del Caso de Prueba Perfecto
Componentes Esenciales
Cada caso de prueba bien diseñado debe incluir:
1. ID del Caso de Prueba
- Identificador único (ej., TC_LOGIN_001)
- Permite seguimiento, referencia, automatización
- Ejemplo de convención de nombres:
TC_[MÓDULO]_[TIPO]_[NÚMERO]
2. Título/Resumen
- Descripción clara y concisa de lo que se prueba
- Debe ser comprensible sin leer el caso de prueba completo
- Ejemplo: “Verificar login exitoso con credenciales válidas”
3. Precondiciones
- Estado del sistema requerido antes de la ejecución de la prueba
- Datos de prueba que deben existir
- Permisos de usuario necesarios
- Ejemplo: “La cuenta de usuario existe en el sistema con email test@example.com”
4. Pasos de Prueba
- Acciones numeradas y secuenciales
- Cada paso debe ser atómico y claro
- Incluir datos de entrada para cada paso
- Ejemplo:
- Navegar a la página de login
- Ingresar email: “test@example.com”
- Ingresar contraseña: “Test123!”
- Hacer clic en el botón “Login”
5. Resultados Esperados
- Definición clara de criterios de pass/fail
- Debe ser verificable y medible
- Incluir estado esperado de UI, cambios de datos, comportamiento del sistema
- Ejemplo: “Usuario redirigido al dashboard, mensaje de bienvenida muestra nombre de usuario”
6. Postcondiciones
- Estado del sistema después de la ejecución de la prueba
- Acciones de limpieza si es necesario
- Ejemplo: “Usuario logueado, sesión activa por 30 minutos”
7. Prioridad/Severidad
- Crítico/Alto/Medio/Bajo
- Ayuda a priorizar durante la ejecución de pruebas
- Basado en impacto de negocio y riesgo
8. Tipo de Prueba
- Funcional, Regresión, Smoke, etc.
- Ayuda a organizar los ciclos de ejecución de pruebas
9. Requisitos Relacionados
- Trazabilidad a historias de usuario, requisitos, funcionalidades
- Asegura cobertura de requisitos
Componentes Opcionales Pero Útiles
10. Datos de Prueba
- Conjuntos de datos específicos para ejecución
- Pueden referenciarse desde repositorio de datos de prueba separado
11. Entorno
- Especificaciones de navegador, SO, dispositivo
- Versión de API, versión de base de datos
12. Tiempo Estimado de Ejecución
- Ayuda a la planificación de pruebas y asignación de recursos
13. Autor y Fecha
- Quién creó, última modificación por quién
- Control de versiones para casos de prueba
Ejemplo: Caso de Prueba Completo
ID Caso de Prueba: TC_LOGIN_VALID_001
Título: Verificar login exitoso con email y contraseña válidos
Prioridad: Crítico
Tipo: Funcional, Smoke
Requisito Relacionado: REQ-AUTH-001
Precondiciones:
- Usuario registrado con email: qatester@example.com
- Contraseña: SecurePass123!
- Estado de cuenta de usuario: Activo
Pasos de Prueba:
1. Navegar a https://app.example.com/login
2. Verificar que el formulario de login se muestre con campos de email y contraseña
3. Ingresar email: "qatester@example.com"
4. Ingresar contraseña: "SecurePass123!"
5. Hacer clic en botón "Iniciar Sesión"
Resultados Esperados:
- Paso 2: Formulario muestra dos campos de entrada, botón "Iniciar Sesión", enlace "¿Olvidaste tu contraseña?"
- Paso 5:
* Página redirige a /dashboard
* Mensaje de bienvenida muestra: "Bienvenido, QA Tester"
* Avatar de usuario aparece en esquina superior derecha
* Cookie de sesión creada con expiración de 30 minutos
Postcondiciones:
- Usuario logueado con sesión activa
- Timestamp de último login actualizado en base de datos
Datos de Prueba: TD_LOGIN_001
Entorno: Chrome 120+, Firefox 115+, Safari 17+
Tiempo Estimado: 2 minutos
Autor: John Doe
Creado: 2025-09-15
Última Modificación: 2025-09-28
Casos Positivos, Negativos y de Borde
Casos de Prueba Positivos
Definición: Pruebas que verifican que el sistema funciona correctamente con entradas válidas y comportamiento esperado del usuario.
Propósito:
- Verificar escenarios del happy path
- Confirmar que el sistema cumple requisitos funcionales
- Validar flujos de negocio
Ejemplo: Registro de Usuario
Casos Positivos:
TC_REG_POS_001: Registrar con todos los campos requeridos válidos
TC_REG_POS_002: Registrar con campos opcionales válidos incluidos
TC_REG_POS_003: Registrar después de verificar email exitosamente
TC_REG_POS_004: Registrar con caracteres especiales en nombre (O'Brien)
TC_REG_POS_005: Registrar con caracteres internacionales (José, Владимир)
Mejores Prácticas para Casos Positivos:
- Cubrir todos los journeys principales del usuario
- Probar todas las permutaciones de campos opcionales válidos
- Verificar que los datos persisten correctamente
- Verificar que todas las integraciones funcionan
- Validar feedback de UI y mensajería
Casos de Prueba Negativos
Definición: Pruebas que verifican que el sistema maneja entradas inválidas, acciones no autorizadas y condiciones de error de manera elegante.
Propósito:
- Verificar manejo de errores y validación
- Asegurar que el sistema no se cae ni expone datos sensibles
- Confirmar que los controles de seguridad funcionan
- Probar que los mensajes de error de cara al usuario son útiles
Ejemplo: Registro de Usuario
Casos Negativos:
TC_REG_NEG_001: Registrar con campo de email vacío
TC_REG_NEG_002: Registrar con formato de email inválido (sin @)
TC_REG_NEG_003: Registrar con email ya registrado
TC_REG_NEG_004: Registrar con contraseña < 8 caracteres
TC_REG_NEG_005: Registrar con contraseña sin números
TC_REG_NEG_006: Registrar con inyección SQL en campo de email
TC_REG_NEG_007: Registrar con script XSS en campo de nombre
TC_REG_NEG_008: Registrar sin aceptar términos y condiciones
TC_REG_NEG_009: Registrar con confirmación de contraseña no coincidente
TC_REG_NEG_010: Enviar formulario de registro múltiples veces rápidamente
Mejores Prácticas para Casos Negativos:
- Probar cada regla de validación
- Verificar que los mensajes de error son claros y útiles
- Asegurar que el sistema no filtra información sensible en errores
- Probar inyecciones de seguridad (SQL, XSS, CSRF)
- Verificar el logging de intentos fallidos
- Verificar limitación de tasa y medidas anti-abuso
Categorías Comunes de Validación:
Categoría | Ejemplos |
---|---|
Validación de formato | Formato de email, teléfono, fecha, URL |
Validación de longitud | Longitud min/max para campos de texto, límites de tamaño de archivo |
Validación de rango | Rangos numéricos, rangos de fechas, restricciones de edad |
Campos requeridos | Campos obligatorios faltantes, valores nulos |
Prevención de duplicados | Emails únicos, nombres de usuario únicos |
Autorización | Acceso a recursos sin permisos |
Reglas de negocio | Fechas de reserva en el pasado, cantidades negativas |
Casos de Borde (Edge Cases)
Definición: Pruebas en los límites de entradas válidas e inválidas, o condiciones extremas de operación del sistema.
Propósito:
- Encontrar errores off-by-one
- Probar límites del sistema
- Verificar manejo de valores límite
- Capturar errores de redondeo y precisión
Ejemplo: Registro de Usuario
Casos de Borde:
TC_REG_EDGE_001: Registrar con email exactamente en longitud máxima (254 caracteres)
TC_REG_EDGE_002: Registrar con email en longitud máxima + 1 (255 caracteres)
TC_REG_EDGE_003: Registrar con contraseña exactamente de 8 caracteres
TC_REG_EDGE_004: Registrar con contraseña de 7 caracteres
TC_REG_EDGE_005: Registrar con nombre de un solo carácter
TC_REG_EDGE_006: Registrar con edad exactamente de 18 (mínimo)
TC_REG_EDGE_007: Registrar con edad de 17 (por debajo del mínimo)
TC_REG_EDGE_008: Registrar con edad de 150 (máximo razonable)
TC_REG_EDGE_009: Registrar con fecha de nacimiento 29 de febrero de año bisiesto
TC_REG_EDGE_010: Registrar con zona horaria en límites UTC+14/-12
Técnica de Análisis de Valores Límite:
Para rango de entrada MIN a MAX:
- Probar en: MIN-1, MIN, MIN+1, MAX-1, MAX, MAX+1
Ejemplo: Campo de edad (18-120 años)
Valor | Resultado Esperado | Tipo de Caso de Prueba |
---|---|---|
17 | Rechazado | Límite - Inválido |
18 | Aceptado | Límite - Válido Min |
19 | Aceptado | Límite - Válido Min+1 |
119 | Aceptado | Límite - Válido Max-1 |
120 | Aceptado | Límite - Válido Max |
121 | Rechazado | Límite - Inválido |
Casos de Borde Adicionales a Considerar:
1. Valores Vacíos y Nulos
- Strings vacíos vs null vs strings solo con espacios en blanco
- Arrays/listas vacíos vs colecciones nulas
- Cero vs null para campos numéricos
2. Caracteres Especiales y Codificación
- Caracteres Unicode (emoji, chino, árabe)
- Símbolos especiales (&, <, >, “, ‘)
- Caracteres de control (nueva línea, tabulación, byte nulo)
- Strings muy largos
3. Timing y Concurrencia
- Timeout de sesión exactamente en expiración
- Solicitudes simultáneas del mismo usuario
- Condiciones de carrera
4. Límites del Sistema
- Tamaño máximo de subida de archivo
- Número máximo de elementos en lista
- Tasa máxima de solicitudes API
- Límites de conexión de base de datos
Técnicas de Diseño de Pruebas
Las técnicas clave incluyen análisis de valores límite, particionamiento de equivalencia, y comprensión de enfoques de testing de caja negra.
1. Partición de Equivalencia
Concepto: Dividir el dominio de entrada en clases donde cada miembro se comporta “equivalentemente”. Probar un valor de cada partición.
Ejemplo: Validación de Código de Descuento
Regla de Negocio:
- El código debe tener 6-12 caracteres alfanuméricos
- Los códigos válidos comienzan con "PROMO"
- Los códigos no distinguen entre mayúsculas y minúsculas
- Cada código es de uso único
Clases de Equivalencia:
Particiones Válidas:
1. Código de 6 caracteres, comienza con PROMO: "PROMO1"
2. Código de 12 caracteres, comienza con PROMO: "PROMO1234567"
3. Código de 8 caracteres, mayúsculas mixtas: "ProMo123"
4. Código no usado previamente
Particiones Inválidas:
5. Código < 6 caracteres: "PROM1"
6. Código > 12 caracteres: "PROMO12345678"
7. Código no comienza con PROMO: "SAVE123456"
8. Código contiene caracteres especiales: "PROMO$#@"
9. Código ya usado
10. Código vacío
Casos de Prueba:
TC_001: Probar partición 1 (PROMO1) → Debe aceptar
TC_002: Probar partición 2 (PROMO1234567) → Debe aceptar
TC_003: Probar partición 3 (ProMo123) → Debe aceptar (no distingue mayúsculas)
TC_004: Probar partición 5 (PROM1) → Debe rechazar (muy corto)
TC_005: Probar partición 6 (PROMO12345678) → Debe rechazar (muy largo)
TC_006: Probar partición 7 (SAVE123456) → Debe rechazar (prefijo incorrecto)
TC_007: Probar partición 8 (PROMO$#@) → Debe rechazar (caracteres especiales)
TC_008: Probar partición 9 (código reutilizado) → Debe rechazar (ya usado)
Resultado: En lugar de probar cientos de códigos diferentes, probamos 8 representantes cubriendo todas las particiones.
2. Pruebas de Tabla de Decisión
Concepto: Crear tabla de condiciones y acciones/resultados correspondientes. Cubre todas las combinaciones de condiciones.
Ejemplo: Sistema de Aprobación de Préstamos
Condiciones:
C1: ¿Puntaje de Crédito ≥ 700?
C2: ¿Ingreso Anual ≥ $50,000?
C3: ¿Duración de Empleo ≥ 2 años?
C4: ¿Deuda-a-Ingreso Existente < 40%?
Acciones:
A1: Aprobar préstamo
A2: Rechazar préstamo
A3: Solicitar revisión manual
Tabla de Decisión:
Regla | C1 | C2 | C3 | C4 | Acción |
---|---|---|---|---|---|
R1 | S | S | S | S | A1 - Aprobar |
R2 | S | S | S | N | A3 - Revisión Manual |
R3 | S | S | N | S | A3 - Revisión Manual |
R4 | S | S | N | N | A2 - Rechazar |
R5 | S | N | S | S | A3 - Revisión Manual |
R6 | S | N | S | N | A2 - Rechazar |
R7 | S | N | N | S | A2 - Rechazar |
R8 | S | N | N | N | A2 - Rechazar |
R9-16 | N | * | * | * | A2 - Rechazar |
Casos de Prueba: Un caso de prueba por regla simplificada = 7-8 casos de prueba cubriendo todos los escenarios.
3. Pruebas de Transición de Estados
Concepto: Probar todas las transiciones de estado válidas e intentos de transición inválidos.
Ejemplo: Sistema de Gestión de Pedidos
Estados:
- Borrador
- Enviado
- Confirmado
- Despachado
- Entregado
- Cancelado
Transiciones Válidas:
Borrador → Enviado
Enviado → Confirmado
Enviado → Cancelado
Confirmado → Despachado
Confirmado → Cancelado
Despachado → Entregado
Despachado → Cancelado (si no entregado)
Transiciones Inválidas:
Borrador → Despachado
Enviado → Entregado
Entregado → Confirmado
Cancelado → cualquier estado (estado terminal)
Casos de Prueba:
Pruebas de Transición Válida:
TC_ST_001: Borrador → Enviar pedido → Verificar estado = Enviado
TC_ST_002: Enviado → Confirmar → Verificar estado = Confirmado
TC_ST_003: Confirmado → Despachar → Verificar estado = Despachado
TC_ST_004: Despachado → Entregar → Verificar estado = Entregado
TC_ST_005: Enviado → Cancelar → Verificar estado = Cancelado
TC_ST_006: Confirmado → Cancelar → Verificar estado = Cancelado
Pruebas de Transición Inválida:
TC_ST_NEG_001: Borrador → Intentar despachar → Verificar error, estado = Borrador
TC_ST_NEG_002: Enviado → Intentar entregar → Verificar error
TC_ST_NEG_003: Cancelado → Intentar confirmar → Verificar error
TC_ST_NEG_004: Entregado → Intentar cancelar → Verificar error
4. Pruebas Pairwise (Todos los Pares)
Concepto: Al probar múltiples parámetros con muchos valores, probar todos los pares de valores en lugar de todas las combinaciones. Reduce dramáticamente el conteo de pruebas mientras mantiene alta detección de defectos.
Ejemplo: Checkout de E-commerce
Parámetros:
1. Método de Pago: Tarjeta de Crédito, PayPal, Transferencia Bancaria (3 valores)
2. Método de Envío: Estándar, Express, Nocturno (3 valores)
3. Cupón Aplicado: Sí, No (2 valores)
4. Envoltura de Regalo: Sí, No (2 valores)
Todas las Combinaciones: 3 × 3 × 2 × 2 = 36 casos de prueba
Pairwise: ~12 casos de prueba (cubriendo todos los pares)
Conjunto de Pruebas Pairwise:
# | Pago | Envío | Cupón | Envoltura |
---|---|---|---|---|
1 | Tarjeta de Crédito | Estándar | Sí | Sí |
2 | Tarjeta de Crédito | Express | No | No |
3 | Tarjeta de Crédito | Nocturno | Sí | No |
4 | PayPal | Estándar | No | No |
5 | PayPal | Express | Sí | Sí |
6 | PayPal | Nocturno | No | Sí |
7 | Transferencia | Estándar | Sí | No |
8 | Transferencia | Express | No | Sí |
9 | Transferencia | Nocturno | Sí | Sí |
10 | Tarjeta de Crédito | Estándar | No | Sí |
11 | PayPal | Estándar | Sí | Sí |
12 | Transferencia | Estándar | No | No |
Herramientas para Generación Pairwise:
- PICT (Microsoft)
- ACTS (NIST)
- Allpairs (generadores en línea)
Cuándo Usar Pairwise:
- Pruebas de configuración (SO × Navegador × Idioma)
- Formularios con múltiples parámetros
- API con muchos parámetros opcionales
- Combinaciones de feature flags
Gestión de Datos de Prueba
Por Qué Importan los Datos de Prueba
Una mala gestión de datos de prueba causa:
- Pruebas inestables — resultados inconsistentes debido a cambios de datos
- Pruebas bloqueadas — esperando que se creen datos
- Contaminación de datos — datos de prueba mezclados con datos de producción
- Violaciones de privacidad — uso de datos reales de usuarios para pruebas
- Bugs difíciles de reproducir — no se pueden recrear condiciones exactas de datos
Estrategias de Datos de Prueba
1. Datos Frescos por Prueba (Aislamiento)
Enfoque: Cada prueba crea sus propios datos, los usa y los limpia.
Pros:
- Independencia completa de pruebas
- Sin conflictos de datos entre pruebas
- Ejecución paralela fácil
- Sin problemas de limpieza
Contras:
- Ejecución más lenta (sobrecarga de creación de datos)
- Configuración de datos compleja para algunos escenarios
Ejemplo:
beforeEach(() => {
testUser = createUser(`test-${Date.now()}@example.com`);
testProduct = createProduct(`Product-${Date.now()}`);
});
afterEach(() => {
deleteUser(testUser.id);
deleteProduct(testProduct.id);
});
2. Datos de Prueba Compartidos (Fixtures)
Enfoque: Conjunto de datos precreado compartido entre múltiples pruebas.
Pros:
- Ejecución rápida de pruebas
- Relaciones de datos complejas realistas
- Menos código de configuración por prueba
Contras:
- Las pruebas pueden interferir entre sí
- Difícil ejecutar pruebas en paralelo
- El estado de datos puede derivar con el tiempo
Ejemplo:
Fixture de Datos de Prueba:
- Usuarios: user1@test.com, user2@test.com, admin@test.com
- Productos: ProductoA (en stock), ProductoB (fuera de stock)
- Pedidos: Pedido1 (user1, ProductoA, estado=Completado)
Regla: Las pruebas pueden LEER datos de fixture pero NO MODIFICARLOS
3. Data Factories/Builders
Enfoque: Generación programática de datos de prueba con valores predeterminados sensatos.
Ejemplo:
class UserFactory {
static create(overrides = {}) {
return {
email: overrides.email || `user-${Date.now()}@test.com`,
password: overrides.password || 'Test123!',
firstName: overrides.firstName || 'Test',
lastName: overrides.lastName || 'User',
age: overrides.age || 25,
country: overrides.country || 'US',
status: overrides.status || 'active',
...overrides
};
}
}
// Uso:
const standardUser = UserFactory.create();
const minorUser = UserFactory.create({ age: 16 });
const inactiveUser = UserFactory.create({ status: 'inactive' });
4. Generación de Datos Sintéticos
Herramientas y Bibliotecas:
- Faker.js / Faker (Python) — datos falsos realistas
- Mockaroo — generador de datos basado en web
- Bogus (.NET) — datos falsos para .NET
Ejemplo con Faker:
import { faker } from '@faker-js/faker';
const testUser = {
email: faker.internet.email(),
password: faker.internet.password({ length: 12 }),
firstName: faker.person.firstName(),
lastName: faker.person.lastName(),
phone: faker.phone.number(),
address: {
street: faker.location.streetAddress(),
city: faker.location.city(),
zipCode: faker.location.zipCode(),
country: faker.location.country()
},
creditCard: faker.finance.creditCardNumber(),
avatar: faker.image.avatar()
};
Organización de Datos de Prueba
1. Pruebas Guiadas por Datos
Enfoque: Separar lógica de prueba de datos de prueba. La misma prueba se ejecuta con múltiples conjuntos de datos.
Ejemplo: Basado en CSV
# test_login_data.csv
email,password,expectedResult,comment
valid@test.com,Test123!,success,Credenciales válidas
invalid@test.com,WrongPass,failure,Contraseña inválida
@invalid.com,Test123!,failure,Formato de email inválido
valid@test.com,,failure,Contraseña vacía
Código de Prueba:
@pytest.mark.parametrize("email,password,expected,comment",
csv_data_provider("test_login_data.csv"))
def test_login(email, password, expected, comment):
result = login(email, password)
assert result.status == expected, f"Falló: {comment}"
2. Patrón de Repositorio de Datos de Prueba
Estructura:
test-data/
├── users/
│ ├── valid-users.json
│ ├── invalid-users.json
│ └── edge-case-users.json
├── products/
│ ├── in-stock-products.json
│ └── out-of-stock-products.json
├── orders/
│ └── sample-orders.json
└── config/
└── environments.json
Ejemplo: valid-users.json
{
"standardUser": {
"email": "standard@test.com",
"password": "Test123!",
"role": "user"
},
"adminUser": {
"email": "admin@test.com",
"password": "Admin123!",
"role": "admin"
},
"premiumUser": {
"email": "premium@test.com",
"password": "Premium123!",
"role": "user",
"subscription": "premium"
}
}
Manejo de Datos de Prueba Sensibles
¡Nunca uses datos reales de producción para pruebas!
Estrategias:
1. Enmascaramiento de Datos
- Reemplazar campos sensibles con datos falsos pero realistas
- Preservar formato de datos y relaciones
2. Subconjunto de Datos
- Extraer pequeño subconjunto de datos de producción
- Anonimizar antes de usar
3. Generación de Datos Sintéticos
- Generar datos completamente falsos que coincidan con el esquema de producción
4. Datos de Prueba en CI/CD
- Almacenar encriptados en repositorio
- Desencriptar durante ejecución de prueba
- Nunca hacer commit de datos sensibles sin encriptar
Matriz de Trazabilidad
¿Qué es la Matriz de Trazabilidad?
Definición: Un documento que mapea la relación entre requisitos y casos de prueba, asegurando cobertura completa de pruebas y análisis de impacto.
Propósito:
- Verificar cobertura completa — cada requisito tiene pruebas
- Análisis de impacto — qué pruebas se ven afectadas por cambio de requisito
- Cumplimiento regulatorio — probar que todos los requisitos fueron probados
- Transparencia de proyecto — mostrar progreso de pruebas a stakeholders
Tipos de Trazabilidad
1. Trazabilidad Forward
- Requisitos → Casos de Prueba
- Asegura que todos los requisitos estén cubiertos por pruebas
2. Trazabilidad Backward
- Casos de Prueba → Requisitos
- Asegura que no hay pruebas huérfanas (pruebas sin requisitos)
3. Trazabilidad Bidireccional
- Tanto forward como backward
- Visibilidad completa
Creación de Matriz de Trazabilidad
Formato Simple (Hoja de Cálculo):
ID Requisito | Descripción Requisito | ID Caso de Prueba | Título Caso de Prueba | Estado | Prioridad |
---|---|---|---|---|---|
REQ-001 | Login de usuario con email/contraseña | TC-LOGIN-001 | Login válido | Pass | Crítico |
REQ-001 | Login de usuario con email/contraseña | TC-LOGIN-002 | Contraseña inválida | Pass | Crítico |
REQ-001 | Login de usuario con email/contraseña | TC-LOGIN-003 | Cuenta bloqueada | Pass | Alto |
REQ-002 | Reseteo de contraseña vía email | TC-RESET-001 | Solicitar enlace de reseteo | Pass | Alto |
REQ-002 | Reseteo de contraseña vía email | TC-RESET-002 | Reseteo con token válido | Pass | Alto |
REQ-002 | Reseteo de contraseña vía email | TC-RESET-003 | Reseteo con token expirado | Fail | Alto |
REQ-003 | Timeout de sesión después de 30 min | TC-SESSION-001 | Auto-logout después de 30 min | Pass | Medio |
REQ-004 | Subida de foto de perfil | TC-UPLOAD-001 | Subir imagen válida | No Ejecutado | Bajo |
Métricas de la Matriz de Trazabilidad
1. Cobertura de Requisitos
Cobertura % = (Requisitos con pruebas / Total requisitos) × 100
2. Efectividad de Pruebas
Detección de Defectos % = (Requisitos con pruebas fallidas / Total requisitos) × 100
3. Progreso de Pruebas
Progreso de Ejecución % = (Pruebas ejecutadas / Total pruebas) × 100
4. Tasa de Aprobación de Pruebas
Tasa de Aprobación % = (Pruebas aprobadas / Pruebas ejecutadas) × 100
Herramientas para Trazabilidad
Manual:
- Excel/Google Sheets
- Tablas de Confluence
Herramientas de Gestión de Pruebas:
- Jira + Xray/Zephyr
- TestRail
- qTest
- PractiTest
Gestión de Requisitos:
- Jama Connect
- IBM DOORS
- Polarion
Ejemplo: Trazabilidad en Jira
Historia de Usuario: STORY-123 "Login de Usuario"
└─ Enlaces a:
├─ TC-LOGIN-001 (cubre)
├─ TC-LOGIN-002 (cubre)
└─ TC-LOGIN-003 (cubre)
Requisito: REQ-AUTH-001
└─ Enlaces a:
├─ STORY-123 (implementa)
└─ Ejecución de Prueba: EXEC-456 (verificado por)
Mantenimiento de Casos de Prueba
Cuándo Revisar y Actualizar Casos de Prueba
1. Después de Cambio de Requisitos
- Actualizar casos de prueba afectados inmediatamente
- Usar matriz de trazabilidad para identificar impacto
2. Después de Encontrar Defectos
- Agregar casos de prueba para escenarios perdidos
- Actualizar pruebas existentes si deberían haber capturado el bug
3. Ciclo de Revisión Regular
- Revisión trimestral o semestral
- Eliminar pruebas obsoletas
- Actualizar datos o pasos desactualizados
4. Después de Automatización
- Marcar casos de prueba automatizados
- Archivar o eliminar pruebas manuales redundantes
5. Después de Problemas en Producción
- Agregar pruebas para bugs de producción
- Prevenir regresión
Code Smells de Casos de Prueba (Señales de Advertencia)
1. Casos de Prueba Excesivamente Complejos
- 20+ pasos en una sola prueba
- Múltiples verificaciones probando cosas no relacionadas
- Solución: Dividir en pruebas más pequeñas y enfocadas
2. Resultados Esperados Poco Claros
- “Verificar que el sistema funciona correctamente”
- “Revisar todos los campos”
- Solución: Definir criterios específicos y medibles
3. Casos de Prueba Duplicados
- Misma prueba con variaciones menores
- Pruebas copiadas y pegadas con la misma lógica
- Solución: Usar pruebas guiadas por datos o parametrización
4. Pruebas Inestables
- Pasan/fallan aleatoriamente
- Dependen de factores externos (tiempo, red)
- Solución: Agregar esperas apropiadas, mockear dependencias externas
5. Pruebas Desactualizadas
- Referencias a elementos de UI antiguos
- Probar funcionalidades deprecadas
- Solución: Archivar o actualizar
Versionado de Casos de Prueba
¿Por Qué Control de Versiones para Casos de Prueba?
- Rastrear cambios con el tiempo
- Revertir si es necesario
- Entender por qué cambió la prueba
- Pista de auditoría para cumplimiento
Opciones:
- Repositorio Git (para casos de prueba basados en texto)
- Herramientas de gestión de pruebas (versionado integrado)
- Historial de versiones de documento (seguimiento manual)
Conclusión: Dominar el Diseño de Casos de Prueba
El diseño efectivo de casos de prueba es tanto arte como ciencia. Puntos clave:
1. La Estructura Importa
- Usar plantilla consistente con todos los componentes esenciales
- Hacer las pruebas comprensibles para cualquiera
- Incluir precondiciones claras, pasos, resultados esperados
2. Cobertura a Través de Técnicas
- Combinar casos positivos, negativos y de borde
- Aplicar técnicas de diseño: partición de equivalencia, valor límite, tablas de decisión
- Usar pruebas pairwise para escenarios con múltiples parámetros
3. Gestión Inteligente de Datos de Prueba
- Aislar datos de prueba por prueba cuando sea posible
- Usar factories de datos y generación sintética
- Nunca usar datos de producción
- Organizar datos en patrón de repositorio
4. Asegurar Trazabilidad
- Mapear requisitos a casos de prueba
- Rastrear cobertura y progreso
- Habilitar análisis de impacto
5. Mantener Continuamente
- Revisar y actualizar regularmente
- Eliminar pruebas obsoletas
- Agregar pruebas para escenarios perdidos
- Control de versiones de casos de prueba
Próximos Pasos:
- Auditar tus casos de prueba actuales contra esta guía
- Elegir 3 técnicas de diseño de pruebas para aplicar esta semana
- Crear matriz de trazabilidad para tu proyecto actual
- Configurar estrategia de gestión de datos de prueba
- Programar revisión trimestral de casos de prueba
Los casos de prueba bien diseñados son una inversión en calidad. Ahorran tiempo, capturan más bugs, facilitan la automatización y hacen que todo el equipo sea más efectivo. ¡Comienza a mejorar tu diseño de casos de prueba hoy!