Transiciones de estado
En resumen: La máquina de estados da tres medidas para las pruebas: se visita cada estado (2 pruebas para el pedido), se recorre cada transición válida (3 pruebas) y se intenta y se rechaza cada transición inválida. Las inválidas son la mayoría: de 30 pares «estado y evento», 6 son válidos. También son las que nadie prueba.
Problema
El pedido cancelado y pagado
Un cliente cancela un pedido nuevo. Luego, en otra pestaña del navegador donde la página de pago sigue abierta, pulsa «Pagar». El pago se realiza. El pedido pasa a «pagado», el almacén lo empaqueta, la mensajería lo entrega.
Las pruebas del pedido pasaban: pagar un pedido nuevo, cancelar un pedido nuevo, enviar uno pagado. Cada una era una transición permitida. Nadie había probado una prohibida.
La idea
La máquina como pruebas
En la lección «Cuando una tabla es más clara» la máquina de estados era un requisito. Aquí está completa, con la transición que allí faltaba:
| Desde | Evento y guarda | A |
|---|---|---|
| nuevo | el cliente paga | pagado |
| nuevo | el cliente cancela | cancelado |
| pagado | el cliente cancela (antes del envío) | cancelado |
| pagado | el almacén entrega el paquete | enviado |
| enviado | la mensajería entrega | entregado |
| entregado | el cliente pide una devolución, dentro de 14 días desde la recepción | devuelto |
Seis estados, seis transiciones válidas. «Cancelado» y «devuelto» son finales: no hay salida de ellos.
Una prueba aquí no es una entrada y una salida. Es un camino: una secuencia de eventos, y después de cada uno se comprueba el estado. Esto son las pruebas de transiciones de estado.
En las tareas de esta lección una fila de la tabla es un camino desde un pedido nuevo («pagar, enviar»), y lo que se comprueba es el estado al final y si el último evento se rechazó. Junto a la tabla hay un diagrama de la máquina: ve a una fila y se ilumina a lo largo de su camino.
La idea
Tres medidas
¿Cuántos caminos hacen falta? Depende de lo que quieras cubrir.
- Todos los estados: cada estado se visita al menos una vez. Aquí bastan 2 pruebas. Cuáles, lo encontrarás en la tarea.
- Todas las transiciones válidas: cada fila de la tabla se recorre al menos una vez. Las dos pruebas recorren 5 de las 6 transiciones, y la sexta necesita una tercera. 3 pruebas.
- Todas las transiciones: las válidas, y cada una de las inválidas, intentada y rechazada. Aquí las pruebas pasan a ser muchas más.
Cada medida incluye la anterior. Todos los estados es la débil: el error del principio vivía en una transición a la que no llegaba ningún camino.
Más precisamente, para curiosos
ISTQB CTFL v4.0.1 describe la técnica en la sección 4.2.4 (pruebas de transiciones de estado) con estas tres medidas: cobertura de todos los estados, cobertura de transiciones válidas (también llamada cobertura 0-switch) y cobertura de todas las transiciones. La máquina se puede escribir como un diagrama o como una tabla de estados. La tabla muestra también las transiciones inválidas, el diagrama normalmente no.
Para los sistemas críticos (trenes, aparatos médicos) las pruebas no bastan. Allí la máquina de estados se comprueba además de forma formal: una herramienta demuestra que ningún camino lleva a un estado prohibido. Eso es la verificación de modelos (model checking), un tipo de verificación formal. IEEE 1012 liga la cantidad de comprobación al nivel de integridad: cuanto más cara es la falla, más comprobación. Para la tienda la comprobación formal es demasiado cara, para el freno de un tren no.
Pruébalo
Todos los estados
Escribe los caminos que visitan cada uno de los seis estados. Bastan dos filas.
La regla: Un pedido nuevo se paga, uno pagado se envía, uno enviado se entrega y uno entregado se devuelve. Un pedido nuevo o pagado se puede cancelar antes de enviarlo. Cancelado y devuelto son estados finales. Cualquier otro evento se rechaza, y el pedido se queda donde está.
Ponte en una fila y el diagrama iluminará su camino.
| Entrada | Esperado | El sistema correcto | |||
|---|---|---|---|---|---|
| # | Camino | Al final | Último rechazado | ||
Un camino es una serie de eventos desde un pedido nuevo: «pagar, enviar» (con coma o espacio). El estado se escribe con la palabra: nuevo, pagado, enviado, entregado, cancelado, devuelto. Una celda de resultado vacía no se comprueba.
Solución
| Camino | Al final | Último rechazado |
|---|---|---|
| pagar, enviar, entregar, devolver | devuelto | no |
| cancelar | cancelado | no |
El camino largo pasa por cinco estados: nuevo → pagado → enviado → entregado → devuelto. «Cancelado» es final y no está en él, así que es el segundo camino: nuevo → cancelado. Estos dos caminos recorren 5 de las 6 transiciones. Pagado → cancelado se queda sin comprobar: esa es la diferencia entre la cobertura de estados y la de transiciones.
La idea
Transiciones inválidas
La tabla de transiciones enumera lo que está permitido. Más útil para probar es la tabla estado × evento: cada celda dice qué pasa si el evento llega en ese estado.
| Estado | pagar | cancelar | enviar | entregar | devolver |
|---|---|---|---|---|---|
| nuevo | pagado | cancelado | — | — | — |
| pagado | — | cancelado | enviado | — | — |
| enviado | — | — | — | entregado | — |
| entregado | — | — | — | — | devuelto (dentro de 14 días) |
| cancelado | — | — | — | — | — |
| devuelto | — | — | — | — | — |
30 celdas, 6 válidas. Las otras 24 son transiciones inválidas («—»). Cada una es una prueba: inténtala y comprueba que se rechaza.
Una prueba de una transición inválida comprueba tres cosas: el intento se rechaza, el estado no ha cambiado y el cliente ve por qué. Y un intento inválido por prueba: si el primero pasa por error, el pedido ya está en otro estado, y el segundo intento prueba otra cosa.
Pruébalo
¿Está prohibido?
La idea
Guardas en las transiciones
Algunas transiciones tienen una guarda. «Entregado → devuelto» ocurre solo si la devolución se pide dentro de los 14 días desde la recepción. El evento es uno, pero el resultado depende de la guarda.
Aquí se encuentran las técnicas. La guarda es un número, así que tiene un límite: el día 14 se acepta, el día 15 se rechaza (si el paquete se recibió el día 1, son el 15 y el 16). La máquina dice dónde probar, los valores límite dicen con qué.
Lo mismo con «pagado → cancelado»: la guarda es «antes del envío». La prueba son dos: cancelar un pedido pagado antes de que el almacén lo entregue, y un intento de cancelar justo después.
Ejercicio
Todas las transiciones
1. Todas las transiciones y las inválidas. El evento inválido va al final del camino: así la fila comprueba solo ese. Empieza por las más arriesgadas: pagar, enviar, cancelar o devolver cuando no se debe. La columna «Último rechazado» importa: en algunos errores el estado es el mismo, y la única diferencia es el rechazo.
Escribe caminos para cada una de las seis transiciones válidas y una fila para las transiciones inválidas hasta atrapar todos los errores.
La regla: Un pedido nuevo se paga, uno pagado se envía, uno enviado se entrega y uno entregado se devuelve. Un pedido nuevo o pagado se puede cancelar antes de enviarlo. Cancelado y devuelto son estados finales. Cualquier otro evento se rechaza, y el pedido se queda donde está.
Ponte en una fila y el diagrama iluminará su camino.
| Entrada | Esperado | El sistema correcto | |||
|---|---|---|---|---|---|
| # | Camino | Al final | Último rechazado | ||
Un camino es una serie de eventos desde un pedido nuevo: «pagar, enviar» (con coma o espacio). El estado se escribe con la palabra: nuevo, pagado, enviado, entregado, cancelado, devuelto. Una celda de resultado vacía no se comprueba.
Solución
| Camino | Al final | Último rechazado |
|---|---|---|
| pagar, enviar, entregar, devolver | devuelto | no |
| cancelar | cancelado | no |
| pagar, cancelar | cancelado | no |
| pagar, enviar, cancelar | enviado | sí |
| pagar, enviar, devolver | enviado | sí |
| pagar, pagar | pagado | sí |
| cancelar, pagar | cancelado | sí |
| cancelar, enviar | cancelado | sí |
| enviar | nuevo | sí |
Tres caminos recorren todas las transiciones válidas: el largo, nuevo → cancelado y nuevo → pagado → cancelado. Las inválidas son seis filas, cada una con un evento prohibido al final: cancelar y devolver un pedido enviado, un segundo pago, pagar y enviar un pedido cancelado, enviar uno sin pagar. Con el segundo pago el pedido sigue pagado incluso con el error, así que allí solo lo atrapa el rechazo. Las otras 18 celdas inválidas también son pruebas. Aquí no esconden ningún error, pero en un sistema real eso no se sabe.
Test
Ponte a prueba
Lecciones relacionadas
Sección «Lecciones relacionadas»- Se basa en: Criterios de aceptación · Particiones de equivalencia · Valores límite · Tablas de decisión
- Continúa en: Pruebas basadas en la experiencia
- Ejercicios sobre el tema: Técnicas de diseño de pruebas