级别: 中级 Bill Higgins (bhiggins@us.ibm.com), ational高级技术专员, IBM Global Services Goran (gbegic@us.ibm.com), 产品经理, ASQ, IBM Software Group
2005 年 4 月 01 日 本文将概述IBM® Rational® Application Developer和IBM® Rational® Software Architect的代码审查(Code Review)特性。
介绍
快速交付的需要、日益增加的竞争压力和不断变化的需求,这一切都提升了开发生命周期中质量控制过程的重要性。测试需要花费时间,但是时间当然也是有限的。一种节省时间并提高软件质量的方法是尽可能早地引入多一些的测试。使用自动化代码审查是达到这个目的的有效途径。
本文介绍了IBM® Rational® Application Developer (IRAD) 和 IBM® Rational® Software Architect (RSA)产品的新特性,即允许你用预先定义的规则和最佳实践自动检验Java代码。Code Review帮助你找出Java and Java" 2 Platform, Enterprise Edition (J2EE" Platform)中许多常见问题的根源。
注:RSA产品包括IRAD产品的所有能力,并且还支持另外一些特性。
- UML 2建模
- 模型驱动开发
- 结构化分析
- 体系结构控制
本文所讨论的主题与IRAD 和 RSA均相关,但是为了简洁起见,我们只谈到IRAD。
针对的读者
本文主要面向在软件项目中对使用代码审查感兴趣的软件开发人员和测试人员。假设读者已拥有了一定的Java和Eclipse基础(例如,Eclipse workbench或Eclipse perspective)。
约定
本文将谈到一般意义的代码审查实践,并且涉及到IRAD的自动化软件质量工具时使用大写(Code Review)。方括号中的文字(例如,[Code Review Help])意味着文章末参考资源部分的引入。
更多信息
本文大致介绍了Code Review和Java与J2EE 最佳实践。与Code Review, Java, J2EE 和 IBM Software Development Platform相关的其它资源列在文章末的参考资源部分。
另外,这里也有关于如何使用Code Review的文档 -- 也是Code Review规则的参考 -- 包括在IRAD 和 RSA文档中的Code Review。请参照资源部分的[Code Review Help]。
Code Review 如何适应于IBM Software Development Platform
IBM Rational Application Developer概述
IBM Rational Application Developer for WebSphere Software, version 6是IBM Rational IDE (集成开发环境) for Java and J2EE 应用的最新版本。它包括促进建立企业级Java和J2EE应用能力的开发工具。该产品以IBM® WebSphere® Studio Application Developer而出名。
IRAD是IBM Software Development Platform四个新产品中的一个。
其它产品包括:
这三个新的产品与IRAD基于Eclipse框架,共同分享大量组件。
自动软件质量(Automated Software Quality)概述
习惯上,软件质量是负责评估功能、性能和软件应用程序可靠信的测试专家在将产品交付客户之前的主要任务。测试人员一般进行以下活动:
- 自动和手工功能测试
- 性能测试和负载测试
- 测试管理和计划
这些活动常常不能够与代码编写的工作相并行,所以他们一般是在代码实现一定级别功能之后才完成,只有在这时候,测试专家才开始检验应用程序的功能。
开发人员测试的重点是发现并解决在软件开发过程中出现的问题,这是一个新的方面。开发人员测试将自动软件质量扩展到了开发人员范畴。
在项目的开发阶段发现问题显著地降低了修补缺陷的成本,增加了生产代码的质量,并且有助于团队按时交付应用程序。通过建立自动代码审查 -- 与代码编写同步同步进行,来建立单元和组件测试,并发现内存和性能瓶颈 -- 带来了高质量的代码,同时也减少了开发的时间。
组成了IBM Rational Software Developer Platform 的四个工具中的两个-- IRAD 和 RSA - 具有推进开发人员测试能力的如下特性:
- Code Review(代码审查):静态代码分析工具
- Component Test(组件测试):面向J2EE组件和web服务的单元测试框架的扩展
- Runtime Analysis(运行时分析):应用程序(性能、内存使用、多线程等)的重要运行时参数的分析和调试工具
这些开发人员测试工具允许你(无论你是一名软件开发人员或者架构师)来提高你的生产率。另外,他们有助于你在QA团队执行功能集成测试之前就发现并防止错误,或者 -- 更重要地 -- 在bug引入到客户生产环境之前。
代码审查概述(静态分析)
代码审查是IRAD和RSA的特色,验证代码是否符合规则。代码规则被组织进代码目录中。规则和目录同时构建一个能够在Code Review Properties页配置的规则集。每次代码审查发现违反规则的代码,它便将发出报告。所有的发现均排序并显示在Code Review Main视图,并且每个错误在Code Review Details视图中都有详细的说明。
图1 显示了代码审查的结果列表
图 1. Code Review Main 视图
第一次执行中,代码审查大概有220 条规则,按以下目录分成若干组:
- Design Principles(设计原则):包括面向对象(OO)编程设计原则的规则
- Globalization(全球化):包括基于全球化代码最佳实践的规则,有助于确保代码在本地环境中正确地运行。
- J2EE Best Practices(J2EE最佳实践):包括基于J2EE开发实践的规则,并且支持面向WebSphere 服务的web项目。
- J2SE Best Practices(最佳实践):包括用于验证代码是否符合Java 开发的Java" 2 Platform,Standard Edition (J2SE")最佳实践的规则。
- 命名:包括与Java代码的元素命名规范相关的规则。
- Performance(性能):包括在Java应用中提高性能和减少内存印迹的实施规则。
- Usage of Private APIs(Private APIs的使用):包括不属于Java代码的APIs定位的规则。
- Structural Analysis (RSA only)即结构化分析:包括帮助你构建代码体系结构审查的规则。
规则目录进一步组织到审查中。选定的审查规则指明哪些规则将得到应用。
代码审查进行以下审查:
- Quick Code Review(快速代码审查):相当严重的问题的所有规则。
- Complete Code Review(完全代码审查):所有规则。
- J2EE Best Practices(J2EE最佳实践):来自J2EE Best Practices 目录的所有规则。
- Globalization Code Review(全球化代码审查):来自Globalization目录的所有规则。
- J2SE Best Practices(J2SE最佳实践):来自J2SE最佳实践目录的所有规则。
- Structural Analysis Code Review (RSA only)结构化分析代码审查: 来自Structural Analysis 目录的所有规则。
从Code Review主视图中,你可以处理单个结果。以下列表是你能够对结果所进行的操作:
- 查看详细内容
- 打开结果所对应的源代码
- 对于单个结果,应用快速解决,或者马上对所有结果使用同样的规则。
- 忽略(从视图中移走)
- 将每个规则目录或者源文件的结果进行排序
- 基于状态的严重性,过滤结果(例如,忽略或者重新解决)
- 基于搜索字符串寻找结果或者规则表达式
代码审查的目录是帮助你的开发团队标准化编码风格,并且确保实施最佳的代码实践。它与编译器一起确保代码满足一定级别的质量要求。通过将自动代码审查集成进开发环境,你的团队能够在开发阶段便发现并处理许多错误 -- 在这些错误在稍后的开发周期或者生产中转换成功能问题之前。
创建样例项目
我们在文章中使用的样例代码是可以下载的(CodeReviewDemo.zip)。样例代码是一组类,说明能够自动检测并修复的问题的宽度。这部分描述了如何在样例项目中运行代码审查。你也可以选择自己的代码,因为模型和步骤都有可能与文章后面所描述的相类似。
要建立样例项目,首先要建立一个空的Java项目,然后从CodeReviewDemo.zip引入样例源文件。
使用代码审查
代码审查是IRAD和RSA的基础部分,其主窗口集成进Java视图,但是并不是默认的。你从浏览器或者Code Review主窗口均可以运行代码审查。在Java视图中单击Window > Show View > Code Review,便可打开Code Review主窗口,如图2所示:
图2. 从Java视图打开Code Review
Code Review将运行基本的Quick Code Review。要启用该审查,请单击Code Review主窗口的Play 按钮
注:如果你在Java视图以外的别的视图,Code Review可能在Show View菜单是不可用的。在这种情况下,你可以通过以下步骤进行Code Review:
1. 单击Window > Preferences,以确保Java Development能力可用。然后单击Workbench > Capabilities,并确保Java > Java Development是选定的,然后单击OK。
2. 从应用菜单中,单击Window > Show View > Other。
3. 扩展Java,选择Code Review,然后单击OK。
Code Review视图
Code Review工具包括以下四个视图:
- Main
- Details
- Preferences 页
- Rule 编辑器
Code Review主窗口用于启动分析,并操作和审查发现结果。图3说明当第一次打开的时候,视图是空的并且仅有主控制可用。审查完毕之后,这个视图包括一个运行的目录结果列表和基本统计。
图3. Code Review主视图
当你双击一个结果,则Code Review Details视图自动打开。Code Review Details的目的是提供结果和样例的描述,以及解决的建议,如图4所示。
图4. Code Review Details视图
第三个视图是Code Review Preferences页。在Code Review主视图中单击Manage Rules按钮时,或者启动Preferences 对话框并导向Java > Code Review时,则打开Code Review Preferences页。
在Code Review Preferences页,你可以选择下次运行该工具时想要应用的代码审查。你也可以配置规则及其属性。当选择页面上方的代码审查时,只显示属于该审查的规则。
请注意Quick Code review是默认的审查,并且它仅仅包括严重问题的所有规则。警告和建议并不是该审查的一部分。想要查看如图5所示的全部可用规则,请选择Complete Code Review。
图5. Code Review Preferences页
最后,Rule编辑器允许你扩展另外的一些规则。图6说明了编辑器如何提供一组指导你定义新规则的模板,使过程变得轻松且直接。通过模板实例定义新的规则。RSA拥有所有在IRAD中可用的模板,以及Architectural Control规则建立的模板。
图6. 基于模板的Code Review Rule编辑器的第一个页面
运行Code Review
通常,运行Quick Code Review包括以下三个简单的步骤:
1. 打开Code Review
2. 运行分析
3. 审查结果和处理问题
在本例中,我们将使用预先定义的Quick Code Review审查整个工作区。因为这是默认的配置,运行分析,你只需单击Code Review工具栏的Play按钮 。屏幕右下角的进度指示器将标示完成的百分比。审查有过程可能随着工作的大小和可用规则的数量而发生变化。审查在背后运行,并当发现问题时显示结果。
Code Review开始时,Stop按钮将代替Play按钮的显示(在Code Review工具条中),你可以在任何时候单击Stop按钮以停止运行。如果你停止Code Review运行,所有在你停止它之前检测到的分析结果将会保留下来。
当进度指示器达到100%并消失时,便表示分析已经执行完毕。另外,将会在workbench左下角显示Finished代码审查信息。
审查结果是一组我们将要在下一部分中进行检查的问题发现。
审查和处理
一旦你已经运行分析,你便可以基于代码审查的结果来改进你的代码。
审查结果
代码审查的结果显示在Code Review的主窗口中,如图7所示。它们由目录分组并且以优先级进行标记。因为我们应用了Quick Code Review,所以只显示检测到的严重问题。
图7. Code Review结果
如果你在使用样例代码,转向Code Review主窗口,并且扩展J2SE Best Practices: Nullcategory。你将会发现一个命名为NullEmptyArray_Example: 21 Avoid returning null instead of empty array的结果。这其中包括:
- 文件名(NullEmptyArray_Example.java)
- 行号 (21)
- 不规范代码所违反规则的标题(Avoid returning null instead of empty array)
双击该结果。将打开Code Review Details视图,并且显示该问题的其它信息。这个动作会产生两个结果(如图8所示):
- 源文件(NullEmptyArray_Example.java)显示在IRAD 编辑器中
- 在IRAD workbench 中打开Code Review Details视图
图8. Code Review详细内容
Code Review Details视图描述了代码所违反的某规则的基本原理和技巧。Details分为以下三部分:
- 描述 解释了为何该发现是一个潜在的问题,并且在代码中为违反规则的实例提供了一个链接。
- 样例 提供了不正确代码的样例
- 解决 显示了相同的代码,改变以解决问题。
改进代码
你可以通过手工编辑不规范的源代码来处理结果,也可以使用预先定义的可用的Quick Fix。如果Quick Fix可用,这个与结果相临的图标边上将显示一个绿灯泡。有两种不同的发现图标(如图9所示):带有绿灯光的图说明Quick Fix是可用的,而另一个没有绿灯泡的图标则需要手工处理。
图9. 两种发现图标(放大的)
我们选择的样例(NullEmptyArray_Example.java)包括Quick Fix。在Code Review视图中右键单击发现的结果,然后左键单击Quick Fix: Return zero-length array。你就会在Quick Fix应用之前或之后发现一个显示代码的弹出式窗口,如图10所示。单击OK,Code Review将自动处理不规范的代码。
图 10. Code Review Quick Fix
Code Review通过将发现按钮改为复选框的方法来标记某一项已得到处理。你也可以右键单击处理过的发现并单击Undo Quick Fix来撤消Quick Fix操作。请注意如果你手工处理一个结果项,那么必须重新运行Code Review以证实它不再报告问题。
忽略结果
你可能认为某个结果并不适用于你的团队或者程序中结果的上下文,并且明确地决定忽略它。想要忽略一个结果,可以右键单击发现,然后单击Ignore Match。接下来,你可以在Filters对话框中清除Ignored,隐藏该结果。
更多步骤
以上介绍的步骤讲述了在单个项目中使用Code Review的基本方法。Code Review还有其它一些特性,能够帮助标准化开发团队的自动代码审查。需要以下步骤来实现:
- 使用Complete Code Review,而不是Quick Code Review -- 如前面所谈到的,Quick Code Review仅处理审查中检测到的最重要的发现。要想更进一步提高代码的质量(比如,提高性能、正确率和可维护性),需要使用Complete Code Review,它能提供检测警告和建议的其它规则。
- 强烈建议在选择Complete Code Review之前审查和配置所有规则。这将有助于你全面地理解发现的问题及正确的重点。
- 以下是配置Complete Code Review的一些建议:
- 在Code Review Preferences 页中选择 Complete Code Review。
- 审查每一个规则并决定是否使用该规则。一旦作出决定,你应当在整个项目中一致地应用些规则。
- 排除不在你责任范围以内的包和类。这将减少报告的错误数并有助于你只关注相关代码的问题。
- 审查每个代码的严重性并在需要时对其作出改变。
- 使用内建规则编辑器来建立其它的规则。
- 为你的项目(或者开发团队)定义单个Complete Code Review配置,并使用Import/Export 能力达到共享。用户定义的规则,配置的选择以及习惯规则属性和优先级都能被导出成为一个zip文件并导入到另一个IRAD 或 RSA开发环境。共享的规则有助于你建立具体项目的规则和规则配置。这允许你收拾代码质量度量和在开发团队中实施相同的最佳实践,这样,更进一步地提高了代码的可维护性。
总结
Code Review是一个实施最佳开发实践的强大工具,可以达到在代码实施过程中提高代码质量的目的 -- 开发生命周期中检测并解决问题代价最低的阶段。
本文介绍了Code Review(检测Java 和 J2EE最佳实践中不符规范代码)。讨论了工具在何处适用于IBM Software Development Platform,解释如何使用它,并且描述了经验丰富的使用者能够应用以提高生产率的一些高级技术。
请记得Code Review是一个健壮且定制的工具。建议你使用IRAD和RSA中内置的Code Review帮助来学习更多关于它性能的知识。另外,我们也非常希望能够收到你关于Code Review和本文的一些想法,所以如果你有任何问题或者建议,请与读者联系。
下载 | 名字 | 大小 | 下载方法 |
|---|
| codereview_examples.zip | 2.6M | HTTP |
参考资料
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文。
- 从Trials and betas下载Rational Application Developer 的试用版。
- Rational的软件开发过程,Rational Unified Process version 2003.06.13,也可以从Trials and betas下载。请参考Continuously Verify Quality来了解Automated Software Quality的原因。
- J. Bloch, Effective Java Programming Language Guide, Addison-Wesley Publishing Co., Reading, MA (2001)。该书在Java编程语言的许多好和坏的实践方面均提供了详细的信息。书中详细描述了包含在J2SE Best Practices目录中的许多规则。
- R. Johnson 和 D. Reimer, Issues in the Development of Transactional Web Applications, IBM Systems Journal 43, No. 2, 430-440 (2004)。在Code Review 方面领先的SABER应用系统的主要开发人员合作的文章中,讨论了一些如j2ee的交易系统中呈现的根本问题。
- IBM Software Developer Platform homepage 为包括IRAD, RSA, Automated Software Quality, and Code Review 所在内的IBM Software Development platform提供了详细的信息。
- 关于Rational产品的技术资源,请访问developerWorks Rational content area ,你会发现很多技术文章、教育、下载、产品信息等。关于Rational Application Developer的具体信息,请访问RAD technical resources page。
- 参与developerWorks blogs以加入developerWorks社区。
- 如对Rational Application Developer 和 Rational Software Architect有任何问题,可以访问Rational Software Architect, Software Modeler, Application Developer and Web Developer forum。
- 在Developer Bookstore的Rational版块购买Rational books at discounted prices .
- [Code Review Help]. 请仔细阅读Rational Application Developer 的Help 内容。这是随产品发行的文档。Code Review 文档可以在Developing application code > Detecting and analyzing runtime problems > Reviewing code automatically中找到。帮助文档提供了相当多的信息。
作者简介  | 
|  | Bill Higgins,IBM全球服务架构师,就职于IBM 的内部需求交互平台。目前他主要研究提高协作开发技术和团队使用IBM内部企业系统的方法。他当前感兴趣的技术包括IBM®Rational Team Unifying Platform , IBM Lotus Workplace, IBM WebSphere Portal Server,绘制业务过程到IT,并且他在developerWorks blog中记录了自己活动和见解。他拥有Penn State 大学的计算机专业学士学位。 |
 | 
|  | Goran现在是IBM Rationa开发工具的产品经理。在这之前,他曾做过IBM Rational开发工具技术支持方面的工作。在过去几年中,Goran在Rational Edge发表了多篇文章并参加过以下会议:Rational User Conference 2000 - 2004,IBM DevWorks Live! 2002、2003 和 Java One 2002。他从Zagreb, Croatia大学获得B.Sc.E.E学位。 |
对本文的评价
|