软件测试的艺术
1. 自评价测试
这个程序从一个输入对话框中读取三个整数值,这三个整数值代表了三角形三条边的长度。程序显示提示信息,指出该三角形是何种三角形:
- 不规则三角形
- 等腰三角形
- 等边三角形。
做出的设计
a b c
异常:负数,0:异常输入
正常
- 是:2边之和大于第三边,2边之差小于第三边
- 三边相等:等边
- 两边相等:等腰
- 4 3 3
- 3 4 3
- 3 3 4
- 不规则三角形
- 不是
- error:无法构成三角形
忽略的部分
反向用例:两边之和小于第三边
同样的用例要有 3 个
三个边都是 0
三边都是小数
输入的边长个数不对
针对每一个测试用例,除了定义输入值外,定义了该程序对该输入值的预期输出值
2. 软件测试的心理学和经济学
心理学
正确的态度:愿景(vision)
测试是为发现错误而执行程序的过程
最终我们还是要通过软件测试来建立某种程度的信心:
- 软件做了其应该做的
- 未做其不应该做的
经济学
要发现程序中的所有错误也是不切实际的,常常也是不可能的。这个基本的问题反过来暗示出软件测试的经济学问题、测试人员对被测软件的期望,以及测试用例的设计方式。
为了应对测试经济学的挑战,应该在开始测试之前建立某些策略。
黑盒测试和白盒测试是两种最普遍的策略,我们将在下面两节中讨论。
黑盒测试(数据驱动)
黑盒测试是一种重要的测试策略,又称为数据驱动的测试或输入/输出驱动的测试
- 使用这种测试方法时,将程序视为一个黑盒子。
- 测试目标与程序的内部机制和结构完全无关。
- 而是将重点集中放在发现程序不按其规范正确运行的环境条件。
在这种方法中,测试数据完全来源于软件规范(换句话说,不需要去了解程序的内部结构)
如果想用这种方法来发现程序的所有错误,判定的标准就是“穷举输入测试”,将所有可能的输入条件都作为测试用例。
由于穷举测试是不可能的,测试投入的目标在于通过有限的测试用例,最大限度地提高发现的问题的数量,以取得最好的测试效果。
白盒测试(逻辑驱动)
另一种测试策略称为白盒测试或称逻辑驱动的测试,允许我们检查程序的内部结构。这种测试策略对程序的逻辑结构进行检查,从中获取测试数据(遗憾的是,常常忽略了程序的规范)。
软件测试原则
一、一个用例必须包括2个部分:
- 对程序的输入数据的描述
- 对程序在上述输入数据下的正确输出结果的精确描述
二、测试用例的编写不仅应当根据
- 有效和预期的情况
- 无效和未预料的输入情况【更易发现问题】
3. 代码检查、走查与评审
4. 测试用例的设计
4.1 白盒测试
- 将每个判断的所有结果都至少执行一次
- 所有的程序入口都至少执行一次,以确保全部的语句都至少执行一次
4.2 黑盒测试
等价划分
在从所有可能的输入中努力找出某个小的子集,这个子集是正确的,并且可能发现最多错误
- 严格控制测试用例的增加
- 它覆盖了大部分其他可能的测试用例
外部条件 | 有效等价类 | 无效等价类 |
---|---|---|
举例子
外部条件 | 等价类 |
---|---|
取值范围(例如,“数量可以是从1到999”) | 一个有效等价类(1<数量<999),以及两个无效等价类(数量<1,数量>999) |
取值的个数(例如,“汽车可登记一至六名车主”) | 一个有效等价类和两个无效等价类(没有车主,或车主多于六个)。 |
一个输入值的集合,而且有理由认为程序会对每个值进行不同处理(例如,“交通工具的类型必须是公共汽车、卡车、出租车、火车或摩托车”) | 为每个输入值确定一个有效等价类和一个无效等价类(例如,“拖车”) |
必须是 | 一个有效等价类(首字符是字母)和一个无效等价类(首字符不是字母) |
生成测试用例 |
- 为每个等价类设置一个不同的编号
- 编写测试用例,覆盖有效等价类
- 编写测试用例,覆盖无效等价类
边界值分析
- 输入范围【-1.0,1.0】
- 范围
- 刚刚越界的情况 (-1.001,1.001)
- 输入数量【1,255】
0、1、255、256 - 输入或输出是一个有序序列
第一个和最后一个
MTEST 程序测试
1.输入文件为空。
2.没有标题记录。
3.标题只有1个字符。
4.标题有80个字符。
5.考试试题数量为1。
6.考试试题数量为50。
7.考试试题数量为51。
8.考试试题数量为999。
9.考试试题数量为0。
10.试题数量域的值为非数字类型。
11.标题记录后无标准答案记录。
12.标准答案记录数量多一个。
13.标准答案记录数量少一个。
14.学生人数为0。
15.学生人数为1。
16.学生人数为200。
17.学生人数为201。
18.某个学生只有一条答案记录,但却存在两条标准答案记录。
19.上面那个学生是文件中第一个学生。
20.上面那个学生是文件中的最后一个学生。
21.某个学生有两条答案记录,但只有一条标准答案记录。
22.上面那个学生是文件中第一个学生。
23.上面那个学生是文件中最后一个学生。
24.所有学生的成绩相同。
25.所有学生的成绩都不相同。
26.部分、但不是全部学生的成绩相同(检查名次的计算是否正确)。
27.某个学生的成绩为0。
28.某个学生的成绩为10。
29.某个学生的标识符值为可能的最低值(检查排序)。
30.某个学生的标识符值为可能的最高值。
31.学生的数量恰好够一份报告占满一页(检查是否打印出多余页)。
32.学生的数量除够一份报告占满一页外,还多一个。
33.平均值为其最大值(全部学生都得满分)。
34.平均值为0(全部学生都得0分)。
35.标准偏差为其最大值(一个学生成绩为0分,其他都为100分)。
36.标准偏差为0(全部学生成绩相同)。
37.全部学生都回答正确第一道试题。
38.全部学生都回答错误第一道试题。
39.全部学生都回答正确最后一道试题。
40.全部学生都回答错误最后一道试题。
41.试题的数量恰好够一份报告占满一页。
42.试题的数量除够一份报告占满一页外,还多一道。
因果图(对输入条件进行组合分析
类似数字电路逻辑
错误猜测
一种依赖直觉的非正规的过程,基本思想为:列出所有可能犯的错误或错误易发情况的清单,然后根据清单来编写测试用例。
测试策略
一组合理的策略如下:
- 包含输入条件组合的:应首先使用因果图分析方法
- 在任何情况下都应使用边界值分析方法(多数甚至全部条件都可以被整合到因果图分析中)
- 为输入和输出确定有效等价类和无效等价类
- 错误猜测技术
- 针对上述测试用例集检查程序的逻辑结构
- 判定覆盖
- 条件覆盖
- 判定 / 条件覆盖
- 多重覆盖原则