前言

在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简介的更多相关文章

  1. Java代码度量分析工具:DesigniteJava简介

    前言 在Java面向对象课程的学习过程中,我们需要使用度量工具来分析自己程序的代码结构.受OO课程组以及前辈们博客提醒,笔者找到了DesigniteJava这款软件,现对此软件进行简单的说明. 一.D ...

  2. Java代码混淆工具ProGuard

    目录 Java代码混淆工具ProGuard 简介 描述 作用的环境 功能 工作原理 下载 使用时注意事项 版本问题 JDK位数问题 Java的字节码验证问题 关于使用类似于Hibernate的对象关系 ...

  3. eclipse Java代码折叠工具

      eclipse Java代码折叠工具 CreateTime--2018年5月17日15点09分 Author:Marydon 1.问题描述 eclipse自带的代码折叠工具,无法折叠try{}ca ...

  4. Findbug插件静态java代码扫描工具使用

    本文转自http://blog.csdn.net/gaofuqi/article/details/22679609 感谢作者 FindBugs 是由马里兰大学提供的一款开源 Java静态代码分析工具. ...

  5. 把调试好的SQL语句转换为JAVA代码小工具

    关键点:Pattern实现SQL拆解.ZeroClipboard.js实现复制到剪切板 主要代码: <%@ page language="java" import=" ...

  6. GitLab - 代码仓库管理工具GitLab简介

    1 - GitLab 基于git的开源的仓库管理系统项目,使用git作为代码管理工具,并在此基础上搭建web服务,拥有与Github类似的功能. 社区版(Community Edition,CE) 企 ...

  7. Gerrit - 代码评审工具Gerrit简介与安装

    1 - 前言 Code Review 代码评审是指在软件开发过程中,对源代码的系统性检查,改进代码质量,查找系统缺陷,保证软件总体质量和提高开发者自身水平. 简单的说,Code Review是用来确认 ...

  8. java 代码分析工具——JDepend

    最近学习Mybatis的官方文档,看到了[项目文档]一节有很多内容没有见过,做个笔记,理解一下. 百科上的介绍,我竟然都看懂了,那就不找其他地方的资料了. JDepend 一个开放源代码的可以用来评价 ...

  9. [改善Java代码]让工具类不可实例化

    建议42: 让工具类不可实例化 Java项目中使用的工具类非常多,比如JDK自己的工具类java.lang.Math.java.util.Collections等都是我们经常用到的.工具类的方法和属性 ...

随机推荐

  1. centos 7 安装最新版本git

    https://serverfault.com/questions/709433/install-a-newer-version-of-git-on-centos-7 You could use a  ...

  2. viewDidAppear在何时调用?

    [viewDidAppear在何时调用] If the view belonging to a view controller is added to a view hierarchy directl ...

  3. 475. Heaters

    static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ...

  4. Chrome Console API 参考

    https://developers.google.com/web/tools/chrome-devtools/console/command-line-reference

  5. java复习小知识(基础不算,有反射,递归)

    顺序选择循环,三种 1.至于循环和递归 循环效率更高,但是递归在处理文件递归的时候更为常见快捷 在java中实现传多参 2.public static void main(String[]  args ...

  6. MySQL 笔记整理(20) --幻读是什么,幻读有什么问题?

    笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 20) --幻读是什么,幻读有什么问题? 我们先来看看表结构和初始化数据 ...

  7. tomcat-java_opts设置说明

    The JAVA_OPTS environment variable can be used to specify additional arguments to the JVM JBoss will ...

  8. [JAVA] Tcp客户端和服务器简单代码

    服务器: import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; im ...

  9. 自己从0开始学习Unity的笔记 V (C#的数组练习)

    今天练习了数组输入,先从最简单的开始,因为我输入完这些之后,觉得应该有更简单的方法,先来介绍一下我做的练习代码 //做一个最多能容纳10个数字的,用户可以输入任意1-10个数字,判断长度,输出数字 ] ...

  10. .Net上传图片压缩质量,不改变尺寸

    图片上传有很多情况需要考虑,例如:生成缩略图.压缩尺寸.压缩质量.压缩尺寸质量.添加水印等等常见情况.最近遇到图片质量压缩不改变大小的问题,参考:听浪 #region 图片压缩 /// <sum ...