- 第四章 测试用例的设计
- 软件测试的最关键的问题:在所有可能的测试用例中,哪个子集最有可能发现最多的错误?在结合第二章的白盒与黑盒的测试,给出一个结合这两个方法的一种合理测试。
- 本章提到的测试方法:黑盒测试:等价类划分法、边界值分析、因果图分析、错误猜测;白盒测试:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、多重条件覆盖。
- 方法之间可能是互补的,某种方法遗漏的错误,而用其他的方法就可能找出来。“如果你觉得设计和编写程序很困难,你就并非一无所知。”
- 白盒测试定义:关注的是测试用例执行的程度或覆盖程序逻辑结构(源代码)的程度。逻辑覆盖测试:语句覆盖可以理解为对一个函数的参数取值进行测试,一般具有较大的不足之处,条件较多时,容易遗漏参数在不同范围内结果的真假,以致于它通常没有什么用处。以下仅针对有两个选择的判断或分支,判定覆盖或分支覆盖:是较强一些的逻辑覆盖准则。它要求每一个判断都至少有一次真和假,每条分支都至少遍历一次分支或判定的例子包括:switch、do-while和if-else语句。判定覆盖通常可以满足语句覆盖。但是有三种情况是例外的:(1)程序中不存在判断;(2)程序或子程序/方法有着多重入口点。只有从程序的特定入口进入时,某条特定的语句才能被执行到。条件覆盖比判定覆盖更加强一些。在条件覆盖情况下,要编写足够的测试用例以确保将一个判断中的每个条件的所有可能的结果至少执行一次。总之,在白盒测试这里最重要的就是设计尽可能多的测试用例,并对一个判定条件都要有正确与错误的测试结果。
- 黑盒测试的测试方法:(1)等价划分:在挑选测试用例时需要具备以下两个特性:1、严格控制测试用力的增加,减少为达到“合理测试”的某些既定目标必须设计的其他测试用力的数量;2、它覆盖了大部分其他可能的测试用例。等价类取的是交集。
- 使用等价类的步骤:(1)确定等价类:选取每一个输入条件,并将其划分为两个或更多的组。在等价类这里主要有:有效等价类代表对程序的有效输入,无效等价类代表的则是其他任何可能的输入条件(不正确的输入),如下图所示: 很简单的一个例子:要求输入的数字在1到999之间,对它来说,有效输入就是:1 ≤ 输入值 ≤ 999,无效输入就是输入值 ≤ 1或者输入值 ≥ 999。
- 利用等价类划分生成测试用例步骤:(1)为每个等价类设置一个不同的编号;(2)编写新的测试用例,尽可能多地覆盖那些尚未被涵盖的有效等价类,直到所有的有效等价类都被测试用例所覆盖(包含进去);(3)编写新的用例,覆盖一个且仅一个尚未被涵盖的无效等价类,直到所有的无效的等价类都被测试用例覆盖。等价划分法要比随机选取测试用例优越得多,但它仍然存在不足。例如:这种方法容易忽略掉了某些特定类型的高效测试用例。因此不得不说一下边界值分析与因果图的方法。
- 边界值分析。首先谈一谈边界条件:指输入和输出等价类中那些恰好处于边界、或超出边界、或在边界以下的状态。边界值分析法与等价划分法存在两方面的不同:(1)与从等价类中挑选出任意一个元素作为代表不同,边界值分析需要选择一个或多个元素,以便等价类的每个边界都经过一遍测试;(2)与仅仅关注输入条件(输入空间)不同,还需要考虑从结果空间(输入等价类)设计测试用例。指南:输入的有限范围是-1.0、1.0,那么需要测试的数值有-1.0、1.0、-1.001、1.001;如果条件规定文件可容纳的数量为1~255条,那么应该根据0、1、255、256条记录的情况设计测试用例。
- 因果法。边界值分析和等价划分的一个弱点是未对输入条件的组合进行分析。因果法有助于用一个系统的方法选择出高效的测试用例集。还可以指出规格说明的不完整性和不明确之处。生成测试用例的过程:(1)将规格说明分解为可执行的片段;(2)确定规格说明中的因果关系;(3)分析规格说明的语义内容,并将其转换为连接因果关系的布尔图;(4)给图加上注解符号,说明由于语法或环境的限制而不能联系起来的“因”和“果”;(5)通过仔细地追踪途中的状态变化情况,将因果图转换为一个有限项的判定表;(6)将判定表中的列转换为测试用例。这个方法理解起来有些困难。
- 错误猜测。它主要是依赖于直觉的非正规的过程,其基本思想是列举出可能犯的错误或者错误易发情况的清单,然后依照清单来设计测试用例。
- 测试策略。这个策略是对以上一些测试方法的总结:(1)如果规格说明中包含输入条件组合,应首先用因果图分析方法;(2)在任何情况下都应该使用边界值分析方法;(3)应为输入和输出确定有效和无效等价类,在必要情况下对上面确认。
- 第五章 模块(单元)测试
- 模块测试是对程序中的单个子程序、子程序或进程进行测试的过程,也就是说,一开始并不是对整个程序进行测试,而是先将注意力集中在对构成程序的较小模块的测试上面。
- 模块测试的三个探讨方面:(1)测试用例的设计方式;(2)模块测试及集成的顺序;(3)对执行模块测试的建议。
- 在为模块设计测试用例时,需要使用两种类型的信息:模块的规格说明和模块的源代码。
- 增量测试。在执行模块测试过程中,我们要考虑如下因素:1、如何设计一个有效测试用例;2、将模块组装成工作程序的方式。第二点会涉及到以下内容:(1)模块测试用例的编写形式(2)可能用到的测试巩固类型()