
软件测试 教学课件 ppt 作者 郑人杰 许静 于波 第4章白盒测试二.ppt
38页4.3 路径测试,1. 路径分析 2. 路径编码 3. 程序插装,1. 路径分析,路径表达式,路径表达式的运算 乘:ab 表示先沿弧a再沿弧b所经历的路段 加:a+b 表示两段弧是或的关系 路径: e(a+b)(c+d)f eacf + eadf + ebcf + ebdf,,,具有循环的控制流图 abd + abcbd + abcbcd + … ab(1+cb+(cb)2+…)d,,,路径表达式满足规律 加法交换律 a+b = b+a 加法结合律 a+(b+c) = (a+b)+c 加法幂等律 a+a = a 乘法结合律 a(bc) = (ab)c = abc 分配律 a(b+c) = ab+ac (a+b)c = ac+bc (a+b)(c+d) = a(c+d)+b(c+d) 注意:乘法不满足交换律,程序中路径数的计算,路径表达式计算,将所有弧取值“1”代入,计算, 得到的结果数值即为路径数,1,2,3,4,5,e,b,a,c,d,f,e(a+b)(c+d)f =4,,带有循环,不考虑循环: L= a(b+cd)e = 2 加入循环后: L + L f L + L f L f L +… 进入循环次数为2 L (1+ f L + (f L)2) = 14,独立路径数 某一程序的独立路径数是从程序入口到出口的多次执行中,每次至少一个语句(包括运算、赋值、输入输出和判断)是新的,未被重复的。
1,2,3,7,4,6,8,5,9,10,11,,,,,,,,,,,,,,独立路径: 1-11 1-2-3-4-5-10-1-11 1-2-3-6-8-9-10-1-11 1-2-3-6-7-9-10-1-11 1-2-3-4-5-10-1-2-3-6-8-9-10-1-11,2. 路径编码,路径“与/或”树 在路径表达始中,有两种运算: 加:表示并列关系 乘:表示串行关系 在“树”中,用“∧”表示“与”关系 用“∨”表示“或”关系,a(b+c+d+e)(f+g)+h,叶节点表示弧,中间节点表示弧的关系,路径树的特征,对任一节点,设其进入端个数为u,流出端个数为v,N(u,v)来表示这个节点 u=0,为根节点 v=0,为叶节点 否则,为中间节点,2. 路径树中有且只有一个根节点 3. 路径树中的每一个叶节点,都对应了它在程序流图中的一段弧;反之,程序流图中的任一控制流线也都对应了树中的一个叶节点 4. 路径树中的任一非根节点,其流入端个数必定为1,因而从根节点到树中的任一节点有且只有一条路径,简化路径树,,1. 路径树中,如果与节点的子节点中仍然有与节点,就将孙节点提到子节点的位置,并去掉该与节点,,2. 路径树中,如果或节点的子节点中仍然有或节点,就将孙节点提到子节点的位置,并去掉该或节点,,AB,3. 如果路径树的与节点有一子节点是叶节点,可以将此叶节点合并到左、右邻节点中,因而可以去掉该分支。
其相邻节点可能为一下情况: (1)相邻节点也是叶节点,,(2)相邻节点是或节点,如联结了B,C,D三个叶节点,则可以将A “乘”入到这些节点中,,(3)相邻节点是与节点,如联结了B,C两个叶节点,则可以将A “乘”入到最左的节点中,,,a(b+c+d+e)(f+g)+h,(ab+ac+ad+ae)(f+g)+h,路径编码,为了用计算机来自动处理路径 路径执行的特点:执行一次程序,就是对路径树的一次遍历,不同路径的差别在于“或”节点的选择 在编码时,考虑对“或”节点的出端进行编码,编码方法 若或节点的出端个数为v,其第i个分支的编码为十进制数 i-1 的L位二进制码,其中 L = [log2(v-1) + 1], [ ] 为取整运算,0,1,V,,,,,00,01,10,V,,00,01,10,V,,,,,,11,,,,,,000,001,010,011,100,路径编码:从根节点出发遍历该路径各个叶节点后又回到根节点,所经历的所有或节点出端编码的序列,0,0,0,0,0,1,1,1,1,1,abf 000,acf 0100,adf 01100,aef 01110,h 1,abf 0000 acf 0010 adf 0100 aef 0110 h 1,V,∧,h,ab,V,ae,f,g,,,,,,,,V,,ac,ad,,,0,1,0,1,00,01,10,11,路径译码,在给出某个路径的编码后,找到与其对应的程序的路径,这一过程称为路径译码。
译码也需要遍历路径树,算法,Decode ( N(v): 流出端个数为v的节点) int i, n; Begin if ( N(v) 是或节点)then 取编码的前[log2(v-1)+1]位; 将其从编码串中删除; 取n的值为这[log2(v-1)+1]位二进制编码的十进制数; if ( N(v) 的第n+1流出端是叶节点)then 将此叶节点的名字拼入路径; else Decode ( N(v) 的第n+1端) else for i=1 to v do Decode ( N(v) 的第i 端) End,给定的路径编码为0100 从根节点开始遍历路径树,首先取根节点,v=2,或节点,[log2(2-1)+1]=1, 取“0” 沿根节点达到左分支,是一个与节点,先沿其第一分支,得到叶节点a,拼入路径串 沿与节点的第二分支,是v=2的或节点,再取编码串中的1位,为“1”,进入该或节点的右分支 是v=2的或节点,取串中的“0”,进入到左分支,是叶节点c, 拼入路径名得到ac 返回到与节点,进入到第三分支,是v=2的或节点,取编码的最后“0”,进入到左分支,得到叶节点f,拼入路径名acf, 返回根节点,完成一次遍历。
0,0,0,0,0,1,1,1,1,1,被测 程序,路径表 达式,测试 结果,路 径 树,路径 编码,已测的 路径,枚举 路径,需 测 的 路 径,,,,,,,,,比较,,,,,,,,,,,,语 法 分 析,编码,译码,枚举,执 行,初始 测试 用例,生成特定路径的测试用例,生成待测试路径的测试用例,路 径 测 试 系 统,路径测试系统的可行性,简化循环后,路径数是有限的 程序的路径可以枚举得到 可以自动生成待测的路径,4.4 程序插装,程序插装就是借助往被测程序中插入操作来实现测试的目的 (1)插入打印语句 (2)插入计数语句,入 口,,C(1)=C(1)+1,,Q=X,,R=Y,,C(2)=C(2)+1,Q≠R,,,C(4)=C(4)+1,Q>R,,,,,C(6)=C(6)+1,C(5)=C(5)+1,,,Q=Q-R,R=R-Q,,,,,,,,,,,,,,,C(3)=C(3)+1,,出 口,T,T,F,F,插装后的求最大公约数 程序流程图,插装的作用,语句覆盖统计 分支覆盖统计 记录变量的动态特性,(3)断言语句 在程序的特定部位插入某些用以判断变量特性的语句,使得程序执行中这些语句得以证实,从而使程序的运行特性得以证实,这些语句称为断言。
例,求两个非负数Num和Den之商(Num=0 then Q=Q+W/2; A=A+B; endif B=B/2; W=W/2; endloop End,@W=1/2k @A=Den*Q @B=Den*W/2 @Num/Den-WQ Num/Den,@K=k+1,证明,初始情况下 (1)k=0, W=1/2k=1是初值 (2)Q=0, A=Den*Q=0 (3)B=Den*W/2=Den/2 (4)0=NumDen,Num/Den-10 所以:Num/Den-WQNum/Den,,迭代过程中 Num-A-B=0 为真 Num-A-B=0 为假,结构性测试总结,结构分析 覆盖测试 路径测试,。
