首页> 中国专利> 一种基于流程编排的服务组合路径推导方法

一种基于流程编排的服务组合路径推导方法

摘要

本发明一种基于流程编排的服务组合路径推导方法,属于软件测试技术领域,具体包括:首先、提取某段BPEL源文档中的元素并分别进行编号;同时将该BPEL源文档划分为正常处理程序和异常处理程序;然后分别提取出BPEL路径信息形成中间XML文档;并去除冗余元素,得到描述路径的XML文档,读取边以及节点,建立服务组合路径的邻接矩阵以及并行节点集合;最后、结合深度优先搜索算法,得到所有的服务组合路径,在路径执行条件下输出;优点在于:能够自动化解析BPEL源文档,得到服务组合执行顺序,简化了测试人员的BPEL解析工作;完备的寻找到所有的服务组合路径,辅助测试过程,使得测试结果更加全面。

著录项

  • 公开/公告号CN106126416A

    专利类型发明专利

  • 公开/公告日2016-11-16

    原文格式PDF

  • 申请/专利权人 北京航空航天大学;

    申请/专利号CN201610428666.6

  • 发明设计人 韩荣宾;王世海;

    申请日2016-06-16

  • 分类号G06F11/36;

  • 代理机构北京永创新实专利事务所;

  • 代理人赵文利

  • 地址 100191 北京市海淀区学院路37号

  • 入库时间 2023-06-19 00:53:35

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-12-07

    授权

    授权

  • 2016-12-14

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20160616

    实质审查的生效

  • 2016-11-16

    公开

    公开

说明书

技术领域

本发明属于软件测试技术领域,具体是一种基于流程编排的服务组合路径推导方法。

背景技术

相对于传统面向过程或功能的软件结构,面向服务的体系结构(Service-Oriented Architecture,SOA)能更好的适应当下信息化和网络服务的不断发展,在各种企业和IT系统得到广泛应用。SOA中,不同的功能单元通过接口连接完成一个完整的程序功能,这些单元被称为服务。接口的定义是中立的,即SOA的各个服务之间是松耦合的,使SOA具有极高的灵活性和适应性,其中的服务具有良好的可替换性和可复用性;但松耦合的特性同时也对SOA系统的测试带来了一些困难,主要体现在以下三个方面:

第一,使用者无法知晓服务内部的运行原理,只有服务的提供者才能对系统进行完整的测试。第二,SOA服务具有动态绑定的特性,会使系统参数在测试运行时发生改变,使得已测得的数据失效。第三,SOA通过对各个服务进行编排来实现完整的业务功能,即使各项服务都能够单独通过测试,将它们整合起来后,测试业务流程时仍可能出现问题。同时,在一个较为复杂的SOA系统中,也可能在测试中错过了某些能够完成功能的服务组合,测试结果可能是不全面的。

当前针对SOA系统的测试技术研究有三个不同的阶段:第一阶段为:关注企业内部的测试,主要测试单个服务的功能,检测其功能实现能力和对接口、消息的交换能力;

第二阶段为关注面向服务的系统特性,测试主要针对服务的发布、查找和绑定的三种行为,以及服务之间不能及时互相传递信息的问题。

第三阶段为关注服务的动态特性和服务组合总体的测试,一般从SOA系统整体上看待问题,关注各个服务组合的集成测试。

综合国内外对SOA系统的研究与应用来看,关于SOA测试的研究,其内容一般分为以下三类:针对服务协议和状态进行的简单测试,用自动化生成测试用例对SOA系统整体进行测试以及对SOA系统自动检测工具的相关研究。

从相关的文献资料可以看出,目前SOA测试的研究大多只针对系统中的单个服务或者服务之间的关系,对真正能够实现功能的含有多个服务的业务流程的测试较少。自动化检测工具和整体测试中,多用确定的规则自动化生成生成测试用例,而很少使用真实数据进行测试。

对于服务组合集成测试需要解析BPEL源文档,得到服务组合执行顺序。Web服务的业务流程执行语言BPEL4WS(Business Process Execution Language For Web Services),是为了整合Web服务而制定的一项规范标准。

许多BPEL编辑工具提供从业务流程图转化到BPEL语言的映射,以实现BPEL的图形化设计和分析。现在大约有二十几种能够进行BPEL编辑的工具和相应的平台,其中许多还可以进行可视化的图形操作。但这些工具中的图形或其他符号都是为了转换成BPEL代码而使用的,需要对BPEL的书写规范和代码结构十分熟悉才能高效的利用这些编辑工具。从业务流程模型或业务流程建模与标注标准(Business Process Modeling Notation,BPMN)到BPEL程序的转换算法广泛的被提出和应用,使人们能够更好地利用BPEL语言来设计规划业务流程。但对业务流程的测试还没有得到足够的重视,所需要的从BPEL语言程序到控制流程图形的逆向转换算法并不完备。

