Recent Changes

2010-06-26
2010-05-02
2010-05-01
2010-04-27

Latest File Release

DSM Add-In (0.5.1.0)2010-07-19 12:59

Wiki Guide

Side Bar

DSM(Dependency Structure Matrix)

※下の図は、ちょっとした事情でEAのバージョン8.0のTrial版で作っていますが、ちゃんと購入してます。

DSM(Dependency Structure Matrix)とは?

Dependency Structure Matrixは、Design Structure Matrixとも呼ばれ、正方行列のマトリックスの形で要素間の依存関係をわかり易く表示してくれます。 もともとは、繰り返しやフィードバックが多い複雑な開発プロセスを、より効率の良いプロセスへと改善するために利用されました。 TechMatrixの解説によれば、1968年にDonald Steward氏によって開発されのだそうです。マサチューセッツ工科大学をはじめ多くの大学でDSMに基づいた研究が行われています。

DSMで依存関係を表示できるのは、開発プロセスに限りません。 DSM Add-Inでは、ソフトウェアの設計要素であるクラスやオブジェクトの依存関係の分析に利用します。

DSMの見方

DSMは依存関係を表の形で表現します。

DSMサンプル.png

Class1Class2Class3Class4
Class1- 0 0 0
Class21 - 0 0
Class30 1 - 0
Class40 0 1 -

行方向(横方向)は、要素の被依存関係を示し、列方向(縦方向)は要素の依存関係を示します。 1になっているセルが依存関係を表し、0のセルは依存関係がないことを示しています。

このDSMは次のような意味になります。

  • Class1はほかのクラスには参照されていない。Class2を参照している。
  • Class2はClass1に参照されている。Class3を参照している。
  • Class3はClass2に参照されている。Class4を参照している。
  • Class4はClass3に参照されている。他のクラスを参照していない。
  • (対角は自分自身なので無視してOK)

UMLにおける設計をDSMで見る場合、クラス間、オブジェクト間の相互依存が気になります。 相互依存.png

Class1Class2Class3
Class1- 0 1
Class20 - 0
Class31 0 -

Class1とClass3は相互依存していますが、上のDSMのように-で示した対角線をはさんで対称な位置のセルに1が入ります。対角線をはさんで対称な位置に1(チェック)があれば相互依存しているということで、設計上は駄目とはいはないまでも、ちょっとまずいかも?という合図になります。

パーティショニング

パーティショニングの説明の前に、長い前置きがありますが、ただの前口上ではないので読んでください。

上のように、単に依存関係を見せているだけだと、あまり便利ではありませんが、これを並べ替えるとイロイロと面白いことがわかるようになります。

パーティショニング1.png

Class1Class2Class3Class4
Class1- 1 1 0
Class20 - 0 0
Class30 1 - 0
Class41 0 0 -

このDSMを見ると、散漫に依存関係が散らばっている感じですが、並べ替えると以下のようになります。

パーティショニング2.png

Class2Class3Class1Class4
Class2- 0 0 0
Class31 - 0 0
Class11 1 - 0
Class40 0 1 -

対角線の下半分にすべて依存関係が移動しています。これは、DSMの上のほうの要素から、下の要素に向けて依存関係がツリー状担っていることを示しています。

つまり、こんな風に綺麗に並べ替えられるような依存関係を持つ設計は、(たぶん)良い設計(だろう)ということが出来るわけです。逆に、並べ替えても対角線の上半分に参照関係がある場合は、要素間の依存関係をツリー状に並べようとしても下から上への依存関係があったりします。もしかすると、循環参照や相互参照が出来ているかもしれません。

。。。やっと、パーティショニングの説明です。

パーティショニングというのは、この綺麗に並べ替える作業です。この機能がないと、大きなDSMを手作業で並べ替えるのは実質不可能ですし、大きなDSMを単に眺めていても何のことやらわかりません。DSMを設計作業で使うためには肝の機能といえるでしょう。

パーティショニングのアルゴリズム

パーティショニングの方法については、複数のアルゴリズムが知られています。 わかりやすいのは(英語ですが)以下のページです。

Partitioning a DSM

アドインでは、このページのThe Reachability Matrix Methodを使っています。

T.B.D. 気が向いて時間があったら、アルゴリズム解説かくかも? とりあえず、ソース読んでみてください。

ティアリング

T.B.D.

関連リンク