用例设计方法及其覆盖率
---《软件测试:一个软件工艺师的方法》读书笔记
2018-01-27
1 基本概念
- 错误(error):同义词过失(mistake),编程时的错误成为bug。
- 故障(fault):故障是错误的后果。可分为过失故障和遗漏故障。
在表象中添加了不正确的信息,是过失故障。未输入正确信息,是遗漏故障。遗漏故障更难发现。 - 失效(failure):代码执行时发生故障导致失效。失效只和过失故障有关。
- 事故(incident):是与失效相关联的症状。
绿色圈表明测试用例覆盖到的范围:
- 区域1:是重合部分,即使期望行为,也是实现的行为
- 区域7:是无效用例
2 黑盒测试vs白盒测试
2.1 基于规格说明的测试
基于规格说明的测试最初叫做功能测试的原因是:任何程序可视为将其输入定义域中的值映射到期输出值域的函数。工程领域普遍采用这种思想,因为工程系统被当做黑盒子来研究,这样就产生了一个词--黑盒测试。
基于规格说明测试的测试用例的优点:
- 测试用例与具体实现方法无关,所以即使实现方法改变,测试用例仍然有效
- 测试用例的开发可以同软件的实现并行开展,这样可以缩短整个项目的开发周期
缺点:
- 测试用例之间会存在严重的冗余
- 还可能有测不到的地方
如上图所示,基于规格说明用不5通方法生成的用例集1和用例集2,只能覆盖到规格说明所规定的行为,测不到部分程序的实现行为(程序实现了未规定的行为,如木马病毒)
2.2 基于代码的测试
优点:
- 通过路径覆盖指标,解决功能测试漏洞与冗余的问题
缺点:
- 不能测到规定行为未实现的区域,遗漏故障
3 黑盒测试设计方法[1]
3.1 边界值测试
- 边界值分析
- 健壮性分析
- 最坏情况分析
- 健壮最坏情况分析
边界值分析局限性
边界值分析法非常适用于多个变量相互独立又都代表实际物理量的情况。
- 变量相互独立,如:NextDate函数中并没有针对2月和闰年的测试,实际上month、day和year这几个变量之间存在特殊的依赖关系。边界值分析假定各个变量之间应该是完全独立的。
- 变量的物理指标同样重要。如果某个变量代表具体的物理量,比如温度、压力、速度等,这个量的物理边界就非常重要。
边界值测试的原则
适用于函数(程序)的
- 输入域
- 输出域,特别是错误消息的输出
- 内部变量,如,分支、循环控制变量、下标、指针。
3.2 等价类测试
- 弱一般等价类
- 强一般等价类
- 弱健壮等价类
- 强健壮等价类
等价类测试的原则
- 可以和边界类结合使用
- 强类型程序设计语言无需健壮测试(强类型的无效值会抛出RuntimeException)
- 若错误条件特别重要,适合采用健壮性测试
3.3 决策表测试
基于决策表测试是所有功能测试方法中最严格的,因为决策表能强化逻辑严密性。
决策表由左侧一列的条件桩和动作桩和右侧的条件项和动作项组成
决策表使用技巧
使用决策表构造测试用例,可以把条件看作程序输入,把动作看做程序输出。有时条件也可解释为输入的等价类,动作对应和程序的功能处理部分。
决策表测试的原则
决策表测试可用于变量之间存在重要的逻辑关系适用于具有洗下特征的应用
4 白盒测试[2]
4.1 路径测试
程序图
程序度是一种有向图,图中的节点表示语句片段,变表示控制流
DD路径
DD路径(decision-to-decision path):是指从判断到判断的路径。DD路径这个名称指一个语句序列,用Miller的话说,是从一条判断语句的“出口”开始,到下一个判断语句的“入口”结束。
DD路径图,是一个有向图,其中节点表示其程序图的DD路径,变表示后续DD路径的控制流。
基路径测试
基:是数学上的定义。基是元素(称为向量)的一个集合,且这些元素相互独立,同时定义向量的乘法和加法运算等规则,通过运算后得到的空间,叫向量空间。
通过定义,我们可以得知:
- 该向量空间中的,所有向量可以通过基向量来表示。
- 一个向量空间,可以有多个不同的基。
基对于测试的意义在于:如果可以把程序看成一种向量空间,则这个空间的基就是需要测试的元素集合。如果基没有问题,则可认为基所表示的一切都没有问题。
基路径的可行性
对于基于规格说明的测试,输入数据域的依赖关系会给边界值测试造成困难,我们通过基于决策表的功能测试,解决了这个问题。
对于代码级的依赖关系,这种依赖关系对独立基路径隐含的假设相冲突(数学中的基中的向量是互相独立的)。
上图是通过三条判断是否是三角形的DD图,我们发现路径经过C,必须经过H;发现路径经过D,必须经过G。
那么基路径p1:A-B-C-E-F-G-O是不可行的
如果要求基路径必须是可行的,则逻辑依赖关系会压缩基路径集合。
4.2 数据流测试
数据流测试和数据流图并无任何关系。
数据流测试考察变量的接收值(点)和使用(或引用)值(点)的路径。