图和图覆盖准则
测试中的图
控制流图:
有限状态集:(源于规格文档)
各种设计图:
点+边 = 图
点:有穷非空集合
边:点对
初始结点
终结结点
多个初始结点的情况,规定一个哑结点,作为初始结点
路径:点的序列,相邻结点必须构成有效边
测试路径:表达测试的执行(出发点是初始结点,终点是终结结点)
此门课:一条测试只能执行一条测试路径(前提条件:测试环境是确定性的)
图覆盖准则
语法可达:在通过语法构建的图结构中存在一条路径
语义可达:在实际程序中存在一个测试可达
测试路径覆盖:
结构覆盖:常见的图覆盖类型
不关心抽象出的图的内容(来源不一,所以内容不一),只考虑抽象出的点和边的覆盖
数据流覆盖:
测试准则:描述测试需求的一些规则
测试需求:描述测试路径性质
测试需求集:TR 测试用例集:T
结构化覆盖
顶点覆盖(VC):测试用例集(T)覆盖所有顶点(v)
边覆盖(EC):测试需求集合(TR)里面的每一个测试需求(tr)都是一个可达边,每一个可达边都存在一个测试用例去覆盖。称此测试用例集(T)满足边覆盖
满足EC一定满足VC,满足VC不一定能满足EC
边对覆盖:
两个测试路径即可满足此图的VC和EC,却无法满足边对覆盖
如图,至少需要四条路径满足边对覆盖
即2-4-5;2-4-6;3-4-5;3-4-6必须被覆盖,所以至少需要四条路径
n路径覆盖:
n=0是零点覆盖
n=1是边覆盖(长度<=1)
n=2是边对覆盖(长度<=2)
n=无穷 是完全路径覆盖 (长度<=n1,n1路径覆盖)
蕴含:(“满足”上的包含)
注意:准则1蕴含准则2,不代表准则1的错误检测能力更强
边对覆盖Subsume边覆盖;边覆盖Subsume点覆盖
即满足EC一定满足VC,满足VC一定能满足边对覆盖
若n1>=n2,n1路径覆盖Subsume n2路径覆盖
因为此图存在循环,所以完全路径覆盖的测试路径是无穷多个
控制流测试
控制流图(CFG):表示程序的流转过程 顶点+边
顶点:代码,语句块,函数,方法体
在2和3结点后添加终止结点
此图2结点后也可加入3结点,即此图为最简版
数据流测试
关注节点上的变量的操作是否正确
变量操作:
定义:赋值,初始化等
使用:分支,判断,循环等
DU对:定义引用对
定义清晰:li上定义,lj上使用(两者之间无二重定义)
DU路径:
v:变量
数据流覆盖准则:
定义覆盖:v所有定义的地方都覆盖过一次
引用覆盖:v所有引用的地方都至少覆盖过一次
定义引用路径覆盖: