SOArTester:一个基于精简用例的组合服务自动化测试系统金若凡,孙海龙,刘旭东,李翔(北京航空航天大学计算机新技术研究所,北京100191)摘要:测试是保证组合服务功能正确性、性能和可靠性的必要手段.基于BPMN的组合服务流程具有多参数多取值的特征,参数的取值组合数量巨大.本文提出了一种基于组合精简技术的测试用例精简方法,用于检测输入参数间的相互作用对组合服务执行可能产生的影响,设计并实现了基于BPMN规范的组合服务自动化测试系统SOArTester.该系统支持自动化的测试环境部署、测试执行和监控,生成的用例数量与参数个数之间呈现对数增长关系.实验表明SOArTester系统提高了组合服务测试的自动化程度,降低了组合服务测试的开销,因而提高了测试的效率.关键词:测试;测试用例精简;组合服务;业务流程建模标注中图分类号:TP39306文献标识码:A文章编号:03722112(2010)2A06506SOArTester:AnAutomaticCompositeServiceTestingSystemBasedonTestCaseReductionJINRuofan,SUNHailong,LIUXudong,LIXiang(TheInstituteofAdvancedComputingTechnology,BeihangUniversity,Beijing100191,China)Abstract:Testingisnecessaryforthefunctionalcorrectness,performance,andreliability.TheBPMNbasedcompositeserviceshavelargenumberofinputparametersandtheassignedvaluesofindividualparameters,thenumberofcorrespondingcombinationsofinputparametersishuge.Thispaperdescribedanewapproachbasedoncombinatorialdesignstogeneratereducedtestcasesthatdetectthemutualeffectofparametersandbasedonthemethod,designedandimplementedtheSOArTestersystem,whichhelpstheprocessesoftestcasesdeployment,executionandmonitoring,andthenumberoftestcasesgeneratedgrowslogarithmicallyinthenumberofparameters.ExperimentsdemonstratedthatSOArTesterenhancedtheautomationlevelofcompositeservicetesting,reducedthetestingcost,andimprovedtheefficiencyoftesting.Keywords:testing;testcasereduction;servicecomposition;BPMN1引言Web服务作为一种分布式计算模型,是解决互联网松耦合环境下异构应用之间的互操作和集成问题的有效手段.随着相关标准的不断完善和支撑平台的不断成熟,服务组合成为一种高效的应用开发方法.业务过程建模是基于服务组合进行开发的重要内容.相对于BPEL4WS(BusinessProcessExecutionLanguageforWebService)等缺乏对多方参与分布式业务流程支持的流程描述语言而言,BPMN[1](BusinessProcessModelingNotation)作为一种业务流程建模语言,可以有效地描述多方参与的协作业务流程.BPMN提供统一的建模图元,利用类似流程图的形式描述业务流程,使建模人员无需关心底层的实现细节,在服务组合领域得到了越来越广泛的应用.为保证组合服务的正确性和可靠性,测试成为组合服务开发过程中的一个重要阶段.统计资料[11]表明,软件测试上的开销占到了总成本开销的30%~50%.而在测试工作的所有开销中,约40%花费在测试用例的设计上.因而提高测试的自动化程度,特别是提高测试用例的生成效率,在实践中被认为是降低测试开销,提高测试质量,进而提高软件整体开发效率的重要手段.学术界针对组合服务测试工作开展了广泛的研究.文献[2,3]提出了一种基于WSDL文档的自动测试用例收稿日期:20090522;修回日期:20100113基金项目:国家863高技术研究发展计划(No.2007AA010301,No.2006AA01A106,No.2009AA01Z41)第2A期2010年2月电子学报ACTAELECTRONICASINICAVol.38No.2AFeb.2010生成方法,但该方法只支持单个服务的测试.文献[4]提出了基于BPEL组合服务的单元测试框架,但对于测试中的关键问题,即测试用例如何生成没有涉及.文献[5]提出了将BPEL转化为CP网的方法,但更多关注流程的形式化验证问题.在测试用例方面,文献[6,7]提出了基于HPN的BPEL流程测试用例精简方法,对业务模型要求较高,且没有提及原始输入数据如何获得.文献[11]提出了基于BPEL的测试用例生成方法,但未讨论其精简问题.针对上述问题,本文提出了一种基于精简用例的组合服务测试方法,并在此基础上设计并实现了自动化测试系统SOArTester,提高了在组合服务测试中用例生成、环境部署、脚本管理执行等阶段的自动化程度.针对组合服务流程的复杂输入参数,实现了基于组合精简模型的测试用例生成算法,能够对参数间相互作用对系统可能产生的影响进行检测.2组合服务测试用例精简方法BPMN规范规定了一套表示业务流程元素的统一图元,便于业务流程中不同角色的人员之间的交流,也有利于不同业务实体之间的交流.由业务人员建立的BPMN流程是一种概念模型,与BPEL相比较,由于BPMN模型具有执行流任意流动的特点,为了提高BPMN模型测试用例的生成效率,必须对业务流程的执行流进行分析.2.1组合服务执行流分析为了分析流程执行流,首先需要将BPMN流程转化为有向图.通过分析有向图,获得流程全部可能执行路径.然后通过对路径上节点执行语义的分析,取得节点条件约束信息,最终获得路径条件约束链.最后根据约束链信息,求出输入参数的约束区间,给出输入参数各区间的候选值以备进一步精简.为了描述BPMN转换为有向图的方法,下面给出BPMN执行模型的相关定义:定义1流对象(FlowObject,FO),指BPMN流程中基本可执行节点,包括各种事件(Event)、活动(Activity)和网关(Gateway)等,将其表示为四元组FO=(Id,IngoingDegree,OutgoingDegree,Type).其中,Id唯一地标识了一个流对象,即BPMN图中的一个节点.IngoingDegree表示BPMN流对象的入度;OutgoingDegree是流对象OBJ的出度;Type是该流对象的类型.BPMN中的流对象(FO)分为若干种,每一种FO又包含若干不同的类型.例如对于类型为事件(Event)的,有StartEvent和EndEvent等类型,一般将StartEvent作为执行的开始,将EndEvent作为流程终点;对于Gateway,又分为AND、OR、XOR等分支聚合结构,为了适应多样的流程结构,本文在路径分析中对各种分支进行统一处理.定义2顺序流(SequenceFlow,SF),指BPMN中的流程执行控制链路,表示为四元组SF=(Id,sourceRef,targetRef,conditionExpression).其中,Id唯一地标识了一个顺序流,即BPMN流程图中的一条边;sourceRef是该SF源FO的Id,targetRef是该SF指向的FO的Id.conditionExpression表示该SF从sourceRef转移到targetRef的条件约束.如果没有约束,则conditionExpression为空.根据以上定义,可以将一个BPMN流程转换为有向图G(V,E).其中V为节点集合,V={FO},E为有向边,E={SF},方向由sourceRef指向targetRef,构造出有向图后,下面给出了着色路径搜索算法(ColoredPathSearching,CPS),该算法对流程执行流进行遍历,从而得到流程的执行树,进而获得业务流程执行路径.算法中白色节点为未被搜索节点,灰色为初次发现节点,当以某节点为根的路径树遍历完成后,置该节点为黑色.当子节点的邻接节点为灰色时,则该路径为环路.当某节点的邻接节点为黑色时,则存在一条直连路径.CPS算法时间复杂度为Θ(V+E).算法1着色路径搜索算法输入:有向图G(V,E)输出:树TCPS(G(V,E))1.foreachvertexu∈V[G]2.docolor[u]←WHITE//初始化3.u.parent←NULL4.u.children←NULL5.foreachvertexu∈V[G]6.doifcolor[u]=WHITE//对未遍历节点进行搜索7.thenCPSVISIT(u)//调用递归函数8.elsecontinueCPSVISIT(u)1.color[u]=GRAY//该节点初次被搜索到2.foreachv∈Adj[u]//遍历SF,找到相邻FO3.doifcolor[v]=WHITE4.thenPUSH(u.children,v)5.v.parent←u6.CPSVISIT[v]7.elseifcolor[v]=GRAY8.thencontinue//存在执行环路9.color[u]←BLACK//完成该FO搜索2.2路径条件约束链分析对测试用例的设计是测试阶段最关键的技术问题之一[8].流程中输入参数的条件约束对测试数据的有66电子学报2010年效选取有直接指导作用.为了确定输入参数的条件约束,利用21节中的着色路径搜索算法(CPS)中获得的执行路径信息,通过分析路径节点的执行语义,剔除与输入变量无关的约束,将条件约束信息综合,最终确定输入变量定义域.路径条件约束链分析算法ConditionParse描述如下,算法输入为路径起始流对象FO:算法2路径条件约束链分析算法输入:路径起始事件StartEvent输出:参数候选值数组ConditionParse(StartEvent)1.FO←StartEvent2.whiletype(FO)≠EndEvent3.FO←nextFO()//获得路径中下一执行节点4.expressions←SF(FO)5.ifcondition(FO)≠NULLandinputVariable∈condition(FO)//剔除无关变量6.v←expressionParser(expr)//表达式分析函数,分析条件约束间断点7.push(oddPoint,v)8.generateInputData(oddPoint)//对根据间断点对等价区间给出候选值利用CPS算法,可以获得业务流程的所有可执行路径.对于每条路径,依据ConditionParse算法.以类型为startevent的流对象作为路径起始点,以类型为endevent流对象作为终点,依次遍历路径上所有边,可以得到该路径中条件约束链信息.expressionParser分析涉及输入参数条件约束的间断点,根据间断点划分输入区间等价类.为每个等价区间设置候选输入参数值.该候选值可由程序按照预定规则给出,也可由测试人员手工指定.2.3测试用例算法2.3.1精简的基本思路设组合服务流程具有n个输入参数,每个参数有k种取值情况,则总共有kn种输入参数组合.可以预见,随着待测模型复杂度的