符号测试
- 概述:普通测试执行的是算术运算,符号测试则是执行代数运算,可以代表一类的测试。
符号值可以是初等符号值,也可以是表达式。初等符号是任何变量值的字符串,表达式则是数字、算术运算符和符号值的组合。 - 符号执行树
在条件语句中,判断条件就是谓词,可能是符号表达式,可取真假。不断构造下去,构成了一个二叉树,称为符号执行树。将各个分支点的谓词条件累积在一起,用逻辑乘符号联接在一起,得到的这个逻辑表达式称为路径条件。
需要注意的是,在符号执行树中,节点对应的符号值,对应的是流程图中该标号之前的值。举例来说:在符号执行树第6号节点处的符号值,是还没有执行Q=Q-R时,各符号的值。 - 目前挑战
分支问题、二义性问题、大程序问题。
路径分析
分析程序中的路径是指:检验程序从入口开始,执行过程中经历的各个语句,直到出口。着眼于路径分析的测试可称为路径测试,完成路径测试的理想情况是做到路径覆盖。
- 程序路径表达式
路径的弧序列表示及结点序列表示
- 路径表达式
运算对象指的是控制流图中的弧,此外引入两个运算:乘和加。
ab表示先沿弧a再沿弧b所经历的路段。
a + b表示两弧是或的关系。(并行路段)
(a). e(a+b)(c+d)f
(b). ab(1+cb+(cb)²+…)d
乘法表示顺序,不具备交换律 - 程序中路径数的计算
计算公式:V=E-N+2。复杂度值V恰是其控制流图中含有菱形判断的个数加1。同时,这个值也等于控制流图中控制流线把整个图的平面分割的域数。 - 独立路径数
某一程序的独立路径是从程序入口到出口的多次执行中,每次至少一个语句(包括运算、赋值、输入输出或判断)是新的,未被重复的。(至少要经历一个从未走过的弧)
上图中共有4条独立路径。 - 程序路径的树表示及路径编码
a. 对路径树中任一节点N,设其进入端个数为u,流出端分支个数为v,我们用N(u,v)来表示该节点。
b. 路径树中有且仅有一个根结点。
c. 路径树中每一叶结点都对应了它的程序控制流图中的一个弧。
d. 路径树中任一非根结点N(u,v),其进入端个数u必定为1。
图中,或表示并联,与表示串联。中间节点表示弧的关系,叶子节点表示弧。 - 简化路径树
a. 如果路径树中某AND结点的子结点中仍然有AND结点,就将孙结点提到子结点的位置,并去掉该AND子结点。
b. 如果路径树中某OR结点的子结点中仍然有OR结点,就将孙结点也提到子结点的位置来,并且去掉该OR子结点。
c. 如果路径树的AND结点有一子结点是叶结点,我们可将此叶结点合并到其左、右邻结点中,进而消除AND结点和该叶结点构成的分支。
任何路径树经过上述规则的简化都会具有新的特征,即每一OR结点的任一分支都不再是OR结点,并且每一AND结点的任一分支都不再是AND结点,很可能是OR结点。
- 路径编码
L = [ L o g 2 ( v − 1 ) + 1 ] L = [Log_2(v − 1) + 1] L=[Log2(v−1)+1],其中v为OR结点的出端分支个数,方括号为取整运算。
任一路径的编码是从根结点出发遍历该路径各叶结点而后回到根结点经历的所有OR结点出端编码的序列。注意:边不重复计算。
- 测试路径枚举
a. Z路径覆盖:
简化循环意义下的路径覆盖称为Z路径覆盖。限定循环次数为0次或一次,相当于将循环结构化为选择结构。
b. 路径枚举:
根据路径树进行遍历,实现路径的枚举。 - 路径测试系统