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 在同一页面显示List和Grid
import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends State ...
- 【HTB系列】靶机Access的渗透测试详解
出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) Hack The Box是一个CTF挑战靶机平台,在线渗透测试平台.它能帮助你提升渗透测 ...
- 学习笔记——JVM性能调优之 jmap
jmap jmap(JVM Memory Map)命令可生成head dump文件,还可查询finalize执行队列.Java堆和永久代的详细信息. 通过配置启动参数:-XX:+HeapDumpOnO ...
- 页面强制重新加载js的办法
1:线上强制重新加载js的办法 js后缀?v1.0 2:开发环境强制重新加载js的办法?now=Date.now() 3:开发环境强制重新加载js的办法F12进入调试页面选择network下单 dis ...
- System.IO.IOException:“找不到资源“window1.xaml”。” 解决方法
报错:找不到资源"window1.xaml 原因:在编译时使用的是en-US选项进行编译并生成了en-US为名的文件夹,里面包含了可本地化的内容:但是你的本地系统使用的是zh-CN,在你运行 ...
- KeyboardDemo - Android身份证号、车牌号快捷输入键盘
Android身份证号.车牌号快捷输入键盘 项目地址 Github 键盘部分在 keyboard module 中 键盘与EditText绑定参照 MainActivity
- 微信小程序input框去除空格
//去除空格 <input type='text' data-name='account' value='{{account}}' name="account" bindin ...
- 致被职场PUA的打工人
作为打工人,除了每天面对着各种繁琐的工作,还要被动接受上级或多或少的PUA,实在是难上加难,甚至有人想不开而自杀.网络上最近流行了一个词:职场PUA,赋予了这种现象一个正式的名字. 职场PUA指的是职 ...
- 爬虫必知必会(5)_scrapy框架_基础
一.移动端数据的爬取 基于某一款抓包工具,fiddler,青花瓷,miteproxy fillder进行一个基本的配置:tools->options->connection->all ...
- FreeBSD ibus输入法框架配置
FreeBSD ibus输入法框架配置 ibus输入法框架配置.xinitrc中增加XIM=ibus; export XIMGTK_IM_MODULE=ibus; export GTK_IM_MODU ...