软件测试的艺术————学习笔记2
测试用例的设计
对于与条件,我们必须注意测试用例需要测试到每一个条件。
if(a && b) 当a为假时,就不会判断b,就不会测试到b可能出现的错误
白盒测试
逻辑覆盖测试(覆盖到每一个路径,则需要尽可能多的测试用例)
- 判定覆盖/分支覆盖
- 条件覆盖
- 多重条件覆盖
例子:
public void foo(int a,int b,int x)
{
if(a>1 && b==0)//此处有两个判断条件:a>1,a<=1 和 b==0,b<>0
x=x/a;
if(a==2||x>1)//此处有两个判断条件:a==2,a<>2 和 x>1,x<=1
x=x+1;
}
所以测试用例必须覆盖以下8种组合:2* 2+2 *2
1.a>1,b==0
2.a>1,b<>0
3.a<=1,b==0
4.a<=1,b<>0
5.a==2,x>1
6.a==2,x<=1
7.a<>2,x>1
8.a<>2,x<=1
其中5-8是表示第二个if语句的值
而设计测试用例可以只用4个,(1,2)(3,4)(5,6)(7,8)
if(x==y && length(z)==0 && FLAG )
//此处有三个判断条件x==y,x<>y and length(z)==0,length(z)<>0 and //FLAG=true,FLAG==false
j=1;
else
i=1;
所以需要设计测试用例来满足2* 2* 2=8个条件。
黑盒测试
等价划分:
确定等价类(根据输入条件来划分两个或更多的组)——有效等价类代表对程序的有效输入,而无效等价类代表时其他可能的输入条件(不正确)。
如果输入条件规定了一个取值范围(1<x<99),那么就应该确定了一个有效等价类(1<x<99),以及两个无效等价类(x<1,x>99)
注,等价类中可再细分。
根据等价类我们可以编写测试用例:
1.尽可能多的覆盖那些尚未被涵盖的有效等价类,直到所有的有效类都被测试用例所覆盖;
2.覆盖一个且仅一个尚未被覆盖的无效等价类,直到所有的无效类都被测试用例所覆盖。
注,用单个测试用例覆盖无效等价类,是由于某些特定的输入错误检查可能会屏蔽或取代其他输入错误检查(我第一句写的那样)
边界值分析:
对边界值和恰好超出边界的值编写测试用例。
如果程序的输入或输出是一个有序序列,(如顺序的文件,线性列表三角格),则应特别注意该序列的第一个和最后一个元素。
因果图…..