内容


使用 Rational Developer for i 中的代码覆盖工具

Comments

IBM® Rational® Developer for i Version 9.1 包含一项新的代码覆盖特性。代码覆盖工具可帮助在 IBM i 批处理程序上运行一个代码覆盖会话,生成一个报告来显示当前运行的代码所覆盖的您代码行的百分比,并提供逐行的覆盖情况细节。代码覆盖支持常见的 IBM i 编译语言,比如 RPG、COBOL、C/C++ 和 CL。它还支持以 3 种不同的格式生成代码覆盖报告:工作台报告、HTML 报告和 PDF 报告。

代码覆盖工具也可用在 IBM® Rational® Developer for System z® 和 IBM® Rational® Developer for AIX® and Linux® 上。本文将使用 RPG 程序来介绍 IBM i 上的代码覆盖特性。

启动一个代码覆盖会话

可以使用以下一个解决方案启动代码覆盖会话:

  • 使用 Code Coverage As > Batch 通过默认参数启动代码覆盖
  • 使用 Code Coverage (Prompt) > Batch 打开启动配置对话框并修改代码覆盖参数
  • Code Coverage 工具栏下现有的快捷方式启动

准备运行代码覆盖的程序

代码覆盖工具是使用调试技术来实现的。可在任何可在源代码级别上调试的程序上运行代码覆盖。要在 IBM i 程序上运行代码覆盖,需要使用 DBGVIEW(*ALL)DBGVIEW(*SOURCE) 选项来编译它。使用 DBGVIEW(*LIST) 选项编译的程序不受 RDi 9.1 版中的代码覆盖支持。

一步启动代码覆盖

可以通过 Remote System Explorer 透视图在 IBM i 程序上运行代码覆盖。请选择 Code Coverage As > Batch,以便使用没有提示的默认参数运行代码覆盖会话。

在 Remote Systems 导航器中,右键单击想要对其运行代码覆盖的程序,然后选择 Code Coverage As > Batch 启动一个新代码覆盖会话。代码覆盖作业的状态显示在 IDE 右下角的状态栏中。运行完代码覆盖时,会在当前透视图中打开一个新的工作台报告。Compiled Code Coverage Launch History 视图也会打开,其中已向视图添加了新的启动,如图 1 所示。

图 1. 代码覆盖的实际应用
运行后显示代码覆盖报告
运行后显示代码覆盖报告

从提示符自定义代码覆盖参数

也可从 Compiled Code Coverage 启动配置对话框启动新代码覆盖会话,以修改当前运行的代码覆盖参数。要打开该对话框,请右键单击 IBM i 程序并选择 Code Coverage (Prompt) > Batch

图 2. 编译的代码覆盖提示符
代码覆盖启动配置对话框
代码覆盖启动配置对话框

What To Analyze 选项卡中,可以选择 Add... 向代码覆盖运行中添加另一个程序或服务程序。在当前代码覆盖驱动程序中,如果一个 IBM i 程序调用在运行期间调用了另一个程序或服务程序,那么这些辅助程序或服务程序不会自动包含在最终报告中。需要手动将它们添加到代码覆盖运行中,以便让它们出现在最终报告中。

How To Start 选项卡中,可以修改 IBM i 程序的参数。也可以选择 Prompt... 调出一个 SBMJOB 对话框,以便交互式地修改作业设置。在需要向程序调用添加参数时,或者在程序由另一个程序(比如 CL 设置程序)启动时,可以使用此方法。

Code Coverage 选项卡中,可以选择一个覆盖级别(Line、Procedure 或 Program)。也可以自定义报告生成选项,或者指定使用以前的结果特性。请参阅 “代码覆盖收集选项” 了解如何使用这些特性。

从快捷方式启动代码覆盖会话

在运行代码覆盖后,会向主要工具栏中的 Code Coverage 工具栏下拉列表添加一个新的快捷方式 图标 。选择该快捷方式,然后您就可以使用上次运行的相同参数在相同程序上运行代码覆盖。在 Code Coverage 工具栏下拉列表中,也可以选择 Compiled Code Coverage Configurations... 来打开启动配置对话框,修改现有的代码覆盖配置的参数。

使用代码覆盖 UI

