Динамічний аналіз коду
Динамічний аналіз коду (англ. Dynamic program analysis) — аналіз програмного забезпечення, що виконується за допомогою виконання програм на реальному або віртуальному процесорі (на відміну від статичного аналізу). Утиліти динамічного аналізу можуть вимагати завантаження спеціальних бібліотек, перекомпіляцію програмного коду. Деякі утиліти можуть інструментувати код, що виконується, у процесі виконання або перед ним. Для більшої ефективності динамічного аналізу вимагається подача досліджуваної програмі достатньої кількості вхідних даних, щоб отримати повніше покриття коду. Також потрібно подбати про мінімізації впливу інструментування на виконання програми, що досліджується (включаючи часові характеристики).
Приклади утиліт
- Valgrind[1], виконує програму на віртуальному процесорі, може виявляти помилки пам'яті (наприклад, пов'язані з неправильним використанням функцій malloc і free), ситуації гонки потоків (race conditions) в багатопоточних програмах.
- Pin[1]
- DynamoRIO[1]
- Dmalloc, бібліотека для перевірки виділення і звільнення пам'яті, а також витоків пам'яті, повторного звільнення тощо. Програму треба перекомпілювати, крім того, у всі файли необхідно підключити заголовковий файл мови Сі dmalloc.h для отримання точніших звітів.
- jTracert[недоступне посилання з квітня 2019], Java агент (що завантажується за допомогою аргументу -javaagent:), який інструментує код існуючих додатків, що працюють у віртуальній машині JVM, і автоматично будує діаграми послідовності (sequence diagrams).
- Daikon — реалізація динамічного детектора інваріантів. Проводиться пошук значень, обчислених програмою і пошук властивостей, які були вірні при запуску, і, найбільш імовірно, будуть вірні при всіх запусках.
- DynInst — бібліотека, що модифікує код під час виконання. Корисна при розробці програм динамічного аналізу, допомагає додавати в ПЗ, що досліджується, налагоджувальні точки (probes). В основному Dyninst, не вимагає перекомпіляції програм, однак, non-stripped executables і файли, що виконуються, з налагоджувальною інформацією простіше піддаються інструментуванню.
- Holodeck від компанії Security innovation це програма, яка симулює помилки для динамічного аналізу і надійності програм для Windows.
- IBM Rational Purify: в основному виявляє помилки при роботі з пам'яттю (вихід за межі масивів, витоки пам'яті).
- BoundsChecker: можливості, схожі з IBM Purify.
- VB Watch додає код динамічного аналізу в програми на мові Visual Basic для моніторингу їх продуктивності, стеку викликів, траси виконання, змінних і покриття коду.
- Insure++ — аналізатор пам'яті і детектор помилок. Компонент Inuse дозволяє побачити графічно історію виділення пам'яті, аналізувати використання купи, шукати витоку пам'яті тощо
- Intel Thread Checker — аналізатор помилок у багатопотокових застосунках. Виявляє помилки конкурентного доступу до даних і ситуації взаємоблокувань. Працює з додатками для Windows і Linux.
- CHESS — інструмент для тестування багатопотокових .Net (керованих) і Win32, 64 програм
Більша частина програм аналізу продуктивності використовує методи динамічного аналізу програм.
Історичні приклади
- IBM OLIVER: інтерактивна система тестування і налагодження CICS, що використовує симулятор набору команд
- SIMON аналізатор пакетних програм, система тестування і налагодження, використовує симулятор
- SIMMON: внутрішній симулятор IBM, що застосовувався при розробці компонент ОС, утиліт і процесорів вводу-виводу
Див. також
- Аналіз продуктивності
- Аналіз програм
- Статичний аналіз коду
Посилання
- The Concept of Dynamic Analysis / Th. Ball, Bell Labs. 1999 (англ.)(англ.)
- Learning from executions: Dynamic analysis for software engineering and program understanding, 2005 (англ.)(англ.)
- Dynamic code analysis / Viva64 (англ.)(англ.)