テストについて学ぼう! ~第5話 状態遷移表とは~

第5話 状態遷移表とは

みなさん、こんにちは。鎌倉です。第4話では、状態遷移図について学びました。第5話では状態遷移図の兄弟分にあたる、「状態遷移表」についてご説明します。状態遷移図と状態遷移表の相互関係、併用するメリットについても触れていますので、まだ第4話を読んでいない方はセットで読んでいただくのがお勧めです。

状態遷移表とは

状態遷移表は状態遷移図と同様に、状態遷移テストで利用するツールです。Webサイトやアプリでボタン押下や時間経過などのイベント(事象)が発生したとき、どの状態からどの状態へ変化するのかを分析する目的で作成する点も共通しています。

状態遷移表の特徴

状態遷移表も状態遷移図と同じく「状態」と「イベント」で構成されます。「どの状態のとき、どのイベントが発生すると、どの状態へ遷移するか?」を二次元のマトリクス形式で表すのが特徴です。 上の例は炊飯器の状態遷移表です。行の見出しが状態、列の見出しが発生するイベントを表しており、行と列が交わる箇所にはイベント発生時の遷移先が書かれています。状態遷移してはいけない組み合わせの箇所にはハイフン(-)が記入され、遷移できないことが明確になっています。

なお、行と列は逆にしても構いません。チームで作業していてドキュメントの規約がある場合には、規約に従って行と列を決めてください。

状態遷移表の利点

状態遷移表の強みは、システムの状態遷移ルールを抜けもれなく把握できる点です。これにより、次のようなメリットが得られます。

  • 状態遷移パターンの書き忘れに気づきやすく、網羅性に優れる
  • 正常系のパターンだけでなく、遷移できない異常系のパターンまで把握可能
  • マトリクスはテストケース作成時の基礎資料としても利用できる

状態遷移表の欠点

状態遷移表はとても有用なツールですが、けっして万能なわけではありません。 二次元の表で書かれているため見た目がそっけなく、状態遷移の全体像をイメージでとらえることができません。また、 複数回のイベント発生によって、どの状態にたどりつくかを分析することは困難です。

状態遷移図と併用するメリット

第4話から続けて読んでくださっている方はお気づきかと思いますが、状態遷移図と状態遷移表はお互いの欠点を補いあう関係にあります。このため、両者を併用するとシステムの状態遷移をより正確に把握できるようになるのです。

状態遷移表を作成してみよう

(第4話の続編として、同じ題材を使用します)

例題

あるメーカーの扇風機は次のような仕様になっています。

  • 電源ボタンと切替ボタンが付いている
  • 「待機」「送風(弱)」「送風(強)」の3つの状態がある
  • 「待機」状態で電源ボタンを押すと「送風(弱)」状態になる
  • 「送風(弱)」状態で切替ボタンを押すと「送風(強)」状態になる
  • 「送風(強)」状態で切替ボタンを押すと「送風(弱)」状態になる
  • 「送風(弱)」状態で電源ボタンを押すと「待機」状態になる
  • 「送風(強)」状態で電源ボタンを押すと「待機」状態になる

状態遷移図は既にチーム内の別のメンバーが作成済みです。 仕様と状態遷移図を元に、この扇風機の状態遷移表を作成してください。
※この課題では、電源プラグの抜けや停電は考えないものとします。

状態遷移図の横に状態遷移表を配置する

まずは状態遷移図の隣に空の状態遷移表を配置しましょう。状態遷移表には(状態の数+1)行、(イベントの数+1)列の表が必要です。今回は状態が3つ、イベントは2つなので、4行3列の表を使います。

状態名の見出しを記入する

まずは状態名の見出しを記入しましょう。表の1列目は状態名の見出しを記入する列です。順番は任意ですが、ここでは2行目に「待機」、3行目に「送風(弱)」、4行目に「送風(強)」を書くことにします。

イベント名の見出しを記入する

続いてイベント名の見出しを記入しましょう。表の1行目はイベント名の見出しを記入する行です。順番は任意ですが、ここでは2列目に「電源ボタン押下」、3列目に「切替ボタン押下」を書くことにします。

遷移先の状態名を記入する

最後に状態名とイベントが交わるところに遷移先の状態名を書き込みます。「待機」状態で電源ボタンが押されると「送風(弱)」状態へ遷移するので、「待機」と「電源ボタン押下」が交わるところに「送風(弱)」を書き入れましょう。

「送風(弱)」状態または「送風(強)」状態で電源ボタンが押されると「待機」状態へ遷移するので、「送風(弱)」と「電源ボタン押下」が交わるところ、 「送風(強)」と「電源ボタン押下」が交わるところに 「待機」を書き入れましょう。

「送風(弱)」状態で切替ボタンが押されると「送風(強)」状態に遷移するので、「送風(弱)」と「切替ボタン押下」が交わるところに「送風(強)」を書き込みます。

