下面按照一般的测试分类,介绍各个领域内的开源测试工具:
单元测试:JUnit (http://www.junit.org)
JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework),用于Java开发人员编写单元测试之用。下面介绍的开源测试工具,很多都是对于JUnit的扩展。
它目前的版本为3.7,为编写单元测试提供了主要的接口。目前主流的IDE都提供了对于JUnit的支持。
XP强调测试先行,尤其重视单元测试。系统集成商需要通过软件开发过程的执行,来强化JUnit的使用。
目前很多商业测试软件都提供了与JUnit的联合使用,例如获得1999和2000年Jolt测试类工具亚军和生产率大奖的Jtest (ParaSoft公司产品,内置200余条编码规范,提供Java代码静态和动态检查,同时还可以自动生成简单的测试用例等等)可以导入和导出JUnit的测试用例。
集成与功能测试:HttpUnit (http://unit.sourceforge.net) & Cactus(http://jakarta.apache.org/cactus/)
HttpUnit是一套通过HTTP连接测试Web应用程序的Java类。在结合JUnit的情况下,HttpUnit可以作为一种创建测试程序的强大工具用来保证Web应用程序正常的端对端功能。
虽然JUnit自身可以通过编写单一类的测试程序对服务器端Java代码进行测试,不过,有了HttpUnit的帮助,JUnit可以扩展为模拟Web浏览器-Web服务器的工作方式对整个Web程序结构进行测试。
Cactus为我们提供了一种测试SERVLET等WEB组件的有效手段。它是JUnit的一个扩展,但是它又和JUnit有一些不同。Cactus的测试分为三种不同的测试类别,JspTestCase, ServletTestCase, FilterTestCase, 而不是像JUnit一种TestCase。Cactus的测试代码有服务器端和客户端两个部分,他们协同工作。
一般意义上,可以采用Cactus作集成测试;而使用HttpUnit做功能测试。
虽然在集成与功能测试方面,有很多的开源工具,但是在实际应用过程中,还是采用商业测试软件的比较多,对于复杂应用更是如此。这是因为集成与功能测试大部分还是由专门的测试人员进行,而他们对于已有的商业软件,例如Rational Robot、E-Test Suite、WinRunner等都比较熟悉,同时商业软件也提供了更为强大的功能。
压力与性能测试: JMeter (http://jakarta.apache.org/jmeter/)
由于企业应用越来越复杂,用户数量也是越来越多,系统的性能参数以及众多的非功能性需求在开发中获得了越来越多的重视。因此,很多压力与性能测试工具也开始出现,这其中有一定影响的是Apache Software Foundation的JMeter。
JMeter是的JAVA桌面应用,用来测试系统的负载与性能。它开始设计是用来测试WEB应用,后来加以扩展,可以测试Http,FTP,支持JDBC的关系型数据库的性能与压力。同时,JMeter提供一定的定制功能,系统集成商可以自行开发针对EJB、CORBA或者SOAP的插件。
压力与性能测试方面,由于测试比较复杂,实际企业应用测试中,也是采用商业测试软件比较多,例如LoadRunner、JProbe Suite以及与JBuilder8 同步发布的OptimizerIT;
3)日构建
在软件开发的领域里有各种各样的"佳实践",它们经常被人们谈起,但是似乎很少有真正得到实现的。这些实践基本、有价值的是:都有一个完全自动化的创建、测试过程,让开发团队可以每天多次创建他们的软件。
"日创建"也是人们经常讨论的一个观点,McConnell在他的《快速软件开发》中将日创建作为一个佳实践来推荐,同时日创建也是微软很出名的一项开发方法。但是,我们更支持XP社群的观点:日创建只是低要求。一个完全自动化的过程让你可以每天完成多次创建,这是可以做到的,也是完全值得的。
Ant是Apache Jakarta的一个项目,是"不带 make 缺点的 make"。Ant 正在成为开放源代码世界中实际上的标准。原因很简单:Ant 是使用 Java 语言编写的,这种语言可以让创建过程在多种平台上使用。
Ant目前的版本为1.5,它的执行是基于一个XML文件,配置文件由目标树构成。每个目标都包含了要执行的任务,其中任务是可以执行的代码。在下面给出的例子中,mkdir 是目标 compile 的任务。mkdir 是建立在 Ant 中的一个任务,用于创建目录。 Ant 带有一套健全的内置任务,也可以通过扩展 Ant 任务类来添加自己的功能。
Ant内置了对于JUnit、CVS、ClearCase、Visual SourceSafe以及CheckStyle的支持,通过于系统定时功能,例如Windows的"任务计划"或者Linux/Unix的"cron",可以很方便的利用Ant来自动完成每日构建的工作。
4)持续集成
持续集成是XP的重要实践之一,Martin Fowler在参考文献[6]中有详细的介绍,上述实践都是它的基础。
开源项目中有一个的工具是用来帮助实现持续集成的:CruiseControl,其次,目前还有一款商业软件AntHill也为持续集成提供了很好的支持。
CruiseControl (http://cruisecontrol.sourceforge.net/)
CruiseControl是的ThoughtWorks公司的产品,目前它的源码已经公开,它是一个持续集成的框架。它包含,但是并不局限于Email通知、Ant以及其他源码控制工具。同时,它还提供了WEB界面来查看当前和已往Build的详细信息。
AntHill (http://www.urbancode.com/projects/anthill/)
AntHill可以确保Build过程受控,同时,帮助组织内部的知识共享。它在每次Build之前从源码控制系统 (CVS、VisualSourceSafe、ClearCase等) 中获取新的源码,同时在 Build完成之后为源码分配一个的数字进行标定。同时,它还会在根据Build的情况,更新Intranet的信息。
5)小步发布
有了以上实践的支持,小步发布有了实现的可能。XP强调在非常短的周期内以递增的方式发布新版本,从而可以很容易地估计每个迭代周期的进度,便于控制工作量和风险;同时,也可以及时处理用户的反馈。
为了成功的进行应用系统的版本发布,需要SCM,尤其是源码控制程序的配合。在开源项目中,CVS (Concurrent Version System) 是的版本控制程序。
目前CVS的版本为1.5.11,它是一个将一组文件放在层次目录树中以保持同步的系统。人们可以从 CVS 服务器上更新他们的本地层次树副本,并将修改的结果或新文件发回;或者删除旧文件。CVS 基于客户端/服务器的行为使得其可容纳多用户,构成网络也很方便。这一特性使得 CVS 成为位于不同地点的人同时处理数据文件(特别是程序的源代码)时的。所有重要的免费软件项目都使用 CVS 作为其程序员之间的中心点,以便能够综合各程序员的改进和更改。
基于多个操作系统的CVS的客户端软件也很多,其中以WinCVS为。
2、开源项目与Framework:
目前,对于基于J2EE的应用程序开发,有很多开源的Framework,例如Struts (http://jakarta.apache.org/struts/)、WebWork等,都提供了利用J2EE技术的解决方案。其中,Struts是目前应用为广泛和获得关注多的框架之一。
Struts目前的版本为1.1,它是基于Model2的MVC实现框架。Struts的核心是基于Servlet、JavaBean、ResourceBundles和XML技术的控制层。
还有很多开源项目为Struts提供支持,例如:
配置文件GUI:Struts Console;
Code Generator:Easy Struts;
Unit-Test:StrutsTestCase;
获得2002年JAVA IDE大奖的JBuilder 8更是内置了对于Struts的支持,这也从另外一个侧面体现了Struts的重要意义。
同时,需要注意的是,Struts本身并没有提供Persistence层的标准实现,但是,目前这个方面的解决方案比较多,系统集成开发商可以根据具体情况加以选择。
如果可以在Struts等Framework的基础上,结合不同业务系统的专业知识,开发独立的系统平台,系统集成商的项目开发速度和质量都会有很大的提高。