Más allá de boundaries de una variable
El BVA (Lección 3.2) testea una variable a la vez. Pero el software real tiene espacios de entrada definidos por relaciones entre múltiples variables. Considera un sistema de aprobación de préstamos:
- Aprobado si:
income >= 30000 AND debt_ratio < 0.4 AND credit_score >= 650
Esto crea un dominio de entrada tridimensional. El boundary no es un solo punto sino una superficie en espacio 3D. Testear cada variable independientemente (como hace BVA) pierde defectos que ocurren en la intersección de boundaries.
El análisis de dominio, formalizado por Beizer y luego por Binder, extiende BVA para manejar estos espacios de entrada multidimensionales sistemáticamente.
Conceptos fundamentales
Dominio de entrada
El conjunto de todas las combinaciones de entrada posibles.
Boundary de dominio
Una condición que divide el espacio de entrada en regiones con diferentes comportamientos.
Puntos On y Off
On point: Un valor exactamente en el boundary.
Off point: Un valor mínimamente diferente del on point, al otro lado del boundary.
| Boundary | On Point | Off Point |
|---|---|---|
| x <= 10 (dominio es x <= 10) | 10 (en dominio) | 11 (fuera) |
| x < 10 (dominio es x < 10) | 9 (en dominio) | 10 (fuera) |
| x >= 5 (dominio es x >= 5) | 5 (en dominio) | 4 (fuera) |
| x > 5 (dominio es x > 5) | 6 (en dominio) | 5 (fuera) |
In Points
Valores claramente dentro del dominio — lejos de boundaries.
Out Points
Valores claramente fuera del dominio.
Tipos de errores de dominio
Desplazamiento de boundary
El boundary está en la posición incorrecta. Debería ser x <= 100 pero se implementó como x <= 99.
Error de closure
El boundary tiene el tipo incorrecto. Debería ser x <= 10 pero se implementó como x < 10.
Boundary faltante
Un boundary que debería existir está ausente.
Boundary extra
Un boundary existe que no debería.
Boundary inclinado
Para boundaries multi-variable como x + y <= 100, el boundary tiene la pendiente incorrecta.
El método de análisis de dominio
Paso 1: Identificar variables y boundaries
Ejemplo: Cotización de seguro
- Variables: age (18-80), driving_years (0-62), accidents (0-10)
- Boundaries: age >= 25, driving_years >= 3, accidents <= 2 → tarifa estándar
Paso 2: Para cada boundary, seleccionar puntos On y Off
| Boundary | Variable | On Point | Off Point |
|---|---|---|---|
| age >= 25 | age | 25 | 24 |
| driving_years >= 3 | driving_years | 3 | 2 |
| accidents <= 2 | accidents | 2 | 3 |
Paso 3: Construir la matriz de dominio
| Test | age | driving_years | accidents | Boundary testeado | Esperado |
|---|---|---|---|---|---|
| 1 | 25 | 10 | 0 | age ON | Estándar |
| 2 | 24 | 10 | 0 | age OFF | Tarifa alta |
| 3 | 35 | 3 | 0 | years ON | Estándar |
| 4 | 35 | 2 | 0 | years OFF | Tarifa alta |
| 5 | 35 | 10 | 2 | accidents ON | Estándar |
| 6 | 35 | 10 | 3 | accidents OFF | Tarifa alta |
| 7 | 35 | 10 | 0 | IN point | Estándar |
Esto requiere 2 tests por boundary más 1 in-point = 2B + 1 total.
Boundaries multi-variable
Ejemplo: Envío gratis si quantity * price >= 100
On points en la línea quantity * price = 100: (10, 10), (20, 5), (50, 2)
Off points justo debajo: (10, 9.99), (20, 4.99), (50, 1.99)
Testea múltiples pares on/off a lo largo del boundary para detectar errores de inclinación.
Ejercicio: Análisis de dominio
Problema 1
Una calculadora de tarifas de estacionamiento usa estas reglas:
- Primera hora: $5.00
- Horas 2-4: $3.00/hora
- Horas 5-8: $2.00/hora
- Horas 9-24: $1.50/hora
- Más de 24 horas: $1.00/hora
- Cargo máximo: $50/día
Solución
Boundaries:
| # | Boundary | On Point | Off Point |
|---|---|---|---|
| 1 | duration = 1 | 1.0 | 1.01 |
| 2 | duration = 4 | 4.0 | 4.01 |
| 3 | duration = 8 | 8.0 | 8.01 |
| 4 | duration = 24 | 24.0 | 24.01 |
| 5 | cargo máximo = $50 | en el tope | justo sobre tope |
Test cases:
| # | duration | Costo esperado | Testea |
|---|---|---|---|
| 1 | 0.5 | $5.00 | IN point |
| 2 | 1.0 | $5.00 | ON boundary 1 |
| 3 | 1.01 | $5.00 + $0.03 | OFF boundary 1 |
| 4 | 4.0 | $14.00 | ON boundary 2 |
| 5 | 4.01 | $14.02 | OFF boundary 2 |
| 6 | 8.0 | $22.00 | ON boundary 3 |
| 7 | 24.0 | $46.00 | ON boundary 4 |
| 8 | 48 | $50.00 (tope) | Boundary de cargo máximo |
Problema 2
Una app de fitness categoriza usuarios por dos variables:
- BMI: bajo peso (<18.5), normal (18.5-24.9), sobrepeso (25-29.9), obeso (>=30)
- Nivel de actividad: sedentario (<150 min/semana), moderado (150-300), activo (>300)
Solución
Boundaries:
| # | Variable | Boundary | On | Off |
|---|---|---|---|---|
| 1 | BMI | 18.5 | 18.5 | 18.4 |
| 2 | BMI | 25.0 | 24.9 | 25.0 |
| 3 | BMI | 30.0 | 29.9 | 30.0 |
| 4 | Actividad | 150 | 150 | 149 |
| 5 | Actividad | 300 | 300 | 301 |
Matriz de dominio (12 regiones = 4 BMI x 3 actividad):
| # | BMI | Actividad | Categoría |
|---|---|---|---|
| 1 | 18.4 | 100 | Bajo peso + Sedentario |
| 2 | 18.5 | 100 | Normal + Sedentario |
| 3 | 22.0 | 149 | Normal + Sedentario (OFF boundary actividad) |
| 4 | 22.0 | 150 | Normal + Moderado (ON boundary actividad) |
| 5 | 22.0 | 225 | Normal + Moderado (IN point) |
| 6 | 24.9 | 225 | Normal + Moderado (ON boundary BMI) |
| 7 | 25.0 | 225 | Sobrepeso + Moderado |
| 8 | 30.0 | 225 | Obeso + Moderado |
Cuándo usar análisis de dominio
Usa análisis de dominio cuando:
- Múltiples variables interactúan para determinar comportamiento
- Los boundaries involucran relaciones entre variables
- Necesitas detectar errores off-by-one, closure y desplazamiento
Prefiere BVA simple cuando:
- Las variables son independientes
- Los boundaries de una variable son suficientes
Puntos clave
- El análisis de dominio extiende BVA a espacios de entrada multi-variable
- Los on points están exactamente en boundaries; los off points están mínimamente al otro lado
- Testea 2 puntos por boundary (on + off) más puntos interiores = 2B + 1 mínimo
- Cuatro tipos de error: desplazamiento, closure, boundary faltante, boundary inclinado
- Construye matrices de dominio variando un boundary mientras mantienes otros en valores interiores
- Para boundaries multi-variable, testea múltiples pares on/off para detectar errores de inclinación