最近使用SourceMonitor工具作代码优化,过程当中对一些原来耳熟能详的名字如今有点模糊了。这里记录一下。ide
函数复杂度,这里通常指的是函数圈复杂度。(Function Complexity)函数
概念:工具
所谓圈复杂度是一种代码复杂度的衡量标准。在软件测试的概念里,圈复杂度“用来衡量一个模块断定结构的复杂程度,数量上表现为独立现行路径条数,即合理的预防错误所需测试的最少路径条数,圈复杂度大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系”。测试
公式:优化
计算公式1:V(G)=e-n+2p。其中,e表示控制流图中边的数量,n表示控制流图中节点的数量,p图的链接组件数目(图的组件数是相连节点的最大集合)。由于控制流图都是连通的,因此p为1。spa
计算公式2:V(G)=区域数=断定节点数+1。其实,圈复杂度的计算还有更直观的方法,由于圈复杂度所反映的是“断定条件”的数量,因此圈复杂度实际上就是等于断定节点的数量再加上1,也即控制流图的区域数。orm
计算公式3:V(G)=R。其中R表明平面被控制流图划分红的区域数。it
函数深度(Block Depth)io
这个概念在网上没有找到,我在SourceMonitor中试了一下。这里的深度是基于文件来的。好比文件内容以下:class
Prize { String (String s1String s2String s3){} (String a){} }
block depth(0):1
block depth(1):3
函数深度是指嵌套的层数,最外层是0,每增长一层便加一。