「送風(強)」状態で切替ボタンが押されると「送風(弱)」状態に遷移するので、「送風(強)」と「切替ボタン押下」が交わるところには「送風(弱)」を書きましょう。

5つの矢印にすべてに対応した遷移を表に書き込むことができましたが、「待機」と「切替ボタン押下」が交わるところが埋まりませんでした。埋まらなかった箇所は、システム的に状態遷移が許されない組み合わせです。このような箇所には「-」や「N/A」のような記号を入れます。ここでは「-」としておきましょう。

これで状態遷移表が埋まりました。青枠で囲った5箇所は正常系のテストケース、赤枠で囲った1箇所は異常系のテストケース(「待機」状態で切替ボタンを押し、いずれかの送風状態になったらNG)に相当します。

実践演習

(第4話の続編として、同じ題材を使用します)
あるキッチンタイマーは次のような仕様になっています。

  • 「待機」「カウントダウン」「一時停止」「終了」の4つの状態がある
  • 「待機状態」のとき画面には「3:00」(3分00秒)が表示されている
  • 「待機」状態でSボタンを押すと「カウントダウン」状態になり、残り時間が1秒ずつカウントダウンする
  • 「カウントダウン」状態でSボタンを押すと、「一時停止」状態になり、カウントダウンが止まる
  • 「一時停止」状態でSボタンを押すと「カウントダウン」状態になり、カウントダウンが再開する
  • 「カウントダウン」状態で残り時間が0秒になると「終了」状態になり、アラーム音が鳴る
  • 「終了状態」でRボタンを押すとアラーム音が止まり、「待機」状態に戻る

状態遷移図は既にチーム内の別のメンバーが作成済みです。 仕様と状態遷移図を元に、このキッチンタイマーの状態遷移表を作成してください。

正解と解説

最初に状態遷移図の隣に状態遷移表を配置しましょう。状態遷移表には(状態の数+1)行、(イベントの数+1)列の表が必要です。今回は状態が4つ、イベントは3つなので、5行4列の表を使います。

まずは状態名の見出しを記入しましょう。表の1列目は状態名の見出しを記入する列です。順番は任意ですが、ここでは2行目に「待機」、3行目に「カウントダウン」、4行目に「一時停止」、5行目に「終了」を書くことにします。

次に、イベント名の見出しを記入しましょう。表の1行目はイベント名の見出しを記入する行です。順番は任意ですが、ここでは2列目に「Sボタン押下」、3列目に「Rボタン押下」、4列目に「残り時間が0秒になる」を書くことにします。

続いて、状態名とイベントが交わるところに遷移先の状態名を書き込みます。「待機」状態でSボタンが押されると「カウントダウン」状態へ遷移するので、「待機」と「Sボタン押下」が交わるところに「カウントダウン」を書き入れましょう。

「カウントダウン」でSボタンが押されると「一時停止」状態、残り時間が0秒になると「終了」状態に遷移しますので、「カウントダウン」と「Sボタン押下」が交わるところに「一時停止」、 「カウントダウン」と「残り時間が0秒になる」が交わるところには「終了」を書き入れます。

「一時停止」状態でSボタンが押されると「カウントダウン」状態に戻りますので、「一時停止」と「Sボタン押下」が交わるところに「カウントダウン」を書き入れます。

「終了」状態でRボタンが押されると「待機」状態に戻りますので、「終了」と「Rボタン押下」が交わるところに「待機」を書き入れましょう。これですべての状態がマトリクスに書き込まれたことになります。

マトリクスには空欄が7個残っています。空欄の箇所はシステム的に遷移が許されないので「-」を書き入れ、遷移してはいけないことを明確にしましょう。青枠で囲んだところが正常系のテストケース、赤枠で囲んだところが異常系のテストケースに相当します。

状態遷移表を元にテストケースを書き起こしてみると、次のようになります。異常系のテストケースには理論上発生しないパターンが含まれる場合もあり(No.3/9/12)、実際のテストでは明らかに不要なテストケースを除外する判断も必要です。

まとめ

今回は「状態遷移図」の兄弟分にあたるツール「状態遷移表」についてご説明しました。押さえておくべきポイントは

  • 二次元のマトリクスを使って、システムの状態遷移ルールを
    抜けもれなく把握できる
  • 状態遷移の全体像をイメージでとらえることができないので、
    複数回のイベント発生による状態遷移を分析することは苦手
  • 状態遷移図と状態遷移表は互いの欠点を補いあう関係なので、
    併用するとシステムの状態遷移をより正確に把握できる

といった点です。状態遷移図と状態遷移表を活用して、効率的な状態遷移テストを実施しましょう。

鎌倉
2010年入社、北海道札幌市出身。趣味はランニング。最近100kmリレー最速タイムのチャレンジに参加し、ギネス記録を達成したらしい。