FE EXAM

状態遷移表(State Table)

状態と入力の組み合わせごとに遷移先を整理した表

INTERACTIVE VISUALIZATION
図と表の対応
状態の数
3
入力の種類
2
表のマス目(状態×入力)
3 × 2 = 6
プリセット
対応を1つずつ点灯
表のセルや図の矢印にマウスを乗せる(タップする)と、対応する箇所がもう片方でも青く光ります。
図 ⇄ 表 の対応表のセルや図の矢印を選ぶと、図と表の対応する場所が同時に光ります。▶ボタンで全遷移を順番に確認することもできます。
状態遷移図
50円投入返却50円投入返却50円投入返却0円50円100円
状態遷移表(自動生成)
現状態\入力50円投入返却
0円50円0円
50円100円0円
100円100円0円
各マスは「その状態でその入力を受けたときの遷移先」。「−」は遷移が定義されていないことを表します。
解説

📋
状態遷移表とは

現状態入力A入力BS0S1S0S1S1S0行=現状態、列=入力、マス=遷移先

状態遷移表(じょうたいせんいひょう)とは、システムの「現在の状態」を行に、「入力(イベント)」を列にとり、その交差するマスに「遷移先の状態」を書き込んだ表です。状態遷移図と同じ情報を、図ではなく表の形で整理したものです。

身近な例で言うと、料理のレシピの早見表のようなものです。「いまの状態(材料の状態)」と「やる操作(入力)」が決まれば、「次にどうなるか(遷移先)」が表の1マスを見るだけで分かります。図のように矢印を目で追う必要がなく、機械的に引けるのが表の強みです。

上のツールでは、左に状態遷移図、右にそこから自動生成した状態遷移表を並べています。▶ボタンを押すか、表のマスや図の矢印にマウスを乗せると、同じ遷移を表す「図の矢印」と「表のマス」が同時に青く光ります。

🔗
状態遷移図との対応

S0S1A図の1本の矢印が表[S0][A]=S1表の1マスに対応

状態遷移図と状態遷移表は、まったく同じ情報を別の形で表したものです。両者の対応関係はとてもシンプルです。
図の「丸」表の「行(と列見出しに出てくる状態名)」
図の「矢印1本」表の「マス1つ」
矢印のラベル(入力)表の「列」
矢印の行き先マスに書かれた「遷移先」

つまり「状態 S0 から入力 A で状態 S1 へ」という1つの遷移は、図ではS0からS1への矢印(ラベルA)、表では「行 S0・列 A のマスに S1」として、同じことを2通りに表現しています。上のツールでマスや矢印にマウスを乗せて、この1対1の対応を実際に確かめてみてください。

図から表を作るには、すべての状態を行に、すべての入力を列に並べ、各矢印を対応するマスに書き写すだけです。逆に表から図を起こすときは、空でないマスを矢印に変えていきます。

表で表すメリット

S1S0S1?空白マス=定義の抜け漏れを発見できる

図は全体像をつかむのに優れていますが、状態や入力が増えると矢印が絡まって読みにくくなります。そこで威力を発揮するのが表です。表で表す主なメリットは次の通りです。
抜け漏れを発見できる:すべての「状態×入力」のマスが並ぶので、定義されていない組み合わせ(空白マス)が一目で分かる
網羅的に検証できる:マスの数=確認すべきケースの数。テストケースの洗い出しにそのまま使える
規模が大きくても破綻しない:矢印が交差する図と違い、状態が増えても行を足すだけで整理できる
プログラムにしやすい:表をそのまま2次元配列にすれば、状態遷移をコードで簡単に実装できる

とくに重要なのが「抜け漏れの発見」です。例えば「100円投入済みの状態でさらに硬貨を入れたらどうなる?」という仕様の考え漏れは、図だと見落としがちですが、表なら該当するマスが空白かどうかを見るだけで気づけます。仕様の品質を上げる強力なチェック手段になります。

一方で表にも弱点があり、「状態がどう巡回するか」「どこからどこへ流れるか」といった全体の流れは図のほうが直感的です。そのため実務では、図で全体像を共有し、表で抜け漏れを潰すというように両方を併用するのが定石です。

関連コンテンツ