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