基于分解的基于模型的测试生成方法
Abstract:文章主要是通过把一个系统模型分解成合适的可单独分析的子系统模型来解决模型检验的状态爆炸问题。
Intro:介绍了一下概念和文章内容
❓基于模型的测试(MBT):「测试」 - 基于模型的测试 - 未完成 - 知乎 (zhihu.com)
❓状态爆炸问题: MBT是基于对系统状态空间的穷举搜索吗,那状态数量就会跟着并发分量指数倍的涨,系统一复杂并发分量一多,直接穷举在实际操作中就是不可行的,这就是状态爆炸问题。
这篇论文提出来的一个解决方法,首先,给定一个测试目标,通过利用模型变量的依赖性把系统分解成子系统,这些子系统构成了一个树,然后通过访问这个树来生成子系统的测试,最后合并给整个系统测试。大概好像是这么个说法。
BASIC DEFINITIONS:一些基本定义
关于过渡系统的:
1.过渡系统 Transition system:M<A,P,Θ>。A是由G(G是由V构成的,V是变量vi的合集)、D(每个变量vi对应的值域)、关系和函数、解释函数构成的,代表的是系统的瞬时配置。P是下一时刻变量的集合。Θ是变量的初始状态。(感觉这里这条博客解释的比较容易看懂,反正就是搞成有限/无限状态机的原理那么理解)
example1/code1里给的是一个用M定义的安全注射系统(SIS)的例子,所有的定义照着这个例子看会好理解点。
Code 1. Transition system example - SIS
signature A://关于A的定义
V = {SafInject,Overridden,Press,WaterPress,Valve}
//五个变量:安全注入,推翻,压力,水压,阀门
D_SafInject = {OFF,OFF_VALVE,ALERT,ON}
//安全注入的取值范围:关/关阀门/报警/开
D_Overridden = boolean
//推翻的取值范围:是/否
D_Press = {Low,Mid,High,Unknown}
//压力的取值范围:低/中/高/未知
D_WaterPress = {0,...,1000}
//水压的取值范围
D_Valve = {open,closed}
//阀门的取值范围:开/关
program P://关于P的定义
SafInject':=
//SafInject变量下一时刻将变为(根据下面判断)
if Press = Low ⋀ ┐Overridden ⋀ Overridden' then OFF_VALVE
//如果当前压力是低,且当前没有被推翻,下一时刻被推翻,SafInject下一时刻就要变成关阀门了
……//剩下不写了一个思路,别的都是有依据变的,水压和阀门下一时刻状态是随机的
initial state Θ://关于初始状态变量值Θ的设置
SafInject = OFF, Overridden = FALSE, Press = Low, WaterPress = 0, Valve = closed
2.计算步骤 Computational step:按P和当前变量算下一时刻变量。
3.系统执行 System execution:状态转换,状态就是通过计算步骤得到的这样。
4.变量依赖 Variable dependency:两个变量有直接依赖关系,用DirDep(v)表示变量v的直接依赖集。
5.依赖图 Dependency graph:

文章提出了一种通过系统分解解决基于模型的测试中的状态爆炸问题的方法。通过构建子系统依赖树,按照顺序遍历生成测试,提高了测试覆盖率并减少了测试生成时间。实验显示,这种方法能有效减少系统规模,提高测试覆盖率,并加速测试生成过程。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



