01

13

状態マシン図セミナー2014年2月 事前宿題

2014.01.13(14:30)

状態マシン図設計セミナーにようこそ。

よいソフトウェアを作成するには、プログラムを書く前に、静的な構造や動的なふるまいなど、複数の見方でソフトウェア仕様を正確に表現することが大切です。このセミナーでは動的なふるまいを表現するための、UML2.0 状態マシン図にしぼって、その読み方、描き方を身に着けることを目的とします。

動的なふるまいをもつシステムで、お客様の要求をどのように分析すれば、ソフトウェアに変換可能な仕様書を作り出せるでしょうか。プログラムに落としたときには正常系も異常系もありません。あらゆる状態のときに、あらゆるイベントが起きた場合、どうすればいいか、すべてきちんと仕様書に定義されていなければ、完全なプログラムを書くことはできません。テストもできません。

状態マシン図の読み方、描き方に加えて、自分で描いた状態マシン図のセルフレビュー方法も身に着けます。描かれた図面を見て、お客様の要求が盛り込まれていない部分を見つけたり、不具合がどこにあるのか見抜く力も必要です。分析モデルと設計モデルの違いを知ることも大切です。移植性の低い描き方も避けたほうが良いです。動的なふるまいをきちんととらえられる、優れたソフトウェア設計者になるための必須スキルのひとつを、いっしょに学びましょう。

今回の状態マシン図セミナーのレベルを把握するために、事前宿題を用意しました。当日までにやってきてください。
(1) 解答はA4用紙に手書きでけっこうです。もちろんツールで描いてくださってもOKです。
(2) 自分自身のスキルアップのための演習問題です。ネットで解答を検索しないでください。
(3) 提出していただいた解答は、正しいものも間違っているものも教材です。当日のセミナーでの教材と次回以降の教材として活用させてください。
(4) 宿題は当日持ってきてください。解けたところまでで結構です。持ってくることが参加条件です。難しかったら、問題を写してくるだけでもOKです。


【宿題】
sesalet_class.png
これは、温水洗浄便座 セサレット のクラス図です。(静的な構造)
コントロールパネルとシートセンサーは別になっていて、
今回は、セサレットの状態マシンだけを設計します。
セサレットに届くイベントは4種類です。
シートセンサーからは、【着座検出】と【起立検出】。
コントロールパネルからは、【おしりボタン】と【停止ボタン】です。

sesalet_state.png
これは、セサレットの状態マシン図です。(動的なふるまい)
セサレットには、
「着座センサーOFF」の状態と、「着座センサーON」の状態があります。
「着座センサーがOFF」のときに、着座検出すると、「着座センサーON」の状態になります。
「着座センサーON」のときには、【おしりボタン】が有効で、
【おしりボタン】を押すと、「おしり洗浄中」になります。
「おしり洗浄中」は、【停止ボタン】を押すと止まります。
【停止ボタン】を押さなくても60秒たつとタイムアウトが発生して止まります。(安全のため)
(文章で説明されたものと状態マシン図を見比べてください。状態マシン図のほうがわかりやすく正確ですね)

washlet.jpg
この写真は他社製品のイメージなので、以下の問題と微妙に違います。

【問題1】
このセサレットに、【ビデボタン】と、【乾燥ボタン】を追加してください。
状態マシン図に追加して設計してください。

要求:「おしり洗浄中」に【乾燥ボタン】を押すと、おしり洗浄が止まって乾燥を開始してください。
(そのほかも同様にしてください。おしり洗浄とビデ洗浄と乾燥はどれか1つしかできません。)

【問題2】
問題1を解いたセサレットに、【流すボタン】を追加してください。

要求:着座しているときも、着座していないときも、流せるようにしてください。
また、流し始めると、途中で止める方法はありません。

【問題3】
問題2を解いたセサレットに、
おしり洗浄のムーブ機能、
ビデ洗浄のムーブ機能
を追加してください。

要求:おしり洗浄は、【ムーブOFF】と【ムーブON】の状態があり、【おしりボタン】を押すたびに交互に変えてください。
このときも、おしり洗浄は、開始してから60秒あとに必ず止めてください。
ビデ洗浄も同様に処理してください。

【問題4】
問題3を解いたセサレットを仕様変更して、【流す小ボタン】、【流す大ボタン】にしてください。さらに、
着座してから、60秒以内に起立すると、流す小が、
着座してから、60秒あと以上に起立すると、流す大が
自動的に起きるように追加してください。
さらに、着座中に、一度でも【おしりボタン】が押されれば、流す大が
自動的に起きるようにしてください。

以上です。
お客様の要求はいつも不完全なので、書かれていない部分は適当に補って、
安全安心側に設計してください。


このようなレベルの状態マシン図が読めて、描けて、セルフレビューできるようになる、が今回のセミナーの目標です。

状態マシン図にはさまざまな描き方があり、正解はひとつではありません。他人が設計したモデルと比較してみましょう。他人が作ったモデルをレビューするとともに、自分が作ったモデルもレビューしてもらいましょう。そこにはたくさんの発見があります。

すでに完成したモデルからは学ぶところが少ないです。モデルを完成させる過程からは学ぶことがたくさんあります。

それでは、状態マシン図設計セミナーでお会いしましょう。
プロフィール

島敏博

Shima Toshihiro 島敏博
信州アルプスハイランド在住。HaskellとElixirが好き。組み込みソフトウェアアーキテクト、C++プログラマ、山歩き、美術館巡り、和食食べ歩き、日本赤十字社救急法指導員、インデックス投資、クラシック音楽、SESSAME会員、状態マシン設計、モデル駆動開発、ソフトウェアプロダクトライン、Rubyist、実践ビジネス英語

■ ツイッター
http://twitter.com/saltheads
■ Facebook
http://www.facebook.com/saltheads
■ Qiita
http://qiita.com/saltheads

印刷する場合は、ブラウザの印刷メニューではなく、このページの上から3cmくらいの青いところにある、「印刷」を押してみてください。少しうまく印刷できます。まだ完全ではないのですが、これで勘弁してください。


カテゴリ
最新記事
月別アーカイブ
最新コメント
検索フォーム
リンク
sessame
RSSリンクの表示