stringtranslate.com

Análisis de programas dinámicos

El análisis de programas dinámicos es el acto de analizar software que implica la ejecución de un programa , a diferencia del análisis de programas estáticos , que no lo ejecuta.

El análisis puede centrarse en diferentes aspectos del software, incluidos, entre otros: comportamiento , cobertura de pruebas , rendimiento y seguridad .

Para que sea eficaz, el programa de destino 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 de código , y herramientas como la prueba de mutación , para identificar dónde las pruebas son inadecuadas.

Tipos

Pruebas funcionales

Las pruebas funcionales incluyen técnicas de programación relativamente comunes , como pruebas unitarias , pruebas de integración y pruebas de sistema . [2]

Cobertura del código

El cálculo de la cobertura de código de una prueba identifica el código que no se prueba, es decir, que no está cubierto por una prueba.

Aunque este análisis identifica el código que no se ha probado, no determina si el código probado se ha probado adecuadamente . El código se puede ejecutar incluso si las pruebas no verifican realmente el comportamiento correcto.

Pruebas dinámicas

Las pruebas dinámicas implican la ejecución de un programa en un conjunto de casos de prueba.

Detección de errores de memoria

Pelusa

El fuzzing es una técnica de prueba que implica ejecutar un programa en una amplia variedad de entradas; a menudo, estas entradas se generan aleatoriamente (al menos en parte). Los fuzzers de caja gris utilizan la 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, recolectar las restricciones de ruta asociadas con la ejecución y usar un solucionador de restricciones (generalmente, un solucionador SMT ) para generar nuevas entradas que harían que el programa tome una ruta de flujo de control diferente, aumentando así la cobertura del código del conjunto de pruebas. [3] La DSE puede considerarse un tipo de fuzzing (fuzzing de "caja blanca").

Análisis dinámico del flujo de datos

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

Inferencia invariante

Daikon es una implementación de detección invariante dinámica. 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

Segmentación de programas

Para un subconjunto dado del comportamiento de un programa, la segmentación del programa consiste en reducir el programa a la forma mínima que aún produce el comportamiento seleccionado. El programa reducido se denomina "segmento" y es una representación fiel del programa original dentro del dominio del subconjunto del comportamiento especificado. Generalmente, encontrar un segmento es un problema irresoluble, pero al especificar el subconjunto del comportamiento objetivo mediante los valores de un conjunto de variables, es posible obtener segmentos aproximados utilizando un algoritmo de flujo de datos. Estos segmentos suelen ser utilizados por los desarrolladores durante la depuración para localizar la fuente 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 requerida ]

Técnicas

La mayoría del análisis dinámico implica instrumentación o transformación.

Dado que la instrumentación puede afectar el rendimiento en tiempo de ejecución, la interpretación de los resultados de las pruebas debe tener esto en cuenta para evitar la identificación errónea de un problema de rendimiento.

Ejemplos

DynInst es una biblioteca de parches de código en tiempo de ejecución que resulta útil para desarrollar sondas de análisis de programas dinámicos y aplicarlas a ejecutables compilados. DynInst no requiere código fuente ni recompilación en general; sin embargo, los ejecutables no descomprimidos y los ejecutables con símbolos de depuración son más fáciles de instrumentar.

Iroh.js es una biblioteca de análisis de código en tiempo de ejecución para JavaScript . Realiza un seguimiento de la ruta de ejecución del código, proporciona detectores en tiempo de ejecución para detectar patrones específicos del código ejecutado y permite interceptar y manipular el comportamiento de ejecución del programa.

Véase 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 basada en IR". Tecnología de la información y el 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 and Sons.
  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". Future Generation Computer Systems . Incluye secciones especiales: Computación distribuida habilitada cibernéticamente 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 allá. 29 (7): 1758–1773. doi :10.1016/j.future.2012.02.006. ISSN  0167-739X.
  4. ^ Chen, Ju; Han, Wookhyun; Yin, Mingjun; Zeng, Haochen; Song, Chengyu; Lee, Byoungyoung; Yin, Heng; Shin, Insik (2022). {SYMSAN}: Ejecución concólica eficiente en tiempo y espacio mediante análisis de flujo de datos dinámicos. págs. 2531–2548. ISBN 978-1-939133-31-1.
  5. ^ Chang, Walter; Streiff, Brandon; Lin, Calvin (27 de octubre de 2008). "Aplicación eficiente y extensible de la seguridad mediante el análisis dinámico del flujo de datos". Actas de la 15.ª conferencia de la ACM sobre seguridad informática y de las comunicaciones . CCS '08. Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 39–50. doi :10.1145/1455770.1455778. ISBN 978-1-59593-810-7.S2CID6888893  .​