我刚开始使用PHPUnit和其具有色彩的代码覆盖报告。我理解其中所有的数字和百分比,但唯独不明白C.R.A.P指数是什么意思以及如何分析它以及如何降低它。请问有人可以给我一个详细的解释吗?
我刚开始使用PHPUnit和其具有色彩的代码覆盖报告。我理解其中所有的数字和百分比,但唯独不明白C.R.A.P指数是什么意思以及如何分析它以及如何降低它。请问有人可以给我一个详细的解释吗?
@Toader Mihai提供了一个扎实的解释。(我给他点赞)
写出更简单的代码或者进行更好的测试。(参见下面的图表)
什么是更好的测试?
在这个上下文中,这意味着:更高的代码覆盖率,通常会导致编写更多的测试。
什么是更简单的代码?
例如:将你的方法重构成小的模块:
// 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) {
}
}
这只是一个微不足道的例子,你一定会找到更多相关资源的。
首先,让我提供一些额外的资源:
以防万一:圈复杂度的解释。像 PHP_CodeSniffer 和 PHPMD 这样的工具会告诉你这个数字,以防你想知道它。
虽然你可以自己决定什么数字算是“好”的,但通常建议的数字(在我看来有点高)是 30,其结果是以下的图形:
(你可以在这里获取 .ods 文件:https://www.dropbox.com/s/3bihb9thlp2fyg8/crap.ods?dl=1)
function example() { $dep = new Dependency(); return $dep->someFunction(); }
比 function crappy($param) { switch ($param) { // 30 different cases with if-elses } }
更难测试(使用模拟逻辑可能会非常复杂,特别是在 PHP 中)。 - Juha Untinen