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
|
Ну вот и всё. Надеюсь получилось понятно описать суть техники.