8 Diagramas de Transición de Estados 8.1 Introducción En este capítulo aprenderemos: ♦ la notación de los diagramas de transición de estados. ♦ cómo dibujar partes de un diagrama de transición de estados. ♦ cómo construir con éxito un diagrama de transición de estados. ♦ la relación de los DTE y otros modelos. En capítulos anteriores hemos aprendido a identificar las funciones que realiza un sistema así como los almacenamientos de datos que debe recordar. Ahora estudiamos una tercera clase de herramienta de modelado conocida como DTE o diagrama de transición de estados, que nos permite expresar el comportamiento del sistema dependiente del tiempo. Los modelos para estudiar el comportamiento de un sistema dependiente del tiempo son importantes aplicarlos para una categoría especial de sistemas conocidos como sistemas de tiempo real. Como ejemplos podríamos citar; control de procesos, sistemas de permutación telefónica, sistemas de adquisición de datos a alta velocidad y sistemas de control militares. Algunos de estos sistemas son pasivos, es decir, no persiguen el control del entorno pero si capturar la reacción de este o la captura de datos respecto a éste. Muchos sistemas de adquisición de datos a alta velocidad entran en esta categoría de sistemas (por ejemplo, sistemas de captura a alta velocidad de datos científicos vía satélite). Otros sistemas de tiempo real son mas activos, en el sentido de que ellos persiguen mantener el control sobre algunos aspectos del entorno del sistema. Sistemas de control de procesos y una variedad de sus subsistemas entran en esta categoría. Como podrá imaginarse, sistemas de esta clase trabajan con fuentes de datos a alta velocidad y por tanto deben proporcionar respuestas y salidas de datos lo suficientemente rápidas a las exigencias del entorno del sistema. Una parte importante para especificar este tipo de sistemas es describir qué pasa cuándo. Para sistemas administrativos convencionales, este tipo de modelado no tiene ninguna importancia. Las entradas llegan al sistema desde diferentes fuentes y a una determinada velocidad, pero éstas pueden ser retrasadas si el sistema está ocupado realizando alguna otra cosa. Un sistema de gestión de nóminas, por ejemplo, no tiene porque preocuparse sobre interrupciones o señales que provengan de una unidad de rádar. Aquí únicamente describimos las especificaciones de respuesta temporal. Sin embargo, estamos empezando a ver un tipo de sistemas mas complicados que los sistemas administrativos, sistemas sobre los que hay que estudiar aspectos de comportamiento en tiempo real. Si un sistema está caracterizado por entradas desde miles de terminales, así como entradas de alta velocidad desde otros ordenadores o a través facilidades de comuncación vía satélite, entonces debe tener la misma clase de dependencia del tiempo que un sistema de timepo real clásico tiene. 8.2 Notación del diagrama de transición de estado A continuación, en la figura 1, se muestra un típico diagrama de transición de estados. Este diagrama muestra el comportamiento de un contestador telefónico. IDLE ESPERA DE LLAMADA GRABANDO MENSAJE REWINDING REPROD. MENSAJES CONTEST. LLAMADA figura 1: DTE para un contestador telefónico Los componentes principales del diagrama son los estados y las flechas (que representan el cambio entre estados). Hay una gran variadad de notaciones alternativas para los DTE pero nosotros utilizaremos esta a lo largo del capítulo. 8.2.1 Estados del sistema Cada caja rectangular representa un posible estado en el que el sistema se puede encontrar. Se puede definir estado como: El conjunto de circunstancias o atributos que caracterizan a una persona o cosa en un tiempo dado, manera o forma de inicio, condición. Por tanto, estados típicos de un sistema podrían ser: ♦ esperar que un usuario introduzca el password. ♦ calentar una mezcla química. ♦ esperar siguiente comando. ♦ acelerar un motor. ♦ mezclar ingredientes. ♦ esperar datos de un instrumento. ♦ llenar un tanque ♦ desocupado. Fijémonos que muchos de estos ejemplos implican que el sistema está esperando que ocurra algo en vez de expresar que el ordenador está haciendo algo. Esto es porque nuestro DTE está siendo utilizado para desarrollar el modelo esencial del sistema, es decir, cómo debería comportarse el sistema si tuviéramos una tecnología perfecta. Un aspecto de la tecnología perfecta sería que la computadora trabaje de manera infinitamente rápida, de modo que cualquier proceso o cálculo que tenga que hacer, o cualquier acción que deba tomar, se haga en cero memoentos. Así, cualquier estado observable en el que el sistema se pueda encontrar se corresponde sólamente con un período de tiempo cuando: ♦ está esperando que algo ocurra en el entorno externo. ♦ está esperando que la actividad actual que se realiza en el entorno (mezclar, lavar, llenar, acelerar,...) cambie a alguna otra. Esto no significa que nuestro sistema sea incapaz de ejecutar acciones o que no pretendamos mostrarlas, sino sólo que las acciones, que ocurren instantáneamente en nuestro modelo de tecnología perfecta, no son lo mismo que los estados que representan condiciones observables en las que el sistema se puede encontrar. Por consiguiente, un estado representa algún comportamiento del sistema que es observable y que por último finaliza en algún período de tiempo finito. 8.2.2 Cambio de estado Un sistema que sólo tuviese un posible estado no tendría mucho interés de estudio, sería un sistema estático. Realmente, los sistemas de información que modelamos pueden tener docenas de estados diferentes. Pero, como cambia un sistema de un estado a otro?, si el sistema tiene determinadas reglas de comportamiento, entonces ciertas clases de cambios de estado tendrán sentido y por tanto serán válidos. Podemos mostrar los cambios válidos de estado en nuestro DTE conectando los estados con una flecha. En la figura 2, se muestra como el sistema puede cambiar del estado 1 al estado 2; también muestra como cuando el sistema se encuentra en el estado 2, se puede pasar al estado 3 o volver al estado 1. Sin embargo, no es posible pasar desde el estado 1 directamente al estado 3, pero si podemos pasar desde este último estado al primero. Fijémonos que el estado 2 tiene dos estados sucesores, esto es bastante común en los DTE. Cualquier estado puede tener un número arbitrario de estados sucesores. ESTADO 1 ESTADO 2 ESTADO 3 figura 2 : Sucesión de estados Respecto a la figura 2, hay un aspecto que todavía no está reflejado y este referente a cuales son los estados iniciales y finales del sistema. Puesto que en este caso no hay debemos asumir que el sistema ha estado activo siempre y seguirá estando activo por siempre. Sin embargo, la mayoría de los sistemas tienen un estado inicial reconocible y un estado final reconocible. Observemos la figura 3: ESTADO 1 ESTADO 2 ESTADO 3 ESTADO 4 ESTADO 5 figura 3: Estados inicial y final El estado inicial es normalmente el de la parte superior de la figura 3, además está identificado claramente con una flecha sin origen (que no está conectada a ningún otro estado). De forma similar el estado final es el de la parte inferior y lo que lo identifica claramente es que no tiene ninguna flecha de salida hacia ningún otro estado. El sentido común puede indicarnos que un sistema puede sólo tener un estado inicial, sin embargo, es posible que el sistema tenga varios estados finales, estos estados finales son mutuamente exclusivos, (sólo uno de ellos puede ocurrir). Veamos un ejemplo: ESTADO 1 ESTADO 2 ESTADO 4 ESTADO 3 ESTADO 5 ESTADO 6 figura 4: Varios estados finales Obsérvese como en la figura 4, tenemos dos posibles estados finales como son el 4 y el 6, el estado 5 no sería final puesto que de éste puedo pasar al estado 2. 8.2.3 Condiciones y Acciones Para completar nuestro DTE, necesitamos añadir dos cosas mas: las condiciones que causan los cambios de estado, y las acciones que el sistema realiza cuando se cambia de estado. La figura 5, muestra donde se refleja la información de condiciones/acciones en un DTE. ESTADO 1 C:condición A:acción ESTADO 2 figura 5: Condiciones y Acciones Una condición es cualquier evento del entorno que el sistema es capaz de detectar, normalmente se corresponde con una señal, una interrupción o la llegada de un paquete de datos. Esto causará en el sistema un cambio desde un estado X a un estado Y, pero como parte del cambio de estado, el sistema realizará una o mas acciones: se producirá una salida, o se mostrará un mensaje por pantalla, o se realizará algún cálculo. Por tanto las acciones mostradas en el DTE, son las respuestas devueltas al entorno o cálculos cuyos resultados deberán de ser recordados por el sistema (reflejados como almacenamientos de datos en los DFD’s) para poder responder a futuros eventos. 8.2.4 Particionando diagramas En un sistema complejo hay muchos posibles estados del sistema, intentar mostrarlos todos en un solo doagrama podría ser muy dificultoso aunque no imposible. Esta es la razón por la cual particionamos los DTE al igual que hacíamos con los DFD’s. La figura 6, muestra un ejemplo con dos niveles de DTE para un sistema complejo. ESTADO 1 ESTADO 2 ESTADO 3 ESTADO 2.1 ESTADO 3.1 ESTADO 2.2 ESTADO 3.2 ESTADO 3.3 ESTADO 2.3 ESTADO 2.4 ESTADO 3.4 figura 6: Partición de diagramas Fijémonos cómo en este caso, un estado individual del diagrama de mas alto nivel puede llegar a ser el estado inicial de un diagrama de nivel inferior que describe el estado de nivel superior, y el estado/s final/es en el diagrama de nivel inferior se corresponde con las condiciones de salidas asociadas al estado de nivel superior. Un ejemplo de la necesidad de particionar los DTE lo tenemos en el modelado de un cajero automático veamos la solución. IDLE pulsar start display insert card tarjeta insertada display enter passwd pulsar reset ESPERA TARJETA ESPERA PASSWD passwd insertado display select function reset o passwd error limpiar pantalla reset pulsado ESPERA OPCION obtener dinero OBTENER DINERO MOSTRAR BALANCE DEPOSITO DINERO TRANSF. figura 7: Modelado cajero automático, nivel superior Ahora veamos como sería el DTE asociado al estado OBTENER DINERO. ESPERAR ENTRADA intro cantidad de dinero display por favor espere ABONAR DINERO dinero disponible display coja dinero ESPERAR RETIRO DINERO figura 8: Modelado cajero automático para el estado obtener dinero Obsérvese que el estado esperar retiro dinero, cuando finalizase retornaría al estado espera opción del DTE superior. 8.2.5 Construyendo el Diagrama de Transición de Estado Ahora que ya hemos visto la notación de los DTE’s, pasaremos a comentar los paso en la construcción de este tipo de diagramas. Podemos utilizar dos aproximaciones: 1. Empezar identificando todos los posibles estados de un sistema, representando cada uno como una caja seperada en una hoja de papel. Entonces podemos explorar todas las posibles conexiones que tengan significado entre cajas. 2. Alternativamente, podemos empezar con el estado inicial y metódicamente trazar la manera de llegar al próximo estado, después del segundo al tercero y así sucesivamente. La aproximación que se utilice estará dirigida en la mayoría de los casos por el usuario con el cual estes trabajando. Cuando se termine de realizar el DTE preliminar se deberían comprobar las siguientes reglas de consistencia: ♦ Han sido todos los estados definidos?, se debe de mirar el sistema en cinjunto para ver si hay algún otro comportamiento observable o cualquier otra condición en la que el sistema podría encontrarse distinta a lo ya definido. ♦ Puedo alcanzar todos los estados?, si hemos definido estados a los cuales nunca se llega. ♦ Puedo salir de todos los estados?, como se mencionó anteriormente el sistema puede tener uno o mas estados finales con múltiples entradas en ellos, pero todos los estados deben de tener un sucesor a expeción de éstos. ♦ Para cada estado, responde el sistema adecuadamente a todas las posibles condiciones?, este es el error mas común en el que podemos caer cuando construimos DTE’s, pues el analista identifica los cambios de estados cuando ocurren condiciones normales, pero se falla a la hora de especificar el comportamiento del sistema para condiciones inesperadas. Supongamos que un analista ha modelado el comportamiento de un sistema como se muestra en la figura 9, el espera que el usuario pulse una tecla de funcion que cause un cambio de un estado 1 a un estado 2 y luego pulse otra tecla de función diferente que provocará el cambio del estado 2 al estado 3. Pero qué ocurre si el usuario pulsa la misma tecla de función las dos veces o pulsa cualquier otra?. ESTADO 1 ESTADO 2 ESTADO 3 figura 9 : Comportamiento de un sistema 8.2.6 Balanceo del DFD y el Diagrama de Transición de Estados (DTE). La condición de estado puede considerarse balanceada con el diagram de flujo de datos si se cumple con las siguientes reglas : ◊ Cada burbuja de control del DFD se asocia con un diagrama de transición de estados como su especificación de proceso. De manera similar, cada diagrama de transición de estados en el modelo global del sistema debe asociarse con un proceso (burbuja) de control en el DFD. ◊ Cada condición del diagrama de transición de estados debe corresponder con un flujo de datos de entrada al proceso de control asociado con el diagrama de transición de estados. De manera similar, cada flujo de control que entra en la burbuja de control debe asociarse con una condición apropiada en el diagrama de transición de estados correspondiente. ◊ Cada acción en el diagrama de transición de estados debe corresponder con un flujo de control de salida del proceso de control asociado con dicho diagrama. De manera similar, cada flujo de control de salida de la burbuja de control debe asociarse con una acción apropiada en el diagrama de transición de estados correspondiente. ESTADO 1 1 señal X activa burbuja 2 X ESTADO 2 2 señal Y activa burbuja 3 Y 3 ESTADO 3 figura 10: Relación DFD´s con DTE