软件设计度量工具inFusion(二):看懂inFusion度量结果
2015-12-10 16:51
603 查看
我们新建一个inFusion项目,指定好源码位置后,inFusion会对源码进行扫描分析,然后就会显示分析结果。
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.现在轮到最复杂的度量金字塔了。
靠中间的数字是某个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,平均每个函数调用涉及类的个数,反映函数与类之间的耦合程度。
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.现在轮到最复杂的度量金字塔了。
靠中间的数字是某个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,平均每个函数调用涉及类的个数,反映函数与类之间的耦合程度。
相关文章推荐
- 大数据 与 云计算 的关系
- Obhective-C_OC中的方法
- java解析XML (JDOM & DOM4J,X-stream)(二)
- 算法开始之路-栈和列的应用
- BlueTooth: 蓝牙协议栈实现模式分析
- My97DatePicker日历控件日报、每周和每月的选择
- 【SSH快速进阶】——Hibernate一对一映射(one-to-one)——主键关联映射
- 采购单入库操作
- watch os 语音输入
- php webp转jpg
- OCJP标准题库试题之————第二次
- Android selector 失效
- shell之cut
- Android的线程和线程池
- Mybatis 教程
- Linux(Centos)之安装Redis及注意事项
- XAML基础(一)
- 在局域网络内的某台主机用ping命令测试网络连接时发现网络内部的主机都可以连同,而不能与公网连通,问题可能是
- 校验业务与主逻辑解耦设计探讨与实践(AOP篇)
- Linux学习笔记(二十二、管道符)