在Javascript中是否有可用于计算Cyclomatic Complexity的工具?
我在使用服务器端代码时发现它是一个非常有用的指标,并且希望能够将它用于我编写的客户端Javascript.
我帮助编写了一个工具来对JavaScript项目执行软件复杂性分析:
复杂性报告
它报告了一系列不同的复杂度指标:代码行数,参数数量,圈复杂度,圈密度,Halstead复杂度度量,可维护性指数,一阶密度,变化成本和核心大小.
它在MIT许可下发布,使用Node.js和Esprima JavaScript解析器构建.它可以通过npm安装,如下所示:
npm i -g complexity-report
为了完整的答案,我前段时间寻找相同的工具,并没有找到任何适合可视化的东西所以我写了柏拉图
样本报告:
jQuery的
咕噜
marionettejs
它使用phil的复杂性报告(如上所述),并聚合来自jshint(最终,其他)的数据.
由于评估了圈复杂度,计算了关键字"if,switch,while for break"等的数量.与C一起使用的每个工具都可以完成这项工作,比如sourcemonitor:http: //www.campwoodsw.com/sourcemonitor.html
实际上,在javascript上你尝试模块化你的代码越多,你就越会减慢它的速度,所以要带上一点点盐;)
编辑:我真的无法理解这个答案正在发生什么,我得到另一个downvote,当我在答案中我告诉一个很好的工具来计算javascript中的圈复杂度,这尤其有效.
对于第二个断言,我的评论来自经验,我从不告诉不要模拟你的js代码,我只是告诉要注意这样做,因为经常有速度的权衡,当我谈论速度我的意思是可能发生2种不同的减速:在下载时和执行时(在pda /智能手机等慢速设备中这很重要).
由于这样的工具通常会促使开发人员编写更多代码来尝试追逐较小的索引,但是在js中,更多的代码不幸意味着可能发生减速,并且这些工具的过度使用是不好的.当然,这些工具可以为您提供有关代码可以改进的地方的提示,但您必须掌握如何使用该工具而不是盲目依赖它.
所以,如果你再次投票给我,请写一个评论,你在其中解释你为什么这样做,讨论只能从中受益,谢谢你,并为发泄感到抱歉.
JSHint最近增加了对计算代码指标的支持.您可以设置允许的形式参数数量(maxparams),嵌套代码块的深度(maxdepth),每个函数允许的语句数(maxstatements)以及最大圈复杂度(maxcomplexity)的最大值.
每个函数允许的最大形式参数数
/*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) }