stringtranslate.com

Análisis estático del programa.

En informática , el análisis estático de programas (o análisis estático ) es el análisis de programas informáticos realizado sin ejecutarlos, a diferencia del análisis dinámico de programas , que se realiza sobre los programas durante su ejecución. [1] [2]

El término generalmente se aplica al análisis realizado por una herramienta automatizada, y el análisis humano generalmente se denomina "comprensión de programa", comprensión de programa o revisión de código . En el último de ellos, también se utilizan la inspección de software y los tutoriales de software . En la mayoría de los casos, el análisis se realiza sobre alguna versión del código fuente de un programa y, en otros casos, sobre alguna forma de su código objeto .

Razón fundamental

La sofisticación del análisis realizado por herramientas varía desde aquellas que sólo consideran el comportamiento de sentencias y declaraciones individuales, [3] hasta aquellas que incluyen el código fuente completo de un programa en su análisis. Los usos de la información obtenida del análisis varían desde resaltar posibles errores de codificación (por ejemplo, la herramienta pelusa ) hasta métodos formales que prueban matemáticamente propiedades de un programa determinado (por ejemplo, su comportamiento coincide con el de su especificación).

Las métricas de software y la ingeniería inversa pueden describirse como formas de análisis estático. Las métricas de software derivadas y el análisis estático se utilizan cada vez más juntos, especialmente en la creación de sistemas integrados, mediante la definición de los llamados objetivos de calidad del software . [4]

Un uso comercial cada vez mayor del análisis estático es la verificación de propiedades del software utilizado en sistemas informáticos críticos para la seguridad y la localización de códigos potencialmente vulnerables . [5] Por ejemplo, las siguientes industrias han identificado el uso del análisis de código estático como un medio para mejorar la calidad de un software cada vez más sofisticado y complejo:

  1. Software médico : La Administración de Medicamentos y Alimentos de EE. UU. (FDA) ha identificado el uso de análisis estático para dispositivos médicos. [6]
  2. Software nuclear: en el Reino Unido, la Oficina de Regulación Nuclear (ONR) recomienda el uso de análisis estático en los sistemas de protección de reactores . [7]
  3. Software de aviación (en combinación con análisis dinámico ). [8]
  4. Automoción y máquinas (las características de seguridad funcional forman parte integral de cada fase de desarrollo de productos automotrices, ISO 26262 , sección 8).

Un estudio de 2012 realizado por VDC Research informó que el 28,7% de los ingenieros de software integrado encuestados utilizan herramientas de análisis estático y el 39,7% espera utilizarlas dentro de 2 años. [9] Un estudio de 2010 encontró que el 60% de los desarrolladores entrevistados en proyectos de investigación europeos hicieron al menos uso de sus analizadores estáticos integrados en IDE básicos. Sin embargo, sólo alrededor del 10% empleó otra herramienta de análisis adicional (y quizás más avanzada). [10]

En la industria de la seguridad de aplicaciones también se utiliza el nombre de prueba de seguridad de aplicaciones estáticas (SAST). SAST es una parte importante de los ciclos de vida de desarrollo de seguridad (SDL), como el SDL definido por Microsoft [11] y una práctica común en las empresas de software. [12]

Tipos de herramientas

El OMG ( Object Management Group ) publicó un estudio sobre los tipos de análisis de software necesarios para la medición y evaluación de la calidad del software . Este documento sobre "Cómo ofrecer sistemas de TI resilientes, seguros, eficientes y fáciles de cambiar de acuerdo con las recomendaciones CISQ" describe tres niveles de análisis de software. [13]

Nivel de unidad
Análisis que tiene lugar dentro de un programa o subrutina específica, sin conectarse al contexto de ese programa.
Nivel de tecnología
Análisis que tiene en cuenta las interacciones entre programas unitarios para obtener una visión más holística y semántica del programa general con el fin de encontrar problemas y evitar falsos positivos obvios.
Nivel del sistema
Análisis que tiene en cuenta las interacciones entre programas unitarios, pero sin limitarse a una tecnología o lenguaje de programación concreto.

Se puede definir un nivel adicional de análisis de software.

