Comenzando con el Análisis del Programa

10

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?

abeln
fuente
3
Difícil de vencer a Nielson y Nielson por empezar. Google para encuestas. Mire las actas recientes del Simposio de análisis estático (SAS). Luego, análisis particulares de google que le interesen.
Dave Clarke
Tenga en cuenta que no nos gustan las preguntas de la lista . Afortunadamente, esto parece haber atraído una buena respuesta, pero por favor absténgase de hacer tales preguntas. Busca en Google y luego pregunta sobre las cosas en los recursos que encuentres.
Raphael

Respuestas:

7

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.

  1. Una discusión de ingeniería inversa de Reddit sobre análisis de programas tiene muchos enlaces útiles.

  2. Mozilla Wiki sobre interpretación abstracta.

  3. Implementación de análisis estático , un artículo del Dr. Dobbs de Flash Sheridan

  4. 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

  1. Anders Møller, de la Universidad de Arhus, imparte un curso que cubre la tecnología web y orientada a objetos.
  2. 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 .
  3. 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 .
  4. Markus Müller-Olm tiene un curso de posgrado sobre análisis de Android .
  5. 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.
  6. 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 .
  7. 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.
  8. 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.
  9. 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.
  10. 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.
  11. 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.

  1. Interproc es una herramienta muy educativa para aprender sobre análisis estático numérico.

  2. La biblioteca Apron Numeric Abstraction si realmente te gusta el análisis numérico.

  3. Slayer es una herramienta de análisis de formas de Microsoft Research.

  4. jStar es un analizador para Java que se basa en la lógica de separación.

  5. 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.

Vijay D
fuente
Wow, ahora que es una respuesta integral! ¡Muchas gracias!
Abeln
@Vijay gracias por tu respuesta! Me pregunto si podría agregar algunos consejos para el análisis del compilador para mí.
AnneTheAgile
@AnneTheAgile, creo que esa extensión merece una pregunta y respuesta por separado. Entonces, haga la pregunta y me complace proporcionarle la respuesta.
Vijay D
@VijayD, gracias! Lo he escrito; cs.stackexchange.com/questions/13392/…
AnneTheAgile
Estoy respondiendo demasiado lento y mi publicación fue eliminada. @VijayD ¿tal vez puedas enviarme un mensaje instantáneo o agregarlo aquí? Lo que me interesa es lo básico. No estoy seguro de cuál es la mejor manera de encontrar los "análisis orientados al compilador" que "fueron fáciles de encontrar". Soy nuevo en el campo y quiero comenzar de la manera correcta. ty!
AnneTheAgile
2

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.

vonbrand
fuente
Gracias. Las que menciona son herramientas , pero ¿qué pasa con los libros o encuestas, por ejemplo, sobre el análisis de programas estáticos?
Abeln
1

Hay dos enfoques de investigación en el análisis de programas: dynamicy el staticaná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.

emmmphd
fuente