La explosión combinatoria
Cuando un sistema tiene múltiples parámetros de entrada, cada uno con varios valores posibles, el total de combinaciones crece exponencialmente. Un formulario web con 5 campos, cada uno con 4 valores posibles, tiene 4^5 = 1,024 combinaciones.
Testear todas las combinaciones rara vez es factible. Pero testear muy pocas arriesga perder fallas de interacción críticas. Las estrategias de testing combinatorio proveen enfoques sistemáticos que balancean exhaustividad con practicidad.
Espectro de estrategias de cobertura
1. Cobertura Each-Choice
Cada valor de cada parámetro aparece en al menos un test case. Mínimos tests, pero no testea interacciones.
2. Cobertura Base-Choice
Selecciona un test case “base” (configuración más común). Crea un test por cada valor no-base de cada parámetro, variando solo ese parámetro.
Para 3 parámetros con 3 valores: 1 base + 3 * 2 = 7 test cases.
3. Cobertura Pairwise (2-Way)
Cada par de valores de parámetros aparece en al menos un test case. La estrategia combinatoria más usada.
La investigación muestra que 70-90% de las fallas de software involucran interacciones entre máximo 2 parámetros.
4. Cobertura T-Way (t = 3, 4, …)
Cada t-tupla de valores aparece en al menos un test case.
| Parámetros | Valores | All Combos | Pairwise | 3-way | 4-way |
|---|---|---|---|---|---|
| 5 | 3 | 243 | ~15 | ~45 | ~81 |
| 10 | 3 | 59,049 | ~20 | ~60 | ~120 |
| 15 | 4 | ~1 billón | ~30 | ~120 | ~350 |
5. Cobertura All-Combinations
Cada combinación posible. Factible solo para espacios muy pequeños.
Investigación NIST
| Fuerza de interacción | Fallas detectadas acumuladas |
|---|---|
| 1-way (individual) | 40-65% |
| 2-way (pairwise) | 70-90% |
| 3-way | 90-98% |
| 4-way | 96-100% |
| 6-way | 100% |
Covering Arrays
Un covering array CA(N; t, k, v) tiene N filas (test cases), k columnas (parámetros), v valores, y cada sub-array t contiene todas las combinaciones v^t.
Herramientas
PICT (Microsoft)
OS: Windows, macOS, Linux
Browser: Chrome, Firefox, Safari, Edge
Language: EN, ES, RU, FR
IF [Browser] = "Safari" THEN [OS] = "macOS";
ACTS (NIST)
Herramienta Java para covering arrays con constraints. Gratis.
Otras
- Jenny — Basada en C, rápida, open source
- Hexawise — Comercial, web
- AllPairs — Herramienta ligera de James Bach
Constraints en testing combinatorio
Los parámetros reales frecuentemente tienen dependencias. Las herramientas soportan:
- IF-THEN:
IF Browser = Safari THEN OS = macOS - Exclusión:
{OS = Linux, Browser = Safari}prohibida - Requerimiento:
IF PaymentType = CreditCard THEN CardNumber IS NOT empty
Ejercicio: Diseño de tests combinatorios
Problema 1
Un checkout de e-commerce tiene estos parámetros:
| Parámetro | Valores |
|---|---|
| Método de pago | Credit Card, PayPal, Apple Pay, Bank Transfer |
| Envío | Standard, Express, Overnight, Pickup |
| Moneda | USD, EUR, GBP |
| Envoltura regalo | Sí, No |
| Código descuento | Ninguno, Porcentaje, Monto fijo |
Solución
All-combinations: 4 * 4 * 3 * 2 * 3 = 288 test cases
Pairwise: ~16-20 test cases
Suite pairwise:
| # | Pago | Envío | Moneda | Regalo | Descuento |
|---|---|---|---|---|---|
| 1 | Credit Card | Standard | USD | Sí | Ninguno |
| 2 | Credit Card | Express | EUR | No | Porcentaje |
| 3 | Credit Card | Overnight | GBP | Sí | Fijo |
| 4 | PayPal | Standard | EUR | Sí | Fijo |
| 5 | PayPal | Express | GBP | No | Ninguno |
| 6 | PayPal | Overnight | USD | No | Porcentaje |
| 7 | Apple Pay | Standard | GBP | No | Porcentaje |
| 8 | Apple Pay | Express | USD | Sí | Fijo |
| 9 | Apple Pay | Overnight | EUR | Sí | Ninguno |
| 10 | Bank Transfer | Standard | USD | No | Fijo |
| 11 | Bank Transfer | Express | EUR | Sí | Ninguno |
| 12 | Bank Transfer | Overnight | GBP | No | Porcentaje |
| 13 | Credit Card | Pickup | USD | No | Ninguno |
| 14 | PayPal | Pickup | EUR | Sí | Porcentaje |
| 15 | Apple Pay | Pickup | GBP | No | Fijo |
| 16 | Bank Transfer | Pickup | USD | Sí | Porcentaje |
Problema 2
Agrega constraints y regenera:
- Apple Pay solo disponible para USD y EUR
- Pickup no soporta envoltura de regalo
- Bank Transfer no soporta envío Overnight
Solución
Modelo PICT con constraints:
Payment: CreditCard, PayPal, ApplePay, BankTransfer
Shipping: Standard, Express, Overnight, Pickup
Currency: USD, EUR, GBP
Gift: Yes, No
Discount: None, Percentage, Fixed
IF [Payment] = "ApplePay" THEN [Currency] IN {"USD", "EUR"};
IF [Shipping] = "Pickup" THEN [Gift] = "No";
IF [Payment] = "BankTransfer" THEN [Shipping] <> "Overnight";
Las herramientas generan automáticamente solo combinaciones válidas.
Eligiendo el nivel de cobertura correcto
| Situación | Estrategia recomendada |
|---|---|
| Bajo riesgo, muchos parámetros | Pairwise (2-way) |
| Sistema safety-critical | 4-6 way |
| Testing de configuración | Pairwise con constraints |
| Smoke test rápido | Each-choice o base-choice |
| Cumplimiento regulatorio | 3-way o mayor |
Puntos clave
- La explosión combinatoria hace all-combinations infactible para la mayoría de sistemas
- Pairwise (2-way) atrapa 70-90% de fallas de interacción con dramáticamente menos tests
- La investigación NIST muestra que la mayoría de fallas involucran 2-6 interacciones de parámetros
- Los covering arrays proveen la base matemática para generación t-way
- Herramientas (PICT, ACTS, Jenny) automatizan la generación con soporte de constraints
- Siempre modela constraints para evitar combinaciones inválidas
- Elige la fuerza de cobertura según el riesgo