State-Transition Tables
State-Transition Tables имеет не такой наглядный вид, зато более полный и систематизированный. State-transition tables состоит из 4ех столбцов - Текущее состояние (Current State), Событие (Event), Действие (Action) и Следующее состояние (next state).
Опишем уже известный нам процесс резервации авиабилетов с помощью State-Transition Table:
Текущее состояние | Событие | Действие | Следующее состояние |
null | giveInfo | startPayTimer | Made |
null | payMoney | -- | null |
null | -- | null | |
null | giveTicket | -- | null |
null | cancel | -- | null |
null | PayTimerExpires | -- | null |
Made | giveInfo | -- | Made |
Made | payMoney | -- | Paid |
Made | -- | Made | |
Made | giveTicket | -- | Made |
Made | cancel | -- | Can-Cust |
Made | PayTimerExpires | -- | Can-NonPay |
Paid | giveInfo | -- | Paid |
Paid | payMoney | -- | Paid |
Paid | Ticket | Ticketed | |
Paid | giveTicket | -- | Paid |
Paid | cancel | Refund | Can-Cust |
Paid | PayTimerExpires | -- | Paid |
Ticketed | giveInfo | -- | Ticketed |
Ticketed | payMoney | -- | Ticketed |
Ticketed | -- | Ticketed | |
Ticketed | giveTicket | -- | Used |
Ticketed | cancel | Refund | Can-Cust |
Ticketed | PayTimerExpires | -- | Ticketed |
Used | giveInfo | -- | Used |
Used | payMoney | -- | Used |
Used | -- | Used | |
Used | giveTicket | -- | Used |
Used | cancel | -- | Used |
Used | PayTimerExpires | -- | Used |
Can-NonPay | giveInfo | -- | Can-NonPay |
Can-NonPay | payMoney | -- | Can-NonPay |
Can-NonPay | -- | Can-NonPay | |
Can-NonPay | giveTicket | -- | Can-NonPay |
Can-NonPay | cancel | -- | Can-NonPay |
Can-NonPay | PayTimerExpires | -- | Can-NonPay |
Can-Cust | givelnfo | -- | Can-Cust |
Can-Cust | payMoney | -- | Can-Cust |
Can-Cust | -- | Can-Cust | |
Can-Cust | giveTicket | -- | Can-Cust |
Can-Cust | cancel | -- | Can-Cust |
Can-Cust | PayTimerExpires | -- | Can-Cust |
Преимущество State-Transition Tables в том, что они определяют все возможные State-Transition варианты, а не только валидные. Поэтому State-Transition Tables часто приводят к нахождению не определенных, не документированных State-Transition комбинаций, которые лучше находить перед написанием кода.
Создание тест кейсов
State-Transition Diagrams могут быть легко использованы для создания тест кейсов. Необходимо создать набор тест-кейсов, который должен пройти по всем переходам хотя бы раз.
Из State-Transition Tables тоже достаточно легко делать тест кейсы. Стоит пройтись по всем валидным комбинациям (если есть время или не позволяют рискиможно пройтись и по всем невалидным комбинациям). В таблице отмечены все валидные комбинации жирным:
Текущее состояние | Событие | Действие | Следующее состояние |
null | giveInfo | startPayTimer | Made |
null | payMoney | -- | null |
null | -- | null | |
null | giveTicket | -- | null |
null | cancel | -- | null |
null | PayTimerExpires | -- | null |
Made | giveInfo | -- | Made |
Made | payMoney | -- | Paid |
Made | -- | Made | |
Made | giveTicket | -- | Made |
Made | cancel | -- | Can-Cust |
Made | PayTimerExpires | -- | Can-NonPay |
Paid | giveInfo | -- | Paid |
Paid | payMoney | -- | Paid |
Paid | Ticket | Ticketed | |
Paid | giveTicket | -- | Paid |
Paid | cancel | Refund | Can-Cust |
Paid | PayTimerExpires | -- | Paid |
Ticketed | giveInfo | -- | Ticketed |
Ticketed | payMoney | -- | Ticketed |
Ticketed | -- | Ticketed | |
Ticketed | giveTicket | -- | Used |
Ticketed | cancel | Refund | Can-Cust |
Ticketed | PayTimerExpires | -- | Ticketed |
Used | giveInfo | -- | Used |
Used | payMoney | -- | Used |
Used | -- | Used | |
Used | giveTicket | -- | Used |
Used | cancel | -- | Used |
Used | PayTimerExpires | -- | Used |
Can-NonPay | giveInfo | -- | Can-NonPay |
Can-NonPay | payMoney | -- | Can-NonPay |
Can-NonPay | -- | Can-NonPay | |
Can-NonPay | giveTicket | -- | Can-NonPay |
Can-NonPay | cancel | -- | Can-NonPay |
Can-NonPay | PayTimerExpires | -- | Can-NonPay |
Can-Cust | givelnfo | -- | Can-Cust |
Can-Cust | payMoney | -- | Can-Cust |
Can-Cust | -- | Can-Cust | |
Can-Cust | giveTicket | -- | Can-Cust |
Can-Cust | cancel | -- | Can-Cust |
Can-Cust | PayTimerExpires | -- | Can-Cust |
Ну вот и всё. Надеюсь получилось понятно описать суть техники.