White Box Test Techniques

White Box Test Techniques (техніки тестування білої скриньки) — це підхід до тестування програмного забезпечення, при якому тестувальник має доступ до внутрішньої структури коду (наприклад, логіки, умов, циклів, змінних тощо) і використовує цю інформацію для розробки тестів.

Основна ідея:

Тестування здійснюється на основі знання коду — аналізуються всі гілки, логіка, шляхи виконання, що дозволяє виявити логічні помилки, прогалини в покритті або «мертвий код».

Основні техніки White Box Testing:

  1. Coverage-based Testing (тестування на покриття):
    • Statement Coverage (покриття операторів) — перевіряє, що кожен оператор (рядок коду) виконується хоча б один раз.
    • Branch Coverage (покриття гілок) — перевіряє, що всі можливі гілки умов (if/else) були пройдені.
    • Condition Coverage — перевіряє, що кожна умова в логічному виразі приймала і true, і false.
  2. Path Coverage (покриття шляхів) — перевіряє всі можливі шляхи виконання через програму.
  3. Loop Testing — тестування циклів (наприклад, перевірити цикл при 0, 1 та багатьох ітераціях).
  4. Control Flow Testing — аналіз керуючого потоку програми: як виконання переходить від одного блоку до іншого.
  5. Data Flow Testing — аналіз, як дані передаються і змінюються в програмі (від моменту ініціалізації до використання).

Переваги:

  • Високий рівень покриття коду.
  • Виявлення «мертвого» або невикористаного коду.
  • Допомагає знайти логічні помилки.

Недоліки:

  • Не підходить для тестування без доступу до коду (наприклад, сторонніх сервісів).
  • Вимагає знань програмування.
  • Не покриває питання зручності інтерфейсу чи бізнес-логіки — тільки реалізацію.

Use Case Testing

Use Case Testing (Тестування на основі сценаріїв використання) — це метод тестування програмного забезпечення, при якому тестові сценарії створюються на основі use cases — описів того, як користувачі взаємодіють із системою для досягнення певної цілі.

Іншими словами, ми перевіряємо, чи працює система так, як її очікує бачити користувач у реальному житті.

Основи Use Case (варіанту використання)

Use Case — це сценарій взаємодії користувача з системою. Він включає актора, мету, передумови, основний потік, альтернативи, виключення.

КомпонентОпис
АкторХто використовує систему (користувач, адміністратор, інша система)
Мета (ціль)Що актор хоче зробити
ПередумовиЩо має бути виконано до початку
Основний потікКроки, які ведуть до успішного завершення
АльтернативиІнші варіанти виконання
ВиключенняЩо відбувається при помилці

Як проводиться Use Case Testing?

Крок 1: Збір use cases

Це може бути:

  • UML діаграми
  • Опис у вигляді тексту
  • Специфікація вимог

Наприклад, бізнес-аналітик створює документ із сценаріями, які повинен підтримувати продукт.

Крок 2: Аналіз варіантів використання

Визначаємо:

  • основні сценарії (успішне завершення)
  • альтернативні шляхи
  • виняткові ситуації (некоректні дії користувача, помилки системи)

Крок 3: Створення тест-кейсів

Для кожного сценарію створюються тест-кейси, які перевіряють:

  • правильність логіки
  • реакцію системи на помилки
  • обробку неочікуваних даних
  • взаємодію між різними компонентами

Приклад

Use Case: Авторизація користувача

КомпонентДеталі
АкторКористувач
МетаУвійти в систему
ПередумоваКористувач має обліковий запис
Основний потік1. Користувач вводить логін і пароль
2. Натискає “Увійти”
3. Система перевіряє дані
4. Система впускає користувача
Альтернативний потікПароль неправильний — показати помилку
ВиключенняСервер не доступний — повідомлення про помилку з’єднання

Приклади тест-кейсів:

Test Case IDНазваКрокиОчікуваний результат
TC001Успішна авторизаціяВвести правильний логін/пароль, натиснути “Увійти”Вхід у систему
TC002Неправильний парольВвести логін + неправильний парольПовідомлення: “Невірний пароль”
TC003Порожнє поле логінаЗалишити поле логіна пустимПовідомлення: “Заповніть логін”
TC004Сервер недоступнийВвести дані, але сервер не відповідаєПовідомлення: “Сервер тимчасово недоступний”

Де це застосовується?

Use Case Testing застосовується при:

  • Функціональному тестуванні
  • Інтеграційному тестуванні
  • Системному тестуванні
  • User Acceptance Testing (UAT)