发明内容

本发明为了解决BPEL语言程序到控制流程图的转换问题,从测试角度出发,基于BPEL源程序自动化生成测试服务组合路径的技术还不成熟,提出了一种基于流程编排的服务组合路径推导方法;

具体步骤如下:

步骤一、针对某段BPEL源文档,提取BPEL源文档中的元素并分别进行编号;

BPEL源文档中的元素分为基本活动元素以及结构化活动元素,首先将对基本活动元素按序进行编号,然后,继续顺次对结构化活动元素按序进行编号;并记录基本活动元素的最后一个编号作为分界编号。

步骤二、按BPEL语法标准将该BPEL源文档划分为正常处理程序和异常处理程序;

步骤三、分别对正常处理程序和异常处理程序提取出BPEL路径信息;

具体步骤为:

步骤301、首选针对某段程序,判断是否为正常程序,如果是,删除scope元素;否则,保留scope元素;

步骤302、从外层到内层逐层遍历该段程序中的每层元素;

步骤303、针对某层作为当前层,判断该层遍历到的当前元素是否为基本活动元素,如果是,进入步骤304,否则,进入步骤307;

步骤304、判断当前层下一个元素是否为基本活动元素;如果是,将两个基本活动元素的编号相连,形成一条边;否则,进入步骤305;

步骤305、判断当前层下一个元素是否为结构化活动元素,如果是,将当前基本活动元素与结构化活动元素的编号相连形成一条边,进入步骤307;否则,进入步骤306;

步骤306、判断当前层下一个元素是否为throw,如果是,当前层的throw元素与该throw元素寻找的到异常程序中的第一个节点相连,并返回步骤303;否则,当前层下一个元素不存在,结束。

第一个节点是指异常程序中的结构化活动元素catchAll或catch;throw元素按BPEL语法标准寻找异常程序。

步骤307、判断结构化活动元素的内层元素是否为基本活动元素,如果是,该结构化活动元素与内层基本活动元素的编号相连形成边;否则,与内层结构化活动元素的编号相连形成边;

步骤四、将所有层提取的BPEL路径信息形成中间XML文档;

BPEL路径信息包括节点和边;其中节点是指每个基本活动元素的编号;边包括连边和边属性两部分;

BPEL路径形式为:from="编号"to="编号"condition="null/valid"flow="true/false";

步骤五、对中间XML文档,去除冗余元素,得到描述路径的XML文档;

具体去除方法为:针对两条BPEL不同的路径:当第一条路径中的to属性与第二条路径中的from属性中采用的编号值相同,且该编号大于分界编号时,删除该编号,将两条路径合并为一条路径;当两条路径的condition属性中至少有一个为valid,则合并condition属性为valid;当两条路径的flow属性至少有一个为true,则合并flow属性为true。

步骤六、利用XML解析工具读取描述路径的XML文档中的边以及节点;

步骤七、利用边和节点建立服务组合路径的邻接矩阵以及并行节点集合;

邻接矩阵为边和点的连接有向图;

并行节点集合为一维向量,用来存储邻接矩阵中具有并行分支路径的开始节点;每个开始节点向下一个节点相连边的flow属性均为true;并行节点用于记录并行路径信息。

步骤八、结合深度优先搜索算法,得到所有的服务组合路径;

首先、从邻接矩阵中提取所有路径并存储到总路径集合中;

所有路径包括无并行执行的路径和并行执行路径,其中并行执行路径的开始节点存放在并行节点集合中;

然后、从总路径集合中,将无并行执行路径一一提取并存储到临时存储空间;针对并行节点集合中的每个开始节点,将该开始节点下同时执行的至少两条路径分别提取,作为一组并行路径,放到临时存储空间。

具体提取过程为:针对并行节点集合中的每个开始节点,该开始节点下的所有同时执行的并行子节点,对每一个并行子节点对应的分支路径一一提取,并将同一个并行子节点下的所有分支路径存储在一个块结构中,从每个块结构中各选取一条分支路径组合在一起,形成一组并行路径,每个块结构中的所有分支路径都要被选取到。

不同的块结构中选取的分支路径为同时执行的路径。

最后、无并行执行路径和各组并行路径共同组成了所有的服务组合路径;

步骤九、将所有的服务组合路径,在路径执行条件下输出;

