前言

在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 <分析数据输出路径>

java java 代码 分析 java代码分析工具_java

输出之后,会得到以下五个文件。

java java 代码 分析 java代码分析工具_java_02

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值要合理。