2008-09-19 103 views
34

是否有任何工具可用于计算Javascript中的循环复杂度?计算Javascript的环复杂度

我发现这是一个非常有用的指标,在​​过去,而在服务器端代码的工作,并希望能够使用它的客户端的JavaScript我写的。

+0

我提出我的jsmeter工具,一个新的网站:http://jsmeter.info – Noah 2010-08-22 02:26:15

回答

18

我一直在研究一个JavaScript静态代码分析工具,它可以确定JavaScript的圈复杂度。您可以在这里尝试在线版本的jsmeter:http://jsmeter.info

6

因为圈复杂度评估计算关键字 数量“的话,交换机,而突破”等。每一个工具,用C工作将做的工作,比如 sourcemonitor: http://www.campwoodsw.com/sourcemonitor.html

其实,在JavaScript中更尝试modulize你的代码,你越会慢下来,所以把它当作一粒盐;)

编辑: 我真的不明白这是怎么回事这个答案,我得到另一个downvote,当我在我的答案,我告诉ag OOD工具,用于计算javascript中的圈复杂度, ,这尤其适用。

对于第二种说法,我的是来自经验评论,我从来没有告诉不modulize你的js代码,我只告诉使注意力做,因为往往有一个权衡速度,当我说话的速度我的意思是2个不同的放缓可能发生的:在下载时间执行时间(以及类似PDA /智能手机,这是重要的慢速设备)。

由于这样的工具,经常开车到开发商编写更多的代码试图追逐较小的指数可能, 但在JS更多的代码遗憾,这意味着放缓可能发生,这些工具的过度使用坏。 这些工具可以给你提示,其中你的代码可以改进,但你必须掌握如何使用该工具,而不是盲目依赖它。

所以,如果你再downvote我,请写在你解释你为什么这样做,讨论只能从中受益评论,感谢您和遗憾的发泄。

+0

模块化你的代码是慢下来?这有什么意义? – MDCore 2008-10-17 04:33:06

+1

其实它有意义,因为在JavaScript写更多的代码意味着更多的下载时间(是一个权衡所有知道btw),我写的JavaScript代码运行在非常缓慢的架构,所以,对我而言,这是一个重要的因素。我没有说“不要模块化”,我只是说“被警告” – kentaromiura 2008-10-17 06:29:44

+0

我没有降低你的视觉效果,但它似乎并不像模块化那样降低了JavaScript中的代码,足以证明你的代码在程序风格。但我想这是一个个案的基础。 – 2009-12-13 19:41:39

2

您可以使用http://www.blunck.info/ccm.html的ccm工具。

它没有java脚本,c/C++和c#。它是免费的,可以在Windows上运行(也可以在Linux和Mac OS X上运行 - 使用单一框架)。

17

我帮着写JavaScript的项目进行软件的复杂性分析的工具:

complexity-report

它报告了一堆不同复杂程度的指标:行代码,大量的参数,圈复杂度,圈密度, Halstead复杂性度量,可维护性指数,一阶密度,变化成本和核心尺寸。

它在MIT许可证下发布,使用Node.js和Esprima JavaScript解析器构建。最近added support

npm i -g complexity-report 
5

JSHint计算代码度量:它可以通过NPM安装,就像这样。您可以为the number of formal parameters allowedmaxparams),how deeply nested code blocks should beMAXDEPTH),the number of statements allowed per functionmaxstatements)设置的最大值,以及the maximum cyclomatic complexitymaxcomplexity)。

每功能允许形式参数的最大数量

/*jshint maxparams:3 */ 

function login(request, onSuccess) { 
    // ... 
} 

// JSHint: Too many parameters per function (4). 
function logout(request, isManual, whereAmI, onSuccess) { 
    // ... 
} 

每功能允许嵌套代码块的最大数量

/*jshint maxdepth:2 */ 

function main(meaning) { 
    var day = true; 

    if (meaning === 42) { 
    while (day) { 
     shuffle(); 

     if (tired) { // JSHint: Blocks are nested too deeply (3). 
      sleep(); 
     } 
    } 
    } 
} 

每功能允许语句的最大数目

/*jshint maxstatements:4 */ 

function main() { 
    var i = 0; 
    var j = 0; 

    // Function declarations count as one statement. Their bodies 
    // don't get taken into account for the outer function. 
    function inner() { 
    var i2 = 1; 
    var j2 = 1; 

    return i2 + j2; 
    } 

    j = i + j; 
    return j; // JSHint: Too many statements per function. (5) 
} 
10

对于答案的完整性,我前一段时间寻找同样的工具,并没有发现任何行之有效的可视化,所以我写了plato

样本报告:

它使用phil的复杂性报告(上面提到的),也汇总jshint(最终,其他)的数据。