**********************************************************************
セッションs5d
テーマ:SESSAME UML2状態マシン図設計ミニセミナー(後半) ~ソフトウェアに変換可能な仕様書をかけるようになろう~
講師:島敏博(セイコーエプソン株式会社)
日時:2017/8/25 14:30-15:40
参加人数:13名(終了時)
**********************************************************************

本セッションでは、質疑を常に受け付け、ディスカッション形式で行いました
そのため、本議事録も時系列順に質疑を記録しています

※お知らせ※
本セッションは SESSAME 状態マシン図設計セミナーの一部をコンパクトにまとめたものです。
本編は11月27日(月)〜28日(火)の2日間、東京にて開催されます。
詳細は1ヶ月前ごろに http://www.sessame.jp/ に掲載予定です。


状態やアクションは、お客様が使われている言葉から選んで命名すると良い

~合成状態 コンポジット状態~
内部に領域がある場合のこと
もし、状態3の中に領域がある場合、状態3は合成状態という
中にある状態のことは状態3から見て下位の状態という・逆は上位の状態
入場時アクションは上位の入場時アクションから順に実行される
退場時アクションは下位の退場時アクションから順に実行される
下位の状態と上位の状態で同一のイベントで発火するように設計されていても、イベントは1つあたり1回しか発火しない

イベントは同時に起きることはあるが、UMLでは想定しない
同時に起きた場合、どちらを優先するかは実装で決めてください

~直交合成状態~
1つの状態の内部に領域が2個以上ある状態
状態3に領域が2つある場合、状態3はAND状態という
各領域の中の状態の掛け算の数だけ、状態があることになる。
そのため、領域を増やすとテストが掛け算で大変になる

~選択擬似状態~
擬似状態とは、その状態にとどまっていられない状態のこと
選択擬似状態はひし形で表される ガードによって分岐先を判断する

~UMLで決められていないこと~
どの状態に入るかの判断 IS_IN(状態名)
状態マシンにイベントを投入すること GEN(イベント名)
タイムアウト tm(タイムアウト時間)

上記3つをどう表記するかは、実装依存だから、UMLでは決められていない。
設計するのにこの3つは必ず必要なので、会社やプロジェクトやチームで決めておいてください。      

~p23 演習~
自動ドア問題*2
仕様に書かれていないことは安全を考慮した設計にしてください
合ってるかよりもレビューをしあうことが大切
レビューのポイントはまず、UML的に表記方法があってるか、
次にお客様の要求を満たしているか

~お知らせ~
一人2万円で議論をみっちりやる
図面がどういうコードに対応するかもやっていく

**********************************
質問
コンポジット状態の中の状態にも直接アクセスできる?
状態マシンはどの状態からどの状態でもいける
行き先がコンポジット状態の中の状態でもいけるし、その逆もいける
それが、いい設計になるかは別だが、書けるか書けないかでいうと書ける
**********************************

~p27 演習~
30分でオフになるFM-AMラジオ
目的:タイムアウトをどこから計測始めるかをきちんと議論しなければいけない

~状態マシン図の例の紹介~
写真プリンタ
全ての状態で、全てのイベントが起きた時にどうするか決まっていなければソフトウェアにできない
コーヒータンク
開始擬似状態に遷移しないモデルもありうる

クラス図にデザインパターンがあるように、状態マシン図にもいくつかのパターンがある

~領域を途中から始めたい場合~
コンポジット状態のある状態に遷移する場合、指定された状態が属する領域はその状態から、他の領域は開始疑似状態から

~揃って入場したい場合~
フォーク状態

~揃ったら退場したい場合~
ジョイン擬似状態
二つの領域がそれぞれ指定された状態に遷移した場合、次の状態に遷移する
領域から外に出る時に使う
同期をとる場合の遷移にはイベントやガードは書けないが、揃った後の遷移にはイベントやガード、アクションを記述可能

最後に、参考文献を羅列し、どの点が良いのかも合わせて、スライドに載せてある