我正在使用php undercontrol,并且代码浏览器在每个setter/getter上报告一些CRAP索引错误,即像这样的代码

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

getter/setter包含在单元测试中,因为没有if/for/switch/foreach,所以复杂度没有。那么为什么我为该代码获得1的CRAP索引呢???

PS:自我回答可能是因为复杂度不高,但我的主要问题是每个获取者/设置者都会由于CRAP索引而产生警告,因此无论如何要告诉phpunit/php代码覆盖率以使功能的CRAP等于0复杂度索引为0。

最佳答案

最低CRAP分数是1,而不是0。这是因为CRAP的算法是

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

函数的最小循环复杂度(comp)值为1。因此,问题不在phpunit中,而是将CRAP标记为1的任何问题。

通常,您希望将CRAP阈值设置在5左右的任何地方,并且您也可以使用简单的代码覆盖率指标(并以100%的比率进行拍摄),因为复杂度因素几乎没有考虑。CRAP> = 30意味着没有大量的测试可以使您的方法不烂。

通常可以手动计算出圈复杂度(但有多个定义):
  • 为函数调用
  • 加1点
  • 每个循环增加1点
  • 为每个分支
  • 加1点

    关于php - PHPUnit和C.R.A.P索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7670198/

    10-15 10:53