IBM System Planning Tool 的代码复杂性和代码覆盖分析

Comments

分析代码复杂性和确保足够的代码覆盖,这两个方法可以保证作为开发项目结果交付的代码的质量。对于使用敏捷方法的开发项目,重要的是在项目开发和测试的日常活动中监测代码复杂性和代码覆盖水平。

本文介绍了为 Windows 环境中的 IBM System Planning Tool 项目配置代码复杂性分析工具和代码覆盖工具所需的步骤。

IBM System Planning Tool 是一个 Web 应用程序工具,可以帮助您根据自己的需要来设计系统配置。您可以使用这个工具来配置一个全新的系统,也可以基于新的工作负载或者现有的性能数据来规划系统。

该项目使用了 Model-View-Controller (MVC) 架构:

  • 使用一个数据模型来存储运行时处理的系统对象
  • 使用一个视图模型在 Web 页面上显示所配置的系统信息
  • 使用一个控制器来控制数据模型和视图模型之间的通信

这个项目中应用了以下技术:Java™ 技术、JavaServer Pages、JavaServer Faces、JavaScript、XML 和 ANT。Java 和 J2EE 项目开发人员和测试人员是本文的主要受众。

您可以使用本文作为一个指南,帮助您为自己的项目配置代码复杂性和覆盖分析环境。为了适应您的项目,请修改示例中的项目文件和路径,使之与您的环境相匹配。

代码复杂性分析工具

代码复杂性分析工具可以在构建周期过程中计算 System Planning Tool 项目代码的各种指标。指标可以生成有关代码复杂性的警告,因此,这些问题可以得到纠正。本文将介绍如何使用 Eclipse Metrics 插件分析代码的复杂性。

代码复杂性工具提供的指标有圈复杂度、方法中的代码行数、语句的数量,以及在代码中层次的数量。

下载并安装 Eclipse Metrics 插件。

Eclipse Metrics 插件要求 Eclipse 在 JDK 1.5 或更高版本上运行。

  1. 下载 Eclipse Metrics JAR 文件
  2. 将下载的 JAR 文件放进 Eclipse 的 plugins 目录中。
  3. 重新启动 Eclipse。

启用和禁用 Eclipse Metrics 插件

根据项目的需要,您可以为每个 Java 项目启用或禁用 Eclipse Metrics 插件。要启用该插件,可以打开项目的 Properties,选择 Metrics 选项卡,然后选中或取消选中 Enable Metrics Gathering 复选框。单击 OK 会导致项目重新编译(如果该项目的首选项设置为执行自动生成)并计算指标。如果有任何指标超出指定范围,则会生成警告,并在 Problems View 中显示,而且还会在代码块中显示一个标记。

例如,要在 System Planning Tool 项目中启用 Eclipse Metrics 插件,请右键单击 uSPT > Properties > Metrics,并选中 Enable Metrics Gathering 复选框,如图 1 所示。

图 1. 启用指标
选中复选框,启用指标收集
选中复选框,启用指标收集

设置首选项

打开 Windows Preferences 对话框并选中 Metrics 选项卡,执行下列操作:

  1. 启用或禁用每个指标。
  2. 为每个可用指标设定最高首选值。
  3. 微调一些指标,使之与项目的要求相符。

单击 OK 会导致项目重新编译(如果该项目的首选项设置为执行自动生成)并重新计算指标。如果有任何指标超出指定范围,则会生成警告,并在 Problems View 中显示,而且会在代码块中显示一个标记。

Complexity 选项卡中设置指标首选项,如图 2 所示。

  • 选中 Cycolomatic Complexity 并将 Upper Bound 指定为 4
  • 选中 Weighted Methods Per Class 并将 Upper Bound 指定为 40
  • 选择中以下选项:
    • Include 'case' and 'default' statements
    • Include 'catch' clauses
    • Include 'ternary' operator
图 2. 设置指标的首选项
理想的复杂性设置上限值
理想的复杂性设置上限值

Eclipse Metrics 的特性

利用 Eclipse Metrics 插件,您可以访问多种指标:

  • 圈复杂度:表示方法中直线段(没有分支的代码部分)的数量。使用该指标来确定获得完全覆盖所需的测试次数。该指标还可以用来表示一个方法的心理复杂度。例如,没有分支的方法的圈复杂度为 1。每当遇到一个分支时,这个数字递增 1。
  • 在方法中的代码行数:表示一个方法所占用的行数。通过是否有换行符来确定某一行的存在。
  • 语句的数量:代表一个方法中的语句数量。这是比代码行数更强大的指标,因为代码的行数可能因格式化约定而有所不同。该指标所计算的语句包括 break、continue、do、explicit constructor call、explicit super constructor call、for、if、return、switch、throw、try、catch、finally、while 和 assignments。
  • 层次的数量:表示方法中所嵌套的的层次的最大数量。多个层次会增加复杂性。

为 System Planning Tool 项目收集的指标

图 3 示出了为该项目收集的代码复杂性指标。在这个特定的方法中,收集了以下指标:

  • 层次的数量:7
  • 在方法中的代码行数:84
  • 语句的数量:47
  • 圈复杂度:10
图 3. 为 System Planning Tool 项目收集的指标
在 Eclipse 中显示的项目指标
在 Eclipse 中显示的项目指标

代码覆盖工具

代码覆盖工具衡量由一个特定的测试用例或测试套件对程序的源代码进行测试的程度。了解这项测量可以帮助开发人员针对源代码添加更多的测试用例。这一操作可以大大提高代码质量。

本文将介绍如何使用 Eclipse 工具 EclEmma 分析代码的覆盖率。

