inFusion能够探测超过20中代码味道和代码缺陷,包括重复代码,破坏封装的类(如数据类或者万能类),高耦合的方法和类,以及一些设计不合理的类继承结构。当我们使用inFusion工具分析代码时,在分析界面左上侧出现一个代码数据度量窗口,下面将对度量金字段数据作详细的解释,从而对代码从整体上有一个宏观的认识,同时也能够预测代码中可能出现的问题,诸如类功能是否单一,成员方法复杂度是否过高,继承深度是否合理等等。

度量金字数据具体示例如下:

鉴于上述图片中数据模糊,手工将上图黑色框中数据列出如下:

                                                NDD  0.61

                                                HIT   1.58

                                         20.0 NOP   30

                                 8.81   NOC         600

                         9.22   NOM                 5287   NOM  1.56

                0.14    LOC                          48791 8298  CALL  0.37

               CYCLO                                 7007   3076           FOUT

顶部

NDD,HIT分别指类的平均继承宽度和平均继承深度

平均继承宽度:类继承树上,子类占所有类的比例,合理范围0.2~0.6

平均继承深度:类继承树上,继承的层次,多棵继承树取平均值,合理范围0.1~0.3

左侧                                         右侧

CYCLO    圈复杂度                               FOUT   方法扇出次数

LOC        代码行数                               CALL    方法调用(扇入)次数

NOM       方法数量                               NOM     方法数量

NOC        类数量

NOP        package数量,C/C++中指目录数量

左边斜坡上

平均每个包中类个数                   600/30 = 20.0

平均每个类中方法个数                5287/600 = 8.81

平均每个方法的代码行数              48791/5287 = 9.22

平均圈复杂度(CYCLO/LOC)      7007/48791 = 0.14

右边斜坡上

平均每个方法call的次数               8298/5287 = 1.56

扇出扇入比                               3076/8298 = 0.37

扇入扇出

软件设计中,扇入和扇出的概念是指应用程序模块之间的层次调用情况。

按照结构化设计方法,一个应用程序是由多个功能相对独立的模块所组成。

扇入:是指直接调用该模块的上级模块的个数。扇入大表示模块的复用程度高。

扇出:是指该模块直接调用的下级模块的个数。扇出大表示模块的复杂度高,需要控制和协调过多的下级模块;但扇出过小(例如总是1)也不好。扇出过大一般是因为缺乏中间层次,应该适当增加中间层次的模块。扇出太小时可以把下级模块进一步分解成若干个子功能模块,或者合并到它的上级模块中去。

设计良好的软件结构,通常顶层扇出比较大,中间扇出小,底层模块则有大扇入

参考资料

六种可定量分析的代码味道

inFusion官网

 

infusion度量金字塔数据解释的更多相关文章

  1. Tableau学习Step4一数据解释、异常值监测、参数使用、分析结果如何对外发布

    Tableau学习Step4一数据解释.异常值监测.参数使用.分析结果如何对外发布 本文首发于博客冰山一树Sankey,去博客浏览效果更好. 一. 前言 本教程通过一个案例从浅到深来学习Tableau ...

  2. Http请求数据解释

    请求的数据里面包含三个部分内容 : 请求行 . 请求头 .请求体 请求行 POST /examples/servlets/servlet/RequestParamExample HTTP/1.1 PO ...

  3. SSE图像算法优化系列二十八:深度优化局部拉普拉斯金字塔滤波器。

    基于局部拉普拉斯金字塔的Edge-aware滤波器是在2011年由Adobe 公司的研究员Sylvain Paris(大神级人物,写了很多文章)提出的,我在4年前曾经参考有关代码实现过这个算法,但是速 ...

  4. G-LAB四月份作业-数据可视化问题探讨

    G-LAB四月份作业-数据可视化问题探讨 引子: 数据平台项目建设正在按照公司的计划开展执行中,作为平台建设项目参与者之一,感觉目前我们现有的MIS报表平台数据也不可谓不丰富,但是不论从提供给用户的数 ...

  5. ComplexBrowser: a tool for identification and quantification of protein complexes in large-scale proteomics datasets(大规模蛋白组学数据集中鉴定和定量蛋白复合物)

    文献名:ComplexBrowser: a tool for identification and quantification of protein complexes in large-scale ...

  6. TFS 测试用例步骤数据统计

    TFS系统集成了一套BI系统,基于SQL Server的Analysis Service进行实现的.通过这几年的深入使用,能够感触到这个数据数据仓库模型是多么的优秀,和微软官方提供的数据仓库示例Adv ...

  7. px4flow通过iic读取具体寄存器数据程序

    底层通信用了昨天写好的iic,今天结合官方资料成功读出所有指定寄存器的数据附上源码 include.h主要包括了一些stm32 IO控制的宏定义,具体参考正点原子所有例程中都有的sys.h头文件 in ...

  8. PHP获取POST数据的几种方法汇总

    一.PHP获取POST数据的几种方法 方法1.最常见的方法是:$_POST['fieldname']; 说明:只能接收Content-Type: application/x-www-form-urle ...

  9. Javascript模板及其中的数据逻辑分离思想(MVC)

    #Javascript模板及其中的数据逻辑分离思想 ##需求描述 项目数据库的题目表描述了70-120道题目,并且是会变化的,要根据数据库中的数据描述,比如,选择还是填空题,是不是重点题,题目总分是多 ...

随机推荐

  1. ARM NEON编程系列1-导论

    ARM NEON 编程系列1 - 导论 前言 本系列博文用于介绍ARM CPU下NEON指令优化. 博文github地址:github 相关代码github地址:github NEON历史 ARM处理 ...

  2. [Vue]学习中遇到的疑点

    computed:计算属性,官方api上说计算属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算.但是经过测试并没有缓存.案例: computed: { now: function () { c ...

  3. [UEditor]百度编辑器配置总结

    前端配置文件ueditor.config.js 前端有两个重要的配置属性: UEDITOR_HOME_URL: 配置百度编辑器的资源目录路径,你可以手动指定此路径,默认是有URL变量指定,而URL变量 ...

  4. sed 使用 删除匹配行

    “p” command prints the buffer (remember to use -n option with “p”) “d” command is just opposite, its ...

  5. Bootstrap学习的点点滴滴

    1)网站:http://www.bootcss.com/http://v3.bootcss.com/getting-started/#downloadhttps://github.com/twbs/b ...

  6. Zabbix监控mysql配置及故障告警配置

    本文主要介绍zabbix监控mysql的配置,包含使用zabbix自带模板监控mysql相关信息及自定义key监控mysql同步情况.同时介绍了触发器的创建及zabbix通过邮件方式告警配置. 一.配 ...

  7. VisualVM连接远程Java进程

    jstatd是一个RMI(Remove Method Invocation)的server应用,用于监控jvm的创建和结束,并且提供接口让监控工具(如VisualVM)可以远程连接到本机的jvms . ...

  8. [SQJ]sql如何实现类似统计的功能

    假设mssql2000中, 有如下表: table Class class_No course_Name ----------------------------------- chinese mat ...

  9. Spring配置项<context:annotation-config/>说明

    配置applicationContext.xml时经常会看到: <context:annotation-config/> 它的作用是隐式地向Spring容器注册AutowiredAnnot ...

  10. SQL备份表及相关笔记

    create table history1301( remark nvarchar(64))create table history1302( remark nvarchar(64))create t ...