Análisis dinámico de programas - Dynamic program analysis

El análisis dinámico de programas es el análisis de software informático que se realiza mediante la ejecución de programas en un procesador real o virtual. Para que el análisis dinámico del programa sea eficaz, el programa de destino debe ejecutarse con suficientes entradas de prueba para cubrir casi todas las salidas posibles. El uso de medidas de prueba de software , como la cobertura de código, ayuda a garantizar que se haya observado una porción adecuada del conjunto de posibles comportamientos del programa. Además, se debe tener cuidado para minimizar el efecto que tiene la instrumentación en la ejecución (incluidas las propiedades temporales) del programa de destino. El análisis dinámico contrasta con el análisis de programa estático . Las pruebas unitarias , pruebas de integración , pruebas de sistema y pruebas de aceptación utilizan pruebas dinámicas.

Tipos de análisis dinámico

Cobertura de código

Calcular la cobertura del código de acuerdo con un conjunto de pruebas o una carga de trabajo es una técnica de análisis dinámico estándar.

  • 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 monitorear la cobertura de código , pila de llamadas, seguimiento de ejecución, objetos instanciados y variables.

Detección de errores de memoria

Localización de averías

La localización de fallas se refiere a localizar el código defectuoso (por ejemplo, la declaración de fallas) de acuerdo con los casos de prueba fallidos y aprobados. Por ejemplo, Tarantula es un enfoque de localización de fallas bien conocido basado en el código cubierto. La localización de fallas ilustra una propiedad importante del análisis dinámico: los resultados del análisis dependen de la carga de trabajo, las entradas o los casos de prueba considerados. Para la localización de fallas, se ha demostrado que se pueden refactorizar los casos de prueba para obtener mejores resultados.

Inferencia invariante

Daikon es una implementación de detección dinámica invariante. Daikon ejecuta un programa, observa los valores que calcula el programa y luego informa las propiedades que eran 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.

  • IBM Rational AppScan es un conjunto de soluciones de seguridad de aplicaciones destinadas a diferentes etapas del ciclo de vida del desarrollo. La suite incluye dos productos principales de análisis dinámico: IBM Rational AppScan Standard Edition e IBM Rational AppScan Enterprise Edition. Además, la suite incluye IBM Rational AppScan Source Edition, una herramienta de análisis estático.

Errores de concurrencia

  • Parasoft Jtest utiliza la detección de error de ejecución para exponer los defectos tales como las condiciones de carrera , excepciones, las pérdidas de recursos y de memoria, y las vulnerabilidades de seguridad de ataque.
  • Intel Inspector realiza análisis de errores de memoria y subprocesos en tiempo de ejecución en Windows.
  • Parasoft Insure ++ es una herramienta de detección de errores y análisis de memoria en tiempo de ejecución. 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, asignaciones de bloques, posibles fugas pendientes, etc.
  • Thread Sanitizer de Google es una herramienta de detección de carrera de datos. Instrumenta LLVM IR para capturar accesos picantes a la memoria.

Programa de corte

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 aún produce el comportamiento seleccionado. El programa reducido se llama un "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 sin solución, pero al especificar el subconjunto de comportamiento objetivo por los valores de un conjunto de variables, es posible obtener segmentos aproximados usando un algoritmo de flujo de datos. Los desarrolladores suelen utilizar estos segmentos 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.

  • Prism de CriticalBlue es una herramienta que rastrea dinámicamente las aplicaciones de software en tiempo de ejecución y captura datos que se pueden usar para analizar e identificar las causas del bajo rendimiento.

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 .

  • DynInst es una biblioteca de parcheo de código en tiempo de ejecución que es útil para desarrollar sondeos de análisis de programas dinámicos y aplicarlos a ejecutables compilados. Dyninst no requiere código fuente ni recompilación en general, sin embargo, los ejecutables no eliminados 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 oyentes en tiempo de ejecución para escuchar patrones de código ejecutados específicos y permite interceptar y manipular el comportamiento de ejecución del programa.

Ver también

Referencias