通过增加代码覆盖率提高单元测试的质量

在 Rational Application Developer 8.0.3 中配置 Code Coverage Advisor 并与 Rational Team Concert 集成

许多敏捷软件开发团队都面临的一个挑战是,确保其单元测试包含大部分代码。这在确保他们创建尽可能少的缺陷并且代码可重构时非常重要。因此,重要的度量指标(除了通过的所有测试之外)之一是已包含的代码数量。从 Rational Application Developer 8.0.3 开始,您可以配置 IBM® Rational® Application Developer 并将它与 IBM® Rational Team Concert™ 集成,以便在交付代码之前运行测试并检查代码覆盖率。本文将介绍如何设置此先决条件(名为 Code Coverage Advisor),还将介绍如何使用它来增加项目中测试的代码的覆盖率。

Steve Arnold, 高级技术顾问, IBM 

Steve ArnoldSteve 与他的妻子和小女儿一起住在伦敦的 Twickenham。他自从 2000 年以后,一直是 IBM Rational 的一名技术顾问,他是一名认证 Scrum 专家,专长于敏捷项目交付、建模和基于模式工程。工作之外,他喜欢与家人一起,以及研究、教习和联系太极拳。他写过几篇文章,涵盖了 Rational Software Architect V7.5 和 V8 的最新特性,还有一些文章,讨论 Rational Software Architect 的不同扩展、Rational RequisitePro 和 Rational Team Concert。


developerWorks 专家作者

2012 年 2 月 17 日

在许多类型的开发项目中,无论您使用的是敏捷开发方法、Rational Unified Process (RUP),还是瀑布式开发方法,在开发期间,测量已执行代码的数量是一个主要度量指标。这对开发人员和测试人员都很重要,因为当开发人员生成具有高代码覆盖率的代码时,测试团队可以关注代码是否满足业务目标,而不是陷入大量低级代码缺陷中。

当代码覆盖率非常重要时

下列是代码覆盖率非常重要时的一些场景的常见示例:

  • 任何想要响应业务并以低风险方式进行更改的团队
  • 正在开发代码、想要提供工作质量可见性或需要满足约定的 SLA 的第三方
  • 当某个项目定义了开发和测试之间的协议,以便通过开发测试获得代码覆盖率时,这意味着测试团队在捕捉代码错误上花费的时间更少
  • 敏捷团队可能想要在每个 sprint(冲刺阶段)结束时制定发布代码决策,因为这会提高交付物的质量,在将代码用于生产之前很少需要转换代码
  • 一些想要减少技术债务的团队,这些团队可以逐渐增加单元测试的数量并重构代码,从而减少错误并减低复杂性
  • 想要通过构建度量程序来衡量质量和技术债务的组织,这样做可及早发现发展趋势并进行相应的改进

许多敏捷团队都面临的一个具体挑战是,确保他们的单元测试包含大部分代码。这在确保他们创建尽可能少的缺陷并且代码可重构时非常重要。(考虑到团队发展的趋势是涉及很少的设计或没有设计,则具有良好的单元测试非常重要。)一个主要度量指标(除了通过的所有测试)是已包含的代码数量,这是新 IBM® Rational® Application Developer 版本发挥作用的地方。

今年早些时候,我编写了一个原型扩展,用该扩展来集成 IBM® Rational Team Concert™ 和 Rational Application Developer。如果没有足够的代码覆盖率,就会阻止交付给 Rational Team Concert 的代码,正如在 Rational Application Developer 中测量的那样。此扩展(现在名为 Code Coverage Advisor)已正式纳入 Rational Application Developer 中,在版本 8.0.3 之后都可以找到它。这意味着您现在可以配置 Rational Application Developer 和 IBM Rational Team Concert,在交付代码之前检查代码覆盖率。本文将介绍如何设置它,以及在项目开发期间如何使用它来提高代码覆盖率。

提示:
您需要了解一些 Rational Application Developer 知识才能理解本文。

后面的内容包含了三个主题:

  1. 何时适合使用 Code Coverage Advisor
  2. 当使用在 Rational Application Developer 中配置的此额外过程交付代码时会发生什么事
  3. 如何配置 Rational Team Concert 以使用 Advisor

最适合使用 Code Coverage Advisor 的情况

