Тема. Техніки
тестування
План
1. Техніки,
що базуються на досвіді й інтуїції.
2. Техніки, що базуються на специфікації.
3. Техніки,
орієнтовані на код. Техніки,
що базуються на природі застосування.
4.
Комбінації технік.
1.
Техніки,
що базуються на досвіді й інтуїції
Спеціалізоване тестування (Ad hoc testing).
Можливо, найбільш широко
практикується техніка. Тести грунтуються на досвіді, інтуїції і знаннях
інженера, який розглядає проблему з точки зору тих, що були раніше аналогій.
Даний вид тестування може бути корисний для ідентифікації тих тестів, які не
охоплюються розглянутими вище
більш формалізованими техніками.
Дослідне
тестування (Exploratory testing)
Таке тестування визначається
як одночасне навчання, проектування тесту і його виконання. Даний вид тестування
заздалегідь не визначається в плані тестування і такі тести створюються,
виконуються і модифікуються динамічно, в міру необхідності. Ефективність
дослідницьких тестів безпосередньо залежить від знань інженера, що формуються
на основі поведінки тестування продукту в процесі проведення тестування,
ступеня знайомства з додатком, платформою, типами можливих збоїв і дефектів,
ризиками, асоційованими з конкретним продуктом і т.п.
2. Техніки,
що базуються на специфікації
Еквівалентне розділення (Equivalence partitioning).
Розглянута
область програми поділяється на колекцію наборів або еквівалентних класів, які
вважаються еквівалентними з точки зору розглянутих зв’язків та характеристик
специфікації. Репрезентативний набір тестів (іноді — тільки один тест) формується
з тестів еквівалентних класів (або наборів класів).
Аналіз граничних значень (Boundary-value analysis).
Тести будуються з орієнтацією
на використання тих величин, які визначають граничні характеристики тестованої
системи. Розширення цієї техніки є тести оцінки живучості (robustness
testing) системи, що проводяться з величинами, які виходять за рамки специфікованих меж значень.
Таблиці прийняття рішень (Decision table)
Такі
таблиці представляють логічні зв’язки між умовами (можуть розглядатися в якості
«входів») і діями (можуть розглядатися як «виходи»). Набір
тестів будується послідовним розглядом всіх можливих зв’язків в такій таблиці.
Тести
на основі скінченого автомату (Finite-state machine-based)
Будуються як комбінація тестів
для всіх станів і переходів між станами, представлених у відповідній моделі
(переходів і станів програми).
Тестування на основі формальної специфікації (Testing from formal specification)
Для специфікації, визначених з
використанням формальної мови, можливо автоматично створювати і тести для
функціональних вимог. У ряді випадків можуть будуватися на основі моделі, що є частиною
специфікації, яка не
використовує формальної мови опису.
Випадкове
тестування (Random testing)
На відміну від статистичного
тестування, самі тести генеруються випадковим чином за списком заданого набору
специфіковані характеристик.
3. Техніки, орієнтовані на код
Тести,
що базуються на блок-схемі (Control-flow-based criteria).
Набір
тестів будується виходячи з покриття всіх умов і рішень блок—схеми. В
якійсь мірі нагадує тести на основі кінцевого автомата. Відмінність — у джерелі
набору тестів. Максимальна віддача від тестів на основі блок—схеми виходить
коли тести покривають різні шляхи блок-схеми — по-суті, сценарії потоків робіт (поведінки)
тестованої системи. Адекватність таких тестів оцінюється як відсоток покриття
всіх можливих шляхів блок-схеми.
Тести
на основі потоків даних (Data-flow-based criteria)
У даних тестах відстежується
повний життєвий цикл величин (змінних) — з моменту народження (визначення), протягом усього використання, аж до знищення
(невизначеності). У реальній практиці використовуються нестроге тестування
такого виду, орієнтоване, наприклад, тільки на перевірку завдання початкових
значень всіх змінних або всіх входжень змінних в код, з точки зору їх
використання.
Нормативні моделі для тестування, орієнтованого на код (Reference
models for codebased testing -flowgraph, call graph) є не стільки технікою тестування, скільки
контролем структури програми, представленої у вигляді дерева викликів
(наприклад, sequence-діаграми, визначеної в нотації UML і побудованої на основі аналізу коду).
Тестування,
орієнтоване на дефекти (Fault-based techniques)
Як це не дивно звучить на
рівні назви таких технік тестування, вони, дійсно, орієнтовані на помилки.
Точніше — на специфічні категорії помилок.
Передбачення
помилок (Error guessing)
Спрямовані на виявлення
найбільш імовірних помилок, передбачається, наприклад, в результаті аналізу
ризиків.
Тестування мутацій (Mutation testing).
Мутація —
невелика зміна програми, що тестується, що відбулося за рахунок приватних
синтаксичних змін коду (зокрема, рефакторинга). Відповідні тести
запускаються для оригінального і всіх «мутованих» варіантів програми, що
тестується. Одержуване в процесі тестування мутацій відношення « убитих» до
загального числа згенерованих мутантів допомагає виміряти ефективність
виконуваних тестів. У силу специфіки такої техніки тестування, кількісні оцінки
мутацій мають практичне значення тільки для певних типів систем.
Техніки,
що базуються на аналізі подальшого використання
Операційний профіль (Operational profile)
Базується на умовах
використання системи. Тестування для оцінки надійності системи має проводитися
в такому тестовому оточенні, яке максимально наближене до реальних умов роботи
системи. Результати таких тестів дозволяють оцінити поведінку системи в
реальних умовах. Вхідні параметри тестів задаються на основі ймовірнісного
розподілу відповідних параметрів або їх наборів при експлуатації (вхідні дані
можуть прогнозувати виходячи з частоти можливих сценаріїв роботи користувачів).
Тестування
на основі надійності інженерного процессу (Software Reliability Engineered Testing)
Базується на умовах розробки
системи. Відповідні тести (що позначаються також абревіатурою SRET) проектуються в контексті використовуваного
процесу розробки і методик тестування.
Техніки, що базуються на природі застосування (Techniques based on the
nature of the application)
Описані вище техніки можуть
застосовуватися до будь-яких
типів програмних систем. У той же час, в залежно від технологічної чи
архітектурної природи додатків, можуть також застосовувати специфічні техніки,
важливі саме для заданого типу програми.
Серед таких технік:
v
Об’єктно-орієнтоване тестування.
v
Компонентно-орієнтоване тестування.
v
Web-орієнтоване тестування.
v
Тестування на відповідність протоколів.
v
Тестування систем реального часу.
4.
Комбінації
технік
Функціональне тестування та
структурне тестування (Functional and structural)
Техніки тестування, що
будуються на основі специфікацій або коду часто називають функціональними або
структурними, відповідно. Обидва підходи не повинні протиставлятися, але
доповнювати один одного.
Питання для самоконтролю:
1.
Навести класифікацію технік тестування.
2.
Обґрунтувати вибір різних технік
тестування і їх комбінацій, порівняння ефективності різних технік тестування.
3.
Навести техніки, що базуються на досвіді й
інтуїції, обґрунтувати доцільність їх використання.
4.
Пояснити, навіщо проводять спеціалізоване
тестування (Ad hoc testing) програмних продуктів.
5.
Пояснити, навіщо проводять дослідне
тестування програмних продуктів (Exploratory testing), навести
приклади.
6.
Описати техніки тестування, що базуються
на специфікації, обґрунтувати доцільність їх використання.
7.
Пояснити, навіщо проводять аналіз
граничних значень, використовують таблиці прийняття рішень, навести приклади їх
використання.
8.
Описати техніки тестування, орієнтовані на
код, обґрунтувати доцільність їх використання.
9.
Пояснити, навіщо проводять випадкове
тестування, надати визначення операційному профілю, навести приклади їх
використання.
10.
Описати техніки тестування на основі
потоків даних, обґрунтувати доцільність їх використання.
11.
Описати техніки тестування, що базуються
на аналізі подальшого використання,
обґрунтувати доцільність їх використання.