问题标签 [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.
c# - 生产项目的代码指标(C#、Visual Studio)的常用值
这里有一些关于代码度量的问题,尤其是关于目标值的问题。我正在寻找的是在现实生活中的制作项目中“常见”的东西。也许只有我一个人,但我参与的任何项目都没有考虑过这些事情,所以当我运行 ReSharper Code Issues 或 Visual Studio Code Metrics 时,我似乎是第一个 - 所以这些值总是让我感到惊讶。
我当前的 SharePoint 作业示例:
所以,问题是,你通常在“野外”看到什么价值观?除了最优值和最佳实践,通常会遇到什么值?
sonarqube - 您如何在 Sonar 中列出项目中最复杂的方法?
在 Sonar 中,您可以将类列表按类方法的平均复杂度排序(当您从仪表板列出每个方法的复杂度时)
但是您如何列出项目范围内最复杂的方法?
c# - 在一个有 13 个事件处理程序订阅的方法中,圈复杂度怎么可能是 27?
我们有这个代码,排序:
VS10 Ultimate 中的代码分析说“27 的圈复杂度”。删除其中一条线使圈复杂度为 25。
没有分支正在进行,所以这怎么可能?
c# - 动态关键字导致 Visual Studio 2010 代码分析中的 Cyclomatic Complexity > 25
我有一段与此类似的代码:
我创建了这个例子,根据代码分析,那段代码的圈复杂度是 25。
在 IL spy 中反汇编代码时,您可以看到:
我的问题显然是 if else 和编译器生成的逻辑正在增加复杂性。但是,如果可能的话,我如何将代码分析配置为不在此级别上运行,而是在更简单的编码(预编译)阶段作为第一个代码片段进行评估?
sonarqube - “复杂性”指标和“复杂性/方法”指标之间的区别
在声纳中,对于特定的 Java 类,我看到:
您如何解释这两个指标之间的区别?
“复杂性”是类复杂性吗?
一个类应该处于的最大复杂度是多少?我知道方法复杂度应该小于 10,但是一个类应该符合的最大类复杂度数是多少?
谢谢。
编辑
我还查看了文件中的 Cyclomatic-Complexity 规则违规。
对于许多方法,声纳用不同的复杂性数字(法语)说:
“La complexité cyclomatique de la classe est de 28 alors que le maximum autorisé est de 10。”
用英语 :
“类圈复杂度为 28,但允许的最大值为 10”。
我不明白为什么它说“类圈复杂度”,因为它似乎是“方法圈复杂度”。
此外,所讨论的类不会出现在按平均复杂度/方法排序的最复杂类的顶部,因为声纳说它只有 8,1 平均方法复杂度。
java - 降低循环复杂性的方法
我在一个大型 Java 项目(移动应用程序)上工作,并且由于性能不佳(高复杂性)而获得了审查和优化/重构代码的“感谢”工作。注意:我对 Java 完全陌生(我的背景是 C/C++),因此我申请任何愚蠢的问题。我做的第一件事是使用 Findbugs 并修复所有报告的问题。之后我使用了度量工具Understand来大致了解一下哪些方法的圈复杂度很高。不幸的是,有很多方法的圈复杂度高于 2^20 范围 :-( 其中之一是我需要一些帮助或好主意的地方......
简短描述:对于与服务器的通信,数据必须被序列化。此移动框架上没有可用的 Serializable 接口。因此,编写所有代码(单独)的同事实现了一个包含一个名为的方法的 Serializable 接口toByteArray()
。例如class Customer
:
为了保持较低的 GPRS 费用,服务器在 this.usage.value 中设置了一个值,因此只有一个特定的属性将被序列化并传输回服务器 --> 传输的消息很小。这种方法会创建很多 if-case,具体取决于类中有多少属性,因此路径计数会越来越高。我认为这不是一个完美的解决方案,但没关系。我想改变的是 if-cases 中的序列化调用。目前它们看起来像这样:
应该可以编写一个更“通用”的类来完成所有序列化工作,我说序列化 xy 字节就是这样。但我不明白的是“特殊”toByteArray()
方法,如字符串(UTF-16 编码)或日期和时间?如果我把它们放在一个班级里,这是一个好的解决方案吗?我有什么收获吗?可维护代码?高性能代码??你的方法是什么?
谢谢
cyclomatic-complexity - 圈数
我试图理解 McCabe 的圈数并且我了解了它的实际用途,即它用于表示程序的复杂性。它直接测量通过程序源代码的线性独立路径的数量。(从维基百科阅读)
但我想知道它真正衡量的是哪个软件实体和属性。
path-finding - McCabe 的复杂性度量和独立路径
对于上面的代码,如果我们绘制这样的流程图,基本独立路径将遵循六个
路径 1:1 2 3 10 11 12 13 19
路径 2:1 2 3 10 11 12 13 14 15 18 13 19
路径 3:1 2 3 10 11 12 13 14 15 16 17 15 18 13 19
路径 4:1 2 3 4 5 9 3 10 11 12 13 19
路径 5:1 2 3 4 5 6 8 5 9 3 10 11 12 13 14 15 16 17 15 18 13 19
路径 6: 1 2 3 4 5 6 7 8 5 9 3 10 11 12 13 14 15 16 17 15 18 13 19
所以这里的问题是根据给定的代码路径 2、3、4 无法测试(注意循环中的“N”)。那么没有基本集合中给出的实际执行路径可以吗?...或者根据macabe复杂性指标,我们是否必须更改上面给出的代码。因为我的一位导师说我们必须更改代码,他也说存在非结构化循环,所以我们必须更改代码。(我也没有看到非结构化循环)但我的感觉是,如果我们更改代码,实际输出可能与预期输出不同。所以请有人解释一下
cyclomatic-complexity - 控制流图和圈复杂度
我必须找到这段代码的控制流图和圈复杂度,然后提出一些白盒测试用例和黑盒测试用例。但是我在为代码制作 CFG 时遇到了麻烦。
也希望对测试用例有一些帮助。