【问题标题】:McCabe's Complexity Metric and Independent PathsMcCabe 的复杂性度量和独立路径
【发布时间】:2012-05-17 23:00:05
【问题描述】:
int maxValue = m[0][0];         
for (int i = 0; i < N; i++) 
{               
    for (int j = 0; j < N; j++) 
    {                    
        if ( m[i][j] >maxValue )        
        {                 
            maxValue = m[i][j];     
        }                     
    }                    
}                   
cout<<maxValue<<endl;           

int sum = 0;                
for (int i = 0; i < N; i++)     
{                   
    for (int j = 0; j < N; j++)     
    {                    
        sum = sum + m[i][j];            
    }                    
} 
cout<< sum <<endl;

对于上面的代码,如果我们绘制这样的流程图 基本独立路径将遵循六个
路径一:1 2 3 10 11 12 13 19
路径2:1 2 3 10 11 12 13 14 15 18 13 19
路径3:1 2 3 10 11 12 13 14 15 16 17 15 18 13 19
路径4:1 2 3 4 5 9 3 10 11 12 13 19
路径5:1 2 3 4 5 6 8 5 9 3 10 11 12 13 14 15 16 17 15 18 13 19
路径6:1 2 3 4 5 6 7 8 5 9 3 10 11 12 13 14 15 16 17 15 18 13 19

所以这里的问题是根据给定的代码路径 2、3、4 无法测试(注意循环中的“N”)。那么没有基本集中给出的实际执行路径可以吗?... 或者根据macabe复杂度指标,我们是否必须更改上面给出的代码。因为我的一位导师说我们必须更改代码,他也说存在非结构化循环,所以我们必须更改代码。 (我也没有看到非结构化循环) 但我的感觉是,如果我们更改代码,实际输出可能与预期输出不同。所以请有人解释一下

【问题讨论】:

    标签: path-finding metrics code-metrics cyclomatic-complexity unstructured-loop


    【解决方案1】:

    1) McCabe 的复杂度可以计算为决策点的数量 + 1。在您的情况下,有 5 个决策点(节点 3、5、6、13 和 15)意味着代码片段的 McCabe 复杂度为 5 +1 = 6。就 McCabe 复杂度而言,6 绝不是太高:当然,考虑到实现必须提供的功能,我们仍然可以认为它太高了。

    2) McCabe 的复杂性与方法/过程的可测试性有关,但与特定路径的可测试性无关。路径可能是可行的(= 存在强制执行通过该路径的变量值)或不可行,但 McCabe 的复杂性很高兴没有意识到这种复杂性。如果您真的想研究路径的可行性,请记住,问题通常是无法确定的,但有许多实用的数据流分析算法可供使用。

    3) 如果我们更改代码,实际输出可能会与预期输出不同 当然,您不能引入任意更改并希望结果相同。然而,这可能是你的导师想要的,有一种方法可以重组你的代码,这样产生的输出保持不变,并且 McCabe 的复杂性降低了。例如,想想你是否真的需要将计算最大值和总和的任务分开。

    【讨论】:

    • McCabe 的复杂性没有定义为决策点数加一,至少 McCabe 没有定义。有一个定理证明他的定义等价于决策点加1,计算起来要容易得多:-}
    • Right ;-) 抱歉,造成混淆,当然,#decision points + 1 仅适用于结构化编程。我会更新答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    相关资源
    最近更新 更多