一种用于检测组合服务中并发安排不当的伙伴服务的方法

文档序号:6602329阅读:282来源:国知局

专利名称::一种用于检测组合服务中并发安排不当的伙伴服务的方法
技术领域
:本发明属于基于服务的软件开发过程的软件质量保障领域,是一种用于辅助查错的静态分析方法。
背景技术
:面向服务的软件体系结构(S0A),因其具有异构系统互操作性、遗留系统重用性与松耦合性,而得到业界普遍接受。基于Web服务的软件开发作为S0A具体实现也已成为常见的软件开发方法。在这种软件开发方法中,服务组合是生成新服务与构建应用的重要方式。服务组合方式之一是用Web服务业务流程执行语言(WS-BPEL)将多个称为伙伴服务的服务组装成组合服务,该组合服务作为服务可与其它服务构成新的组合服务,组合服务所提供的服务由这些伙伴服务之间合作完成。伙伴服务可分布在具有自主计算能力的不同系统中,为提高组合服务的服务质量,应尽可能安排相关的伙伴服务并发执行。伙伴服务之间可能存在复杂关系,从而导致描述组合服务的程序结构复杂。另外由于流程执行语言本身特点,通常用业务流程执行语言描述的组合服务的程序可读性很差,服务开发人员很难直接用业务流程执行语言编写组合服务。目前设计组合服务大都借助于图形设计工具,这些工具能自动将设计结果转化成由业务流程执行语言所描述的程序;然而在现存的图形设计工具中,人工编排多个伙伴服务执行顺序、设置伙伴服务属性、及指定它们间各种约束关系通常涉及多个视图区,合理正确地安排好所涉及的伙伴服务实属不易,不合理安排可能导致所得程序存在诸如死锁、活锁、执行不可达活动、接收消息冲突、将不能并发执行的伙伴服务安排成并发执行(可能导致错误发生)、以及将可并发执行的伙伴服务没有安排成并发执行(可能导致该组合服务质量下降)等错误;人工检查这些不当的服务安排代价很大。为方便见,本文后面将不能并发执行的伙伴服务安排成并发执行、以及将可并发执行的伙伴服务没有安排成并发执行的称为与并发相关的伙伴服务不当安排。学术界用模型检测的方法(如C.Ouyang,E.Verbeek,W.M.P.vanderAalst,S.Breutel,M.Dumas,andA.H.M.terHofstede.FormalsemanticsandanalysisofcontrolflowinWS-BPEL.ScienceofComputerProgramming,67(2-3)162-198,2007.)检测用业务流程执行语言所描述的组合服务是否存在死锁、活锁、执行不可达活动、接收消息冲突等错误。目前没有解决并发相关的伙伴服务不当安排的技术。
发明内容本发明旨在检测用WS-BPEL描述组合服务中与并发相关的伙伴服务不当安排,即检测将不能并发执行的伙伴服务安排成并发执行、以及将可并发执行的伙伴服务没有安排成并发执行的安排。基于对组合服务消息流的静态分析导出伙伴服务的依赖关系,据此得到伙伴服务安排正确与合理的判别依据,从而有效地解决了检测组合服务中与并发相关的伙伴服务安排不当的问题。本发明的主流程如图4所示,具体包括如下四个步骤第一步构造组合服务的消息传播图(MPG)。其流程如图5所示。消息传播图是一个有向图,用于表示在不同伙伴服务中通信的消息之间一种依赖关系,其顶点表示消息,有向边表示其所连接的两消息之间直接传播关系。组合服务中消息直接传播关系有四种1.消息A部分或全部信息复制到消息B,则称消息A直接传播到消息B。2.组合服务同步调用一个伙伴服务。在过程执行语言中用带有一个输入消息与输出消息(Invoke类型)的活动(Activity)完成同步调用,若输入消息为A且输出消息为B,则称消息A直接传播到消息B。3.组合服务异步调用一个伙伴服务。在过程执行语言中用具有相同的伙伴链接的两个活动来实现异步调用一个伙伴服务,其中一个活动只有一个输入消息(Invoke类型),另一个只有输出消息(Receive类型);若输入消息为A,输出消息为B,则称消息A直接传播到消息B。4.组合服务为其用户(其它服务)提供异步服务。在过程执行语言中用具有相同的伙伴链接的两个活动来提供异步服务,其中一个活动只有一个输出消息(Receive类型),另一个活动只有输人消息(R印Iy类型);若输出消息为A,输人消息为B,则称消息A直接传播到消息B。若消息A直接传播到B,则在消息传播图中存在一条有向边由表示消息A的顶点指向表示消息B的顶点。通过解析描述组合服务的WS-BPEL程序,可以得到所有上述四种直接传播关系,这些直接传播关系及与传播关系相关联的所有消息构成该组合服务的消息传播图。第二步构造与伙伴服务相关的活动之间依赖关系图(ADG)。处理流程如图6所7J\ο以下提到的活动都仅跟伙伴服务相关,与之无关的其它活动都不在所要构造的ADG中。活动依赖关系图(ADG)是一个有向图,用于表示在不同活动之间一种因数据耦合或其它约束而存在的一种依赖关系,其顶点表示活动,有向边表示其所连接的两个活动之间执行时间顺序关系,有向边的起始顶点所表示的活动必须先于该边终点所表示的活动运行。组合服务中与伙伴服务有关的活动存在两种依赖关系1.若活动S输出消息为A,活动T输入消息为B,且在组合服务的消息传播图MPG中存在一条有向路径P,P的起始点是消息A所对应的顶点,终点是消息B所对应的顶点,则称活动T依赖于活动S。2.若活动S与活动T存在链接(LINK)关系,且活动S是链接的源(SOURCE),T是链接的目标(TARGET),则称活动T依赖于活动S。若活动T依赖于活动S,则在活动依赖关系图中存在一条有向边由表示活动S的顶点指向表示活动T的顶点。通过解析描述组合服务的WS-BPEL程序,可以得到上述两种依赖关系所有关系,这些依赖关系及与依赖关系相关联的所有活动构成该组合服务的活动依赖关系图ADG。第三步构造可并发运行的活动序列组的队列Q。其处理流程如图7所示。队列Q包含若干活动序列组,每一活动序列组G包含若干个活动序列,每一活动序列L包含若干与伙伴服务有关的活动。队列Q具有如下性质1.属不同活动序列组中的活动不能并发运行;2.同一活动序列组中不同活动序列间的活动可以并发运行;3.同一活动序列组中属同一活动序列中的活动只能顺序运行。通过对第二步所得活动依赖关系图ADG作若干遍如下处理直至ADG为空时即可得队列Q,其中每一遍处理可得到一个活动序列组G,每一遍处理过程如下1.将集合G置为空;2.对于ADG中每一个入度为零的顶点U,在ADG中求一条有向路径P,P中的顶点所代表的活动依有向边的方向组成一活动序列L,将L并入G中;所求的有向路径P满足条件[1]若U的出度不等于1,P只包含一个顶点U;[2].若U的出度等于1,则路径P=UV1-VnV满足Vk的入度与Vk的出度都等于1;V的入度等于1且V的出度大于1,或V的入度与出度都等于1但V后继顶点的入度大于1;3.将2所得G插入队列Q,并将G中顶点及与之相连的边从ADG中删除掉,得到新ADG。第四步检测并发相关不当安排的活动。检查描述组合服务的WS-BPEL程序中,被安排成并发运行的活动中是否存在若干活动分属不同活动序列组,或虽属同一个活动序列组但却在同一活动序列中;若存在,则这些活动即属于把不能并发执行伙伴服务安排成并发执行,从而可能导致错误发生。同样,检查描述组合服务的WS-BPEL程序中,被安排成顺序运行的活动中是否存在若干活动属同一活动序列组,若存在,则这些活动即属于把可并发执行的伙伴服务没有安排成并发执行,从而可能导致该组合服务质量下降。本发明的有益效果本方法可单独作为一款工具或一个插件集成到基于业务流程执行语言的服务开发集成开发环境,辅助开发人员自动检测组合服务中可能存在并发相关的伙伴服务不当安排,即时排除因将不能并发执行伙伴服务安排成并发执行而可能导致错误、以及将可并发执行的伙伴服务没有安排成并发执行而可能导致该组合服务质量下降等失误,以提高所设计服务的质量。图1=Travel的消息传播图(MPG);图2=Travel的活动依赖图(ADG);图3=Travel的可并发运行的活动序列组的队列Q;图4主流程图;图5解析BPEL程序并构造消息传播关系集合的流程图;图6解析BPEL程序并根据MPG构造活动依赖关系图的流程图;图7构造并发运行的活动序列组的队列Q流程图;其中图1图3为实施例中所使用的图形。具体实施例下面通过一个具体的例子对本发明作进一步的说明,但本发明并不仅适用于以下例子。下面是一个Travel服务,它是一个提供旅游服务的组合服务,当它接收到一个包含公司某员工信息的客户请求时,Travel向名为Employee的伙伴服务发出查询该员工可享受旅行等级(travelclass)的服务请求,随后它根据Employee返回的旅行等级分别向AmericanAirline与DeltaAirline伙伴服务查询满足旅行等级的机票信息,并根据查询结果,将票价低的机票信息返回给客户。下面代码是服务Travel用WS-BPEL实现的核心片段。1.<sequence>2.〈receivepartnerLink=“client“3.portType=“trvTravelApprovalPT“4.operation=“TravelApproval“5.variable=“TravelRequest“createlnstance=“yes“/>6.<assignXcopyXfromvariable=“TraveIRequest“part=“employee“/>7.<tovariable=“EmployeeTravelStatusRequest“part=“employee“/>8.</copy></assign>9.<invokepartnerLink=“employeeTravelStatus“10.portType=“empEmployeeTravelStatusPT“11.operation=“EmployeeTravelStatus“12.inputVariable=“EmployeeTravelStatusRequest“13.outputVariable=“EmployeeTravelStatusResponse“/>14.<assign><copy>15.<fromvariable=“TravelRequest“part=“flightData"/>16.<tovariable=“FlightDetails"part="flightData"/></copy><copy>17.<fromvariable="EmployeeTravelStatusResponse"part="travelClass"/>18.<tovariable="FlightDetails"part="travelClass"/></copy></assign>19.<fIowXinvokepartnerLink="AmericanAirlines"20.portType="aln:FlightAvaiIabilityPT"21.operation="FlightAvailability"22.inputVariable="FlightDetails"/>23.〈receivepartnerLink="AmericanAirlines"24.portType="aln:FlightCalIbackPT〃25.operation="FlightTicketCallback"26.variable="FlightResponseAA"/></flow>27.<invokepartnerLink=〃DeltaAirlines"28.portType="aln:FlightAvaiIabilityPT"29.operation="FlightAvailability“30.inputVariable=“FlightDetails"/>31.〈receivepartnerLink=“DeltaAirlines“32.portType=“aln:FlightCalIbackPT"33.operation=“FlightTicketCallback"34.variable=“FlightResponseDA"/>35.<switch><casecondition=“...“>36.<assign><copy><fromvariable=“FlightResponseAA"/>37.<tovariable=“TravelResponse“/></copyX/assignX/case><otherwise>38.<assign><copy><fromvariable="FlightResponseDA"/>39.<tovariable="TravelResponse"/></copyX/assignX/otherwiseX/switch>40.<invokepartnerLink=〃client"41.portType="trv:ClientCalIbackPT"42.operation="ClientCallback"43.inputVariable="TravelResponse"/>44.</sequence>下面应用本方案检测来Travel中不当安排的伙伴服务。1.构造组合服务Travel的消息传播图(MPG)为便于描述,用记号(A,B)表示消息A直接传播到消息B。解析Travel程序可得所有消息如表1所示表1.Trave1中消息及编号消息编号I消息名V1TravelRequestV2EmployeeTravelStatusRequestV3EmployeeTraveIStatusResponseV^FlightDetailsV5FlightResponseAAV6FlightResponseDAV7TravelResponse根据本方法第一步中四种情形,通过检查Travel程序中所有的消息对,可得如下的所有消息传播关系集合{(V1,v2),(v2,V3),(V1,V4),(v3,V4),(ν4,ν5),(v4,v6),(ν5,ν7),(ν6,ν7)}该关系可用消息传播图(MPG)来表示,如图1。2.构造Travel中与伙伴服务相关的活动之间依赖关系图(ADG)为便于描述,用记号(S,T)表示活动T依赖于活动S。解析Travel程序可得所有活动如表2所示。表2.活动及其编号<table>tableseeoriginaldocumentpage9</column></row><table>根据本方法第二步中两种情形及步骤1所得消息传播图(MPG),通过检查Travel程序中所有的活动对,可得如下的所有活动依赖关系集合<formula>formulaseeoriginaldocumentpage9</formula>该关系可用活动依赖图(ADG)来表示,如图2。3.构造Travel可并发运行的活动序列组的队列Q根据本方法第三步,可得如下的可并发运行的活动序列组的队列QKa1M,{<a2>},{<a3,a4>,<a5,a6>},{<a7>}该结果可用图3直观地表示。该队列表示DTravel中各活动必需依其所在的组的先后顺序依次执行,即依I,II,III,IV次序执行。2)组内各活动序列间可并发运行,如活动序列<a3,a4>与序列<a5,a6>可并发执行。3)活动序列内部各活动只能按顺序执行,如活动a3执行才能执行a4。4.检测Travel中并发相关不当安排的伙伴服务。根据步骤3所得结果,检查Travel程序可得如下结果DTravel中19行到26行所包含的两个活动(它们分别对应于a3与a4)安排可能有误,即这两个活动不能安排成并发执行。2)Travel中19行到26行所包含的两个活动(它们分别对应于a3与a4)与27行到34行所包含的两个活动(它们分别对应于a5与a6)安排可能不当,即这两个活动序列能安排成并发执行。根据服务Travel描述,容易验证上述结论是正确。虽然通过实施例详细描述了本发明用于检测组合服务中并发安排不当的伙伴服务的方法,但是本领域的技术人员应当理解,本发明并不限于实施例中所公开的内容和范围,在不脱离本发明的实质和精神范围内,可以对本发明进行各种变换、修改和替换。权利要求一种用于检测WS-BPEL的组合服务中并发安排不当的伙伴服务的方法,主要包括以下步骤第一步构造组合服务的消息传播图;第二步构造与伙伴服务相关的活动之间依赖关系图;第三步构造可并发运行的活动序列组的队列;第四步检测并发相关不当安排的活动。2.如权利要求1所述的方法,其特征在于消息传播图是一个有向图,用于表示在不同伙伴服务中通信的消息之间一种依赖关系,其顶点表示消息,有向边表示其所连接的两消息之间直接传播关系。3.如权利要求1或2所述的方法,其特征在于,组合服务中消息直接传播关系有四种a)消息A部分或全部信息复制到消息B,则称消息A直接传播到消息B;b)组合服务同步调用一个伙伴服务,若输入消息为A且输出消息为B,则称消息A直接传播到消息B;c)组合服务异步调用一个伙伴服务,若输入消息为A,输出消息为B,则称消息A直接传播到消息B;d)组合服务为其用户提供异步服务,若输出消息为A,输人消息为B,则称消息A直接传播到消息B;通过对WS-BPEL程序进行解析,能够得到上述四种传播关系,从而构建出完整的消息传播图。4.如权利要求1或2所述的方法,其特征在于活动依赖关系图是一个有向图,用于表示在不同活动之间一种因数据耦合或其它约束而存在的一种依赖关系,其顶点表示活动,有向边表示其所连接的两个活动之间执行时间顺序关系,有向边的起始顶点所表示的活动必须先于该边终点所表示的活动运行。5.如权利要求4所述的方法,其特征在于,组合服务中与伙伴服务有关的活动存在两种依赖关系I)若活动S输出消息为A,活动T输入消息为B,且在组合服务的消息传播图中存在一条有向路径P,P的起始点是消息A所对应的顶点,终点是消息B所对应的顶点,则称活动T依赖于活动S;II)若活动S与活动T存在链接关系,且活动S是链接的源,T是链接的目标,则称活动T依赖于活动S;通过解析描述组合服务的WS-BPEL程序,能够得到上述两种依赖关系所有关系,这些依赖关系及与依赖关系相关联的所有活动构成该组合服务的活动依赖关系图。6.如权利要求1或2所述的方法,其特征在于,可并发运行的活动序列组的队列包括以下性质属不同活动序列组中的活动不能并发运行;同一活动序列组中不同活动序列间的活动可以并发运行;同一活动序列组中属同一活动序列中的活动只能顺序运行。7.如权利要求6所述的方法,其特征在于,可并发运行的活动序列组队列的获取方法如下1)将集合G置为空;2)对于活动依赖关系图中每一个入度为零的顶点U,在活动依赖关系图中求一条有向路径P,P中的顶点所代表的活动依有向边的方向组成一活动序列L,将L并入G中;所求的有向路径P满足条件若U的出度不等于1,P只包含一个顶点U;若U的出度等于1,则路径P=mv"vnv满足vk的入度与vk的出度都等于1;v的入度等于1且v的出度大于1,或V的入度与出度都等于1但V后继顶点的入度大于1;3)将2)所得G插入队列Q,并将G中顶点及与之相连的边从原活动依赖关系图中删除掉,得到新的活动依赖关系图;4)循环执行上述步骤,直至活动依赖关系图为空,即可得到所需队列。8.如权利要求1或2所述的方法,其特征在于检查并发不当安排的方法是,检查描述组合服务的WS-BPEL程序中,被安排成并发运行的活动中是否存在若干活动分属不同活动序列组,或虽属同一个活动序列组但却在同一活动序列中,若存在,则这些活动即属于把不能并发执行伙伴服务安排成并发执行;同时,检查描述组合服务的WS-BPEL程序中,被安排成顺序运行的活动中是否存在若干活动属同一活动序列组,若存在,则这些活动即属于把可并发执行的伙伴服务没有安排成并发执行。全文摘要本发明提供了一种用于检测组合服务中并发安排不当的伙伴服务的方法,属于基于服务的软件开发过程的软件质量保障领域,是一种用于辅助查错的静态分析方法。该方法包括首先,构造组合服务的消息传播图;其次,构造与伙伴服务相关的活动之间依赖关系图;再次,构造可并发运行的活动序列组的队列;最后,检测并发相关不当安排的活动。本方法可单独作为一款工具或一个插件集成到基于业务流程执行语言的服务开发集成开发环境,辅助开发人员自动检测组合服务中可能存在并发相关的伙伴服务不当安排,以提高所设计服务的质量。文档编号G06F11/00GK101833481SQ20101017236公开日2010年9月15日申请日期2010年5月14日优先权日2010年5月14日发明者倪一涛,张路,梅宏申请人:北京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1