问题标签 [cyclomatic-complexity]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
588 浏览

java - 如何降低圈复杂度?

我有一个像下面这样的方法。请帮助避免循环复杂性。

0 投票
1 回答
485 浏览

cyclomatic-complexity - 简单的圈复杂度计算

我发现这个网站声称, Cyclomatic Complexity = ( 2 + ifs + loops +cases - return )我还发现循环复杂度可以通过条件语句的数量 + 1 来计算,这基本上是相同的。

现在上面指出,对于 switch 中的每种情况,将 +1 添加到 Cyclomatic Complexity,如果我在每种情况下都有一个 return 语句会发生什么?

例如,下面代码的 CC 还是 4 还是 2?

}

0 投票
3 回答
661 浏览

c++ - Mac 的 McCabe 风格的函数复杂度测试

我可以使用什么工具在 Max OS X 上测试我的代码的 McCabe 风格的函数复杂性?

有用于 Linux 的pmccabe,它在我部门的机器上以及他们希望我使用的机器上。它分析某些项目文件中的每个函数并为每个函数输出数据,包括作为 McCabe 样式整数的函数复杂性(示例输出)。我喜欢具有相同功能的东西。

0 投票
3 回答
1362 浏览

java - 降低代码的圈复杂度

Sonar给出了以下代码的主要违规错误(“循环复杂性”)。以下方法用于获取特殊格式的日期,例如14-02-3(Year-month-weekid)。

我该如何克服这种违规行为?

0 投票
1 回答
523 浏览

visual-studio-2013 - Visual Studio 2013 Ultimate 中 CA1502 的自定义阈值

这个问题:CA1502 的自定义阈值 讨论了如何在代码分析中为代码度量规则设置自定义阈值。

我有同样的问题,但认为旧问题已过时。

重复:

特别是,当方法的代码复杂度超过 20 时,我们希望构建失败。不幸的是,规则 CA1502 的阈值为 25:

当圈复杂度大于 25 时,该规则报告违规。

我们能以某种方式改变这一点吗?

接受的答案是编辑 .fxcop 文件以包含规则。在 Visual Studio 2013 Ultimate 中,我们集成了代码分析和代码度量;但我们似乎没有 .fxcop 规则——我认为这曾经是 fxcop 是一个单独的扩展名的时候。

有什么方法可以编辑 Visual Studio 生成的 .ruleset 文件中的阈值?还是我错过了如何以及在何处获取最新版本中的 .fxcop 文件?

0 投票
1 回答
15693 浏览

c - 计算 C 代码的圈复杂度的工具

我想要一个工具来分析我的代码质量,经过一番谷歌搜索后,我想我明白 Cyclomatic Complexity 可以从这里开始。我试图让几个工具工作但没有成功(发现大多数是为 Java 开发的)。我的要求是:

  • 应该在 C 代码上工作
  • 应该在 Ubuntu (12.04) 上工作
  • 应该是免费的
  • (可选)eclipse插件

我将不胜感激

0 投票
1 回答
79 浏览

code-metrics - McCabe 公式是否考虑数据流?

使用 McCabe 公式时

M = EN + 2C

是否考虑到数据是否仅限于一个方向流动?图表似乎显示了数据在多个方向上的流动,不管这是否真的发生了。

具有一个数据流方向的代码库与另一个(非常相似的)数据可以来回传输的代码库将不那么复杂。

这篇关于 Facebook、MVC 和 Flux 的文章是我所问问题的一个很好的例子:http: //www.infoq.com/news/2014/05/facebook-mvc-flux。他们最初使用 MVC 来回传数据(从视图到模型,反之亦然)。一旦将 MVC 切换为 Flux,数据就会朝一个方向流动。

0 投票
1 回答
1361 浏览

design-patterns - 多个返回语句的圈复杂度

我读到了圈复杂度和多个返回语句,但我有点困惑,因为对多个返回语句有不同的看法。

首先,在循环复杂度计算期间,我是否应该将每个返回语句算作一个端点,这会增加我认为的复杂度?在公式(M = E - N + 2*P)中,当我添加return语句时,它会增加1,对吗?

用于简单完整性检查的 Guard 子句添加是另一种方法,而不是嵌套的 if 子句,以便尽快返回。但是,这会在代码中添加更多的返回语句并增加 CC 吗?

就 CC 而言,是否有任何常见的最佳实践来使用保护子句和多个返回语句?

0 投票
4 回答
12800 浏览

java - 声纳圈复杂度规则问题 - 不鼓励使用多个返回语句

对于以下代码,sonarqube 计算方法的圈复杂度为 9

我理解根据计算规则http://docs.sonarqube.org/display/SONAR/Metrics+-+Complexity 9 的复杂性是正确的。所以方法的复杂度是 = 4 (if) + 4 (return) + 1 (method) = 9

如果我有一个退出点,则可以降低这种复杂性。

我相信这段代码比以前的版本更杂乱和不可读,我觉得拥有返回保护条件的方法是一种更好的编程实践。那么,是否有充分的理由考虑使用 return 语句来计算圈复杂度?是否可以更改计算逻辑,使其不促进单个退出点。

0 投票
3 回答
2254 浏览

java - 在大型枚举上使用 switch-case 时可以避免高圈复杂度(警告)吗?

假设一个方法根据一个相当大的枚举中的一个值来选择一个动作。我们的声纳现在抱怨这种方法的圈复杂度很高(自然是关于 case 语句的数量)。

我知道,大型 switch case 语句并不是 OOP 中的最佳风格,但有时使用它们(在我的例子中是评估运算符标记的解析器)而不是构建复杂的对象树是非常合适的。

我现在的担心是怎么处理的?是否有任何设计模式可以有意义地拆分这样的开关盒?或者我可以(并且我应该)将课程排除在测量 CC 之外(因为其中可能有其他方法可以轻松避免高 CC)?

这不是一件真正关键的事情。我只是不喜欢我的项目有我无法删除的警告;o)

编辑:代码示例