Nivel de misión/negocio
Análisis que tiene en cuenta los términos, reglas y procesos de la capa de negocio/misión que se implementan dentro del sistema de software para su operación como parte de las actividades de la capa de empresa o programa/misión. Estos elementos se implementan sin limitarse a una tecnología o lenguaje de programación específico y, en muchos casos, se distribuyen en varios lenguajes, pero se extraen y analizan estáticamente para comprender el sistema y garantizar la misión.

Métodos formales

Métodos formales es el término aplicado al análisis de software (y hardware informático ) cuyos resultados se obtienen únicamente mediante el uso de métodos matemáticos rigurosos. Las técnicas matemáticas utilizadas incluyen la semántica denotacional , la semántica axiomática , la semántica operativa y la interpretación abstracta .

Mediante una reducción sencilla al problema de la detención , es posible demostrar que (para cualquier lenguaje completo de Turing ), encontrar todos los posibles errores de tiempo de ejecución en un programa arbitrario (o más generalmente cualquier tipo de violación de una especificación en el resultado final de un programa) es indecidible : no existe ningún método mecánico que siempre pueda responder con sinceridad si un programa arbitrario puede o no presentar errores de tiempo de ejecución. Este resultado data de los trabajos de Church , Gödel y Turing en la década de 1930 (ver: Problema de detención y teorema de Rice ). Como ocurre con muchas cuestiones indecidibles, todavía se pueden intentar dar soluciones aproximadas útiles.

Algunas de las técnicas de implementación del análisis estático formal incluyen: [14]

Análisis estático basado en datos

El análisis estático basado en datos utiliza grandes cantidades de código para inferir reglas de codificación. [16] [ se necesita una mejor fuente ] Por ejemplo, se pueden usar todos los paquetes de código abierto de Java en GitHub para aprender una buena estrategia de análisis. La inferencia de reglas puede utilizar técnicas de aprendizaje automático. [17] También es posible aprender de una gran cantidad de correcciones y advertencias anteriores. [16] [ se necesita una mejor fuente ]

Remediación

Los analizadores estáticos generan advertencias. Para ciertos tipos de advertencias, es posible diseñar e implementar técnicas de corrección automatizadas . Por ejemplo, Logozzo y Ball han propuesto soluciones automatizadas para C# cccheck . [18]

Ver también

