CN109933527B - 一种基于组件执行树模型的集成测试方法及系统 - Google Patents
一种基于组件执行树模型的集成测试方法及系统 Download PDFInfo
- Publication number
- CN109933527B CN109933527B CN201910178427.3A CN201910178427A CN109933527B CN 109933527 B CN109933527 B CN 109933527B CN 201910178427 A CN201910178427 A CN 201910178427A CN 109933527 B CN109933527 B CN 109933527B
- Authority
- CN
- China
- Prior art keywords
- message
- nodes
- uml
- tree model
- condition
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于组件执行树模型的集成测试方法及系统。所述集成测试方法包括:获取组件级别的统一建模语言UML协作图和合约模型;根据所述UML协作图和所述合约模型建立组件执行树模型;对所述组件执行树模型进行路径分析,确定路径约束;根据所述路径约束生成集成测试用例;根据所述集成测试用例对软件系统进行测试。采用本发明所提供的集成测试方法及系统能够提高测试软件系统质量的测试精确度。
Description
技术领域
本发明涉及软件测试领域,特别是涉及一种基于组件执行树模型的集成测试方法及系统。
背景技术
从1968年北大西洋公约组织(NATO)软件工程会议上出现软件复用的概念,到如今已经历了50年的时间,随着软件系统复杂性的增加,规模的扩大,以及软件开发机构对开发成本、开发周期要求的提高,继面向对象分析与设计方法之后,基于组件的软件开发(Component-Based Software Development,简称CBSD)方法被广泛接受,即将外部开发的组件集成到具体应用环境中来构建面向特定应用的软件系统;该方法的提出解决了面向对象技术无法使大量结构相似的应用程序结构得到重用的矛盾,因此对软件重用和集成具有非常重大的意义。与此同时,相关的质量保证技术和方法也成为重要的研究内容。
由于组件在集成到应用环境之前,已经进行了相关测试,所以理论上基于组件的软件系统(Component-Based Software System)已经具备了高可靠性。然而,许多工程实践证明并不是这样,由于在将各种组件集成到应用环境时,实施有效的集成测试成为基于组件的软件系统质量保证的重要手段,但是现有的集成测试方法缺少良好的集成测试模型,导致出现测试软件系统质量的测试精确度低的问题。
发明内容
本发明的目的是提供一种基于组件执行树模型的集成测试方法及系统,以解决测试软件系统质量时测试精确度低的问题。
为实现上述目的,本发明提供了如下方案:
一种基于组件执行树模型的集成测试方法,包括:
获取组件级别的统一建模语言UML协作图和合约模型;所述UML协作图包括组件、链以及消息;所述UML协作图中的消息为带有消息标签的箭头,并附在链上;消息标签包含消息序号、消息条件、消息类型、发送对象、接收对象以及要激活的方法;所述合约模型为所述UML协作图中涉及的所有要激活的方法对应的所有合约的集合;所述合约模型包括前置条件以及后置条件;
根据所述UML协作图和所述合约模型建立组件执行树模型;
对所述组件执行树模型进行路径分析,确定路径约束;
根据所述路径约束生成集成测试用例;
根据所述集成测试用例对软件系统进行测试。
可选的,所述根据所述UML协作图和所述合约模型建立组件执行树模型,具体包括:
根据所述UML协作图中的消息确定所述UML协作图以及所述组件执行树模型之间的映射表;
根据所述映射表将所述UML协作图中的消息转换为组件执行树模型的多个节点,并建立节点之间的关系;
根据所述节点之间的关系,结合所述合约模型,建立组件执行树模型。
可选的,所述对所述组件执行树模型进行路径分析,确定路径约束,具体包括:
根据所述组件执行树模型的结构形式确定叶子节点集合;一个叶子节点对应一条路径;
从叶子节点开始,逐层向上回溯,直至根节点,确定经过的节点上的节点约束;
根据所述节点约束,以合取的方式进行串联,确定路径约束。
可选的,所述根据所述路径约束生成集成测试用例,具体包括:
利用约束求解器确定所述路径约束的解;
以所述路径约束的解作为测试输入,以所述合约模型中的后置条件作为测试预示,生成集成测试用例。
一种基于组件执行树模型的集成测试系统,包括:
UML协作图和合约模型获取模块,用于获取组件级别的统一建模语言UML协作图和合约模型;所述UML协作图包括组件、链以及消息;所述UML协作图中的消息为带有消息标签的箭头,并附在链上;消息标签包含消息序号、消息条件、消息类型、发送对象、接收对象以及要激活的方法;所述合约模型为所述UML协作图中涉及的所有要激活的方法对应的所有合约的集合;所述合约模型包括前置条件以及后置条件;
组件执行树模型建立模块,用于根据所述UML协作图和所述合约模型建立组件执行树模型;
路径约束确定模块,用于对所述组件执行树模型进行路径分析,确定路径约束;
集成测试用例生成模块,用于根据所述路径约束生成集成测试用例;
测试模块,用于根据所述集成测试用例对软件系统进行测试。
可选的,所述组件执行树模型建立模块具体包括:
映射表确定单元,用于根据所述UML协作图中的消息确定所述UML协作图以及所述组件执行树模型之间的映射表;
节点之间的关系建立单元,用于根据所述映射表将所述UML协作图中的消息转换为组件执行树模型的多个节点,并建立节点之间的关系;
组件执行树模型建立单元,用于根据所述节点之间的关系,结合所述合约模型,建立组件执行树模型。
可选的,所述路径约束确定模块具体包括:
叶子节点集合确定单元,用于根据所述组件执行树模型的结构形式确定叶子节点集合;一个叶子节点对应一条路径;
节点约束确定单元,用于从叶子节点开始,逐层向上回溯,直至根节点,确定经过的节点上的节点约束;
路径约束确定单元,用于根据所述节点约束,以合取的方式进行串联,确定路径约束。
可选的,所述集成测试用例生成模块具体包括:
路径约束的解确定单元,用于利用约束求解器确定所述路径约束的解;
集成测试用例生成单元,用于以所述路径约束的解作为测试输入,以所述合约模型中的后置条件作为测试预示,生成集成测试用例。
根据本发明提供的具体实施例,本发明公开了以下技术效果:本发明提供了一种基于组件执行树模型的集成测试方法及系统,通过UML协作图和所述合约模型建立组件执行树模型,并对所述组件执行树模型进行路径分析,确定路径约束;根据所述路径约束生成集成测试用例。在统一建模语言(Unified Modeling Language,UML)的众多模型中,协作图主要用来描述系统对象间的协作和交互关系;基于组件开发的软件系统功能由组件的交互来完成;组件间的交互既有直接的方式也有间接的方式:直接交互就是使用组件的接口实现交互,而间接交互则是通过消息传递的方式完成;由于协作图可以描述组件之间的交互关系,而系统的功能又是通过这些交互来实现,所以UML协作图是一种良好的集成测试模型。因此,在将各种组件集成到应用环境,构成基于组件的软件系统时,UML协作图和合约模型作为良好的集成测试模型,能够提高测试软件系统质量的测试精确度,为软件系统质量保驾护航。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明所提供的基于组件执行树模型的集成测试方法流程图;
图2为本发明所提供的ATM机的UML协作图;
图3为本发明所提供的如图2所示的UML协作图和合约模型构建的组件执行树模型示意图;
图4为本发明所提供的基于组件执行树模型的集成测试系统结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的目的是提供一种基于组件执行树模型的集成测试方法及系统,能够提高测试软件系统质量的测试精确度。
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
图1为本发明所提供的基于组件执行树模型的集成测试方法流程图,如图1所示,一种基于组件执行树模型的集成测试方法,包括:
步骤101:获取组件级别的统一建模语言UML协作图和合约模型;所述UML协作图包括组件、链以及消息;所述UML协作图中的消息为带有消息标签的箭头,并附在链上;消息标签包含消息序号、消息条件、消息类型、发送对象、接收对象以及要激活的方法;所述合约模型为所述UML协作图中涉及的所有要激活的方法对应的所有合约的集合;所述合约模型包括前置条件以及后置条件。
UML协作图由三种元素组成:对象、链和消息。
在组件级别的协作图中,对象指组件。组件是一系列方法的封装,它仅对外提供有限的关于方法的信息,包括方法名称、输入输出参数以及合约等信息。每个方法对应一个合约。合约是访问组件内部方法时必须遵守的约束条件,包括前置条件和后置条件,分别表示调用方法前后必须满足的约束条件,并用一阶逻辑表示。对于一个正确的方法,如果输入满足前置条件,则其必定得到满足后置条件的输出。协作图中涉及的各组件对象中的方法,对应一系列的合约,由此构成合约模型。
对象之间由链进行连接。协作图中的消息用带有消息标签的箭头表示,附在链上,从发送对象指向接收对象,表示要调用的操作。一条链上可以有多个消息,沿着相同或不同方向传递。组件A发送消息给组件B,表示组件A请求组件B提供某项服务,这项服务由消息标签描述,从而导致相应的方法被激活。因此,合约模型中的合约对应的是会被协作图中的消息激活的方法,而不是组件对象的所有方法。
消息标签包含消息序号、消息条件、消息类型、发送对象、接收对象,以及要激活的方法:
1)消息序号是一个序列表达式,是用点(“.”)分隔的序列项列表。每个序列项表示一个嵌套层次,格式为[integer|name][recurrence],其中integer指定消息执行顺序,例如消息1总是消息序列的开始消息,消息1.1和1.2分别是消息1执行过程中的第一、第二条嵌套消息;name表示并发控制线程;recurrence表示循环,即条件或迭代的执行,表示根据条件执行零个或多个消息。需要注意的是,嵌套消息构成的序列表示偏序关系,当一个消息不执行时,其嵌套消息也不执行。协作图中的所有消息根据消息序号排列,构成一个消息序列。
2)消息条件表示执行一个消息必须满足的条件,用一阶逻辑表示。条件取值为真时消息执行,否则不执行。
3)消息类型有三种:普通消息、条件消息和循环消息。其中,普通消息的消息条件为空;条件消息在消息条件取真时执行,否则不执行该消息及其嵌套消息;循环消息的循环体为其嵌套消息,消息条件取真时,循环执行,否则不执行。
4)发送对象,即发送消息的组件。
5)接收对象,即接收消息的组件。
6)消息会激活一个方法,这个方法是接收对象中的方法,是发送对象请求的服务,也是系统要调用的操作。
UML协作图所表示的协作是从一个外部事件触发开始,参与协作的组件以消息传递的方式完成一系列的交互,最后不再产生消息时协作结束,得到一个外部输出结果。多条顺序消息串联成的序列可以表征系统的一次执行。
UML协作图刻画了系统功能的执行过程,每个系统任务都对应了协作图上的一条执行路径。基于组件的软件系统的集成测试应该能够反映不同任务下系统执行过程的正确性,即对每一条执行路径给出测试数据进行测试。
步骤102:根据所述UML协作图和所述合约模型建立组件执行树模型。
所述步骤102具体包括:根据所述UML协作图中的消息确定所述UML协作图以及所述组件执行树模型之间的映射表;根据所述映射表将所述UML协作图中的消息转换为组件执行树模型的多个节点,并建立节点之间的关系;根据所述节点之间的关系,结合所述合约模型,建立组件执行树模型。
根据所述UML协作图、合约模型与所述组件执行树模型的关系,制定所述UML协作图、合约模型与所述组件执行树模型之间的转换规则:
首先定义组件执行树模型。组件执行树是有向树,由结点和有向边构成。每个节点对应一个消息,并保存着由消息条件和方法合约组成的节点约束。根节点表示初始消息,即没有前驱消息的消息,它通常是由一个外部事件触发,叶子节点表示终止消息,即没有后继消息的消息,它会导致一个外部输出结果。有向边则表示消息的执行顺序。
由这些节点和有向边构成的路径称为功能执行路径。需要注意的是,当消息上的条件取假时,该条件会在取反后存储在其它消息对应的节点上,例如,“1→2→3”是条件消息2上的条件取真时形成的功能执行路径,此时该条件存储在消息2对应的节点上,当条件取假时形成功能执行路径“1→3”,此时该条件会在取反后存储在消息3对应的节点上,所以该节点同时存储了消息条件3和取反的消息条件2。
然后制定所述UML协作图、合约模型与所述组件执行树模型之间的转换规则。将所述UML协作图、合约模型转换成所述组件执行树模型的过程,实际上就是将所述UML协作图中的消息映射成所述组件执行树模型的节点的过程。在这个过程中,创建一个映射表记录映射信息。具体映射算法如下所示。
该算法中,message表示要映射的消息;n表示该消息要映射的节点数,一个消息可能映射成多个节点,例如消息序列“1→2→3”,由于消息2是条件消息,所以该序列会形成两条功能执行路径“1→2→3”和“1→3”,此时消息3就映射成了两个节点;condition表示处理后的消息条件,它可能直接就是message上的条件,也可能是message上的条件的其它形式,还是以消息序列“1→2→3”为例,它形成的功能执行路径“1→2→3”中,消息3映射时的condition为消息条件3,另一条功能执行路径“1→3”中,消息3映射时的condition为消息条件3和取反的消息条件2的合取。除此之外,还存在一种特殊情况:以消息序列“1→2”为例,由于消息2既是条件消息,又是终止消息,所以当条件取假时,为了保持功能执行路径的完整性,创建一个虚拟节点v构成功能执行路径“1→v”,其中在映射虚拟节点v时,map()方法的message为null,condition是取反的消息条件2。
根据所述转换规则将所述UML协作图的消息及相关合约转换为组件执行树模型的节点,并建立节点之间的关系:
根据消息序号和消息类型,依次处理UML协作图中的消息。
由于第一个消息可能是条件或循环消息,导致一开始就产生分支,从而生成森林,所以为了避免这种情况,在消息序列头部添加一个内容为空的消息,用于映射成虚拟根节点。
对于普通消息,直接将其映射成节点,节点数与其前驱消息映射的节点数相同,并将这些节点作为前驱消息映射节点的孩子节点,建立一一对应的关系。
对于条件消息,首先检查该消息是否在映射表中已存在。若已存在,这些已存在的节点可以看作消息条件取真时映射的节点,需要补充消息条件取假时映射的节点,即跳过该消息及其嵌套消息,将后续消息映射成节点,节点数与这些已存在的节点数相同,并将它们作为这些已存在的节点的兄弟节点,建立一一对应的关系。
然后,处理当前条件消息。消息条件取真时的处理方式与普通消息相同,消息条件取假时则跳过该消息及其嵌套消息,将后续消息映射成节点,节点数与当前条件消息的前驱消息映射节点数相同,并将这些节点作为当前条件消息的前驱消息映射节点的孩子节点,建立一一对应的关系。这里的后续消息是未经处理的消息,上述操作可能导致未经处理的条件消息提前出现在映射表中,并映射成节点,所以在处理条件消息前要先判断其是否已存在于映射表中;
对于循环消息,为了避免路径爆炸问题,限制循环执行0、1,所以处理方式和条件消息相同。
步骤103:对所述组件执行树模型进行路径分析,确定路径约束。
所述步骤103具体包括:根据所述组件执行树模型的结构形式确定叶子节点集合;一个叶子节点对应一条路径;从叶子节点开始,逐层向上回溯,直至根节点,确定经过的节点上的节点约束;根据所述节点约束,以合取的方式进行串联,确定路径约束。
一条路径的路径约束是其上所有节点的节点约束的合取,所以“经过的节点”是指包括“根节点”和“叶子节点”在内的该路径上的所有节点。
“根节点”和“叶子节点”都是“节点”,只不过它们是特殊的“节点”。
“节点”涵盖了“根节点”和“叶子节点”。
消息上的条件导致分支的产生,从而形成树结构。消息激活对应的方法,但访问组件内部方法的前提是满足对应方法的合约,所以合约也是节点约束的一部分。
组件执行树结构的形成归功于协作图中的控制流信息,因此协作图中的路径对应组件执行树中的功能执行路径,从而将问题转换到对组件执行树中的功能执行路径的分析和处理上。
路径约束表示执行一条功能执行路径必须满足的约束,它是路径上各节点约束的合取,因此获取路径约束需要遍历功能执行路径中的节点。具体包括如下步骤:
从叶子节点开始,遍历一条路径,收集节点约束,构成路径约束。首先根据所述组件执行树模型的结构形式,找到叶子节点集合;在所述组件执行树模型中,一个叶子节点对应一条路径。遍历一条路径,是从叶子节点开始,逐层向上回溯,直至根节点;在这个过程中,记录下经过的节点上的节点约束,以合取的方式进行串联,形成路径约束,表示执行该功能执行路径必须满足的条件。
重复上述步骤,遍历所述组件执行树模型的所有路径,得到所有路径的路径约束。
步骤104:根据所述路径约束生成集成测试用例。
所述步骤104具体包括:利用约束求解器确定所述路径约束的解;以所述路径约束的解作为测试输入,以所述合约模型中的后置条件作为测试预示,生成集成测试用例。其中,测试输入用于执行程序,测试预示用于检查程序输出的正确性。
获取约束求解器,将所述路径约束导入约束求解器。
布尔可满足性问题(Boolean SatisfiabilityProblem,SAT)是命题逻辑公式的可满足性问题,即给定一个命题逻辑公式,判断是否存在一组赋值,使得该公式是可满足的;SAT的求解对象是命题逻辑公式,其表达能力局限于命题演算,为增强其表达能力,研究者们通过在SAT基础上添加“理论”,将其扩展为可满足性模理论(Satisfiability ModuloTheories,SMT),SMT问题是特定(背景)理论下,判断一阶逻辑公式是否可满足的问题。
现如今,约束求解主要依赖于可满足性模理论SMT。国际上自2005年开始,每年举办SMT竞赛,2016和2017年排名居前的几个求解器是Z3,CVC4,Yices2,SMTInterpol,veriT和MathSat5。因此,我们选用Z3求解器。
得到路径约束的解作为测试输入,并将该路径叶子节点处的合约后置条件作为测试预示(test oracle),从而得到完整的集成测试用例。测试用例的组成包括用例编号、用例对应的路径、测试输入和测试预示。
步骤105:根据所述集成测试用例对软件系统进行测试。
图2为本发明所提供的ATM机的UML协作图;如图2所示,图2描述的是ATM机的取款功能,包含五个组件:Client,CardReader,ATMScreen,Account和Withdrawer。将ATM机的初始状态设置为:账户余额30000元。另外,为方便起见,用数字指代ATM机的相应功能,则功能列表为:0——存款,1——取款,2——转账,3——查询,4——修改密码。该协作图中消息5是循环消息,消息9是条件消息,其余都为普通消息。
该协作图中各消息的消息标签如下所示:
1:isBankCard:=(boolean)insertCard(booleanbankCard)
2:isValidCard:=(boolean)readCard(booleanbankCard)
3:initSucc:=(boolean)initializeScreen()
4:inputPwdSucc:=(boolean)inputPwd(boolean validPwd)
4.1,5.1:isValidPwd:=(boolean)validatePwd(booleanvalidPwd)
5:*[!isValidPwd&&i:=1...3]inputPwdSucc:=(boolean)inputPwd(booleanvalidPwd)
6:dispSucc:=(boolean)displayMenu()
7:seleSucc:=(boolean)selectAction(int action)
8:inputAmountSucc:=(boolean)inputAmount(int amount)
9:[amount<=30000]deductSucc:=(boolean)deductMoney(int amount)
9.1:spitSucc:=(boolean)spitMoney()
10:opCompleted:=(boolean)ejectCard()
以消息标签“9:[amount<=30000]deductSucc:=(boolean)deductMoney(intamount)”为例,“9”是消息序号,中括号内的“amount<=30000”是消息条件,“deductSucc:=(boolean)deductMoney(int amount)”是要激活的方法的声明。另外,消息5的消息标签中的“*”表示该消息是循环消息。
该协作图对应的合约模型如表1所示。
表1
图3为本发明所提供的根据如图2所示的UML协作图和如表1所示的合约模型构建的组件执行树模型示意图。
如图3所示,以功能执行路径“1→2→3→4→4.1→6→7→8→10”为例,该路径中,循环消息执行0次,条件消息上的条件取假,即输入密码有效,输入金额超出账户余额。收集该路径上的节点约束(包括消息条件和方法合约),并去除与输入无关的约束,最终得到的路径约束为“ ”。使用求解器求解该路径约束,得到测试输入为(true,true,1,35000)。另外以叶子节点上后置条件“opCompleted==true”作为测试预示,构成的测试用例如表2所示。
表2
测试用例表示的执行情况为:插入了正确的银行卡,输入了正确的密码,并选择了取款功能,但输入的取款金额大于账户余额,导致取款失败,然后退卡。“opCompleted==true”表示退卡成功,若最后退卡失败,则说明该系统中的组件交互存在错误,组件在系统中没有表现出用户期望的行为。
本发明提供的技术方案可以在UML协作图和合约模型的基础上自动生成集成测试用例,从而为软件系统的质量保驾护航。
图4为本发明所提供的基于组件执行树模型的集成测试系统结构图。如图4所示,一种基于组件执行树模型的集成测试系统,包括:
UML协作图和合约模型获取模块401,用于获取组件级别的统一建模语言UML协作图和合约模型;所述UML协作图包括组件、链以及消息;所述UML协作图中的消息为带有消息标签的箭头,并附在链上;消息标签包含消息序号、消息条件、消息类型、发送对象、接收对象以及要激活的方法;所述合约模型为所述UML协作图中涉及的所有要激活的方法对应的所有合约的集合;所述合约模型包括前置条件以及后置条件。
组件执行树模型建立模块402,用于根据所述UML协作图和所述合约模型建立组件执行树模型。
所述组件执行树模型建立模块402具体包括:映射表确定单元,用于根据所述UML协作图中的消息确定所述UML协作图以及所述组件执行树模型之间的映射表;节点之间的关系建立单元,用于根据所述映射表将所述UML协作图中的消息转换为组件执行树模型的多个节点,并建立节点之间的关系;组件执行树模型建立单元,用于根据所述节点之间的关系,结合所述合约模型,建立组件执行树模型。
路径约束确定模块403,用于对所述组件执行树模型进行路径分析,确定路径约束。
所述路径约束确定模块403具体包括:叶子节点集合确定单元,用于根据所述组件执行树模型的结构形式确定叶子节点集合;一个叶子节点对应一条路径;节点约束确定单元,用于从叶子节点开始,逐层向上回溯,直至根节点,确定经过的节点上的节点约束;路径约束确定单元,用于根据所述节点约束,以合取的方式进行串联,确定路径约束。
集成测试用例生成模块404,用于根据所述路径约束生成集成测试用例。
所述集成测试用例生成模块404具体包括:路径约束的解确定单元,用于利用约束求解器确定所述路径约束的解;集成测试用例生成单元,用于以所述路径约束的解作为测试输入,以所述合约模型中的后置条件作为测试预示,生成集成测试用例。
测试模块405,用于根据所述集成测试用例对软件系统进行测试。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。
Claims (6)
1.一种基于组件执行树模型的集成测试方法,其特征在于,包括:
获取组件级别的统一建模语言UML协作图和合约模型;所述UML协作图包括组件、链以及消息;所述UML协作图中的消息为带有消息标签的箭头,并附在链上;消息标签包含消息序号、消息条件、消息类型、发送对象、接收对象以及要激活的方法;所述合约模型为所述UML协作图中涉及的所有要激活的方法对应的所有合约的集合;所述合约模型包括前置条件以及后置条件;
根据所述UML协作图和所述合约模型建立组件执行树模型;
对所述组件执行树模型进行路径分析,确定路径约束;
根据所述路径约束生成集成测试用例;
根据所述集成测试用例对软件系统进行测试;
所述根据所述UML协作图和所述合约模型建立组件执行树模型,具体包括:
根据所述UML协作图中的消息确定所述UML协作图以及所述组件执行树模型之间的映射表;
根据所述映射表将所述UML协作图中的消息转换为组件执行树模型的多个节点,并建立节点之间的关系;
根据所述节点之间的关系,结合所述合约模型,建立组件执行树模型;
所述根据所述映射表将所述UML协作图中的消息转换为组件执行树模型的多个节点,并建立节点之间的关系,具体包括:
根据消息序号和消息类型,依次处理UML协作图中的消息;
在消息序列头部添加一个内容为空的消息,用于映射成虚拟根节点;
对于普通消息,直接将其映射成节点,节点数与其前驱消息映射的节点数相同,并将所述节点作为前驱消息映射节点的孩子节点,建立一一对应的关系;
对于条件消息,首先检查所述条件消息是否在映射表中已存在,若已存在,这些已存在的节点看作消息条件取真时映射的节点,需要补充消息条件取假时映射的节点,并将它们作为这些已存在的节点的兄弟节点,建立一一对应的关系;
然后,处理当前条件消息,消息条件取真时的处理方式与普通消息相同,消息条件取假时则跳过该消息及其嵌套消息,将后续消息映射成节点,节点数与当前条件消息的前驱消息映射节点数相同,并将这些节点作为当前条件消息的前驱消息映射节点的孩子节点,建立一一对应的关系;
对于循环消息,限制循环执行0、1,处理方式和条件消息相同。
2.根据权利要求1所述的基于组件执行树模型的集成测试方法,其特征在于,所述对所述组件执行树模型进行路径分析,确定路径约束,具体包括:
根据所述组件执行树模型的结构形式确定叶子节点集合;一个叶子节点对应一条路径;
从叶子节点开始,逐层向上回溯,直至根节点,确定经过的节点上的节点约束;
根据所述节点约束,以合取的方式进行串联,确定路径约束。
3.根据权利要求1所述的基于组件执行树模型的集成测试方法,其特征在于,所述根据所述路径约束生成集成测试用例,具体包括:
利用约束求解器确定所述路径约束的解;
以所述路径约束的解作为测试输入,以所述合约模型中的后置条件作为测试预示,生成集成测试用例。
4.一种基于组件执行树模型的集成测试系统,其特征在于,包括:
UML协作图和合约模型获取模块,用于获取组件级别的统一建模语言UML协作图和合约模型;所述UML协作图包括组件、链以及消息;所述UML协作图中的消息为带有消息标签的箭头,并附在链上;消息标签包含消息序号、消息条件、消息类型、发送对象、接收对象以及要激活的方法;所述合约模型为所述UML协作图中涉及的所有要激活的方法对应的所有合约的集合;所述合约模型包括前置条件以及后置条件;
组件执行树模型建立模块,用于根据所述UML协作图和所述合约模型建立组件执行树模型;
路径约束确定模块,用于对所述组件执行树模型进行路径分析,确定路径约束;
集成测试用例生成模块,用于根据所述路径约束生成集成测试用例;
测试模块,用于根据所述集成测试用例对软件系统进行测试;
所述组件执行树模型建立模块具体包括:
映射表确定单元,用于根据所述UML协作图中的消息确定所述UML协作图以及所述组件执行树模型之间的映射表;
节点之间的关系建立单元,用于根据所述映射表将所述UML协作图中的消息转换为组件执行树模型的多个节点,并建立节点之间的关系,具体包括:
根据消息序号和消息类型,依次处理UML协作图中的消息;
在消息序列头部添加一个内容为空的消息,用于映射成虚拟根节点;
对于普通消息,直接将其映射成节点,节点数与其前驱消息映射的节点数相同,并将所述节点作为前驱消息映射节点的孩子节点,建立一一对应的关系;
对于条件消息,首先检查所述条件消息是否在映射表中已存在,若已存在,这些已存在的节点看作消息条件取真时映射的节点,需要补充消息条件取假时映射的节点,并将它们作为这些已存在的节点的兄弟节点,建立一一对应的关系;
然后,处理当前条件消息,消息条件取真时的处理方式与普通消息相同,消息条件取假时则跳过该消息及其嵌套消息,将后续消息映射成节点,节点数与当前条件消息的前驱消息映射节点数相同,并将这些节点作为当前条件消息的前驱消息映射节点的孩子节点,建立一一对应的关系;
对于循环消息,限制循环执行0、1,处理方式和条件消息相同;
组件执行树模型建立单元,用于根据所述节点之间的关系,结合所述合约模型,建立组件执行树模型。
5.根据权利要求4所述的基于组件执行树模型的集成测试系统,其特征在于,所述路径约束确定模块具体包括:
叶子节点集合确定单元,用于根据所述组件执行树模型的结构形式确定叶子节点集合;一个叶子节点对应一条路径;
节点约束确定单元,用于从叶子节点开始,逐层向上回溯,直至根节点,确定经过的节点上的节点约束;
路径约束确定单元,用于根据所述节点约束,以合取的方式进行串联,确定路径约束。
6.根据权利要求4所述的基于组件执行树模型的集成测试系统,其特征在于,所述集成测试用例生成模块具体包括:
路径约束的解确定单元,用于利用约束求解器确定所述路径约束的解;
集成测试用例生成单元,用于以所述路径约束的解作为测试输入,以所述合约模型中的后置条件作为测试预示,生成集成测试用例。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910178427.3A CN109933527B (zh) | 2019-03-11 | 2019-03-11 | 一种基于组件执行树模型的集成测试方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910178427.3A CN109933527B (zh) | 2019-03-11 | 2019-03-11 | 一种基于组件执行树模型的集成测试方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109933527A CN109933527A (zh) | 2019-06-25 |
CN109933527B true CN109933527B (zh) | 2022-05-03 |
Family
ID=66986721
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910178427.3A Active CN109933527B (zh) | 2019-03-11 | 2019-03-11 | 一种基于组件执行树模型的集成测试方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109933527B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102722441A (zh) * | 2012-06-11 | 2012-10-10 | 清华大学 | 智能的uml模型的形式化检测方法及装置 |
CN106951368A (zh) * | 2017-03-12 | 2017-07-14 | 北京工业大学 | 基于uml时序图的测试用例自动生成方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7581138B2 (en) * | 2005-10-24 | 2009-08-25 | International Business Machines Corporation | Method, system and computer program for managing test processes based on customized UML diagrams |
-
2019
- 2019-03-11 CN CN201910178427.3A patent/CN109933527B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102722441A (zh) * | 2012-06-11 | 2012-10-10 | 清华大学 | 智能的uml模型的形式化检测方法及装置 |
CN106951368A (zh) * | 2017-03-12 | 2017-07-14 | 北京工业大学 | 基于uml时序图的测试用例自动生成方法 |
Non-Patent Citations (3)
Title |
---|
UML协作图到自动机观测模型转化方法的研究;李弘彦;《中国优秀硕士学位论文全文数据库(硕士) 信息科技辑》;20090115;参见正文第17-18,25,33-40页,图5-1,5-3,5-4 * |
一种新的布尔规格测试用例生成算法;李磊芳,徐宝文,陈振宇,章晓芳,董国伟;《东南大学报(自然科学版)》;20100331;第1-2页 * |
基于布尔表达式约束的测试用例生成技术;孙溢,阳小华,刘杰,余童兰,吴志强,陈智;《计算机与现代化》;20190130;第1-2页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109933527A (zh) | 2019-06-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Drusinsky | Modeling and verification using UML statecharts: a working guide to reactive system design, Runtime Monitoring and Execution-based Model Checking | |
Mateescu et al. | Adaptation of service protocols using process algebra and on-the-fly reduction techniques | |
Fu et al. | Synchronizability of conversations among web services | |
Canal et al. | Model-based adaptation of behavioral mismatching components | |
Canal et al. | Adding roles to CORBA objects | |
CN106951368A (zh) | 基于uml时序图的测试用例自动生成方法 | |
Durán et al. | A generic framework for n-protocol compatibility checking | |
Lima et al. | A framework for verifying deadlock and nondeterminism in UML activity diagrams based on CSP | |
Combemale et al. | A generic tool for tracing executions back to a DSML’s operational semantics | |
CN112988124A (zh) | 多视图平台无关模型系统 | |
Farahbod et al. | The CoreASM modeling framework | |
Oluwagbemi et al. | Automatic generation of test cases from activity diagrams for UML based testing (UBT) | |
Bartolini et al. | Data flow-based validation of web services compositions: Perspectives and examples | |
Alvaro et al. | BloomUnit: Declarative testing for distributed programs | |
Zirkel et al. | Automated verification of Chapel programs using model checking and symbolic execution | |
CN109933527B (zh) | 一种基于组件执行树模型的集成测试方法及系统 | |
Auguston | Behavior models for software architecture | |
Moffett et al. | Verifying protocol conformance using software model checking for the model-driven development of embedded systems | |
Boucher et al. | Transforming workflow models into automated end-to-end acceptance test cases | |
Miao et al. | A formal specification-based integration testing approach | |
Mehlhop et al. | Model-aware simulation of IEC 61499 designs | |
Budha et al. | Test case generation for use case dependency fault detection | |
Ameedeen | A model driven approach to analysis and synthesis of sequence diagrams | |
CN115687167B (zh) | 一种群体智能操作系统的形式化验证方法及装置 | |
Hassine | AsmL-based concurrency semantic variations for Timed Use Case Maps |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |