是否有任何工具可在Javascript计算圈复杂度?
我发现这是一个非常有用的指标,在过去的服务器端代码工作时,并希望能够使用它的客户端的JavaScript我写的。
是否有任何工具可在Javascript计算圈复杂度?
我发现这是一个非常有用的指标,在过去的服务器端代码工作时,并希望能够使用它的客户端的JavaScript我写的。
我帮着写的工具对JavaScript的执行项目软件的复杂性分析:
复杂性报告
它报告一群不同的复杂度指标:代码行,多个参数,圈复杂,圈密度,霍尔斯特德复杂措施,可维护性索引,一阶密度,变化的成本和核心大小。
它是在MIT许可下发布的,并了解如何使用Node.js和内置Esprima JavaScript分析器。 它可以通过NPM安装,就像这样:
npm i -g complexity-report
对于答案的完整性,我前一段时间寻找同样的工具,并没有发现任何行之有效的可视化,所以我写了柏拉图
样品报告:
它采用了菲尔的复杂性报告(如上所述),也从jshint汇总数据(最终,其他)。
因为圈复杂度评估计算关键字的数量“的话,交换机,而突破”等。每一个与C工作工具,将做的工作,比如sourcemonitor: http://www.campwoodsw.com/sourcemonitor.html
事实上,在JavaScript中更尝试modulize你的代码,你越会慢下来,所以把它当作一粒盐;)
编辑:我真的不明白这是怎么回事这个答案,我得到另一个downvote,当我的回答,我告诉尤其是作品中的JavaScript计算圈复杂度的好工具,这非常好。
对于第二个说法,我的是来自经验评论,我从来不告诉不modulize你的js代码 ,我只能告诉做出关注这样做 ,因为经常有与速度的权衡,当我说话的速度我的意思是2个不同的放缓可能发生:在下载时间和执行时间 (和类似PDA /智能手机慢的设备,这是很重要)。
由于这样的工具,经常开车到开发商编写更多的代码试图追逐较小的指数可能的,但在JS更多的代码遗憾,这意味着放缓可能发生,这些工具的过度使用是坏的。 Surelly这些工具可以给你的地方你的代码可以提高线索,但你已经掌握了如何使用工具,而不是blindy依赖它。
所以,如果你再downvote我,请写在你解释你为什么这样做,讨论只能从中受益评论,感谢您和遗憾的发泄。
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)
}
新版本的http://jshint.com是出来,并具有很好的圈复杂度计算器
您可以使用来自CCM工具http://www.blunck.info/ccm.html 。
它的Java脚本,C / C ++和C#。 它是免费的,在Windows上运行(可以在Linux和Mac OS X上运行,以及 - 使用单框架)。
现在有也是衡量尺度: https://github.com/calmh/yardstick
它试图计算圈复杂度为惯用的Javascript,比处理例如jscheckstyle更多的情况下。