路径执行条件是指每条边上condition属性中的valid条件。

本发明的优点在于:

1)、一种基于流程编排的服务组合路径推导方法,能够自动化解析BPEL源文档,得到服务组合执行顺序,简化了测试人员的BPEL解析工作。

2)、一种基于流程编排的服务组合路径推导方法,能够完备的寻找到所有的服务组合路径,辅助测试过程,使得测试结果更加全面。

3)、一种基于流程编排的服务组合路径推导方法,能够辅助完成针对SOA软件系统的服务组合集成测试。

附图说明

图1是本发明一种基于流程编排的服务组合路径推导方法的流程图;

图2是对正常处理程序和异常处理程序提取出BPEL路径信息的流程图;

图3是本发明基于流程编排的服务组合路径推导具体实例示意图;

图4是结合深度优先搜索算法得到所有的服务组合路径的示意图;

图5是本发明第一个块结构的示意图;

图6是本发明第二个块结构的示意图。

具体实施方式

下面结合附图和具体实施例对本发明进行详细说明。

本发明一种基于流程编排的服务组合路径推导方法,在SOA软件中,通过读取BPEL源文档,解析业务流程编排语言,提取BPEL路径信息,生成中间XML文档,通过去除冗余,生成描述路径的XML文档;然后利用改进的深度优先搜索算法,实现对控制流程图的搜索,为SOA软件架构系统推导出服务组合路径用于系统测试,验证系统测试人员是否完整的测试了所有的服务组合路径,还可以指导测试用例的生成。

如图1所示,具体步骤如下:

步骤一:针对某段BPEL源文档,提取BPEL源文档中的XML元素并分别进行编号;

元素编号用来唯一确定特定的BPEL元素;BPEL源文档中的元素分为基本活动元素以及结构化活动元素,先对基本活动元素进行编号,紧接着对结构化活动元素进行编号,并记录两次编号的分界编号,用于在后期去冗余合并边处理中判断是否为需要合并的边,在此将最后一个基本活动元素的编号作为分界编号。

步骤二、按BPEL语法标准将该BPEL源文档划分为正常处理程序和异常处理程序;

正常处理程序与异常处理程序与BPEL语法规范介绍的故障处理代码概念一致,异常处理代码由标签名faulthandler引导。

本发明将BPEL的解析划分为两部分,第一部分为正常的处理程序,第二部分为异常的处理程序。正常处理程序主要包括基本活动元素与结构化活动元素组成的活动,异常处理程序为故障处理。

步骤三、分别对正常处理程序和异常处理程序提取出BPEL路径信息;

如图2所示,具体步骤为:

步骤301、首选针对某段程序,判断是否为正常程序,如果是,删除scope元素;否则,保留scope元素;

步骤302、从外层到内层逐层遍历该段程序中的每层编号后的元素;

步骤303、针对某层作为当前层,判断该层遍历到的当前元素是否为基本活动元素,如果是,进入步骤304,否则,进入步骤307;

步骤304、判断当前层下一个元素是否为基本活动元素;如果是,将两个基本活动元素的编号相连,形成一条边;否则,进入步骤305;

步骤305、判断当前层下一个元素是否为结构化活动元素,如果是,将当前基本活动元素与结构化活动元素的编号相连形成一条边,进入步骤307;否则,进入步骤306;

步骤306、判断当前层下一个元素是否为throw,如果是,当前层的throw元素与该throw元素寻找的到异常程序中的第一个节点相连,并返回步骤303;否则,当前层下一个元素不存在,结束。

第一个节点是指异常程序中的结构化活动元素catchAll或catch;throw元素按BPEL语法标准寻找异常程序。

步骤307、判断结构化活动元素的内层元素是否为基本活动元素,如果是,该结构化活动元素与内层基本活动元素的编号相连形成边;否则,与内层结构化活动元素的编号相连形成边;

步骤四、将所有层提取的BPEL路径信息形成中间XML文档;

BPEL路径信息包括节点和边;其中节点是指每个基本活动元素的编号;边包括连边和边属性两部分;连边形式为:from=……to=……;边属性形式为:condition=……,flow=……;

BPEL路径形式为:from="编号"to="编号"condition="null/valid"flow="true/false";

对于边的解释例如下面的例子:

<arc from="6"to="pick54start"condition="null"flow="false"/>

arc元素为处理过程中定义的边元素,from="6"to="pick54start"表示连边方向为服务节点6到编号为54的pick活动的开始元素标签,condition="null"表示连边上没有条件,flow="false"表示连边不为并行节点分支。

