Webマガジン
「SysMLを活用した振る舞い検討」
株式会社オージス総研

2010年12月号
  • 「SysMLを活用した振る舞い検討」
株式会社オージス総研   青木 淳

1.SysMLを活用した振る舞い検討

 前回に引き続き、下図の電光掲示板を例題にSysMLを活用して「振る舞いの検討」を実施してみます。

コンテキスト図
図 1 コンテキスト図

1.1.電光掲示板の振る舞い検討

 ここではアクティビティ図を用いて電光掲示板に要求されている機能を洗い出します。コンテキスト図及び前回纏めた要求図を元に、電光掲示板全体の動作をアクティビティ図で記述すると以下になりました。

電光掲示板のアクティビティ図造
図 2 電光掲示板のアクティビティ図

 電源がONされるとグラフィック生成アクションとMatrix LED制御信号生成アクションが同時に動作可能になります。
 グラフィック生成アクションは<<discrete>>で離散的な文字列を入力としているので、電源ON時の初期グラフィック生成後は文字列受信イベントが発生しないと動作しません。又、ドット列情報以外に{control}で表現されるコントロール値をMatrixLED制御信号生成アクションに渡すので、グラフィック生成アクションはMatrixLED制御信号生成アクションをOn/Off出来ることが分かります。アクション右下の熊手型はcallBehaviorアクションと呼ばれ、詳細は別のアクティビティ図に記述されている事を示しています。MatrixLED制御信号生成アクションをOn/Offするアクティビティ詳細はそちらを参照することになります。
 Matrix LED制御信号生成アクションは<<continuous>>で連続的にドット列情報を受け取りMatrix LED制御信号に変換して送り出しています。但し、{control}で表現されるコントロール値をグラフィック生成アクションから受け取るので、このアクションの動作はグラフィック生成アクションから制御されます。この詳細もグラフィック生成アクション同様、別アクティビティ図に記述されていることが熊手型のアイコンで分かります。
 電源ON後の点線で囲まれた領域内では、電源OFFになるといつでも全動作を終了します。
 また、この図から今までの要求分析に電源ON・OFFに関する記述が漏れていた事が判ります。

<<SysML解説>>

 アクティビティ図はフローチャートに代わる図です。黒丸は一連の処理(アクティビティ)の開始、二重丸は終了を表します。角丸四角形は個々の処理(アクション)を表し、四角形の左側に凹みのある形はアクションの特殊な場合で受信イベントを表します。アクションの特殊形は他にもシグナル送信・時間イベントがありますが、図中では用いていません。
 アクション間を結んでいる矢印をコントロールフローと呼び、根元から矢先の順番で処理が実行されることを表します。角が丸くない普通の四角形は処理の間で授受される情報や物などを表します。
 図中の縦長の太線は、線の分かれた先が同時に処理される事を示します。図中では使用されていませんが、フローチャートのように菱形で分岐を表現する事もできます。

 SysMLでアクティビティ図に加わった変更のうち大きなものは、コントロールフローがアクションの開始だけでなく停止も表現できるようになった事と、連続的に情報や資源(オブジェクトノード)が流れるアクティビティを表現できるようになった事です。
 UMLではコントロールフローはアクションの開始を意味するだけでしたが、SysMLではコントロール値というデータ型を導入する事によって開始だけでなく停止も表現できるようになりました。たとえばタイヤの摩擦係数が一定値以下の場合のみABS制御を行うなど、連続的に投入されるオブジェクトノードに対しアクションを行うのか否か規定する表現が可能となります。具体的には<<controlOperator>>というステレオタイプが定義されていて、コントロール値の制御を行うアクションであることを明示できるようになっています。
 連続的なオブジェクトの流れを扱うために<<rate>>というステレオタイプがデータフローに導入されています。図中の<< discrete >>や<<continuous>>は<<rate>>の特殊タイプで、<< discrete >>は<<rate>>の時間間隔が0ではない、つまり離散的に投入される事を表しています。<<continuous>>は<<rate>>の時間間隔が0、つまり連続である事を表しています。<<rate>>を指定する場合は時間間隔も指定します。
 また、オブジェクトノードに対して<<overwrite>>、<<nobuffer>>というステレオタイプが用意されています。<<overwrite>>は、オブジェクトノードが持つバッファが一杯になった時に新たなオブジェクトが投入されるとオブジェクトが上書きされることを表します。上書きのされ方はオブジェクトノードのバッファ構造に依存していますが、規定では最後に参照されるオブジェクトノードが上書きされる事になっています。たとえばFIFOでは最初に入ったオブジェクトノードが最初に参照されるため、最後に入ったオブジェクトノードが上書きされます。FILOの場合は逆に、最後に入ったオブジェクトノードが最初に参照されるので、最初に入ったオブジェクトノードが上書きされます。通常のシリアル通信などではバッファが一杯になるとそれ以上は電子の塵となって消えてしまうので<<overwrite>>ではありません。
 <<nobuffer>>はアクションによってオブジェクトノードが処理されなかったらバッファされずに消えてしまう事を意味し、これにより電子回路の信号線が表現できます。
 なお、<<continuous>>であるフローを流れるオブジェクトノードでは<<overwrite>>と<<no buffer>>は同じ意味を持ちます。
 出力されるオブジェクトノードに対して確率を設定できる規定も加えられました。図では用いていませんが、たとえば80%はキャッシュにヒットする場合のフロー、20%はキャッシュにない場合のフローといった処理が記述できます。
 この他にもオブジェクトノードのピン表記や事前条件・事後条件の記述など、細かい追加がされていますが詳細は割愛します。

