目录
一、软件测试基本知识
1.1 黑盒和白盒测试
1.1.1 黑盒测试
又称数据驱动测试。将程序视为一个黑盒子,将重点集中在发现程序不按规范正确运行的环境条件。想用这种方法来发现程序的所有错误,判定的标准就是“穷举输入测试”,将所有可能的输入条件都作为测试用例。
1.1.2 白盒测试
又称逻辑驱动测试。对程序内部的逻辑进行检查,即将程序中的每条语句至少执行一次,称为穷举路径测试。
1.2 测试原则
1)必须对预期输出或结果进行定义。
2)应当彻底检查每个测试的执行结果。
3)测试用例的编写不仅应当根据有效和预料到的输入情况,而且也应当根据无效和未预料到的输入情况。
二、代码检查、走查与评审
代码检查与走查都要求人们组成一个小组来阅读或直观检查特定的程序。
错误类型 | 错误内容 |
---|---|
数据引用错误 | 是否有引用的变量未赋值或未初始化 |
对于所有数组的引用,是否每一个下标的值都在相应规定的范围内 | |
对于所有数组的引用,是否每一个下标都是整数 | |
对于所有通过指针或引用变量的引用,当前引用的内存单元是否分配 | |
变量值的类型或属性是否与编译器所预期的一致 | |
数据声明错误 | 是否所有变量都进行明确声明 |
若变量没有明确声明,默认属性是否正确 | |
变量初始化是否正确 | |
变量是否被赋予正确长度和数据类型 | |
相似名称的变量初始化不要出错 | |
运算错误 | 是否存在不一样数据类型的运算 |
是否有相同数据类型,不同字长变量间的运算 | |
表达式是否存在向上或向下溢出的情况 | |
除法运算中除数是否可能为0 | |
比较错误 | 是否有不同类型变量之间的比较 |
控制流程错误 | 警惕go to语句 |
是否所有循环都能够终止 | |
switch语句应该有default语句 | |
接口错误 | 形参数量是否等于实参数量 |
实参量纲与形参量纲是否匹配 | |
如果有全局变量,在所有引用它们的模块中,定义和属性是否相同 | |
输入/输出错误 | 打开文件的语句中,各项属性设置是否正确 |
是否有足够内存空间,来保存程序将读取的文件 | |
所有文件使用之前是否都已经打开 | |
所有文件使用之后是否都已经关闭 | |
是否有判断文件结束的条件,并正确处理 | |
对I/O出现的情况处理是否正确 | |
程序是否正确处理“文件无法找到”这类错误 | |
其他错误 | 对警告信息应注逐一排除 |
程序或模块是否具有鲁棒性,即对输入的合法性进行检查 | |
程序是否遗漏某个功能 |
三、测试用例的设计
本章讨论黑盒和白盒各自的测试方法。推荐先使用黑盒测试方法,然后视情况需要使用白盒测试。
3.1 白盒测试
完全的白盒测试是将程序中每条路径都执行一遍,然后对一个带循环的程序来说,完全的路径测试并不切合实际。
3.1.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;
}
按照语句覆盖准则,根据被测试的程序流程图3-1中,测试用例只需测试ace路径,而其他路径的代码都未被测试。

3.1.2 判定覆盖
判定覆盖准则要求每个判断都至少有一个为真和为假的输出结果,并且每个判断都被执行至少一次。
3.1.3 条件覆盖
与条件覆盖相比,判定覆盖只关心判断表达式的值是“真”是“假”,而条件判定则还关心判断表达式内部各个值的真假。举个例子:判定表达式:a>1 or b>1
用判定覆盖设计的测试数据:
a=5 (判定表达式的值为“真”),这里不需要管b的取值,就已经满足判定覆盖的条件了。
a=0 (判定表达式的值为“假”)
用条件覆盖设计的测试数据:
a=5 (条件a>1的值为“真”)
a=0(条件a>1的值为“假”)
b=5 (条件b>1的值为“真”)