Динамический анализ программы - Dynamic program analysis
Эта статья поднимает множество проблем. Пожалуйста помоги Улучши это или обсудите эти вопросы на страница обсуждения. (Узнайте, как и когда удалить эти сообщения-шаблоны) (Узнайте, как и когда удалить этот шаблон сообщения)
|
Выполнение программы |
---|
Общие понятия |
Типы кода |
Стратегии компиляции |
Заметное время выполнения |
|
Известные компиляторы и инструментальные средства |
Динамический анализ программы это анализ компьютерного программного обеспечения который выполняется путем выполнения программ на реальном или виртуальном процессоре. Чтобы динамический анализ программы был эффективным, целевая программа должна выполняться с достаточным количеством тестовых входов, чтобы охватить почти все возможные выходы. Использование тестирование программного обеспечения такие меры, как покрытие кода помогает гарантировать соблюдение адекватной части набора возможных поведений программы.[Почему? ] Кроме того, следует позаботиться о том, чтобы минимизировать влияние инструментария на выполнение (включая временные свойства) целевой программы.[Почему? ][нужен контекст ] Динамический анализ отличается от статический анализ программы. Модульные тесты, интеграционные тесты, системные тесты и приемочные испытания использовать динамическое тестирование.[1]
Виды динамического анализа
Покрытие кода
Вычисление покрытие кода в соответствии с набором тестов или рабочей нагрузкой - это стандартный метод динамического анализа.
- Gcov это программа покрытия исходного кода GNU.
- VB Смотреть внедряет код динамического анализа в программы Visual Basic для мониторинга покрытие кода, стек вызовов, трассировка выполнения, экземпляры объектов и переменных.
Обнаружение ошибок памяти
- AddressSanitizer: Обнаружение ошибок памяти для Linux, OSX, Windows, и больше. Часть LLVM.
- BoundsChecker: Обнаружение ошибок памяти для приложений на базе Windows. Часть Микро Фокус DevPartner.
- Дмаллок, библиотека для проверки выделения памяти и утечек. Программное обеспечение необходимо перекомпилировать, и все файлы должны включать специальный файл заголовка C dmalloc.h.
- Очистить: в основном повреждение памяти обнаружение и обнаружение утечки памяти.
- Валгринд запускает программы на виртуальном процессоре и может обнаруживать ошибки памяти (например, неправильное использование маллок и свободный ) и условия гонки в многопотоковый программы.
Локализация неисправности
Локализация ошибки относится к обнаружению кода с ошибкой (например, оператора с ошибкой) в соответствии с неудачными и успешными тестовыми случаями. Например, Tarantula - это хорошо известный подход к локализации неисправностей, основанный на покрываемом коде.[2] Локализация сбоев иллюстрирует важное свойство динамического анализа: результаты анализа зависят от рассматриваемой рабочей нагрузки, входных данных или тестовых примеров. Было показано, что для локализации сбоев можно провести рефакторинг тестовых примеров, чтобы получить лучшие результаты.[3]
Инвариантный вывод
Дайкон представляет собой реализацию динамического обнаружения инвариантов. Daikon запускает программу, наблюдает за значениями, которые программа вычисляет, а затем сообщает о свойствах, которые были истинными для наблюдаемых выполнений и, следовательно, вероятно, истинными для всех выполнений.
Анализ безопасности
Динамический анализ может использоваться для обнаружения проблем безопасности.
- IBM Rational AppScan представляет собой набор решений по обеспечению безопасности приложений, предназначенных для различных этапов жизненного цикла разработки. Пакет включает два основных продукта динамического анализа - IBM Rational AppScan Standard Edition и IBM Rational AppScan Enterprise Edition. Кроме того, в комплект входит IBM Rational AppScan Source Edition - инструмент статического анализа.
Ошибки параллелизма
- Parasoft Jtest использует обнаружение ошибок во время выполнения, чтобы выявить такие дефекты, как условия гонки, исключения, утечки ресурсов и памяти, а также уязвимости атак безопасности.
- Intel Thread Checker это инструмент анализа ошибок потоковой передачи во время выполнения, который может обнаруживать потенциальные гонки данных и взаимоблокировки в многопоточный Приложения для Windows или Linux.
- Intel Parallel Inspector выполняет распараллеливание во время выполнения и анализ ошибок памяти в Windows.
- Parasoft Страхование ++ это инструмент для анализа оперативной памяти и обнаружения ошибок. Его компонент Inuse обеспечивает графическое представление распределения памяти с течением времени, с особым обзором общего использования кучи, распределения блоков, возможных невыполненных утечек и т. Д.
Программа нарезки
Для данного подмножества поведения программы нарезка программы заключается в приведении программы к минимальной форме, которая по-прежнему обеспечивает выбранное поведение. Уменьшенная программа называется «срезом» и является точным представлением исходной программы в пределах области указанного подмножества поведения. Как правило, поиск среза является неразрешимой проблемой, но, задав подмножество целевого поведения с помощью значений набора переменных, можно получить приблизительные срезы, используя алгоритм потока данных. Эти фрагменты обычно используются разработчиками во время отладки для определения источника ошибок.
Анализ производительности
Наиболее инструменты анализа производительности использовать методы динамического анализа программ.[нужна цитата ]
- Призма из КритическийСиний - это инструмент, который динамически отслеживает программные приложения во время выполнения и собирает данные, которые можно использовать для анализа и выявления причин низкой производительности.
Методы
Большинство методов динамического анализа основаны на каком-то инструментарий кода или трансформация.
- DynInst - это библиотека для исправления кода среды выполнения, которая полезна при разработке зондов динамического анализа программ и их применении к скомпилированным исполняемым файлам. Dyninst не требует исходного кода или перекомпиляции в целом, однако исполняемые файлы без удаления и исполняемые файлы с отладочными символами легче инструментировать.
- Iroh.js - это библиотека анализа кода времени выполнения для JavaScript. Он отслеживает путь выполнения кода, предоставляет слушателей времени выполнения для прослушивания определенных шаблонов исполняемого кода и позволяет перехватывать и управлять поведением выполнения программы.
Смотрите также
- Абстрактная интерпретация
- Дайкон
- Динамическое нагрузочное тестирование
- Профилирование (компьютерное программирование)
- Проверка времени выполнения
- Программный анализ (информатика)
- Статический анализ кода
- Тестирование временных разделов
Рекомендации
- ^ Майерс, Г. Дж. (1979). Искусство тестирования программного обеспечения. Джон Уайли и сыновья.
- ^ Джонс, Джеймс А .; Харролд, Мэри Джин (2005). «Эмпирическая оценка методики автоматической локализации разломов птицеедов». Материалы 20-й международной конференции IEEE / ACM по автоматизированной разработке программного обеспечения - ASE '05. ACM. С. 273–282. Дои:10.1145/1101908.1101949. ISBN 1581139934.
- ^ Сюань, Цзифэн; Монперрус, Мартин (2014). «Очистка тестового примера для улучшения локализации неисправностей». Материалы 22-го Международного симпозиума ACM SIGSOFT по основам программной инженерии - FSE 2014. С. 52–63. CiteSeerX 10.1.1.477.2525. Дои:10.1145/2635868.2635906. ISBN 9781450330565.