Lamentablemente, no hay muchos libros de texto sobre el tema. Creo que la mejor manera de aprender el análisis de programas hoy es encuestar a los diferentes cursos disponibles, jugar con algunas implementaciones y luego mirar algunos documentos de investigación para sus necesidades específicas. Lo que sigue es una muestra muy pequeña de lo que hay ahí fuera. Como mencionó específicamente que los análisis orientados al compilador eran fáciles de encontrar, no cubriré dicho material a continuación.
Recursos basados en la web
Estos son artículos que enfatizan el uso del análisis estático fuera de un contexto de compilación.
Una discusión de ingeniería inversa de Reddit sobre análisis de programas tiene muchos enlaces útiles.
Mozilla Wiki sobre interpretación abstracta.
Implementación de análisis estático , un artículo del Dr. Dobbs de Flash Sheridan
Unos cuantos miles de millones de líneas de código más adelante: Uso del análisis estático para encontrar errores en el mundo real , Al Bessey, Ken Block, Ben Chelf, Andy Chou, Bryan Fulton, Seth Hallem, Charles Henri-Gros, Asya Kamsky, Scott McPeak, Dawson Engler en Comunicaciones de la ACM.
Cursos universitarios sobre análisis de programas
- Anders Møller, de la Universidad de Arhus, imparte un curso que cubre la tecnología web y orientada a objetos.
- Bor-Yuh Evan Chang de la Universidad de Colorado Boulder tiene un curso básico que implica una implementación OCaml y un curso de posgrado .
- Ben Hardekopf, de la Universidad de California, Santa Bárbara solía tener un gran conjunto de tareas, pero ya no están disponibles en línea. Algunos estudiantes que tomaron su curso parecen haber puesto a disposición una implementación de Python .
- Markus Müller-Olm tiene un curso de posgrado sobre análisis de Android .
- Reinhard Wilhelm, de la Universidad de Sarbruecken, imparte un curso de posgrado que cubre aplicaciones de análisis estático, como análisis de tiempo, predicción de comportamiento de caché y algunos análisis de forma.
- Sumit Gulwani de MSR enseñó un buen curso sobre la estimación estática del consumo de recursos de los programas (tiempo / memoria) en la Escuela de Verano de Oregon sobre Lenguajes de Programación .
- Koushik Sen, de la Universidad de California en Berkeley, imparte un curso que se centra en la búsqueda de errores y cuyos temas abarcan la ejecución concólica y la verificación del modelo de software.
- Jeffrey Foster, de la Universidad de Maryland, imparte un curso que cubre sistemas de tipos, verificación de modelos, análisis de alias y muchos otros materiales habituales.
- Patrick Cousot pasó un año en el MIT y enseñó un curso integral y fundamental sobre interpretación abstracta. Las tareas incluyen una implementación OCaml que va desde la semántica de recolección concreta hasta algunas ideas algorítmicamente no triviales.
- Un curso de posgrado sobre interpretación abstracta impartido por algunos líderes en el campo es un buen lugar para ponerse al día con aún más teoría.
- Patrick Cousot enseñó un curso corto sobre interpretación abstracta en la Escuela de Verano de Oregón sobre Lenguajes de Programación en 2009.
Herramientas para jugar
No estoy enumerando muchas herramientas de investigación aquí. Hay muchos de esos, pero he tratado de enumerar algunos que puedes descargar y jugar para comprender mejor el área.
Interproc es una herramienta muy educativa para aprender sobre análisis estático numérico.
La biblioteca Apron Numeric Abstraction si realmente te gusta el análisis numérico.
Slayer es una herramienta de análisis de formas de Microsoft Research.
jStar es un analizador para Java que se basa en la lógica de separación.
Microsoft Research tiene numerosos grupos que desarrollan numerosas herramientas, muchas de las cuales están disponibles para descargar o tienen demostraciones web. No puedo enumerar todo aquí y sugerirle que juegue con ellos.
Hay mucho más, pero probablemente sea suficiente para mantenerte ocupado por un tiempo.