Чому це важливо?

ПеревагаПояснення
Орієнтація на користувачаТестування реальних сценаріїв використання
Покриття бізнес-логікиНе лише технічні аспекти, а саме бізнес-мета
Краще розуміння між командоюОдні й ті ж use cases використовуються BA, QA, Dev
Легше виявити інтеграційні помилкиUse cases часто охоплюють кілька модулів одночасно

Use Case Testing vs Інші типи тестування

Тип тестуванняОрієнтаціяПриклад
Use Case TestingБізнес-сценаріїВхід користувача, замовлення товару
Unit TestingОкрема функціяПеревірка функції login()
Functional TestingОкрема функція/екранПеревірка роботи форми логіну
Integration TestingЗв’язки між модулямиЛогін + перевірка прав доступу

Use Case Testing — це важливий підхід до тестування з точки зору користувача, який дозволяє протестувати реальні сценарії використання та підвищує якість програмного забезпечення, бо орієнтований на цілі.

State Transition Testing

State Transition Testing (тестування переходів станів) — це техніка тестування програмного забезпечення, яка використовується для перевірки поведінки системи, що змінюється в залежності від її поточного стану та дії користувача чи зовнішнього середовища.

Інакше кажучи: якщо система поводиться по-різному в залежності від того, в якому вона зараз стані, і що користувач робить, — тоді ця техніка застосовується для тестування логіки таких переходів.

Ключова ідея

Уявімо, що програма — це як машина, яка може перебувати в різних станах (наприклад: “не ввійшов у систему”, “авторизований”, “заблокований” тощо). Залежно від того, в якому вона стані, одна й та сама дія може мати різні наслідки.

Наприклад:

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

Тобто, контекст (стан) має значення, і саме це ми тестуємо через State Transition Testing.

Основні поняття

ПоняттяПояснення
Стан (State)Це поточне положення системи, що впливає на її поведінку. Наприклад: “увійшов”, “заблокований”, “чекає дії”.
Подія (Event/Input)Це дія або вхідна інформація, що викликає зміну стану. Наприклад: введення пароля, натискання кнопки.
Перехід (Transition)Це рух системи з одного стану до іншого під впливом події. Наприклад: з “неавторизований” до “авторизований”.
Дія (Action)Це те, що система виконує у відповідь на подію: наприклад, показ повідомлення, блокування акаунта.

Коли варто застосовувати State Transition Testing?

Ця техніка доцільна, якщо:

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

Приклади систем, де це актуально:

  • Авторизація користувачів (введення логіну/паролю, блокування при помилках).
  • Автоматизовані системи (банкомати, автомати продажу квитків).
  • Ігри (стани гравця: живий, поранений, мертвий).
  • Веб-додатки з “мультисторінковим” введенням даних.

Приклад:

Сценарій: Банкомат (ATM) — тестування процесу авторизації користувача

Можливі стани:

  • S0: Очікування картки
  • S1: Введення PIN
  • S2: Авторизовано
  • S3: Заблоковано (після 3 неправильних PIN)

Можливі події / дії користувача:

  • Insert Card – вставити картку
  • Enter Correct PIN – правильний PIN
  • Enter Wrong PIN – неправильний PIN
  • Eject Card – витягнути картку

Таблиця переходів станів:

Поточний станВхідна подіяНаступний станКоментар
S0Insert CardS1Картку вставлено
S1Enter Correct PINS2Авторизація успішна
S2Eject CardS0Картку витягнуто
S0Insert CardS1Картку вставлено
S1Enter Wrong PIN (1x)S1Перша помилка PIN
S1Enter Correct PINS2Авторизація успішна
S2Eject CardS0Картку витягнуто
S0Insert CardS1Картку вставлено
S1Enter Wrong PIN (1x)S1Перша помилка PIN
S1Enter Wrong PIN (2x)S1Друга помилка PIN
S1Enter Correct PINS2Авторизація успішна
S2Eject CardS0Картку витягнуто
S0Insert CardS1Картку вставлено
S1Enter Wrong PIN (1x)S1Перша помилка PIN
S1Enter Wrong PIN (2x)S1Друга помилка PIN
S1Enter Wrong PIN (3x)S3Три помилки: блокування

Діаграма:

State Transition Testing Diagram

Типи покриття в State Transition Testing

Коли ми тестуємо переходи між станами, ми можемо будувати різні стратегії покриття, щоб перевірити всю логіку:

