软件设计度量工具inFusion(二):看懂inFusion度量结果

我们新建一个inFusion项目,指定好源码位置后,inFusion会对源码进行扫描分析,然后就会显示分析结果。

软件设计度量工具inFusion(二):看懂inFusion度量结果_第1张图片

1.右边的方框是缺陷视图,共三列,以第一行God Class说明。左边的一列是缺陷分类(God Class),其中的数字(11)是缺陷出现的次数;中间一列是单个缺陷的影响度(340),最后一列是总体影响度,其值为 缺陷出现次数×缺陷影响度(11*340=3740)。


2.左上角的方框是QDI(Quality Deficit Index)视图,包括归一化QDI(210.7)和总的QDI(24634)。总的QDI是设计缺陷×权重的累加值,和系统的规模大小有关,不代表系统的好坏。归一化的QDI是一个标准值,这个值是每千行的一个加权平均值,这个值越大说明代码架构越不健康。将总的设计缺陷impact加起来就得到了总的QDI。归一化QDI = 1000 * (总QDI / 总代码行数)。比如上图中,代码行数(包含注释和空白)是116895,总QDI是24634。注意:按道理说代码行应该不包含注释和空白,不知道为啥inFusion不这么干。归一化QDI越小越好。


3.现在轮到最复杂的度量金字塔了。

软件设计度量工具inFusion(二):看懂inFusion度量结果_第2张图片

靠中间的数字是某个metric的原始数值,其大小跟系统规模有关。比如上图中,NOP的值是84;CALL的值23746。金字塔阶梯上的数值是计算(下面 / 本行)出来的,比如NOP左边的14.90,下面的1252(类的总数NOC) / 本行的 84(包的总数NOP) = 14.90,其含义为平均每个包中类的个数;再如NOM右边的3.85,是下面的23746(调用的总数CALL) / 本行的6161(函数个数NOM) = 3.85。上图中红色代表这个指标值偏高、蓝色偏低、绿色正常


弄清楚怎么计算之后,我们具体看下这些度量指标的含义,度量指标总共分成3类:继承、规模和复杂度、耦合。

继承:

NDD(Number of Derived Classes)平均子类个数,反映设计的抽象程度,如果数值过低,意味着抽象程度比较低。

HIT(Height of the Inheritance Tree)平均继承树高度,这个值越大说明系统类的继承层次越深。继承层次比较深,也是代码坏味道。


规模和复杂度:

NOP (Number of Packages):包的个数。
NOC (Number of Classes):类的个数。
NOM (Number of Methods):函数的个数。
LOC (Lines of Code):代码行数。
CYCLO (Cyclomatic Number):圈复杂度总数。
包的粒度(NOP左14.90):NOC / NOP,包中类的平均个数。
类的粒度(NOC左4.92):NOM / NOC,类平均函数个数。
函数的粒度(NOM左15.54):LOC / NOM,函数平均代码行数。
代码的粒度(LOC左0.12):CYCLO / LOC,平均每行代码的圈复杂度。


耦合:
CALL (Number of Operation Calls):调用函数的次数,在一个函数中调用同一函数多次只会统计一次。
FOUT (Number of Called Classes):调用类的次数,在一个函数中调用同一个类的多个函数统计一次。
耦合密度:CALL / NOM,平均每个函数调用函数的次数,反应函数间的耦合程度。
耦合散度:FOUT / NOM,平均每个函数调用涉及类的个数,反映函数与类之间的耦合程度。


你可能感兴趣的:(架构/设计/模式)