内容


在 Rational Application Developer V7.0 中使用代码复查 (Code Review) 的静态分析特性

尽快尽早地检测和修复问题,从而提高软件质量

Comments

软件工程是一项需要焦点的富有挑战性的实践活动。项目经常被延迟交付,并且许多问题只要在软件运行期间才能够被发现。延迟的交付导致压力的产生,首先要做的事情是什么呢?答案就是:测试。

这种压力所带来的一个结果就是,越来越少的测试被执行,许多问题无法被发现,从而生产出来的产品变得越来越不稳定。随着不稳定性的增加,施加在开发团队上面的压力也随之增长,如此往复,形成恶性循环。因此,有效的测试是一个项目获得成功的关键因素。静态分析通过授予开发人员和测试人员一种柔性的方法打破了这一恶性循环,这种柔性的方法在不影响正常的开发活动的情况下进行有效的测试。

代码复查 (Code Review) 的分析特性概述

静态代码分析 (Static Analysis) 反映了工具和测试的一个逐渐发展的过程。正如开发工具和平台已经发展到使得开发人员能够创建更大型和更复杂的应用程序一样,IBM® Rational® Application Developer 的分析特性使得开发人员能够更加快捷地在代码中进行评审、识别、并且修正潜在的问题。

然而,自动化的代码复查并不会取代手工的代码复查。代码复查工具是作为手工评审处理过程的一个必要补充。它们使您能够将更好的代码传递给手工评审阶段,并且更有效的利用评审会话的时间。与将时间花费到修正常规的错误和矛盾上面所不同的是,您能够集中精力解决那些超出自动化评审范围的、更加复杂的和更具创造性的设计决策上面。

在组评审中,您能够摆脱那些琐碎的和令人为难的编码错误和矛盾的困扰,将精力集中到设计问题上面。如果代码的变化值得登记的话,那么它们就值得首先通过代码复查来运行。

静态代码分析使您能够评审代码基础 —— 全部或者任何一个部分 —— 满足一定标准的代码的出现。这些可能是预先定义的条件或者由您所定义的条件。这种类型的代码复查是组件测试和运行时分析的先决条件。在您确定代码通过静态代码分析测试之后,组件测试和运行时分析应当产生有用的结果,从而使您能够运行后续类型的评审:

大小和复杂性问题。大小妨碍开发人员和体系结构设计师在早期有效地发现问题。复杂性隐藏了来自开发人员的副作用。执行手工的代码复查和检查是一种在代码中确定问题的很有效的方式。然而,这种效力往往受到时间约束条件的限制,导致以下这种情况的出现:代码复查和检查或者是不被执行,或者是很少被执行。

由于这种自动化的处理过程十分快捷,所以您能够经常运行代码复查。代码复查使得您能够在早期捕获和修正问题,从而最容易也最经济地做出改变。

自动化的代码复查工具有若干种向软件开发处理过程添加值的方式,这是由于它们执行以下这些任务:

  • 在代码中找到问题;
  • 预防典型的编码错误;
  • 解释每一个问题,并且提供解决方案;
  • 通过基于最佳实践的规则,提高性能和可量测性;
  • 为许多典型的问题提供一个自动化的修复;
  • 使您能够创建出一套规则,这些规则确保您的应用程序设计和标准遵循您所编写的代码。

代码复查的规则

Rational Application Developer V7.0 及其后续版本的分析特性包括 212 规则,分类介绍如下:

  • 设计原则(5):用于面向对象编程的设计原则的规则。
  • 全球化(47):基于全球化编码最佳实践的规则,有助于确保代码在局部环境中正确地运行。
  • J2EE 最佳实践(32):基于最佳的 Java™ 2 Platform Enterprise Edition (J2EE) 开发实践的规则,以及支持瞄准 IBM® WebSphere® 服务的 Web 项目的规则;
  • J2EE 安全性(17):验证代码符合 J2EE 技术安全性需要的规则;
  • J2SE 最佳实践(71):基于最佳的 Java™ 2 Platform Standard Edition (J2SE) 开发实践的规则;
  • J2SE 安全性(9):验证代码符合 J2SE 技术安全性需要的规则;
  • 命名(2):关于 Java 代码中命名约定的规则;
  • 性能(26):加强在 Java 应用程序中提高性能和减少存储器足迹的建议的规则;
  • 私有 API (3):定位那些不属于 Java 代码的 API 的规则。

这些规则分类被进一步地组织到评审之中。被选中的评审指示了哪些规则将被应用到您的代码上面。分析特性包括如下这些评审或者规则集合:

  • Java 全部代码复查:来自所有类别的所有规则;
  • Java 全球化代码复查:来自全球性类别的所有规则;
  • Java 安全性代码复查:来自 J2EE 安全性类别的所有规则;
  • Java 快速代码复查:用于最严重问题的所有规则;
  • Java 最佳实践代码复查:来自 J2SE 最佳实践类别的所有规则。

静态分析处理过程涉及如下三个基本步骤(请参见图 1 所示):

  1. 配置代码复查;
  2. 运行代码复查;
  3. 解释代码复查。