Referencias

  1. ^ Wichmann, licenciado en Letras; Enlatado, AA; Clutterbuck, DL; Winsbarrow, Luisiana; Ward, Nueva Jersey; Marsh, DWR (marzo de 1995). "Perspectiva industrial del análisis estático" (PDF) . Revista de ingeniería de software . 10 (2): 69–75. doi :10.1049/sej.1995.0010. Archivado desde el original (PDF) el 27 de septiembre de 2011.
  2. ^ Egele, Manuel; Scholte, Theodoor; Kirda, Engin; Kruegel, Christopher (5 de marzo de 2008). "Una encuesta sobre técnicas y herramientas automatizadas de análisis dinámico de malware". Encuestas de Computación ACM . 44 (2): 6:1–6:42. doi :10.1145/2089125.2089126. ISSN  0360-0300. S2CID  1863333.
  3. ^ Khatiwada, Saket; Tushev, Miroslav; Mahmoud, Anas (1 de enero de 2018). "Semántica suficiente: un enfoque teórico de la información para la localización de errores de software basado en IR". Tecnología de la información y software . 93 : 45–57. doi :10.1016/j.infsof.2017.08.012.
  4. ^ "Objetivos de calidad del software para el código fuente" Archivado el 4 de junio de 2015 en Wayback Machine (PDF). Actas: Conferencia 2010 sobre software y sistemas integrados en tiempo real , ERTS2010.org, Toulouse, Francia: Patrick Briand, Martin Brochet, Thierry Cambois, Emmanuel Coutenceau, Olivier Guetta, Daniel Mainberte, Frederic Mondot, Patrick Munier, Loic Noury, Philippe Spozio, Frederic Retailleau.
  5. ^ Mejora de la seguridad del software con análisis estático y de tiempo de ejecución precisos Archivado el 5 de junio de 2011 en Wayback Machine (PDF), Benjamin Livshits, sección 7.3 "Técnicas estáticas de seguridad". Tesis doctoral de Stanford, 2006.
  6. ^ FDA (8 de septiembre de 2010). "Investigación sobre la seguridad del software de bombas de infusión en la FDA". Administración de Alimentos y Medicamentos. Archivado desde el original el 1 de septiembre de 2010 . Consultado el 9 de septiembre de 2010 .
  7. ^ Sistemas de seguridad basados ​​en computadora: orientación técnica para evaluar aspectos de software de sistemas de protección digitales basados ​​en computadora, "Sistemas de seguridad basados ​​en computadora" (PDF) . Archivado desde el original (PDF) el 4 de enero de 2013 . Consultado el 15 de mayo de 2013 .
  8. ^ Documento de posición CAST-9. Consideraciones para evaluar enfoques de ingeniería de seguridad para Software Assurance Archivado el 6 de octubre de 2013 en Wayback Machine // FAA, Equipo de software de autoridades de certificación (CAST), enero de 2002: "Verificación. Una combinación de análisis estáticos y dinámicos debe especificarse por el solicitante/desarrollador y aplicado al software".
  9. ^ Investigación VDC (1 de febrero de 2012). "Prevención automatizada de defectos para la calidad del software integrado". Investigación VDC. Archivado desde el original el 11 de abril de 2012 . Consultado el 10 de abril de 2012 .
  10. ^ Prause, Christian R., René Reiners y Silviya Dencheva. "Estudio empírico del soporte de herramientas en proyectos de investigación altamente distribuidos". Ingeniería de software global (ICGSE), 2010 Quinta Conferencia Internacional IEEE sobre. IEEE, 2010 http://ieeexplore.ieee.org/ielx5/5581168/5581493/05581551.pdf
  11. ^ M. Howard y S. Lipner. El ciclo de vida del desarrollo de la seguridad: SDL: un proceso para desarrollar software demostrablemente más seguro. Prensa de Microsoft, 2006. ISBN 978-0735622142 
  12. ^ Achim D. Brucker y Uwe Sodan. Implementación de pruebas de seguridad de aplicaciones estáticas a gran escala Archivado el 21 de octubre de 2014 en Wayback Machine . En GI Sicherheit 2014. Lecture Notes in Informatics, 228, páginas 91-101, GI, 2014.
  13. ^ "Documento técnico de OMG | CISQ - Consorcio para la calidad del software y la información" (PDF) . Archivado (PDF) desde el original el 28 de diciembre de 2013 . Consultado el 18 de octubre de 2013 .
  14. ^ Vijay D'Silva; et al. (2008). "Un estudio sobre técnicas automatizadas para la verificación formal de software" (PDF) . Transacciones en CAD. Archivado (PDF) desde el original el 4 de marzo de 2016 . Consultado el 11 de mayo de 2015 .
  15. ^ Jones, Paul (9 de febrero de 2010). "Un enfoque de verificación basado en métodos formales para el análisis de software de dispositivos médicos". Diseño de Sistemas Embebidos. Archivado desde el original el 10 de julio de 2011 . Consultado el 9 de septiembre de 2010 .
  16. ^ ab "Aprender de los errores de otros: análisis de código basado en datos". www.slideshare.net . 13 de abril de 2015.
  17. ^ Oh, Hakjoo; Yang, Hongseok; Yi, Kwangkeun (2015). "Aprender una estrategia para adaptar el análisis de un programa mediante optimización bayesiana". Actas de la Conferencia internacional ACM SIGPLAN 2015 sobre programación, sistemas, lenguajes y aplicaciones orientados a objetos - OOPSLA 2015. págs. doi :10.1145/2814270.2814309. ISBN 9781450336895. S2CID  13940725.
  18. ^ Logozzo, Francesco; Bola, Thomas (15 de noviembre de 2012). "Reparación automática de programas modulares y verificados". Avisos ACM SIGPLAN . 47 (10): 133-146. doi :10.1145/2398857.2384626. ISSN  0362-1340.

Otras lecturas