相关内容参考自《软件测试的艺术》
一、测试用例的设计
1.黑盒测试的测试方法
(1)等价类划分
- 将输入数据分为有效等价类和无效等价类,每个等价类中的数据被认为是等效的,只需要测试一个代表值。
- 目的是确保每个等价类至少有一个测试用例。
(2)边界值分析
- 测试输入域和输出域的边界条件。
- 通常在等价类划分的基础上,对边界值进行额外的测试。
(3)因果图分析
- 使用因果图来表示输入条件和输出结果之间的关系,帮助设计覆盖所有功能的测试用例。
(4)错误推测法
- 基于经验和直觉推测程序中可能存在的错误,并设计测试用例来检测这些错误。
2.白盒测试的测试方法
(1)语句覆盖
- 确保程序中的每条语句至少执行一次。
(2)判定覆盖
- 确保程序中的每个分支(if、switch、while、for等)的每个可能的结果(真和假)都被测试到。
(3)条件覆盖
- 确保每个条件表达式(如if语句中的条件)的所有可能结果都被测试。
(4)判定/条件覆盖
- 同时满足判定覆盖和条件覆盖
(5)条件组合覆盖
- 每个判定中各条件的每一种组合至少出现一次
(6)路径覆盖
- 使程序中每一条可能的路径至少执行一次
3.测试用例的设计
一般用黑盒测试方法设计,用白盒测试方法来补充测试用例
例子1:针对可白盒测试内容,用条件覆盖设计测试用例
Public void foo(int a, int b, int x)
{
if (a>1 && b == 0)
{
x=x/a;
}
if (a==2 || x>1)
{
x=x+1;
}
}
通过2个if的内容可以判断,测试用例必须覆盖以下几种组合:
- 1. A>1,B=0
- 2. A>1,B<>0
- 3. A<=1,B<>0
- 4. A=2,X>1
- 5. A=2,X<=1
- 6. A<>2,X>1
- 7. A<>2,X<=1
通过针对满足上述组合的条件对测试用例进行输入设计。
例子2:针对黑盒测试内容,用边界值分析设计测试用例
- 如果输入条件规定了一个输入值范围,那么应针对范围的边界设计测试用例,针对刚刚越界的情况设计无效输入测试用例。举例来说,如果输入值的有效范围是-1.0 至+l.0,那么应针对-1.0、1.0、-1.001 和 1.001 的情况设计测试用例
- 如果某个输入文件可容纳 1~255 条记录,那么应根据 0、1、255 和 255条记录的情况设计测试用例
二、覆盖率介绍
代码覆盖率(Code Coverage)是衡量测试质量的一种指标,它用来描述测试用例执行时覆盖到的代码范围。高代码覆盖率意味着更多的代码被测试用例执行到,但这并不等同于测试的质量高或者软件没有缺陷。代码覆盖率是一个有用的度量,但它应该与其他测试指标和实际测试结果一起使用。
1.C0(Statement Coverage)—— 语句覆盖
- 测试是否执行了程序中的每条语句
2.C1(Branch Coverage)—— 分支覆盖
- 测试是否执行了程序中的每个分支的所有可能结果
3.DC(Decision Coverage)—— 判断覆盖
- 同 C1 分支覆
4.MC/DC(Modified Condition/Decision Coverage)—— 修正条件/判定覆盖
- 确保每个条件独立地影响决策的输出,即每个条件至少一次导致不同的结果
5.MCC(Multiple Condition Coverage)—— 条件组合覆盖
- 确保程序中所有可能的条件组合都至少被一次测试用例执行到
6.CPC(Call Pair Coverage)—— 调用对覆盖
- 评估程序中函数调用关系的测试情况
- CPC 的目的是确保程序中所有可能的函数调用对(即一个函数调用另一个函数的每一种方式)都至少被执行一次
7.EPC(Entry Point Coverage)—— 入口点覆盖
- 确保程序中所有可能的入口点(函数或方法的开始处)都被至少执行一次
8.FC(Function Coverage)—— 函数覆盖
- 测试是否执行了程序中的每个函数