我想计算以下代码的圈复杂度。
int test(int a, int b)
{
int result = 0;
if (a == 0 && b == 0)
result = -1;
else
result = a * b;
return result;
}
Mathwork的Polyspace工具计算出的值为2。 Eclipse的Visual Studio和Metrics插件显示3。哪个正确?
答案 0 :(得分:2)
循环复杂度 是一种软件指标,可对 程序的逻辑复杂性。在基础路径测试中使用时 方法,为圈复杂度计算的值定义了独立的 程序基础集中的悬垂路径,为我们提供了 确保所有陈述均已通过的测试次数 至少执行一次。
一个 独立路径 是程序中引入至少一个的任何路径 新的一组处理语句或新条件。
您的代码中只有2条独立的路径,一条通过if分支,一条通过else分支。
答案 1 :(得分:2)
您有3条路径通过该程序,因为“ &&”是快捷方式。 3个路径/测试是:
a=1 and b=7 (actually anything) which short cuts and returns a*b or 7
a=0 and b=7 which goes to else and returns a*b or 0
a=0 and b=0 which goes to then and returns -1'
在第一个条件下未评估b的事实可能很重要。