ある種のコードベースのメトリックをソフトウェアの欠陥に関連付ける試みを耳にするたびに、私が最初に考えるのは、McCabeの循環的複雑さです。さまざまな研究により、高い循環的複雑さと欠陥の数との間に相関関係があることがわかっています。ただし、(コード行の観点から)同様のサイズのモジュールを調べた他の研究では、相関関係がない可能性があることがわかりました。
私にとっては、モジュール内の行数と循環的複雑度の両方が、発生する可能性のある欠陥の良い指標、またはおそらくモジュールに変更が加えられた場合に欠陥が挿入される可能性が高くなります。循環的複雑度の高いモジュール(特にクラスまたはメソッドレベル)は、コードを通る独立したパスが多数存在するため、理解が困難です。行の増加はより多くのことが起こっていることを意味するため、多数の行を持つモジュール(特に、クラスまたはメソッドレベル)も理解するのが困難です。指定されたルールに対するコードのソース行と循環的な複雑さの両方の計算をサポートする多くの静的分析ツールがあり、それらをキャプチャすることで、ぶら下がっている実をつかむことができるようです。
ハルステッドの複雑さ対策はも面白いかもしれません。残念ながら、それらの有効性は多少議論されているように見えるので、私はそれらに依存する必要はありません。Halsteadの対策の1つは、作業量またはボリューム(合計演算子とオペランドの観点からのプログラムの長さと、別個の演算子と演算子の観点からのプログラム語彙との関係)に基づく欠陥の推定です。
CKメトリクスと呼ばれるメトリクスのグループもあります。このメトリクススイートの最初の定義は、ChidamberとKemererによる「オブジェクト指向設計のためのメトリクススイート」というタイトルの論文にあるようです。それらは、クラスごとの重み付きメソッド、継承ツリーの深さ、子の数、オブジェクトクラス間の結合、クラスの応答、およびメソッドの結合の欠如を定義します。彼らの論文は、計算方法と各分析方法の説明を提供します。
これらのメトリックを分析する学術文献に関しては、オブジェクト指向設計の複雑さに対するCKメトリックの実証分析:ソフトウェア欠陥への影響、Ramanath SubramanyamとMS Krishnaが作成したものに興味があるかもしれません。6つのCKメトリックのうち3つ(クラスごとの加重メソッド、クラス化されたオブジェクト間の結合、および継承ツリーの深さ)を分析しました。論文全体を見ると、これらは潜在的に有効な指標であることがわかったように見えますが、「改善」すると、欠陥の可能性を高める他の変更につながる可能性があるため、注意して解釈する必要があります
Yuming ZhouとHareton Leungによって作成された、高および低重大度の障害を予測するためのオブジェクト指向設計メトリックの実証分析も、CKメトリックを調べています。彼らのアプローチは、これらのメトリックに基づいて欠陥を予測できるかどうかを判断することでした。彼らは、継承ツリーの深さと子の数を除くCKメトリックの多くが、欠陥のある場所を予測する際にある程度の統計的有意性があることを発見しました。
IEEEメンバーシップをお持ちの場合は、ソフトウェアエンジニアリングに関するIEEEトランザクションでより学術的な出版物を検索し、IEEEソフトウェアで実際のレポートや応用レポートを検索することをお勧めします。ACMのデジタルライブラリには、関連する出版物がある場合もあります。