图 1. 静态分析处理过程。
静态分析过程
静态分析过程

设置例子项目

为本文设置一个例子项目,从 StaticSampleCodeAnalysis.zip 文件中导入例子源文件。(请您参见 Download 一节。这个例子代码将在本文中通篇被用到。)您还可以在您自己的代码上面运行该静态分析。具体操作步骤描述如下。

使用分析特性

Java 和 Debug 透视图默认情况下就包括分析功能,但是如果您希望在 Java 源代码文件以外的资源上运行一个静态分析的话,那么您可以将分析功能添加到任何一个透视图之中。

为静态分析自定义透视图

遵照以下这些步骤来执行:

  1. 从 Rational Application Developer 菜单栏中,选择 Window > Open Perspective > Customize Perspective 选项。
  2. 当对话框出现时,选择 Commands 标签,点击 Analysis 复选框。
  3. 接受变化,点击 OK 按钮(请参见图 2 所示)。
图 2. 自定义透视图。
Customizing the perspective
Customizing the perspective

创建并且编辑一个静态分析的配置

当您创建一个 Analysis 配置的时候,您将决定您所希望执行的分析类型,以及应用到资源上的范围和特定规则。要创建一个 Analysis 配置,您就必须工作在一个支持分析能力的透视图之中。

  1. 选择 Run > Analysis 菜单选项,显示分析配置主对话框。您将看到这个对话框非常类似于那个被用于运行或者调试来自 Rational Application Developer 中代码的对话框。
  2. 创建一个分析配置的第一个步骤就是决定默认的资源范围。通过选择 Scope 标签下面的期望范围来完成这一操作。当前可用的选项分析了整个工作区、一个工作集、或者一组项目。对于本文来说,创建一个新的配置(MyStaticAnalysis),并且在 Scope 标签下面选择 Analyze entire workspace 选项(请参见图 3 所示)。
图 3. 用于静态分析的配置。
静态分析配置
静态分析配置

Rules 标签决定了将要被执行的分析的格式。请注意:它显示了一个树形结构,在那里您可以选择或者去掉分析元素。它还包括了额外的按钮。域树中的最顶层节点是分析的提供者,它们表现了为分析架构所熟知的分析工具的类型。提供者包含类别(规则或者其他类别的松散组织,或者两者皆有)。规则通过定义在分析处理过程期间生成结果的条件,执行所有的重物提升。

图 4. 分析规则。
分析规则
分析规则

请注意:树中的每一个节点都包括一个复选框,它负责控制该元素的使动状态。当一个元素被选中或者去掉的时候,它的所有子结点都将被设置为同样的状态,从而我们能够快速地完成整个类别甚至整棵树的全选操作。您还能够通过输入或者点击一个定义好的规则集,选择一组规则的集合。然后点击 Set 对提供者、规则类别、以及规则进行配置,从而执行一个特定的分析。

  1. 对于本文来说,设置 Java Complete Code Review 规则集合(请参见图 5 所示)。
图 5. Java Complete Code Review 的设置。
Java Complete Code Review 的设置
Java Complete Code Review 的设置

当一个规则在树中被选中的时候,Details 按钮的状态变为可用。点击这个按钮,调用一个二级对话框,显示一个规则现已存在的任何配置和附加信息。在这个对话框内部,您能够改变被选中规则的严重性等级,以及其他任何参数。根据规则的不同,Details 对话框还有可能显示其他的细节(请参见图 6 所示)。

图 6. 在 Details 对话框显示的分析规则。
在 Details 对话框显示的分析规则
在 Details 对话框显示的分析规则

如果您希望将选中的规则同团队共享,那么您可以通过使用 Export 按钮将它们导出为一个文件(请参见图 7 所示)。

图 7. 导出这些分析规则。
导出这些分析规则
导出这些分析规则

这些导入和导出工具能够帮助您创建特定项目的规则和规则配置。您的团队成员可以通过点击 Import 按钮(请参见图 8 所示)来导入一个描述一组自定义规则集合的文件。在下一小节中,将解释如何自定义您的分析。

图 8. 导入一个自定义集合。
截屏
截屏

创建客户规则类别和各项规则

除了 Rational Application Developer 所提供的规则之外,我们还可以从模板中创建自定义的类别。一支 Java 开发团队可能会使用定义在一个客户规则文件中的一组特定的提供者、规则类别、以及规则,对源代码进行分析。

  1. 要创建新的自定义规则和类别,请选择 Window > Preferences
  2. 然后在 Preferences 视图中选择 Analysis > Custom Rules and Categories 页面(请参见图 9 所示)。
图 9. 自定义的规则和类别。
截屏
截屏
  1. 点击 Add Category,添加新的自定义类别。通过一个简单的向导,您能够为这个类别选择父类别,并且为这个类别命名。自定义类别的树形控制,将显示任意一个自定义类别的完整路径(请参见图 10 所示)。

注释:
只有预先被定义的自定义类别才能够被删除。

