状態遷移表を使用した要求分析モデル状態遷移表による設計手法(3)(1/3 ページ)

実際に、要求仕様から状態遷移表を作成するプロセスを紹介する。モデリングを行いながら、要求仕様書で定義されていない曖昧な部分を検討し、明確化。上流工程の段階でモデルを洗練しておくことで、無駄のない最適なソースコードを作成できる。

» 2012年07月11日 09時30分 公開
[塚田 雄一 キャッツ,@IT MONOist]

はじめに

 組み込みソフトウェアが抱える一番の課題は「設計品質の向上」です。本連載の主役「状態遷移表」であれば、“イベント”と“状態”の全ての組み合わせを捉えることができるため、「モレ」「ヌケ」のない品質の良い設計が可能です。そして、不具合発生による手戻りコストの削減や開発効率の向上にも役立ちます。

 こうした理由から、組み込みソフトウェア開発の世界では、長年、状態遷移系モデルで設計が行われています。

 さて、前回は“なぜ状態遷移表を使うと、品質の良い開発ができるのか”を紹介しました。今回は「状態遷移表を使用した要求分析モデル」をテーマに、具体的に要求仕様から状態遷移表を作成するプロセスを紹介したいと思います。

 なお、本連載では以下の6つのテーマを順番にお届けしていきます。

  1. (連載第1回):状態遷移表設計手法の概要
  2. (連載第2回):なぜ状態遷移表を使うと、品質の良い開発ができるのか
  3. 状態遷移表を使用した要求分析モデル
  4. 状態遷移表を使用した設計モデル(拡張階層化状態遷移表)
  5. 状態遷移表からの実装
  6. 状態遷移表を使用したテスト手法

「キッチンタイマー」をモデリングして要求分析してみよう!

 状態遷移系モデルは、デジタルカメラ、ビデオカメラ、メディアプレーヤー、エアコン、冷蔵庫などの家電製品をはじめ、OA機器、半導体製造装置、情報機器、医療機器、航空/宇宙関係、車載システムなど、あらゆる分野で適用されています。というよりも、組み込みシステムで“状態のないシステム”はほとんど皆無といってよく、状態遷移表設計手法が使われていない分野を探す方が難しいといっても過言ではありません。

 各分野によって適切なサンプルは異なるかと思いますが、今回は「キッチンタイマー」を題材にしてモデリングを行い、要求分析をしていきたいと思います。

キッチンタイマーの要求仕様書

 モデリングするキッチンタイマーの要求仕様書を図1に示します。この要求仕様は、キッチンタイマーの基本機能を示す「基本仕様」と、「時間設定仕様」部分の2つに分けて記述されています(補足)。要求分析モデルでは、まず、要求仕様の中で基本機能の要求を分析してみましょう(図1の赤枠内)。

キッチンタイマーの要求仕様 図1 キッチンタイマーの要求仕様
※補足:時間設定仕様部分につきましては、次回「状態遷移表を使用した設計モデル(拡張階層化状態遷移表)」で紹介します。


要求分析モデリングのプロセス

 図2は、一般的な要求分析モデリングのプロセスです。

要求分析モデリングのプロセス 図2 要求分析モデリングのプロセス

 始めに、仕様書からイベントを抽出し、イベントリストを作成します。次に、状態を抽出し、状態遷移図を作成します。状態遷移図は、“状態の遷移(流れ)に着目した表記”であるため、これを基に要求仕様に記されていなかった“遷移モレ”の確認を行います。そして、状態遷移図を最適化してモデルを洗練します。その後、状態遷移図から状態遷移表に変換します。状態遷移表は、“イベントと状態の組み合わせを全て表現した表記”であるため、これを使用することにより、全てのイベントに対する“アクション(処理)”を、モレ・ヌケなく定義できます。そして最後に、状態遷移表を最適化してモデルの洗練を行います。

仕様書からイベント抽出(イベントリスト作成)

 それでは、イベント抽出を行うために、基本仕様を参照してイベントリストを作成しましょう。イベントリストには、イベント、スティミュラス、レスポンス、エフェクトなどを記述する場合もありますが、今回は、状態遷移表設計手法で重要となる「イベント」と「アクション」についてのみ考えます。

 まず、要求仕様書の基本仕様部分を参照してみると、「時間設定ボタン(分、10秒、クリア)により、カウントダウン時間設定を行う」と記述されています。これは、「時間設定ボタン」というイベントにより、「カウントダウン時間設定を行う」というアクションを実行することを意味します。よって、イベントには、「時間設定ボタン」と記述します。これと同様に、「スタートストップボタン」「カウントダウン終了」についても記述します(図3)。

