软件测试专栏 | ||
---|---|---|
上一篇 | 主目录 | 下一篇 |
【前言】
结构性测试方法
基于被测程序的源代码,支持严格定义、数学分析和精确度量,是白盒
测试。
程序图
给定采用命令式程序设计语言编写的一段程序,其程序图是一种有向图,图中的节点表示语句片段(if-than-else中的if),边表示控制流。
DD路径:
决策到决策路径,从决策语句的“出路开始”,到下一个决策语句的“入路”结束。这种序列中没有内部分支,因此对应节点像排列起来的一行多米诺骨牌,当第一张牌倒后,序列中其他牌 也会倒下。
路径称为链:起始和终点不同,每个节点的入度和出度都是1 。
DD路径图:
有向图,节点是表示其程序图 的DD路径,边表示连续DD路径之间的控制流。一种压缩图。
练习:
当通过一组测试用例满足DD路径
覆盖要求时,可以发现全部缺陷中的大约85%
c0语句覆盖:
如果节点对应完整语句,则只执行判断的一个选项就满足语句覆盖准则。语句覆盖是指设计若干个测试用例,当将它们作用于被测程序后,程序中的每一条可执行语句至少被执行一次。(由于程序图来源于程序代码,语句覆盖与节点覆盖相同)
C1指标
要求覆盖每条DD路径。判定覆盖也称为分支覆盖,是指设计一组测试用例,当它们作用于被测软件时,程序中每个判定的取真分支和取假分支至少各执行一次。判定覆盖等同于边覆盖。
C1p判定/分支覆盖
需要判断每个分支的所有情况。条件语句覆盖真假,case语句覆盖每个子句
C1与C1p的区别
对于if-then语句,c1只覆盖真分支,而c1p覆盖真假分支
Cd是数据流测试
DD路径对偶之间最常用的依赖关系是定义/引用关系,其中一个变量在一个DD路径中被定义,在另一个DD路径中被引用。简单DD路径覆盖测试可能不会遍历这些关系,因此更深的缺陷类不会被发现。
Ccmcc条件覆盖
不是直接遍历判断到其真或假分支,而应该研究可能出现分支的不同方式。条件覆盖是指设计足够多的测试用例,当它们作用于被测软件后,程序中每个判定内的每个条件的各种可能取值至少被执行一次。条件覆盖关注的是更为细致的条件取值情况,而不仅仅是整个判定的取值。
如:三个简单条件的复合条件If(A>5 and B!=10 andC<100)会有八行(2的3次方),产生八个测试用例
(A>5,B!=10,C<100)、(A>5,B!=10,C>=100)、(A>5,B = =10,C<100)、(A>5,B= =10,C>100)(A<5,B!=10,C<100)、(A<5,B!=10,C>=100)、(A<5,B= =10,C<100)、(A<5,B==10,C>100)
判定-条件覆盖是判定覆盖和条件覆盖的结合,要求设计一组测试用例,针对被测程序运行完这些测试用例后,不仅程序中每个判定的各种取值至少被执行一次,而且每个判定中的每个条件的各种取值也至少被执行一次。
条件组合覆盖是指设计足够多的测试用例,运行被测软件后,程序中每个判定的所有条件的可能取值组合都至少被执行一次。
CiK循环覆盖
三种:
每个循环都包含一个判断,并且需要测试判断的两个分支:
采用经过修改的边界值方法,循环指数按最小值、一般值和最大值给出
循环测试的路径选择
基路径:对应于测试来说,所有的程序路径认为是一个集合,那么在这些路径当中必然会存在一个最小路径的集合,我们称之为基路径
线性独立路径数是:V(G)=e-n+2p=10-7+2*1=5
e:边数 n:节点数 p:连接区域数
由于圈复杂度为5,所以有5条独立路径
用节点序列表示的路径:
p1:A,B,C,G
p2:A,B,C,B,C,G
p3:A,B,E,F,G
p4:A,D,E,F,G
p5:A,D,F,G
—基线方法
McCabe的算法,用于确定基路径集合。不要求唯一基
步骤1:首先从DD-路径图的首节点出发,到末节点结束,寻找一条最长的路径记录下来,称为
基线路径
步骤2:然后对于基线路径中出现分支结构的节点转移到另外一条路径由此产生新路径
步骤3:重复步骤2的过程直到没有新路径加入,即所有判断节点都“翻转”一次
步骤4:分析所产生的所有路径,排除那些没有可能的路径,剩余的就是基路径
例子:
步骤1:首先从DD-路径图的首节点出发,到末节点结束,寻找一条最长的路径记录下来p1. A、B、C、B、E、F、G 的路径为基线
步骤2:然后对于出现分支结构的节点转移到另外一条路径由此产生新路径这条路径上的第一个判断节点(外度>=2)是节点A,因此对于下一个基路径,要经过边2,而不是边1;p2. A、D、E、F、G
步骤三:对于下一条路径,可以选第二条路径,取节点D的另一个判断分支,得到路径:p3. A、D、F、G
步骤四:对B、C进行翻转,得到如下2条路径:p4. A、B、E、F、G 。p5. A、B、C、G