2.5.18 FPL/Análisis de Programas y Analizadores
Temas:
Non Core
- Representaciones de programa relevantes, como bloques básicos (basic blocks), grafos de flujo de control (control-flow graphs), cadenas definición-uso (def-use chains) y asignación única estática (static single assignment)
- Indecidibilidad y consecuencias para el análisis de programas
- Análisis insensible al flujo (flow-insensitive), como verificación de tipos y análisis de punteros y alias escalables
- Análisis sensible al flujo (flow-sensitive), como análisis de flujo de datos (dataflow) hacia adelante y hacia atrás
- Análisis sensible a la ruta (path-sensitive), como verificación de modelos de software (software model checking) y verificación de software
- Herramientas y frameworks para implementar analizadores
- Papel del análisis estático en la optimización de programas y el análisis de dependencia de datos durante la explotación de concurrencia
- Papel del análisis de programas en la verificación (parcial) y la búsqueda de errores (bug-finding)
- Paralelización:
- Análisis para auto-paralelización
- Análisis para detectar errores de concurrencia
Aprendizaje esperado (Learning Outcomes):
NonCore:
- Explicar la diferencia entre grafo de flujo de datos (dataflow graph) y grafo de flujo de control [Explicar]
- Explicar por qué los análisis de programa no triviales y sólidos (sound) deben ser aproximados [Explicar]
- Argumentar por qué un análisis es correcto (sound y terminante) [Argumentar]
- Explicar por qué el alias potencial limita el análisis de programa sólido y cómo el análisis de alias puede ayudar [Explicar]
- Usar los resultados de un análisis de programa para optimización de programas y/o corrección parcial del programa [Usar]
Generado por Ernesto Cuadros-Vargas , Sociedad Peruana de Computación-Peru, basado en el modelo de la Computing Curricula de IEEE-CS/ACM