圈复杂度计算方式
圈复杂度(CC) = 判断条件个数 + 1 其中1代表函数本身的复杂度
关键字:if, else if, for, while, &&, ||, case, catch
等。
对
if,if~else, if~else if ,for, switch , while
语句进行简要说明:
If
中有几个判断条件算几个,else
算一个else if
有几个判断条件算几个for
中第二个判断条件有几个算几个switch
中有几个break算几个while
中有几个判断算几个
之后函数的圈复杂度是所有的语句判断数加函数本身
常用降低圈复杂度的方法
1. 采用三元表达式
举例
if (condition)
{
c = a;
}
else
{
c = b;
}
可修改为:
c = (condition) ? a : b;
2. 合并条件表达式
举例:
if (a || b || c )
{
…
}
可修改为:
bool flag = a || b || c ;
if (flag)
{
…
}
3. 拆分成子函数
4. switch…case…
可以使用Map
5. 去掉没有必要的else
if (false)
{
return;
}
else
{
c = a;
}
可修改为:
if (false)
{
return;
}
c = a;
6. 重构函数
举例:同一条件多处出现
if (list.empty())
{
if (a)
{
// do something 1...
}
}
else
{
if (a)
{
// do something 2...
}
}
if (a)
{
// do something 3...
}
可修改为:
if (a)
{
if (list.empty())
{
// do something 1...
}
else
{
// do something 2...
}
// do something 3...
}