标签: cyclomatic-complexity

IF的循环复杂度((A> B)和(C> D))和IF((A> B)OR(C> D))

我想知道两段代码的圈复杂度,

IF((A>B) AND (C>D)) 
{ a=a+b;c=c+d;}
Run Code Online (Sandbox Code Playgroud)

据我所知,上述代码的圈复杂度= 2 + 1 = 3,

另一个代码

IF((A>B) OR (C>D))
{a=a+b;c=c+d;}
Run Code Online (Sandbox Code Playgroud)

上面代码的复杂性是= 4 + 1 = 5,

上述复杂性是否正确?

cyclomatic-complexity

5
推荐指数
2
解决办法
5272
查看次数

为什么这个功能12的圆柱复杂性?

我有一个(C#)函数检查四组条件并返回一个bool.如果其中任何一个为真,则返回true.我确信我可以简化逻辑,但我希望它具有相当的可读性.

Visual Studios中的CodeMaid扩展并告诉我该函数的cylomatic复杂性为12.我查了一下,并且cylomatic复杂性是

通过源代码的独立路径的数量

我不明白为什么它是12.我可以用两种方式来考虑它,要么圈复杂度应该是2,因为它总是通过相同的路径但是可以返回a true或a false.或者可以理解它是否是16,因为最后四个布尔or在一起可能都是真或假,2*2*2*2 = 16.

有人可以告诉我为什么它的12?甚至可能会显示一个图表,以便我可以看到不同的路径?

public bool FitsCheckBoxCriteria(TaskClass tasks)
{
    // note: bool == true/false comparisons mean you don't have to cast 'bool?' as bool


    // if neither checkboxes are checked, show everything
    bool showEverything = NoShutDownRequiredCheckBox.IsChecked == false &&
                          ActiveRequiredCheckBox.IsChecked == false; 

    // if both are checked, only show active non-shutdown tasks
    bool showActiveNonShutdown = ActiveRequiredCheckBox.IsChecked == true &&
                                 tasks.Active == "YES" &&
                                 NoShutDownRequiredCheckBox.IsChecked == true …
Run Code Online (Sandbox Code Playgroud)

c# complexity-theory cyclomatic-complexity

5
推荐指数
1
解决办法
321
查看次数

减少循环复杂性

我有一个代码块,我有一个问题,减少了圈复杂度.由于必须匹配的多个条件,我不确定进一步分解它的最佳方法.使问题复杂化的是,在2个案例中创建了一个新对象,但在第三个案例中却没有(它调用另一个方法).这是伪代码:

    if (!cond3 && !cond1 && cond2 && cond4) {
        // actions to perform
        calculateValues();
        return result;
    } else if (!cond1 && cond2 && cond3) {
        // actions to perform
        Object result = new Result();
        return result;
    } else if (!cond4 && cond3 && cond1 && cond5) {
        // actions to perform
        Object result = new Result();
        return result;
    } else {
        // throw error because inputs are invalid
    }
Run Code Online (Sandbox Code Playgroud)

java cyclomatic-complexity

5
推荐指数
1
解决办法
166
查看次数

Cyclomatic Complexity的常见原因及其解决方案

在工作中,我们正在研究导致高圈复杂性的常见问题.例如,具有大的if-else语句可能导致高的圈复杂度,但可以通过用多态替换条件来解决.你找到了什么其他的例子?

cyclomatic-complexity

4
推荐指数
1
解决办法
2128
查看次数

C函数只调用一次和圈复杂度

我认为这个问题更多的是关于风格:我的算法具有非常高的CC(以及很多行!).我想减少它,因为有一些代码可以分组,所以很容易.问题是以这种方式做事我会有一个"大"函数调用"小"函数,只调用一次.

在我看来,尽管函数被调用一次,但是以小块形式打破一个大函数对于代码的易读性(在这种情况下)更好.

你怎么了?在类似情况下你怎么办?

c function cyclomatic-complexity

4
推荐指数
1
解决办法
349
查看次数

循环复杂性:Resharper与CodeMaid

我已经使用CodeMaid和Resharper已有一段时间了,注意到它们都计算了Cyclomatic Complexity。尽管它们的计算总是不同的,所以我认为它们的计算逻辑也是如此。但是,根据您的经验,哪个更准确?似乎Resharper的通常更高,但是CodeMaid的更容易发现。

其中之一算错了吗?还是有所不同,但可以接受?

提前致谢!

resharper cyclomatic-complexity visual-studio-2013 codemaid

4
推荐指数
1
解决办法
1890
查看次数

如何在对象层次结构中找到循环?

有一个类Company,它引用了另一个Company表示的实例parent.比方说,有四家公司c1,c2,c3c4c2,c3,c4有母公司设置c1.

例如:

public class Company {
  public Company parent;

  public Company() { }
  public Company(Company parent) {
    this.parent = parent;
  }

  public static void main(String[] args) {
    Company c1 = new Company();
    Company c2 = new Company(c1);
    Company c3 = new Company(c1);
    Company c4 = new Company(c1);
}
Run Code Online (Sandbox Code Playgroud)

如果我们设置c2为以下的母公司c1:

c1.parent = c2;
Run Code Online (Sandbox Code Playgroud)

然后它将在公司层次结构中创建一个Cyclomatic …

java algorithm cyclomatic-complexity object-graph

4
推荐指数
1
解决办法
791
查看次数

Null Check增加了圈复杂度

我有一个java POJO类,如下所示.

 public class EmployeeVo {
        private String firstName;
        private String middleName;
        private String lastName;
        private String suffix;
        private String addressline1;
        private String addressline2;
        private String city;
        private String state;
        private String zipCode;
        private String country;

            public String getFirstName() {
            return firstName;
        }
        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }
        public String getMiddleName() {
            return middleName;
        }
        public void setMiddleName(String middleName) {
            this.middleName = middleName;
        }
        public String getLastName() {
            return lastName;
        }
        .// Setters and getters for …
Run Code Online (Sandbox Code Playgroud)

java string exception cyclomatic-complexity sonarqube

4
推荐指数
1
解决办法
889
查看次数

获得圈复杂度

我正在研究使用 Rascal 计算 java 方法的圈复杂度。

一种方法是:

  • 从方法中获取 AST
  • 在这棵树上使用访问模式
  • 检查以下所有增加 CC 的关键字:case, catch, do, while, if, for,foreach

另一种是使用图论并使用公式 e-n+2。使用 rascal 函数可以很容易地获得 e 和 n。我的问题是如何构建控制流图,我发现了以下模块: analysis::flow::ControlFlow这似乎是朝着正确方向迈出的一步,但我完全不知道从哪里开始。

cyclomatic-complexity rascal

4
推荐指数
1
解决办法
874
查看次数

如何禁用 radon 高圈复杂度检查?

我们的代码库正在使用 Radon 检查高圈复杂度。我有一个触发此 linter 错误的函数,但我希望它能够通过 linter,类似于 pylint 禁用之类的东西。有没有办法用氡做到这一点?

python static-analysis cyclomatic-complexity

3
推荐指数
1
解决办法
1157
查看次数