Lev*_*ith 69 php phpunit unit-testing
我刚开始使用PHPUnit及其丰富的代码覆盖率报告.我理解除了一个之外的所有数字和百分比:CRAP索引.任何人都可以给我一个可靠的解释,它是什么意思,如何分析它以及如何降低它?
edo*_*ian 105
@Toader Mihai提供了一个可靠的解释.(+1来自我)
编写不太复杂的代码或编写更好的测试代码.(见下图)
更好的测试代码?
在这种情况下,这只意味着:更高的代码覆盖率,通常会导致编写更多测试.
代码不太复杂?
例如:将您的方法重构为较小的方法:
// 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) {
}
}
Run Code Online (Sandbox Code Playgroud)
(只是一个简单的例子,你会找到更多的资源,我敢肯定)
首先,让我提供一些额外的资源:
以防万一:解释了循环复杂性.像PHP_CodeSniffer和PHPMD这样的工具会告诉你这个数字,以防你想知道.
虽然它是你决定什么数字是"好",一个经常建议的数字(这是一个小高的imho)是一个30的垃圾索引导致这样的图形:
(您可以在此处获取.ods文件:https://www.dropbox.com/s/3bihb9thlp2fyg8/crap.ods?dl = 1)
Mih*_*der 62
基本上,它希望成为方法变更风险的预测指标.
它有两个因素:
cyclomatic complexity
)也就是说在所述方法中存在多少个决策路径:comp(m)
.如果该方法具有100%的覆盖率,则认为变化的风险仅与方法的复杂性相同:C.R.A.P.(m) = comp(m)
.
如果该方法的覆盖率为0%,则变更风险被认为是复杂性度量中的二级polinoomial(推理如果您无法测试代码路径,则会增加其破坏风险): C.R.A.P.(m) = comp(m)^2 + comp(m)
希望这会对你有所帮助.
我只是注意到我只提供了半答案(阅读部分).如果你理解索引的推理,那么如何改进它应该很清楚.但在@ edorian的回答中给出了一个更明确的解释.
简短的故事是:编写测试直到你有接近100%的覆盖率,然后重构这些方法来降低圈复杂度.您可以在进行测试之前尝试重构,但如果您无法推断(因为涉及复杂性)您正在进行的更改的所有后果,则根据实际方法的复杂性,您可能会引入破损.
归档时间: |
|
查看次数: |
15188 次 |
最近记录: |