状態遷移表を使用した要求分析モデル:状態遷移表による設計手法(3)(2/3 ページ)
実際に、要求仕様から状態遷移表を作成するプロセスを紹介する。モデリングを行いながら、要求仕様書で定義されていない曖昧な部分を検討し、明確化。上流工程の段階でモデルを洗練しておくことで、無駄のない最適なソースコードを作成できる。
自己遷移イベントの分析
ここまでは、イベントリストに記述されている内容を基に、状態遷移図を記述してきました。
次に、イベントが発生した場合、イベントに対する処理(アクション)は実行するが現在の状態のまま遷移しないイベント、“自己遷移イベント”について考えてみましょう。
検討した結果、「時間設定」状態において、時間設定ボタンが押された場合、時間設定処理を実行するが、「時間設定」状態のまま遷移は行わないため、イベントが発生しても遷移が行われない処理があることが判明しました。よって、図11の赤字部分のように追記します。
足りない遷移がないかを分析
次に、足りない遷移がないかを分析してみましょう。足りない遷移がないかを分析する際は、“遷移の流れ”について考えると分析しやすくなります。
分析してみると、「カウントダウン」状態から、「一時停止」状態へ遷移を行いますが、「一時停止」状態からの遷移が存在しないため、「一時停止」状態から復帰できないことが分かりました。ついては、「一時停止」状態から、「スタートストップボタン」イベントが発生した場合は、「カウントダウン」状態に遷移し、再びカウントダウン(時間計測)処理を実行するように記述します(図12)。
不要な状態を削除して状態遷移図を洗練
次に、“不要な状態”を削除して、状態遷移図を洗練してみましょう。
現在の状態遷移図を参照すると、「初期」状態は、最初のみ実行され、「時間設定ボタン」イベントのみに対応していることが分かります。また、先ほど、「時間設定」状態においても、同様に「時間設定ボタン」イベントの対応を行っているため、「初期」状態と「時間設定」状態は一緒にできそうです。
起動時に一度だけ実行する処理が存在する場合は、「初期」状態として実行することが有効となる場合もありますが、今回はモデルを簡潔に表現するため、「初期」状態と「時間設定」状態を同一にしました(図13)。
状態遷移表へ変換
それでは、ここまで作成した状態遷移図を、状態遷移表に変換して表現してみましょう。
状態遷移表で表現することにより、イベントと状態の組み合わせについて全ての処理を分析することが可能になります。
状態遷移表によるイベントの表現
それでは、状態遷移表でイベントを表現してみましょう。状態遷移図を参照すると「時間設定ボタン」「スタートストップボタン」「カウントダウン終了」の3つが存在します。よって、これら3つのイベントを状態遷移表のイベント部分に記述します。状態遷移表では、左端がイベントの記述部分になります(図14)。
状態遷移表による状態の表現
次に、状態遷移表で状態を表現してみましょう。状態遷移図では、「時間設定」状態、「カウントダウン」状態、「アラーム音出力」状態、「一時停止」状態の4つの状態が存在します。よって、これら4つの状態を状態遷移表の状態部分に記述します。状態遷移表では、上部が状態の記述部分になります(図15)。
状態遷移表による遷移の表現
続いて、状態遷移表の遷移部分を表現してみましょう。状態遷移図では、下記の通り6つの遷移が存在します。よって、これら6つを状態遷移表の遷移に記述します。状態遷移表では、イベント(横列)の状態(縦列)の交差した部分が遷移の記述部分になります(図16)。
- 「時間設定→時間設定」への遷移
- 「時間設定→カウントダウン」への遷移
- 「カウントダウン→一時停止」への遷移
- 「一時停止→カウントダウン」への遷移
- 「カウントダウン→アラーム音出力」への遷移
- 「アラーム音出力→時間設定」への遷移
状態遷移表によるアクションの表現
最後に、状態遷移表のアクション部分を表現してみましょう。状態遷移図では、アクションの表現は行わなかったため、イベントリストを参照して記述します。状態遷移表では、遷移部分と同じセル、つまりイベント(横列)と、状態(縦列)の交差した部分に記述します。
また、状態遷移図を作成した際に、仕様書から“「一時停止」状態で「スタートストップボタン」イベントが入った場合の処理”がモレていたことが明確となりました。よって、ここではカウントダウンを再開するために、「カウントダウン開始」というアクション(処理)を追記します(図17)。
要求仕様で不明確であった部分が明確となる
状態遷移表で表現を行うと、要求仕様で定義されていなかった部分が“空白”となり、仕様書に定義されていないモレ・ヌケが判明しました。
空白の部分は、要求仕様書には記述されていませんが、各状態に対してのアクション(処理)が明確になっていないと、例えば、ボタンが押されるとハングアップするなどの不具合を起こす可能性があります。そのため、要求分析の段階で、処理を明確にしておく必要があります。よって、空白部分についての要求分析を行い、要求定義を行います(図18)。
「カウントダウン終了」イベントが入った場合の処理を検討
まずは、「カウントダウン終了」イベントが入力された場合の処理について検討してみましょう。
「カウントダウン」状態において、「カウントダウン終了」イベントが入力された場合の処理は記述されていますが、「時間設定」状態、「一時停止」状態、「アラーム音」状態において、処理が空白となっています。これを検討した結果、「時間設定」状態、「一時停止」状態、「アラーム音」状態においては、「カウントダウン終了」イベントが入ってはいけないので、イベントが入った際のアクション(処理)は、“不可【表記:×】”を記述します(図19)。
「カウントダウン」状態で「時間設定ボタン」イベントが入った場合の処理を検討
次に、「カウントダウン」状態において、「時間設定ボタン」イベントが入力された場合の処理を検討してみましょう。
カウントダウン中に時間設定が行われては困るため、「カウントダウン」状態で、「時間設定ボタン」イベントが入った場合は、“処理なし(無視)【表記:/】”とすることにします(図20)。
Copyright © ITmedia, Inc. All Rights Reserved.