Статичне тестування є методикою тестування програмного забезпечення, при якій ПЗ тестується без запуску коду. Воно являє собою процес або техніку, які виконуються для пошуку потенційних дефектів в програмному забезпеченні. Це також процес виявлення і усунення помилок і дефектів в різних супровідних документах, таких як специфікації вимог до програмного забезпечення і т. ін.

Можна поділити статичне тестування на 2 типи:

  1. Рев’ю (Review);
  2. Статичний аналіз (Static Analysis).

Рев'ю (Review) – перевірка зазвичай використовується для виявлення і усунення несправностей або неясностей в документах. Це можуть бути вимоги, дизайн, тестові випадки і так далі.

У свою чергу рев’ю діляться на:

  • Неформальні. При неофіційному розгляді творець документів показує вміст документів аудиторії. Кожен присутній висловлює свою думку, що дозволяє виявити недоліки на ранній стадії.
  • Наскрізні перегляди (Walkthroughs). Виконуються досвідченою людиною або експертом для перевірки відсутності дефектів, з метою попередження виникнення проблем на етапі розробки або тестування. 
  • Експертна оцінка. Означає перевірку документів для виявлення і виправлення дефектів. В основному це виконується у команді.
  • Інспектування ПЗ. Це, в більшості випадків, перевірка документу вищим органом, наприклад, перевірка вимог до програмного забезпечення.

Статичний аналіз (Static Analysis) – код, написаний розробниками, аналізується на наявність структурних дефектів,які можуть призвести до помилок.

Статичний аналіз включає в себе оцінку якості коду, написаного розробниками. Для аналізу коду і порівняння його зі стандартом використовуються різні інструменти. Статичний аналіз добре допомагає знайти такі помилки, як:

  • змінні,які не використовуються;
  • мертвий код;
  • нескінченні цикли;
  • змінні з невизначеними значеннями;
  • неправильний синтаксис.

Статичний аналіз складається з 3-ох частин:

  1. Потік даних (потік даних пов'язаний з обробкою потоку);
  2. Контроль потоку (як виконуються оператори або інструкції);
  3. Цикломатична складність (вимір складності програми, яке в основному пов'язано з кількістю незалежних шляхів в графі потоків управління програми).

Аналіз може проводитися як вручну, так і за допомогою спеціальних інструментів.

Метою аналізу є найбільш раннє виявлення помилок і потенційних проблем в програмному продукті. Як правило, код рев'ю виконується самим розробником.

Переваги статичного тестування

  • Знижує вартість фіксу знайдених багів, оскільки виявляє баги на ранніх етапах циклу розробки програмного забезпечення.
  • Відгуки, отримані в ході цього тестування, допомагають покращити функціонування процесу, що також допомагає команді уникнути подібних дефектів і багів.
  • Підвищує інформованість про різні проблеми якості програмного забезпечення.
  • Покращує обмін критичної і важливої інформації між членами команди.
  • Істотно скорочуються зусилля по виправленню помилок, що ще більше сприяє продуктивності розробки.

Недоліки статичного тестування

  • Процес статичного тестування може займати багато часу, так як в основному він виконується вручну.
  • Перешкоджає виявленню вразливостей, представлених в середовищі виконання.

Метод динамічного тестування тип тестування, який перевіряє функціональність програми, коли код виконується. Простіше кажучи, динамічне тестування виконується шляхом фактичного використання програми і визначення того, чи працює функціональність так, як очікується.

Динамічне тестування включає в себе тестування ПЗ в режимі реального часу шляхом надання вхідних даних і вивчення результату поведінки програми.

Можна навести такий простий приклад – функціонал для входу в систему. При створенні облікового запису і пароля до неї будуть присутні певні правила для створення надійного паролю. Наприклад, пароль повинен бути не менше 6 символів, мати велику літеру і хоча б один спеціальний символ.Це не що інше, як різні умови та параметри, і якщо користувач вводить будь-яке значення, яке відрізняється від цих умов, додаток повинен його відхилити. При тестуванні даної функціональності потрібно ввести всі необхідні умови, а потім перевірити результат.

Якщо розглянути функції, пропоновані динамічним тестуванням, можна легко зрозуміти причини його виконання протягом життєвого циклу тестування програмного забезпечення. За допомогою цього тестування команда може перевірити різні критичні аспекти програмного забезпечення. Якщо залишити їх без будь-якої оцінки, вони можуть вплинути на продуктивність, функціональність, а також надійність програмного продукту.

Переваги динамічного тестування

  • Це ретельне дослідження, яке розглядає всю функціональність програми, тому якість відповідає найвищим стандартам.
  • Процес динамічного тестування добре налагоджений, додаток тестується з точки зору користувача, що підвищує якість ПЗ.
  • Виявлення складних помилок, які могли вислизнути на етапі код рев'ю.
  • Динамічне тестування може бути автоматизовано за допомогою спеціальних інструментів.

 Недоліки динамічного тестування 

  • Оскільки динамічне тестування являє собою складний процес, воно займає багато часу.
  • Висока вартість проведення тестування.
  • Динамічне тестування зазвичай виконується після завершення кодування, і знайдені баги виявляються пізніше в життєвому циклі розробки.

Таблиця порівняння динамічного та статичного тестування 

Динамічне тестування Статичне тестування
Етап валідації ПЗ Етап верифікації ПЗ
Включає в себе виконання програмного коду Не потребує виконання програмного коду
Забезпечує функціональність продукту Орієнтоване на запобігання дефектів
Виконується на більш пізніх етапах розробки програмного забезпечення Виконується на ранніх етапах розробки програмного забезпечення 
Велика вартість виправлення багів Менша вартість виправлення багів
Покриває обмежену область коду, потребує меншого охоплення Забезпечує більш ширше охоплення,аніж динамічне, за коротший проміжок часу.
Включає в себе як функціональне так і нефункціональне тестування Включає в себе різні методи оцінки, наскрізний перегляд, рев’ю і багато іншого.
Мета – пошук і усунення багів Мета – запобігання дефектів програмного забезпечення
Виявляється менше дефектів,аніж при статичному тестуванні  Комплексне тестування коду, яке допомагає знайти більше дефектів у системі. 

Виконується після деплоя коду
Виконується перед деплоєм коду

Виходячи з вищесказаного, можна легко зробити висновок – незважаючи на те, що статичне тестування вимагає багато часу на бурхливі дискусії та зустрічі, все ж варто витратити час на запобігання появи дефектів на останніх етапах розробки продукту. Тому статичне тестування по праву вважається важливим кроком на шляху до розробки ПЗ без помилок. Але важливість динамічного тестування також величезна. Завдяки безпосередньому виконанню тестів програмного забезпечення (перевірки функціональної поведінки, продуктивності, надійності та інших важливих аспектів) команда може перевірити і підтвердити якість і ефективність ПЗ.