« コード解析にDFDを使う? | トップページ | 状態遷移のAction設計してます? »

2011年7月 4日 (月)

状態って、どうやって抽出します?

だいぶ以前から”書く書く”と言っていた、状態遷移図についての話が、Intreface誌の連載第8回でやっと載せました。

この記事でとりあげた例は、UARTの通信制御の状態遷移図です。
UARTで受信するパケットのフォームに応じた状態を設けて、一連の受信制御を行っています。

Uart

状態遷移図って、お馴染みの方は割と多いと思います。
では、その皆さんに質問です。状態ってどうやって抽出します??
状態遷移図を良く使ってはいても、この本質的な問題って、結構難しいと思います。

この記事の本編では、こんなことを書きました。


同じ入力データであっても,事前に何があったかによってプロセスの対応が異なる場合があるのです.このような振る舞いのことを,「順次処理コントロール」と言います.この順次処理は,DFDだけでは表すことが出来ません.このような場合には,状態遷移図を用いてプロセスの振る舞いを捉えたモデルを作成する方が適しています.

今回の例(UART制御)や、画面遷移のように、状態遷移させるイベントの元が明確であり、それらをどう扱うかを切り替えるための”状態値”は割と考えやすいでしょう。
世の中にはそれ以外のモデルも沢山あると思うのですよね。
よく使われている電子ポットの例で考えると...
 ● 保温中・沸騰中 といった、ユーザから見たシステムの稼動状況で状態を捉える
 ● 蓋OPEN ・ CLOSE といった、モノの物理的状況(=センサの感知状況)などを状態として捉える
というのがあります。

他には、どんな状態抽出の考え方があるのでしょう。
これって、前々から考えていることなのですが... 何か文献などあれば、知りたいなと思うのです。
ぜひ、皆さんコメントにて教えていただけると嬉しいです。


mobaq最後にクイズ
Interface誌掲載時と、上記の絵には違いがあります。さてどこでしょう?
(紙面を持っている方だけが分かる ... coldsweats01)
あっ、アクションが記入されていることではありませんよ。

※ 関連記事: Interface 2011年8月号


« コード解析にDFDを使う? | トップページ | 状態遷移のAction設計してます? »

Interface記事」カテゴリの記事

ソフトウェア開発」カテゴリの記事

構造化分析・設計」カテゴリの記事

コメント

「状態抽出」の考え方,気になりますね.
ちょっと意識して文献を探してみます.あてにしないで気長に待っていてください.

たぶんですが、状態の抽出の方法としては、時間のパラメータの入ったシステムを考えると、ミクロ的な分割と集約があると思うんです。具体的には、UARTの例でいえば、電文を構成する1バイトのデータ間のタイムアウトが定義されている場合を考えます。時間の経過というものも状態の分割のひつとつとして考えます。すると、ここに挙げられた状態のすべてに、時間の経過の状態を考慮しなければいけません。
いま、このような、時間の経過に着目した状態とか、タスク分割を考えています。

kitamuraさん、コメントありがとうございます。

”時間の経過” を捉えて ”状態” を抽出する考え方も一つありますね。
その場合でも、時間を区切る(いわゆる状態の境界)を、どうにかして見つけますよね。 UARTであれば、タイムアウトのような時間に関する仕様を境界にする、または、通信フレームによって状態を分けるなど、いろいろな見つけ方があります。

また、時間の観点では違う状態と命名できる場合でも、イベントに対して同じ振る舞いをするときには、あえて状態を分けないこともあると思います。


本文にあるように、『同じイベントに対して、違う振る舞いをする場合に”状態”を分ける。』 という基本はわかっていても、これが見つかるのが設計がだいぶ進んでからだったりします。 そうすると、状態遷移を設計するときに、最後の最後まで”状態”の抽出自体に迷ってしまうかな。。。 と思うのです。

などなど、考えると状態遷移設計って、悩ましいなと思ったしだいです。
(ちょっと取り留めのないお返事ですが...)

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/571478/52119587

この記事へのトラックバック一覧です: 状態って、どうやって抽出します?:

« コード解析にDFDを使う? | トップページ | 状態遷移のAction設計してます? »