Тип покриттяЩо означає
Покриття станів (State coverage)Перевірити, що кожен можливий стан системи хоча б раз досягається.
Покриття переходів (Transition coverage)Перевірити, що кожен можливий перехід між станами був виконаний.
Покриття послідовностей переходівПеревірка кількох переходів підряд, як вони працюють у комбінації.
Негативне тестуванняПеревірка, як система реагує на неприпустимі дії в певних станах.

Приклад тест-кейсів

На основі попереднього прикладу з банкоматом:

Позитивний сценарій

  • Передумова: Картка ще не вставлена.
  • Кроки:
    1. Вставити картку.
    2. Ввести правильний PIN.
    3. Обрати операцію.
    4. Завершити сесію.
  • Очікування: Транзакція проходить успішно, картка витягується.

Негативний сценарій

  • Передумова: Картка вставлена.
  • Кроки:
    1. Ввести 3 рази неправильний PIN.
  • Очікування: Акаунт блокується, транзакції недоступні.

Переваги State Transition Testing

Допомагає знайти:

  • логічні помилки в переходах;
  • помилки в обробці неправильних дій;
  • відсутність очікуваних переходів або станів.

Добре підходить для:

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

State Transition Testing — це важливий метод тестування, який дозволяє перевірити поведінку системи в різних станах, враховуючи попередні дії користувача. Ця техніка вимагає чіткого розуміння логіки додатку і дозволяє знайти помилки, які складно помітити при звичайному функціональному тестуванні.

Decision Table Testing

Decision Table Testing (Тестування таблиць прийняття рішень) — це техніка тест-дизайну, яка допомагає моделювати складні логічні умови системи. Вона базується на таблиці рішень, яка показує:

  • Умови (Conditions) — вхідні дані або ситуації
  • Дії (Actions) — очікувана поведінка системи
  • Правила (Rules) — комбінації умов, при яких відбуваються дії

Це дозволяє створювати тест-кейси, які покривають усі (або найважливіші) комбінації вхідних умов.

Розглянемо простий приклад.

Приклад:

Умова: користувач може увійти в систему, якщо:

  1. Ввів правильний логін
  2. Ввів правильний пароль
УмовиТест 1Тест 2Тест 3Тест 4
Логін правильнийT (True)T (True)FF
Пароль правильнийT (True)F (False)TF
Дозволити вхідT (True)F (False)FF

Етапи побудови таблиці рішень:

1. Визначення умов

Це всі вхідні змінні або умови, що впливають на результат.

Наприклад: чи користувач увійшов у систему, чи ввів правильний пароль тощо.

2. Визначення можливих значень умов

Зазвичай це True/False чи 0/1, але можуть бути й інші варіанти.

3. Визначення дій

Що має зробити система залежно від комбінації умов? Це можуть бути:

  • Виконати якусь операцію
  • Показати повідомлення
  • Заборонити доступ і т.д.

4. Формування правил

Кожна комбінація умов — це окреме правило (Rule), що призводить до певної дії або дій.

5. Скорочення таблиці (оптимізація)

Іноді деякі комбінації дублюють результати або не мають сенсу — їх можна об’єднати або видалити.

Приклад: Надання знижки постійному клієнту

Умови:

Умова
C1Клієнт є постійним клієнтом
C2Сума замовлення перевищує 1000 грн

Дії:

Дія
A1Надати знижку 10%
A2Надати знижку 5%
A3Не надавати знижку

Логіка дій:

КомбінаціяУмови виконаніЗнижка
Тест 1Постійний клієнт + сума > 100010%
Тест 2Постійний клієнт + сума ≤ 10005%
Тест 3Непостійний клієнт + сума > 10005%
Тест 4Новий клієнт, невелике замовлення0%

Таблиця рішень

УмоваТест 1Тест 2Тест 3Тест 4
C1: Постійний клієнтTTFF
C2: Сума > 1000 грнTFTF
Очікувана діяA1 (10%)A2 (5%)A2 (5%)A3 (0%)

Переваги Decision Table Testing:

ПеревагаПояснення
ЧіткістьВсі логічні умови систематизовані
Повне покриттяКожна важлива комбінація умов врахована
АвтоматизаціяТаблицю легко перевести в автоматичні тести
Виявлення прогалинДопомагає побачити, які варіанти не опрацьовані

Коли використовувати?

