Análisis y Verificación de Programas (CC7126)
Motivación y Objetivos
Los problemas en las piezas de software pueden acarrear consecuencias catastróficas, tanto a nivel económico como de la seguridad de las personas. La validación y verificación de software juegan, por lo tanto, un rol fundamental en el proceso de desarrollo. En particular, para el proceso de verificación se ha recurrido históricamente a diversas técnicas de testing. Si bien el testing representa un enfoque muy eficiente para detectar bugs, su alcance está limitado a probar la presencia de bugs, y no su ausencia.
En este curso estudiaremos el análisis y verificación formal de programas, que constituyen un conjunto de herramientas matemáticas para razonar formalmente sobre el comportamiento de los programas. A diferencia del testing, su empleo permite demostrar–en el sentido matemático–que los programas son correctos y se adhieren a su especificación.
A lo largo del curso presentaremos los fundamentos matemáticos subyacentes a dichas herramientas, reconociendo, en particular, sus alcances y limitaciones. Estudiaremos, además, las distintas estrategias que se utilizan para automatizar su aplicación.
Contenido
Al término del curso, el estudiante manejará las nociones de:
- Semántica formal de programas: reconocerá dos estrategias clásicas para describir rigurosamente el significado o efecto de un programa.
- Verificación formal de programas: será capaz de demostrar (en el sentido matemático) la corrección funcional de un programa mediante el uso de lógica de Hoare y razonar también sobre programas que manipulan estructuras de datos dinámicas mediante el uso de lógica de separación.
- Análisis estático de programas: será capaz de razonar formalmente sobre propiedades más generales de los programas, de manera completamente automática, y en tiempo de compilación.
Elegibilidad
Curso electivo para Doctorado en Computación, Magíster en Ciencias de la Computación e Ingeniería Civil en Computación.
Requisitos
CC4101 Lenguajes de Programación / Autorización (contactar Federico).
El curso no presenta ningún requisito adicional, aunque será de gran ayuda cierto grado de madurez matemática por parte del alumno.
Evaluación
Evaluación continua a través de tareas y una presentación oral (en base a un artículo o capítulo de libro). No habrá controles.
Material
- G. Winskel, The Formal Semantics of Programming Languages, MIT Press, 1993 (disponible en biblioteca)
- F. Nielson et al., Semantics with Applications: An Appetizer, Springer, 2007 (disponible en biblioteca)
- F. Nielson et al., Principles of Program Analysis, Springer, 2015 (disponible en biblioteca)
- P.W. O'Hearn, A Primer on Separation Logic (and Automatic Program Verification and Analysis), Notas de la Escuela de Verano Marktoberdorf 2011 (disponible online)
- J. B. Almeida et al., Rigorous Software Development: An Introduction to Program Verification, Springer, 2011
- A. Appel et al., Program Logics for Certified Compilers, Cambridge University Press, 2014
- P. Cousot, A Tutorial on Abstract Interpretation, VMCAI'05 Industrial Day on Automatic Tools for Program Verification, 2005 (disponible online)
Contacto
Federico Olmedo, Oficia 311N, email