PHPUnit和CRAP索引

Rag*_*geZ 13 php phpunit metrics phpundercontrol

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

public function getFoo()
{
    return $this->_foo;
}
Run Code Online (Sandbox Code Playgroud)

getter/setter由单元测试覆盖,复杂性为none,因为没有if/for/switch/foreach.那么为什么我得到该代码的CRAP索引为1?

PS:自我回答可能是因为复杂性没有,但我的主要问题是每个getter/setter因为CRAP索引而生成警告所以无论如何都要告诉phpunit/php代码覆盖率使CRAP等于0表示功能具有0复杂度指数.

cas*_*son 29

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

CRAP(m) = comp(m)^2 * (1 – cov(m)/100)^3 + comp(m)
Run Code Online (Sandbox Code Playgroud)

并且函数的最小圈复杂度(comp)值是1.所以问题不在于phpunit,而是将CRAP为1标记为问题.

一般情况下,您希望将CRAP阈值设置在5左右,低于任何地方,您也可以使用简单的代码覆盖率度量标准(并且拍摄100%),因为复杂因素几乎没有影响.CRAP> = 30表示没有多少测试可以让你的方法不蹩脚.

通常情况下(但有一个以上的定义)手工复杂度可以手工计算:

  • 为函数调用添加1个点
  • 每个循环加1点
  • 为每个分支添加1个点