Модуль 3 · Урок 11

State transition testing і coverage

Однаковий event може мати різний outcome залежно від current state, guard і history. State model допомагає тестувати sequences, invalid transitions та side effects, які одиничний input/output case не показує.

StateEventGuardTransition

Модель поведінки

StateСтабільний режим, що впливає на наступну поведінку.
Event [guard]Тригер і умова, за якої transition дозволена.
/ action → targetSide effect та новий state після transition.

Нотація `event [guard] / action` змушує відділити event від умови. State table часто корисніша за diagram для QA, бо порожні cells роблять invalid transitions видимими.

BookFlow booking lifecycle

SourceEvent [guard]ActionTarget
Draftsubmit [data valid]create holdHeld
Heldpayment_success [not expired]confirmConfirmed
Heldtimeoutrelease inventoryExpired
Expiredpayment_successreject late callbackExpired

Останній рядок — invalid business transition, але event технічно може надійти асинхронно. Oracle має перевірити незмінність state, відсутність capture/resurrection і audit evidence.

Три coverage criteria

All statesКожний state відвідано. Це не гарантує всі шляхи між ними.
Valid transitionsКожна дозволена single transition виконана принаймні раз.
All transitionsValid виконані, invalid спробувані; один invalid per test зменшує defect masking.

Valid-transition coverage сильніша за all-states. Один test sequence може покрити кілька valid transitions, але precondition/start state та evidence повинні бути відтворюваними.

Race, retry і time

State testing для Web/API має враховувати duplicate callbacks, retry, event reordering, timeout boundary та concurrent users. Використовуйте controlled clock/idempotency key у дозволеному стенді. Ніколи не імітуйте payment callback на чужому production.

Практика

Заповніть `state-model.csv` і `transition-tests.csv`: start state, sequence, guards, expected states/actions, coverage items, evidence та limitation.

Офіційне джерело

Практична перевірка · урок 11 з 16

Закріпіть матеріал уроку

Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.

1. Що визначає state у test model?
2. Що ініціює transition?
3. Що показує notation event [guard] / action?