前言

在Java面向对象课程的学习过程中,我们需要使用度量工具来分析自己程序的代码结构。此类的度量工具有许多,或以插件形式存在于各个IDE中,或以.jar包的形式供用户使用。在这里,笔者向大家简单的介绍一款免费的代码度量分析工具:Designite,对官网上的部分内容进行汉化搬运,并对一些度量条目做出解释。

一、Designite的下载与运行

Designite是一款程序设计的质量评估工具。这款工具可以用于分析C#和Java的代码,并且识别其中存在的质量问题。Designite会检测程序的架构(architecture),设计(design)和代码异味(code smell)并且给出详细的度量分析(metrics analysis)。

Designite官网:http://www.designite-tools.com/

Designite for Java:http://www.designite-tools.com/DesigniteJava/

进入官网,下载会得到一个jar包,默认名为DesigniteJava.jar。将其放在方便使用的位置,打开命令行窗口,输入以下代码即可运行:

java -jar DesigniteJava.jar -i <源文件路径> -o <分析数据输出路径>

输出之后,会得到以下五个文件。

designCodeSmells和implementationCodeSmells中存储着在设计和执行阶段检测到的代码异味(code smell)。这标志着你的程序中存在一些设计上的不规范,如过多幻数(Magic Number),模块之间的循环依赖(Cyclic Dependent)等。

methodMetrics和typeMetrics中存储着类和方法的一些度量指标(metrics),这些度量指标有助于我们分析程序的整体结构,并且找出问题所在。

二、度量指标介绍

以下内容翻译自官网,简单加上了一些个人理解。

  • **LOC **(Lines Of Code – at method and class granularity)

    代码行数,可以看到你的方法和类写了多少行。

  • CC (Cyclomatic Complexity – Method)

    圈复杂度,用于衡量一个模块判定结构的复杂程度,圈复杂度越大说明程序代码质量低,且难以测试和维护。

  • PC (Parameter Count – Method)

    方法中传入的参数个数。

  • NOF (Number of Fields – Class)

    类的字段个数。

  • NOPF (Number of Public Fields – Class)

    类的公共(public)型字段个数。

  • **NOM **(Number of Methods – Class)

    类的方法个数。

  • NOPM (Number of Public Methods – Class)

    类的(public)型方法个数。

  • WMC (Weighted Methods per Class – Class)

    类的加权方法个数。具体加权算法怎么算,笔者不太清楚。

  • **NC **(Number of Children – Class)

    类的子类个数。

  • **DIT **(Depth of Inheritance Tree – Class)

    类所在的继承树深度。

  • **LCOM **(Lack of Cohesion in Methods – Class)

    方法的内聚缺乏度。值越大,说明类内聚合度越小。

  • FANIN (Fan-in – Class)

    类的扇入。扇入表示调用该模块的上级模块的个数,扇入越大,表示该模块的复用性好。

  • **FANOUT **(Fan-out – Class)

    类的扇出。扇出表示该模块直接调用的下级模块的个数,扇出过大表明模块复杂度高,但扇出过小也不好。

    设计要求一般是高内聚低耦合,即LCOM值要小,FANIN值要大,FANOUT值要合理。

