Algunos sistemas cambian su comportamiento según el estado en el que se encuentran. Una orden puede estar pendiente, pagada, enviada o cancelada. Una cuenta puede estar activa, bloqueada o suspendida. Un ticket puede estar abierto, en progreso, resuelto o cerrado.
La técnica de transiciones de estado ayuda a diseñar pruebas cuando el resultado depende del estado actual y de la acción o evento que ocurre.
Esta técnica es especialmente útil para flujos donde no solo importa qué acción se ejecuta, sino también desde qué estado se ejecuta y hacia qué estado debería pasar el sistema.
Un estado es una situación o condición en la que se encuentra un objeto, entidad o proceso en un momento determinado.
Ejemplos:
El estado condiciona qué acciones están permitidas y qué acciones deben rechazarse.
Una transición es el cambio de un estado a otro como resultado de una acción, evento o condición.
Ejemplo:
La transición define qué cambio debería ocurrir. Si el sistema pasa a un estado incorrecto o permite una transición prohibida, existe un defecto.
Un evento o acción es lo que provoca una transición. Puede ser iniciado por un usuario, por otro sistema o por un proceso automático.
Ejemplos:
Para probar transiciones, debemos conocer estado inicial, acción ejecutada y estado final esperado.
Conviene usar transiciones de estado cuando:
Si una acción siempre produce el mismo resultado sin importar el estado anterior, quizá otra técnica sea más simple. Pero si el estado cambia el comportamiento, esta técnica aporta claridad.
Un diagrama de estados representa estados y transiciones. Los estados suelen mostrarse como nodos y las transiciones como flechas.
Ejemplo conceptual para una orden:
Este diagrama muestra que una orden pendiente puede pagarse o cancelarse. Una orden pagada puede enviarse o cancelarse. Una orden enviada puede entregarse. No se indica, por ejemplo, que una orden entregada pueda volver a pendiente.
Además del diagrama, podemos usar una tabla. La tabla suele ser más práctica para derivar casos de prueba.
| Estado inicial | Acción | Estado final esperado | Resultado esperado |
|---|---|---|---|
| Pendiente | Pagar | Pagada | La orden queda pagada. |
| Pendiente | Cancelar | Cancelada | La orden queda cancelada. |
| Pagada | Enviar | Enviada | La orden queda enviada. |
| Enviada | Entregar | Entregada | La orden queda entregada. |
Cada fila puede convertirse en un caso de prueba.
No solo debemos probar transiciones permitidas. También debemos comprobar que el sistema rechace transiciones inválidas.
Ejemplos para una orden:
Probar solo caminos válidos puede dejar defectos de permisos o reglas de negocio sin detectar.
Estados posibles:
Reglas:
Estas reglas son una base excelente para crear una tabla de transiciones y casos de prueba.
| Caso | Estado inicial | Acción | Resultado esperado |
|---|---|---|---|
| CP-ORD-001 | Pendiente | Pagar | La orden pasa a Pagada. |
| CP-ORD-002 | Pendiente | Cancelar | La orden pasa a Cancelada. |
| CP-ORD-003 | Pagada | Enviar | La orden pasa a Enviada. |
| CP-ORD-004 | Enviada | Entregar | La orden pasa a Entregada. |
| CP-ORD-005 | Entregada | Cancelar | El sistema rechaza la cancelación. |
| CP-ORD-006 | Cancelada | Enviar | El sistema rechaza el envío. |
Los casos CP-ORD-005 y CP-ORD-006 son importantes porque verifican restricciones.
Estados posibles de una cuenta:
Reglas:
Estas reglas permiten diseñar pruebas de inicio de sesión, administración y recuperación de cuenta.
Un estado final es un estado desde el cual no se esperan nuevas transiciones normales. Por ejemplo, una orden Cancelada o Entregada podría considerarse final en ciertos sistemas.
Los estados finales requieren atención porque el sistema debe impedir acciones que ya no corresponden.
Ejemplos:
Probar estados finales ayuda a evitar inconsistencias.
No todas las transiciones son iniciadas por usuarios. Algunas ocurren automáticamente.
Ejemplos:
Estas transiciones pueden requerir manipular fechas, ejecutar procesos programados o simular eventos.
A veces no basta con probar una transición aislada. Hay que probar secuencias completas.
Ejemplo de orden:
Ejemplo de cuenta:
Las secuencias permiten detectar problemas que aparecen después de varios cambios de estado, como datos inconsistentes, permisos incorrectos o acciones que quedan habilitadas indebidamente.
Otra forma de organizar la información es una matriz donde las filas son estados y las columnas son acciones o eventos.
| Estado / Acción | Pagar | Cancelar | Enviar | Entregar |
|---|---|---|---|---|
| Pendiente | Pagada | Cancelada | No permitido | No permitido |
| Pagada | No permitido | Cancelada | Enviada | No permitido |
| Enviada | No permitido | No permitido | No permitido | Entregada |
| Entregada | No permitido | No permitido | No permitido | No permitido |
| Cancelada | No permitido | No permitido | No permitido | No permitido |
Esta matriz es muy útil para detectar acciones que deben rechazarse en ciertos estados.
Las tablas de decisión y las transiciones de estado pueden parecer similares, pero se enfocan en problemas distintos.
| Técnica | Uso principal | Ejemplo |
|---|---|---|
| Tabla de decisión | Resultado según combinación de condiciones. | Aplicar descuento según cliente, importe y promoción. |
| Transición de estado | Resultado según estado actual y evento. | Una orden pasa de Pendiente a Pagada al recibir pago. |
Si el orden o secuencia de estados importa, probablemente convenga usar transiciones de estado.
La técnica de transiciones de estado tiene varias ventajas:
Es muy útil cuando el comportamiento actual depende de lo que ocurrió antes.
También tiene límites:
Si el modelo de estados no está documentado, el primer paso puede ser construirlo con el equipo.
Al aplicar esta técnica, algunos errores frecuentes son:
Estos errores pueden permitir inconsistencias graves en procesos de negocio.
Para aplicar bien transiciones de estado conviene:
Las transiciones de estado permiten probar sistemas donde el comportamiento depende de estados previos y acciones. Son fundamentales para procesos como compras, reservas, cuentas, tickets, facturas, préstamos y flujos administrativos.
Esta técnica ayuda a validar que las acciones permitidas cambien el estado correctamente y que las acciones prohibidas sean rechazadas. También ayuda a detectar inconsistencias en estados finales y secuencias de negocio.
En el próximo tema estudiaremos pruebas positivas, negativas y casos borde, conceptos esenciales para equilibrar caminos exitosos, errores esperados y condiciones extremas.