一种基于活动图模型的系统行为仿真方法

文档序号:6402936阅读:270来源:国知局
专利名称:一种基于活动图模型的系统行为仿真方法
技术领域
本发明涉及一种基于统一建模语言活动图模型的系统行为仿真方法,主要利用符号执行和具体执行相结合的技术来解决仿真用例的生成问题,进而实现对系统行为的仿真。属于软件工程、模型驱动工程、系统仿真交叉技术领域。
背景技术
对模型反映的软件行为进行仿真是软件测试领域的一种重要方法。软件测试和验证是保证软件正确性和提高软件可靠性的最基本和最重要的手段,也是工业界使用的主流技术。随着面向对象软件开发技术的广泛应用和软件测试自动化的要求,基于模型的软件测试逐渐得到重视。基于模型的软件测试属于基于规约的软件测试范畴,其特点是:在产生测试用例和进行测试结果评价时,都是根据被测试应用程序的模型及其派生模型(一般称为测试模型)进行的。软件模型是对软件行为和软件结构的抽象描述。软件行为可以用系统输入序列、活动、条件、输出逻辑或者数据流进行描述。基于模型的测试是自动化测试的一种,这种测试基于模型,一次性地将一个被测系统的大量测试用例作为整体自动生成出来。模型是一种抽象,描述被测试系统的某方面的行为。基于模型的测试方式:首先根据系统需求、功能规格说明对系统进行建模,然后根据模型自动生成测试用例,最后执行验证过程。基于模型的测试能产生下列好处:缩短日程,降低成本,提高质量,得到用户行为模型,提高开发和测试的沟通,尽早发掘出规格说明和设计中的含混性因素,以及自动生成测试,自动运行测试,减少需求变更带来的测试套件的变更。混合执行技术是符号执行和具体执行结合的技术。符号执行指的是使用符号变量代替具体变量,不执行程序的前提下模拟程序执行来进行相关分析的技术,一般与约束满足问题求解方法一同使用。具体 执行就是指使用具体的变量值输入到程序中,驱动程序的正常执行。而混合执行技术是一种对程序交替进行具体执行和符号执行的混合软件程序验证技术。

发明内容
技术问题:统一建模语言已经成为建模语言的事实标准,现有的从统一建模语言活动图生成测试用例方法不能全自动地生成测试用例,在一定程度上需要人工的参与,因此对统一建模语言活动图的仿真亦只能半自动的进行。本发明的目的是提供一种基于活动图模型的系统行为仿真方法,解决用于模拟执行的仿真用例生成、模型仿真的执行环境构建、模型仿真执行时的覆盖度统计、执行结果反馈等问题。技术方案:本发明首先读取并解析待仿真的统一建模语言活动图模型,从中抽取出重要的模型元素信息并在内存中构建一个完整的模型映射;然后对读入的统一建模语言活动图模型进行解析,分别从统一建模语言活动图模型中解析出各种模型元素;再结合采用混合执行的思想对其进行持续的具体执行、符号执行以及约束求解,在达到节点覆盖度阈值的情况下结束该过程;最后使用上一步收集到的仿真用例对统一建模语言活动图模型进行仿真执行。基于活动图模型的系统行为仿真方法所包含的步骤为:I)从磁盘文件读入以基于扩展标记语言的元数据交换格式保存的统一建模语言活动图模型;2)从已读入的统一建模语言活动图模型中分别解析出各种模型元素,包括初始节点、终止节点、决策节点、合并节点、分叉节点,联接节点、动作节点、活动节点、转移边和判定条件;所述转移边是用于连接各个节点的有向边,表明节点跳转的方向;所述判定条件是附着在转移边上控制令牌发生变化的条件;所述令牌是指示所访问节点的标记数据;3)使用符号执行和具体执行相结合的混合执行方法对统一建模语言活动图模型进行遍历,生成仿真用例;所述符号执行是将变量表示为符号来进行运算,运算结果是输入变量的一组符号表达式,以此更新变量的符号值表;所述具体执行是以具体数值代入运算,结果也是具体的数值,并以此更新变量的具体值表;31)根据统一建模语言活动图模型解析出的各个模型元素,对约束条件栈、令牌、变量表、节点覆盖度阈值以及约束求解器进行初始化;所述约束条件栈是存储约束条件的栈数据结构;所述令牌的移动表示令牌标记数据取值发生变化,即所访问的节点发生变化;所述变量表包括变量具体值表和变量符号值表;所述节点覆盖度是访问过的节点数占统一建模语言活动图模型中所有解析出的节点数目的比例,节点覆盖度值根据节点已访问情况不断计算更新,节点覆盖度阈值要预先设置;所述约束求解器用于对一组约束条件进行求解,得到满足该组约束条件的变量具体值;32)随机地生成一组输入变量具体值,使令牌沿着转移边的方向进行移动,对访问到的不同类型节点分别采取不同的处理措施;321)当访问到的节点是动作节 点,则不做任何处理,令牌按出边的方向跳转至下一个活动节点;322)当访问到的节点是动作节点,则根据该节点所表示的语义,对其中的语句分别采取符号执行和具体执行,并更新输入变量具体值、节点覆盖度值;323)当访问到的节点是活动节点,则进入该节点所关联的统一建模语言活动图模型,进入步骤1),进行另外的统一建模语言活动图模型仿真处理;324)当访问到的节点是决策节点,则根据该节点出边上的判定条件,选择令牌发生转移的边,将该边上对应的判定条件压入约束条件栈留做后用;325)当访问到的节点是合并节点,则令牌直接转入下一个活动;326)当访问到的节点是分叉节点,则令牌复制自身,复制的个数根据分叉节点的出边的个数来确定,复制得到的令牌沿着转移边分别向后转移;327)当访问到的节点是联接节点,则观察转移到该节点的并发节点上的令牌情况,当所有并发节点上的令牌转移到该节点上,则将这些令牌合并成一个令牌按照转移边的指向向后移动;328)当访问到的节点是终止节点,则读取约束条件栈中的所有约束条件,取出栈顶约束并取反,然后将取反后的栈顶约束同栈内其他的约束输入到约束求解器中进行约束求解,若约束求解成功,更新输入变量具体值,该组输入变量具体值存储起来作为一组仿真用例;若约束求解失败,则将无法求解的路径条件及对应的遍历路径保存出来,交由操作人员人工确认原因,同时将约束条件栈的栈顶元素出栈,取出下一个栈内约束条件并取反,再将取反后的约束同栈内其他的约束输入到约束求解器中进行约束求解,更新输入变量具体值;329)根据节点已访问情况,计算更新节点覆盖度值,当节点覆盖度值没有超过节点覆盖度阈值,则令牌重新回到初始节点,使用步骤328)更新后的输入变量具体值使令牌沿着转移边的方向进行移动,进入步骤321);当节点覆盖度值超过节点覆盖度阈值,则进入步骤4);4)输入以上步骤存储起来的仿真用例,对统一建模语言活动图模型进行仿真执行。