如何使用 advisor?以下是两个主要场景:

  • 第一个场景针对的是新项目,出现在您想要确保单元测试提供足够的代码覆盖率时。在这种场景下,可使用 Advisor 帮助开发团队维护高标准的单元测试和代码覆盖率。
  • 第二个场景针对的是您想要改进的具有糟糕的单元测试或不存在单元测试的项目。通过打开 Advisor,要求开发人员为他们修改的代码提供单元测试,这样这些团队可以一种简单、递增且可管理的方式进行改进。此外,这种方法意味着正在编写的单元测试将包含正在修改的代码;因此,开发人员很可能会发现缺陷。

在这两种场景中,Code Coverage Advisor 可提供大量价值,通过帮助团队维护单元测试的高代码覆盖率来改进其代码质量。下一部分将介绍开发人员在已经配置了代码覆盖率功能时如何使用 Rational Application Developer 交付代码。


使用 Rational Application Developer 中的新流程交付代码

您需要做的第一件事是(如果还没有做)配置项目,以收集代码覆盖率信息。

配置项目的流程

  1. 在 Project Explorer 中右键单击项目,选择 Properties。
  2. 然后从菜单中选择 Code Coverage ,采用与设置团队相同的方式设置项目的代码覆盖率信息(参见图 1)。
图 1.项目代码覆盖率配置
配置源文件类型和行覆盖率

使用启动的流程交付代码时会发生什么事

在配置了代码覆盖率后,Code Coverage Advisor 会检查文件的覆盖率,以确定是否交付了代码。Coverage Advisor 在下列情况下不支持交付代码:

  • 覆盖率低于目标水平。
  • 覆盖率过期了(例如,您已修改了其中一个文件,但没有重新运行测试)。
  • 项目未启用代码覆盖率。

在这些情况下,需要开发人员在交付代码前提高覆盖率。但是,如果已大致配置了流程,并且人员具有必备的权限,那么开发人员可选择忽略警告并交付代码覆盖率不足的代码。

让我们看一个示例。在如图 2 所示的项目中,您可以看到,HelloWorld.java 类并不满足覆盖率要求。

图 2. Project Explorer 显示了失败的代码覆盖率
HelloWorld.java 是红色的,具有 67% 的代码覆盖率

如果您尝试交付代码,交付将失败,您将得到如图 3 所示的流程建议:重写“Prohibit Unsatisfactory Code Coverage”先决条件。

图 3. 代码覆盖率交付失败
警告行覆盖率不足的流程

在 Rational Team Concert 中设置流程

在流程中存储信息意味着集中存储所必需的代码百分比阈值,并在团队中平等应用它们(尽管您可要针对不同组件配置不同的代码覆盖率要求,如后面所见)。您可以在本地客户端设置不同的覆盖率设置,但是当交付代码时将使用基于服务器的设置。

配置流程

提示:
在开始前,您需要具有修改 Project Area 的流程的相应角色。

  1. 从 Eclipse shell,导航到 Work Item 视图,打开 Team Artifacts 视图。
  2. 在想要配置的项目区域右键单击,并选择 Open
  3. 然后单击 Process Configuration 选项卡打开流程编辑器(图 4)。
图 4. 流程配置编辑器
角色、项目和团队配置选项
  1. 打开 Team Configuration 视图,选择 Deliver (client) 操作,然后选择 Everyone (default) 列下面的单元格,如图 5 所示。
图 5. 交付选项
针对所选的所有人操作进行交付

将足够的代码覆盖率配置为先决条件

现在您准备好配置规则,然后可以检查每次有人交付代码时代码覆盖率是否足够。

  1. 添加一个先决条件来检查代码覆盖率:
    1. 在 Preconditions 部分单击 Add,选择 Prohibit Unsatisfactory Code Coverage(参见图 6)。
    2. 配置所需的各种代码覆盖率级别。

您可以在源代码的不同级别指定所需的覆盖率。例如,每个文件可能需要 70% 的行覆盖率;但是,开发人员对每种类型必须具有 100% 的覆盖率。您还可以正则表达式以将文件从覆盖率统计信息中排除,这在您具有一些自动生成的不在意覆盖率的代码时很有用。最后,不同的组件可以具有不同的规则,方法是指定这些覆盖率设置应用的组件。

图 6. Prohibit Unsatisfactory Code Coverage 配置
必需的覆盖率和组件的对话框窗口
  1. 现在保存流程,这些新规则会在您下次交付代码时生效。

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=795530
ArticleTitle=通过增加代码覆盖率提高单元测试的质量
publish-date=02172012