web-dev-qa-db-ja.com

CK Metrics SuiteでのWMC計算

2つのクラスC1とC2があります。 C1には2つのメソッドがあり、C2にはそれぞれ複雑度値1の3つのメソッドがあります。C2はC1から継承します。したがって、C2には2 + 3 = 5のメソッドが全部あることを知っています。問題は、クラスのWMCを計算するときに、C2で5つのメソッドを使用する必要があるかどうかです。

申し立てを正当化または反証する例や証拠は見つかりませんでした。

WMCは、CK-Metrics Suiteで指定されている クラスごとの加重メソッド です。

WMCメトリックは、すべてのクラスメソッドの複雑さの合計です。これは、特定のクラスを開発および維持するために必要な労力の指標です。 RefactorITは、WMCを計算するために、宣言されたすべてのメソッドとクラスのコンストラクターのV(G)(循環的複雑度)を合計します...

2
Dwarak

Chidamber&Kemererは、1993年にオブジェクト指向設計のメトリックに関する独創的な研究で6つのメトリックを定義しました。そのうちの Weighted Methods Per Class(WMC) です。

それらの定義はややあいまいです:

クラスで定義されているメソッドM1、... Mnを持つクラスC1を検討してください。 c1、... cnをメソッドの複雑さとします。次に、WMCは、1〜nのiのciの合計です。 。

可能な解釈

Definedは、declaredを意味する可能性があります。引用しています。この場合、継承されたメソッドはカウントされません。この指標は、クラスの作成と維持がどれほど難しいかを測定することを目的としているため、理にかなっています。

  • クラスDが基本クラスBから継承するが、それ自体でメソッドを宣言しない場合、それを維持することは間違いなく難しくありません。 Bが100のメソッドを持っている場合でも、いくつかのメソッドを持つ別のクラスよりも、メンテナンスが簡単です。
  • クラスBに10の異なるコンストラクターがあるが、クラスDには2つしかない場合、メンテナンス作業は2つの既存のコンストラクターに関連し、基本クラスの10には関連しません。

ただし、definedは、availableを意味する場合もあります。この場合、継承されたすべてのメソッドをカウントする必要があります。これは著者の推定解釈であるようです 彼らの記事で

子はクラスで定義されたすべてのメソッドを継承するため、クラス内のメソッドの数が多いほど、子への潜在的な影響が大きくなります。

そしてこれは理にかなっています:

  • 多くのメソッドは、継承されていても、クラスをより具体的にし、再利用を容易にしません。
  • 継承されたメソッドの数が多いと、クラスの使用が困難になり、多くのメソッド間の一貫性を維持するのが難しくなる場合もあります。
  • WMCはクラスセマンティック(C&Kによると)に関連している必要があり、継承されたメソッドはクラスセマンティックに決定的に貢献します。

したがって、この2番目の解釈を選択する必要があります。

追加備考

最近のメトリクス メンテナンスに定量的な影響だけでなく、品質に重点を置くThese はあいまいさが少なく、属性とメソッドを考慮に入れ、以下の違いをもたらします。

  • カプセル化を測定するための可視メソッドとプライベートメソッド
  • 継承された使用可能なメソッド。継承の構造的利点をより適切に考慮します。
0
Christophe