1.2.振る舞いの構造確認

 次に、電光掲示板の振る舞い構造をブロック定義図にまとめます。

電光掲示板のアクティビティ構造
図 3 電光掲示板のアクティビティ構造

 起点となるアクションは電源ON、電源OFF、文字列受信の3つあり、電源ONから直接駆動されるアクションはグラフィック生成とMatrix LED制御信号生成の2種類である事を構造として示しています。

<<SysML解説>>

 SysMLのブロック定義図は様々な文脈で使われます。システムの様々な側面に対し、構造を記述するのがブロック定義図、内容を記述するのが他の図という構図となっています。
 たとえばシステムの接続関係を記述する場合はシステムの階層構造はブロック定義図で、ブロックの接続関係は内部ブロックで記述します。

 振る舞いに関しては呼び出し構造をブロック定義図で、動作をアクティビティ図で記述します。このブロック定義図は構造化分析に使える図です。
 制約に関しては制約の定義をブロック定義図で、制約関係をパラメトリック図で記述します。
 ポートを流れるフローオブジェクトに関しても定義はブロック定義図でインターフェースやフロー定義を行い、流れる場所は内部ブロック図やアクティビティ図で記述します。
 このように、ブロック定義図はSysMLにおいて基点となる中核の図と言えます。次回はこの図を中心にSysMLを活用した構造検討について解説します。

2.まとめ

 SysMLを用いた振る舞いの検討では、UMLのアクティビティ図と異なり繰り返し投入される資源やデータの表現が可能です。それに伴い、アクションを開始するだけでなく停止することも表現できるようになりました。その他にも、ステレオタイプが細かく規定されたことにより、図の意図をノートに頼らずに詳細に記述することが可能になっています。
 振る舞いの検討をすることにより、プロジェクトメンバーがシステムの動作を視覚的に共有できます。また、要求分析で検討しきれなかった要求をあぶり出せることが多々あり、システムの早期安定が期待できます。
 SysMLの振る舞いの検討には、アクティビティ図以外にステートマシン図とシーケンス図が規定されていますが、これはUMLから変更が無いので説明は省略します。

*本Webマガジンの内容は執筆者個人の見解に基づいており、株式会社オージス総研およびさくら情報システム株式会社、株式会社宇部情報システムのいずれの見解を示すものでもありません。

同一テーマ 記事一覧
青木 淳  記事一覧
2010年12月号のコンテンツ



『Webマガジン』に関しては 弊社の「個人情報の取り扱いについて」に同意の上、
下記よりお気軽にお問い合わせください。

ページトップへ戻る