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:
    1. Navegar a la página de login
    2. Ingresar email: “test@example.com
    3. Ingresar contraseña: “Test123!”
    4. 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:

  1. Cubrir todos los journeys principales del usuario
  2. Probar todas las permutaciones de campos opcionales válidos
  3. Verificar que los datos persisten correctamente
  4. Verificar que todas las integraciones funcionan
  5. 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:

  1. Probar cada regla de validación
  2. Verificar que los mensajes de error son claros y útiles
  3. Asegurar que el sistema no filtra información sensible en errores
  4. Probar inyecciones de seguridad (SQL, XSS, CSRF)
  5. Verificar el logging de intentos fallidos
  6. Verificar limitación de tasa y medidas anti-abuso

Categorías Comunes de Validación:

CategoríaEjemplos
Validación de formatoFormato de email, teléfono, fecha, URL
Validación de longitudLongitud min/max para campos de texto, límites de tamaño de archivo
Validación de rangoRangos numéricos, rangos de fechas, restricciones de edad
Campos requeridosCampos obligatorios faltantes, valores nulos
Prevención de duplicadosEmails únicos, nombres de usuario únicos
AutorizaciónAcceso a recursos sin permisos
Reglas de negocioFechas 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)

ValorResultado EsperadoTipo de Caso de Prueba
17RechazadoLímite - Inválido
18AceptadoLímite - Válido Min
19AceptadoLímite - Válido Min+1
119AceptadoLímite - Válido Max-1
120AceptadoLímite - Válido Max
121RechazadoLí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:

ReglaC1C2C3C4Acción
R1SSSSA1 - Aprobar
R2SSSNA3 - Revisión Manual
R3SSNSA3 - Revisión Manual
R4SSNNA2 - Rechazar
R5SNSSA3 - Revisión Manual
R6SNSNA2 - Rechazar
R7SNNSA2 - Rechazar
R8SNNNA2 - Rechazar
R9-16N***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:

#PagoEnvíoCupónEnvoltura
1Tarjeta de CréditoEstándar
2Tarjeta de CréditoExpressNoNo
3Tarjeta de CréditoNocturnoNo
4PayPalEstándarNoNo
5PayPalExpress
6PayPalNocturnoNo
7TransferenciaEstándarNo
8TransferenciaExpressNo
9TransferenciaNocturno
10Tarjeta de CréditoEstándarNo
11PayPalEstándar
12TransferenciaEstándarNoNo

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 RequisitoDescripción RequisitoID Caso de PruebaTítulo Caso de PruebaEstadoPrioridad
REQ-001Login de usuario con email/contraseñaTC-LOGIN-001Login válidoPassCrítico
REQ-001Login de usuario con email/contraseñaTC-LOGIN-002Contraseña inválidaPassCrítico
REQ-001Login de usuario con email/contraseñaTC-LOGIN-003Cuenta bloqueadaPassAlto
REQ-002Reseteo de contraseña vía emailTC-RESET-001Solicitar enlace de reseteoPassAlto
REQ-002Reseteo de contraseña vía emailTC-RESET-002Reseteo con token válidoPassAlto
REQ-002Reseteo de contraseña vía emailTC-RESET-003Reseteo con token expiradoFailAlto
REQ-003Timeout de sesión después de 30 minTC-SESSION-001Auto-logout después de 30 minPassMedio
REQ-004Subida de foto de perfilTC-UPLOAD-001Subir imagen válidaNo EjecutadoBajo

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:

  1. Repositorio Git (para casos de prueba basados en texto)
  2. Herramientas de gestión de pruebas (versionado integrado)
  3. 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:

  1. Auditar tus casos de prueba actuales contra esta guía
  2. Elegir 3 técnicas de diseño de pruebas para aplicar esta semana
  3. Crear matriz de trazabilidad para tu proyecto actual
  4. Configurar estrategia de gestión de datos de prueba
  5. 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!