english japanese

要素間依存関係解析表 (DSM)

クラス、インタフェース、パッケージを対象に、要素間の依存関係を表(DSM: Dependency Structure Matrix)として見える化します。
DSMは、モデル編集と同時に自動更新されるため、モデルを作成、修正しながら構造の問題点をチェックできます。
このプラグインを使うことで、依存関係が集中している要素や循環参照を発見でき、チームでのレビューや個人の自己レビューにも役立ちます。DSMは「M PLUS」という別プラグインでも対応しています。

概要


インストール

  1. 上記Downloadボタンから dsm-x.x.x.jar ファイルをダウンロードします。
  2. .jar ファイルを、astah*図上にドラッグ&ドロップします。
  3. プラグイン概要のダイアログが表示されるので[はい]を選択します。
  4. 次に表示されるメッセージに従ってastah*を再起動します。
    astahプラグイン
    ※[プラグイン]メニューは、バージョン7.2以降のみに存在します。 7.1以前をご利用の方はこちら。
  5. 図を開いて、astah*画面右下(拡張ビュー)に[DSM]タブが表示されていれば、インストールは完了です。
    astah, 要素官依存関係解析表, DSM
  6. 拡張ビューが開かない場合は、メインメニューから[表示] - [拡張ビューの表示/非表示]を選択してください。
    拡張ビュー



リファレンス

■ 対象とする要素 ■


DSMタブで検出・表示する要素は次の通りです。

astah, 要素官依存関係解析表, DSM



■ 依存とみなす関係 ■


DSMタブでは次の関係が依存として検出、表示されます。

要素名 備考
関連 誘導不可能は単方向依存として扱います
関連(集約) コンテナから要素への単方向依存として扱います
関連(コンポジション) コンテナから要素への単方向依存として扱います
依存、使用依存、実現、テンプレートバインディング
汎化 サブクラスからスーパークラスへの依存として扱います
実現 Implementクラスからインタフェースへの依存として扱います
パッケージの依存関係 パッケージに含まれる要素はコンテナパッケージに依存するが、 マトリクスが見づらくなるため、セルに依存数を出力しません


■ 表示内容 ■


DSMタブでは以下のルールでセルの内容を表示しています。改善候補を目立たせることで、意図しない依存関係を明らかにし、改善を促します。

依存の内容 備考
循環参照(相互参照)がある要素間のセル デッドロックやデータの未開放の発生、モジューラビリティが低下する可能性があります
間接的な循環参照がある要素間のセル ピンク 循環参照と同様の問題が発生する可能性があります
5つ以上の要素から依存される要素の全カラムの背景色 黄色 責務が肥大している可能性があります。該当要素の変更時に、影響範囲が広くなる可能性があります


■ パッケージ選択コンボボックス ■


パッケージ選択コンボボックスでは、DSMに表示する要素の名前空間を「全て」、またはプロジェクト内の各パッケージから指定できます。

DSMのコンボボックス


■ 各ボタンの説明 ■


DSMのオプション
ボタン名 説明
モデル更新時に、自動的に表を更新 自動的に表を更新 モデルの更新時に、自動的にDSMタブの内容も更新します (デフォルト: ON)
タブの更新 タブの更新 [更新]ボタンをクリックして、DSM上の表示を更新します
Microsoft Excelにエクスポート Excelにエクスポート [Excelにエクスポート]ボタンをクリックして、DSMをExcelに出力します (詳しく見る)


■ 注意事項 ■


DSMの表示要素が100を超える場合は、下記の警告メッセージが表示されます。
「DSMに表示する要素数が100を超えます。パフォーマンス低下が予想されます。不要なパッケージを閉じることでパフォーマンスが改善されます。実行しますか?」




利用方法


■ DSMを使ってクラスの依存関係を確認する ■

  1. 次のようなクラス図を用意します。(クラス図の作成方法は、こちらを参照)
  2. DSMのクラス図
  3. [DSM]タブをクリックするとDSMが開きます。色の付いたセルは、リファレンスで紹介した依存関係の改善候補を示しています。
    (色分けのルールはこちら)
  4. DSMタブ
  5. まず、黄色セルが多く目に着きますね。セルが黄色になっていることから、Service2クラスに依存が集中していることが分かります。
    意図せずこのような依存関係になっている場合、クラスの責務が肥大している可能性があります。
    (ユーティリティクラスやコンポーネントの窓口となるインターフェースには、多くの場合、意図的に依存が集中します。)
    ここでは、Service2クラスを「Service2クラス」と「Service4クラス」に分割し、依存関係を分散することで解消しましょう。
  6. 依存関係集中の解消クラス図
  7. Service2クラスを分割すると、DSMタブで依存の集中を示す黄色のセルが白くなりました。
  8. 依存関係集中の解消DSMタブ
  9. 次は、赤色のセルに取り組みましょう。
    Service4クラスとService3クラスの交わるセルが赤くなっていて、循環参照であることが分かります。
    意図せずこのような依存関係になっている場合、データやインスタンスが開放されない(デッドロックやメモリリーク)問題や、モジュールの再利用性が低下するという問題につながります。
    このような依存関係を解消する方法は、設計指針によって異なります。
    今回は、循環参照が解決されたこととし、Serviceクラス3からServiceクラス4の依存関係を除去します。
  10. 循環参照の解消クラス図
  11. DSMタブで、循環参照を表わす赤色のセルが白に変わりました。
  12. 循環参照の解消DSMタブ
  13. 最後に、ピンク色のセルを解消しましょう。
    Service3クラス、Data4クラス、Data5クラスが、間接的に循環参照になっている(交わるセルがピンクになっている)ことがわかります。
    意図せずこのような依存関係になっている場合、循環参照と同じ問題につながる可能性があります。
    今回は、Data5クラスからService3クラスへの依存の方向が逆であることに気付いたものとして、Data5クラスからServiceクラス3への依存関係を、逆方向にします。
  14. 間接的な循環参照の解消クラス図
  15. 循環参照を表わしていたピンクのセルが白に変わりました。
  16. 間接的な循環参照の解消DSMタブ

astah*では、一つの要素を複数のクラス図で用いることができます。
このように、DSMを使って一元的に要素の依存関係を確認することで、意図しない構造の複雑性を見つけて、改善できます。



■ DSMを Microsoft Excel にエクスポートする ■

  1. [Excelにエクスポート]ボタンをクリックします。
  2. Excelにエクスポートボタン
  3. エクスポートダイアログが表示されます。[生成]ボタンをクリックするとDSMタブの内容が出力されます。
  4. エクスポート画面
  5. 「作成したドキュメントを自動的に開く」チェックボックスにチェックがある場合、Excelに出力した後、そのファイルを開きます。
  6. 出力されたExcel画面