イベント抽出 図3 イベント抽出

仕様書からアクションを抽出(イベントリスト作成)

 次は、イベントリストのアクションについて考えてみましょう。

 要求仕様書の基本仕様部分を参照してみると、「時間設定ボタン(分、10秒、クリア)により、カウントダウン時間設定を行う」と記述されています。先にも説明しましたが、これは「時間設定ボタン」というイベントにより、「カウントダウン時間設定」というアクションを実行するという仕様です。よって、アクションには「カウントダウン時間設定」と記述します。これと同様に、全てのアクション部分についても記述します(図4)。

イベントリスト作成 図4 イベントリスト作成

状態抽出方法

 ここまでの流れで、イベントとアクションのみを記述したイベントリストが完成しました。次は、状態を抽出してみましょう。

 状態の抽出は、キッチンタイマーの“操作(流れ)”をイメージし、どのような“状態”が必要か、現在どの状態におりどのイベントが入ったらどの状態に遷移していくかなどを考えながらモデリングしていきます。

まず初期状態について検討

 それでは、キッチンタイマーの電源が投入された最初の状態から考えてみましょう。

 モデリングを行う際は、まず、考えられる状態をできるだけ多く抽出し、後から不要な状態を削除する方針でモデリングしていく手法と、始めから状態をなるべく少なく抽出し、後から追加する方針でモデリングしていく手法がありますが、今回は、前者の“状態をできるだけ多く抽出し、後から不要と思えるものを削除する”方針でモデリングしていきたいと思います。

 まずは、「初期」状態という、何もボタンが押されていない状態を“1つの状態”と考え、作成します。そして、次は、イベントリストを参照し、イベントが発生した際の状態遷移を考えながら状態を抽出していきます(図5)。

初期状態を検討 図5 初期状態を検討

時間設定ボタンが押された場合の処理を検討

 イベントリストを参照してみると、「時間設定ボタン」イベントが入った場合は、「カウントダウン時間設定」を行う仕様となっています。そのため、新たに時間設定を行う「時間設定」状態を作成し、「初期」状態から、「時間設定ボタン」イベントが入った場合は、「時間設定」状態に遷移するように記述します(図6)。

時間設定ボタンが押された場合の処理を検討 図6 時間設定ボタンが押された場合の処理を検討

時間計測をスタートした場合の処理を検討

 続いてイベントリストを参照してみると、時間設定が完了しているときに、「スタートストップボタン」イベントが入った場合は、「カウントダウン開始」を行う仕様となっています。そのため、新たにカウントダウン(時間計測)を行っている「カウントダウン」状態を作成し、「スタートストップボタン」イベントが入力された場合は、「カウントダウン」状態へ遷移するように記述します(図7)。

時間計測をスタートした場合の処理を検討 図7 時間計測をスタートした場合の処理を検討

カウントダウン中に一時停止要求があった場合の処理を検討

 再度、イベントリストを参照してみると、カウントダウン中に、「スタートストップボタン」イベントが入った場合は、「一時停止」を行う仕様となっています。そのため、新たに一時停止を行っている「一時停止」状態を作成し、「スタートストップボタン」イベントが入力された場合は、「一時停止」状態へ遷移するように記述します(図8)。

カウントダウン中に一時停止要求があった場合の処理を検討 図8 カウントダウン中に一時停止要求があった場合の処理を検討

カウントダウンが終了した場合の処理を検討

 そして、再びイベントリストを参照してみると、カウントダウンが終了した場合、「カウントダウンを停止し、アラーム音を出力する」仕様となっています。そのため、新たにアラーム音を出力している「アラーム音出力」状態を作成し、「スタートストップボタン」イベントが入力された場合は、「アラーム音出力」状態へ遷移するように記述します(図9)。

カウントダウンが終了した場合の処理を検討 図9 カウントダウンが終了した場合の処理を検討

アラーム音を停止する場合の処理を検討

 最後に、イベントリストを参照してみると、アラーム音出力中に、「スタートストップボタン」イベントが入った場合は、「アラーム音停止」を行う仕様となっています。その際、遷移先は何処にすべきでしょうか。

 再び、時間設定を行い、カウントダウン(時間計測)を行う場合、「初期」状態に遷移するべきです。また、時間設定を行わずに、カウントダウン(時間計測)を行う場合は、「時間設定」状態に遷移するべきです。そのため、迷ってしまいます。

 ここでは、「時間設定」状態に遷移することとします。次は、「時間設定」状態において、再び、時間設定を行い、カウントダウン(時間計測)を行う場合の処理を含めて検討します(図10)。

遷移モレの確認 図10 遷移モレの確認
       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.