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

java - java切换圈复杂度与性能

我在这里有一个案例,其中 switch 语句包含大约 40 个案例,每个案例都根据输入返回不同的配置对象。这种方法在度量中显示为具有太高的圈复杂度,通常我会将其更改为处理程序对象的映射。但是这个开关位于一段代码中,其中性能是最重要的,所以我想出了一个问题,即 HashMap 查找和处理程序调用如何与开关块执行性能进行比较。有人比较过吗?值得考虑吗?或者对于有限数量的 int 键是否有更快的查找对象?

干杯,凯

0 投票
1 回答
989 浏览

javascript - javascript:包装函数的圈复杂度

我的大多数 javascript 代码文件如下所示:

我尝试了许多计算代码圈复杂度的工具,但它们都生成了错误的报告(从我的角度来看),即:它们都将包装函数作为最复杂的函数。

这样做的问题是所有报告都被这个事实严重扭曲:包装函数通常占据复杂度饼图的一半以上,并且所有平均数字都有偏差。

有没有办法获得我的代码的真正复杂性,而不是受到包装函数的偏见?

所有这些工具都做错了吗?将我的代码包装在一个函数中以进行范围界定(我不这么认为),我做错了吗?我使用这些工具做错了吗?

编辑

有人建议在计算复杂度之前删除包装函数,我很乐意这样做,但是有没有可靠的方法可以自动完成呢?请忽略这一点并寻求适当的解决方案。

0 投票
3 回答
41519 浏览

java - 如何降低圈复杂度?

我正在研究一个将 RequestDTO 发送到 Web 服务的类。我需要在发送之前验证请求。

请求可以从 3 个不同的地方发送,每个“请求类型”有不同的验证规则,例如 request1 必须有姓名和电话号码,request2 必须有地址等)

我有一个 DTO,其中包含一长串字段(姓名、地址、城市、电话号码等),无论它是哪种类型的请求,它都是相同的 DTO。

我创建了 3 种不同的验证方法,并根据类型调用适当的方法。

在每种方法中,我都有一长串 if-else 来检查每种请求类型所需的字段。

isFieldEmpty()检查字符串是否为 nullisEmpty()并返回一个布尔值

在其中一种方法中,这给了我 28 的圈复杂度,所以我的问题是.. 是否有可能降低这种复杂度?- 如果是这样,我将如何去做?

最终我需要检查很多字段,如果没有大量检查,我看不到如何做到这一点:/

0 投票
2 回答
278 浏览

java - 以区间降低圈复杂度

以下 java 代码给出了相当高的圈复杂度。我想找到一种适当减少它的方法。我将如何最好地做到这一点?

需要明确的是,代码根据值是否在两个限制之间来获取值的相应结果。该值本身可以是 -10000 到 +200000 之间的任何整数。问题主要出在“小于或等于”运算符上,这妨碍了库的简单使用。两个限制之间的范围可以不同,我们所说的范围是 10000 秒,一个示例间隔是 [<0...10000....25000...32500...]。范围是相当随意的数字,由业务决定。

您可以假设 LIMIT 值是常量,在类的开头定义。设置的结果值也是如此。将它们从常量更改为其他值是可能的。

有任何想法吗?

0 投票
4 回答
2603 浏览

java - JAVA的圈复杂度范围应该是多少

我想知道圈复杂度的标准范围应该是多少?

它取决于语言或平台,还是对所有人都通用?

我正在使用 State of Flow - EclipseMetrics,它是一个 Eclipse 插件,它会在构建周期中为您的代码计算各种指标,并通过“问题”视图警告您每个指标的“范围违规”。

0 投票
2 回答
2263 浏览

algorithm - 伪代码的圈复杂度

圈复杂度是实现特定模块的全面测试覆盖所必需的测试用例的数量。

考虑以下伪代码:

我认为这里只需要两个测试用例,一个用于真条件,另一个用于假条件,所以圈复杂度应该是 2,但答案是 3(不知道为什么)。

有人请帮我理解为什么答案是 3 而不是 2。

0 投票
5 回答
38296 浏览

javascript - 我怎样才能降低圈复杂度?

每当我 lint 我正在处理的一段代码时,我都会得到This function's cyclomatic complexity is too high. (7). 但是我对如何以这种方式重写它使其起作用感到有些困惑。

这将是不断抛出该消息的函数:

我想听听一些关于如何以这种方式构造我的代码的建议,这样我就可以避免这种情况。

0 投票
1 回答
929 浏览

checkstyle - 了解圈复杂度

我有一些基本上看起来像这样的代码:

标识符和 SQL 语句是匿名的,但我的方法看起来是一样的。

现在 Checkstyle 声称如果这种方法是 12 的圈复杂性。我一直以为我知道 CC 是什么,据我所知,我会说这种方法 CC 是 2。有一个方法if通过代码和控制流创建了一条新路径因此,图有 2 个路径/出口点。我看不出还有什么地方应该通过代码。

我是完全遗漏了什么还是 Checkstyle 错了?

0 投票
2 回答
167 浏览

actionscript-3 - ActionScript 3 的圈复杂度

我正在尝试计算我的软件的圈复杂度,但我有点困惑。据我了解,这是覆盖整个软件需要测试的路径数量。通常有 if 语句和循环会导致决策并因此增加路径但是我下面的代码没有循环或 if 语句,因此它只是 1 的复杂度吗?

我相信这个类的复杂度也为 1。

如果有人可以让我知道我是对还是错,我将不胜感激。这是一个 Flash 项目,因此代码是用 ActionScript 3 编写的。

0 投票
2 回答
536 浏览

c# - 检查多个文本框中的至少一个是否有内容的最佳方法?

我有一个“搜索页面”,要求至少一个文本框有一些输入。以下方法可以这样验证:

这种方法的结果没有任何问题。我的问题与性能有关:是否有更好的方法来进行此检查?我想到的一种可能的选择:

我认为当第一个字段不为空时使用 if-return 模式会更好,但对于其他用例,使用String.Concat更好。

有人可以让我知道哪种方式更好,为什么?还有其他更好的方法吗?