Динамический анализ программы
Эта статья нуждается в дополнительных цитатах для проверки . ( февраль 2009 г. ) |
Выполнение программы |
---|
Общие понятия |
Типы кода |
Стратегии составления |
Известное время выполнения |
|
Известные компиляторы и наборы инструментов |
|
Динамический анализ программы — это анализ программного обеспечения , который включает в себя выполнение программы , в отличие от статического анализа программы , который ее не выполняет.
Анализ может быть сосредоточен на различных аспектах программного обеспечения, включая, помимо прочего: поведение , тестовое покрытие , производительность и безопасность .
Чтобы быть эффективной, целевая программа должна выполняться с достаточным количеством тестовых входных данных. [ 1 ] для рассмотрения диапазонов возможных входов и выходов. Меры тестирования программного обеспечения , такие как покрытие кода , и такие инструменты, как тестирование мутаций , используются для выявления случаев, когда тестирование неадекватно.
Типы
[ редактировать ]Функциональное тестирование
[ редактировать ]Функциональное тестирование включает относительно распространенные методы программирования, такие как модульное тестирование , интеграционное тестирование и системное тестирование . [ 2 ]
Покрытие кода
[ редактировать ]Вычисление покрытия кода тестом идентифицирует код, который не тестировался; не охваченные тестом.
Хотя этот анализ выявляет код, который не тестировался, он не определяет, является ли проверенный код адекватно протестированным. Код может быть выполнен, даже если тесты фактически не проверяют правильное поведение.
- Gcov — это программа покрытия исходного кода GNU .
- VB Watch внедряет код динамического анализа в программы Visual Basic для мониторинга покрытия кода , стека вызовов, трассировки выполнения, экземпляров объектов и переменных.
Динамическое тестирование
[ редактировать ]Динамическое тестирование предполагает выполнение программы на наборе тестовых примеров.
Обнаружение ошибок памяти
[ редактировать ]- AddressSanitizer : обнаружение ошибок памяти для Linux, macOS , Windows и других систем. Часть ЛЛВМ .
- BoundsChecker : обнаружение ошибок памяти для приложений Windows. Часть Micro Focus DevPartner .
- Dmalloc : библиотека для проверки распределения памяти и утечек. Программное обеспечение должно быть перекомпилировано, и все файлы должны включать специальный заголовочный файл C dmalloc.h.
- Intel Inspector : отладчик ошибок динамической памяти для приложений C, C++ и Fortran, работающих в Windows и Linux .
- Очистка : в основном обнаружение повреждения памяти и обнаружение утечек памяти.
- Valgrind : запускает программы на виртуальном процессоре и может обнаруживать ошибки памяти (например, неправильное использование malloc и free ) и состояния гонки в многопоточных программах.
Фаззинг
[ редактировать ]Фаззинг — это метод тестирования, который предполагает выполнение программы на самых разных входных данных; часто эти входные данные генерируются случайным образом (по крайней мере частично). Фаззеры серого ящика используют покрытие кода для управления генерацией входных данных.
Динамическое символическое исполнение
[ редактировать ]Динамическое символическое выполнение (также известное как DSE или concolic выполнение) включает в себя выполнение тестовой программы на конкретных входных данных, сбор ограничений пути, связанных с выполнением, и использование решателя ограничений (обычно решателя SMT ) для генерации новых входных данных, которые могут привести к программе выбрать другой путь потока управления, тем самым увеличивая покрытие кода набора тестов. [ 3 ] DSE можно рассматривать как разновидность фаззинга («фаззинг белого ящика»).
Динамический анализ потока данных
[ редактировать ]Динамический анализ потоков данных отслеживает поток информации от источников к получателям . Формы динамического анализа потока данных включают динамический анализ искажений и даже динамическое символьное выполнение . [ 4 ] [ 5 ]
Инвариантный вывод
[ редактировать ]Daikon — это реализация динамического инвариантного обнаружения. Daikon запускает программу и наблюдает за значениями, которые программа вычисляет, а затем сообщает о свойствах, которые были верны для наблюдаемых выполнений и, следовательно, вероятно, верны для всех исполнений.
Анализ безопасности
[ редактировать ]Динамический анализ можно использовать для обнаружения проблем безопасности.
- 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 Thread Sanitizer — это инструмент обнаружения гонок за данными. Он использует LLVM IR для захвата несанкционированного доступа к памяти.
Нарезка программы
[ редактировать ]Для данного подмножества поведения программы нарезка программы состоит в сокращении программы до минимальной формы, которая по-прежнему обеспечивает выбранное поведение. Сокращенная программа называется «срезом» и является точным представлением исходной программы в области указанного подмножества поведения. Как правило, поиск среза является неразрешимой проблемой, но, задав подмножество целевого поведения значениями набора переменных, можно получить приблизительные срезы, используя алгоритм потока данных. Эти фрагменты обычно используются разработчиками во время отладки для определения источника ошибок.
Анализ производительности
[ редактировать ]Большинство инструментов анализа производительности используют методы динамического анализа программ. [ нужна ссылка ]
Техники
[ редактировать ]Большая часть динамического анализа включает в себя инструментирование или преобразование.
Поскольку инструментирование может повлиять на производительность во время выполнения, интерпретация результатов тестирования должна учитывать это, чтобы избежать ошибочного определения проблемы с производительностью.
Примеры
[ редактировать ]DynInst — это библиотека исправлений кода во время выполнения, которая полезна при разработке проб динамического анализа программ и их применении к скомпилированным исполняемым файлам. Dyninst в целом не требует исходного кода или перекомпиляции, однако неурезанные исполняемые файлы и исполняемые файлы с символами отладки легче инструментировать.
Iroh.js — это библиотека анализа кода времени выполнения для JavaScript . Он отслеживает путь выполнения кода, предоставляет прослушивателям среды выполнения прослушивание определенных шаблонов выполняемого кода и позволяет перехватывать и манипулировать поведением выполнения программы.
См. также
[ редактировать ]- Абстрактная интерпретация
- Дайкон
- Динамическое нагрузочное тестирование
- Профилирование (компьютерное программирование)
- Проверка времени выполнения
- Программный анализ (информатика)
- Статический анализ кода
- Тестирование временного разделения
Ссылки
[ редактировать ]- ^ Хативада, Сакет; Тушев, Мирослав; Махмуд, Анас (01 января 2018 г.). «Семантики ровно столько: теоретико-информационный подход для локализации ошибок программного обеспечения на основе ИК» . Информационные и программные технологии . 93 : 45–57. дои : 10.1016/j.infsof.2017.08.012 .
- ^ Майерс, Дж.Дж. (1979). Искусство тестирования программного обеспечения . Джон Уайли и сыновья.
- ^ Чен, Тин; Чжан, Сяо-сун; Го, Ши-цзэ; Ли, Хун-юань; Ву, Юэ (01 сентября 2013 г.). «Современное состояние: динамическое символьное выполнение для автоматизированной генерации тестов» . Компьютерные системы будущего поколения . Включая специальные разделы: Распределенные вычисления с поддержкой кибербезопасности для повсеместных облачных и сетевых сервисов, а также облачные вычисления и научные приложения — большие данные, масштабируемая аналитика и многое другое. 29 (7): 1758–1773. дои : 10.1016/j.future.2012.02.006 . ISSN 0167-739X .
- ^ Чен, Цзюй; Хан, Ухён; Инь, Минджун; Цзэн, Хаочэнь; Сун, Чэнъюй; Ли, Бёнён; Инь, Хэн; Шин, Инсик (2022). {SYMSAN}: эффективное выполнение Concolic во времени и пространстве посредством динамического анализа потока данных . стр. 2531–2548. ISBN 978-1-939133-31-1 .
- ^ Чанг, Уолтер; Штрайфф, Брэндон; Лин, Кэлвин (27 октября 2008 г.). «Эффективное и расширяемое обеспечение безопасности с использованием динамического анализа потоков данных» . Материалы 15-й конференции ACM «Компьютерная и коммуникационная безопасность» . ККС '08. Нью-Йорк, штат Нью-Йорк, США: Ассоциация вычислительной техники. стр. 39–50. дои : 10.1145/1455770.1455778 . ISBN 978-1-59593-810-7 . S2CID 6888893 .