标签: cyclomatic-complexity

环形复杂度的计算

我正处于圈复杂度(CC)的学习阶段.对于练习,我正在计算2个例子的圈复杂度,并想确认我的答案是否正确......

参考维基百科,CC由以下地址给出M = E ? N + 2P:

  • E =图的边数
  • N =图的节点数
  • P =连接组件的数量

请帮忙.

例1

这里,E = 8,N = 9,P = 1.因此,M = 8-9 +(2×1)= 1.

例2:

例2

这里E = 11,N = 10且P = 1.因此M = 10-11 +(2×1)= 1.

因此,对于两个例子,CC都是1.如果我的计算是正确的,请告诉我.

cyclomatic-complexity

23
推荐指数
2
解决办法
6万
查看次数

确定代码Cyclomatic复杂性的最佳工具

人们可以建议使用C#winforms代码库来确定循环复杂性的最佳工具.

c# cyclomatic-complexity

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

寻求关于构造代码的说明以减少圈复杂度

最近,我们公司已开始每周测量代码中的功能的圈复杂度(CC),并报告哪些功能已经改善或恶化.所以我们开始更多地关注功能的CC.

我已经读过CC可以非正式地计算为1 +函数中的决策点数(例如if语句,for循环,select等),或者通过函数的路径数...

我知道减少CC的最简单方法是重复使用Extract Method重构...

有些事情我不确定,例如以下代码片段的CC是什么?

1)

for (int i = 0; i < 3; i++)
    Console.WriteLine("Hello");
Run Code Online (Sandbox Code Playgroud)

Console.WriteLine("Hello");
Console.WriteLine("Hello");
Console.WriteLine("Hello");
Run Code Online (Sandbox Code Playgroud)

它们都做同样的事情,但是由于for语句,第一个版本是否有更高的CC?

2)

if (condition1)
    if (condition2)
        if (condition 3)
            Console.WriteLine("wibble");
Run Code Online (Sandbox Code Playgroud)

if (condition1 && condition2 && condition3)
    Console.WriteLine("wibble");
Run Code Online (Sandbox Code Playgroud)

假设语言进行了短路评估,例如C#,那么这两个代码片段具有相同的效果......但是第一个片段的CC是否更高,因为它有3个决策点/ if语句?

3)

if (condition1)
{
    Console.WriteLine("one");

    if (condition2)
        Console.WriteLine("one and two");
}
Run Code Online (Sandbox Code Playgroud)

if (condition3)
    Console.WriteLine("fizz");

if (condition4)
    Console.WriteLine("buzz");
Run Code Online (Sandbox Code Playgroud)

这两个代码片段做了不同的事情,但它们是否有相同的CC?或者第一个片段中的嵌套if语句是否具有更高的CC?即嵌套if语句在精神上更难理解,但是在CC中反映出来了吗?

language-agnostic metrics cyclomatic-complexity

20
推荐指数
3
解决办法
3757
查看次数

如何降低Cyclomatic Complexity?

我有一个接收Object的方法,并根据它检测到的对象类型做一些事情:

