问题标签 [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.
java - 如何降低圈复杂度?
我有一个像下面这样的方法。请帮助避免循环复杂性。
cyclomatic-complexity - 简单的圈复杂度计算
我发现这个网站声称, Cyclomatic Complexity = ( 2 + ifs + loops +cases - return )
我还发现循环复杂度可以通过条件语句的数量 + 1 来计算,这基本上是相同的。
现在上面指出,对于 switch 中的每种情况,将 +1 添加到 Cyclomatic Complexity,如果我在每种情况下都有一个 return 语句会发生什么?
例如,下面代码的 CC 还是 4 还是 2?
}
java - 降低代码的圈复杂度
Sonar给出了以下代码的主要违规错误(“循环复杂性”)。以下方法用于获取特殊格式的日期,例如14-02-3
(Year-month-weekid)。
我该如何克服这种违规行为?
visual-studio-2013 - Visual Studio 2013 Ultimate 中 CA1502 的自定义阈值
这个问题:CA1502 的自定义阈值 讨论了如何在代码分析中为代码度量规则设置自定义阈值。
我有同样的问题,但认为旧问题已过时。
重复:
特别是,当方法的代码复杂度超过 20 时,我们希望构建失败。不幸的是,规则 CA1502 的阈值为 25:
当圈复杂度大于 25 时,该规则报告违规。
我们能以某种方式改变这一点吗?
接受的答案是编辑 .fxcop 文件以包含规则。在 Visual Studio 2013 Ultimate 中,我们集成了代码分析和代码度量;但我们似乎没有 .fxcop 规则——我认为这曾经是 fxcop 是一个单独的扩展名的时候。
有什么方法可以编辑 Visual Studio 生成的 .ruleset 文件中的阈值?还是我错过了如何以及在何处获取最新版本中的 .fxcop 文件?
c - 计算 C 代码的圈复杂度的工具
我想要一个工具来分析我的代码质量,经过一番谷歌搜索后,我想我明白 Cyclomatic Complexity 可以从这里开始。我试图让几个工具工作但没有成功(发现大多数是为 Java 开发的)。我的要求是:
- 应该在 C 代码上工作
- 应该在 Ubuntu (12.04) 上工作
- 应该是免费的
- (可选)eclipse插件
我将不胜感激
code-metrics - McCabe 公式是否考虑数据流?
使用 McCabe 公式时
M = EN + 2C
是否考虑到数据是否仅限于一个方向流动?图表似乎显示了数据在多个方向上的流动,不管这是否真的发生了。
具有一个数据流方向的代码库与另一个(非常相似的)数据可以来回传输的代码库将不那么复杂。
这篇关于 Facebook、MVC 和 Flux 的文章是我所问问题的一个很好的例子:http: //www.infoq.com/news/2014/05/facebook-mvc-flux。他们最初使用 MVC 来回传数据(从视图到模型,反之亦然)。一旦将 MVC 切换为 Flux,数据就会朝一个方向流动。
design-patterns - 多个返回语句的圈复杂度
我读到了圈复杂度和多个返回语句,但我有点困惑,因为对多个返回语句有不同的看法。
首先,在循环复杂度计算期间,我是否应该将每个返回语句算作一个端点,这会增加我认为的复杂度?在公式(M = E - N + 2*P)中,当我添加return语句时,它会增加1,对吗?
用于简单完整性检查的 Guard 子句添加是另一种方法,而不是嵌套的 if 子句,以便尽快返回。但是,这会在代码中添加更多的返回语句并增加 CC 吗?
就 CC 而言,是否有任何常见的最佳实践来使用保护子句和多个返回语句?
java - 声纳圈复杂度规则问题 - 不鼓励使用多个返回语句
对于以下代码,sonarqube 计算方法的圈复杂度为 9
我理解根据计算规则http://docs.sonarqube.org/display/SONAR/Metrics+-+Complexity 9 的复杂性是正确的。所以方法的复杂度是 = 4 (if) + 4 (return) + 1 (method) = 9
如果我有一个退出点,则可以降低这种复杂性。
我相信这段代码比以前的版本更杂乱和不可读,我觉得拥有返回保护条件的方法是一种更好的编程实践。那么,是否有充分的理由考虑使用 return 语句来计算圈复杂度?是否可以更改计算逻辑,使其不促进单个退出点。
java - 在大型枚举上使用 switch-case 时可以避免高圈复杂度(警告)吗?
假设一个方法根据一个相当大的枚举中的一个值来选择一个动作。我们的声纳现在抱怨这种方法的圈复杂度很高(自然是关于 case 语句的数量)。
我知道,大型 switch case 语句并不是 OOP 中的最佳风格,但有时使用它们(在我的例子中是评估运算符标记的解析器)而不是构建复杂的对象树是非常合适的。
我现在的担心是怎么处理的?是否有任何设计模式可以有意义地拆分这样的开关盒?或者我可以(并且我应该)将课程排除在测量 CC 之外(因为其中可能有其他方法可以轻松避免高 CC)?
这不是一件真正关键的事情。我只是不喜欢我的项目有我无法删除的警告;o)
编辑:代码示例