¿Por qué combinar técnicas?
Cada técnica tiene puntos ciegos. EP pierde defectos de boundary. BVA pierde bugs dependientes de estado. State transition testing pierde errores de cálculo. Ninguna técnica sola provee cobertura completa.
Cuando las combinas estratégicamente, las fortalezas de una compensan las debilidades de otra.
El modelo de tres capas
Capa 1: Basada en especificación (Black-Box)
Forman la base. Verifican que el sistema cumple sus requisitos.
- EP, BVA, tablas de decisión, state transitions
Capa 2: Basada en estructura (White-Box)
Llenan brechas de la Capa 1 analizando qué caminos de código no están cubiertos.
- Cobertura de sentencias/decisiones, paths, MC/DC, data flow
Capa 3: Basada en experiencia
Atrapan defectos que las técnicas formales pierden.
- Error guessing, testing exploratorio, checklists
El flujo de combinación
Paso 1: Empezar con tests basados en especificación
Feature: Registro de usuario
├── Campo email → EP + BVA
├── Campo password → EP + BVA
├── Campo edad → EP + BVA
├── Reglas de registro → Tabla de decisión
└── Ciclo de vida de cuenta → State transitions
Paso 2: Medir cobertura estructural
Ejecutar los tests de Capa 1 y analizar brechas.
Paso 3: Agregar tests basados en estructura
Para cada bloque no cubierto, determinar si debe testearse.
Paso 4: Aplicar técnicas basadas en experiencia
Error guessing, testing exploratorio, checklists.
Caso de estudio: Procesamiento de pagos
Capa 1 (~45 tests)
| Sub-Feature | Técnica | Tests clave |
|---|---|---|
| Tipo de pago | EP | 3 válidos + 1 inválido |
| Número de tarjeta | EP + BVA | Visa/MC/Amex válidos + formatos inválidos |
| Fecha de expiración | BVA | Hoy, mañana, ayer, futuro lejano |
| Conversión de moneda | BVA + EP | Misma moneda, pares soportados |
| Reglas de pago | Tabla de decisión | tipo x monto x moneda x fraud_score |
| Ciclo de transacción | State transitions | Pending → Authorized → Captured → Refunded |
| Ventana de reembolso | BVA | Día 0, 1, 29, 30, 31 |
Capa 2 (~15 tests adicionales)
Análisis de cobertura revela FraudDetector con 52% decision coverage. Agregar tests para paths de detección de fraude.
Capa 3 (~10 tests + sesiones)
Error guessing: doble submit, timeout, 3D Secure. Testing exploratorio con red lenta.
Total: ~70 test cases + 2 sesiones exploratorias.
Ejercicio: Diseño combinado de tests
Problema 1
Diseña una estrategia combinada para reserva de vuelos:
- Búsqueda por origen, destino, fechas, pasajeros (1-9), clase
- Resultados con filtros y ordenamiento
- Booking con detalles de pasajero y pago
- Modificación (con cargo) y cancelación
Solución
Capa 1 (~50 tests)
| Sub-Feature | Técnica | Tests clave |
|---|---|---|
| Inputs de búsqueda | EP + BVA | Ciudades válidas/inválidas, rangos de fecha |
| Lógica de fechas | BVA | Mismo día, retorno antes de ida |
| Pasajero x clase | Pairwise | 3 clases x cantidades |
| Sort/filtro | EP | Cada opción |
| Reglas de booking | Tabla de decisión | Clase x modificación x cancelación |
| Ciclo de ticket | State transitions | Buscado → Reservado → Modificado → Cancelado |
Capa 2 (~15 tests): Paths de cálculo de precios, lógica de disponibilidad, manejo de errores.
Capa 3 (~10 tests + sesiones): Edge cases de pasajeros, accesibilidad, localización.
Problema 2
Después de EP y BVA en un calculador de descuentos, cobertura es: sentencias 68%, decisiones 55%.
Código no cubierto:
- Líneas 34-40: Cálculo de tier loyalty para miembros platinum
- Líneas 55-62: Precios especiales de fin de semana festivo
- Líneas 78-85: Override de descuento para empleados
- Líneas 92-98: Manejo de montos negativos
- Líneas 105-110: Check de feature flag deprecado
Solución
| Código no cubierto | Análisis | Acción |
|---|---|---|
| Loyalty tier platinum | Clase EP faltante | Agregar clase EP + BVA para boundaries de tier |
| Precios festivos | Comportamiento temporal | Agregar tests por tiempo: día normal, festivo, fin de semana |
| Descuento empleado | Tipo de usuario especial | Agregar clase EP + tabla de decisión para stacking |
| Monto negativo | Código defensivo | Agregar test negativo |
| Feature flag deprecado | Código muerto | Verificar flag apagado. Marcar para eliminación |
Medición de efectividad combinada
| Métrica | Objetivo | Propósito |
|---|---|---|
| Cobertura de requisitos | 100% | Cada requisito tiene tests |
| Cobertura de sentencias | 80%+ | La mayoría del código se ejecuta |
| Cobertura de decisiones | 75%+ | La mayoría de branches se testea |
| Mutation score | 80%+ en código crítico | Tests realmente atrapan fallas |
| Tasa de detección | Incrementando | El enfoque combinado encuentra más bugs |
Puntos clave
- Ninguna técnica sola es suficiente — combina basadas en especificación, estructura y experiencia
- Empieza con técnicas de especificación como base
- Usa análisis de cobertura para identificar brechas estructurales
- Llena brechas con tests dirigidos, no aleatorios
- Aplica técnicas de experiencia para edge cases del mundo real
- Mide efectividad con métricas de cobertura, mutation score y tasa de defectos escapados
- El enfoque de tres capas no es secuencial — itera según aprendes del sistema