質問

最近、NDependを使用して、.netアセンブリと関連するpdbに関する良いレポートを作成しました。

レポートで私が見つけた最も興味深いことは、抽象度と不安定性のグラフです。これを詳細に理解したかったので、ドキュメントとオンラインメトリックを読みましたが、それはある程度しか役立ちませんでした。

主に、グラフを正しく評価する方法と、安定性で抽象性を制御する手法を理解したいと思います。

非常に良い記事がありますこちらしかし、これに加えてさらに必要なのは、「これをどのように制御するのですか? [安定性を備えた抽象性の制御] '

alt text

役に立ちましたか?

解決

抽象性は、ソフトウェアシステムの剛性の尺度です。抽象度が高いほど、剛性が低くなり(柔軟性が高くなります)、逆も同様です。システムのコンポーネントが抽象クラスまたはインターフェースに依存している場合、そのようなシステムは、具体的なクラスに直接依存している場合よりも拡張および変更が容易です。

安定性とは、ソフトウェアシステムが変更を中断することなく変更を許可する程度など、変更に対する許容度の尺度です。これは、システムのコンポーネントの相互依存関係を分析することにより決定されます。

OOメトリックに関する

Robert C. Martinの記事は、これらの概念をより定量的に説明しています。用語。

記事からの抜粋:

カテゴリの責任、独立性、安定性は、 そのカテゴリと相互作用する依存関係。 3つの指標が特定されています:

Ca:求心性カップリング:このカテゴリ内のクラスに依存するこのカテゴリ外のクラスの数。

Ce:遠心性カップリング:このカテゴリ外のクラスに依存するこのカテゴリ内のクラスの数。

I:不安定性:(Ce÷(Ca + Ce)):このメトリックの範囲は[0,1]です。 I = 0は、最も安定したカテゴリを示します。 I = 1は、カテゴリが最大限に不安定であることを示します。

A:抽象性:(#カテゴリ内の抽象クラス÷カテゴリ内のクラスの総数)。このメトリック範囲は[0,1]です。 0はコンクリートを意味し、1は完全に抽象的を意味します。

特に大規模なソフトウェアシステムでは、バランスが重要です。この場合、「良好」になるためには、システムは抽象性と安定性のバランスをとる必要があります。 A-Iグラフ上の位置はこれを示しています。説明については記事を読んでください。

他のヒント

抽象性と不安定性の両方を単独で使用して、コードを評価できます。モジュールがどの程度抽象的または安定的であるべきかを事前に知っています。たとえば、プレゼンテーションレイヤーは適度に抽象的で安定性が高い必要があります。下位のモジュールがそれに依存しているためです。一方、インフラストラクチャレイヤーは、上位レイヤーが要求するものを実装する必要があるため、高度に具体的(抽象度が低く)、高度に不安定にする必要があります。

明確になったら、抽象性と不安定性を1つのグラフにまとめることができます。これが不安定性と抽象性のグラフです。将来の要件の変更をサポートするためのニーズのバランスを取るために、コードが安定している限り多くの抽象性を示すようにします。

しかし、とにかく、それらが連携して動作することを理解しようとする前に、不安定性と抽象性メトリックだけを強く理解する必要があります。この記事には、不安定性の意味に関するいくつかの例があります:モジュールカップリングと不安定性メトリックを使用してリファクタリングをガイドする方法

アプリケーション内のすべてのモジュールの不安定性を測定するCQLinqクエリを導出する関連記事があります: NDependを使用してモジュールのカップリングと不安定性を測定する方法

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top