Estoy buscando recursos para comenzar con el análisis de programas .
El único libro que he encontrado sobre el tema es el libro de Nielson & Nielson .
Aparte de eso, parece que solo hay libros de "compilación" donde el "análisis de programa" sería un capítulo, o algo por el estilo.
¿La gente conoce otros recursos?
Respuestas:
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
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.
fuente
Este campo es extremadamente amplio ... busque pruebas de la corrección del programa (hay algunas herramientas disponibles, como Klee ). Luego hay todo tipo de "verificadores de programas" de diversa sofisticación (ver por ejemplo férula o flawfinder para una muestra del rango), programas que verifican el "cumplimiento de las pautas de programación". Incluso el smatch de Linux cae en esta categoría.
Para las herramientas dinámicas, hay todo tipo de herramientas de rendimiento / cobertura de prueba, y cosas para verificar la memoria como valgrind .
Reduzca el rango de interés, luego profundice.
fuente
Hay dos enfoques de investigación en el análisis de programas:
dynamic
y elstatic
análisis de programas.Para tener una primera prueba del análisis del programa, le recomiendo leer los capítulos 4, 6 y 9 del libro de Dragon si tiene experiencia en compiladores .
O si al menos conoce gráficos básicos, sería mejor seguir un curso de posgrado, como MIT 6.820 y CMU 17-355 / 17-665 / 17-819 .
Lo anterior es sobre análisis de programas estáticos. Si le interesa más el análisis dinámico de programas , la creación de perfiles de programas es un buen punto para comenzar.
fuente