Java代码度量分析工具:Designite简介
前言
在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简介的更多相关文章
- Java代码度量分析工具:DesigniteJava简介
前言 在Java面向对象课程的学习过程中,我们需要使用度量工具来分析自己程序的代码结构.受OO课程组以及前辈们博客提醒,笔者找到了DesigniteJava这款软件,现对此软件进行简单的说明. 一.D ...
- Java代码混淆工具ProGuard
目录 Java代码混淆工具ProGuard 简介 描述 作用的环境 功能 工作原理 下载 使用时注意事项 版本问题 JDK位数问题 Java的字节码验证问题 关于使用类似于Hibernate的对象关系 ...
- eclipse Java代码折叠工具
eclipse Java代码折叠工具 CreateTime--2018年5月17日15点09分 Author:Marydon 1.问题描述 eclipse自带的代码折叠工具,无法折叠try{}ca ...
- Findbug插件静态java代码扫描工具使用
本文转自http://blog.csdn.net/gaofuqi/article/details/22679609 感谢作者 FindBugs 是由马里兰大学提供的一款开源 Java静态代码分析工具. ...
- 把调试好的SQL语句转换为JAVA代码小工具
关键点:Pattern实现SQL拆解.ZeroClipboard.js实现复制到剪切板 主要代码: <%@ page language="java" import=" ...
- GitLab - 代码仓库管理工具GitLab简介
1 - GitLab 基于git的开源的仓库管理系统项目,使用git作为代码管理工具,并在此基础上搭建web服务,拥有与Github类似的功能. 社区版(Community Edition,CE) 企 ...
- Gerrit - 代码评审工具Gerrit简介与安装
1 - 前言 Code Review 代码评审是指在软件开发过程中,对源代码的系统性检查,改进代码质量,查找系统缺陷,保证软件总体质量和提高开发者自身水平. 简单的说,Code Review是用来确认 ...
- java 代码分析工具——JDepend
最近学习Mybatis的官方文档,看到了[项目文档]一节有很多内容没有见过,做个笔记,理解一下. 百科上的介绍,我竟然都看懂了,那就不找其他地方的资料了. JDepend 一个开放源代码的可以用来评价 ...
- [改善Java代码]让工具类不可实例化
建议42: 让工具类不可实例化 Java项目中使用的工具类非常多,比如JDK自己的工具类java.lang.Math.java.util.Collections等都是我们经常用到的.工具类的方法和属性 ...
随机推荐
- [OS] 远程启动计划任务时以管理员身份运行
在Jenkins建了一个task自动启动Selenium的Grid,命令行是这样写的: schtasks /end /tn RestartGrid /s SZTEST201606 /u szdomai ...
- Mybatis 实用篇(三)参数处理
Mybatis 实用篇(三)参数处理 sql 语句中的参数 parameterType 可以省略不写. 一.参数封装 1.1 单个参数处理 public interface UserMapper { ...
- 一起做RGB-D SLAM(7) (完结篇)
第七讲 添加回环检测 2016.11 更新 把原文的SIFT替换成了ORB,这样你可以在没有nonfree模块下使用本程序了. 回环检测的阈值作出了相应的调整. 请以现在的github上源码为准. 简 ...
- Text Relatives II
[Text Relatives II] When your app determines that the user has requested the edit menu—which could b ...
- R语言中 fitted()和predict()的区别
fitted是拟合值,predict是预测值.模型是基于给定样本的值建立的,在这些给定样本上做预测就是拟合.在新样本上做预测就是预测. 你可以找一组数据试试,结果如何. fit<-lm(weig ...
- java内存溢出异常
名称 特征 作用 配置参数 异常 程序 计数器 占用内存小,线程私有, 生命周期与线程相同 大致为字节码行号指示器 无 无 虚拟机栈 线程私有,生命周期与线程 相同,使用连续的内存空间 Java 方法 ...
- 深海划水队项目---七天冲刺day1
团队会议: 团队成员的任务认领安排: 张兆敏:登录界面,游戏界面(包含游戏区.控制区.显示信息区). 乐滔:方块的形状.移动(向左或者向右)旋转(顺时针或者逆时针),方块的下落(包含硬着陆和软着陆), ...
- 数据集和JSON相互转换
使用DELPHI原生类实现数据集和JSON相互转换 JSON二要素:数组和对象.对象可以包含数组,数组可以包含对象.无层数限制.OLEVARIANT也类似,OLEVARIANT的一个元素又可以是OL ...
- [leetcode] 7. Binary Tree Level Order Traversal II
这次相对来讲复杂点,题目如下: Given a binary tree, return the bottom-up level order traversal of its nodes' values ...
- Android-ImageUtils工具类
图片相关的工具类 public class ImageUtils { public static boolean saveImage(Bitmap photo, String spath) { try ...