首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何读取和改进PHP计算的C.R.A.P索引

如何读取和改进PHP计算的C.R.A.P索引
EN

Stack Overflow用户
提问于 2011-01-19 12:36:24
回答 2查看 17.1K关注 0票数 75

我刚刚开始使用PHPUnit及其丰富多彩的代码覆盖率报告。我知道所有的数字和百分比,除了一个: C.R.A.P指数。谁能给我一个可靠的解释,解释它的含义,如何分析它,如何降低它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-19 17:27:02

@Toader Mihai offered a solid explanation. (来自我的+1)

如何降低它:

编写不太复杂的代码或编写更好的测试代码。(见下图)

更好地测试了代码?

在这种情况下,这仅仅意味着:更高的代码覆盖率,通常会导致编写更多的测试。

复杂度较低的代码-

例如:将你的方法重构为更小的方法:

代码语言:javascript
复制
// Complex
function doSomething() {
    if($a) {
        if($b) {
        }
        if($c) {
        }
    } else {
        if($b) {
        }
        if($c) {
        }
    }
}

// 3 less complex functions
function doSomething() {
    if($a) {
        doA();
    } else {
        doNotA();
    }
}

function doA() {
    if($b) {
    }
    if($c) {
    }
}

function doNotA() {
    if($b) {
    }
    if($c) {
    }
}

(这只是一个简单的例子,我相信你会找到更多的资源)

其他资源:

首先,让我提供一些额外的资源:

Creators blog post about the crap index

以防万一:Cyclomatic complexity explained。像PHP_CodeSniffer和PHPMD这样的工具会告诉你这个数字,以防你想知道。

虽然你可以决定哪个数字是"ok“,但一个经常建议的数字(也就是有点高的imho)是30的一个糟糕的索引,产生了一个如下的图形:

(您可以在以下位置获取.ods文件:https://www.dropbox.com/s/3bihb9thlp2fyg8/crap.ods?dl=1 )

票数 112
EN

Stack Overflow用户

发布于 2011-01-19 12:52:58

基本上,它希望成为方法更改风险的预测器。

它有两个因素:

可测试性( comp(m).

  • how

  • )是指该方法(通过自动化测试,由代码覆盖工具提供)的可测试性(
  • cyclomatic complexity)。基本上,这衡量了在所述代码中有多少决策是自动可测试的。

如果方法有100%的覆盖率,那么改变的风险被认为只与方法的复杂性相等:C.R.A.P.(m) = comp(m)

如果方法有0%的覆盖率,那么在复杂性度量中,更改的风险被认为是二次多项式(推理是,如果您不能测试代码路径,更改它会增加破坏的风险):C.R.A.P.(m) = comp(m)^2 + comp(m)

希望这能对你有所帮助。

我只是注意到我只提供了一半的答案(阅读部分)。如果你理解了索引的原理,那么如何改进它应该是非常清楚的。但在@edorian's answer中给出了更清晰的解释。

简短的故事是:编写测试,直到您拥有接近100%的覆盖率,然后重构方法以降低圈复杂度。您可以尝试在进行测试之前进行重构,但根据实际的方法复杂性,如果您不能推理(因为涉及的复杂性)您正在进行的更改的所有后果,那么您就有可能引入破坏。

票数 66
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4731774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档