¿Qué Es Orthogonal Array Testing?
Orthogonal Array Testing (OAT) usa estructuras matemáticas llamadas arreglos ortogonales para generar suites de tests. Estos arreglos garantizan que cada par de valores de parámetros aparezca un número igual de veces en todos los test cases, proporcionando cobertura balanceada y uniforme.
Orígenes: Método Taguchi
OAT se originó del método Taguchi en ingeniería de calidad de manufactura. El Dr. Genichi Taguchi desarrolló arreglos ortogonales para probar eficientemente el impacto de múltiples factores en la calidad del producto. El testing de software adoptó esta técnica para diseño de tests combinatorios.
Entendiendo los Arreglos Ortogonales
Un arreglo ortogonal es una matriz donde:
- Filas = test cases
- Columnas = parámetros (factores)
- Valores = niveles de cada parámetro
La propiedad clave: para cualquier dos columnas, cada par posible de valores aparece el mismo número de veces.
Notación: L_n(k^f)
- L = Latin square (tipo de arreglo)
- n = número de filas (test cases)
- k = número de valores por parámetro (niveles)
- f = número de parámetros (factores)
Ejemplo: L4(2^3) — 4 test cases, 3 parámetros, 2 valores cada uno
| Test | P1 | P2 | P3 |
|---|---|---|---|
| 1 | 0 | 0 | 0 |
| 2 | 0 | 1 | 1 |
| 3 | 1 | 0 | 1 |
| 4 | 1 | 1 | 0 |
Verifica cualquier dos columnas: cada par (0,0), (0,1), (1,0), (1,1) aparece exactamente una vez.
Arreglos Ortogonales Comunes
| Arreglo | Tests | Parámetros | Valores | Exhaustivo |
|---|---|---|---|---|
| L4(2^3) | 4 | 3 | 2 | 8 |
| L8(2^7) | 8 | 7 | 2 | 128 |
| L9(3^4) | 9 | 4 | 3 | 81 |
| L16(2^15) | 16 | 15 | 2 | 32,768 |
| L18(3^7) | 18 | 7 | 3 | 2,187 |
| L25(5^6) | 25 | 6 | 5 | 15,625 |
OAT vs. Pairwise Testing
| Aspecto | OAT | Pairwise |
|---|---|---|
| Cobertura | Cada par aparece igualmente | Cada par aparece al menos una vez |
| Balance | Perfectamente balanceado | Puede ser desbalanceado |
| Flexibilidad | Tamaños de arreglo fijos | Adaptable a cualquier número de parámetros |
| Valores mixtos | Más difícil con niveles mixtos | Maneja fácilmente |
| Optimalidad | Matemáticamente óptimo | Casi óptimo (heurístico) |
Seleccionando el Arreglo Correcto
Paso 1: Contar parámetros y valores por parámetro. Paso 2: Encontrar el arreglo estándar más pequeño que se ajuste. Paso 3: Si los parámetros tienen diferentes números de valores, usar arreglos de nivel mixto.
Técnicas Avanzadas de OAT
Ejemplo Real: Compatibilidad de Browsers
Parámetros: Browser (3), OS (3), Resolución (3), Idioma (3)
Usando L9(3^4):
| Test | Browser | OS | Resolución | Idioma |
|---|---|---|---|---|
| 1 | Chrome | Windows | 1080p | EN |
| 2 | Chrome | macOS | 1440p | ES |
| 3 | Chrome | Linux | 4K | RU |
| 4 | Firefox | Windows | 1440p | RU |
| 5 | Firefox | macOS | 4K | EN |
| 6 | Firefox | Linux | 1080p | ES |
| 7 | Edge | Windows | 4K | ES |
| 8 | Edge | macOS | 1080p | RU |
| 9 | Edge | Linux | 1440p | EN |
9 tests en lugar de 81. Cada par de valores de cualquier dos parámetros aparece exactamente una vez.
Arreglos de Nivel Mixto
Cuando los parámetros tienen diferentes números de valores, usa arreglos ortogonales de nivel mixto:
L18(2^1 x 3^7): 18 tests para 1 parámetro binario + 7 parámetros de tres niveles.
Fuerza Más Allá de 2
OAT estándar proporciona fuerza 2 (todos los pares). Arreglos de mayor fuerza cubren triples, cuádruples:
- Fuerza 2: Cada par cubierto → detecta defectos de interacción 2-way
- Fuerza 3: Cada triple cubierto → detecta defectos de interacción 3-way
Mayor fuerza = más tests pero detecta defectos de interacción más raros.
Ejercicio: Aplica OAT a un Test de Configuración
Escenario: Necesitas probar una configuración de base de datos:
- Motor DB: MySQL, PostgreSQL, SQLite (3)
- Connection Pool: 5, 20, 100 (3)
- Cache: Habilitado, Deshabilitado, Parcial (3)
- Logging: Debug, Info, Error (3)
Tareas:
- ¿Qué arreglo ortogonal se ajusta a estos parámetros?
- ¿Cuántos test cases genera vs. exhaustivo?
- Llena la matriz de test usando L9(3^4)
- Verifica que cualquier dos columnas contengan los 9 pares exactamente una vez
Pista
4 parámetros x 3 valores = L9(3^4). Exhaustivo = 3^4 = 81. Mapea el arreglo estándar L9 a tus valores específicos.
Solución
Arreglo: L9(3^4) — 9 tests en lugar de 81 (89% reducción).
| Test | Motor DB | Pool | Cache | Logging |
|---|---|---|---|---|
| 1 | MySQL | 5 | Habilitado | Debug |
| 2 | MySQL | 20 | Deshabilitado | Info |
| 3 | MySQL | 100 | Parcial | Error |
| 4 | PostgreSQL | 5 | Deshabilitado | Error |
| 5 | PostgreSQL | 20 | Parcial | Debug |
| 6 | PostgreSQL | 100 | Habilitado | Info |
| 7 | SQLite | 5 | Parcial | Info |
| 8 | SQLite | 20 | Habilitado | Error |
| 9 | SQLite | 100 | Deshabilitado | Debug |
Cada par de cualquier dos columnas aparece exactamente una vez.
Tips de Profesional
- Usa OAT cuando el balance importa. Si necesitas analizar estadísticamente qué factor causa fallas, el diseño balanceado de OAT es esencial.
- Combina con BVA para selección de valores. OAT te dice qué combinaciones de parámetros probar; BVA te dice qué valores específicos usar.
- Recurre a pairwise para conjuntos irregulares. Si tienes 12 parámetros con diferentes números de valores, herramientas pairwise como PICT son más prácticas.
- Conoce los arreglos estándar. L4, L8, L9, L16, L18, L25, L27 cubren la mayoría de escenarios prácticos.
- OAT reduce costos en testing de hardware. Cuando cada ejecución cuesta dinero real, la optimalidad matemática de OAT ahorra presupuesto.