YU2TA7KA's BLOG ~take one step at a time~

派生開発、組み込み開発周りのこと。

組み込みシステムのスペックアウトに向けたUML利用の検討

はじめに

前回より引き継いで、今回はUMLでスペックアウト*1することを考えます。UMLには13の図が用意されています。その中で、スペックアウトに利用できそうな使い方を検討します。

UMLとは

統一モデリング言語(Unified Modeling Language)は、主にオブジェクト指向分析や設計のための、記法の統一がはかられた(Unified)モデリング言語(Modeling Language)である。仕様記述言語であるなどとされることもあるが、統一されているのは構文に相当する記法だけで、仕様を表現するような意味が形式的に与えられていない図もあるので、形式仕様記述言語ではない。 Wikipediaより。

UML一覧

構造を表現するダイアグラム
No. 構図 概要
1 クラス図 クラスの構造やクラス間の関係、役割を表現
2 オブジェクト図 特定下におけるオブジェクト同士の関係を表現
3 コンポジット構造図 クラスやコンポーネント等の内部構造と関係を表現
4 コンポーネント図 ソフトウェアコンポーネントの構成を表現
5 配置図 ハードウェア、ディレクトリなどどうプログラムを配置するかを表現
6 パッケージ図 クラスが、どのパッケージにグループ化されているかを表現
7 ユースケース図 機能と、利用者や他システムなどの外部との関係を表現
振る舞いを表現するダイアグラム
No. 振る舞い 概要
8 シーケンス図 相互作用するオブジェクト間メッセージ送受信を、時間系列で表現
9 コミュニケーション図 相互作用するオブジェクト間メッセージ送受信を、オブジェクト間の接続関係に焦点を当てて表現
10 タイミング図 リアルタイムのような短時間での状態遷移や時間制約、メッセージ送受信などを表現
11 相互作用概要図 相互作用図どうしの関係の概要図。シーケンス図、アクティビティ図等で表現
12 ステートマシン図 1つのクラスに着目し、そのオブジェクトの生成から破棄までの状態遷移を表現
13 アクティビティ図 システム(や業務)のアクティビティ、データの流れ、アクティビティ実施の条件分岐などを表現

参照qiita.com

組み込みシステムのスペックアウトに向けたUML利用の検討

上記UMLの中から組み込みシステムのスペックアウトに利用できそうなダイアグラムをピックアップして使い方を検討します。

シーケンス図

正常系と異常系の振る舞いを描き出すことで、処理の流れを可視化できます。利用されるクラスが描き出され、クラス間の処理の呼び出し関係を示すシーケンス図は仕様書でよく見られます。そのため、スペックアウトとしても、シーケンス図を利用することは有用であると考えられます。しかし、シーケンス図は使いやすいため、作成者が描きたいように自由に作成していることも散見されます。UMLの記法に完全に合わせる必要はありませんが、UMLのシーケンス図を描く意識はもって作成するべきでしょう。特に、分岐や繰り返しなど順次の制御から外れるところの描き方は基本的にはUMLに準拠するように記述すべきだと考えます。分岐や繰り返しがUMLの記法を一切無視したシーケンス図を見たことがありますが、理解不能でした。

クラス図

正常系の処理に関わるクラスを抽出し、クラス図にまとめることで、対象モジュールの重要なクラスとクラス間の関係を抽出できそうです。特に、前回のソースコードからのコピペだけでは、わからなかった継承関係やメンバ変数の持ち方なども可視化出来そうです。クラス図自体全てのクラスを描き出す必要はなく、主要なクラスを描き出そう、というスタンスなので、その考え方にも合致していると思います。

タイミング図

HWデバイス制御時に適宜利用しているダイアグラムと考えます。各信号の状態によって、制御条件を変更させることを考える際に、タイミング図は無意識的に利用していると思います。特にHWチームが利用しているため、それを観るという場面によく遭遇します。HWチームから出された資料と思うと、少し畑違いに思ったりするのですが、タイミング図はUMLの一つだと思うと、身近に感じるので、タイミング図は存在を認識しておくことが重要な気がします。

配置図

配置図はソースコードから抽出するわけではないため、スペックアウトではないかもしれません。しかし、HWと密接な位置にある組み込みSWの開発においては、配置図は利用すべきダイアグラムだと考えます。組み込みSWのモジュール制御を考えるだけの場面では、直接的には不要かもしれません。しかし、組み込みシステムの最終的な成果物を考えた場合、それは「HW+組み込みSW」の形になります。そのため、組み込みSWがHW上のどこに位置づけられるかは可視化しておくべきと考えます。HWチームと議論する時に役立つと思います。

まとめ

4つのダイアグラムを取り上げました。これ以外のダイアグラムも利用可能とは思いますが、私がすぐに利用できそうと考えるダイアグラムはシーケンス図、クラス図、タイミング図、配置図の4つです。特に、シーケンス図を描いて、そこで利用するクラスをクラス図にまとめることができれば、対象モジュールに関する情報はかなり可視化されると考えます。加えて、制御内容によってはタイミング図を描くことで、最もHWに近い部分の制御も明確になると考えます。そして、別途配置図も用意できれば組み込みシステム全体の可視化に近づいてきそうです。以上が検討になります。実際に試してはいないため、機会があれば実践したいと思います。



参考資料

USDMとモデル併用による仕様もれ早期発見方法の提案
http://affordd.jp/conference2014/affordd_conference2014_p5.pdf
 こちらでは、スペックアウトにはユースケース図、クラス図、パッケージ図、シーケンス図を利用されたとのことです。

参考図書

UMLについて非常にわかりやすくまとまっており、良い本でした。

*1:既存の仕様書が十分出ない場合、ソースコードから不足する情報を抽出し、資料へまとめる作業。