图 10. 添加一个自定义类别。
截屏
截屏
  1. 对于这个例子来说,添加一个被称作 My Rule 的新的规则类别(请参见图 11 所示)。
图 11. 输入类别名称。
截屏
截屏
  1. 点击 Add Rule,启动规则创建向导。向导的第一页使您能够选择这一规则将被放置到哪个分析类别树之中。
  2. 在向导的第一页中,选择一个类别,然后点击 Next (请参见图 12 所示)。
图 12. 添加一个自定义规则。
截屏
截屏
  1. 在向导的第二页中,您将看到已知规则模板的列表。您可以选择希望作为新规则的基础的那个模板。请注意:并不是所有格式的分析都对自定义规则提供支持。然而,Rational Application Developer Java Code Review 提供若干种您能够使用的格式(请参见图 13 所示)。举例来说,选择 Avoid using the package <PACKAGE>
图 13. 选择模板。
截屏
截屏
  1. 在向导的最后一页中,您将看到面向在规则模板中所定义的每一个参数的入口。在这个例子中,我们选中的规则模板只定义了两个参数,所以您能够在框中输入一个包名字以及该规则的严重性等级(请参见图 14 所示):
    • 包的名字:com.ibm.external.pack
    • 严重性级别:Severe
图 14. 提供模板值。
截屏
截屏
  1. 点击 OK。基于模板的规则将被创建并放置到规则树中。
  2. 您现在能够选择这一规则作为任何一个分析配置的组成部分(请参见图 15 所示)。在这个例子中,选择:
    • Current Custom Categories:选择 My Rule
    • Current Custom Rules:选择 Avoid using the package com.ibm.external.pack
图 15. 用户定义的规则。
截屏
截屏

此外,您也能够在配置向导中找到新近被创建的规则。在默认情况下,这是无效的。为了使用这一规则,您需要点击该规则旁边的复选框(请参见图 16 所示)。

图 16. 被添加的自定义规则。
截屏
截屏

运行该静态特性并且处理结果

  1. 点击 Analyze 按钮,启动分析处理过程。
  2. 在此操作后,您将看到 Analysis Results 视图出现在 Rational Application Developer 工作台中。当您运行这些规则时,其结果将被陆续添加到这个视图之中。

静态分析的结果

分析结果是一个规则违背的简明解释。结果在 Analysis Results 视图中排列在一起,表明该资源并不遵从您所应用的规则。随着一个分析配置的运行,Analysis Results 视图根据您在配置分析时所定义的规则类别和严重程度,将结果归纳为树形结构。

其中,树的顶层节点显示了分析的细节,例如:分析配置的名称、分析完成的日期和时间、生成结果的数量等。当您展开这棵树时,每一个规则类别和规则都显示出生成结果的数量,并且列出和该规则相关联的资源(请参见图 17 所示)。

图 17. 分析的结果。
截屏
截屏

您可以在 Analysis Results 视图中查看一个分析的结果。一个结果并不必须是一个问题、错误或者漏洞,但是请确保评价列表中的每一个结果,决定您所需要采取的行动。如果该结果是一个拥有琐碎解决方案的问题,那么规则的作者有可能会提供一个能够自动修正该资源的快速修复。如果有一个快速修复可以被提供给一个特殊的结果,那么您就能够使用弹出菜单将其选中。当结果被生成的时候,您能够过滤并且查看它们,并且如果该规则提供一个快速修复特性的话,您还能够修复该资源代码。

您能够过滤这些结果来显示那些同您的分析配置中的每一项规则相对应的结果,或者仅仅是那些不符合一个特定规则的结果。从 Analysis Results 视图中,您还可以在与它们相关联的能够编辑器中打开资源来修正问题,或者直接应用快速修复(如果具有这一特性的话)。

将快捷修复应用到静态分析结果中

如果规则的作者提供一个快速修复的话,那么您就能够自动地修正分析结果中的问题。一个快速修复是指针对一个普通或者琐碎问题的一套自动化的解决方案。快速修复能够节省时间,并且确保问题被得一致性的修正(请参见图 18 所示)。

图 18. 修复问题。
截屏
截屏

如果您右键单击一个结果,即可执行特殊的任务。修正某些问题的诱因是琐碎的,所以规则的作者可能会提供一个“快速修复”程序。如果快速修补菜单选项有效的话,那么如果您选中它,就将启动一个修正问题的处理过程(请参见图 19 所示)。

图 19. 被修复的分析结果。
截屏
截屏
  1. 列出和每一项规则相关联的所有资源,展开规则类别和规则节点。
  2. 双击该资源,在与其相关联的编辑器中将它打开。显示您的资源的编辑器是由规则的作者和资源中的数据类型所决定的。
  3. 双击被创建的规则,定位到问题所在的文件的代码行上面(请参见图 20 所示)。
图 20. 用于客户规则的分析结果。
截屏
截屏

下载资源


相关主题


评论

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=308163
ArticleTitle=在 Rational Application Developer V7.0 中使用代码复查 (Code Review) 的静态分析特性
publish-date=05152008