stringtranslate.com

Análisis dinámico del programa.

El análisis dinámico de programas es un análisis de software informático que implica la ejecución del programa en cuestión (a diferencia del análisis estático de programas , que no lo hace). El análisis dinámico de programas incluye técnicas familiares de la ingeniería de software , como pruebas unitarias , depuración y medición de la cobertura del código , pero también incluye técnicas menos conocidas como la división de programas y la inferencia invariante. El análisis dinámico de programas se aplica ampliamente en seguridad en forma de detección de errores de memoria en tiempo de ejecución, fuzzing , ejecución simbólica dinámica y seguimiento de contaminación.

Para que el análisis dinámico del programa sea efectivo, el programa objetivo debe ejecutarse con suficientes entradas de prueba [1] para abordar los rangos de posibles entradas y salidas. Se utilizan medidas de prueba de software , como la cobertura del código , y herramientas como las pruebas de mutación , para tratar de identificar casos en los que las pruebas son inadecuadas.

Para el análisis dinámico, se debe tener cuidado de minimizar el efecto que la instrumentación tiene en la ejecución (incluidas las propiedades temporales) del programa objetivo. [ ¿ por qué? ] [ necesita contexto ] Las pruebas unitarias , las pruebas de integración , las pruebas de sistema y las pruebas de aceptación son formas de pruebas dinámicas . [2]

Tipos de análisis dinámico

Cobertura de código

Calcular la cobertura del código según un conjunto de pruebas o una carga de trabajo es una técnica de análisis dinámico estándar. Identifica casos en los que el código no se ha ejecutado durante las pruebas, distinguiendo entre código que está "cubierto" y código que no.

Esta forma de análisis identifica los negativos (código que no se prueba), pero no identifica los positivos (no puede identificar si el código se ha probado adecuadamente, incluso para códigos con “100% de cobertura”). Se puede hacer que el código sea ejecutado por un sistema de prueba automatizado, lo que da como resultado una "cobertura de código", incluso si las "pruebas" en realidad no prueban nada sobre lo que hace ese código.

Pruebas dinámicas

Las pruebas dinámicas implican ejecutar un programa en un conjunto de casos de prueba.

Detección de errores de memoria

Fuzzing

Fuzzing es una técnica de prueba que implica ejecutar un programa en una amplia variedad de entradas; a menudo estos insumos se generan aleatoriamente (al menos en parte). Los fuzzers de caja gris utilizan cobertura de código para guiar la generación de entradas.

Ejecución simbólica dinámica

La ejecución simbólica dinámica (también conocida como DSE o ejecución concólica) implica ejecutar un programa de prueba en una entrada concreta, recopilar las restricciones de ruta asociadas con la ejecución y usar un solucionador de restricciones (generalmente, un solucionador SMT ) para generar nuevas entradas que causarían el programa tome una ruta de flujo de control diferente, aumentando así la cobertura del código del conjunto de pruebas. [3] DSE puede considerarse un tipo de fuzzing (fuzzing de "caja blanca").

Análisis dinámico de flujo de datos

El análisis dinámico del flujo de datos rastrea el flujo de información desde las fuentes hasta los sumideros . Las formas de análisis dinámico de flujo de datos incluyen análisis dinámico de contaminación e incluso ejecución simbólica dinámica. [4] [5]

inferencia invariante

Daikon es una implementación de detección dinámica de invariantes. Daikon ejecuta un programa, observa los valores que calcula el programa y luego informa las propiedades que fueron verdaderas en las ejecuciones observadas y, por lo tanto, probablemente verdaderas en todas las ejecuciones.

Análisis de seguridad

El análisis dinámico se puede utilizar para detectar problemas de seguridad.

Errores de concurrencia

corte de programa

Para un subconjunto dado del comportamiento de un programa, la división del programa consiste en reducir el programa a la forma mínima que todavía produce el comportamiento seleccionado. El programa reducido se denomina "porción" y es una representación fiel del programa original dentro del dominio del subconjunto de comportamiento especificado. Generalmente, encontrar una porción es un problema sin solución, pero al especificar el subconjunto de comportamiento objetivo mediante los valores de un conjunto de variables, es posible obtener porciones aproximadas usando un algoritmo de flujo de datos. Los desarrolladores suelen utilizar estos sectores durante la depuración para localizar el origen de los errores.

Análisis de rendimiento

La mayoría de las herramientas de análisis de rendimiento utilizan técnicas de análisis de programas dinámicos. [ cita necesaria ]

Técnicas

La mayoría de las técnicas de análisis dinámico se basan en algún tipo de instrumentación o transformación de código.

Ver también

Referencias

  1. ^ 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.
  2. ^ Myers, GJ (1979). El arte de las pruebas de software . John Wiley e hijos.
  3. ^ Chen, Ting; Zhang, Xiao-song; Guo, Shi-ze; Li, Hong-yuan; Wu, Yue (1 de septiembre de 2013). "Estado del arte: Ejecución simbólica dinámica para la generación automatizada de pruebas". Sistemas informáticos de generación futura . Incluye secciones especiales: Computación distribuida cibernética para servicios de red y nube ubicuos y Computación en la nube y aplicaciones científicas: Big Data, análisis escalable y más. 29 (7): 1758-1773. doi : 10.1016/j.future.2012.02.006. ISSN  0167-739X.
  4. ^ Chen, Ju; Han, Wookhyun; Yin, Mingjun; Zeng, Haochen; Canción, Chengyu; Lee, Byoungyoung; Yin, Heng; Shin, Insik (2022). {SYMSAN}: Ejecución concólica eficiente en tiempo y espacio mediante análisis dinámico de flujo de datos. págs. 2531–2548. ISBN 978-1-939133-31-1.
  5. ^ Chang, Walter; Streiff, Brandon; Lin, Calvin (27 de octubre de 2008). "Aplicación de seguridad eficiente y extensible mediante análisis dinámico de flujo de datos". Actas de la 15ª conferencia ACM sobre seguridad informática y de las comunicaciones . CCS'08. Nueva York, NY, EE.UU.: Asociación de Maquinaria de Computación. págs. 39–50. doi :10.1145/1455770.1455778. ISBN 978-1-59593-810-7. S2CID  6888893.