依存関係グラフ

CppDepend 依存関係グラフでコードの複雑さを解読

CppDepend は、インタラクティブな依存関係グラフ、依存関係構造マトリックス、コードクエリ機能を通じて、既存のコードアーキテクチャを探索するユーザーを支援する幅広い機能を提供しています。

入門ビデオ (3分)

とのコラボレーションにより:

  • インタラクティブな依存関係グラフ
  • 依存構造マトリクス
  • インタラクティブコードクエリの可能性
  • Visual Studio コード エディター ウィンドウの右クリック メニューで利用可能なメニュー
  • Visual Studio ソリューション エクスプローラーの右クリック メニューで利用可能なメニュー

…CppDepend は、既存のコードアーキテクチャの探索を支援する幅広い機能を提供しています。この記事では、これらの機能を活用して最も一般的なコード探索シナリオを実現する方法を学びます。

依存関係グラフ

デフォルトでは、CppDepend 依存関係グラフ パネルにプロジェクト間の依存関係グラフが表示されます:

プロジェクト間の依存関係グラフ

プロジェクトを選択し、右クリック メニューから、名前空間間の依存関係グラフを探索できます。

名前空間間の依存関係グラフ

また、各名前空間について、CppDepend は名前空間内の型間の依存関係グラフを探索できます。

名前空間内の型間の依存関係グラフ

また、右クリック メニューから、型のメンバー(メソッド + フィールド)間の依存関係グラフを探索できます。

メンバー間の依存関係グラフ

トップへ

Call Graph

CppDepend は 2 つの手順で、必要な任意の呼び出しグラフを生成できます。

  • まず: 型、フィールド、メソッド、名前空間、またはプロジェクトの直接および間接の呼び出し元/呼び出し先を要求します。その結果、要求されたすべての呼び出し元または呼び出し先に一致する次の CQLinq クエリが生成されます。コールグラフCQLinq クエリ結果では、メトリックが DepthOfIsUsing/DepthOfIsUsedBy 使用の深さを示します(1 は直接、2 は直接のユーザーを介した使用など)。CQLinq クエリは、使用の深さに関する特定の条件で間接の呼び出し元/呼び出し先のみに一致するように簡単に変更できます。また、要求される呼び出し元/呼び出し先は、必ずしも対象のコード要素と同じ種類である必要はないことに注意してください。たとえば、ここでは型を直接または間接的に使用しているメソッドを要求しています。
  • 次に: CQLinq クエリがユーザーが希望する呼び出し元/呼び出し先のセットに一致すると、一致結果のセットを依存関係グラフにエクスポートできます。これにより、希望の呼び出しグラフが表示されます。コールグラフ

トップへ

クラス継承グラフ

継承クラスグラフを表示するには、前のセクション(呼び出しグラフの生成について)で示したのと同じ 2 段階の手順を適用する必要があります。

  • まず: 特定のクラスから継承する(または特定のインターフェイスを実装する)クラスのセットを求める CQLinq クエリを生成します。ここでは、次の CQLinq クエリが生成されます。継承
  • 次に:CQLinq クエリの結果を依存関係グラフにエクスポートして、目的の継承グラフを表示します。継承

トップへ

結合グラフ

特定の依存関係に正確にどのコード要素が関与しているかを知る必要がある場合があります。特に、構造的な変更の影響を予測する必要がある場合です。下のスクリーンショットでは、CppDepend の Info パネルが 2 つのプロジェクト間の結合を示しています。

依存関係マトリックスのセルを指すと、プロジェクト A の X 個の型がプロジェクト B の Y 個の型を使用していることを示します。オプションを変更できることに注意してください セルの重み# メソッド, # メンバー または # 名前空間、型以外との結合度を知る必要がある場合。

結合1

マトリックス セルを左クリックするだけで、下の結合度グラフが表示されます。

結合2

結合度グラフは、依存関係グラフのエッジからも生成できます。ここで、オプションを調整できます エッジの太さ 以外のものに # 型.

結合3

トップへ

パスグラフ

2 つのコード要素間のパスまたは依存関係サイクルを詳しく調べたい場合は、まずオプションを使用して依存関係マトリックスを表示します セルの重み: 直接および間接の使用深度.

マトリクスの青と緑のセルはを表します パス 黒いセルはを表します 依存関係サイクル たとえば、ここでは Info パネルに、関係する 2 つの型の間に最小長 7 のパスがあることが示されています。

パス1

セルを左クリックするだけで、下のパス グラフが表示されます。

パス2

トップへ

全パスグラフ

特定の状況では、コード要素 A からコード要素 B へのすべてのパスを知る必要があります。たとえば、ここでは、Info パネルに、関係する 2 つの型の間に最小長 2 のパスがあることが示されています。

全パス1全パス2

最後に、CQLinq クエリに一致した 12 の型をグラフにエクスポートすると、A から B へのすべてのパスが表示されます。

全パス3

トップへ

サイクルグラフ

前のセクションで説明したように、依存関係サイクルグラフを扱うには、まずオプションを使用して依存関係マトリックスを表示します セルの重み: 直接および間接の使用深度。黒いセルはサイクルを表します。

たとえば、ここでは Info パネルに、関係する 2 つの型の間に最小長 5 の依存関係循環があることが示されています。

依存関係サイクル1

セルを左クリックするだけで、下の循環グラフが表示されます。

依存関係サイクル2

上記のようなきれいな「丸い」依存関係サイクルが得られるのは、実際には規則というより例外的な状況であることをご承知おきください。

多くの場合、サイクルを表示すると、下に示すような「丸くない」グラフになります。この例では、関係する 2 つの型(黄色)間のサイクルの最小長は 12 です。一方の黄色の型からもう一方の黄色の型までに通過するエッジの数を数えると、12 になります。一部のエッジが複数回カウントされることがわかります。

依存関係サイクル3

トップへ

Dependency Structure Matrix による大規模グラフの可視化

ここで強調したいのは、依存関係グラフが読みにくくなった場合は、依存関係マトリックスに切り替える価値があるということです。

依存関係グラフと依存関係マトリックスが共存する理由:

  • 依存関係グラフは直感的ですが、ノード間のエッジが多すぎると読みにくくなります。
  • 依存関係マトリックスは理解に時間がかかりますが、一度習得すれば、次のことがわかります 依存関係マトリックスは、既存のアーキテクチャを探索する際に依存関係グラフよりはるかに効率的です.

依存関係マトリックスの可読性に関する詳細は、次を参照してください コード構造パターンを一目で特定

この点を説明するために、77 の名前空間間の同じ依存関係を、依存関係グラフと依存関係マトリックスで示します。

大きなグラフ大きなマトリクス

トップへ

今すぐCppDependを試す

ドキュメントの全機能にアクセスできる14日間無料トライアル。クレジットカード不要。