发明名称 一种基于活动图模型的系统行为仿真方法
摘要 本发明是一种基于活动图模型的系统行为仿真方法,首先读取并解析待仿真的统一建模语言活动图模型,从中抽取出重要的模型元素信息并在内存中构建一个完整的模型映射;然后对读入的统一建模语言活动图模型进行解析,分别从统一建模语言活动图模型中解析出各种模型元素;再结合采用混合执行的思想对其进行持续的具体执行、符号执行以及约束求解,在达到节点覆盖度阈值的情况下结束该过程;最后使用上一步收集到的仿真用例对统一建模语言活动图模型进行仿真执行。实现了用于统一建模语言活动图模型仿真执行的仿真用例自动生成、统一建模语言活动图模型的仿真执行环境构建、统一建模语言活动图模型仿真用例的节点覆盖度信息统计以及仿真执行结果反馈。
申请公布号 CN103246770B 申请公布日期 2015.10.14
申请号 CN201310168258.8 申请日期 2013.05.08
申请人 南京大学 发明人 王林章;俞磊;卜磊;李宣东;陈志
分类号 G06F17/50(2006.01)I;G06F11/36(2006.01)I 主分类号 G06F17/50(2006.01)I
代理机构 南京瑞弘专利商标事务所(普通合伙) 32249 代理人 杨晓玲
主权项 一种基于活动图模型的系统行为仿真方法,其特征在于该方法所包含的步骤为:1)从磁盘文件读入以基于扩展标记语言的元数据交换格式保存的统一建模语言活动图模型;2)从已读入的统一建模语言活动图模型中分别解析出各种模型元素,包括初始节点、终止节点、决策节点、合并节点、分叉节点,联接节点、动作节点、活动节点、转移边和判定条件;所述转移边是用于连接各个节点的有向边,表明节点跳转的方向;所述判定条件是附着在转移边上控制令牌发生变化的条件;所述令牌是指示所访问节点的标记数据;3)使用符号执行和具体执行相结合的混合执行方法对统一建模语言活动图模型进行遍历,生成仿真用例;所述符号执行是将变量表示为符号来进行运算,运算结果是输入变量的一组符号表达式,以此更新变量的符号值表;所述具体执行是以具体数值代入运算,结果也是具体的数值,并以此更新变量的具体值表;31)根据统一建模语言活动图模型解析出的各个模型元素,对约束条件栈、令牌、变量表、节点覆盖度阈值以及约束求解器进行初始化;所述约束条件栈是存储约束条件的栈数据结构;所述令牌的移动表示令牌标记数据取值发生变化,即所访问的节点发生变化;所述变量表包括变量具体值表和变量符号值表;所述节点覆盖度是访问过的节点数占统一建模语言活动图模型中所有解析出的节点数目的比例,节点覆盖度值根据节点已访问情况不断计算更新,节点覆盖度阈值要预先设置;所述约束求解器用于对一组约束条件进行求解,得到满足该组约束条件的变量具体值;32)随机地生成一组输入变量具体值,使令牌沿着转移边的方向进行移动,对访问到的不同类型节点分别采取不同的处理措施;321)当访问到的节点是起始节点,则不做任何处理,令牌按出边的方向跳转至下一个活动节点;322)当访问到的节点是动作节点,则根据该节点所表示的语义,对其中的语句分别采取符号执行和具体执行,并更新输入变量具体值、节点覆盖度值;323)当访问到的节点是活动节点,则进入该节点所关联的统一建模语言活动图模型,进入步骤1),进行另外的统一建模语言活动图模型仿真处理;324)当访问到的节点是决策节点,则根据该节点的出边所附着的判定条件,选择令牌发生转移的边,将该边上对应的判定条件压入约束条件栈留做后用;325)当访问到的节点是合并节点,则令牌直接转入下一个活动;326)当访问到的节点是分叉节点,则令牌复制自身,复制的个数根据分叉节点的出边的个数来确定,复制得到的令牌沿着转移边分别向后转移;327)当访问到的节点是联接节点,则观察转移到该节点的并发节点上的令牌情况,当所有并发节点上的令牌转移到该节点上,则将这些令牌合并成一个令牌按照转移边的指向向后移动;328)当访问到的节点是终止节点,则读取约束条件栈中的所有约束条件,取出栈顶约束并取反,然后将取反后的栈顶约束同栈内其他的约束输入到约束求解器中进行约束求解,若约束求解成功,更新输入变量具体值,该组输入变量具体值存储起来作为一组仿真用例;若约束求解失败,则将无法求解的路径条件及对应的遍历路径保存出来,交由操作人员人工确认原因,同时将约束条件栈的栈顶元素出栈,取出下一个栈内约束条件并取反,再将取反后的约束同栈内其他的约束输入到约束求解器中进行约束求解,更新输入变量具体值;329)根据节点已访问情况,计算更新节点覆盖度值,当节点覆盖度值没有超过节点覆盖度阈值,则令牌重新回到初始节点,使用步骤328)更新后的输入变量具体值使令牌沿着转移边的方向进行移动,进入步骤321);当节点覆盖度值超过节点覆盖度阈值,则进入步骤4);4)输入以上步骤存储起来的仿真用例,对统一建模语言活动图模型进行仿真执行。
地址 210093 江苏省南京市鼓楼区汉口路22号