2.4 Modelos de prueba
2.4.1 La máquina de estados
La máquina de estados representa un sistema cuya respuesta viene determinada no sólo por la entrada actual, sino también por las anteriores. Estas entradas pasadas se quedan reflejadas en el estado. En contraste, las salidas de un sistema combinacional dependen sólo del estado en el que se encuentre. Por ejemplo, un candado de los comúnmente llamados de combinación, para abrirlo es necesario marcar unos valores específicos en un orden concreto, y es la secuencia de las entradas lo que determina la respuesta del candado.
Estas máquinas son la aplicación en ingeniería de lo que matemáticamente se conoce como autómata finito. Una maquina de estados es una abstracción de un sistema real, compuesta por eventos, estados y acciones. Una máquina de estados se construye sobre cuatro componentes:
Estado- Resume la información relativa al pasado del sistemanecesaria para determinar el comportamiento del mismo frente a futuras entradas.
Transición- Paso permitido de un estado a otro. Viene ocasionada por un evento y puede dar lugar a una salida. Debe especificar los estados entre los que se produce.
Evento- Una entrada, un intervalo de tiempo que provoca una reacción en el sistema.
Acción- La respuesta del sistema a un evento.
Conceptualmente el funcionamiento de una máquina de estados es muy simple:
• Se parte de un estado llamado inicial.
• Si no se producen alteraciones la máquina permanece en este estado indefinidamente.
• Se recibe un evento.
• Si el evento no afecta al estado es ignorado, permaneciendo la máquina en el mismo.
• Si el evento se acepta, se produce una transición que puede ir acompañada de una acción de salida, y la máquina pasa al estado destino, convirtiéndose éste en actual.
• El proceso se repite hasta alcanzar el estado final, que puede existir o no.
Hay que tener en cuenta que la máquina sólo puede tener un estado activo en cada instante, y es requisito imprescindible para cambiar de estado que se produzca una (y sólo una por vez) transición. Los eventos se reconocen de uno en uno, siempre y cuando se hayan definido previamente. El modelo
es estático, no pueden crearse o borrarse estados, acciones, eventos o transiciones durante la ejecución de la máquina
2.4.1.1 Diagramas de estados
Los diagramas de estado son una representación gráfica de las máquinas de estados. En la figura podemos ver un sencillo diagrama de estados.
s1 s3 s2 Init e1 / a1 e2 / a2 e3 / a3 e4 / a4
Figura 2.15 Diagrama de estados
Los estados (s1, s2 y s3) se representan por medio de nodos mientras que las transiciones se representan por flechas, las anotaciones que acompañan a éstas representan los pares evento / acción (e1 / a1, e2 / a2, e3 / a3, e4 / a4).
Los diagramas de transición de estados son una técnica muy útil en el análisis y diseño de los sistemas software [CUH99]. Se distingue entre autómatas de Mealy (la salida depende de las entradas y del estado actual) y autómatas de Moore (la salida depende sólo del estado actual).
En la Tesis Doctoral se utiliza la notación de máquinas de estados definida por Harel, o lenguaje de los statecharts, que está incorporada dentro del estándar UML (Unified Modelling Language) [OMG03]. Los statecharts de Harel [Har90] son más claros que las máquinas de transición de estados clásicas de Moore y Mealy, y se usan en dominios tan variados como simulación de vehículos [CKP96], telecomunicaciones [Men99], hypermedia [PMF99] o sistemas de seguridad [Dam99]. Existen otras dos notaciones muy extendidas: la tradicional, generalmente utilizada en los libros científicos, que representa los nodos-estados como círculos; y la utilizada en análisis estructural que los representa como rectángulos.
2.4.1.2 Propiedades
A la hora de realizar el modelado de una máquina de estados hay que tener en cuenta una serie de puntos. Teóricamente, hay que especificar una transición para cada par evento/estado. Si bien, en la realización práctica esto no suele cumplirse; de un modelo en el que no se han definido todos los pares se dice que su especificación es incompleta. Normalmente sólo los pares de interés se añaden a la especificación, no obstante, a la hora de probar no podemos olvidarnos del resto.
Dos estados son equivalentes cuando sobre ellos pueden actuar los mismos eventos y, además, desencadenan idénticas acciones. En una máquina de estados bien definida no deberían existir estados equivalentes.
Un estado es alcanzable cuando existe una transición definida que nos lleva hasta él. Hay varios motivos por los que pueden existir estados inalcanzables:
Estados muertos, cuando una máquina entra en un estado muerto deja de funcionar, por lo que no puede llegarse a ningún otro estado.
Bucles muertos, cuando una máquina entra en un bucle muerto no logra alcanzar ningún estado que no pertenezca a éste.
Estados mágicos, son estados a los que no lleva ninguna transición pero de los que si salen. Son estados iniciales extra. Siempre son debidos a un error.
2.4.1.3 Tablas de transiciones
Cuando el número de estados es demasiado alto los diagramas de estados dejan de ser útiles porque se complican demasiado. Un sistema que supera los 20 estados comienza a ser gráficamente intratable. Una buena alternativa para estos sistemas es representarlos en forma de tablas de transiciones. Estas tablas presentan la misma información que los diagramas de estados pero con un formato diferente y pasar de uno a otro no ofrece mayores complicaciones. La máquina de estados de la Figura 2.15 aparece aquí en forma de tablas:
• Tablas estado – estado
Las filas representan estados aceptados y las columnas representan estados resultantes en las
intersecciones se especifican los eventos y acciones de la transición.
Estado resultante (evento / acción) Estado inicial s1 s2 s3 s1 e4 / a4 e1 / a1 s2 e3 / a3 s3 e2 / a2
• Tablas evento – estado.
Las filas representan los eventos las columnas contienen los estados en las intersecciones se especifican los estados resultantes y las acciones.
Estado inicial (estado resultante / acción) Evento s1 s2 s3 e1 s3 / a1 e2 s2 / a2 e3 s1 / a3 e4 s2 / a4
Tabla 2.5 Tabla Evento- Estado
2.4.1.4 Limitaciones
Las máquinas de estados tienen dos importantes limitaciones a la hora de utilizarlas para el desarrollo de aplicaciones software.
Por una parte, su escalabilidad es limitada. Aunque las herramientas de diseño asistido son una ayuda considerable, leer y dibujar diagramas con más de 20 estados puede resultar bastante engorroso. En este sentido, las tablas de estados nos permiten aumentar el número de estados manejables, pero también tienen sus limitaciones. Generalmente el aumento de estados debe ir acompañado de anidamiento, y esto es algo que este modelo básico no permite.
Por otro lado, este modelo no contempla el hecho de que dos (o más) sucesos independientes
concurran en el tiempo. La máquina de estados sólo reconoce un estado por instante de tiempo. Una evolución de las máquinas de estados que soluciona estos problemas son los statechart, a los que se dedica el apartado 2.4.2.