9

我的大多数 javascript 代码文件如下所示:

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

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

  ...
}());

我尝试了许多计算代码圈复杂度的工具,但它们都生成了错误的报告(从我的角度来看),即:它们都将包装函数作为最复杂的函数。

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

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

所有这些工具都做错了吗?将我的代码包装在一个函数中以进行范围界定(我不这么认为),我做错了吗?我使用这些工具做错了吗?

编辑

有人建议在计算复杂度之前删除包装函数,我很乐意这样做,但是有没有可靠的方法可以自动完成呢?请忽略这一点并寻求适当的解决方案。

4

1 回答 1

3

您可以在线使用jsmeter.herokuapp.com或查看使用Noah Peters的jsmeter的jsmeter-online的源代码

我插入了这段代码:

(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(){...}

看起来像您正在寻找的工具。


已弃用jsmeter.info的存档- 看起来当前域是垃圾邮件

于 2013-05-11T06:18:48.460 回答