代码覆盖 UI 提供了许多特性来可视化和处理代码覆盖报告。例如,在打开的工作台报告中,可以在一个树结构中导航所有代码覆盖元素,并查看它们的覆盖统计数据。您可以打开源代码编辑器,在注释列逐行查看覆盖细节。也可以为一次代码覆盖生成 HTML 报告或 PDF 报告。

使用工作台报告

在代码覆盖会话完成且没有错误时,会在编辑器区域打开一个工作台报告。代码覆盖元素被组织在报告的 Program > Module > Source File > Procedure 树结构中。您可以展开每个元素来显示它的子元素。

在工作台报告中,Coverage 列显示了每个元素的覆盖百分比。Covered 列显示了为每行所覆盖的行数,Total 列显示了每个元素的总行数。例如,在图 1 中,finish_tc 过程拥有总共有 9 行,当前的代码覆盖运行覆盖了其中的 7 行,得到的覆盖率为 79%。

您可以单击一个列标题来按该列对覆盖结果进行排序。例如,单击 Coverage 列会按覆盖百分比对元素进行排序。要在报告中隐藏或显示特定的元素,可以单击工作台报告右上角的过滤器图标 过滤器图标并从下拉列表中选择一个过滤器。

在编辑器中查看代码覆盖注释

在工作台报告中,双击一个源文件或过程可以打开一个包含覆盖注释的源代码编辑器,如图 3 所示。注释列上绿色条表示当前运行所覆盖的代码区域,红色条表示未覆盖的代码区域。将鼠标悬停在每个注释上,就可以查看详细的文本描述。代码覆盖元素的颜色是可配置的。在 Preferences 页面中,单击 General > Appearance > Colors and Fonts,在 Code Coverage 节点下配置覆盖的和未覆盖的元素的颜色。

图 3. 编辑器中的代码覆盖注释
源代码编辑器中的红色或绿色注释
源代码编辑器中的红色或绿色注释

如果源代码编辑器是在源文件上打开的,那么指针会被放置在该文件的开头处。如果源代码编辑器是在过程上打开的,那么指针位于过程的第一行。图 3 中的编辑器是通过双击工作台报告中的 finish_tc 过程来打开的。

设置代码覆盖接受级别

您可以为以下一个或多个元素指定代码覆盖接受级别:程序、模块、源文件或过程。如果代码覆盖元素的覆盖百分比低于为这种特定的元素类型指定的阈值,则将覆盖报告视为失败。必须满足所有条件,程序才会被标记为通过代码覆盖需求。

要设置这些阈值,可以在 Compiled Code Coverage Launch History 视图中单击右上角的向下箭头,选择 Preferences... 来打开首选项对话框。在默认情况下,惟一的接受条件是 80% 的程序阈值。

Compiled Code Coverage Launch History 视图的第一列上的图标表示是否通过了接受条件。此外,每个失败的元素会在工作台报告视图中使用一个红色的 “x” 来标记。

备注:如果一个子元素未能满足阈值,那么它的所有祖先都会被标为失败。

图 4 在 Compiled Code Coverage Launch History 视图中显示了一个通过的报告和一个失败的报告,它们有不同的指示图标。在过程阈值被设置为 90% 时,工作台报告中的一些过程会被标记红色的 “x”。

图 4. 报告视图和 Launch History 视图中的接受指示器
这些图标表示我们是否通过了接受级别
这些图标表示我们是否通过了接受级别

在 Launch History 视图中组织代码覆盖结果

对于每次代码覆盖运行,都会在 Compiled Code Coverage Launch History 视图中添加一个启动。可从 Launch History 视图中管理现有的启动。例如,可以删除一个或多个启动或重命名一个启动。要在一个启动上调用一个操作,可以右键单击它,并从上下文菜单中选择一个菜单项。

要将一次代码覆盖运行的所有文件保存到某个 ZIP 文件中,可以选择 Export...操作。要将结果导入回工作区中,可以选择 Import... 操作。导入特性支持从远程系统进行导入。

代码覆盖运行会生成一些数据文件,它们保存在本地文件系统上。如果您想要了解代码覆盖运行所生成的数据文件,或者您希望将它们复制到不同的位置,那么可以选择 Properties... 操作,这会打开所选启动的属性对话框,显示数据文件的路径和其他代码覆盖属性的值。

对比两次代码覆盖运行

