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 — це важливий метод тестування, який дозволяє перевірити поведінку системи в різних станах, враховуючи попередні дії користувача. Ця техніка вимагає чіткого розуміння логіки додатку і дозволяє знайти помилки, які складно помітити при звичайному функціональному тестуванні.

Leave a Reply

Your email address will not be published. Required fields are marked *