Información Básica
-
Créditos: 3
-
Horas de Clase: 4 / semana
-
Horas de trabajo independiente: 5 / semana
Descripción del curso
El curso busca ilustrar sobre la conveniencia de utilizar
una metodología no tradicional de modelamiento de sistemas
y desarrollo de software: el modelamiento formal
mediante el estudio de casos promueve la necesidad de asignar
el grueso del esfuerzo de modelamiento en la especificación y
el diseño, antes que en la implementación y depuración.
Se utiliza con este fin el método B, apoyado en software de
generación automática de obligaciones de prueba y de
generación automática de código en Java
Objetivos
Al finalizar el curso los estudiantes podrán:
-
Identificar las ventajas de desarrollar software formalmente.
-
Reconocer qué hay que verificar de un sistema
-
Explicar el uso de las pruebas en el diseño
-
Defender la ventaja de animar un modelo formal
-
-
Argumentar por qué los métodos formales son un mecanismo de aseguramiento de la calidad del software.
-
Contrastar verificación y “testing”
-
Justificar la trazabilidad de los requerimientos
-
Predecir corrección de una especificación mediante pruebas interactivas
-
Argumentar cómo insertar métodos formales en el ciclo de desarrollo
-
-
Describir formalmente sistemas completos mediante refinamiento formal.
-
Expresar requerimientos en invariantes y eventos
-
Indicar propiedades de seguridad y de ausencia de bloqueos
-
Reconocer la diferencia entre modelo abstracto y refinamiento
-
Expresar un sistema en una jerarquía de máquinas
-
-
Diseñar y verificar sistemas utilizando el método Event-B.
-
Proponer variables para representar observaciones
-
Formular propiedades como invariantes de máquinas
-
Reconocer constantes de un sistema
-
Colectar constantes y sus propiedades como axiomas en los contextos
-
Construir el modelo del sistema en Rodin
-
Desarrollar estrategias para verificar el sistema en Rodin
-
-
Integrar las obligaciones de prueba en el proceso de desarrollo de software y entender su importancia.
-
Relacionar cada obligación con propiedades del sistema
-
Revisar el modelo a partir de las pruebas interactivas en Rodin
-
Formular las obligaciones de prueba de un modelo
-
Contrastar las guardas de los eventos y el invariante, a partir de las pruebas
-
-
Expresar el modelo de un sistema en una herramienta de apoyo al desarrollo formal
-
Identificar los atributos de la herramienta que expresan cada componente del sistema
-
Reconocer qué componen máquinas y contextos
-
Distinguir variables, invariantes y eventos
-
-
Analizar estrategias para realizar una prueba interactiva
-
Identificar la suficiencia/insuficiencia de las hipótesis
-
Distinguir la aplicabilidad de cada probador en Rodin
-
Inferir cuándo es necesario agregar hipótesis
-
Seleccionar expresiones que conviene abstraer
-
-
Aplicar las pruebas interactivas para el desarrollo y la verificación de sistemas
-
Interpretar obligaciones no descargadas con posibles fallas del modelo
-
Emplear chequeo de modelos como verificación previa de un sistema
-
Predecir guardas adicionales de los eventos a partir de las pruebas
-
-
Modelar formalmente un programa
-
Identificar la precondición en los contextos
-
Relacionar la máquina abstracta a la poscondición
-
Inferir el invariante del programa
-
Relacionar la poscondición a obligación de prueba en el refinamiento
-
Inferir guardas en los eventos del invariante y la poscondición
-
Calcular el variante del sistema
-
Experimentar mediante chequeo de modelos
-
-
Construir un programa a partir de su modelo formal
-
Generar asignaciones a partir de la inicialización
-
Combinar eventos de avance en un ciclo
-
Formular condiciones del ciclo a partir de eventos finales
-
-
Aplicar herramientas de chequeo de modelos en el diseño
-
Demostrar la ausencia de bloqueos mediante chequeo de modelos
-
Descubrir violaciones a invariantes animando el modelo en la herramienta
-
Categorizar violaciones de invariante con componentes del modelo
-
Evaluación
Contenido
Capítulo 1: Introducción
Sesión | Horas de Clase | Tópicos | Bibliografía |
---|---|---|---|
1 | 2 | Presentación del curso. Por qué fallan los sistemas | [ 1,cap 1,2] |
2 | 2 | Uso de matemáticas en modelamiento de sistemas | [ 9,cap 1] |
3 | 2 | Dónde integrar métodos formales de diseño | [ 10,cap 1] |
Total de Horas: 6.
Capítulo 2: Diseño de sistemas simples
Sesión | Horas de Clase | Tópicos | Bibliografía |
---|---|---|---|
4 | 2 | La noción de modelo: parte estática y dinámica | [ 9,cap 2] |
5 | 2 | Máquinas, contextos. Un sistema simple | [ 8,cap 4] [ 10,2.1-2.4] |
Total de Horas: 4.
Capítulo 3: Obligaciones de prueba
Sesión | Horas de Clase | Tópicos | Bibliografía |
---|---|---|---|
6 | 2 | Qué probar de un sistema, invariantes | [ 8,cap 4] [ 10,cap 5] |
7 | 2 | Prueba de inicializacón y de eventos: ejemplos | [ 8,caps 1,2,3], [ 10,cap 2, cap 5] |
8 | 2 | El cálculo de secuentes. Pruebas en Rodin | [ 3,cap 2] [ 10,cap 2] |
Total de Horas: 6.
Capítulo 4: Refinamiento de un sistema
Sesión | Horas de Clase | Tópicos | Bibliografía |
---|---|---|---|
6 | 2 | Jerarquía de modelos. | [ 10,cap 2] |
7 | 2 | Relación de la abstracción y el refinamiento. Ejemplos | [ 8,caps 1,2,3], [ 10,cap 2] |
8 | 2 | Obligaciones de prueba del refinamiento | [ 8,caps 1,2,3], [ 10,cap 2] |
9 | 2 | Pruebas de refinamiento en Rodin. Estrategias y Ejemplos | [ 8,caps 3,4], [ 10,cap 2, cap 3] |
Total de Horas: 8.
Capítulo 5: Diseño de refinamientos
Sesión | Horas de Clase | Tópicos | Bibliografía | |
---|---|---|---|---|
6 | 2 | Invariante de encadenamiento | [ 10,cap 3 ] | |
7 | 2 | Refinamiento de eventos | [ 10,cap 2, cap 3 ], [ 10,cap 2] | |
8 | 2 | Eventos nuevos en el refinamiento | [ 8,caps 3,4], [ 10,cap 2,3] | |
9 | 2 | Ejemplos de diseño, pruebas, simulación en ProB | [ 8,caps 3,4], [ 10,cap 2, cap 3] | |
10 | 2 | Simulación y chequeo de sistemas en ProB | [ 7] |
Total de Horas: 10.
Capítulo 6: Patrones de diseño
Sesión | Horas de Clase | Tópicos | Bibliografía |
---|---|---|---|
11 | 2 | Qué es un patrón de diseño | [ 10,cap 3 ] |
12 | 2 | Sincronización fuerte, ejemplos | [ 10,cap 2, cap 3 ], [ 10,cap 2] |
13 | 2 | Sincronización débil, ejemplos | 10,cap 2,3] |
Total de Horas: 6.
Capítulo 7: Diseño de programas secuenciales
Sesión | Horas de Clase | Tópicos | Bibliografía |
---|---|---|---|
14 | 2 | El modelo de un programa | [ 10,cap 4 ], [ 6] |
15,16 | 4 | Ejemplos de diseño formal de programas | [ 7] [ 10 15.1-15.3] |
17 | 2 | Refinamiento de programas, variante e invariante | [ 6] [ 10 15.4-15.9] [ 10,cap 4 ] |
18,19 | 4 | Optimizar a partir del invariante, ejemplos | [ 1,cap 10] |
20 | 2 | Simular programas (“model-checking”) en ProB | [ 7] |
21 | 2 | Estrategias de pruebas de programas | [ 10,cap 5 ] |
Total de Horas: 16.
Capítulo 8: Diseño de programas concurrentes y distribuidos
Sesión | Horas de Clase | Tópicos | Bibliografía |
---|---|---|---|
22 | 2 | Qué es diferente en programas concurrentes | [ 10 cap 6] |
23 | 2 | Ejemplos de modelos de programas concurentes | [ 10 cap 6 y cap 7] |
Total de Horas: 4.
Bibliografía
-
Abrial, Jean-Raymond. The B-Book. Assigning Programs to Meanings. 1a ed.
-
Wordsworth, J.B. Software engineering with B.
-
Huth, M.R. and Ryan,M. Logic in computer science : modelling and reasoning about systems. 1ed.
-
MATISSE Event B Reference manual Manual
-
Abrial, Jean-Raymond Guidelines to formal Systems Introducción
-
Abrial, Jean-Raymond sequential program construction desarrollo de programas
-
Rodin Project User manual manual de Rodin
-
EventB Descripción El lenguaje de Event B (leer con cuidado el capítulo IV, de Abrial)
-
EventB Libro (parte) y Slides de Abrial http://www.event-b.org/abook.html
-
Abrial, Jean-Raymond. Modeling in Event-B: System and Software Engineering. Cambridge University Press, 2010
-
De eventB.org Estrategia de uso de probadores de Rodin http://wiki.event-b.org/index.php/Rodin_Provers
-
Requerimientos en Rodin Tutorial http://pror.org/content/tutorial
Material de este semestre