一种基于云平台的测试用例生成方案
2014-10-15杜京京赵鹏飞
杜京京,赵鹏飞
(河海大学计算机与信息学院,江苏 南京 211100)
0 引言
软件测试是保证软件产品质量的一个重要手段[1],其主要目的是验证软件产品是否满足客户需求,尽早发现软件产品的缺陷,可以提高软件产品质量[2]。
单元测试是软件测试的重要组成部分。单元测试是指对软件中的最小可测试单元进行检查和验证。传统的单元测试需要根据测试标准准备大量的单元测试用例,而测试用例的设计是非常耗时的。据统计,在所有的软件测试的开销中,约40%花费在设计测试用例上[3]。如果设计不当可能会达不到单元测试的目的。使用自动化测试框架,程序员必须知道测试框架的来龙去脉,写域相关的代码的测试用例,运行测试用例,这给程序员带来了额外的工作量。
随着云计算的快速发展,云计算的应用也越来越广泛,软件测试就是其中之一。可以借助于云计算平台的基础设施建立测试环境,借助于云计算平台的软件测试工具进行软件测试,当然也可以借助于该平台获得软件测试服务提供商提供专业的测试服务,这种基于云计算的新型的测试方式就是云测试。
文献[4-6]提出了类似SaaS(软件即服务)的TaaS(测试即服务)单元测试模型,把单元测试作为一种服务提供给开发人员,开发人员不需要写大量的测试用例,就可以获得测试结果,这大大减轻了开发人员的负担。但关于测试用例的生成还是不够自动化,仍然需要设计标准文档来生成测试用例(如XML文档),也需要测试人员交互。
本文提出一种基于云平台测试用例的自动生成方案,从用户进行逻辑设计的UML模型图出发,充分利用云计算的大规模计算能力,把UML模型图转换为基于XML的测试用例,再对XML文件进行处理产生测试用例,最后运用云平台来执行这些测试用例。充分利用软件设计阶段的UML文档,生成的测试脚本具有一致性,自动化程度较高。
1 云测试的研究背景
云计算使人们处理信息方式发生了改变,同样也改变了企业提供软件服务的交付模式、研发模式和软件测试方式。云测试是云计算时代的新生产物,是一种有效利用云计算环境资源对于其他软件进行的测试或是一种针对部署在“云”中的软件进行的测试。主要分为两种,即测试云和利用云环境进行测试。测试云是对迁移或将要迁移到云中应用程序及SaaS(软件即服务)进行测试,从而确保其性能,安全性和可靠性达到或超过预期。使用云环境进行测试是指利用基于云计算的硬件基础设施和计算资源来执行传统的测试,如进行定期的性能、负载、压力、安全性和兼容性测试。
云测试有许多优点。首先,可以节省开支,用户不需要购买昂贵的软硬件资源,可以按需所得服务,提高效率;其次,云测试能提供的计算能力可以模拟大量流量,为性能测试提供了方便;最后,把测试资源放在云端管理方便,同时也比较安全可靠,没有机器宕机时出现不能使用的问题。
国内外有许多云测试服务平台产品。国外有CloudTesting[7]、Keynote[8]、SOASTA[9]等,它们主要提供功能测试和性能测试,针对的是基于Web的应用。在国内有 AlldayTest V3.0[10],该平台主要提供功能测试和性能测试,是一种自动化测试软件。
文献[11]提出云服务的3个用户群和所遇到的一些挑战。文献[12]提出怎样把传统测试环境和工具迁移到云计算环境中。文献[13]提出基于云计算的自动化测试方案,利用开源软件Eucalyptus及AutoTest构建云测试系统,主要用来进行压力测试。文献[14]讨论了云测试的挑战和机会。文献[15]介绍了一个基于云平台的网络管理系统的性能测试案例。其利用云平台模拟大量的网络虚拟元素进行性能测试,代替真正的物理测试。文献[4-6]提出了TaaS(测试即服务)服务模型,把单元测试作为一种服务,提出构建测试云的方法,其采用SOA(面向服务的体系结构)和本体语言来描述任务的执行,并对任务调度不同算法进行了对比。文献[16]讨论现在所有的云测试工具,并比较了各种云测试工具的优缺点。
为了解决云软件测试问题和充分利用云资源进行测试,本文提出了一个云端测试系统模型,利用软件设计阶段生成的UML生成测试用例,减轻程序员的负担。
2 系统结构总体设计
图1 系统的总体设计
如图1所示,本系统由以下模块组成:
(1)测试执行模块,负责执行测试用例和收集测试结果。
(2)测试脚本自动生成模块,根据提供的UML类图生成测试脚本,可以对生成的脚本进行验证,并把脚本进行分类使其能并行执行。
(3)云测试用户模块,为用户提供服务接口,用户通过它提交测试用例和申请测试资源。
(4)云测试控制模块,负责管理各个模块,提供云测试用户模块与测试执行模块的通信。
(5)云测试镜像管理模块,主要根据用户的需求创建虚拟机,管理虚拟机资源。
余下的模块功能主要通过云管理工具来提供,本系统使用CloudStack来实现对各个节点的管理,构建云平台。
3 系统的层次结构
图2表示了一个5层的体系结构:访问管理层、测试任务管理、测试资源管理、测试核心服务、物理资源管理。
(1)访问管理层。用户可以通过本层访问测试服务,是与外界联系的接口,用户可以通过2种方式访问,即浏览器和程序接口。用户可以通过本层来提交测试任务和设置测试环境,如虚拟机的数量。
(2)测试任务管理。该层作为访问管理层与测试服务之间的通信接口,主要包括3个组成部分:
①环境需求分析。镜像管理通过环境需求来匹配镜像,符合条件则为之服务,反之拒绝。云端选择镜像并创建虚拟机,当虚拟机创建成功时,测试管理层获取其IP。
②创建任务与调度。根据用户测试任务来创建任务,并进行调度,它主要有2个模块:分发和监测。分发负责把任务分给对应测试服务模块,而监测负责对各个模块的监视,防止异常的发生。
③收集测试结果。测试结果会保存在一个数据库中,通过查询数据库来收集结果,并通过报表工具把它展现出来。
(3)测试资源管理。它扮演云基础设施的的角色,监控物理机和虚拟机,根据任务的要求,分配测试资源。该层具有3个子层:预处理、资源管理层和计算节点层。
(4)测试核心服务。它是一个服务池,包括UTX(UML To XML)服务、测试代码生成服务、测试用例生成服务和测试结果收集服务。根据用户的选择可以执行不同的服务,服务之间可以组合。
(5)物理资源管理。主要为测试提供资源,该层支持资源的虚拟化。
图2 系统的层次设计
4 测试用例生成
软件测试伴随着软件开发的整个过程,通常做开发写测试用例是边写代码边写测试用例,编写测试用例是一件烦琐的事情。如今开发都是面向对象开发,开发之前要进行建模,设计类图和系统结构图,UML是通常使用的一个工具,可以充分利用UML类图,把测试脚本的生成提前到系统初期建模中,从UML模型图出发,把UML模型图转换为基于XML的测试用例,再对XML文件进行处理产生测试用例。充分利用软件设计阶段的UML文档,生成的测试脚本具有一致性,自动化程度较高。对CTSS(Class Test Script Schema)服务模块进行修改,把这个系统封装成一个UTX服务,充分利用云计算的可扩展性和处理大数据的能力。
生成测试用例的主要步骤如图3~图5所示。
图3 生成well-formed XML文件
图4 生成XML脚本框架文件
图5 测试脚本文件的生成
以上3个图说明了生成测试脚本文件的整个过程。图3中先对UML类图进行词法分析,处理生成well-formed的XML文档。图4把生成的XML文档,利用XSLT(扩展样式表转换语言)转换成XML框架文件,即是对一种XML文档转换成另一种符合定义的XML文档,最后图5利用XML框架文件和测试用例的输入生成测试脚本文件。
5 构建测试服务
本节介绍测试服务的构建过程,主要包括3个部分:确定测试服务、测试服务的实现和实现测试服务的挑战。
5.1 确定测试服务
本系统主要是利用UML生成单元测试用例,所以主要考虑单元测试的执行过程。从检查单元测试过程并识别可能的候选服务的每一步,然后指定一个明确的格式,确定服务并实现测试服务。这是增量和迭代过程。通常它包括4个部分:
(1)建立测试计划。
主要实现测试的策略,包括测试的环境需求,生成测试用例方法等。本系统可以是执行自己编写的测试用例也可以是由UML生成的。
(2)产生测试用例。
本文的目标就是利用UML产生测试用例。
(3)执行测试用例。
执行测试用例的自动化是实现的目标。
(4)持久化测试用例。
把测试过程中生成的测试结果保存在数据库中,供以后显示和分析。
5.2 测试服务的实现
测试服务的实现主要是测试执行模块的实现。因为Junit框架可以自己进行定制,生成自己适合执行的单元,所以把Junit封装成为测试执行模块,测试结果的显示参考文献[5]利用已有的Bugzilla Tool工具。测试结果的持久化用MySQL数据库。把UTX封装成服务来产生测试用例。
总的来说实现服务有3种途径:
(1)从头开发。如果没有必须的测试功能或封装已有的功能超过重新开发的工作量,就需要重新开发测试服务,如本系统的用户界面就需要重新开发。
(2)封装已有的测试功能。把已经存在的功能封装成测试服务,如Junit和UTX模块,只需进行少量的修改。
(3)集成已有测试服务。如使用报表工具,直接把其基础功能作为服务。
5.3 实现测试服务的挑战
实现测试服务有许多挑战:
(1)把测试环境放在云端并不容易,因为测试执行往往会依赖其他的文件和数据库。
(2)文件传输是比较耗时的,尤其是像UML文件,反应时间可能比较慢。
(3)云平台本身的安全性问题:要确保执行的可靠性。
(4)使各个服务模块自动化执行的问题:怎么把这些服务进行组合。
6 测试用例生成和执行过程
用户准备好测试任务和环境需求(用XML来描述),通过浏览器提交给云平台,云平台根据环境需求来检索虚拟机镜像库,构建测试环境,用户可以选择生成测试用例,生成的测试用例可以查看。例如对判断是否三角形进行测试,测试用例如表1所示。
表1 测试用例
最后利用上面生成的XML测试结果,生成最终的测试文件,然后就可以提交运行,通过报表工具反馈服务给用户。
7 结束语
本文提出了一种基于云服务测试用例的生成方案,是TaaS测试模式的一个应用,利用UML模型图,把UML模型图转换为基于XML的测试用例,再对XML文件进行处理产生测试用例。测试用例在云端自动执行并返回测试结果。用户可以通过浏览器提交测试任务,测试结果以报表形式自动产生,便于用户分析测试结果,提高测试效率。但本方案有许多不足需要改进:(1)测试用例往往会相互依赖,本文生成的测试用例是一些关系不复杂的测试用例。(2)测试模块的自动化程度不高,需要用户的少量参与。
今后的研究重点是提高测试的自动化程度和改进UTX模块,生成具有复杂关系的测试用例;另外测试并行处理也是研究的一个重点。
[1]单锦辉,姜瑛,孙萍.软件测试研究进展[J].北京大学学报:自然科学版,2005,41(1):134-145.
[2]廖新粮.基于任务调度的自动测试方法及系统实现[D].成都:电子科技大学,2011.
[3]Chen H Y,Tse T H,Chen T Y.TACCLE:A methodology for object-oriented software testing at the class and cluster levels[J].ACM Transactions on Software Engineering and Methodology,2001,10(1):56-109.
[4]Yu Lian,Su Shuang,Zhao Jing,et al.Performing unit testing based on testing as a service(TaaS)approach[C]//Proceedings of the 2008 IEEE International Conference on Service Science.2008:127-131.
[5]Yu Lian,Zhang Le,Xiang Huiru,et al.A framework of testing as a service[C]//Proceedings of the 2009 IEEE International Conference on Management and Service Science.2009.
[6]Yu Lian,Tsai Wei-tek,Chen Xiangji,et al.Testing as a service over cloud[C]//Proceedings of the 5th IEEE International Symposium on Service Oriented System Engineering.2010:181-188.
[7]User Replay Limited.Cloud Testing[EB/OL].http://www.cloudtesting.com,2008-12-30.
[8]Keynote Systems.Keynote[EB/OL].http://kite.keynote.com/,1995-12-10.
[9]SOASTA.SOASTA CloudTest Architecture[EB/OL].http://www.soasta.com/product-features/architecture/,2013-09-16.
[10]南京班墨自动化技术有限公司.AlldayTest[EB/OL].http://www.alldaytest.com,2012-12-16.
[11]Candea G,Bucur S,Zamfir C.Automated software testing as a service[C]//Proceedings of the 1st ACM Symposium on Cloud Computing.2010:155-160.
[12]Tariq M King,Annaji Sharma Ganti.Migrating autonomic self-testing to the cloud[C]//Proceedings of the 3rd International Conference on Software Testing,Verification,and Validation Workshops.2010:438-443.
[13]钟华.基于云计算的软件测试服务研究[D].上海:东华大学,2012.
[14]Vengattaraman T,Dhavachelvan P,Baskaran R.A model of cloud based application environment for software testing[J].International Journal of Computer Science and Information Security,2010,7(3):257-260.
[15]Zohar Ganon,Itai E Zilbershtein.Cloud-based performance testing of network management systems[C]//Proceedings of the 14th IEEE International Workshop on Computer Aided Modeling and Design of Communication Links and Networks.2009:26-31.
[16]Bai X,Li M,Chen B,et al.A survey of cloud testing tools[C]//Proceedings of the 6th IEEE International Symposium on Service Oriented System Engineering.2011:1-12.