El análisis dinámico programa es el análisis de los programas informáticos 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. [ ¿por qué? ] 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. [ ¿por qué? ] [ necesita contexto ]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. [1]
Tipos de análisis dinámico
Cobertura de código
Cálculo de la cobertura de 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
- Intel Inspector : depurador de errores de memoria dinámica para aplicaciones C, C ++ y Fortran que se ejecutan en Windows * y Linux * ..
- AddressSanitizer : detección de errores de memoria para Linux , macOS , de Windows , y mucho más. Parte de LLVM .
- BoundsChecker : detección de errores de memoria para aplicaciones basadas en Windows. Parte de Micro Focus DevPartner .
- Dmalloc , biblioteca para comprobar la asignación de memoria y las fugas. El software debe recompilarse y todos los archivos deben incluir el archivo de encabezado C especial dmalloc.h.
- Purificar : principalmente detección de corrupción de memoria y detección de fugas de memoria.
- Valgrind ejecuta programas en un procesador virtual y puede detectar errores de memoria (por ejemplo, mal uso de malloc y free ) y condiciones de carrera en programas multiproceso .
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 localización de fallos conocido basado en el código de cubierta. [2] Fault localización ilustra una propiedad importante de análisis dinámico: los resultados en el análisis dependen de la carga de trabajo, insumos considerados o casos de prueba. Para la localización de fallos, se ha demostrado que se puede refactorizar los casos de prueba con el fin de obtener mejores resultados. [3]
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 específicas para las diferentes etapas del ciclo de vida de 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 ejecutar roscado tiempo y análisis de errores de memoria 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 en el tiempo, con una visibilidad específica a ser de uso general montón, asignaciones de bloques, posibles fugas en circulación, 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. [ cita requerida ]
- 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 de código o transformación.
- DynInst es una biblioteca de código de parches en tiempo de ejecución que es útil en el desarrollo de sondas de análisis de programa dinámico y su aplicación 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. Se realiza un seguimiento de la ruta de ejecución de código, ofrece a los oyentes de tiempo de ejecución para escuchar los patrones de código ejecutado específicas y permite interceptar y manipular el comportamiento de ejecución del programa.
Ver también
- Interpretación abstracta
- Daikon
- Prueba de carga dinámica
- Elaboración de perfiles (programación informática)
- Verificación en tiempo de ejecución
- Análisis de programas (informática)
- Análisis de código estático
- Prueba de partición de tiempo
Referencias
- ^ Myers, GJ (1979). El arte de las pruebas de software . John Wiley e hijos.
- ^ Jones, James A .; Harrold, Mary Jean (2005). "Evaluación empírica de la técnica de localización automática de fallas de tarántula". Actas de la 20ª Conferencia internacional IEEE / ACM sobre ingeniería de software automatizada - ASE '05 . ACM. págs. 273-282. doi : 10.1145 / 1,101,908.1101949 . ISBN 1581139934.
- ^ Xuan, Jifeng; Monperrus, Martín (2014). "Purificación de casos de prueba para mejorar la localización de fallas" . Actas del 22 ° Simposio Internacional ACM SIGSOFT sobre Fundamentos de la Ingeniería de Software - FSE 2014 . págs. 52–63. CiteSeerX 10.1.1.477.2525 . doi : 10.1145 / 2635868.2635906 . ISBN 9781450330565.