级别: 中级 Lee Ackerman (ackerman@ca.ibm.com), Sr. Product Manager, IBM John Boyer (john.boyer@us.ibm.com), Sr. Product Manager, IBM
2005 年 12 月 20 日 这篇文章介绍了Rational Application Developer for WebSphere Software的6.0版本中和开发者测试相关的功能。这些功能(代码复查 ,组件测试和运行时分析)将使你节省成本,在你做修改的时候增加信心,提高你的工作效率并提高产品的质量。
介绍
本文将介绍IBM® Rational® Application Developer (IRAD) for IBM® WebSphere® Software v6.0中和开发测试者相关的功能。在我们准备讨论在IRAD是怎样支持开发者测试之前,回答这个问题非常重要:“为什么开发者测试很重要?”
开发者测试很重要是因为:
-
质量: 测试代码是找到你的程序中缺陷的最有效率的方法之一。
-
效率: 越长时间不接触到你的代码,你越有可能忘记其中的部分细节。在后来的开发过程中依靠别人来测试并发现其中的缺陷,很有可能需要你重新学习你本来认为已经完结的代码的内部工作机制。
-
节约成本: 和我们中的大多数人之前听说的一样,一个软件缺陷在开发周期中存在的时间越长修复这个缺陷的成本就越高。缺陷发现的越早,修复它需要的成本就越低。
-
信心: 当修改代码的时候,拥有验证你的程序能够没有任何错误的运转和执行的能力将给你提供良好的信心。这个信心将延伸到组织中的那些支持和依靠这一应用的其他部门。
IRAD 的开发人员测试特性
IRAD引入了其他典型的集成开发环境(IDE)中没有的三个开发者测试功能。这些功能能够让你分析、测试和分析你的应用程序:
-
代码复查 : 一个静态代码分析工具可以分析你的代码并报告其中的错误。
-
组件测试: 自动为你的组件生成测试而不需要你来写代码。
-
运行时分析: 通过提供对线程、内存的使用和对象的行为的分析,帮助你去理解你的程序在执行的过程中是如何运转的。
这些功能和业内领先的开发环境和过程(IBM® Rational Unified Process®, or RUP®)结合起来,将给你提供一套强大的开发高质量应用程序的工具。
传统的IDE关注于代码开发,标准的功能包括支持最新的API并简化他们的使用的能力。然而,创造高质量的应用程序的成功还是主要基于你作为一个开发者的技能。例如,一个IDE会提示你的代码没有编译或者你创建了一个非法的调用描述符,但是为创建一个在现实世界中能够工作的程序而提供的指导和支持很少。也就是说,它可以告诉你的程序在语法是正确的,但是不能告诉你它是高质量的还是质量差的。
真实世界的程序需要你保证你的代码:
- 允许全球化
- 能够处理破坏的数据
- 在所有的路径中正确执行
- 正确的创建和管理线程
- 良好的使用内存
- 能够适当的处理例外
将这些最小化对软件质量将产生非常重大的影响,但是这些对一个开发者产生极大的压力迫使他专注于那些和解决方案或者问题领域不直接相关的规则和惯例。IRAD的质量分析工具在这些或者其他的问题上给你提供支持和指导。这篇文章将给你提供一个关于IRAD的开发者测试工具的能力和它们对提高软件质量可能性的简单介绍。
代码复查
在软件工程中被证明是最好的方法是进行代码复查。有研究表明代码复查比测试能够找到更多的软件缺陷,但这是一项非常耗时的工作。IRAD的代码复查功能能够给你提供一个能够自动帮你快速和容易的检查你的代码并确定要点的途径。这些工具可以帮助你解决问题。
任何值得提交到你的版本控制系统的代码都是值得复查的。 使用IRAD可以帮助你经常和快速的复查你的代码,你也可以去除对你所感兴趣的特定区域中不工作部分的复查。为了实现过滤,你可以严格定义使用的规则或者对一些限定的类应用特定的一些规则来进行代码复查。
IRAD包含了超过200条规则,这些规则被组织并分成一些代码复查配置,这些配置包括:
点击这里来看一个怎样来配置和运行代码复查的viewlet。
(为了更好的看这个动画,请将Internet Explorer设置为全屏模式:View > Full screen)
代码复查结束以后,发现的所有问题将在代码复查视图中列出来,如下图1所示。
图1.IRAD 代码复查完成以后的结果列表
IRAD可以为你自动的修复一些问题。如图一所示,一些代码复查规则给你提供了一个自动的解决方案(或者快速修复方法)。这些用了一个高亮的小灯泡来表识。在代码复查视图中直接右键点击某个问题,你就可用从建议的解决方法中选择一个来应用一个快速修复。
点击这里来看一个代码复查是如何动作的viewlet。
(为了更好的看这个动画,请将Internet Explorer设置为全屏模式:View > Full screen)
同时代码复查也提供了关于每一个违规情况的详细文档,包括对问题的描述,可能的解决方法和示例代码。这样可以让你能够更好的理解发现的问题,并帮助你学习到怎样在将来提高你的代码质量。
此外,IRAD还允许你的团队创建新的规则。这些规则可以设定为在本地有效,或者可以在整个团队中共享从而作为一个团队的标注和惯例。一个向导会指导你怎样创建一个规则,并且可以让你选择一个模板作为你的新规则的基础。
为了完整起见,让我们一起讨论代码复查应该怎样嵌入到你的开发过程当中。在头脑中保持这样一个观念很重要:代码复查功能并不是替代手工代码检查,实际上它是一个能够节约你的时间并提高你的手工代码检查的效率的一个补充过程。它使你能够通过对复查的过滤让你能够将注意力集中到特定的所关心的区间中,尽可能多的去运行代码复查直到问题解决为止。知道和理解代码复查执行的规则让你能够和你的团队一起来评估你们的应用中可能存在的其他问题。
在这种条件下,你可以在一些你的解决方案中的设计和实现中的更有趣和更具创造性的方面花更多的时间。
组件测试
保证代码质量的另外一个重要的方面就是组件测试,这一项工作在开发中经常出现。它是由开发者完成的。
一个系统会根据不同的粒度被分成多个不同的单元(或者组件)。在进行组件测试的时候,在组件的接口上输入测试条件,同时观察它的反应并根据组件的行为来验证其是否工作正常。一个正在被测试的组件被称之为一个被测组件 (CUT)。
IRAD的组件测试功能让你能够为你的组件快速的创建相关测试而不需要写代码。它使用了几个测试创建模式来建立为CUT做测试的代码。产生的代码是基于JUnit框架的一个扩展,所以如果你已经有了一个针对已有的JUnit测试的类库,你就可以在IRAD的环境中导入并运行它们。如果想知道更多的关于JUnit的信息,可参阅文章后面的资源 部分。
IRAD在三个方面扩展了JUnit:
-
初始点: 初始化变量和属性
-
验证动作: 验证变量的合法性
-
时间约束: 测量方法调用的持续时间
如图2所示,组件测试让你能够测试下列类型的组件:
- Java类
- Enterprise JavaBeans" (EJB")
- 抽象类
- 接口
 |
