2011-10-06 13 views
11

私はPHPのundercontrolとコードブラウザレポートこのPHPUnitのとCRAPインデックス

public function getFoo() 
{ 
    return $this->_foo; 
} 

ゲッター/セッターユニットテストでカバーされている、複雑さなどのすべてのセッター/ゲッターすなわちコードにいくつかのCRAPインデックスエラーを使用していますif/for/switch/foreachがないので、noneです。なぜ私はそのコードのCRAPインデックス1を得るのですか?

PS:自己応答が複雑かもしれませんが、私の主な問題は、CRAPインデックスのためにすべてのゲッター/セッターが警告を生成するということですから、とにかくphpunit/PHPコードカバレッジにCRAP複雑度インデックスが0の関数の場合は0になります。

+0

私たちはphpUnderControlからJenkinsに切り替えました。それはより多くの設定が可能で、積極的に開発中であり、PHPプロジェクト用のプロジェクトテンプレートがあります。警告をトリガして障害を構築するしきい値CRAP値を設定できます。 –

答えて

22

最小CRAPスコアはCRAPのアルゴリズムが

CRAP(m) = comp(m)^2 * (1 – cov(m)/100)^3 + comp(m) 

であり、関数の最小循環的複雑度(COMP)の値が1であるので、これは1ではなく0です。だから、問題はphpunitではなく、問題のCRAPに1のフラグを立てています。

一般に、CRAPスレッシュホールドを約5、どこか低い値に設定したい場合は、単純なコードカバレッジメトリックを使用して(100%で撮影してください)、複雑さの要因はほとんどかかりません。 > = 30は、あなたのメソッドを駄目にすることのできるテストの量がないことを意味します。

  • 関数呼び出しのための1点を追加
  • 1点を追加
  • は、すべてのループの場合は1点を追加します。よう

    循環的複雑度は、手計算すること(ただし、複数の定義がある)は、一般的にすることができますすべてのブランチについて

+0

あなたは正しいです、最小値は1です... php_codebrowserのバグであると思われます。 https://github.com/mayflowergmbh/PHP_CodeBrowser/issues/50を参照してください。 – RageZ

+0

3つの方法でスコアが3のクラスのCRAPが12の場合はどうなりますか? (私はリターンパスの数のためだと思う) – MrMesees

1

本当に警告ですか?一般に、警告のしきい値は1よりはるかに高く設定されています(おそらく約30)。番号がどのように計算されるかを示す良いSO投稿hereがあります。

「CRAP(変更リスク分析と予測)インデックスがするように設計されていますAlberto Savoiaによると、CRAPインデックスの作成者は、30

のCRAPのための私のPHPUnitのセットアップでいくつかのハードコードされた値があるようです既存のコードを維持するために必要な努力、痛み、および時間の量を分析し、予測します。

最小CRAP数は、100%カバレッジのコードの循環的複雑さになります。複雑なコードの変更は、単純なコードの変更よりも問題を引き起こす可能性が高いという考え方です。

+0

実際には通知ですが、ゲッターとセッターのそれぞれについて通知するのは面倒です。 – RageZ