コード メトリック - 継承の深さ (DIT)
この記事では、特にオブジェクト指向分析用に設計されたメトリックの 1 つである、継承の深さについて説明します。 継承の深さ (継承ツリーの深さ (DIT) とも呼ばれる) は、"ノードからツリーのルートまでの最大長" と定義されています (CK)。 これは単純な例を使って確認できます。 新しいクラス ライブラリ プロジェクトを作成し、コードを記述する前に、[分析] > [ソリューションのコード メトリックスを計算する] を選択してコード メトリックを計算します。
すべてのクラスは System.Object
から継承するため、現在、深さは 1 です。 このクラスから継承し、新しいクラスを調べると、次の結果を確認できます。
ツリー内のノードが下位になるほど (この場合は Class2
)、継承の深さは大きくなります。 引き続き子を作成して、必要なだけ深さを増加させることができます。
外部からの影響
継承の深さは、次の 3 つの基本的仮定が前提となります (CK)。
階層内のクラスが深くなるほど、継承される可能性があるメソッドの数が増加するため、その振る舞いを予測するのが難しくなります。
より深いツリーでは、関連するクラスとメソッドの数が増えるため、より複雑な設計が必要になります。
ツリー内でのクラスの深さが増すと、継承されたメソッドが再利用される可能性が高くなります。
仮定 1 と 2 では、深さの数を増加させるのは良くないということが示されています。 そこで終われば問題はないのですが、仮定 3 では、コードの再利用のためには、深さの数が大きい方が良いことが示されています。
分析
深さのメトリックは次のように解釈できます。
深さの数が小さい
深さの数が小さければ、複雑さは減少しますが、継承によるコードの再利用の可能性も小さくなります。
深さの数が大きい
深さの数が大きければ、継承によるコードの再利用の可能性は高くなりますが、複雑さが増加し、コード内でエラーが発生する確率も高くなります。
コード分析
コード分析には、保守容易性ルールのカテゴリが含まれます。 詳細については、「保守容易性の規則」を参照してください。 レガシ コード分析を使用する場合、拡張デザイン ガイドライン ルール セットに保守容易性の分野が含まれます。
保守容易性領域内に、継承に関する規則があります。
この規則では継承の深さが 6 以上に達すると警告が発行されるため、これは過剰な継承を防ぐのに役立つすぐれた規則です。 このルールの詳細については、CA1501 に関するページを参照してください。
まとめ
DIT の値が高い場合は、エラーの可能性も高くなり、値が低いとエラーの可能性が低下します。 DIT の値が高い場合は、継承によるコード再利用の可能性が高くなることを示しており、値が低い場合は、使用する継承によるコード再利用が少なくなることを示唆しています。 十分なデータがないため、DIT 値に関して現在認められている標準はありません。 最近行われた調査でも、このメトリックの標準数値として使用できる、実行可能な数値を決定するのに十分なデータは検出されませんでした (Shatnawi)。 いくつかのリソースでは、5 または 6 前後の DIT を上限とすべきであることが示唆されています。ただし、これをサポートする経験的証拠はありません。 例については、「 https://www.devx.com/architecture-zone/45611/
」を参照してください。
引用
CK
Chidamber, S. R.、Kemerer, C. F. (1994 年)。 「オブジェクト指向設計のためのメトリック群」(IEEE Transactions on Software Engineering、Vol. 20、No. 6)。 2011 年 5 月 14 日、ピッツバーグ大学の Web サイトから入手: http://www.pitt.edu/~ckemerer/CK%20research%20papers/MetricForOOD_ChidamberKemerer94.pdf
Krishnan
Subramanyam, R.、Krishnan, M. S. 共著 (2003 年)。 「オブジェクト指向設計の複雑さに関する CK メトリックの実証的分析: ソフトウェアの不具合への影響」(IEEE Transactions on Software Engineering、Vol. 29、No. 4)。 2011 年 5 月 14 日、マサチューセッツ大学ダートマス校の Web サイトから最初に入手: https://ieeexplore.ieee.org/abstract/document/1191795
Shatnawi
Shatnawi, R. 著 (2010 年)。 「オープンソース システムにおけるオブジェクト指向メトリックの許容可能なリスク レベルの定量的調査」(IEEE Transactions on Software Engineering、Vol. 36、No. 2)。