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. Well, let's start everything from the very beginning.

    帝都的霾仿佛亘古不变,不知觉2015年竟已快到尾声,而我在IBM也已呆了4个月.回顾过往多遇贵人,所获颇丰.最幸运的还是自己不忘初心,仍在不断成长.继续学习. 过去的几个月一直用WordPress,搭 ...

  2. Spark运行流程概述

    Application 指用户编写的Spark应用程序,其中包含了一个Driver功能的代码和分布在集群中多个节点上运行的Executor代码. Driver Spark中的Driver即运行上述Ap ...

  3. OAF_解决OAF与Windows版本不兼容黑屏

    20150806 Created By BaoXinjian

  4. AP_AP系列 - 发票管理分析(案例)

    2014-07-07 Created By BaoXinjian

  5. Codeforces Round #365 (Div. 2) Chris and Road

    Chris and Road 题意: 给一个n个顶点的多边形的车,有速度v,人从0走到对面的w,人速度u,问人最快到w的时间是多少,车如果挡到人,人就不能走. 题解: 这题当时以为计算几何,所以就没做 ...

  6. RabbitMQ介绍3 - 运行和管理RabbitMQ

    安装.官方介绍:http://www.rabbitmq.com/download.html.一般产品环境会部署到Linux环境,但做为简单尝试,可以部署到Windows上(这里是部署介绍:http:/ ...

  7. UI设计原则

    一.一般原则 简单明了原则: 方便使用原则: 用户向导原则: 实时帮助原则: 自定义功能原则: 界面色彩原则: 二.Web系统适应原则 页面要瘦小 屏幕自适应 浏览器兼容 减少垂直滚动条 禁止水平滚动 ...

  8. [Flex] as3xls读取excel,修改保存单表(一)

    经过大神修改过的as3xls支持中文,并可以修改保存单一sheet,保存后原有的excel样式均会消失,目前仅能如此. <?xml version="1.0" encodin ...

  9. [ActionScript 3.0] AS3虚线绘制方法

    import flash.geom.Point; import flash.display.MovieClip; import flash.display.Graphics; var mc:Movie ...

  10. PDM生成SQL脚本外键重复

    解决办法: 选择Database -> Edit Current DBMS, 弹出DBMS Properties,按下图高亮选择,修改Value的值,把默认的长度改长一点就解决问题.