Método B Desarrollo de caso: Especificación de un cruce

Anuncio
Método B
Desarrollo de caso:
Especificación de un cruce
Camilo Rueda
Universidad Javeriana-Cali
Método BDesarrollo de caso:
Especificación de un cruce -- p.1/35
El Caso:
Controlar vehiculos en un cruce. La especificación debe
permitir:
Varias topologías
Distintos medios de control
Distintas secuencias de señales
Método BDesarrollo de caso:
Especificación de un cruce -- p.2/35
Requerimientos del cruce
Generales
El cruce se compone de un número de vías que se cruzan
El cruce puede estar regulado
Método BDesarrollo de caso:
Especificación de un cruce -- p.3/35
Requerimientos del cruce
Generales
El cruce se compone de un número de vías que se cruzan
El cruce puede estar regulado
Disponibilidad
Al menos una vía puede siempre cruzar
Método BDesarrollo de caso:
Especificación de un cruce -- p.3/35
Requerimientos del cruce
Generales
El cruce se compone de un número de vías que se cruzan
El cruce puede estar regulado
Disponibilidad
Al menos una vía puede siempre cruzar
Seguridad
No más de una vía puede cruzar en un momento dado
Antes de cambiar de una vía a otra, el cruce debe despejarse de vehículos
Método BDesarrollo de caso:
Especificación de un cruce -- p.3/35
Requerimientos del cruce
Generales
El cruce se compone de un número de vías que se cruzan
El cruce puede estar regulado
Disponibilidad
Al menos una vía puede siempre cruzar
Seguridad
No más de una vía puede cruzar en un momento dado
Antes de cambiar de una vía a otra, el cruce debe despejarse de vehículos
Justicia
Cada vía puede cruzar por turnos
Método BDesarrollo de caso:
Especificación de un cruce -- p.3/35
Requerimientos del semáforo
Tres luces de tres colores diferentes, on/off o
parpadeo.
El estado del semáaforo es la conjunción de los
estados de las luces
No todas las conjunciones posibles se usan
La operación del semáforo es un ciclo de estados
La semántica es interpretación de cada estado
(dependiente del sitio en el ciclo)
El semáforo inicia en estado "no regulado"
Método BDesarrollo de caso:
Especificación de un cruce -- p.4/35
Arquitectura
A.vv.luz
luz verde A
A.color_semaf2
implementacion
MONITOR_SEMAF_COL
CRUCE3
Implementacion
implementacion
MONITOR_SEMAF2
Refinam. datos
ciclo de colores
CRUCE2
menos
indeterminismo
MONITOR_SEMAF
CRUCE
estados de
automata
Anillo de
derechos de cruce
A.color_semaf
colores para
via A
B,color2
A.aa.luz
luz amarilla A
A.rr.luz
luz roja A
B.vv.luz
Implementacion
luz verde B
B.color_semaf
colores del semaf
para via B
B.aa.luz
luz amarilla B
B.rr.luz
Estado_via
Constantes
Estado semaf
luz roja B
Estado de luces
Método BDesarrollo de caso:
Especificación de un cruce -- p.5/35
Máquinas: CRUCE
Tres nociones:
Derecho a cruzar: En cada vía, modela si sus
vehículos tienen derecho a cruzar. Dos constantes:
cruce, pare.
Fase de transición: Desocupar el cruce. Constantes:
f in_cruce, f in_pare.
Ciclos de estados de vía: modelados por la función,
siguiente =
cruce → f in_cruce → pare → f in_pare → cruce
Método BDesarrollo de caso:
Especificación de un cruce -- p.6/35
Máquinas: CRUCE (cont)
Suponemos dos vías. Como los estados son opuestos (o catástrofe!), el estado de
la segunda vía se deduce del de la primera.
Esto lo modela la función (constante):
estado_opuesto =
{cruce 7→ pare, pare 7→ cruce,
f in_cruce 7→ f in_pare, f in_pare 7→ f in_cruce, }
El estado de la vía B se deduce de A así:
estadoV iaA = estado_opuesto(estadoV iaB)
Método BDesarrollo de caso:
Especificación de un cruce -- p.7/35
Máquina ESTADO_VIA
Encapsula las constantes y conjuntos usadas por
CRUCE y MONITOR_SEMAF.
Define el conjunto de derechos de cruce.
El estado off indica una vía no regulada.
Método BDesarrollo de caso:
Especificación de un cruce -- p.8/35
Máquina ESTADO_VIA: Definición
MACHINE EST ADO_V IA
SETS
EST ADO = {cruce, f in_cruce, pare, f in_pare, of f }
CONSTANTS
estado_opuesto
PROPERTIES
estado_opuesto ∈ EST ADO EST ADO
estado_opuesto = {cruce 7→ pare, pare 7→ cruce,
f in_cruce 7→ f in_pare, f in_pare 7→ f in_cruce, of f 7→ of f }
EN D
Método BDesarrollo de caso:
Especificación de un cruce -- p.9/35
Máquina CRUCE: Definición (1)
MACHINE CRU CE
IINCLUDES Estado_via
ABSTRACT_CONSTANTS siguiente
SETS CEST ADO = {regulado, no_regulado}
PROPERTIES
siguiente ∈ EST ADO EST ADO∧
siguiente =
Método BDesarrollo de caso:
Especificación de un cruce -- p.10/35
Máquina CRUCE: Definición (1)
MACHINE CRU CE
IINCLUDES Estado_via
ABSTRACT_CONSTANTS siguiente
SETS CEST ADO = {regulado, no_regulado}
PROPERTIES
siguiente ∈ EST ADO EST ADO∧
siguiente = {cruce 7→ f in_cruce, f in_cruce 7→ pare,
Método BDesarrollo de caso:
Especificación de un cruce -- p.10/35
Máquina CRUCE: Definición (1)
MACHINE CRU CE
IINCLUDES Estado_via
ABSTRACT_CONSTANTS siguiente
SETS CEST ADO = {regulado, no_regulado}
PROPERTIES
siguiente ∈ EST ADO EST ADO∧
siguiente = {cruce 7→ f in_cruce, f in_cruce 7→ pare,
pare 7→ f in_pare, f in_pare 7→ cruce, of f 7→ of f }
Método BDesarrollo de caso:
Especificación de un cruce -- p.10/35
Máquina CRUCE (2)
VARIABLES
estado_global, estadoV iaA, estadoV iaB
INVARIANT
estado_global ∈ CEST ADO∧
estadoV iaA ∈ EST ADO ∧ estadoV iaB ∈ EST ADO∧
INITIALISATION
Método BDesarrollo de caso:
Especificación de un cruce -- p.11/35
Máquina CRUCE (2)
VARIABLES
estado_global, estadoV iaA, estadoV iaB
INVARIANT
estado_global ∈ CEST ADO∧
estadoV iaA ∈ EST ADO ∧ estadoV iaB ∈ EST ADO∧
estadoV iaB = estado_opuesto(estadoV iaA)∧
INITIALISATION
Método BDesarrollo de caso:
Especificación de un cruce -- p.11/35
Máquina CRUCE (2)
VARIABLES
estado_global, estadoV iaA, estadoV iaB
INVARIANT
estado_global ∈ CEST ADO∧
estadoV iaA ∈ EST ADO ∧ estadoV iaB ∈ EST ADO∧
estadoV iaB = estado_opuesto(estadoV iaA)∧
(estado_global = no_regulado) ⇔ (estadoV iaA = of f )
INITIALISATION
Método BDesarrollo de caso:
Especificación de un cruce -- p.11/35
Máquina CRUCE (2)
VARIABLES
estado_global, estadoV iaA, estadoV iaB
INVARIANT
estado_global ∈ CEST ADO∧
estadoV iaA ∈ EST ADO ∧ estadoV iaB ∈ EST ADO∧
estadoV iaB = estado_opuesto(estadoV iaA)∧
(estado_global = no_regulado) ⇔ (estadoV iaA = of f )
INITIALISATION
estado_global, estadoV iaA, estadoV iaB := no_regulado, of f, of f
Método BDesarrollo de caso:
Especificación de un cruce -- p.11/35
Máquina CRUCE (3)
OPERATIONS
arranque =
PRE estado_global = no_regulado THEN
estado_global := regulado||
ANY aa WHERE aa ∈ EST ADO − {of f }
THEN estadoV iaA, estadoV iaB := aa, estado_opuesto(aa)
END
END
Método BDesarrollo de caso:
Especificación de un cruce -- p.12/35
Máquina CRUCE (4)
cambio_estado_via =
PRE
estado_global = regulado
THEN
estadoV iaA := siguiente(estadoV iaA) ||
estadoV iaB := siguiente(estadoV iaB)
END
END
Método BDesarrollo de caso:
Especificación de un cruce -- p.13/35
Refinamiento de CRUCE
REFINEMENT CRU CE2
REFINES CRU CE
INCLUDES EST ADO_V IA
ABSTRACT_CONSTANTS
siguiente
VARIABLES
estadoV iaA2, estadoV iaB2
INVARIANT
estadoV iaA2 = estadoV iaA ∧ estadoV iaB2 = estadoV iaB
Método BDesarrollo de caso:
Especificación de un cruce -- p.14/35
Refinamiento CRUCE (2)
INITIALISATION
estadoV iaA2, estadoV iaB2 := of f, of f
OPERATIONS
arranque =
BEGIN estadoV iaA2, estadoV iaB2 := cruce, pare END
cambio_estado_via = BEGIN
estadoV iaA2 := siguiente(estadoV iaA2) ||
estadoV iaB2 := siguiente(estadoV iaB2)
END
END
Método BDesarrollo de caso:
Especificación de un cruce -- p.15/35
Monitor de Semáforo
Autómata de 5 estados (función prox). s0 = no_regulado.
prox = {(s0 , s0 ), (s1 , s2 ), (s2 , s3 ), (s3 , s4 ), (s4 s1 )}
Convención: Interpretación de los estados:
{(of f, s0 ), (cruce, s1), (f in_cruce, s2 ), (pare, s3 ), (f in_pare, s4 )}
cruce
via
Colombia
F rancia
of f
s0
parpadeoAm parpadeoAm
cruce
s1
verde
verde
f in_cruce s2
am
am
pare
s3
rojo
rojo
f in_pare
s4
am
rojo
Método BDesarrollo de caso:
Especificación de un cruce -- p.16/35
Monitor semáforo (2)
El ciclo de estados del cruce se implementa por las
funciones convencion y prox:
siguiente = convencion; prox; convencion−1
Método BDesarrollo de caso:
Especificación de un cruce -- p.17/35
Máquina MONITOR_ SEMAF (1)
MACHINE M ON IT OR_SEM AF
IINCLUDES Estado_via
CONSTANTS convencion, prox
SETS
EST ADO_SEM = {s0 .s1 , s2 , s3 , s4 }
PROPERTIES
convencion ∈ EST ADO EST ADO_SEM ∧
prox ∈ EST ADO_SEM EST ADO_SEM ∧
convencion = {(of f, s0 ), (cruce, s1), (f in_cruce, s2 ), (pare, s3 ), (f in_pare, s4 )}∧
prox = {(s0 , s0 ), (s1 , s2 ), (s2 , s3 ), (s3 , s4 ), (s4 s1 )}
Método BDesarrollo de caso:
Especificación de un cruce -- p.18/35
Máquina MONITOR_ SEMAF (2)
VARIABLES
semA_estado, semB_estado
INVARIANT
semA_estado ∈ EST ADO_SEM ∧ semB_estado ∈ EST ADO_SEM ∧
semB_estado =
convencion(estado_opuesto(convencion−1 (semA_estado)))
INITIALISATION
semA_estado, semB_estado := convencion(of f ), convencion(of f )
Método BDesarrollo de caso:
Especificación de un cruce -- p.19/35
MONITOR_ SEMAF (3)
OPERATIONS
arranque(es) =
PRE es ∈ EST ADO − {of f } ∧ semA_estado = convencion(of f )
THEN
semA_estado := convencion(es) ||
semB_estado := convencion(estado_opuesto(es))
END
Método BDesarrollo de caso:
Especificación de un cruce -- p.20/35
MONITOR_ SEMAF (4)
cambio_sem =
PRE ¬(semA_estado = convencion(of f ))
THEN
semA_estado := prox(semA_estado) ||
semB_estado := prox(semB_estado)
END
Método BDesarrollo de caso:
Especificación de un cruce -- p.21/35
Implementación de CRUCE
IMPLEMENTATION CRU CE3
REFINES CRU CE2
IMPORTS ms.M onitor_semaf
PROPERTIES
siguiente = (convencion; (prox; convencion−1 ))
INVARIANT
ms.semA_estado = convencion(estadoV iaA2)
OPERATIONS
arranque = BEGIN ms.arranque(cruce) END
cambio_estado_via = BEGIN ms.cambio_sem END
END
Método BDesarrollo de caso:
Especificación de un cruce -- p.22/35
Refinamiento de Monitor_ Semaf
REFINEMENT M ON IT OR_SEM AF 2
REFINES M ON IT OR_SEM AF
INCLUDES EST ADO_V IA
CONSTANTS color
SETS
COLOR = {verde, am, rojo, parpadeoAm, negro, rojoAm}
PROPERTIES
color ∈ EST ADO_SEM → COLOR
VARIABLES
semA_estado2, semB_estado2, colorA2, colorB2
Método BDesarrollo de caso:
Especificación de un cruce -- p.23/35
Refinamiento de Monitor_ Semaf (2)
INVARIANT
semA_estado2 = semA_estado ∧ colorA2 ∈ COLOR∧
colorA2 = color(semA_estado) ∧ semB_estado2 = semB_estado∧
colorB2 ∈ COLOR ∧ colorB2 = color(semB_estado)
INITIALISATION
Método BDesarrollo de caso:
Especificación de un cruce -- p.24/35
Refinamiento de Monitor_ Semaf (2)
INVARIANT
semA_estado2 = semA_estado ∧ colorA2 ∈ COLOR∧
colorA2 = color(semA_estado) ∧ semB_estado2 = semB_estado∧
colorB2 ∈ COLOR ∧ colorB2 = color(semB_estado)
INITIALISATION
colorA2, colorB2 := color(convencion(of f )), color(convencion(of f )) ||
Método BDesarrollo de caso:
Especificación de un cruce -- p.24/35
Refinamiento de Monitor_ Semaf (2)
INVARIANT
semA_estado2 = semA_estado ∧ colorA2 ∈ COLOR∧
colorA2 = color(semA_estado) ∧ semB_estado2 = semB_estado∧
colorB2 ∈ COLOR ∧ colorB2 = color(semB_estado)
INITIALISATION
colorA2, colorB2 := color(convencion(of f )), color(convencion(of f )) ||
semA_estado2, semB_estado2 := convencion(of f ), convencion(of f )
Método BDesarrollo de caso:
Especificación de un cruce -- p.24/35
Refinamiento de Monitor_ Semaf (3)
OPERATIONS
arranque(es) = BEGIN
END
cambio_sem = BEGIN
END
Método BDesarrollo de caso:
Especificación de un cruce -- p.25/35
Refinamiento de Monitor_ Semaf (3)
OPERATIONS
arranque(es) = BEGIN
colorA2, semA_estado2 := color(convencion(es)), convencion(es) ||
END
cambio_sem = BEGIN
END
Método BDesarrollo de caso:
Especificación de un cruce -- p.25/35
Refinamiento de Monitor_ Semaf (3)
OPERATIONS
arranque(es) = BEGIN
colorA2, semA_estado2 := color(convencion(es)), convencion(es) ||
colorB2 := color(convencion(estado_opuesto(es))) ||
END
cambio_sem = BEGIN
END
Método BDesarrollo de caso:
Especificación de un cruce -- p.25/35
Refinamiento de Monitor_ Semaf (3)
OPERATIONS
arranque(es) = BEGIN
colorA2, semA_estado2 := color(convencion(es)), convencion(es) ||
colorB2 := color(convencion(estado_opuesto(es))) ||
semB_estado2 := convencion(estado_opuesto(es))
END
cambio_sem = BEGIN
END
Método BDesarrollo de caso:
Especificación de un cruce -- p.25/35
Refinamiento de Monitor_ Semaf (3)
OPERATIONS
arranque(es) = BEGIN
colorA2, semA_estado2 := color(convencion(es)), convencion(es) ||
colorB2 := color(convencion(estado_opuesto(es))) ||
semB_estado2 := convencion(estado_opuesto(es))
END
cambio_sem = BEGIN
colorA2, semA_estado2 := color(prox(semA_estado2)), prox(semA_estado2) ||
END
Método BDesarrollo de caso:
Especificación de un cruce -- p.25/35
Refinamiento de Monitor_ Semaf (3)
OPERATIONS
arranque(es) = BEGIN
colorA2, semA_estado2 := color(convencion(es)), convencion(es) ||
colorB2 := color(convencion(estado_opuesto(es))) ||
semB_estado2 := convencion(estado_opuesto(es))
END
cambio_sem = BEGIN
colorA2, semA_estado2 := color(prox(semA_estado2)), prox(semA_estado2) ||
colorB2, semB_estado2 := color(prox(semB_estado2)), prox(semB_estado2)
END
Método BDesarrollo de caso:
Especificación de un cruce -- p.25/35
Máquina Estado_ sem
Define constantes básicas para el controlador
MACHINE EST ADO_SEM
SETS
EST ADO_SEM = {s0 , s1 , s2 , s3 , s4 }
VARIABLES estado
INVARIANT estado ∈ EST ADO_SEM
INITIALISATION estado := s0
OPERATIONS
set(val) = PRE val ∈ EST ADO_SEM THEN estado := val END
res ← valor = BEGIN res := estado END
END
Método BDesarrollo de caso:
Especificación de un cruce -- p.26/35
Máquina Color_ sem
Define colores para las señales.
MACHINE COLOR_SEM
SETS
COLOR = {verde, am, rojo, parpadeoAm, negro, rojo_am}
VARIABLES color
INVARIANT color ∈ COLOR
INITIALISATION color := negro
OPERATIONS
set(val) = PRE val ∈ COLOR THEN color := val END
END
Método BDesarrollo de caso:
Especificación de un cruce -- p.27/35
Implementación del semáforo colombiano
Cuando no llueve, el semáforo en Colombia tiene la
secuencia
verde → amarillo → rojo → amarillo → ...
La implementación de Monitor_ sem importa:
Dos instancias de Color_ sem, una para cada vía.
Una instancia de Estado_ sem para representar el
estado.
La cláusula VALUES da valores específicos en la implementación a las constantes.
Método BDesarrollo de caso:
Especificación de un cruce -- p.28/35
Máquina Monitor_ sem_ col
MACHINE M ON IT OR_SEM _COL
REFINES M ON IT OR_SEM 2
INCLUDES EST ADO_V IA
IMPORTS cA.Color_sem, cB.Color_sem, es.Estado_sem
VALUES
convencion =
{cruce 7→ s1 , f in_cruce 7→ s2 , pare 7→ s3 , f in_pare 7→ s4 , of f 7→ s0 }
prox = {s0 7→ s0 , s1 7→ s2 , s2 7→ s3 , s3 7→ s4 , s4 7→ s1 }
color =
{s1 7→ verde, s2 7→ am, s3 7→ rojo, s4 7→ am, s0 7→ parpadeoAm}
Método BDesarrollo de caso:
Especificación de un cruce -- p.29/35
Máquina Monitor_ sem_ col (2)
INVARIANT
colorA2 = cA.color ∧ semA_estado = es.estado∧
colorB2 = cB.color∧
semB_estado =
convencion(estado_opuesto(convencion−1 (es.estado)))
INITIALISATION
cA.set(color(convencion(of f )));
cB.set(color(convencion(of f )));
es.set(convencion(of f ))
Método BDesarrollo de caso:
Especificación de un cruce -- p.30/35
Máquina Monitor_ sem_ col (3)
OPERATIONS
arranque(est) = BEGIN
cA.set(color(convencion(est))); es.set(convencion(est));
cB.set(color(convencion(estado_opuesto(est))));
END
cambio_sem = BEGIN VAR esestado IN
esestado ←− es.valor; es.set(prox(esestado));
cB.set(color(next(convencion
(estado_opuesto(convencion−1 (esestado))))))
END
END
END
Método BDesarrollo de caso:
Especificación de un cruce -- p.31/35
Máquina LUZ
Especifica una luz de un semáforo.
MACHINE LU Z
SETS
EST ADO_LU Z = {lon, lof f, lparpadeo}
VARIABLES luz
INVARIANT luz ∈ EST ADO_LU Z
INITIALISATION luz := lof f
OPERATIONS
set(es) = PRE es ∈ EST ADO_LU Z THEN luz := es END
END
Método BDesarrollo de caso:
Especificación de un cruce -- p.32/35
Implementación de Color_ sem
MACHINE COLOR_SEM 2
REFINES COLOR_SEM
IMPORTS vv.Luz, aa.Luz, rr.Luz
INVARIANT
((color = verde) ⇒ ((vv.luz = lon) ∧ (aa.luz = lof f ) ∧ (rr.luz = lof f )))∧
((color = am) ⇒ ((vv.luz = lof f ) ∧ (aa.luz = lon) ∧ (rr.luz = lof f )))∧
((color = rojo) ⇒ ((vv.luz = lof f ) ∧ (aa.luz = lof f ) ∧ (rr.luz = lon)))∧
((color = rojo_am) ⇒ ((vv.luz = lof f ) ∧ (aa.luz = lon) ∧ (rr.luz = lon)))∧
((color = parpadeoAm) ⇒
((vv.luz = lof f ) ∧ (aa.luz = parpadeo) ∧ (rr.luz = lof f )))
Método BDesarrollo de caso:
Especificación de un cruce -- p.33/35
Implementación de Color_ sem (2)
OPERATIONS
set(val) = PRE val ∈ COLOR THEN
CASE val OF
EITHER verde THEN rr.set(lof f ); aa.set(lof f ); vv.set(lon)
OR am THEN rr.set(lof f ); aa.set(lon); vv.set(lof f )
OR rojo THEN rr.set(lon); aa.set(lof f ); vv.set(lof f )
OR parpadeoAm THEN rr.set(lof f ); aa.set(parpadeo); vv.set(lof f )
OR negro THEN rr.set(lof f ); aa.set(lof f ); vv.set(lof f )
OR rojo_am THEN rr.set(lon); aa.set(lon); vv.set(lof f )
END
END
Método BDesarrollo de caso:
Especificación de un cruce -- p.34/35
Ejercicios
Qué habría que cambiar para implementar el
semáforo de Inglaterra, que de rojo pasa a rojo_
amarillo y no regulado es negro?
Qué habría que cambiar para implementar un cruce
de 3 vías?
Pruebe que CRUCE2 es refinamiento de CRUCE
puebe que MONITOR_ SEM2 es refinamiento de
MONITOR_ SEM
Método BDesarrollo de caso:
Especificación de un cruce -- p.35/35
Descargar