1.简述白盒测试用例的设计方法,并进行分析总结。
白盒测试用例设计方法主要有逻辑覆盖和独立路径测试。
从覆盖源程序语句的详尽程度分析,逻辑覆盖主要有以下不同的覆盖标准:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。实际项目中,由于程序内部的逻辑存在不确定性和无穷性,尤其对于大规模复杂软件,不必采用所有的覆盖指标,而应根据实际情况选择合适的覆盖指标。
独立路径测试是在程序控制流图的基础上,通过分析控制结构的环路复杂性,导出可执行的独立路径集合,从而设计出相应的测试用例。设计出的测试用例要保证被测程序的每条可执行的独立路径至少被执行一次。独立路径测试给出了满足路径覆盖指标所需测试用例的下限,同时给出了语句覆盖的上限,它可以确保对所有相互独立的决策结果进行测试。
2.分析归纳逻辑覆盖的各种策略,并比较每种覆盖的特点,分析在怎样的情况下采用何种覆盖方式。
语句覆盖是选择足够多的测试数据,使被测程序中每个语句至少执行一次。语句覆盖是最弱的逻辑覆盖标准。
判定覆盖又叫分支覆盖,它不仅每个语句必须至少执行一次,而且每个判定表达式的每种可能的结果都应该至少执行一次。判定条件覆盖比语句覆盖强,但是对程序逻辑的覆盖程度仍然不高。
条件覆盖的含义是,使判定表达式中的每个条件都取到各种可能的结果。条件覆盖通常比判定覆盖强,但是也可能有相反的情况:虽然每个条件都取到了两个不同的结果,判定表达式却始终只取一个值。
判定/条件覆盖的含义是,选取足够多的测试数据,使得判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。但有时判定/条件覆盖也并不比条件覆盖更强。
条件组合覆盖是更强的逻辑覆盖标准,它要求选取足够的测试数据,使得每个判定表达式中条件的各种可能组合都至少出现一次。满足条件组合覆盖标准的测试数据,也一定满足判定覆盖、条件覆盖和判定/条件覆盖标准。因此,条件组合覆盖是前述几种覆盖标准中最强的。但是,满足条件组合覆盖标准的测试数据并不一定能使程序中的每一条路径都执行到。
路径覆盖的定义是选取足够多测试数据,使程序的每一条可能路径都至少执行一次。但在实际问题中,一个不太复杂的程序,其路径数都可能是一个庞大的数字,以致要在测试中覆盖所有的路径是不可能实现的。即使对于路径数有限的程序做到了路径覆盖,也不能保证被测程序的正确性。
3.对图所示程序段进行语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖方法进行测试用例设计。
语句覆盖:
x=90,y=90
x=79,y=90
x=70,y=60
判定覆盖:同上
条件覆盖:同上
判定/条件覆盖:同上
条件组合覆盖:
I x>=80,y>=80
II x>=80,y<80
III x<80,y>=80
IV x<80,y<80
V x>=90,y>=90,x+y>=140
VI x>=90,y<90,x+y>=140
VII x<90,y>=90,x+y>=140
VIII x<90,y<90,x+y>=140
IX x>=90,y>=90,x+y<140 不存在
X x>=90,y<90,x+y<140
XI x<90,y>=90,x+y<140
XII x<90,y<90,x+y<140
---------------------------------------
x=90,y=90
x=90,y=70
x=70,y=90
x=70,y=70
x=100,y=30
x=30,y=100
x=80,y=50
路径覆盖:同语句覆盖
4.请下述语句按照各种覆盖方法设计测试用例。
if (a>2 && b<3 && (c>4 || d<5))
{
statement;
}
else
{
statement;
}
语句覆盖:
a=3,b=2,c=5,d=5
a=2,b=2,c=5,d=5
判定覆盖:同上
条件覆盖:
a=3,b=2,c=5,d=5
a=2,b=4,c=3,d=4
判定/条件覆盖:同条件覆盖
条件组合覆盖:
I a>2,b<3,c>4,d<5
II a>2,b<3,c>4,d>=5
III a>2,b<3,c<=4,d<5
IV a>2,b<3,c<=4,d>=5
V a>2,b>=3,c>4,d<5
VI a>2,b>=3, c>4,d>=5
VII a>2,b>=3, c<=4,d<5
VIII a>2,b>=3, c<=4,d>=5
IX a<=2,b<3,c>4,d<5
X a<=2, b<3,c>4,d>=5
XI a<=2, b<3,c<=4,d<5
XII a<=2, b<3,c<=4,d>=5
XIII a<=2, b>=3,c>4,d<5
XIV a<=2, b>=3, c>4,d>=5
XV a<=2, b>=3, c<=4,d<5
XVI a<=2, b>=3, c<=4,d>=5
---------------------------------
测试数据略
5.针对test函数按照基本路径测试方法设计测试用例。
int Test(int i_count, int i_flag)
{
1 int i_temp=0;
2 while (i_count>0){
3 If (0==i_flag){
4 i_temp=i_count+100;
5 break; }
6 else{
7 If (1==i_flag){
8 i_temp=i_temp+10; }
9 else{
10 i_temp=i_temp+20; }
}
11 i_count--;
}
12 return i_temp;
}
程序环路复杂度:CC=4
基本路径集:
path1 1-2-3-6-7-8-11-2-12
Path2 1-2-12
Path3 1-2-3-4-5-12
Path4 1-2-3-6-7-9-10-11-2-12
设计测试用例:
用例ID | i_count | i_flag | 预期输出 |
test1 | 1 | 1 | 10 |
test2 | 0 | 2 | 0 |
test3 | 2 | 0 | 102 |
test4 | 1 | 3 | 20 |
6.某商场在“五一”期间,顾客购物时收费有4种情况:普通顾客一次购物累计少于100元,按A类标准收费(不打折),一次购物累计多于或等于100元,按B类标准收费(打9折);会员顾客一次购物累计少于1000元,按C类标准收费(打8折),一次购物累计等于或多于1000元,按D类标准收费(打7折)。测试对象是按以上要求计算顾客收费的模块,按照路径覆盖法设计测试用例。
(1) 被测模块的程序流程图如下图所示
(2) 按照路径覆盖法设计测试用例如下:
是会员,累计消费900元,覆盖路径127
是会员,累计消费2000元,覆盖路径128
不是会员,累计消费80元,覆盖路径134
不是会员,累计消费300元,覆盖路径135