Tablas de decisión
En resumen: En una tabla de decisión cada columna es una combinación de condiciones con un resultado, y cada columna es un caso de prueba. Tres condiciones con «sí» o «no» dan 8 columnas. Las columnas con el mismo resultado que se diferencian en una sola condición se fusionan con «—» (no importa), y hay menos pruebas. Una celda vacía o discutida es una pregunta para el dueño.
Problema
Tres pruebas, un precio equivocado
Conoces la regla de los descuentos: el código promocional da un 10 % y no vale para productos en oferta; los clientes fieles reciben un 5 %, también en productos en oferta; los descuentos no se suman, se aplica el mayor.
El tester escribe tres pruebas: un cliente con código (10 %), un cliente fiel sin código (5 %), un cliente sin nada (0 %). Pasan.
Después del lanzamiento un cliente fiel introduce un código en un producto que no está en oferta y obtiene un 15 %. Se probó cada condición. No se probó la combinación donde vivía el error.
La idea
Cada columna es una prueba
En la lección «Cuando una tabla es más clara» la tabla de decisión era un requisito. Ahora es diseño de pruebas: cada columna es un caso de prueba.
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
|---|---|---|---|---|---|---|---|---|
| El código es válido | sí | sí | sí | sí | no | no | no | no |
| El producto está en oferta | sí | sí | no | no | sí | sí | no | no |
| El cliente es fiel | sí | no | sí | no | sí | no | sí | no |
| Descuento | ? | ? | ? | 10 % | ? | ? | 5 % | 0 % |
Las pruebas del principio eran las columnas 4, 7 y 8. El error estaba en la columna 3. La cobertura de la tabla es cuántas columnas se prueban: aquí, 3 de 8.
La tabla completa es fácil de construir: las condiciones se convierten en filas, y las columnas son todas las combinaciones. Tres condiciones con «sí» o «no» dan 2 × 2 × 2 = 8.
Pruébalo
Columnas como pruebas
Rellena el descuento de cada una de las ocho columnas. Aquí las columnas de la tabla son filas: cada fila es un caso de prueba.
La regla: Un código promocional válido da un 10 %, pero no en productos en oferta. Un cliente fiel tiene un 5 %, también en los productos en oferta. Los descuentos no se suman: vale el mayor.
| Entrada | Esperado | El sistema correcto | ||||
|---|---|---|---|---|---|---|
| # | Código válido | En oferta | Fiel | Descuento | ||
El descuento se escribe como número: 10 o 10 %. Una celda de resultado vacía no se comprueba.
Solución
| Código válido | En oferta | Fiel | Descuento |
|---|---|---|---|
| sí | sí | sí | 5 |
| sí | sí | no | 0 |
| sí | no | sí | 10 |
| sí | no | no | 10 |
| no | sí | sí | 5 |
| no | sí | no | 0 |
| no | no | sí | 5 |
| no | no | no | 0 |
La columna 3 (código válido, sin oferta, cliente fiel) atrapa dos errores: los descuentos sumados (15 %) y el menor en lugar del mayor (5 %). La columna 1 atrapa el código que desactiva la fidelidad y da 0 % en un producto en oferta. La tabla completa no pierde nada, porque prueba todas las combinaciones.
La idea
La fusión
Mira las columnas 1 y 5. Se diferencian solo en el código, y el resultado es el mismo: 5 %. Cuando el producto está en oferta y el cliente es fiel, el código no importa. Las dos columnas se fusionan en una, y en lugar del código se escribe «—».
| 1+5 | 2+6 | 3+4 | 7 | 8 | |
|---|---|---|---|---|---|
| El código es válido | — | — | sí | no | no |
| El producto está en oferta | sí | sí | no | no | no |
| El cliente es fiel | sí | no | — | sí | no |
| Descuento | 5 % | 0 % | 10 % | 5 % | 0 % |
Ocho pruebas pasan a ser cinco. Esto es fusionar la tabla.
Su precio: fusionar dice «según la regla esta condición no importa». Pero la caja negra no sabe si el código está de acuerdo. Las columnas 3 y 4 se fusionan en «código sí, oferta no», y la columna 3 es justo donde el código daba un 15 %. Si de la columna fusionada pruebas solo a un cliente que no es fiel, el error se escapa.
Una prueba no puede ser «—»: en lugar de la raya eliges un valor. Elige aquel donde un error es más probable. Por eso para las reglas arriesgadas se prueba la tabla completa, y se fusiona cuando las pruebas son caras y el riesgo es pequeño.
Más precisamente, para curiosos
ISTQB CTFL v4.0.1 describe la técnica en la sección 4.2.3 (pruebas con tablas de decisión). Las condiciones y las acciones son filas, las columnas son las reglas (las combinaciones). La notación: «T» y «F» para las condiciones, «—» para una condición que no importa, «N/A» para una combinación irrealizable, «X» para una acción que ocurre. La cobertura es el número de columnas probadas sobre todas las realizables. La fusión (minimización) reduce el número de pruebas, pero el plan de estudios advierte de que así se pierde parte de la comprobación.
Pruébalo
Fusiona las columnas
Construye la tabla fusionada: como mucho 5 filas que sigan atrapando todos los errores. Donde la lección tiene «—», elige un valor.
La regla: Un código promocional válido da un 10 %, pero no en productos en oferta. Un cliente fiel tiene un 5 %, también en los productos en oferta. Los descuentos no se suman: vale el mayor.
| Entrada | Esperado | El sistema correcto | ||||
|---|---|---|---|---|---|---|
| # | Código válido | En oferta | Fiel | Descuento | ||
El descuento se escribe como número: 10 o 10 %. Una celda de resultado vacía no se comprueba.
Solución
| Código válido | En oferta | Fiel | Descuento |
|---|---|---|---|
| sí | sí | sí | 5 |
| sí | sí | no | 0 |
| sí | no | sí | 10 |
| no | no | sí | 5 |
| no | no | no | 0 |
En 3+4 la fidelidad es «sí»: ahí es donde los descuentos podrían sumarse. En 1+5 el código es «sí»: ahí es donde el código podría valer para un producto en oferta o desactivar la fidelidad. Cinco filas atrapan todo lo que atrapan las ocho, pero solo con estos valores. Con «no» en lugar de cada raya la tabla sigue fusionada, y cuatro errores se escapan.
La idea
Más de dos valores
«El código es válido» parece «sí» o «no». En la tienda no lo es. El código puede estar sin introducir, válido, caducado o ya usado, y cada uno le da al cliente algo distinto:
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| Se introduce un código | no | sí | sí | sí | sí |
| Ha caducado | N/A | no | sí | no | sí |
| Se ha usado | N/A | no | no | sí | sí |
| El cliente ve | el total sin código | el descuento | «El código ha caducado» | «El código ya se usó» | ? |
Se ven dos cosas a la vez.
Combinaciones imposibles. Un código que no se introdujo no puede haber caducado. Esas columnas se marcan como imposibles (N/A) y no se prueban.
La celda vacía. Columna 5: el código ha caducado y además se ha usado. ¿Qué mensaje? La regla no lo dice. El tester no decide por el dueño. Esto es un hallazgo, y salió de la tabla antes de que hubiera código. Por eso el diseño de pruebas también es una revisión.
Las columnas crecen rápido: una condición con cuatro valores y dos con dos cada una dan 4 × 2 × 2 = 16. Con diez condiciones de «sí o no» son 1024. Entonces la regla se divide en tablas más pequeñas, y las combinaciones se eligen con otra técnica, como las pruebas por pares más adelante en el módulo.
Ejercicio
Las tablas del código
1. ¿Qué dice la tabla? Cuatro preguntas que encuentra el tester al escribir la tabla.
Test
Ponte a prueba
Lecciones relacionadas
Sección «Lecciones relacionadas»- Se basa en: Criterios de aceptación · Revisar una especificación · Particiones de equivalencia · Valores límite
- Continúa en: Transiciones de estado · Pruebas por pares (pairwise) · Cobertura del código · Pruebas basadas en la experiencia
- Ejercicios sobre el tema: Técnicas de diseño de pruebas