この記事では、オブジェクト指向分析専用に設計されたメトリックの 1 つである継承の深さについて説明します。 継承の深さ (継承ツリーの深さ (DIT) とも呼ばれます) は、"ノードからツリーのルートまでの最大長" CK として定義されます。 これは簡単な例で確認できます。 新しいクラス ライブラリ プロジェクトを作成し、コードを記述する前に、[分析] > [ソリューションのコード メトリックの計算] を選択してコード メトリックを計算します。
すべてのクラスは System.Objectから継承されるため、現在、深さは 1 です。 このクラスから継承し、新しいクラスを調べると、結果が表示されます。
ツリー内のノードが低いほど (この場合はClass2 )、継承の深さが高くなります。 引き続き子を作成し、必要に応じて深さを増やすことができます。
前提条件
継承の深さは、 CK の 3 つの基本的な前提に基づきます。
階層内のクラスが深いほど、継承するメソッドの数が多くなり、その動作の予測が困難になります。
より深いツリーでは、より多くのクラスとメソッドが関与するため、設計の複雑さが増します。
ツリー内のより深いクラスは、継承されたメソッドを再利用する可能性が高くなります。
前提条件 1 と 2 は、深さの数値を大きくすることは悪いことを示しています。 それが終わった場所なら、あなたは良い状態になります。ただし、前提 3 は、深さの数値が大きいほど、コードの再利用の可能性が高いことを示しています。
分析
深度メトリックを読み取る方法を次に示します。
深度の数値が小さい
深さの数値を小さくすると、複雑さが少なくなりますが、継承によるコードの再利用が少なくなります。
深さの数値が大きい
深さの数値が多いと、継承によってコードが再利用される可能性が高くなりますが、コード内のエラーの確率が高いほど複雑になります。
Code Analysis
コード分析には、保守容易性ルールのカテゴリが含まれます。 詳細については、「保守容易性ルール を参照してください。 従来のコード分析を使用する場合、拡張設計ガイドライン規則セットには保守容易性領域が含まれます。
保守容易性領域の内部には、継承の規則があります。
この規則では、継承の深さが 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 トランザクション、Vol. 20、No. 6)。 ピッツバーグ大学のウェブサイトから2011年5月14日取得: http://www.pitt.edu/~ckemerer/CK%20research%20papers/MetricForOOD_ChidamberKemerer94.pdf
Krishnan
Subramanyam、R. & Krishnan、M. S. (2003)。 Object-Oriented 設計の複雑性に関するCKメトリックの実証分析:ソフトウェア欠陥への影響(ソフトウェア工学に関するIEEEトランザクション、Vol. 29、No. 4)。 2011 年 5 月 14 日に取得。もともとは、マサチューセッツ大学ダートマスの Web サイトから取得しました https://ieeexplore.ieee.org/abstract/document/1191795
Shatnawi
Shatnawi、R. (2010)。 Open-Source システムにおける Object-Oriented 指標の許容されるリスクレベルの定量的調査(ソフトウェア工学に関するIEEEトランザクション,Vol. 36, No. 2).