是否有任何工具可用于计算 Javascript 中的圈复杂度?
过去在处理服务器端代码时,我发现它是一个非常有用的指标,并且希望能够将它用于我编写的客户端 Javascript。
是否有任何工具可用于计算 Javascript 中的圈复杂度?
过去在处理服务器端代码时,我发现它是一个非常有用的指标,并且希望能够将它用于我编写的客户端 Javascript。
您可以为以下各项设置最大值:
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)
}
由于计算圈复杂度计算关键字“if,switch,while for break”等的数量。每个与C一起使用的工具都可以完成这项工作,比如sourcemonitor: http: //www.campwoodsw.com/sourcemonitor.html
实际上,在 javascript 上,您尝试修改代码的次数越多,速度就越慢,因此请谨慎对待;)
编辑:我真的不明白这个答案发生了什么,我得到了另一个反对意见,当我的回答中我告诉了一个在 javascript 中计算圈复杂度的好工具时,这特别有效。
对于第二个断言,我的评论来自经验,我从来没有告诉过不要修改你的 js 代码,我只是告诉你在做的时候要注意,因为通常需要权衡速度,当我谈到速度时我的意思是可能会发生 2 种不同的减速:在下载时和执行时(在像 pda/智能手机这样的慢速设备中,这很重要)。
由于像这样的工具经常驱使开发人员编写更多代码来尽可能地追逐更小的索引,但不幸的是,在 js 中,更多的代码意味着可能会发生减速,并且过度使用这些工具是不好的。当然,这些工具可以为您提供可以改进代码的提示,但您必须掌握如何使用该工具,而不是盲目地依赖它。
因此,如果您再次对我投反对票,请在评论中解释您这样做的原因,讨论只能从中受益,谢谢您,对发泄感到抱歉。
新版http://jshint.com出来了,有一个很好的圈复杂度计算器
您可以使用来自blunck.info 的 ARCHIVE或 github repo jonasblunck/ccm的 ccm 工具
它支持 JavaScript、C/C++ 和 C#。它是免费的,在 Windows 上运行(也可以在 Linux 和 Mac OS X 上运行 - 使用 Mono 框架)。
现在还有 Yardstick:https ://github.com/calmh/yardstick
它尝试计算惯用 Javascript 的圈复杂度,处理比 jscheckstyle 更多的案例。