我遇到了计算CCN的不同方法(根据公式CCN = E-N + 2P) 一种方法是分别计算代码中的所有行,另一种方法是将几行代码计为一步;让我们举例如下:
1 public class SumAndAverage {
2
3 public static void main (String[] args) {
4 int sum = 0;
5 double average = 0.0;
6 String message = "";
7
8 int num = Integer.parseInt(args[0]);
9
10 if ((num < 1) || (num > 100)) {
11 message = "Invalid number entered.";
12 } else {
13 for (int i = 1; i <= num; i++) {
14 sum += i;
15 }
16 average = (double) sum / num;
17 message = "The sum is " + sum + " and the average is " + average;
18 }
19 System.out.println(message);
20 }
21}
计算每个陈述我们得到12 - 11 + 2x 1 = 3
我想知道我是否加入&#34;第4,5,6,8行并将它们计为一步并对第16和17行进行相同的操作,这也是正确的吗?结果将是相同的,否则边缘也将减少:8 - 7 + 2 * 1 = 3
答案 0 :(得分:1)
计算复杂性的正确方法是考虑代码块。代码块是无法解析执行路径的地方。 McCabe的paper提到了以下内容:
工具FLOW是用APL编写的,用于从磁盘上的Fortran文件输入源代码。然后,FLOW会将Fortran作业分解为不同的子例程,并分析每个子例程的控制结构。它通过将Fortran子例程分解为由影响控制流的语句分隔的块来完成此操作:IF,GOTO,引用LABELS,DO等。
有关复杂性的其他信息,请阅读Cyclomatic complexity as a Quality measure