Questions tagged «cyclomatic-complexity»


7
避免过于复杂的方法-循环复杂性
不确定如何使用这种方法来降低环复杂性。声纳报告为13,而预期为10。我敢肯定,保持这种方法不会造成任何危害,不过,这只是挑战我如何遵循Sonar的法则。任何想法将不胜感激。 public static long parseTimeValue(String sValue) { if (sValue == null) { return 0; } try { long millis; if (sValue.endsWith("S")) { millis = new ExtractSecond(sValue).invoke(); } else if (sValue.endsWith("ms")) { millis = new ExtractMillisecond(sValue).invoke(); } else if (sValue.endsWith("s")) { millis = new ExtractInSecond(sValue).invoke(); } else if (sValue.endsWith("m")) { millis …

2
多次调用相同方法时的圈复杂度
多亏了Code Review的一个问题,我对以下代码的确切复杂度有一点分歧(这本质上是一个学习的机会)。 public static void main(String[] args) { try { thro(); thro(); thro(); thro(); thro(); thro(); thro(); } catch (NullPointerException e) { } } private static Random random = new Random(); public static void thro() throws NullPointerException { if (random.nextBoolean()) throw new NullPointerException(); System.out.println("No crash this time"); } 在Eclipse中使用Eclipse指标插件编写此代码时,它告诉我main方法的McCabe Cyclomatic …

6
迭代方法是否可以降低循环复杂度并提高可支持性?
诸如C#,JavaScript之类的现代语言中常见的迭代方法以及Java 8中(希望如此)的迭代方法是否可以减少循环复杂性对代码的易读性和可支持性的影响? 例如,在C#中,我们可能具有以下代码: List<String> filteredList = new List<String>(); foreach (String s in originalList){ if (matches(s)){ filteredList.add(s); } } 这具有2的简单圈数复杂度。 我们可以轻松地将其重写为: List<String> filteredList = originalList.where(s => matches(s)); 其简单的圈复杂度为0。 这实际上会导致更受支持的代码吗?是否有关于该主题的实际研究?

3
了解环复杂性
我最近遇到了“ 圈复杂度”问题,我想尝试更好地理解它。 计算复杂度的不同因素有哪些实用的编码示例?具体来说,对于的Wikipedia等式M = E − N + 2P,我想更好地理解以下各个术语的含义: E =图的边数 N =图的节点数 P =连接的组件数 我怀疑E或N可能是代码块中决策点的数量(如果是,则是foreach等),但是我不确定是哪个代表另一个。我还猜测P是指函数调用和类实例化,但是鉴于我可以看到,没有一个明确的定义。如果某人可以通过一些清晰的代码示例来阐明更多信息,那将会有所帮助。 作为后续措施,环复杂性是否与100%路径覆盖所需的单元测试数量直接相关?例如,复杂度为4的方法是否表示需要4个单元测试才能覆盖该方法? 最后,正则表达式会影响环复杂度吗?

7
为什么圈复杂度对于单一方法如此重要?
从最近开始,我就在SonarLint for Eclipse中使用它,这对我有很大帮助。但是,它向我提出了关于圈复杂度的问题。 SonarLint认为可接受的CC为10,在某些情况下我超出了CC,大约为5或6个单位。这些部分与映射器相关,其中值依赖于不同的变量,例如: 字段A依赖于字符串sA; 字段B依赖于String sB; 字段C依赖于String sC; 等... 我别无选择,只能if为每个领域放一个。(幸运的是)这不是我的选择,而是我自己无法更改的已经存在的复杂系统。 我的问题的核心是:为什么单一方法中 CC不能过高如此重要?如果您将某些条件转移到一个或多个子方法中以降低复杂性,那么它并不能降低整体功能的成本,只是将问题转移到其他地方,我猜? (对不起的小错误,如有)。 编辑 我的问题不涉及全局圈复杂性,而仅涉及单个方法的复杂性和方法的拆分(抱歉,我很难解释我的意思)。我在问为什么如果仍然属于“超级方法”,为什么可以将您的条件拆分为较小的方法,而超级方法只能执行每个子方法,从而增加了算法的复杂性。 但是,第二个链接(关于反模式)很有帮助。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.