5.35.4.1 Análisis de Programas y Analizadores (20 horas) [Habilidades AG-C08,AG-C12]

Referencias Bibliográficas: [Aho et al., 2006,Appel, 2004]

Temas

  1. 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)
  2. Indecidibilidad y consecuencias para el análisis de programas
  3. Análisis insensible al flujo (flow-insensitive), como verificación de tipos y análisis de punteros y alias escalables
  4. Análisis sensible al flujo (flow-sensitive), como análisis de flujo de datos (dataflow) hacia adelante y hacia atrás
  5. Análisis sensible a la ruta (path-sensitive), como verificación de modelos de software (software model checking) y verificación de software
  6. Herramientas y frameworks para implementar analizadores
  7. 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
  8. Papel del análisis de programas en la verificación (parcial) y la búsqueda de errores (bug-finding)
  9. Paralelización:
    1. Análisis para auto-paralelización
    2. Análisis para detectar errores de concurrencia

Aprendizaje esperado (Learning Outcomes)

  1. Explicar la diferencia entre grafo de flujo de datos (dataflow graph) y grafo de flujo de control [Explicar]
  2. Explicar por qué los análisis de programa no triviales y sólidos (sound) deben ser aproximados [Explicar]
  3. Argumentar por qué un análisis es correcto (sound y terminante) [Argumentar]
  4. 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]
  5. 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