有益效果:本发明所述的基于统一建模语言活动图模型的系统行为仿真方法实现了用于统一建模语言活动图模型仿真执行的仿真用例自动生成、统一建模语言活动图模型的仿真执行环境构建、统一建模语言活动图模型仿真用例的节点覆盖度信息统计以及仿真执行结果反馈。具体来说,本发明所述的方法具有如下的有益效果:(I)在本发明所述的基于统一建模语言活动图模型的系统行为仿真方法中,通过结合混合执行的思想,实现了用于活动图模型仿真执行的测试用例自动生成。生成的测试用例包括具体的输入值、该输入值对应的模型执行序列以及期望的输出。这些用例可以为软件开发生命周期中系统实现后的单元测试以及集成测试服务,实现了测试用例的复用,提高了测试效率,降低了测试成本。(2)本发明所述的基于统一建模语言活动图模型的系统行为仿真方法中,构建了统一建模语言活动图模型的仿真执行环境,使得活动图模型能够接受自动生成的测试用例并自动化地仿真执行。模型仿真执行的同时,还可以收集生成的仿真用例在模型上的覆盖度,并实时地反馈执行结果。


图1是基于统一建模语言活动图模型的系统行为仿真方法流程图。
具体实施例方式下面对本发明的具体实施方式
作更详细的描述。一.读取与解析统一建模语言活动图模型统一建模语言活动图模型的保存同大部分统一建模语言模型一样是基于扩展标记语言的元数据交换格式,在具体实施中,可以采用可扩展标记语言解析工具dom4j。由于dom4j对访问者设计模式的支持,可通过自定义一个实现访问者接口的类,对其中的访问方法重载所有处理不同节点类型和节点属性的操作。下面就对各节点类型和属性的操作做具体描述:(I)起始节点:读入起始节点标识,实例化起始节点。(2)动作节点:记录节点标识,连接与其相连的各条入边和出边,保存该节点上的活动行为属性的值,实例化该节点。(3)活动节点:记录节点标识,连接与其相连的各条入边和出边,保存该节点上关联活动图属性的值,实例化该节点。(4)决策节点:记录节点标识,连接与其相连的各条入边和出边,实例化该节点。(5)合并节点:记录节点标识,连接与其相连的各条入边和出边,实例化该节点。(6)分叉节点:记录节点标识,连接与其相连的各条入边和出边,实例化该节点。(7)联接节点:记录节点标识,连接与其相连的各条入边和出边,实例化该节点。(8)终止节点:记录节点标识,连接与其相连的各条入边,实例化该节点。通过对以上各种类型节点及其属性的解析,在程序内存中建立起与统一建模语言活动图模型对应的数据结构。二.采用深度优先策略结合混合执行思想自动化生成仿真用例混合执行是具体执行、符号执行两种执行操作相结合的一种方法。在具体实施中,遍历活动图的过程要对节点上反映出的不同语义分别进行这两种执行操作。下面描述对于不同类型的节点在处理时的具体方式:(I)起始节点:不做任何处理,令牌按出边的方向跳转至下一个活动节点。(2)动作节点:对动作节点的处理分两部分进行:a)依照具体值变量表对节点内的语句进行具体执行,根据执行的结果更新具体值变量表。在这个过程中可能出现非输入的变量,凡是新出现的变量,也都加进具体值变量表中。具体执行的目的在于通过理解模型的执行语`义,实时更新变量具体值,进而确定模型的控制流方向。b)在对节点内语句进行具体执行的同时,也要对其进行符号执行的操作。符号执行的过程,是不断更新用于表示变量符号表中和输入变量相关的系数数组的过程。符号执行的目的在于收集执行路径上的约束条件(我们称之为路径条件),通过对这些路径条件的约束求解,进一步产生能够驱动下一次混合执行过程的具体仿真用例。(3)活动节点活动图模型中,活动节点会关联另外一个活动图模型,所以一旦令牌过渡到了这个类型的节点上,实际也就是进入了另一个活动图,随后的所有操作自然和递归类似。(4)决策节点:当遇到决策节点时,要分以下两步进行处理:a)根据具体值变量表计算出满足判定条件的分支是哪一条,令牌按照这一条分支指向的节点进行转移。b)在具体计算的时候,也要完成变量符号表的更新。在具体实施中,以上步骤结束后,要将该节点上选取的约束条件压入约束条件栈留做后用。(5)合并节点:合并节点是决策节点的逻辑后继,当遇到该节点时令牌直接转入下一个活动。(6)分叉节点:分叉节点用于表示并发行为的起始,当遇到该类型节点时,令牌复制自身,复制的个数根据分叉节点的流出转移边的个数确定。接下来复制得到的令牌继续沿着转移边向后转移。(7)联接节点:联接节点是分叉节点的逻辑后继,当某一令牌遇到该节点时就在原地等待,一直到所有如边上的令牌转移到了该节点上再合并成一个令牌,按照转移边的指向向后移动。
(8)终止节点:遇到终止节点时程序可以得到一条完整的执行路径,此时读取路径条件栈中的所有约束条件,取出栈顶的约束并取反,然后将取反后的栈顶约束同栈内其他的约束输入到约束求解器中进行求解,这样就可以得到一组新的输入变量具体值用以驱动新的遍历过程。在具体实施中,深度优先的遍历策略是在对条件约束进行取反时,依次选取路径条件栈栈顶的条件出来进行取反。如果在约束求解过程中发生失败的情况,则将与其有关的路径约束和遍历路径单独保存出来反馈给用户。接着,将约束条件栈的栈顶约束出栈,取出下一个约束条件对其取反,并结合约束条件栈中的其他约束进行约束求解以生成新的输入变量具体值。在具体实施中,根据节点已访问情况,计算更新节点覆盖度值,当节点覆盖度值没有超过节点覆盖度阈值时,令牌重新回到初始节点,使用更新后的输入变量具体值驱动令牌沿着转移边的方向进行移动,重复仿真用例自动生成过程;当节点覆盖度值超过节点覆盖度阈值,则结束仿真用例自动生成过程,进入下一个步骤。三.使用生成的仿真用例对统一建模语言活动图进行仿真在具体实施中,经过以上步骤收集到出一组输入变量具体值,这些输入变量具体值作为仿真用例用于对统一建模语言活动图模型进行仿真。仿真用例是以键值对的形式保存在外部文件中的,一来可以供操作人员审查,二来可以用于模型迭代更新后回归测试用。仿真时,程序从外部文件读入仿真测试用例,一组用例可以驱动统一建模语言活动图模型的一次仿真执行,在执行的同时可以观察到 活动图经过了哪些节点,进行了哪些操作,进行了哪些行为调用等。
权利要求
1.一种基于活动图模型的系统行为仿真方法,其特征在于该方法所包含的步骤为: 1)从磁盘文件读入以基于扩展标记语言的元数据交换格式保存的统一建模语言活动图模型; 2)从已读入的统一建模语言活动图模型中分别解析出各种模型元素,包括初始节点、终止节点、决策节点、合并节点、分叉节点,联接节点、动作节点、活动节点、转移边和判定条件;所述转移边是用于连接各个节点的有向边,表明节点跳转的方向;所述判定条件是附着在转移边上控制令牌发生变化的条件;所述令牌是指示所访问节点的标记数据; 3)使用符号执行和具体执行相结合的混合执行方法对统一建模语言活动图模型进行遍历,生成仿真用例;所述符号执行是将变量表示为符号来进行运算,运算结果是输入变量的一组符号表达式,以此更新变量的符号值表;所述具体执行是以具体数值代入运算,结果也是具体的数值,并以此更新变量的具体值表; 31)根据统一建模语言活动图模型解析出的各个模型元素,对约束条件栈、令牌、变量表、节点覆盖度阈值以及约束求解器进行初始化;所述约束条件栈是存储约束条件的栈数据结构;所述令牌的移动表示令牌标记数据取值发生变化,即所访问的节点发生变化;所述变量表包括变量具体值表和变量符号值表;所述节点覆盖度是访问过的节点数占统一建模语言活动图模型中所有解析出的节点数目的比例,节点覆盖度值根据节点已访问情况不断计算更新,节点覆盖度阈值要预先设置;所述约束求解器用于对一组约束条件进行求解,得到满足该组约束条件的变量具体值; 32)随机地生成一组输入变量 具体值,使令牌沿着转移边的方向进行移动,对访问到的不同类型节点分别采取不同的处理措施; 321)当访问到的节点是动作节点,则不做任何处理,令牌按出边的方向跳转至下一个活动节点; 322)当访问到的节点是动作节点,则根据该节点所表示的语义,对其中的语句分别采取符号执行和具体执行,并更新输入变量具体值、节点覆盖度值; 323)当访问到的节点是活动节点,则进入该节点所关联的统一建模语言活动图模型,进入步骤1),进行另外的统一建模语言活动图模型仿真处理; 324)当访问到的节点是决策节点,则根据该节点出边上的判定条件,选择令牌发生转移的边,将该边上对应的判定条件压入约束条件栈留做后用; 325)当访问到的节点是合并节点,则令牌直接转入下一个活动; 326)当访问到的节点是分叉节点,则令牌复制自身,复制的个数根据分叉节点的出边的个数来确定,复制得到的令牌沿着转移边分别向后转移; 327)当访问到的节点是联接节点,则观察转移到该节点的并发节点上的令牌情况,当所有并发节点上的令牌转移到该节点上,则将这些令牌合并成一个令牌按照转移边的指向向后移动; 328)当访问到的节点是终止节点,则读取约束条件栈中的所有约束条件,取出栈顶约束并取反,然后将取反后的栈顶约束同栈内其他的约束输入到约束求解器中进行约束求解,若约束求解成功,更新输入变量具体值,该组输入变量具体值存储起来作为一组仿真用例;若约束求解失败,则将无法求解的路径条件及对应的遍历路径保存出来,交由操作人员人工确认原因,同时将约束条件栈的栈顶元素出栈,取出下一个栈内约束条件并取反,再将取反后的约束同栈内其他的约束输入到约束求解器中进行约束求解,更新输入变量具体值; 329)根据节点已访问情况,计算更新节点覆盖度值,当节点覆盖度值没有超过节点覆盖度阈值,则令牌重新回到初始节点,使用步骤328)更新后的输入变量具体值使令牌沿着转移边的方向进行移动,进入步骤321);当节点覆盖度值超过节点覆盖度阈值,则进入步骤4); 4)输入以上步 骤存储起来的仿真用例,对统一建模语言活动图模型进行仿真执行。
全文摘要
本发明是一种基于活动图模型的系统行为仿真方法,首先读取并解析待仿真的统一建模语言活动图模型,从中抽取出重要的模型元素信息并在内存中构建一个完整的模型映射;然后对读入的统一建模语言活动图模型进行解析,分别从统一建模语言活动图模型中解析出各种模型元素;再结合采用混合执行的思想对其进行持续的具体执行、符号执行以及约束求解,在达到节点覆盖度阈值的情况下结束该过程;最后使用上一步收集到的仿真用例对统一建模语言活动图模型进行仿真执行。实现了用于统一建模语言活动图模型仿真执行的仿真用例自动生成、统一建模语言活动图模型的仿真执行环境构建、统一建模语言活动图模型仿真用例的节点覆盖度信息统计以及仿真执行结果反馈。
文档编号G06F11/36GK103246770SQ201310168258
公开日2013年8月14日 申请日期2013年5月8日 优先权日2013年5月8日
发明者王林章, 俞磊, 卜磊, 李宣东, 陈志 申请人:南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1