Введение
Анализ программного обеспечения, выполняемый при выполнении программы Динамический анализ программы - это анализ программного обеспечения, который включает в себя выполнение программы, в отличие от статического анализа программы, который не выполняет ее. Анализ может сосредоточиться на различных аспектах программного обеспечения, включая, но не ограничиваясь: поведение, охват тестами, производительность и безопасность. Чтобы быть эффективной, целевая программа должна выполняться с достаточным количеством входных данных для тестирования, чтобы учитывать диапазоны возможных входов и выходов. Для определения недостатков тестирования используются такие меры тестирования программного обеспечения, как охват кода, и такие инструменты, как тестирование мутаций.
Dynamic program analysis is the act of analyzing software that involves executing a program as opposed to static program analysis, which does not execute it. Analysis can focus on different aspects of the software including but not limited to: behavior, test coverage, performance and security. To be effective, the target program must be executed with sufficient test inputs to address the ranges of possible inputs and outputs. Software testing measures, such as code coverage, and tools such as mutation testing, are used to identify where testing is inadequate.
Функциональное тестирование
Функциональное тестирование включает в себя относительно распространенные методы программирования, такие как блок-тестирование, интеграционное тестирование и системное тестирование.
Покрытие кода
Вычисление охвата кода испытания определяет код, который не проверен; не охвачен испытанием. Хотя этот анализ выявляет код, который не проверен, он не определяет, адекватно ли проверенный код. Код может быть выполнен, даже если тесты фактически не проверяют правильность поведения. Gcov - это программа покрытия исходного кода GNU. VB Watch вводит динамический код анализа в программы Visual Basic для мониторинга охвата кода, стека вызовов, следа выполнения, инстанцированных объектов и переменных.
Динамическое испытание
Динамическое тестирование включает в себя выполнение программы на наборе тестовых случаев.
Обнаружение ошибок памяти
AddressSanitizer: обнаружение ошибок памяти для Linux, macOS, Windows и других. Часть LLVM. BoundsChecker: обнаружение ошибок памяти для приложений на базе Windows. Часть компании Micro Focus DevPartner. Dmalloc: библиотека для проверки распределения памяти и утечек. Программное обеспечение должно быть перекомпилировано, и все файлы должны включать специальный файл заголовка C dmalloc. h. Intel Inspector: Динамический дебьюгер ошибок памяти для приложений C, C++ и Fortran, работающих на Windows и Linux. Очистка: в основном обнаружение повреждений памяти и обнаружение утечки памяти. Valgrind: Запускает программы на виртуальном процессоре и может обнаруживать ошибки памяти (например, неправильное использование malloc и free) и условия гонки в многопоточных программах.
Intel Inspector: Dynamic memory error debugger for C, C++, and Fortran applications that run on Windows and Linux. Purify: Mainly memory corruption detection and memory leak detection. Valgrind: Runs programs on a virtual processor and can detect memory errors (e. g., misuse of malloc and free) and race conditions in multithread programs.
Пыльчатая
Фуззинг - это метод тестирования, который включает в себя выполнение программы на широком спектре входов; часто эти входы генерируются случайным образом (по крайней мере, частично). Грей-бокс-фуззеры используют кодовую защиту для управления генерацией входных данных.
Динамическое символическое исполнение
Динамическое символическое исполнение (также известное как DSE или конколическое исполнение) включает в себя выполнение тестовой программы на конкретном входе, сбор ограничений пути, связанных с исполнением, и использование решителя ограничений (обычно решителя SMT) для генерации новых входов, которые заставят программу использовать другой путь потока управления, тем самым увеличивая охват кода тестового пакета. DSE можно считать типом размывания ("белый ящик" размывания).
Динамический анализ потока данных
Динамический анализ потока данных отслеживает поток информации от источников до осей. Формы динамического анализа потоков данных включают динамический анализ запятой и даже динамическое символическое выполнение.
Инвариантный вывод
Дайкон - это реализация динамического инвариантного обнаружения. Daikon запускает программу, наблюдает за значениями, которые вычисляет программа, а затем сообщает свойства, которые были верны для наблюдаемого исполнения, и, таким образом, вероятно, верны для всех исполнений.
the program computes, and then reports properties that were true over the observed executions, and thus likely true over all executions.
Анализ безопасности
Динамический анализ может быть использован для выявления проблем безопасности. IBM Rational AppScan - это набор решений для обеспечения безопасности приложений, предназначенных для различных этапов жизненного цикла разработки. Комплекс включает в себя два основных продукта динамического анализа: IBM Rational AppScan Standard Edition и IBM Rational AppScan Enterprise Edition. Кроме того, в пакет входит IBM Rational AppScan Source Edition, инструмент статического анализа.
Ошибки синхронности
Parasoft Jtest использует обнаружение ошибок во время выполнения для выявления таких дефектов, как условия гонки, исключения, утечки ресурсов и памяти и уязвимости атак безопасности. Intel Inspector выполняет анализ потоков времени выполнения и ошибок памяти в Windows. Parasoft Insure++ - это инструмент для анализа памяти и обнаружения ошибок во время выполнения. Его компонент Inuse обеспечивает графическое представление распределения памяти с течением времени, с конкретной видимостью общего использования кучи, распределения блоков, возможных неисправностей и т. Д. Google's Thread Sanitizer - это инструмент для обнаружения данных. Он использует LLVM IR для захвата доступных доступа к памяти.
Разрезка программы
Для заданного подмножества поведения программы, разрезание программы состоит в сокращении программы до минимальной формы, которая все еще производит выбранное поведение. Сокращенная программа называется slice и является верным представлением исходной программы в пределах области указанного подмножества поведения. Как правило, поиск фрагмента является нерешенной проблемой, но путем указания подмножества целевого поведения на основе значений множества переменных можно получить приблизительные фрагменты с использованием алгоритма потока данных. Эти фрагменты обычно используются разработчиками во время отладки, чтобы найти источник ошибок.
Анализ результатов
Большинство инструментов анализа производительности используют методы динамического анализа программ.
Техника
Большинство динамических анализов включает в себя инструментацию или трансформацию. Поскольку приборы могут влиять на производительность во время выполнения, толкование результатов испытаний должно учитывать это, чтобы избежать ошибочной идентификации проблемы производительности.
Примеры
DynInst - это библиотека для исправления кода во время выполнения, которая полезна для разработки динамических программных анализаторов и их применения к скомпилированным исполняемым файлам. Dyninst не требует исходного кода или перекомпиляции в целом, однако, не очищенные исполняемые файлы и исполняемые файлы с символами отладки легче инструментировать. Иро. js - это библиотека анализа кода для JavaScript. Он отслеживает путь выполнения кода, предоставляет слушателям времени выполнения возможность прослушивать конкретные шаблоны выполненного кода и позволяет перехватывать и манипулировать поведением программы при выполнении.