СитуаціяDecision Table Testing — підходить?
Багато вхідних умовТак
Складні правила прийняття рішеньТак
Просте позитивне/негативне тестуванняКраще Boundary Value чи Equivalence Partitioning
Бізнес-логіка (знижки, ролі, правила доступу)Ідеально

Інструменти для створення таблиць:

  • Excel або Google Sheets
  • TestRail (та інші TMS)
  • Draw.io або інші діаграмні редактори
  • Mind maps (для візуалізації)

Boundary Value Analysis

Boundary Value Analysis (BVA – аналіз граничних значень) — це техніка тестування, яка орієнтується на перевірку граничних значень для вхідних даних системи. Багато помилок у програмному забезпеченні часто виникають саме при роботі з даними на межах, тому тестування саме цих значень допомагає виявити критичні баги.

Чому саме граничні значення?

У програмному забезпеченні та алгоритмах часто зустрічаються випадки, коли значення змінної перевіряються на відповідність певному діапазону. Наприклад, перевірка на те, чи належить число до певного діапазону від 1 до 100.

Програмі або системі особливо важливо коректно обробляти значення, які знаходяться саме на межі цього діапазону (наприклад, 1 або 100), а також значення, які знаходяться прямо поруч (наприклад, 0 чи 101). Іноді проблеми виникають через те, що система неправильно обробляє такі значення або через помилки в межах умовних операторів.

Тому принцип BVA ґрунтується на тестуванні саме граничних значень і значень, що знаходяться поруч з ними, а не на випадкових значеннях із середини діапазону. Багато помилок стаються саме через неправильне трактування цих граничних значень.

Як працює Boundary Value Analysis?

Існує підхід із застосуванням для тестування 2 граничних значень. Також є підхід із застосуванням 3 граничних значень. Потрібно зрозуміти, які значення входять у допустимий діапазон для тестування.

Застосування 2 граничних значень:

Якщо є система, яка приймає вхідне число в діапазоні від 1 до 100, то тестувати слід:

  • 1 (мінімальне значення)
  • 0 (менше мінімуму — вихід за межі)
  • 100 (максимальне значення)
  • 101 (більше максимуму — вихід за межі)

Застосування 3 граничних значень:

  1. Тестування на граничних значеннях: Тестуються не тільки самі межі (наприклад, 1 і 100), а й значення, що знаходяться безпосередньо біля меж:
    • 1 (мінімальна межа)
    • 100 (максимальна межа)
    • 0 (одне значення нижче мінімуму)
    • 101 (одне значення вище максимуму)
    • 2 (мінімальна межа + 1)
    • 99 (максимальна межа – 1)
  2. Порівняння результатів: Різні варіанти тестів дозволяють виявити, чи система правильно працює в межах допустимого діапазону, а також чи правильно реагує на значення, що виходять за межі цього діапазону.

Тестування для діапазону дійсних чисел:

  • Діапазон: від 0.0 до 10.0 (включно)
    • Тестові значення:
      • 0.0 (мінімум)
      • 10.0 (максимум)
      • -0.1 (менше мінімуму)
      • 10.1 (більше максимуму)
      • 0.1 (мінімум + 0.1)
      • 9.9 (максимум – 0.1)

Типи помилок, які можуть бути виявлені

  1. Неправильна обробка граничних значень: Наприклад, програма може неправильно працювати, якщо мінімальне або максимальне значення не обробляється належним чином (наприклад, програма приймає 0, хоча повинна відкидати ці значення).
  2. Помилки округлення: У випадках з дійсними числами можуть бути проблеми з точністю значень на межах, що також виявляється під час тестування крайніх значень.
  3. Пропущена перевірка значень за межами діапазону: Іноді система не має механізму для обробки значень, що виходять за межі допустимого діапазону (наприклад, якщо програма не перевіряє, чи число не більше за 100 або не менше за 1).

Переваги BVA:

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

Недоліки:

  • Обмеженість: Не завжди можна повністю охопити всі проблеми лише тестуванням граничних значень. Наприклад, BVA не допоможе виявити логічні помилки, які можуть виникати на середніх значеннях або при складних умовах.
  • Не замінює інші методи тестування: Для комплексних програм або складних бізнес-логік, BVA слід комбінувати з іншими методами тестування.

Підсумки

Boundary Value Analysis — це важливий метод тестування, який дозволяє виявляти проблеми на граничних значеннях, де часто виникають помилки. Використання цього методу дає змогу перевірити важливі ситуації, які можуть залишитися непоміченими при тестуванні випадкових значень.