Динамический анализ кода
(
англ.
Dynamic program analysis
) — анализ
программного обеспечения
, производящийся при помощи выполнения программ на реальном или виртуальном
процессоре
(в отличие от
статического анализа
). Утилиты динамического анализа могут требовать загрузки специальных библиотек, перекомпиляцию программного кода. Некоторые утилиты могут
инструментировать
исполняемый код в процессе исполнения или перед ним. Для большей эффективности динамического анализа требуется подача тестируемой программе достаточного количества входных данных, чтобы получить более полное
покрытие кода
. Также следует позаботиться о минимизации воздействия инструментирования на исполнение тестируемой программы (включая временные характеристики).
Содержание
Примеры утилит
Valgrind
(
), выполняет программу на виртуальном процессоре, может обнаруживать ошибки памяти (например, связанные с неверным использованием функций
malloc
и
free
), ситуации гонки потоков (
race conditions
) в
.
Pin
Dmalloc
, библиотека для проверки выделения и освобождения памяти, а также утечек памяти, повторного освобождения и т. п. Программа должна быть перекомпилирована, кроме того, во все файлы необходимо подключить заголовочный файл языка Си
dmalloc.h
для получения более точных отчетов.
(недоступная ссылка)
,
Java
агент (загружаемый с помощью аргумента -javaagent:), который инструментирует код существующих приложений, работающих в виртуальной машине
JVM
, и автоматически строит
диаграммы последовательности (sequence diagrams)
.
— реализация динамического детектора инвариантов. Проводится поиск значений, вычисляемых программой и поиск свойств, которые были верны при запуске, и, наиболее вероятно, будут верны при всех запусках.
DynInst
— библиотека, модифицирующая код во время исполнения. Полезна при разработке программ динамического анализа, помогает добавлять в тестируемое ПО отладочные точки (probes). В основном, Dyninst не требует перекомпиляции программ, однако, non-stripped executables и исполняемые файлы с отладочной информацией проще поддаются инструментированию.
от компании
Security innovation
is a fault simulation tool for dynamic analysis and fragility/security testing of Windows programs.
: в основном детектирует ошибки при работе с памятью (выход за переделы массивов, утечки памяти).
: возможности, схожие с IBM Purify.
добавляет код динамического анализа в программы на языке
Visual Basic
для мониторинга их производительности, стека вызовов, трассы исполнения, instantiated objects, variables и покрытия кода.
— анализатор памяти и детектор ошибок. Компонент
Inuse
позволяет увидеть графически историю выделения памяти, анализировать использование
кучи
, искать утечки памяти и т. п.
— анализатор ошибок в многопоточных приложениях. Обнаруживает ошибки конкурентного доступа к данным и ситуации взаимоблокировок. Работает с приложениями для ОС Windows и Linux.