下载并安装 EclEmma

EclEmma 要求使用 Eclipse 3.5 或更高版本,以及 Java 1.5 或更高版本。

  1. 在 Eclipse 菜单中单击 Help > Eclipse Marketplace
  2. 搜索 EclEmma
  3. 单击 EclEmma Java Code Coverage 条目的 Install
  4. 完成在安装向导中提供的步骤。
  5. 在项目工作区中包括 junit.jar。
  6. 重新启动 Eclipse。

为项目中的单个测试用例捕获代码覆盖率

本节将介绍如何配置 EclEmma,在 System Planning Tool 项目中为单个测试用例 CCIN_test_cases 捕获覆盖细节。

为了检查 CCIN_test_cases.java 的代码覆盖,请转到 Package Explorer 并选中文件 CCIN_test_cases.java。然后右键单击文件名称,并单击 Coverage As > Coverage Configurations,如图 4 所示。

图 4. 覆盖配置
通过选择文件在 Eclipse 中配置覆盖
通过选择文件在 Eclipse 中配置覆盖

在下一个窗口中,创建一个 Java Application,指定 CCIN_test_casesName ,并在 Main 选项卡中指定以下细节,如图 5 所示。

  • ProjectuTest
  • Main classtest.TestLoader
  • 选中复选框 Stop in main
  • 单击 Coverage
图 5. 覆盖配置 – Main 选项卡
在 Main 选项卡下的 Project 和 Main 类设置
在 Main 选项卡下的 Project 和 Main 类设置

Coverage 选项卡中,默认选中了 System Planning Tool 的 Eclipse 工作区(uLVT、uSPT、uSPT_MRI 和 uTest)中的所有项目。因此,该特定测试用例的代码覆盖可以涵盖所有这些项目。为了将覆盖检查限制为仅包括某些项目,可以在 Coverage 选项卡上只选中下列项目,如图 6 所示。

  • uLVT - src
  • uSPT – insulation/src
  • uSPT – web/src
  • uSPT_MRI
图 6. 覆盖配置 – Coverage 选项卡
SPT 项目的分析范围选择
SPT 项目的分析范围选择

Arguments 选项卡上,指定以下详细信息,如图 7 所示。

  • 程序参数:
    	test/unit/fcresolution/information
    CCIN_test_cases
    -norecordings
  • 虚拟机参数: Dcom.ibm.spt.fdate=20151231
图 7. 覆盖配置 – Arguments 选项卡
指定程序参数和虚拟机参数
指定程序参数和虚拟机参数

单击 Apply Coverage。

该工具运行第一个测试用例(请注意 Console 选项卡中的测试用例输出),然后收集该测试用例的覆盖详细信息,并在 Coverage 选项卡中显示详细信息,如图 8 所示。

图 8. 覆盖信息 – 项目覆盖
项目所覆盖、缺失的指令和指令总数
项目所覆盖、缺失的指令和指令总数

要请求测试用例的代码覆盖,请在覆盖数据元素中单击 uTest > CCIN_test_cases,如图 9 所示。此操作显示了在各个方法中覆盖的代码的百分比。

图 9. 覆盖信息 – 方法覆盖
方法所覆盖、缺失的指令和指令总数
方法所覆盖、缺失的指令和指令总数

显示源代码注释

您还可以在 Java 源代码编辑器中直接显示各种覆盖详细信息,比如活动覆盖会话的行数、分支和方法覆盖。

在同一个 Coverage 输出窗口中,双击测试用例文件。请注意用不同颜色突出显示的代码行,它们表示在测试用例中的代码覆盖,如图 10 所示。

图 10. 源代码注释
以不同颜色突出显示所覆盖的代码行
以不同颜色突出显示所覆盖的代码行

在源代码中的每种颜色代表针对一个特定测试用例捕获覆盖时的一个特定含义。

  • 绿色:完全覆盖的代码行。
  • 黄色:部分覆盖的代码行(缺少某些指令或树枝)。
  • 红色:没有覆盖的行。这些代码行完全没有被运行。

覆盖属性

在覆盖启动后,可以针对特定的测试用例获得代码的各种属性(比如行、分支和指令)的覆盖指标。

例如,要检查测试用例 CCIN_test_cases.java 的覆盖属性,请转到 Package Explorer,选中该文件,然后右键单击 Properties 来查看 Coverage 选项卡。列出覆盖属性,如图 11 所示。

图 11. 覆盖属性
覆盖的指令、分支、行、方法
覆盖的指令、分支、行、方法

您还可以获得存在于特定项目的测试桶或测试套件中所有测试用例的覆盖信息。

结束语

对于任何开发项目,代码复杂性和代码覆盖分析都是两个重要的质量指标。本文提供了有关如何为 IBM System Planning Tool 配置代码复杂性和代码覆盖分析工具的详细步骤。Eclipse Metrics 和 EclEmma 插件分别用来收集项目的代码复杂性和代码覆盖的详细信息。利用 Eclipse Metrics 插件,开发人员可以获得各种代码指标,比如圈复杂度、方法中的代码行数、语句的数量,以及代码中的层次数量。利用 EclEmma 插件,开发人员或测试人员可以获得有关对一组特定的代码(或在测试桶或测试套件中的测试用例)进行测试的程度的信息。可以在项目层面和各个方法层次获得代码覆盖的详细信息。在每个项目的日常开发活动中使用这些开发工具可以大大提高任何产品的质量和性能。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=999615
ArticleTitle=IBM System Planning Tool 的代码复杂性和代码覆盖分析
publish-date=03052015