步骤五、对中间XML文档,去除冗余元素,得到描述路径的XML文档;

具体去除方法为:针对两条BPEL不同的路径:当第一条路径中的to属性与第二条路径中的from属性中采用的编号值相同,且该编号大于分界编号,删除该编号,将两条路径合并为一条路径;当两条路径的condition属性中至少有一个为valid,则合并condition属性为valid;当两条路径的flow属性至少有一个为true,则合并flow属性为true。

示例:<arc from="-2"to="sequence94start"condition="null"flow="true"/>

<arc from="sequence94start"to="3"condition="my_condition"flow="false"/>

针对该示例,XML文档中的两条arc中同时出现相同字符串"sequence94start",并且前一个arc中的该字符串位于to属性,后一个arc中的该字符串位于from属性,且该属性的编号大于分界编号,说明该属性可删除,将这两条arc中的相同字符串删除,并合并为一条arc边;得到:<arc from="-2"to="3"/>;

同时,判断这两条边的condition有一个不为null,将合并的condition置位为"my_condition",同理这两条边只要有一个flow="true"则合并的flow置位为"true"。得到:<arc from="-2"to="3"condition="my_condition"flow="true"/>;

步骤六、利用XML解析工具读取描述路径的XML文档中的边以及节点。

利用DOM4J处理XML格式文件(描述路径的XML文档),BPEL的各个元素在同级时是平级没有特定顺序的,实现时:从BPEL中提取元素放入队列中,利用队列提供的顺序及其简便的存取操作可以完成相应的规则处理。遍历各个节点与边元素的属性,并利用哈希表存储节点与边的信息。

如图3所示,每个节点编号代表一个服务,每一个节点间连边的编号代表服务路径的触发事件或者条件。节点通过有向边相连,表示服务执行的顺序,例如:其中一个服务执行顺序为-2、4、6、8、5、0。-2特指所有服务路径的开始节点,4、6、8、5、0以节点顺序的方式表示了服务执行顺序。节点6和节点8之间有一个执行触发事件:7,即编号为7的这个服务事件如果发生,系统执行完编号为6的服务后会继续执行编号为8的服务。

步骤七、根据边和节点建立服务组合路径的邻接矩阵以及并行节点集合。

邻接矩阵为边和点的有向图;本示例中定义节点编号-2的节点为服务路径的开始节点。

邻接矩阵需要存储边的condition属性,所以定义邻接矩阵为String类型,若边元素的condition属性不为空,在邻接矩阵相应的位置填入condition的信息。

与传统的邻接矩阵的区别在于:1)类型不同,传统的邻接矩阵一般为布尔类型,而该邻接矩阵为String类型;2)存储内容不同,传统的邻接矩阵为非0即1的存储形式,而该邻接矩阵有三种内容:若两节点间不存在连边,邻接矩阵对应位置为空;若两节点间有连边无条件,则邻接矩阵对应位置为1;若两节点间有连边并且两节点间服务顺序执行有条件,则邻接矩阵对应位置为对应的条件。

示例如下:

针对该示例,得到的邻接矩阵如下:

对邻接矩阵处理时有两种处理方式,分别为:1)读取邻接矩阵元素,若为空,则说明节点间无连边,若不为空则说明节点间有连边;2)服务组合路径输出时若读取到非空且不为1的字符串,则说明边上有条件,输出时需要将其加入。

其中矩阵外数字表示服务节点,矩阵内元素1表示无条件的连边,例如,服务节点4和服务节点6对应矩阵元素为1,表示服务节点4与服务节点6相连;矩阵内元素7、9、11、13表示连边的条件,例如,服务节点6与服务节点8对应矩阵元素7,表示服务节点6执行完后,以服务7为触发条件,才能执行服务节点8。

并行节点集合为一维向量,用来存储邻接矩阵中具有并行分支路径的开始节点;每个开始节点向下一个节点相连边的flow属性均为true;并行节点用于记录并行路径信息。该示例并行节点集合为{4}。

步骤八、结合改进的深度优先搜索算法,得到所有的服务组合路径;

如图4所示,将BPEL控制流程图的邻接矩阵(包含条件condition的信息)生成多条路径,分别存储到默认无并行的路径存储空间,并将无并行路径写入所有服务组合路径临时存储空间;同时,从flow属性为true的边对应的并行开始节点集合生成块结构,每个块结构包括多个特定flow节点下的非并行分支路径,将所有的块结构组合生成的并行路径,写入所有服务组合路径临时存储空间,读取路径执行条件输出所有服务组合路径临时存储空间的路径;

