NDependの紹介

アプリケーションアーキテクチャの接続性の問題は最近多くの注目を集めており、静的解析と「スマートリファクタリング」のための多数のDIタイプフレームワークとアプリケーションを生み出しています。 NDependと呼ばれるそのようなアプリケーションについてお話したいと思います。





知人

NDependとは何ですか? このアプリケーションは、静的コード分析用です。 FxCopには独自のルールセットが既にあるように見えます。コードをきれいにしてリファクタリングできるReSharperがあります。TeamEditionにはメトリックもあります



NDependは、特にコンポーネント間の強力な接続性、オープンクラスの可視性(最適化されていないカプセル化)、構造の貧弱な命名に関するさまざまなエラーを明らかにする、アーキテクチャに対する非常に大きなバイアスを持つプログラムです。 また、NDependは、分析および視覚化できる多くの複雑なメトリック(たとえば、抽象性の指標)を生成します。



NDependの使用を開始する前に(試用版はこちらからダウンロードできます )、たとえば、後輩( 特に後輩)でも購入でき、効率を上げることができるReSharperとは異なり、NDependにはかなりの知識が必要です。アーキテクチャ、および彼の用語は非常に具体的であり、それを研究する必要があります。



可視化

まず、NDependの最も「カラフルな」機能、つまり視覚化機能を見てみましょう。 NDependは、他の静的アナライザーと同様に、すべての依存関係を含むコンパイル済みコードをロードします(ILを正確に分析します)。 分析後、いくつかのアーティファクトを形成します。



依存グラフ









依存関係グラフは、分析されたコードの要素間の関係を示しています。 プロジェクト間の依存関係を表示するプログラムとは異なり、NDependはアセンブリから特定のメソッドまで、あらゆる形式の依存関係を表示できます。



依存関係グラフは、依存関係マトリックスと同期されます(以下を参照)。 また、その要素はクリック可能であり、右クリックやクエリの作成などを通じて要素の視覚化を操作できます。 これについては後で詳しく説明します。



依存行列









依存関係マトリックスは、コンポーネント間の依存関係の総数を示す2次元のグリッドです。 ボックスをクリックすると、依存関係グラフが更新され、クリックしたインタラクションが正確に表示されます。 注意:結合度の高い一部のコンポーネントは、すぐに描画されない場合があります(多くのコンポーネントがあるため)。 以下は、 NHibernate



Iesi.Collections



図解された相互作用のサンプルスニペットです。









依存関係マトリックスを使用すると、ドリルダウンできます。つまり、プログラムの構造を深く掘り下げて、具体的に接続がどこにあるかを理解できます。 これを行うには、列と行の先頭にプラス記号を使用できます。 たとえば、次のスクリーンショットでは、NHibernate名前空間を開いて、個々のメソッドまでの相互作用を確認できます。









指標



メトリックビジュアライザーを使用すると、コードベースを視覚的に評価できます。 特に、IL命令の量、メソッドの数、およびその他の多くの基準でコードの要素を比較できます。 ダイアグラム自体は自然にクリック可能です。









このウィンドウは「メトリック」と呼ばれますが、ドロップダウンメニューに表示されるメトリックは、レポートが表示されるメトリックと同じです。 レポートについて個別に説明するのではなく、多くの珍しい用語が登場していると言います。 何のために、たとえば求心性結合が何であるかを迅速に把握するために、すべてが十分に説明されているこのポスターをお勧めします。



その他の窓









情報ウィンドウには、選択したアイテムに関する追加情報が表示されます。 たとえば、コンポーネント間の依存関係を選択した場合、このウィンドウには、見つかった依存関係の数とタイプが表示されます。









クラスブラウザは、Studioと同じように機能します。 ツリーから要素を選択すると、選択した要素のメトリックが情報ウィンドウにペイントされます。 また、この要素はコンテキストメニューで操作できます。これについては別途説明します。



はい。別の機能(および、それに応じて別のウィンドウ)がコードベースで検索されます。









CQLクエリ言語

静的コード分析では、NDependはSQLに似た言語を使用してコードベースを照会します。 この言語はCQL(コードクエリ言語)と呼ばれます。 この言語には、コード自体の分析に役立つこれらの構造が実際に含まれています。 CDependに基づいて、NDependにはかなりの数の「推奨事項」が含まれています。 すべての構造を不変にするための提案の例を次に示します。



// <Name>Structures should be immutable</Name>

WARN IF Count > 0 IN SELECT TYPES WHERE IsStructure AND !IsImmutable AND !IsInFrameworkAssembly<br/>

// It is deemed as a good practice to make your structure immutable.

// An object is immutable if its state doesn't change once the object has been created.

// Consequently, a structure is immutable if its instances are immutable.

// Immutable types naturally simplify code by limiting side-effects.

// See some explanations on immutability and how NDepend supports it here:

// http://codebetter.com/blogs/patricksmacchia/archive/2008/01/13/immutable-types-understand-them-and-use-them.aspx







NDependに付属しているすべての推奨事項がコメントされており、読むことができることを示すために、意図的にコメントを残しました。



静的分析パネルには、検証済みのルールのツリーが表示されます。









CQLパネルには、クエリ結果、つまり リファクタリングする意味のあるコード要素。









おわりに

NDependを車でローカルに運転するのは良いことですが、安くはありません。 したがって、別の可能性があります。つまり、NDependにはMSBuildのタスクが付属しているため、NDependを継続的インテグレーションのプロセスに統合することです。 NDependとTeamCityを統合する方法の例をここで説明しますが 、グーグルで検索する場合は、CC.NetやNAntを使用するための他のチュートリアルを見つけることができると確信しています。



このプログラムに興味がある場合は、試用版ダウンロードして、このツールをコードで実行することをお勧めします。 誰が知っている-それはおそらくあなたのプログラミングの実践の不可欠な部分になるでしょう。 頑張って



All Articles