void receive(Object object) {
    if (object instanceof ObjectTypeA) {
        doSomethingA();
    }
    else {
        if (object instanceof ObjectTypeB) {
            doSomethingB();
        }
        else {
            if (object instanceof ObjectTypeC) {
                doSomethingC();
            }
            else {
                if (object instanceof ObjectTypeD) {
                    doSomethingD();
                }
                else {
                    // etc...
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如何降低Cyclomatic Complexity?我四处搜索但找不到任何有用的东西.

java refactoring cyclomatic-complexity instanceof

16
推荐指数
3
解决办法
5万
查看次数

你如何计算R函数的圈复杂度?

Cyclomatic复杂度测量可以通过函数获取多少个可能的分支.是否有现有的函数/工具来计算R函数?如果没有,建议是最好的方式来写一个.

朝着这个一个廉价的启动将是计数的所有出现次数if,ifelse或者switch你的函数中.要获得真正的答案,您需要了解分支何时开始和结束,这要困难得多.也许一些R解析工具会让我们开始?

complexity-theory r cyclomatic-complexity

15
推荐指数
2
解决办法
1155
查看次数

我怎么能减少圈复杂度?

每当我拿出一段我正在处理的代码时,我就得到了This function's cyclomatic complexity is too high. (7).但我对如何以这种方式重写它有点困惑,所以它的工作原理.

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

function () {
  var duration = +new Date() - start.time,
    isPastHalf = Number(duration) < 250 && Math.abs(delta.x) > 20 || Math.abs(delta.x) > viewport / 2,
    direction = delta.x < 0;

  if (!isScrolling) {
    if (isPastHalf) {
      if (direction) {
        this.close();
      } else {
        if (this.content.getBoundingClientRect().left > viewport / 2 && pulled === true) {
          this.close();
          return;
        }
        this.open();
      }
    } else {
      if (this.content.getBoundingClientRect().left > viewport / 2) { …
Run Code Online (Sandbox Code Playgroud)

javascript cyclomatic-complexity jshint

15
推荐指数
2
解决办法
3万
查看次数

您维护的任何功能的最高Cyclomatic复杂度是多少?你将如何重构呢?

我正在对我维护的遗留系统进行一些探索,前几天使用NDepend(很棒的工具检查出来).我的发现几乎让我在屏幕上喷了一口咖啡.该系统中按行圈复杂度递减排名的前3个函数是:

  1. SomeAspNetGridControl.CreateChildControls(CC为171 !!!)
  2. SomeFormControl.AddForm(CC为94)
  3. SomeSearchControl.SplitCriteria(CC为85)

我的意思是171,哇!不应该低于20或什么?所以这让我很奇怪.您维护或重构的最复杂功能是什么?你将如何重构这样的方法?

注意:我测量的CC是在代码上,而不是IL.

refactoring cyclomatic-complexity

14
推荐指数
1
解决办法
9924
查看次数

关闭JSHint中的循环复杂性

我正在使用JSHint,我想关闭圈复杂度.

我怎样才能做到这一点?

javascript cyclomatic-complexity node.js jshint

14
推荐指数
1
解决办法
9266
查看次数

如何提高Cyclomatic复杂性?

对于具有大量决策语句(包括if/while/for语句)的方法,Cyclomatic Complexity会很高.那么我们如何改进呢?

我正在处理一个大型项目,我应该为CC> 10的方法减少CC.并且有很多方法可以解决这个问题.下面我将列出一些代码模式(而不是实际代码)与我遇到的问题.是否有可能简化它们?

导致许多决策陈述的案例示例:

情况1)

if(objectA != null) //objectA is a pass in as a parameter
{
 objectB = doThisMethod();
 if(objectB != null)
 {
  objectC = doThatMethod();
  if(objectC != null)
  {
   doXXX();
  }
  else{
   doYYY();
  }
 }
 else
 {
  doZZZ();
 }
}
Run Code Online (Sandbox Code Playgroud)

案例2)

if(a < min)
 min = a;

if(a < max)
 max = a;

if(b > 0)
 doXXX();

if(c > 0)
{
 doYYY();
}
else
{
 doZZZ();
 if(c > d)
  isTrue = false;

 for(int i=0; i<d; i++)
  s[i] …
Run Code Online (Sandbox Code Playgroud)

c# complexity-theory design-patterns cyclomatic-complexity

12
推荐指数
2
解决办法
2万
查看次数

在Objective-C中是否有可视化代码复杂性或图形方法调用的工具?

我希望能够展示代码库的可视化,它可以显示过于复杂和交织的区域.

我知道clang是什么,但我不确定它在这种情况下能给我什么.

objective-c cyclomatic-complexity clang

12
推荐指数
1
解决办法
3697
查看次数