Для перевірки якості програмного забезпечення доводиться застосовувати багато різних інструментів. Зокрема, до них належать інструменти статичного та динамічного аналізу. У цій статті ми спробуємо розібратися, чому однієї методології, чи то статичний, чи то динамічний аналіз, може виявитися недостатньо для проведення комплексного аналізу програм і чому краще спільно використовувати ці два підходи. Статичний аналіз коду – це процес виявлення помилок і недоліків у вихідному коді програм. Для його виконання не потрібно запускати програму, весь аналіз буде виконано на наявній кодовій базі. Найближча аналогія, яку можна провести зі статичним аналізом коду, це так званий процес code review, тільки автоматизований (який виконує програма-робот). Зазначимо, що використання статичного аналізу коду не обмежується лише виявленням помилок у програмі. Деякі статичні аналізатори дають змогу перевіряти, чи відповідає вихідний код прийнятому в компанії стандарту оформлення коду.
Динамічний аналіз коду – це спосіб аналізу програми безпосередньо під час її виконання. Аналіз виконується за допомогою набору даних, які подаються на вхід досліджуваній програмі. Тому ефективність аналізу безпосередньо залежить від якості та кількості вхідних даних для тестування. Саме від них залежить повнота покриття коду, яка буде отримана за результатами тестування. Динамічне тестування найбільш важливе в тих галузях, де головним критерієм є надійність програми, час відгуку або споживані ресурси. Це може бути, наприклад, система реального часу, що керує відповідальною ділянкою виробництва, або сервер бази даних. У таких областях будь-яка допущена помилка може виявитися критичною.
Перевіряє вихідний код на наявність проблем з безпекою шляхом сканування Go AST.
Статичний сканер коду безпеки (SAST) для програм Node.js на основі libsast і semgrep.
Bandit – це інструмент який призначений для швидкого пошуку поширених проблем безпеки в Python-коді.
Інструмент на мові Golang, який виконує статичний аналіз, модульне тестування, перегляд коду та генерує звіт про якість коду.
codemillx – це помічник CodeQL, який витягує коментарі з коду і може генерувати модулі бібліотеки codeql qll.
Статичний аналіз веб-додатків Python на основі теоретичних основ (графі потоку керування, фіксована точка, аналіз потоку даних)
GoKart – це інструмент статичного аналізу для Go, який знаходить уразливості, використовуючи SSA форму вихідного коду Go.
Cobra – це інструмент аудиту безпеки вихідного коду, який підтримує виявлення проблем безпеки у вихідному коді широкого спектру мов розробки.