モデルを使って仕様を整理する(1.状態)
はじめに
システムを設計、またはプログラムを書いていると状態というものが出てきます。
状態とは、システムのある期間を表したもので、何かしらのイベントを契機に変化していきます。
身近なものだとPCの起動中、停止中、スリープ中、再起動中といったものが状態になります。
プログラムやデータにある○○フラグ、○○ステータスというものは大抵は、状態を表しています。
状態は、システムの動作(振る舞い)を制御する上で必要なものですが、複雑になりやすく、抜け漏れがあると想定外の動作による不具合につながってしまいます。
そこで、今回は状態を整理する上で便利なモデルを紹介します。
モデルとは
振る舞いや性質、関連を特定の観点で抽象化して表現したものになります。
開発で良く利用するフローチャートやマトリクス図、クラス図、ER図などはモデルにあたります。
モデルで表現するメリット
- 自然言語と比較して曖昧さを除外することができる
- 全体を直感的に把握することができる
- 矛盾、抜け漏れを見つけやすい
状態を表すモデル
状態を表すには、状態遷移モデル(状態遷移図、ステートマシン図)、状態遷移表を使用します。
モデルを使った状態の表現
モデルを使って状態が相互作用の中でどのように遷移していくのかを表現します。
例)
簡単なストップウオッチの状態遷移モデル
自然言語での表現
- 「電源」「スタート」「ストップ」「リセット」の4つのボタンがある
- 「電源」ボタンを押すと電源が入り待機中となる
- 電源が入った状態で「電源」ボタンを押すと電源が切れる
- 「スタート」ボタンを押下すると計測を開始する
- 「ストップ」ボタンを押下すると計測を一時停止する
- 一時停止中に「スタート」ボタンを押下すると計測を再開する
- 一時停止中に「リセット」ボタンを押下すると計測時間をリセットする
モデルを使った表現
- 状態遷移モデル
- 状態遷移表
状態遷移モデルと状態遷移表
状態遷移モデルに比べて、状態遷移表は目にする機会が少ないかも知れません。
変化を表現するには、状態遷移モデルと状態遷移表の両方で表現した方が効果的です。それは、二つのモデルが補完関係にあるからです。
状態遷移モデルは、状態、状態の遷移、遷移するイベントを洗い出すのに向いています。一方、状態遷移表は、それらに抜け漏れがないかを確認するのに向いています。
状態遷移モデルで、全体の流れを整理し、状態遷移表で状態の遷移があり得るのか、あり得る場合はなんのイベントなのか またはその逆を確認することで状態の遷移の考慮漏れを未然に防ぐことができます。
まとめ
3つの状態の変化を表現するだけでもモデルを使用することで、自然言語より直感的に理解できたのではないでしょうか。
設計やコーディングする際に、"xxxステータス","xxxフラグ"が出てきたら、ぜひ一度立ち止まって状態を整理してみてください。
Discussion