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 – витягнути картку
Таблиця переходів станів:
| Поточний стан | Вхідна подія | Наступний стан | Коментар |
| S0 | Insert Card | S1 | Картку вставлено |
| S1 | Enter Correct PIN | S2 | Авторизація успішна |
| S2 | Eject Card | S0 | Картку витягнуто |
| S0 | Insert Card | S1 | Картку вставлено |
| S1 | Enter Wrong PIN (1x) | S1 | Перша помилка PIN |
| S1 | Enter Correct PIN | S2 | Авторизація успішна |
| S2 | Eject Card | S0 | Картку витягнуто |
| S0 | Insert Card | S1 | Картку вставлено |
| S1 | Enter Wrong PIN (1x) | S1 | Перша помилка PIN |
| S1 | Enter Wrong PIN (2x) | S1 | Друга помилка PIN |
| S1 | Enter Correct PIN | S2 | Авторизація успішна |
| S2 | Eject Card | S0 | Картку витягнуто |
| S0 | Insert Card | S1 | Картку вставлено |
| S1 | Enter Wrong PIN (1x) | S1 | Перша помилка PIN |
| S1 | Enter Wrong PIN (2x) | S1 | Друга помилка PIN |
| S1 | Enter Wrong PIN (3x) | S3 | Три помилки: блокування |
Діаграма:

Типи покриття в State Transition Testing
Коли ми тестуємо переходи між станами, ми можемо будувати різні стратегії покриття, щоб перевірити всю логіку:
| Тип покриття | Що означає |
| Покриття станів (State coverage) | Перевірити, що кожен можливий стан системи хоча б раз досягається. |
| Покриття переходів (Transition coverage) | Перевірити, що кожен можливий перехід між станами був виконаний. |
| Покриття послідовностей переходів | Перевірка кількох переходів підряд, як вони працюють у комбінації. |
| Негативне тестування | Перевірка, як система реагує на неприпустимі дії в певних станах. |
Приклад тест-кейсів
На основі попереднього прикладу з банкоматом:
Позитивний сценарій
- Передумова: Картка ще не вставлена.
- Кроки:
- Вставити картку.
- Ввести правильний PIN.
- Обрати операцію.
- Завершити сесію.
- Очікування: Транзакція проходить успішно, картка витягується.
Негативний сценарій
- Передумова: Картка вставлена.
- Кроки:
- Ввести 3 рази неправильний PIN.
- Очікування: Акаунт блокується, транзакції недоступні.
Переваги State Transition Testing
Допомагає знайти:
- логічні помилки в переходах;
- помилки в обробці неправильних дій;
- відсутність очікуваних переходів або станів.
Добре підходить для:
- систем із складною логікою поведінки;
- перевірки, як система поводиться в різних умовах;
- автоматизації тестів.
State Transition Testing — це важливий метод тестування, який дозволяє перевірити поведінку системи в різних станах, враховуючи попередні дії користувача. Ця техніка вимагає чіткого розуміння логіки додатку і дозволяє знайти помилки, які складно помітити при звичайному функціональному тестуванні.