Статичний аналіз - це процес аналізу програмного забезпечення без його виконання. Це дуже добре і рекомендується, але ви повинні це пам’ятати
- різні інструменти статичного аналізу по-різному розуміють код, який вони вивчають, отже, вони можуть сигналізувати (або не сигналізувати) про різні проблеми. Один інструмент може дати чистий звіт, а другий може скаржитися на мільйон речей.
- динамічний інструмент (щоб назвати приклад, подумайте про valgrind) може знайти багато інших питань за ціною серйозного навантаження на споживання ресурсів (часу, використання пам'яті). Це так, тому що ви зазвичай використовуєте інструментальну версію програмного забезпечення. Зауважте, що, будучи інструментом якимось чином (замініть свій malloc на mallock-налагоджувальний пристрій), він не точно ідентичний вашому програмному забезпеченню (як видно з часу виконання)
Обидва ці підходи страждають від відсутності контексту: вони не знають, чого слід досягти.
Перегляд коду робиться іншим кодером, який нібито це знає і може перевірити
- якщо код правильний
- якщо програмне забезпечення семантично правильне.
Це набагато дорожче і має різну ступінь повторюваності, але є чудовою допомогою.
Як завжди, немає жодної срібної кулі, яка виправить усі помилки та уникне всіх проблем. Застосування - рекомендується якомога більше, враховуючи місце, код, час, три форми перевірки (статична, динамічна, більше очей (і мізків), які насправді дивляться на код).
ps: Я мушу зазначити, що зазвичай набагато краще застосовувати інструменти з нуля. Перетворення застарілої системи є набагато менш приємним досвідом, зумовленим помилковими позитивами. Якщо ви починаєте з нуля і завжди прагнете підтримувати інструмент аналізу чистим, ви, ймовірно, уникнете безлічі проблем.
pps: що стосується інструментів, це залежить від мови. У світі C та C ++ ви можете почати, переглянувши саму Visual Studio, яка містить вбудований інструмент статичного аналізу. Порівняно повний список можна знайти у Вікіпедії.
ppps: Статичний аналіз більше підходить для статичних мов, таких як C або C ++. Для Python важко сказати, якщо ім'я, яке посилається на список у певній точці, буде посилатися на список для решти програми, завдяки її динамічним властивостям. Це не означає, що нічого не можна зробити, як показує зусилля JIT, як PyPy .