javascript:包装函数的圈复杂度

时间:2013-05-02 10:01:53

标签: javascript jshint cyclomatic-complexity

我的大多数JavaScript代码文件都是这样的:

(function() {
  var Foo = function() {
    ...
  };

  var Bar = function() {
    ...
  };

  ...
}());

我已经尝试了许多计算代码的圈复杂度的工具,它们都会生成错误的报告(从我的角度来看),也就是说:它们都指向包装函数作为最复杂的函数

这个问题是所有报告都被这个事实严重扭曲:包装函数通常占复杂饼图的一半以上,并且所有平均数都有偏差。

有没有办法获得我的代码的真正的复杂性,而不受包装函数的偏见?

所有这些工具都做错了吗?我做错了将我的代码包装在一个函数中用于作用域(我不这么认为)?使用这些工具我做错了吗?

<击>修改

有人建议在计算复杂性之前删除包装函数,我很乐意这样做,但是有一种可靠的方法可以自动完成吗? 请忽略这个和寻找合适的解决方案。

1 个答案:

答案 0 :(得分:3)

尝试http://jsmeter.info

我插入了这段代码:

(function()
{
  function testFunction(x)
  {
    var y;

    switch (x)
    {
      case 1:
        y = x;
        break;
      case 2:
        y = x * 4;
        break;
      default:
        y = 0;
        break;
    }
    return y;
  }

  var FooBar = function()
  {
    // ...
  }

}());

它正确地将内部函数testFunction识别为更高的复杂度(5),并且它被包含在具有复杂性(1)的匿名函数中。也适用于声明函数var FooBar = function(){...}看起来像你正在寻找的工具。