状態と入力の組み合わせごとに遷移先を整理した表
状態遷移表(じょうたいせんいひょう)とは、システムの「現在の状態」を行に、「入力(イベント)」を列にとり、その交差するマスに「遷移先の状態」を書き込んだ表です。状態遷移図と同じ情報を、図ではなく表の形で整理したものです。
身近な例で言うと、料理のレシピの早見表のようなものです。「いまの状態(材料の状態)」と「やる操作(入力)」が決まれば、「次にどうなるか(遷移先)」が表の1マスを見るだけで分かります。図のように矢印を目で追う必要がなく、機械的に引けるのが表の強みです。
上のツールでは、左に状態遷移図、右にそこから自動生成した状態遷移表を並べています。▶ボタンを押すか、表のマスや図の矢印にマウスを乗せると、同じ遷移を表す「図の矢印」と「表のマス」が同時に青く光ります。
状態遷移図と状態遷移表は、まったく同じ情報を別の形で表したものです。両者の対応関係はとてもシンプルです。
・図の「丸」 = 表の「行(と列見出しに出てくる状態名)」
・図の「矢印1本」 = 表の「マス1つ」
・矢印のラベル(入力) = 表の「列」
・矢印の行き先 = マスに書かれた「遷移先」
つまり「状態 S0 から入力 A で状態 S1 へ」という1つの遷移は、図ではS0からS1への矢印(ラベルA)、表では「行 S0・列 A のマスに S1」として、同じことを2通りに表現しています。上のツールでマスや矢印にマウスを乗せて、この1対1の対応を実際に確かめてみてください。
図から表を作るには、すべての状態を行に、すべての入力を列に並べ、各矢印を対応するマスに書き写すだけです。逆に表から図を起こすときは、空でないマスを矢印に変えていきます。
図は全体像をつかむのに優れていますが、状態や入力が増えると矢印が絡まって読みにくくなります。そこで威力を発揮するのが表です。表で表す主なメリットは次の通りです。
・抜け漏れを発見できる:すべての「状態×入力」のマスが並ぶので、定義されていない組み合わせ(空白マス)が一目で分かる
・網羅的に検証できる:マスの数=確認すべきケースの数。テストケースの洗い出しにそのまま使える
・規模が大きくても破綻しない:矢印が交差する図と違い、状態が増えても行を足すだけで整理できる
・プログラムにしやすい:表をそのまま2次元配列にすれば、状態遷移をコードで簡単に実装できる
とくに重要なのが「抜け漏れの発見」です。例えば「100円投入済みの状態でさらに硬貨を入れたらどうなる?」という仕様の考え漏れは、図だと見落としがちですが、表なら該当するマスが空白かどうかを見るだけで気づけます。仕様の品質を上げる強力なチェック手段になります。
一方で表にも弱点があり、「状態がどう巡回するか」「どこからどこへ流れるか」といった全体の流れは図のほうが直感的です。そのため実務では、図で全体像を共有し、表で抜け漏れを潰すというように両方を併用するのが定石です。