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)扇出
扇出表示一个模块调用多个模块。
最新文章
- vijos P1780 【NOIP2012】 开车旅行
- LUA 利用#遍历表的问题
- git操作的常用命令
- Xcode常见错误汇总
- android学习笔记30——AndroidMainfest.xml
- IOS绘图——简单三角形
- Excel中如何查找并列出所有链接(外部数据链接)?
- GDI 总结三: CImage类使用
- unity3d学习路线
- ssh远程连接vm 安装的ubuntu
- 2018-2019-1 20189210 《LInux内核原理与分析》第九周作业
- LINUX 下Jexus部署ASP.NET Core WebApi
- Go匿名函数
- POJ 1243
- 在eclipse中修改项目发布tomcat的路径名
- rsync- sersync -inotify
- MOOK学习
- JUC组件扩展(二)-JAVA并行框架Fork/Join(一):简介和代码示例
- 7.MySQL优化---存储过程和存储函数
- GetIPAddress——获得本地IP地址信息
热门文章
- XML &; XPath &; XQuery
- dart 匹配基本map
- NGK算力市场,不止有动静态收益还有SPC空投!
- HTTP 1.x 学习笔记 —— Web 性能权威指南
- git配置了公钥,在下载项目时为什么还要输入密码
- CentOS7安装ZooKeeper3.4.14
- js实现element中可清空的输入框(2)
- C#语言特性及发展史
- ClickHouse源码笔记4:FilterBlockInputStream, 探寻where,having的实现
- POJ-1847(SPFA+Vector和PriorityQueue优化的dijstra算法)