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等都是我们经常用到的.工具类的方法和属性 ...
随机推荐
- [Training Video - 2] [Java Introduction] [Operator, Loops, Arrays, Functions]
Operator : While Loop : For Loop : Arrays : Code : public class FirstJavaClass { public static void ...
- Java 设计模式系列(十二)代理模式
Java 设计模式系列(十二)代理模式 代理模式是对象的结构模式.代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. package com.github.binarylei.de ...
- 删除重复记录的最新sql脚本
delete from tb1 where id in(select t2.minnum from(select MIN(t1.id) as minnum,t1.col1 as ars ,COUN ...
- CodeForces 681B Economy Game (暴力)
题意:给定一个数,问能不能 找到非负 a, b, c,使得 a × 1 234 567 + b × 123 456 + c × 1 234 = n. 析:二重循环,去确定c. 代码如下: #inclu ...
- 变分贝叶斯VBEM 由浅入深
变分贝叶斯EM指的是变分贝叶斯期望最大化(VBEM, variational Bayes expectation maximization),这种算法基于变分推理,通过迭代寻找最小化KL(Kullba ...
- Plupload 多实例上传 测试可用
<style type="text/css"> .btn{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-bo ...
- 加载 bean.xml 的几种方式 (java or web project)
1. java project ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:bean1.xm ...
- mongo find
MongoVUE 对应成语句,结构如下: db.logs.find({ "message" : /消息/ }, { "message" : 1 }).limit ...
- Mixin模式
Mixin是JavaScript中用的最普遍的模式,几乎所有流行类库都会有Mixin的实现. Mixin是掺合,混合,糅合的意思,即可以就任意一个对象的全部或部分属性拷贝到另一个对象上. 从提供的接口 ...
- 机器学习—集成学习(Adaboost)
一.原理部分: 二.sklearn实现: from sklearn.ensemble import AdaBoostClassifier from sklearn.datasets import lo ...