首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算循环复杂度?

计算循环复杂度?
EN

Stack Overflow用户
提问于 2022-04-12 09:56:23
回答 1查看 92关注 0票数 -1

如何正确计算循环复杂度?

根据维基百科以下代码的循环复杂度:

代码语言:javascript
复制
if (c1())
    f1();
else
    f2();

if (c2())
    f3();
else
    f4();

是3,但我理解为4:

  • 2*2=4
  • 看图(见图)有4条不同的路径--2(左、左、右)。

我遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2022-04-12 11:48:27

循环复杂度和全分支覆盖之间有一个微妙的差别。

周期复杂度是一种纯数学度量。简单地放置-测量将新分支添加到当前路径集的路径数。

所以在你的例子中-我们从一个空集开始。false/false是一条路径(#1),然后true/false添加了一个新分支(第一个if) (#2)。然后false/true添加一个新分支(第二个if) (#3)。

但是,path true/true 并不向set添加一个新分支,因为它访问的所有点也可以通过合并路径#2和路径#3来访问。

不管您向集合中添加路径的顺序是什么,这个结果都将保持不变--总是最后(第4条)路径不会添加以前路径没有访问过的新分支。

另一方面,完整的分支覆盖更多地是一种软件度量。因为我们知道,在软件中,有时两个分支在一起测试会给出不同的结果,所以只需要测试第一个分支,然后单独测试第二个分支。

在图论中,循环复杂度不考虑分支之间的交叉关系(仅仅是“新”分支的数量),但是在软件工程中,如果您想要完全覆盖,则需要测试所有可能的路径。

一般情况下,最小测试的数量需要<=循环复杂度,<=测试数用于整个分支覆盖。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71840630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档