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等都是我们经常用到的.工具类的方法和属性 ...
随机推荐
- Techme INC:红光和近红外光疗法有效加速肌肉恢复,美国橄榄球队已采用
Techme INC创始人兼董事长MADELEINE VAUGHAN表示:在运动结束后,肌肉纤维因为细微损伤造成酸痛情形,即是延迟性肌肉酸痛-DOMS.这类酸痛发生时,需要适度的恢复,避免造成肌肉拉伤 ...
- DisplayFormat属性
DataFormatString="{0:格式字符串}" 在DataFormatString 中的 {0} 表示数据本身,而在冒号后面的格式字符串代表所们希望数据显示的格式: 数字 ...
- Golang 实现 Redis(9): 使用GeoHash 搜索附近的人
本文是使用 golang 实现 redis 系列的第九篇,主要介绍如何使用 GeoHash 实现搜索附近的人. 搜索附近的POI是一个非常常见的功能,它的技术难点在于地理位置是二维的(经纬度)而我们常 ...
- the import java.util cannot be resolve
重新配置一下build path 的jre,如果不行的话就重新设置jre(在add library中installed JREs)
- Kubernetes: NGINX/PHP-FPM 502错误和优雅结束
我们有一个运行在Kubernetes上的PHP应用,每个POD由两个独立的容器组成 - Nginx和PHP-FPM. 在我们对应用进行缩容时,遇到了502错误,例如,当一个POD在结束中时,POD里面 ...
- Python3.x 基础练习题100例(01-10)
练习01: 题目: 有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 分析: 可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. ...
- webpack + vuecli多页面打包基于(vue-template-admin)修改
转: webpack + vuecli多页面打包基于(vue-template-admin)修改 遇见的问题TypeError: Cannot read property 'tap' of undef ...
- 巧用 -webkit-box-reflect 倒影实现各类动效
在很久之前的一篇文章,有讲到 -webkit-box-reflect 这个属性 -- 从倒影说起,谈谈 CSS 继承 inherit -webkit-box-reflect 是一个非常有意思的属性,它 ...
- Spring Boot 2.x基础教程:使用MongoDB
前段时间因为团队调整,大部分时间放在了团队上,这系列的更新又耽误了一下.但既然承诺持久更新,那就不会落下,今天开始继续更新这部分的内容! 过了年,重申一下这个系列的目标:目前主要任务就是把Spring ...
- 七. SpringCloud服务配置
1. SpringCloud Config概述 1.1 分布式系统面临的配置问题 微服务意味着要将单体应用中的业务拆分成一个一个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务.由于每个服务 ...