Основи статичного тестування (версія 3.1)
На відміну від динамічного тестування, яке вимагає виконання програмного забезпечення, що тестується, статичне тестування спирається на перевірку робочих продуктів вручну (тобто перегляди) або керовану інструментами оцінку коду чи інших робочих продуктів (тобто статичний аналіз). Обидва типи статичного тестування оцінюють код або інший робочий продукт, що тестується, без фактичного виконання коду або робочого продукту, що тестується.
Статичний аналіз важливий для сейфті-крітікал (критично важливих безпекових) комп’ютерних систем (наприклад, авіаційного, медичного або ядерного програмного забезпечення), але статичний аналіз також став важливим і поширеним в інших середовищах. Наприклад, статичний аналіз є важливою частиною тестування безпеки. Статичний аналіз також часто включається в автоматизовані інструменти створення та розповсюдження програмного забезпечення, наприклад, у гнучкій розробці, безперервній доставці та безперервному розгортанні.
Основи статичного тестування (версія 4.0)
На відміну від динамічного тестування, у статичному тестуванні програмне забезпечення, що тестується, не потрібно виконувати. Код, специфікація процесу, специфікація архітектури системи або інші робочі продукти оцінюються шляхом перевірки вручну (наприклад, переглядів) або за допомогою інструменту (наприклад, статичного аналізу). Цілі тестування включають покращення якості, виявлення дефектів і оцінку таких характеристик, як читабельність, повнота, правильність, можливість тестування та послідовність. Статичне тестування можна застосовувати як для перевірки, так і для валідації.
Тестувальники, представники бізнесу та розробники працюють разом під час зіставлення прикладів, спільного написання історій користувачів і сеансів уточнення резервів, щоб переконатися, що історії користувачів і пов’язані з ними робочі продукти відповідають визначеним критеріям, наприклад, визначенню Ready. Щоб переконатися, що історії користувачів повні та зрозумілі, а також включають критерії прийнятності, які можна перевірити, можна застосувати методи перевірки. Ставлячи правильні запитання, тестувальники досліджують, оскаржують і допомагають покращити запропоновані історії користувачів.
Статичний аналіз може виявити проблеми до динамічного тестування, хоча часто вимагає менше зусиль, оскільки тестові приклади не потрібні, і зазвичай використовуються інструменти. Статичний аналіз часто включений у фреймворки CI (continuous integration). Хоча в основному використовується для виявлення конкретних дефектів коду, статичний аналіз також використовується для оцінки зручності супроводу та безпеки. Іншими прикладами інструментів статичного аналізу є засоби перевірки орфографії та засоби читабельності.
Робочі продукти, які можуть бути перевірені за допомогою статичного тестування (версія 3.1)
Майже будь-який робочий продукт можна перевірити за допомогою статичного тестування (переглядів та/або статичного аналізу), наприклад:
- Специфікації, включаючи бізнес-вимоги, функціональні вимоги та вимоги безпеки
- Епіки, історії користувачів і критерії прийняття
- Специфікації архітектури та дизайну
- Код
- Програмне забезпечення для тестування, включаючи плани тестування, тестові кейси, процедури тестування та сценарії автоматизованого тестування
- Посібники користувача
- Веб-сторінки
- Контракти, плани проєктів, графіки та бюджетне планування
- Налаштування конфігурації та налаштування інфраструктури
- Моделі, такі як діаграми діяльності, які можна використовувати для тестування на основі моделі
Перегляди можна застосовувати до будь-якого робочого продукту, який учасники можуть читати та розуміти. Статичний аналіз можна ефективно застосовувати до будь-якого робочого продукту з формальною структурою (як правило, кодом або моделями), для якого існує відповідний інструмент статичного аналізу. Статичний аналіз можна навіть застосувати за допомогою інструментів, які оцінюють робочі продукти, написані природною мовою, такі як вимоги (наприклад, перевірка орфографії, граматики та читабельності).
Робочі продукти, які можуть бути перевірені за допомогою статичного тестування (версія 4.0)
Практично будь-який робочий продукт можна перевірити за допомогою статичного тестування. Приклади включають документи специфікації вимог, вихідний код, плани тестування, тестові випадки, елементи невиконаних продуктів, статути тестування, проєктну документацію, контракти та моделі.
Предметом рецензії може бути будь-який продукт роботи, який можна прочитати і зрозуміти. Однак для статичного аналізу робочим продуктам потрібна структура, за якою їх можна перевірити (наприклад, моделі, код або текст із формальним синтаксисом).
Робочі продукти, які не підходять для статичного тестування, включають ті, які важко інтерпретувати людям і які не слід аналізувати інструментами (наприклад, виконуваний код третьої сторони через юридичні причини).
Переваги статичного тестування (версія 3.1)
Методи статичного тестування дають ряд переваг. При застосуванні на ранніх стадіях життєвого циклу розробки програмного забезпечення статичне тестування дозволяє завчасно виявити дефекти до виконання динамічного тестування (наприклад, під час перегляду вимог або специфікацій дизайну, уточнення невиконаних завдань тощо). Дефекти, виявлені на ранній стадії, часто набагато дешевше усунути, ніж дефекти, виявлені пізніше в життєвому циклі, особливо порівняно з дефектами, виявленими після розгортання програмного забезпечення та його активного використання. Використання методів статичного тестування для пошуку дефектів і подальшого негайного усунення цих дефектів майже завжди набагато дешевше для організації, ніж використання динамічного тестування для пошуку дефектів в об’єкті тестування та їх подальшого усунення, особливо якщо враховувати додаткові витрати, пов’язані з оновленням інших робочих продуктів і проведення підтверджувального та регресійного тестування.
Додаткові переваги статичного тестування можуть включати:
- Більш ефективне виявлення та виправлення дефектів до виконання динамічного тесту
- Виявлення дефектів, які нелегко виявити динамічним тестуванням
- Запобігання дефектам у дизайні чи кодуванні шляхом виявлення невідповідностей, двозначностей, протиріч, упущень, неточностей і надмірностей у вимогах
- Підвищення продуктивності розробки (наприклад, за рахунок покращеного дизайну, більш зручного обслуговування коду)
- Зменшення витрат і часу розробки
- Зменшення вартості та часу тестування
- Зменшення загальної вартості якості протягом усього терміну служби програмного забезпечення завдяки меншій кількості збоїв у подальшому життєвому циклі або після введення в експлуатацію
- Покращення комунікації між членами команди під час участі в переглядах
Цінність статичного тестування (версія 4.0)
Статичне тестування може виявити дефекти на самих ранніх фазах SDLC, дотримуючись принципу раннього тестування. Воно також може ідентифікувати дефекти, які неможливо виявити за допомогою динамічного тестування (наприклад, недоступний код, шаблони проєктування, які не реалізовані належним чином, дефекти в невиконуваних робочих продуктах).
Статичне тестування дає можливість оцінити якість робочих продуктів і створити довіру до них. Перевіряючи задокументовані вимоги, зацікавлені сторони також можуть переконатися, що ці вимоги описують їхні фактичні потреби. Оскільки статичне тестування можна виконати на ранній стадії SDLC, можна досягти спільного розуміння між залученими зацікавленими сторонами. Також буде покращено спілкування між залученими зацікавленими сторонами. З цієї причини рекомендується залучати до статичного тестування широкий спектр зацікавлених сторін.
Незважаючи на те, що впровадження перевірки може бути дорогим, загальні витрати на проєкт зазвичай набагато нижчі, ніж у випадку, коли перевірки не виконуються, оскільки потрібно витрачати менше часу та зусиль на виправлення дефектів у подальшому проєкті.
Відмінності між статичним і динамічним тестуванням (версія 3.1)
Статичне тестування та динамічне тестування можуть мати однакові цілі, наприклад, забезпечити оцінку якості робочих продуктів і виявити дефекти якомога раніше. Статичні та динамічні тести доповнюють одне одного, виявляючи різні типи дефектів.
Однією з головних відмінностей є те, що статичне тестування виявляє дефекти в робочих продуктах безпосередньо, а не визначає збої, викликані дефектами під час запуску програмного забезпечення. Дефект може існувати в робочому продукті протягом дуже тривалого часу, не викликаючи збою. Шлях, де знаходиться дефект, може рідко проходити або бути важкодоступним, тому буде непросто побудувати та виконати динамічний тест, який його виявить. Статичне тестування може виявити дефект із набагато меншими зусиллями.
Інша відмінність полягає в тому, що статичне тестування можна використовувати для покращення узгодженості та внутрішньої якості робочих продуктів, тоді як динамічне тестування зазвичай зосереджується на зовнішніх видимих поведінках.
У порівнянні з динамічним тестуванням типові дефекти, які легше та дешевше знайти та виправити за допомогою статичного тестування, включають:
- Дефекти вимог (наприклад, невідповідності, двозначності, протиріччя, упущення, неточності та надмірності)
- Дефекти дизайну (наприклад, неефективні алгоритми або структури бази даних)
- Дефекти кодування (наприклад, змінні з невизначеними значеннями, змінні, які оголошені, але ніколи не використовуються, недоступний код, повторюваний код)
- Відхилення від стандартів (наприклад, недотримання стандартів кодування)
- Неправильні специфікації інтерфейсу (наприклад, інші одиниці вимірювання, що використовуються системою, що викликає, та системою, що викликається)
- Вразливості системи безпеки (наприклад, сприйнятливість до переповнення буфера)
- Прогалини або неточності в простежуваності бази тестів або охопленні (наприклад, відсутність тестів для критерію прийнятності)
Крім того, більшість типів ремонтопридатних дефектів можна виявити лише за допомогою статичного тестування (наприклад, неправильна модульність, погана можливість повторного використання компонентів, код, який важко аналізувати та змінювати без введення нових дефектів).
Відмінності між статичним і динамічним тестуванням (версія 4.0)
Практики статичного та динамічного тестування доповнюють одна одну. Вони мають схожі цілі, як-от підтримка виявлення дефектів у робочих продуктах, але є й деякі відмінності, як-от:
- Як статичне, так і динамічне тестування (з аналізом несправностей) можуть призвести до виявлення дефектів, однак є деякі типи дефектів, які можна знайти лише за допомогою статичного чи динамічного тестування.
- Статичне тестування виявляє дефекти безпосередньо, тоді як динамічне тестування викликає збої, з яких пов’язані дефекти визначаються шляхом подальшого аналізу
- Статичне тестування може легше виявляти дефекти, які лежать на шляху через код, який рідко виконується або важкодоступний за допомогою динамічного тестування
- Статичне тестування можна застосовувати до невиконуваних робочих продуктів, тоді як динамічне тестування можна застосовувати лише до виконуваних робочих продуктів
- Статичне тестування можна використовувати для вимірювання характеристик якості, які не залежать від коду, що виконується (наприклад, зручність супроводу), тоді як динамічне тестування можна використовувати для вимірювання характеристик якості, які залежать від коду, що виконується (наприклад, ефективність продуктивності)
Типові дефекти, які легше або дешевше знайти за допомогою статичного тестування, включають:
- Дефекти вимог (наприклад, невідповідності, двозначності, протиріччя, упущення, неточності, дублювання)
- Дефекти дизайну (наприклад, неефективна структура бази даних, погана модульність)
- Певні типи дефектів кодування (наприклад, змінні з невизначеними значеннями, неоголошені змінні, недоступний або дубльований код, надмірна складність коду)
- Відхилення від стандартів (наприклад, недотримання правил іменування в стандартах кодування)
- Неправильні характеристики інтерфейсу (наприклад, невідповідність кількості, типу або порядку параметрів)
- Конкретні типи вразливостей безпеки (наприклад, переповнення буфера)
- Прогалини або неточності в охопленні тестової бази (наприклад, відсутність тестів для критерію прийнятності)
В цьому відео починаємо працювати з секцією 3.1.
00:00:30 Основи статичного тестування
00:11:30 Робочі продукти, які можуть бути перевірені за допомогою статичного тестування
00:22:07 Переваги статичного тестування
00:31:56 Різниця між статичним та динамічним тестуванням