Java代码度量分析工具:DesigniteJava简介
前言
在Java面向对象课程的学习过程中,我们需要使用度量工具来分析自己程序的代码结构。受OO课程组以及前辈们博客提醒,笔者找到了DesigniteJava这款软件,现对此软件进行简单的说明。
一、DesigniteJava的下载与使用
Designite是一款程序设计的质量评估工具。这款工具可以用于分析Java的代码,并且识别其中存在的质量问题。Designite会检测程序的架构(architecture),设计(design)和代码异味(code smell)并且给出详细的度量分析(metrics analysis)。
Designite for Java:http://www.designite-tools.com/DesigniteJava/
最近刚和IDEA互动:https://plugins.jetbrains.com/plugin/13380-designitejava/versions
进入官网Designite for Java,下载会得到一个jar包,默认名为DesigniteJava.jar。将其放在方便使用的位置,打开命令行窗口,输入以下代码即可运行:
java -jar DesigniteJava.jar -i <源码路径> -o <分析数据输出路径>
输出之后,会得到以下文件。
二、度量指标介绍
以下截取自这里
许多翻译十分抽象,笔者没有找到好的解释,欢迎作注。
Detects 20 design smells 能检测20种设计异味命令抽象
Duplicate Abstraction:
重复抽象,This smell arises when two or more abstractions have identical names or identical implementation or both.
Feature Envy:
This smell occurs when a method seems more interested in an abstraction other than the one it actually is in.
Imperative Abstraction
命令抽象,This smell arises when an operation is turned into a class.
Multifaceted Abstraction
多方面抽象,This smell arises when an abstraction has more than one responsibility assigned to it.
Unnecessary Abstraction
不必要的抽象,This smell occurs when an abstraction that is actually not needed (and thus could have been avoided) gets introduced in a software design.
Unutilized Abstraction
未使用的抽象,This smell arises when an abstraction is left unused (either not directly used or not reachable).
Deficient Encapsulation
封装不足,This smell occurs when the declared accessibility of one or more members of an abstraction is more permissive than actually required.
Unexploited Encapsulation
未开发封装,This smell arises when client code uses explicit type checks (using chained if-else or switch statements that check for the type of the object) instead of exploiting the variation in types already encapsulated within a hierarchy.
Broken Modularization
模块化中断,This smell arises when data and/or methods that ideally should have been localized into a single abstraction are separated and spread across multiple abstractions.
Cyclic-Dependent Modularization
循环相关模块化, This smell arises when two or more abstractions depend on each other directly or indirectly (creating a tight coupling between the abstractions).
Insufficient Modularization
模块化不足 ,This smell arises when an abstraction exists that has not been completely decomposed, and a further decomposition could reduce its size, implementation complexity, or both.
Hub-like Modularization
轮毂式模块化,This smell arises when an abstraction has dependencies (both incoming and outgoing) with a large number of other abstractions.
Broken Hierarchy
断裂的层次结构,This smell arises when a supertype and its subtype conceptually do not share an “IS-A” relationship resulting in broken substitutability.
Cyclic Hierarchy
循环层次结构,This smell arises when a supertype in a hierarchy depends on any of its subtypes.
Deep Hierarchy
层次过深,This smell arises when an inheritance hierarchy is “excessively” deep.
Missing Hierarchy
缺少层次结构,This smell arises when a code segment uses conditional logic (typically in conjunction with “tagged types”) to explicitly manage variation in behavior where a hierarchy could have been created and used to encapsulate those variations.
Multipath Hierarchy
多路径层次结构,This smell arises when a subtype inherits both directly as well as indirectly from a supertype leading to unnecessary inheritance paths in the hierarchy.
Rebellious Hierarchy
叛逆性层次结构,This smell arises when a subtype rejects the methods provided by its supertype(s).
Wide Hierarchy
层次过宽,This smell arises when an inheritance hierarchy is “too” wide indicating that intermediate types may be missing.
Unfactored Hierarchy:
This smell arises when there is unnecessary duplication among types in a hierarchy.
Detects 10 implementation smells 检测10种实现异味
Abstract Function Call From Constructor
构造函数调用抽象函数
Complex Conditional
复杂条件
Complex Method
复杂的方法
Empty catch clause
空catch子句
Long Identifier
长标识符
Long Method
长方法
Long Parameter List
长参数列表
Long Statement
长语句
Magic Number
魔法数字,在编程领域指的是莫名其妙出现的数字。数字的意义必须通过详细阅读才能推断出来。
一般魔法数字都是需要使用枚举变量来替换的。
Missing default
缺少默认值
Computes following object-oriented 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)
类的公共字段个数。
NOM (Number of Methods - Class)
类的方法个数。
NOPM (Number of Public Methods - Class)
类的公共方法个数。
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与复用性和复杂度有关,视情况判断好坏
FANIN和FANOUT
(A)FANIN(扇入)
扇入表示一个模块被多个模块调用。
(B)扇出
扇出表示一个模块调用多个模块。
Java代码度量分析工具:DesigniteJava简介的更多相关文章
- Java代码度量分析工具:Designite简介
前言 在Java面向对象课程的学习过程中,我们需要使用度量工具来分析自己程序的代码结构.此类的度量工具有许多,或以插件形式存在于各个IDE中,或以.jar包的形式供用户使用.在这里,笔者向大家简单的介 ...
- 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等都是我们经常用到的.工具类的方法和属性 ...
随机推荐
- Flutter: IntrinsicWidth类,将孩子的宽度调整为孩子的最大内在宽度
文档 原文 class HomePage extends StatefulWidget { @override _HomePageState createState() => _HomePage ...
- 15_MySQL·WHERE子句中条件执行的顺序
- springCloud服务流程
springCloud的服务流程:消费者调用生产者 1.通过接口化的请求调用(指定接口的服务名字和服务地址)只是做定义,并没有真正做到. 2.Feign组件,远程去注册中心找到服务的名字和服务的地址然 ...
- Django的ORM封装接口详细
[前言]Django的orm操作本质上会根据对接的数据库引擎,翻译成对应的sql语句:所有使用Django开发的项目无需关心程序底层使用的是MySQL.Oracle.sqlite....,如果数据库迁 ...
- WEB容器开启、关闭OPTIONS方法
发现 请求包随意,响应包信息如下: HTTP/1.1 200 OK Cache-Control: private Content-Type: text/html; charset=utf-8 Vary ...
- BurpSuite生成快捷方式
Win下 在win系统写个脚本,能方便快捷的打开burp. burp.bat @echo oFF if "%1" neq "1" ( >"%te ...
- PAT-1148(Werewolf )思维+数学问题
Werewolf PAT-1148 题目的要点是不管n规模多大,始终只有两个狼人 说谎的是一个狼人和一个好人 紧紧抓住这两点进行实现和分析 #include <iostream> #inc ...
- Semaphore实战
简介 Semaphore信号量计数器.和CountDownLatch,CyclicBarrier类似,是多线程协作的工具类,相对于join,wait,notify方法使用起来简单高效.下面我们主要看看 ...
- docker swarm模式跨主机连接
一.前言 当我们开发好微服务之后,考虑到灵活快速持续部署的需要,通常会考虑将其Docker镜像化并在Docker环境下运行.由于微服务个数通常会较多,把所有微服务部署在一台docker主机上是不现实的 ...
- JAVA中枚举Enum详解
1.关键字:enum.枚举可以定义成单独的文件,也可以定义在其他类内部. 枚举在类内部的示例: public class EnumInner { public static void main(Str ...