開発の質を高めるツール「状態遷移表」とは
まず「状態遷移テスト」とは、イベントによって設計仕様どおりに、
ソフトウェアの状態が変化することを確かめるテストのことをいいます。
そして、このテストの時に活用するのが「状態遷移表」です。
システムに何らかのイベントがある場合に、状態がどのように変化するかを表で示したものです。
各状態の遷移ごと、また状態とイベントの掛け合わせごとに表形式で表します。
仕様を整理することで、より深く製品の仕様を把握することができ、テストの漏れ抜けを防止することができます。
全ての状態とイベントの組合せを網羅でき、想定しないイベントの対処も確認が可能です。
結果として「状態遷移表」の活用は、開発の質を高めます。
状態
状態遷移表では、遷移が発生しない「状態」と「イベント」の組み合わせを把握できます。
状態遷移とは、ある「状態」から異なる状態に変化することを指します。
状態遷移表では、縦軸で「状態」を表します(逆のケースも存在します)。
DVDプレイヤー操作画面の状態遷移表を例に挙げると、
「停止中」「再生中」「早送り中」など、現在の状態を示します。
イベント
つぎに、ある状態が異なる状態に変化する、きっかけを「イベント」と呼びます。
状態遷移表では、横軸で「イベント」を表します(逆のケースも存在します)。
前項と同じくDVDプレイヤー操作画面の状態遷移表を例に挙げると、
「再生ボタンが押された」「停止ボタンが押された」「早戻しボタンが離された」など、
状態遷移表のサンプル例
先述した通り、状態遷移表は「状態」と「イベント」を表形式でまとめたものです。
状態遷移表では、遷移が発生しない「状態」と「イベント」の組み合わせ
(上図では"-"になっている箇所)も把握することができます。
設計で想定していない状態とイベントの組み合わせは、何が起こるか開発者も分からないことが多いため、あらかじめ設計時に想定されたイベントよりもバグが潜みやすい部分となっています。
そのようなバグを検出できるテストを実施するために、状態遷移表は非常に効果的です。
状態遷移図(UMLステートマシン図)との違い
状態遷移表に似ている言葉に「状態遷移図(UMLステートマシン図)」があります。
状態遷移図と状態遷移表は、共に同様の情報を提供する記法ですが、図と表では見えるものが異なります。
それぞれの特徴は以下の通りです。
- 状態遷移図
システムの全体像、一連の流れを理解しやすい - 状態遷移表
全ての状態とイベントの組合せを網羅でき、図では見えない、且つ想定しないイベントの対処も確認できる
下記は状態遷移図のイメージです。
状態遷移図はシステム全体を俯瞰で確認できますが、状態ごとのイベントの処理方法は分かりにくいです。
これに対して状態遷移表は、状態ごとのイベントの処理方法を網羅的に表せます。
このように、状態遷移図は全体を俯瞰するのに役立ち、
状態遷移表は各状態の動きを細かく漏らさず確認するのに役立ちます。
どちらか一方ではなく両方を作成し活用する
状態遷移図と状態遷移表はどちらか片方ではなく、両方作成して活用することをおすすめします。
それぞれ「出来ること」「出来ないこと」が異なるため、目的によって使い分け、
場合により相互補完的に利用していくと、効果的に活用できます。
状態遷移図と状態遷移表をどちらも利用することによって、状態遷移の全体の流れの把握、開発仕様書の抜け漏れの防止を行うことができます。それぞれの特徴をいかして、テスト設計に取り入れてみると良いでしょう。
状態遷移表を作成するメリット
状態遷移表を作成するメリットとして下記の2点が挙げられます。
- 仕様の全体像を把握しやすい
- 開発における抜け・漏れが発生しにくくなる
それぞれ事項で詳しく解説します。
仕様の全体像を把握しやすい
仕様の全体を感覚的に掴める状態遷移図に対し、細部にまで漏れなく拾いあげてくれるのが状態遷移表です。
状態遷移表は表で整理されたものであるため、状態遷移図に比べ、仕様の全体像を理解しやすくなります。仕様で盛り込んでいないこと、起こると想定されていないことまでチェックできる点が状態遷移表の大きなメリットといえます。
正しく動作しているか、間違った動作がないか、状態遷移図と状態遷移表を組み合わせることで相互補完が可能になります。
開発における抜け・漏れが発生しにくくなる
「漏れ」が無いようにパターンを始めに全て出すため作成するのが状態遷移表です。
想定されるすべての状態とイベントを項目に当てはめ、網羅的に遷移した先を記入していきます。
また、状態遷移表を開発に携わるメンバー間で共有することで、状態やイベントを整理でき、開発における「抜け」や「漏れ」が発生しにくくなるという利点があります。
後で不具合が発覚してしまうと、余計な手戻りコストが発生し、開発効率が低下します。
そうならない為にも、設計の初期段階で状態遷移表を作成しすべての項目を確認していくことが重要です。
状態遷移表の書き方とコツ
状態遷移表は、すべてのイベントとそれに対応する状態をもれなく記載することが大切です。
縦軸にイベント、横軸に状態を入れて作ります。
テレビの電源がOFFの状態でリモコンの電源ボタンを押すと電源がONになり、もう一度ボタンを押すと電源がOFFになる場合を例に挙げていきます。
「電源ボタンを押下」というイベントに対し、それによって起こる遷移である「ON」「OFF」の状態を上図のように書くことになります。
また、状態遷移表を作成する段階で「できないこと」を“見える化”しておくことで、余分な作業が減り、開発も効率的に行うことができます。
すべての「状態」、すべての「イベント」を網羅的に書き出すことが大切です。
項目が抜けていたり、漏れていたりすることがない良質な設計を目指しましょう。
まとめ
状態管理表をマスターすることができれば、手戻りを防いでムダなコストや時間が生じるのを防止できます。
状態遷移図と状態遷移表を組み合わせて利用することにより、状態遷移の全体の流れを把握でき、開発仕様書の抜け漏れをなくすことが可能です。
それぞれの特徴を理解して、ソフトウェアのテスト設計に取り入れてみてはいかがでしょうか。