Rational Agent Controller
IBM® Rational® Agent Controller 是一个和IRAD一起安装的组件。安装以后它成为你的PC中运行的一个服务,管理代理以及代理产生的数据。这些代理在组件测试和运行时分析时使用。如果要使用这些功能必须要安装Agent Controller。
|
|
图2. IRAD中的组件测试
点击这里查看关于怎样创建一个组件测试项目的viewlet。
(为了更好的看这个动画,请将Internet Explorer设置为全屏模式:View > Full screen)
在建立一个测试之后,你将使用一个数据表(见图3)来确定要将什么数据输入到正在测试的方法当中,并确定希望得到的结果。在运行时,数据表中的信息将和已经生成的测试脚本代码合并到一起,这样就可以对CUT进行测试。
图3.在数据表中确定测试数据
点击这里看怎样使用数据表来工作
(为了更好的看这个动画,请将Internet Explorer设置为全屏模式:View > Full screen)
在你设置好你的组件测试之后,下一步就是运行测试。当测试完成之后,IRAD将提供一个组织好的测试结果列表。
点击这里来查看组件测试执行,然后查看测试结果的全过程。
(为了更好的看这个动画,请将Internet Explorer设置为全屏模式:View > Full screen)
在有些情况下,你可能不能单独测试一个组件。CUT可能在测试时需要依赖其他的类。为了处理这种情况,使用stub类来支持CUT需要的行为是很有意义的。Stub的作用是代替所依赖的类的功能,但是只有很少的代码,它只需要给CUT提供相关的应答。这个控制下的环境,让你能够将CUT隔离起来并只验证它的行为的正确性,而和它所依赖的类无关。
IRAD通过提供Stub数据表简化了这种情况的处理,你可以设定Stub采取怎样的动作来对CUT的请求做出反应。使用Stub数据表你可以建立一个输入参数和返回值之间的映射关系表,同时还包括认识需要抛出的异常。
相比较在为你的测试案例编写机械的实现代码方面浪费时间,使用这些功能能够让你能够专注于你真正的目标。确保你能够设计正确的测试例,并保证你的应用能按照希望的那样运行。
运行时分析
运行时分析让你能够通过在执行过程中收集数据来检查你正在运行的应用,让你能够深入分析应用,并对下列问题进行提问:
- 内存泄漏在哪发生?
- 我的线程管理是怎样工作的?
- 某个对象正在使用的内存是多少?
- 一个关键的对象实例化的时间是多少?
- 哪些代码我当前写的测试例中被调用或没有被调用?
从另外一个角度来想运行时分析,我们可以认为它提供了对你的应用在运行时进行X光透视。它让你能够看到表面一下的东西并看到系统运行时其内部的情况。图4是IRAD的运行时分析。
运行时分析能够让你清楚的了解到以下信息:
-
性能: 可以显示应用的流程和执行时间,还包括它的父调用者和子调用。
-
内存使用情况: S可以显示什么时候对象被创建,什么时候它们被垃圾收集以及它们的大小。
-
代码范围: 显示那些代码被执行了,可以精确到行的级别。
-
线程使用: 显示代码的线程层次的行为。
图4.运行时分析
点击这里查看应用的分析
(为了更好的看这个动画,请将Internet Explorer设置为全屏模式:View > Full screen)
除了IRAD预先设定的分析探针之外,你还可以自己定义探针。例如,如果你想增加一些代码来监视什么方法被调用,它的参数以及它内部的算法和计算是怎样工作的,那么你就可以自己定制一个探针。IRAD将保证代码在合适的时候被调用,使你可以看到结果。当你完成探测之后,你只需要简单的修改IRAD中的配置就可以让这个探针在应用的过程中不再被调用。IRAD使用了一个称之为字节码插入(Byte Code Insertion)的技术来管理你自己定制的探针和你的程序的代码之间的互动。
IRAD提供了几个工具和视图来帮助你来理解在运行时分析过程中的数据收集。这些工具和视图包括:
-
动态生成的顺序图表: 基于产生的profiling数据的类型,你可以生成顺序图表来描述类之间的互动,对象的互动和线程的互动。这个视图还包括一个过滤机制(如图5所示)来帮助你专注于你所感兴趣的区域。
图5.顺序图过滤器
-
统计数据视图: 如图6所示,这些视图提供了关于类,实例,包以及代码区域等等的详细信息。
图6.统计数据视图
-
导航器视图: 这类视图让年能够容易的浏览各种结果。例子包括Coverage Navigator(如图7所示),可以让你容易的查看代码区域相关的结果
图7. 浏览器视图
-
其他的特定视图: 线程视图,方法细节视图等等。
点击这里查看关于可使用的不同视图的viewlet。
(为了更好的看这个动画,请将Internet Explorer设置为全屏模式:View > Full screen)
将它们全部放到一起
即使单独的使用它们,IRAD的质量提高和分析能力可以为一个开发者建立真实世界中的应用提供高等级的价值。但下面的工作流程图(图8)将解释这些工具配合起来使用可以更好的提高程序的质量。
图8.怎样配合使用IRAD的工具来提高应用程序的质量
在这个工作流程中,每一个工具都对提高应用程序的质量做出贡献。在这个过程当中,一个步骤的输出,将帮助在下一个步骤中提高质量。工作的流程是这样的:
- 一旦你已经完成了新代码的编写工作:
- 你保存了代码并针对这些代码运行了code review。由于你一般情况下一次只是编写或修改了小部分应用程序的代码,code review运行的速度很快。你也可以设置过滤器来只关注一些特定的区域。
- 代码复查可能会检测到错误,如果没有,你可以头脑保持一些平静,因为你的代码已经通过了第一个质量障碍。
- 下一步你可以执行为你的那部分新代码设计的组件测试:
- 在测试完成之后,对测试的结果进行评估;
- 如果组件没有正确的运行,更新或者修改代码,并保存。
- 如果你已经修改了代码,回到第一步并再次运行代码复查工具以保证你没有引入新的错误,然后再按工作流程再进行一遍是很有意义的。
- 在工作流程的下一步中,你可以使用运行时分析工具来确认你的代码是否满足了你所有的质量目标。
- 首先,确认你进行组件测试时测试的代码区块是否正确无误。这意味着你需要运行代码区域探针。
- 如果你发现测试没有覆盖足够的代码,那么回到以前的步骤进行更多的测试。
- 如果你对代码覆盖和应用的行为满意了,那么就开始把眼光集中在一些非功能性的方面,例如性能,内存使用以及线程管理。
- 如果你发现了任何运行时问题,你需要更新你的代码,并回到整个流程的最初步骤重新进行一遍。
通过使用这个工作流程,你得到了一个遵守代码最优化方法的应用程序,并完成了一个和它相关的完备有用的测试集合,并且在内存,性能,以及线程方面都没有问题。
除了对开发者个体的好处之外,整个开发团队可以从使用这些工具来补充团队开发质量控制过程中得到好处。
参考资料
作者简介  | 
|  | Lee是一位高级产品经理,他在Software Group为IBM Rational做品牌支持工作。 |
 | |  | John是一位高级产品经理,他在Software Group为IBM Rational做品牌支持工作。 |
对本文的评价
|