Ruby code 质量分析工具(1)
Saikuro 是一款用来计算圈复杂度的code质量工具。http://saikuro.rubyforge.org/
圈复杂度“用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,即合理的预防错误所需测试的最少路径条数,圈复杂度大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系”。
圈复杂度的作者在这篇文章中有关于圈复杂度的详细介绍:http://hissa.nist.gov/HHRFdata/Artifacts/ITLdoc/235/sttoc.htm
Saikuro 使用了一种比较简单的圈复杂度计算方法。函数的复杂度等于所有的判断点的数量的和。
每个方法的起始复杂度为1。以下情况复杂度加1:
1. 判断 / 循环
2. 异常处理
3. block
另外对于逻辑判读式 目前不统计复杂度,虽然作者的文中认为需要。
命令使用方式:
例1:saikuro -c -p test.rb
例2:saikuro -c -t app -y 0 -w 11 -e 16 -o out/
-c -t 表示分析 app/目录下的文件
-y 0 表示返回所有方法的复杂度
-w 11 表示复杂度>=11的给warning
-e 16 表示复杂度>=16的给error
个人见解(经供参考):
好处:
函数代码变简单易读,可维护性增强。
坏处:
函数调用栈变深,debug的时候走了很远还没有找到自己想要的
对函数命名的要求更高,函数封装了,但命名不正确可能导致一些不好的后果,例如被误用