Техніки тест-дизайну: EP, BVA, Pairwise, State Transition
Навіщо потрібні техніки тест-дизайну
Неможливо протестувати все. Техніки тест-дизайну допомагають вибрати мінімальний набір тест-кейсів з максимальним покриттям — без дублювання і пропусків.
1. Equivalence Partitioning (EP) — Розбиття на класи еквівалентності
Ідея
Якщо система однаково обробляє всі значення з певного діапазону — тестуємо один представник від кожного класу.
Алгоритм
- Визначити вхідні дані
- Розбити на класи: валідні та невалідні
- Вибрати по одному значенню з кожного класу
Приклад — поле «Вік» (допустимо 18–65)
| Клас | Діапазон | Тест-значення | Очікуваний результат |
|---|---|---|---|
| EP1 — невалідний (нижче) | < 18 | 10 | Помилка |
| EP2 — валідний | 18–65 | 30 | Успіх |
| EP3 — невалідний (вище) | > 65 | 80 | Помилка |
Результат: 3 тест-кейси замість 48 (тестувати кожне число від 0 до 100).
Застосовується для
- Числових полів з діапазоном
- Рядкових полів (довжина, формат)
- Списків вибору (dropdown)
- Дат
2. Boundary Value Analysis (BVA) — Аналіз граничних значень
Ідея
Більшість помилок ховається на межах діапазонів (off-by-one помилки). BVA доповнює EP — замість одного представника класу беремо 3 точки навколо кожної межі.
Формула для кожної межі
межа - 1 → межа → межа + 1
Приклад — поле «Вік» (18–65)
| Точка | Значення | Очікуваний результат | Чому важлива |
|---|---|---|---|
| Нижня - 1 | 17 | Помилка | Розробник міг написати > замість >= |
| Нижня межа | 18 | Успіх | Найкритичніша точка |
| Нижня + 1 | 19 | Успіх | Підтверджує діапазон |
| Верхня - 1 | 64 | Успіх | Підтверджує діапазон |
| Верхня межа | 65 | Успіх | Розробник міг написати < замість <= |
| Верхня + 1 | 66 | Помилка | Перевірка верхньої межі |
Результат: 6 тест-кейсів покривають обидві межі.
EP + BVA разом
EP та BVA завжди використовуються в парі:
- EP дає класи
- BVA уточнює значення на межах класів
3. Pairwise Testing — Попарне тестування
Ідея
При кількох параметрах з кількома значеннями — комбінаторний вибух. Pairwise каже: більшість багів виникають через взаємодію двох параметрів. Достатньо покрити всі можливі пари.
Приклад — веб-додаток (3×3×2×2 = 36 комбінацій)
| Параметр | Значення |
|---|---|
| ОС | Windows, macOS, Linux |
| Браузер | Chrome, Firefox, Safari |
| Мова | Ukrainian, English |
| Підписка | Free, Pro |
Повне тестування: 36 комбінацій
Pairwise: 9 тест-кейсів
| # | ОС | Браузер | Мова | Підписка |
|---|---|---|---|---|
| 1 | Windows | Chrome | UK | Free |
| 2 | Windows | Firefox | EN | Pro |
| 3 | Windows | Safari | UK | Pro |
| 4 | macOS | Chrome | EN | Pro |
| 5 | macOS | Firefox | UK | Free |
| 6 | macOS | Safari | EN | Free |
| 7 | Linux | Chrome | UK | Pro |
| 8 | Linux | Firefox | EN | Free |
| 9 | Linux | Safari | UK | Free |
Кожна пара (наприклад Windows+Chrome, Windows+Firefox, macOS+Safari...) зустрічається хоча б раз.
Інструменти для генерації
- PICT (Microsoft) — безкоштовний CLI
- AllPairs — онлайн генератор
- Combinatorial плагін для тест-менеджерів
Застосовується для
- Форми з кількома незалежними параметрами
- Конфігураційне тестування (ОС × браузер × версія)
- Тестування фільтрів і пошуку
4. State Transition Testing — Тестування переходів станів
Ідея
Для систем, які мають стани і переходи між ними. Тестуємо:
- ✅ Всі валідні переходи (дійсні дії)
- ❌ Всі невалідні переходи (заборонені дії)
Приклад — система замовлень
[Draft] → (підтвердити) → [Pending] → (відправити) → [Shipping] → (доставити) → [Delivered]
Додатково, скасувати замовлення можна з двох станів:
[Draft]→ (скасувати) →[Cancelled][Pending]→ (скасувати) →[Cancelled]
Таблиця переходів (тест-кейси)
| # | З стану | Дія | В стан | Результат |
|---|---|---|---|---|
| TC-01 | Draft | Підтвердити | Pending | ✅ Успіх |
| TC-02 | Draft | Скасувати | Cancelled | ✅ Успіх |
| TC-03 | Pending | Відправити | Shipping | ✅ Успіх |
| TC-04 | Pending | Скасувати | Cancelled | ✅ Успіх |
| TC-05 | Shipping | Доставити | Delivered | ✅ Успіх |
| TC-06 | Shipping | Скасувати | — | ❌ Помилка |
| TC-07 | Delivered | Скасувати | — | ❌ Помилка |
| TC-08 | Cancelled | Підтвердити | — | ❌ Помилка |
Правило: (кількість валідних переходів) + (кількість невалідних) = мінімальний набір тест-кейсів.
Де застосовується
- Статуси замовлень, задач, тікетів
- Стани облікового запису (active → suspended → deleted)
- Сесії авторизації
- Банкомати, торгові автомати
- Workflow системи
Коли яку техніку застосовувати
| Техніка | Де застосовувати | К-ть тест-кейсів |
|---|---|---|
| EP | Числові поля, рядки, списки з чіткими категоріями | ~кількість класів |
| BVA | Будь-де, де є числові межі або ліміти | 6 на пару меж |
| Pairwise | Форми з кількома незалежними параметрами | ~N·log(N) |
| State Transition | Статуси, сесії, workflow, FSM-системи | (переходів) × 2 |
Інші техніки тест-дизайну (для розширення знань)
Decision Table (Таблиця рішень)
Для бізнес-правил з кількома умовами одночасно.
| Варіант 1 | Варіант 2 | Варіант 3 | Варіант 4 | |
|---|---|---|---|---|
| Умова 1: є знижка? | Так | Так | Ні | Ні |
| Умова 2: є купон? | Так | Ні | Так | Ні |
| Дія: знижка 20% | ✅ | |||
| Дія: знижка 10% | ✅ | ✅ | ||
| Дія: без знижки | ✅ |
Error Guessing (Вгадування помилок)
Досвідчений тестувальник вгадує де можуть бути помилки на основі інтуїції:
- Пусті поля
- Дуже довгі рядки
- Спеціальні символи (
<script>,'; DROP TABLE) - Від'ємні числа там де очікуються позитивні
- Нульові значення
Питання на співбесіді
«Назвіть техніки тест-дизайну»
EP, BVA, Pairwise, State Transition, Decision Table, Error Guessing, Use Case Testing.
«Чим EP відрізняється від BVA?»
EP ділить вхідні дані на класи і тестує по одному представнику з кожного. BVA уточнює EP — тестує значення прямо на межах класів (межа-1, межа, межа+1), бо саме там найчастіше ховаються off-by-one помилки.
«Коли використовувати Pairwise?»
Коли є кілька незалежних параметрів і повне комбінаторне тестування нереальне. Pairwise скорочує кількість тест-кейсів з N^k до N·log(N), покриваючи всі пари взаємодій.
«Що таке невалідний перехід у State Transition?»
Спроба виконати дію, яка заборонена в поточному стані. Наприклад, скасувати вже доставлене замовлення. Система повинна відхилити таку дію з відповідним повідомленням про помилку.