一、圈复杂度
计算一个代码逻辑流程有多少分支,注重评估代码的可测试性。
java 代码直接统计有多少下面关键词
if, for, while, case, catch, throw, &&, `
二、认知复杂度
计算代码的复杂度,注重评估代码的可理解性。他本事是对圈复杂度的一种补充,所以统计方法类似,但是更加的细腻。
2.2 认知复杂度 vs 圈复杂度
举个列子说明认知复杂度的作用:以下2个代码的圈复杂度一样,但是代码的可理解程度却很明显的不同。
案例1:
int sumOfPrimes(int max) { // +1
int total = 0;
OUT: for (int i = 1; i <= max; ++i) { // +1
for (int j = 2; j < i; ++j) { // +1
if (i % j == 0) { // +1
continue OUT;
}
}
total += i;
}
return total;
} // Cyclomatic Complexity 4
案例2:
String getWords(int number) { // +1
switch (number) {
case 1: // +1
return "one";
case 2: // +1
return "a couple";
case 3: // +1
return “a few”;
default:
return "lots";
}
} // Cyclomatic Complexity 4
2.2 认知复杂度考核方法
- 忽略那些允许将多条语句简化为一条语句的结构
- 破坏代码线性流程的 +1,(一个线性流程是从左往右,从上往下)
- 流程终止的地方 +1
发表评论 取消回复