DSM Add-In (0.5.1.0) | 2010-07-19 12:59 |
※下の図は、ちょっとした事情でEAのバージョン8.0のTrial版で作っていますが、ちゃんと購入してます。
Dependency Structure Matrixは、Design Structure Matrixとも呼ばれ、正方行列のマトリックスの形で要素間の依存関係をわかり易く表示してくれます。 もともとは、繰り返しやフィードバックが多い複雑な開発プロセスを、より効率の良いプロセスへと改善するために利用されました。 TechMatrixの解説によれば、1968年にDonald Steward氏によって開発されのだそうです。マサチューセッツ工科大学をはじめ多くの大学でDSMに基づいた研究が行われています。
DSMで依存関係を表示できるのは、開発プロセスに限りません。 DSM Add-Inでは、ソフトウェアの設計要素であるクラスやオブジェクトの依存関係の分析に利用します。
DSMは依存関係を表の形で表現します。
Class1 | Class2 | Class3 | Class4 | |
Class1 | - | 0 | 0 | 0 |
Class2 | 1 | - | 0 | 0 |
Class3 | 0 | 1 | - | 0 |
Class4 | 0 | 0 | 1 | - |
行方向(横方向)は、要素の被依存関係を示し、列方向(縦方向)は要素の依存関係を示します。 1になっているセルが依存関係を表し、0のセルは依存関係がないことを示しています。
このDSMは次のような意味になります。
UMLにおける設計をDSMで見る場合、クラス間、オブジェクト間の相互依存が気になります。
Class1 | Class2 | Class3 | |
Class1 | - | 0 | 1 |
Class2 | 0 | - | 0 |
Class3 | 1 | 0 | - |
Class1とClass3は相互依存していますが、上のDSMのように-で示した対角線をはさんで対称な位置のセルに1が入ります。対角線をはさんで対称な位置に1(チェック)があれば相互依存しているということで、設計上は駄目とはいはないまでも、ちょっとまずいかも?という合図になります。
パーティショニングの説明の前に、長い前置きがありますが、ただの前口上ではないので読んでください。
上のように、単に依存関係を見せているだけだと、あまり便利ではありませんが、これを並べ替えるとイロイロと面白いことがわかるようになります。
Class1 | Class2 | Class3 | Class4 | |
Class1 | - | 1 | 1 | 0 |
Class2 | 0 | - | 0 | 0 |
Class3 | 0 | 1 | - | 0 |
Class4 | 1 | 0 | 0 | - |
このDSMを見ると、散漫に依存関係が散らばっている感じですが、並べ替えると以下のようになります。
Class2 | Class3 | Class1 | Class4 | |
Class2 | - | 0 | 0 | 0 |
Class3 | 1 | - | 0 | 0 |
Class1 | 1 | 1 | - | 0 |
Class4 | 0 | 0 | 1 | - |
対角線の下半分にすべて依存関係が移動しています。これは、DSMの上のほうの要素から、下の要素に向けて依存関係がツリー状担っていることを示しています。
つまり、こんな風に綺麗に並べ替えられるような依存関係を持つ設計は、(たぶん)良い設計(だろう)ということが出来るわけです。逆に、並べ替えても対角線の上半分に参照関係がある場合は、要素間の依存関係をツリー状に並べようとしても下から上への依存関係があったりします。もしかすると、循環参照や相互参照が出来ているかもしれません。
。。。やっと、パーティショニングの説明です。
パーティショニングというのは、この綺麗に並べ替える作業です。この機能がないと、大きなDSMを手作業で並べ替えるのは実質不可能ですし、大きなDSMを単に眺めていても何のことやらわかりません。DSMを設計作業で使うためには肝の機能といえるでしょう。
パーティショニングの方法については、複数のアルゴリズムが知られています。 わかりやすいのは(英語ですが)以下のページです。
アドインでは、このページのThe Reachability Matrix Methodを使っています。
T.B.D. 気が向いて時間があったら、アルゴリズム解説かくかも? とりあえず、ソース読んでみてください。
T.B.D.
[ページ情報]
更新日時: 2010-05-02 00:03:47, 更新者: m-usami
[ライセンス]
FreeBSD Documentation License
[権限]
表示:無制限, 編集:ログインユーザ, 削除/設定:メンバー