【问题标题】:Understanding cyclomatic complexity了解圈复杂度
【发布时间】:2013-08-08 15:56:46
【问题描述】:

我有一段代码基本上是这样的:

public MyObject getData(boolean someFlag) {

    String select1 = "SELECT * FROM myTable WHERE someInteger = ?";
    SqlHostvariablen hostvars = new SqlHostvara();
    hostvars.addInteger(myField.getSomeInteger);
    String[][] selarray = SqlHelper.doSelectAsMatrix(select1, hostvars);
    if (selarray.length == 0) {
        throw new IllegalArgumentException("Nothing found");
    }
    MyObject foo = new MyObject();
    int i = 0;
    foo.setSomething1(selarray[0][i++]);
    foo.setSomething2(selarray[0][i++]);
    foo.setSomething3(selarray[0][i++]);
    foo.setSomething4(selarray[0][i++]);
    foo.setSomething5(selarray[0][i++]);
    foo.setSomething6(selarray[0][i++]);
    foo.setSomething7(selarray[0][i++]);
    foo.setSomething8(transformSomething8(selarray[0][i++]));
    foo.setSomething9(selarray[0][i++]);
    foo.setSomething10(selarray[0][i++]);
    String someValue1 = selarray[0][i++];
    String someValue2 = selarray[0][i++];
    foo.setSomething11(selarray[0][i++]);

    doSomethingWithFoo(foo, someFlag, someValue1, someValue2);
    doSomethingElseWithFoo(foo);

    return foo;
}

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

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

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

【问题讨论】:

  • 可能由于数组操作上的索引越界未处理异常而导致一些隐藏路径?只是一个想法。
  • @criticalfix 也想过这个问题,但找不到任何类似的信息:-/
  • 直接检验假设可能更直接。如果你注释掉你的 foo.setSomething 行并且你的 CC 降到 11,那么criticalfix 可能会出现问题
  • 事实证明,将其关闭并再次打开会有所帮助。警告今天早上消失了。昨天即使清理项目也无济于事。很抱歉打扰了各位,感谢您的帮助。我现在将关闭此问题并稍后将其删除,以便感兴趣的人仍然可以阅读此评论一段时间。
  • @stonedsquirrel:更好的 answer the question 带有“Checkstyle 确实需要重新启动

标签: checkstyle cyclomatic-complexity


【解决方案1】:

原来这是一个 Checkstyle 错误。虽然甚至没有解决问题,但在系统重新启动后,警告就消失了。 Eclipse 重启可能就够了,无法确定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多