如图 5 所示,可以生成一个对比报告,显示来自两个现有启动的两次代码覆盖运行之间的区别。从 Compiled Code Coverage Launch History 视图中选择两个启动,并从上下文菜单调用 Compare coverage results 操作。

在对比报告中,括号外的数字是最新的云新的数据,括号内的数字显示该指标在最新的启动和上一次启动之间的变化(覆盖百分比或覆盖的行数的形式)。

图 5. 对比报告
显示两个报告之间的区别
显示两个报告之间的区别

使用 HTML 报告

除了工作台报告之外,代码覆盖工具还可以生成一个 HTML 报告,显示一组 HTML 页面中的覆盖统计数据。图 6 显示了一个示例 HTML 报告。

图 6. HTML 报告
HTML 页面中显示的代码覆盖信息
HTML 页面中显示的代码覆盖信息

要生成 HTML 报告,可以右键单击 Compiled Code Coverage Launch History 视图中的一个启动,选择 Generate Report...,然后从打开的对话框中选择 HTML report。如果已经生成了 HTML 报告,那么可以从上下文菜单中选择 Open > HTML report 操作来打开一个现有的 HTML 报告。

一个 HTML 报告在左侧包含 3 个导航窗格(All ProgramsAll ModulesAll Source Files),可以帮助您轻松地导航代码覆盖元素。最初会在右侧窗格显示 Overview Summary 页面。您可以从一个窗格中选择一个链接,以便显示所选元素的覆盖信息。如果代码覆盖元素是一个源文件,那么右侧窗格将会显示该源文件的所有过程的列表,以及它们的覆盖统计数据。如果所选文件的源代码是可用的,那么源代码和代码覆盖注释也会显示在过程列表之后。

代码覆盖工具还支持生成 PDF 报告,这是一种适合打印的格式。

代码覆盖收集选项

要自定义生成报告的方式,可以从 Compiled Code Coverage 启动配置对话框中选择 Code Coverage 选项卡。在默认情况下,代码覆盖会在行级别上生成报告,如图 7 所示,其中包含代码覆盖情况的逐行统计数据。如果只希望了解是否命中一个过程,那么可以将代码覆盖级别设置为 Procedure。如果只关注当前运行是否命中某个程序,那么可以将代码覆盖级别设置为 Program。更粗粒度的代码覆盖级别所花费的运行时间通常更短,因为它需要收集的运行相关信息更少。

图 7. Code Coverage 选项卡中的收集选项
在这里自定义报告生成选项
在这里自定义报告生成选项

要在数据收集完成后生成 HTML 或 PDF 报告,可以在 Report Options 组中选择 Generate HTML reportGenerate PDF report。在以后,可以使用 Open > HTML reportOpen > PDF report 操作打开这些报告,无需先使用 Generate Report... 操作生成它们。

代码覆盖支持使用以前的结果文件,这样做具有以下好处:

  • 收集速度更快,因为它不需要跟踪已覆盖的行或过程。
  • 通过将新结果附加到以前的结果来得到合并的结果。这在同一个程序上运行多个测试案例时尤其有用。最后一个测试案例结束时生成的结果包含所有测试案例的总体代码覆盖情况。它生成您的测试套件的有效性的度量值。

要使用以前的结果特性,可以在 Code Coverage Results 组中选择 Append to the previous resultAppend to a specific result。第一个选项会自动找到同一个程序的最新结果,并使用它作为以前的结果。对于第二个选项,需要指定您想要使用的以前的结果文件的路径。

获取帮助

代码覆盖 UI 构建在 Eclipse(一个开源平台)之上,具有一个高级帮助系统。例如,将鼠标悬停在按钮上会生成工具提示,单击 F1 会调出当前视图或目前选择的菜单操作的上下文敏感的帮助。您还可以从主菜单中选择 Help > Help Contents 来打开产品帮助页面,导航到 Developing > Determining Code Coverage for compiled language applications 来获取代码覆盖帮助。

结束语

Rational Developer for i 中集成的代码覆盖工具提供了丰富的问题判定功能。这些工具支持 IBM i 平台上各种不同的编译语言和报告类型。报告视图提供了所有代码覆盖元素及其覆盖统计数据的快速摘要,集成的编辑器可用于可视化来自源代码编辑器的逐行覆盖细节。


相关主题


评论

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=984291
ArticleTitle=使用 Rational Developer for i 中的代码覆盖工具
publish-date=09262014