如何正确计算循环复杂度?
根据维基百科以下代码的循环复杂度:
if (c1())
f1();
else
f2();
if (c2())
f3();
else
f4();是3,但我理解为4:

我遗漏了什么?
发布于 2022-04-12 11:48:27
循环复杂度和全分支覆盖之间有一个微妙的差别。
周期复杂度是一种纯数学度量。简单地放置-测量将新分支添加到当前路径集的路径数。
所以在你的例子中-我们从一个空集开始。false/false是一条路径(#1),然后true/false添加了一个新分支(第一个if) (#2)。然后false/true添加一个新分支(第二个if) (#3)。
但是,path true/true 并不向set添加一个新分支,因为它访问的所有点也可以通过合并路径#2和路径#3来访问。
不管您向集合中添加路径的顺序是什么,这个结果都将保持不变--总是最后(第4条)路径不会添加以前路径没有访问过的新分支。
另一方面,完整的分支覆盖更多地是一种软件度量。因为我们知道,在软件中,有时两个分支在一起测试会给出不同的结果,所以只需要测试第一个分支,然后单独测试第二个分支。
在图论中,循环复杂度不考虑分支之间的交叉关系(仅仅是“新”分支的数量),但是在软件工程中,如果您想要完全覆盖,则需要测试所有可能的路径。
一般情况下,最小测试的数量需要<=循环复杂度,<=测试数用于整个分支覆盖。
https://stackoverflow.com/questions/71840630
复制相似问题