13

私はphpアンダーコントロールを使用していますが、コードブラウザはすべてのセッター/ゲッターでCRAPインデックスエラーを報告します。つまり、このようなコードです。

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

ゲッター/セッターは単体テストでカバーされています。if/for/ switch / foreachがないため、複雑さはありません。では、なぜそのコードのCRAPインデックスを1にするのですか?

PS:自分自身に答えるのは、複雑さがないためかもしれませんが、私の主な問題は、すべてのゲッター/セッターがCRAPインデックスのために警告を生成することです。したがって、関数のCRAPを0に等しくするようにphpunit/phpコードカバレッジに指示する方法はありますか複雑度インデックスは0です。

4

3 に答える 3

30

最小 CRAP スコアは 0 ではなく 1 です。これは、CRAP のアルゴリズムが

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

関数の循環的複雑度 (comp) の最小値は 1 です。したがって、問題はphpunitにはありませんが、問題として1のCRAPにフラグを立てているものは何でもです。

一般に、CRAP のしきい値を 5 前後かそれよりも低い値に設定する必要があります。また、単純なコード カバレッジ メトリックを使用する (そして 100% を狙う) こともできます。これは、複雑さの要素がほとんど考慮されていないためです。CRAP が 30 以上の場合は、次のことを意味します。どんなに多くのテストを行っても、あなたの方法がくだらないものになることはありません。

循環的複雑度は、一般に次のように手動で計算できます (ただし、複数の定義があります)。

  • 関数呼び出しに 1 ポイントを追加
  • ループごとに 1 ポイントを追加
  • 分岐ごとに 1 ポイントを追加
于 2011-10-06T08:22:59.777 に答える
1

それは本当に警告ですか?通常、警告のしきい値は 1 よりかなり高く設定されます (おそらく 30 前後)。数値がどのように計算されるかを示す良い SO 投稿がここにあります。CRAP 30 の私の phpunit セットアップには、ハードコードされた値がいくつかあるようです。

CRAP インデックスの作成者であるAlberto Savoia氏によると、

「CRAP (Change Risk Analysis and Predictions) インデックスは、既存のコード本体を維持するために必要な労力、苦痛、および時間を分析および予測するように設計されています。」

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

于 2011-10-06T06:33:58.990 に答える