Articulo de referencia

Análisis dinámico de programas

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

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

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

Para ser efectivo, el programa objetivo debe ejecutarse con suficientes entradas de prueba [ 1 ] para abarcar los rangos de posibles entradas y salidas. Se utilizan medidas de prueba de software , como la cobertura de código , y herramientas como las pruebas de mutación , para identificar dónde las pruebas son insuficientes.

Tipos

Pruebas funcionales

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

Cobertura de código

El cálculo de la cobertura del código de prueba permite identificar el código que no ha sido probado.

Si bien este análisis identifica código que no ha sido probado, no determina si el código probado ha sido probado adecuadamente . El código puede ejecutarse incluso si las pruebas no verifican su correcto funcionamiento.

  • Gcov es el programa de cobertura de código fuente de GNU .
  • VB Watch inyecta código de análisis dinámico en programas de Visual Basic para supervisar la cobertura del código , la pila de llamadas, el seguimiento de la ejecución, los objetos instanciados y las variables.

Pruebas dinámicas

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

detección de errores de memoria

Fuzzing

El fuzzing es una técnica de prueba que consiste en ejecutar un programa con 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, recopilar las restricciones de ruta asociadas a la ejecución y utilizar un solucionador de restricciones (generalmente, un solucionador SMT ) para generar nuevas entradas que harían que el programa tomara una ruta de flujo de control diferente, aumentando así la cobertura de 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 sumideros . 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 dinámica de invariantes. Daikon ejecuta un programa, observa los valores que este calcula y, a continuación, informa sobre las propiedades que fueron verdaderas durante las ejecuciones observadas y que, por lo tanto, probablemente sean verdaderas en todas las ejecuciones.

Análisis de seguridad

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

  • IBM Rational AppScan es un conjunto de soluciones de seguridad de aplicaciones diseñadas para las distintas etapas del ciclo de vida del desarrollo. El conjunto incluye dos productos principales de análisis dinámico: IBM Rational AppScan Standard Edition e IBM Rational AppScan Enterprise Edition. Además, incluye IBM Rational AppScan Source Edition, una herramienta de análisis estático.

errores de concurrencia

  • Parasoft Jtest utiliza la detección de errores en tiempo de ejecución para exponer defectos como condiciones de carrera , excepciones, fugas de recursos y memoria, y vulnerabilidades ante ataques de seguridad.
  • Intel Inspector realiza análisis de subprocesos y errores de memoria en tiempo de ejecución en Windows.
  • Parasoft Insure++ es una herramienta de análisis de memoria en tiempo de ejecución y detección de errores. Su componente Inuse proporciona una vista gráfica de las asignaciones de memoria a lo largo del tiempo, con visibilidad específica del uso general del montón, las asignaciones de bloques, las posibles fugas pendientes, etc.
  • Thread Sanitizer de Google es una herramienta de detección de condiciones de carrera. Instrumenta LLVM IR para capturar accesos a memoria que presentan condiciones de carrera.

Segmentación de programas

Para un subconjunto dado del comportamiento de un programa, la segmentación de programas 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 de comportamiento especificado. Generalmente, encontrar un segmento es un problema irresoluble, pero al especificar el subconjunto de comportamiento objetivo en función de los valores de un conjunto de variables, es posible obtener segmentos aproximados mediante un algoritmo de flujo de datos. Estos segmentos suelen ser utilizados por los desarrolladores 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 dinámico de programas.

Técnicas

La mayoría de los análisis dinámicos implican instrumentación o transformación.

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

Ejemplos

DynInst es una biblioteca de parcheo de código en tiempo de ejecución útil para desarrollar sondas de análisis de programas dinámicos y aplicarlas a ejecutables compilados. DynInst no requiere el código fuente ni la recompilación en general; sin embargo, los ejecutables sin símbolos de depuración y aquellos 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 de eventos en tiempo de ejecución para detectar patrones de código específicos y permite la interceptación y manipulación del comportamiento de ejecución del programa.

Véase también

Referencias

  1. Khatiwada, Saket; Tushev, Miroslav; Mahmoud, Anas (2018-01-01). "Just enough semantics: An information theoretic approach for IR-based software bug localization" . Information and Software Technology . 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 (2013-09-01). "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 por ciberseguridad para servicios de red y nube ubicuos y Computación en la nube y aplicaciones científicas: macrodatos, análisis escalables 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 dinámico del flujo de datos . pp. 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 medidas de seguridad mediante análisis dinámico del flujo de datos» . Actas de la 15.ª conferencia ACM sobre seguridad informática y de 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. S2CID 6888893 .