Información Básica
- Créditos: 3
-
Horas de Clase: 5 / semana (3 horas de clase, 2 de taller)
-
Horas de trabajo independiente: 4 / semana
-
Pre-requisitos: Introducción a la Programación (300CIP001) y Lógica en Ciencias de la Computación (300CIG002)
-
Tipo de curso: Núcleo de Formación Fundamental.
Descripción del Curso
El curso busca ilustrar sobre la conveniencia de utilizar el modelamiento formal para la construcción de sistemas confiables. Mediante el estudio de casos, el curso promueve la necesidad de asignar el grueso del esfuerzo de modelamiento en la especificación, el diseño y la verificación, antes que en la implementación y depuración. Se utiliza con este fin el método Event-B, apoyado en software de generación automática de obligaciones de prueba y de generación automática de código en Java. El curso estudia también el modelamiento formal de sistemas concurrentes mediante Chequeo de Modelos (“Model-checking”), apoyado en herramientas como Spin-Promela.
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
-
-
Conocer los fundamentos teóricos de Chequeo de Modelos (“Model Checking” )
-
Expresar el modelo de un sistema mediante estructuras de Kripke
-
Formular propiedades de un modelo en lógicas temporales (LTL, CTL)
-
Conocer estrategias básicas para determinar si un modelo cumple una propiedad
-
-
Aplicar Chequeo de Modelos para verificar sistemas concurrentes
-
Entender las bases de un lenguaje de modelado para concurrencia (Promela-Spin)
-
Conocer ejemplos clásicos de chequeo de modelos en concurrencia
-
Saber modelar un sistema concurrente simple en Promela-Spin
-
Formular propiedades de seguridad y vivacidad de un sistema en LTL, CTL
-
Usar herramientas (xSpin, iSpin) para verificar el modelo
-
Se desarrollan competencias en
(A) La habilidad para aplicar conocimientos de matemáticas, ciencias e ingeniería.
(B) La habilidad para analizar un problema e identificar los requerimientos necesarios para su definición y solución.
(E) El entendimiento de la responsabilidad profesional y ética.
(G) La habilidad para analizar los impactos de la computación y la ingeniería en las personas, organizaciones y la sociedad.
(I) La habilidad para usar las técnicas, destrezas y herramientas modernas para la práctica de la computación.
(J) La habilidad para aplicar los fundamentos y principios de las matemáticas y de la computación en el modelamiento y diseño de sistemas computacionales de manera que se demuestre comprensión de las ventajas y desventajas en las decisiones de diseño.
(K) La habilidad para aplicar los principios de diseño y desarrollo de software en la construcción de sistemas de diferente complejidad.
Contenido
Capítulo 1: Introducción
Sesión | Horas teóricas | Prácticas acompañadas | Temas | Profundidad | Bibliografía |
---|---|---|---|---|---|
1 | 2 | Presentación del curso. Por qué fallan los sistemas | [ 1,cap 1,2] | ||
2 | 2 | 2 | Uso de matemáticas en modelamiento de sistemas | [ 9,cap 1] | |
3 | 2 | 2 | Dónde integrar métodos formales de diseño | [ 10,cap 1] |
Total de Horas: 10.
Sesión | Horas de trabajo independiente | Temas | Bibliografía |
---|---|---|---|
1-3 | 8 | Tareas semanales, especificación en lógica | [ 9,cap 1] |
Capítulo 2: Diseño de sistemas simples
Sesión | Horas teóricas | Prácticas acompañadas | Temas | Profundidad | Bibliografía |
---|---|---|---|---|---|
4 | 1 | La noción de modelo: parte estática y dinámica | [ 9,cap 2] | ||
5 | 2 | 2 | Máquinas, contextos. Un sistema simple | [ 8,cap 4] [ 10,2.1-2.4] |
Total de Horas: 5.
Capítulo 3: Obligaciones de prueba
Sesión | Horas teóricas | Prácticas acompañadas | Temas | Profundidad | Bibliografía |
---|---|---|---|---|---|
6 | 2 | 1 | Qué probar de un sistema, invariantes | [ 8,cap 4] [ 10,cap 5] | |
7 | 2 | 1 | Prueba de inicializacón y de eventos: ejemplos | [ 8,caps 1,2,3], [ 10,cap 2, cap 5] | |
8 | 2 | 2 | El cálculo de secuentes. Pruebas en Rodin | [ 3,cap 2] [ 10,cap 2] |
Total de Horas: 10.
Sesión | Horas de trabajo independiente | Temas | Bibliografía |
---|---|---|---|
6-8 | 8 | Tareas semanales, resolución de problemas en temas vistos | [1, cap. 1,2] |
Capítulo 4: Refinamiento de un sistema
Sesión | Horas teóricas | Prácticas acompañadas | Temas | Profundidad | Bibliografía |
---|---|---|---|---|---|
6 | 1 | Jerarquía de modelos. | [ 10,cap 2] | ||
7 | 1 | Relación de la abstracción y el refinamiento. Ejemplos | [ 8,caps 1,2,3], [ 10,cap 2] | ||
8 | 1 | 2 | Obligaciones de prueba del refinamiento | [ 8,caps 1,2,3], [ 10,cap 2] | |
9 | 3 | 2 | Pruebas de refinamiento en Rodin. Estrategias y Ejemplos | [ 8,caps 3,4], [ 10,cap 2, cap 3] |
Total de Horas: 10.
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 teóricas | Prácticas acompañadas | Temas | Profundidad | Bibliografía |
---|---|---|---|---|---|
11 | 1 | Qué es un patrón de diseño | [ 10,cap 3 ] | ||
12 | 1 | 1 | Sincronización fuerte, ejemplos | [ 10,cap 2, cap 3 ], [ 10,cap 2] | |
13 | 1 | 1 | Sincronización débil, ejemplos | 10,cap 2,3] |
Total de Horas: 5.
Sesión | Horas de trabajo independiente | Temas | Bibliografía |
---|---|---|---|
11-13 | 4 | Tareas semanales, resolución de problemas en temas vistos | 10,cap 2,3] |
Capítulo 7: Diseño de programas secuenciales
Sesión | Horas teóricas | Prácticas acompañadas | Temas | Profundidad | Bibliografía |
---|---|---|---|---|---|
14 | 1 | El modelo de un programa | [ 10,cap 4 ], [ 6] | ||
15,16 | 4 | 3 | Ejemplos de diseño formal de programas | [ 7] [ 10 15.1-15.3] | |
17 | 1 | 1 | Refinamiento de programas, variante e invariante | [ 6] [ 10 15.4-15.9] [ 10,cap 4 ] |
Total de Horas: 10.
Capítulo 8: Diseño de programas concurrentes y distribuidos
Sesión | Horas teóricas | Prácticas acompañadas | Temas | Profundidad | Bibliografía |
---|---|---|---|---|---|
18 | 2 | Estructuras de Kripke, modelos de sistemas | [ 13 cap 1,2] | ||
19 | 2 | 2 | Lógicas temporales LTL, CTL | [ 13 cap 2,3 ] | |
20 | 2 | 2 | Satisfacción de una fórmula por un modelo, ejemplos | [ 13 cap 3,4 ] | |
21 | 2 | 2 | El lenguaje Promela-Spin, ejemplos de programas concurrentes | ||
22,23 | 4 | 2 | exclusión mutua, protocolos: verificación en Spin |
Total de Horas: 20.
Sesión | Horas de trabajo independiente | Temas | Bibliografía |
---|---|---|---|
18-23 | 16 | Tareas semanales, resolución de problemas en temas vistos | [ 13 cap 3,4 ] |
Uso de material en exámenes
Está permitido el uso de notas de clase, bibliografía y calculadoras. No está permitido el uso de computadores personales ni teléfonos celulares.
Asistencia
Es obligatoria
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
-
E. Clark, O. Grumberg, D. Peled Model Checking. MIT Press, 2000
Instalaciones
Salón de clase con computador y proyector. Laboratorio de Ingeniería de Sistemas y Computación.