Java代码度量分析工具:Designite简介的更多相关文章

  1. Java代码度量分析工具:DesigniteJava简介

    前言 在Java面向对象课程的学习过程中,我们需要使用度量工具来分析自己程序的代码结构.受OO课程组以及前辈们博客提醒,笔者找到了DesigniteJava这款软件,现对此软件进行简单的说明. 一.D ...

  2. Java代码混淆工具ProGuard

    目录 Java代码混淆工具ProGuard 简介 描述 作用的环境 功能 工作原理 下载 使用时注意事项 版本问题 JDK位数问题 Java的字节码验证问题 关于使用类似于Hibernate的对象关系 ...

  3. eclipse Java代码折叠工具

      eclipse Java代码折叠工具 CreateTime--2018年5月17日15点09分 Author:Marydon 1.问题描述 eclipse自带的代码折叠工具,无法折叠try{}ca ...

  4. Findbug插件静态java代码扫描工具使用

    本文转自http://blog.csdn.net/gaofuqi/article/details/22679609 感谢作者 FindBugs 是由马里兰大学提供的一款开源 Java静态代码分析工具. ...

  5. 把调试好的SQL语句转换为JAVA代码小工具

    关键点:Pattern实现SQL拆解.ZeroClipboard.js实现复制到剪切板 主要代码: <%@ page language="java" import=" ...

  6. GitLab - 代码仓库管理工具GitLab简介

    1 - GitLab 基于git的开源的仓库管理系统项目,使用git作为代码管理工具,并在此基础上搭建web服务,拥有与Github类似的功能. 社区版(Community Edition,CE) 企 ...

  7. Gerrit - 代码评审工具Gerrit简介与安装

    1 - 前言 Code Review 代码评审是指在软件开发过程中,对源代码的系统性检查,改进代码质量,查找系统缺陷,保证软件总体质量和提高开发者自身水平. 简单的说,Code Review是用来确认 ...

  8. java 代码分析工具——JDepend

    最近学习Mybatis的官方文档,看到了[项目文档]一节有很多内容没有见过,做个笔记,理解一下. 百科上的介绍,我竟然都看懂了,那就不找其他地方的资料了. JDepend 一个开放源代码的可以用来评价 ...

  9. [改善Java代码]让工具类不可实例化

    建议42: 让工具类不可实例化 Java项目中使用的工具类非常多,比如JDK自己的工具类java.lang.Math.java.util.Collections等都是我们经常用到的.工具类的方法和属性 ...

随机推荐

  1. 微信小程序 tp5上传图片

    test.wxml页面 <view class="title">请选择要反馈的问题</view> <view> <picker bindc ...

  2. js 中的 2 与 "2"

    case1: "15" * 2 结果:30 case2: 2 * "15" 结果:30 case3: "2" * "15" ...

  3. Windows与Linux相互远程桌面连接

        对于远程桌面连接Linux,大家可能会第一时间想到使用VNC,,远程桌面Windows,大家第一时间会想到使用Windows自带的远程桌面.那么有没有办法,使得在Linux中可以远程Windo ...

  4. ZOJ2208 To and Fro 2017-04-16 19:30 45人阅读 评论(0) 收藏

    To and Fro Time Limit: 2 Seconds      Memory Limit: 65536 KB Mo and Larry have devised a way of encr ...

  5. CYUSB3014固件部分低版本工程在Eclipse中编译得到img文件时无效的解决方案

    最近在做基于我们AC6102开发板的UVC图像视频方案,下载了官方的an75779应用工程,但是倒入到FX3—SDK自带的Eclipse中后,却无法编译生成img文件,经过比对后确认是生成该文件的命令 ...

  6. underscore概况

    看的是1.3.3,这个版本的中文源码解释比较多. 函数的中文注释:http://www.css88.com/doc/underscore1.5.2/#difference 源码的中文注释:http:/ ...

  7. eFrameWork学习笔记-eList

    HTML: <div style="margin:8px;"> <h1>.不分页</h1> <asp:Repeater id=" ...

  8. npm 安装less

    npm install less less-loader --save 在style加上lang="less" 就可以直接用了

  9. 对象初始化的完整过程(C#)

    1.静态构造函数 在引入本文的主题之前,我们先来铺垫一下吧,看看静态构造函数的概念及用途. C#中允许创建无参数构造函数,该函数仅执行一次.它一般被用来初始化静态字段.CLR不能保证在某个特定时刻执行 ...

  10. BEAUTIFUL

    DESCRIPTION:一个长度为n 的序列,对于每个位置i 的数ai 都有一个优美值,其定义是:找到序列中最长的一段[l, r],满足l<i<r,且[l, r] 中位数为ai(我们比较序 ...