ScholarGate
Asistente

Análisis Estático de Programas

El análisis estático de programas examina el código fuente o intermedio, sin ejecutarlo, para inferir propiedades como los valores que una variable puede contener o si puede ocurrir un error.

Encontrar tema con PaperMindPróximamenteFind papers & topics
Tools & resources
Descargar diapositivas
Learn & explore
VídeoPróximamente

Definition

El análisis estático de programas es el cálculo de información aproximada pero sólida sobre los posibles comportamientos de un programa directamente a partir de su código, sin ejecutarlo, típicamente resolviendo ecuaciones de flujo de datos sobre un retículo de estados abstractos.

Scope

Este tema abarca el análisis de flujo de datos sobre grafos de flujo de control, el cálculo de punto fijo basado en retículos, el análisis interprocedural, el análisis de punteros y alias, y el análisis de grafos de llamadas y flujo de control. Aborda las dimensiones de precisión (sensibilidad al flujo, al contexto y a la ruta), la solidez de los análisis y su uso en la optimización y la detección de errores.

Core questions

  • ¿Cómo se calculan las propiedades del programa propagando hechos sobre un grafo de flujo de control?
  • ¿Cómo afectan la sensibilidad al flujo, al contexto y a la ruta la precisión y el costo?
  • ¿Cómo se realiza un análisis sólido a través de las llamadas a procedimientos?
  • ¿Cómo maneja el análisis de punteros el aliasing y la indirección?

Key theories

Análisis de flujo de datos como punto fijo sobre un retículo
Kildall unificó las optimizaciones globales de programas como el cálculo de un punto fijo de ecuaciones de flujo de datos sobre un retículo, proporcionando el marco general para los análisis estáticos.
Análisis interprocedural mediante alcanzabilidad de grafos
Reps, Horwitz y Sagiv redujeron una gran clase de problemas precisos de flujo de datos interprocedural a la alcanzabilidad de grafos, lo que permitió un análisis eficiente sensible al contexto a través de los límites de los procedimientos.
Principios y dimensiones del análisis
Nielson, Nielson y Hankin sistematizan los análisis basados en flujo de datos, en restricciones y en tipos, así como las compensaciones entre precisión y costo que rigen su diseño.

Clinical relevance

El análisis estático impulsa las optimizaciones del compilador, las herramientas de detección de errores y vulnerabilidades, los linters y las características del IDE. Los análisis sólidos pueden certificar la ausencia de ciertos errores, mientras que los análisis heurísticos escalables se implementan ampliamente para detectar defectos tempranamente en el desarrollo.

History

El análisis de flujo de datos surgió de los compiladores optimizadores, con el marco de retículos de Kildall de 1973 y los análisis de Allen-Cocke proporcionando la base teórica. Los análisis interprocedurales y de punteros avanzaron a lo largo de las décadas de 1980 y 1990, incluyendo la formulación de alcanzabilidad de Reps-Horwitz-Sagiv, y el análisis estático posteriormente escaló a la detección de errores industriales en bases de código muy grandes.

Debates

Precisión versus escalabilidad
Los diseñadores de análisis continuamente intercambian dimensiones de precisión como la sensibilidad al contexto y a la ruta, que reducen los falsos positivos, por el costo computacional que limita el tamaño de un programa que puede ser analizado.

Key figures

  • Gary Kildall
  • Thomas Reps
  • Susan Horwitz
  • Flemming Nielson
  • Hanne Riis Nielson

Related topics

Seminal works

  • kildall1973
  • reps1995
  • nielson1999

Frequently asked questions

¿Qué significa que un análisis estático sea sólido?
Un análisis sólido nunca omite una ocurrencia real de la propiedad que verifica: si no reporta ningún error de un tipo dado, ese tipo de error genuinamente no puede ocurrir, aunque también puede generar falsas alarmas.
¿Por qué es difícil el análisis de punteros?
Los punteros y las referencias introducen el aliasing, donde múltiples nombres se refieren a la misma memoria, por lo que el análisis debe aproximar qué ubicaciones puede apuntar cada puntero, un problema que intercambia precisión por escalabilidad.

Methods for this concept

Related concepts