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ámetrosValoresAll CombosPairwise3-way4-way
53243~15~45~81
10359,049~20~60~120
154~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ónFallas detectadas acumuladas
1-way (individual)40-65%
2-way (pairwise)70-90%
3-way90-98%
4-way96-100%
6-way100%

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ámetroValores
Método de pagoCredit Card, PayPal, Apple Pay, Bank Transfer
EnvíoStandard, Express, Overnight, Pickup
MonedaUSD, EUR, GBP
Envoltura regaloSí, No
Código descuentoNinguno, Porcentaje, Monto fijo
Solución

All-combinations: 4 * 4 * 3 * 2 * 3 = 288 test cases

Pairwise: ~16-20 test cases

Suite pairwise:

#PagoEnvíoMonedaRegaloDescuento
1Credit CardStandardUSDNinguno
2Credit CardExpressEURNoPorcentaje
3Credit CardOvernightGBPFijo
4PayPalStandardEURFijo
5PayPalExpressGBPNoNinguno
6PayPalOvernightUSDNoPorcentaje
7Apple PayStandardGBPNoPorcentaje
8Apple PayExpressUSDFijo
9Apple PayOvernightEURNinguno
10Bank TransferStandardUSDNoFijo
11Bank TransferExpressEURNinguno
12Bank TransferOvernightGBPNoPorcentaje
13Credit CardPickupUSDNoNinguno
14PayPalPickupEURPorcentaje
15Apple PayPickupGBPNoFijo
16Bank TransferPickupUSDPorcentaje

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ónEstrategia recomendada
Bajo riesgo, muchos parámetrosPairwise (2-way)
Sistema safety-critical4-6 way
Testing de configuraciónPairwise con constraints
Smoke test rápidoEach-choice o base-choice
Cumplimiento regulatorio3-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