问题标签 [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 投票
1 回答
3191 浏览

java - 如何测量 C++ 或 Java 文件的复杂性?

我想开始衡量 Michael Feathers 所说的代码的动荡,即churn vs.complexity

为此,我需要测量 C++ 或 Java 文件的复杂性。所以我找到了几个测量圈复杂度(CC)的工具。他们每个人都在功能或方法级别上很好地衡量了 CC。但是,我需要一个文件级别的指标,而他们在那里做得不太好。一个工具只返回文件中所有方法复杂度的平均值,而另一个工具将整个文件视为一个巨大的方法,即它计算整个文件中的所有决策点。

所以我做了一些研究,发现 McCabe 仅根据模块来定义 CC——他们将模块定义为函数——而不是文件(参见本演示文稿的幻灯片 20 和 30 )。我认为这是有道理的。

所以现在我只剩下试图弄清楚如何表示文件复杂性了。我的想法是我应该只使用该文件的最大方法 CC。

关于这种方法或任何其他建议的任何想法?

谢谢!

0 投票
2 回答
3149 浏览

sonarqube - 声纳 -LOC 和圈复杂度

Sonar 如何计算软件指标,尤其是 LOC 和圈复杂度?它是否使用任何特定工具?如果是,请同时提供姓名。

0 投票
3 回答
4367 浏览

c# - 需要帮助降低圈复杂度

我有一个方法叫做UpdateUserDevices (UserModel). UserModel包含将设备List<DeviceModel>列表与特定用户相关联的 。(一对多)。

当我调用该方法时,一切都按预期工作,但是嵌套循环和 if 语句非常复杂。

什么是减少圈复杂度的好模式?我想到了“CoR”,但这可能有点矫枉过正。

0 投票
2 回答
5558 浏览

ios - 如何找到 Xcode 项目的圈复杂度?

我想知道有没有办法找到在 Xcode 中创建的项目的圈复杂度。

谢谢

0 投票
1 回答
1650 浏览

cyclomatic-complexity - 给我解释一下圈复杂度的控制流程

我必须找到这段代码的圈复杂度,然后建议一些白盒测试用例和黑盒测试用例。但是我在为代码制作 CFG 时遇到了麻烦。

0 投票
1 回答
435 浏览

vb.net - 为什么在重新排列带有其他相关因素的 switch 语句时,圈复杂度会发生变化?

以下方法的 CC 将生成为 9

但是当用户定义枚举成员值时,Fruity 方法的 CC 增加到 14。

现在假设我将 select-case 语句更改如下,然后方法 Fruity 的 CC 更改为 7,但与上述 select-case 相比,可维护性指数略有下降。

在最后一个场景中,我将参数的数据类型更改为整数并访问一个名为蔬菜的不同枚举,其值为 50。现在,Fruity 方法的 CC 飙升至 52。但如果我将 Potato 的值更改为 0 或 1然后CC保持在15。

这些都在 VS 2008 Team 系统版 3.5SP1 中进行了测试。我想知道为什么这4种情况下CC会有波动。

它与下面给出的第二点有关吗?因为如果我在第 4 种情况下删除掉线案例,CC 确实会下降到 9。那么这是 VS 2008 中的错误吗?

Visual Studio 2010 特别说明

使用不适用于 Visual Studio 2008 的 Visual Studio 2010 计算代码指标时可能存在差异。在线文档 ( http://msdn.microsoft.com/en-us/library/ee703787.aspx ) 给出了以下原因:

  1. 该函数包含一个或多个 catch 块。在 Visual Studio 的早期版本中,catch 块不包括在计算中。在 Visual Studio 2010 中,每个 catch 块的复杂性被添加到函数的复杂性中。

  2. 该函数包含一个 switch(VB 中的 Select Case)语句。Visual Studio 2010 和更早版本之间的编译器差异可能会为某些包含失败案例的 switch 语句生成不同的 MSIL 代码。

0 投票
4 回答
10791 浏览

javascript - 关闭 JSHint 中的圈复杂度

我正在使用 JSHint,我想关闭圈复杂度。

我怎样才能做到这一点?

0 投票
2 回答
6112 浏览

php - 为什么这段代码的圈复杂度很高 - 或者它是 Jenkins 中 PHPMD 中的一个错误?

我试图了解 Cyclomatic Complexity 的工作原理以及如何避免警告。是的,我知道编写代码的目的不是避免任意警告,但我至少想知道发生了什么,这样我就可以决定我看到的代码是好是坏。

我有一个看起来像这样的函数:

这被标记为具有 10 的圈复杂度。这怎么可能?从文档中,我将其视为 1。唯一的可能性是 PHPMD 正在下降到各种方法调用中。

但如果是这样,那么我没有办法“修复”这种方法。一般来说,我会通过提取更小的辅助方法来降低方法的复杂性。这个方法已经被重构为那些不同的 update() 方法,以消除发生的一堆条件更新。原始方法的圈复杂度也为 10,重构什么也没做。

或者问题可能更简单——我正在通过与 Jenkins 建立的持续集成来运行 PHPMD。PHPMD 没有使用最新的代码会不会有问题?在我已经将类重构到行数限制以下之后,我遇到了一些类似的问题,它会将一个类标记为有太多行。

0 投票
1 回答
118 浏览

testing - 计算独立路径的数量

在计算独立路径的数量时,是否应该将使用 && 连接的布尔表达式视为单独的语句?例如,第 3 行有两个条件,如果第一个表达式为假,则将计算后续表达式。

0 投票
2 回答
5205 浏览

c# - 如何解决 CA1502:避免过于复杂?

根据代码分析结果,以下是警告信息,

CA1502 避免过度复杂 'METHOD()' 的圈复杂度为 27。重写或重构方法以将复杂度降低到 25。BusinessServices
ReportService.cs 310

什么是圈复杂度以及如何解决这个问题?