BPEL标准中存在并行结构—flow,同一时间会出现多条服务路径同时执行,本发明将同时执行的多条路径作为一条路径,这样符合SOA路径搜索的实际意义需求。

具体步骤如下:

步骤801、从邻接矩阵中提取所有路径并存储到总路径集合中;

通过改进的算法可以解决路径合并到同一节点时,传统深度优先搜索算法无法遍历路径的问题,具体如下:

首先,搜索当前路径,判断当前节点是否被遍历,若未被遍历则将该节点加入路径,否则,继续判断当前路径存储空间中的路径子集是否存在,如果与搜索到的当前路径(包括当前节点)完全重合,则该节点不能加入路径,否则将该节点加入路径。

该示例得到的所有路径如下所示:

<-2><4><6><15>;<-2><4><10><15>;<-2><4><6><5><0>;<-2><4><10><5><0>;

<-2><4><6><8><5><0>;<-2><4><10><12><5><0>;<-2><-1><2>;

<n>表示编号为n的服务节点。

所有路径包括无并行执行的路径和并行执行路径,其中并行执行路径的开始节点存放在并行节点集合中;

步骤802、从总路径集合中,将无并行执行路径一一提取并存储到临时存储空间;

无并行执行路径为:<-2><-1><2>。

步骤803、针对并行节点集合中的每个开始节点,将该开始节点下同时执行的至少两条路径分别提取,作为一组并行路径,放到临时存储空间。

具体提取过程为:针对并行节点集合中的每个开始节点,该开始节点下的所有同时执行的并行子节点,对每一个并行子节点对应的分支路径一一提取,并将同一个并行子节点下的所有分支路径存储在一个块结构中,从每个块结构中各选取一条分支路径组合在一起,形成一组并行路径,每个块结构中的所有分支路径都要被选取到。

不同的块结构中选取的分支路径为同时执行的路径。

该示例中并行节点集合为{4},并行子节点为{6,10};得到的块结构为2个;

如图5所示,块1包括:<-2><4><6><15>;<-2><4><6><5><0>;<-2><4><6><8><5><0>;

如图6所示,块2包括:<-2><4><10><15>;<-2><4><10><5><0>;<-2><4><10><12><5><0>;

步骤804、无并行执行路径和各组并行路径共同组成了所有的服务组合路径;

块1中的路径集合x1与块2中的路径集合x2分别有三条路径,两组集合的路径两两组合可生成9条并行路径。同时把无并行执行路径为:<-2><-1><2>加入到总的服务组合路径中,总共得到10条路径。

如下所示:

path1:<-2><4><6><15>;<-2><4><10><15>

path2:<-2><4><6><5><0>;<-2><4><10><5><0>

path3:<-2><4><6><8><5><0>;<-2><4><10><5><0>

path4:<-2><4><6><15>;<-2><4><10><5><0>

path5:<-2><4><6><5><0>;<-2><4><10><12><5><0>

path6:<-2><4><6><8><5><0>;<-2><4><10><12><5><0>

path7:<-2><4><6><15>;<-2><4><10><12><5><0>

path8:<-2><4><6><5><0>;<-2><4><10><15>

path9:<-2><4><6><8><5><0>;<-2><4><10><15>

Path10:<-2><-1><2>

步骤九、将所有的服务组合路径,在路径执行条件下输出;

将所有无并行路径和所有并行路径,结合邻接矩阵中的condition信息,一并作为服务组合路径输出;路径执行条件是指每条边上condition属性中的valid条件。

读取所有服务组合路径临时存储空间以及带有condition条件属性的邻接矩阵,如果两节点间有condition属性,则在路径输出时的两节点间加入condition属性。

最终得到所有服务组合路径为:

path1:<-2><4><6>-9-<15>;<-2><4><10>-13-<15>

path2:<-2><4><6><5><0>;<-2><4><10><5><0>

path3:<-2><4><6>-7-<8><5><0>;<-2><4><10><5><0>

path4:<-2><4><6>-9-<15>;<-2><4><10><5><0>

path5:<-2><4><6><5><0>;<-2><4><10>-11-<12><5><0>

path6:<-2><4><6>-7-<8><5><0>;<-2><4><10>-11-<12><5><0>

path7:<-2><4><6>-9-<15>;<-2><4><10>-11-<12><5><0>

path8:<-2><4><6><5><0>;<-2><4><10>-13-<15>

path9:<-2><4><6>-7-<8><5><0>;<-2><4><10>-13-<15>

path10:<-2><-1>-1-<2>;

其中-a-表示路径执行条件为a。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号