3.4白盒测试
实验二白盒测试
一、实验目的
1、 掌握白盒测试的基础知识;
2、 掌握白盒测试的检查内容及测试目的;
3、 掌握黑盒测试的几种基本测试方法:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖。
二、实验要求
1、 复习有关内容,理解白盒测试;
2、 掌握语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,并能设计出测试用例;
3、 对具体软件,能分别使用相应的白盒测试方法设计测试用例,并实施测试、分析测试结果。
三、实验内容
l 对实验一1、3题使用逻辑覆盖法进行测试用例设计。
l 对实验一2、4题使用基本路径法进行测试用例设计。
l 采用判定覆盖、条件覆盖对题中程序进行用例设计。
程序伪代码
注意: 1)参数表中EMPTAB 为职员表,DEPTTAB为部门表;
2 ) ESIZE为职员表长度,DSIZE为部门表长度;
3)ERRCODE为出错码
MAXSALERS = 0;
ERRCODE = 0;
if(ESIZE <= 0 || DSIZE <= 0)
ERRCODE = 1;
else
{
for(i = 1; i < DSIZE ; i++) //选出各部门中最大的销售额值
if(SALES[i] > MAXSALES)
MAXSALES = SALES[i];
for(j = 1; j < DSIZE; j++) //循环找出销售额最大的部门
if(SALES[j] == MAXSALES)
{
FOUND = false;
for(int k = 1; k < ESIZE ; k++) //检查销售额最大部门的所有人员
if(EMPTAB.DEPT(k) == DEPTTAB.DEPT(j))
{
FOUND = true;
if(SALARY(k) >= 15000.00 or JOB(k) = 'M') //满足条件的人员加工资
SALARY(k) = SALARY(k) + 100.00;
else
SALARY(k) = SALARY(k) + 200.00;
}
if(FOUND == false)
ERRCODE == 2;
}
}
采用判定覆盖、条件覆盖对该程序进行用例设计
判定覆盖
1输入:
Employee Table
|
NAME |
JOB CODE |
DEPT |
Salary |
|
|
|
|
|
Department Table
|
DEPT |
SALES |
|
|
|
输出:
1
2输入:
Employee Table
|
NAME |
JOB CODE |
DEPT |
Salary |
|
A |
E |
2 |
15000 |
|
B |
E |
2 |
15000 |
Department Table
|
DEPT |
SALES |
|
1 |
50000 |
|
2 |
30000 |
输出:
2
3输入:
Employee Table
|
NAME |
JOB CODE |
DEPT |
Salary |
|
A |
E |
1 |
10000 |
|
B |
E |
1 |
9000 |
|
C |
M |
1 |
16000 |
|
D |
E |
1 |
15000 |
|
E |
E |
2 |
15000 |
|
F |
E |
2 |
15000 |
Department Table
|
DEPT |
SALES |
|
1 |
50000 |
|
2 |
30000 |
输出:
0
四、实验结果:
l 对实验一1、3题使用逻辑覆盖法进行测试用例设计。
实验一 1
l 语句覆盖 Statement Coverage
每行语句至少被执行一次
测试用例:
l
|
l 测试ID |
l Year |
l month |
l Days |
l Allnum |
l output |
|
l Case1 |
l 1 |
l 1 |
l 28 |
l 28 |
l 星期7 |
|
l Case2 |
l 1 |
l 1 |
l 29 |
l 29 |
l 星期1 |
|
l Case3 |
l 2 |
l 0 |
l 1 |
l |
l Error |
|
l Case4 |
l 4 |
l 2 |
l 32 |
l |
l Error |
- 分支/决策覆盖 Branch/Decision Coverage
每个分支至少被执行一次
|
l 测试ID |
l Year |
l month |
l Days |
l Allnum |
l output |
|
l Case1 |
l 1 |
l 1 |
l 28 |
l 28 |
l 星期7 |
|
l Case2 |
l 1 |
l 1 |
l 29 |
l 29 |
l 星期1 |
- 条件覆盖 Condition Coverage
每一个条件的真/假至少被测试一次
|
l 测试ID |
l Year |
l month |
l Days |
l Allnum |
l output |
|
l Case1 |
l 1 |
l 1 |
l 28 |
l 28 |
l 星期7 |
|
l Case2 |
l 1 |
l 1 |
l 29 |
l 29 |
l 星期1 |
|
l Case3 |
l 2 |
l 0 |
l 1 |
l |
l Error |
|
l Case4 |
l 4 |
l 2 |
l 32 |
l |
l Error |
- 分支/条件覆盖 Branch/Condition Coverage
综合分支和条件覆盖
一共两个分支,四个条件。我们让每个分支/条件都至少测试一次真/假
|
l 测试ID |
l Year |
l month |
l Days |
l Allnum |
l output |
|
l Case1 |
l 1 |
l 1 |
l 28 |
l 28 |
l 星期7 |
|
l Case2 |
l 1 |
l 1 |
l 29 |
l 29 |
l 星期1 |
|
l Case3 |
l 2 |
l 0 |
l 1 |
l |
l Error |
|
l Case4 |
l 4 |
l 2 |
l 32 |
l |
l Error |
- 条件组合覆盖 Condition Combination Coverage
在每个分支的所有条件值的组合
|
l 测试ID |
l Year |
l month |
l Days |
l Allnum |
l output |
|
l Case1 |
l 1 |
l 1 |
l 28 |
l 28 |
l 星期7 |
|
l Case2 |
l 1 |
l 1 |
l 29 |
l 29 |
l 星期1 |
|
l Case3 |
l 2 |
l 13 |
l 1 |
l |
l Error |
|
l Case4 |
l 4 |
l 2 |
l 32 |
l |
l Error |
- 路径覆盖 Path Coverage
每条程序路径至少被跑过一次
路径一共有四条,一一罗列即可
|
l 测试ID |
l Year |
l month |
l Days |
l Allnum |
l output |
|
l Case1 |
l 1 |
l 1 |
l 28 |
l 28 |
l 星期7 |
|
l Case2 |
l 1 |
l 1 |
l 29 |
l 29 |
l 星期1 |
|
l Case3 |
l 2 |
l 0 |
l 1 |
l |
l Error |
|
l Case4 |
l 2000 |
l 2 |
l 30 |
l |
l Error |
实验一 3
l 语句覆盖 Statement Coverage
每行语句至少被执行一次
测试用例:
l
|
l 测试ID |
l 投币 |
l 选择饮品 |
l 找零输出 |
l 饮品输出 |
|
l Case1 |
l 1 |
l 橙汁 |
l 找零五角 |
l 橙汁 |
|
l Case2 |
l 1 |
l 啤酒 |
l 找零五角 |
l 啤酒 |
|
l Case3 |
l 0.5 |
l 橙汁 |
l 无需找零 |
l 橙汁 |
|
l Case4 |
l 0.5 |
l 啤酒 |
l 无需找零 |
l 啤酒 |
- 分支/决策覆盖 Branch/Decision Coverage
每个分支至少被执行一次
|
l 测试ID |
l 投币 |
l 选择饮品 |
l 找零输出 |
l 饮品输出 |
|
l Case1 |
l 1 |
l 橙汁 |
l 找零五角 |
l 橙汁 |
|
l Case2 |
l 1 |
l 啤酒 |
l 找零五角 |
l 啤酒 |
|
l Case3 |
l 0.5 |
l 橙汁 |
l 无需找零 |
l 橙汁 |
|
l Case4 |
l 0.5 |
l 啤酒 |
l 无需找零 |
l 啤酒 |
- 条件覆盖 Condition Coverage
每一个条件的真/假至少被测试一次
|
l 测试ID |
l 投币 |
l 选择饮品 |
l 找零输出 |
l 饮品输出 |
|
l Case1 |
l 1 |
l 橙汁 |
l 找零五角 |
l 橙汁 |
|
l Case2 |
l 1 |
l 啤酒 |
l 找零五角 |
l 啤酒 |
|
l Case3 |
l 0.5 |
l 橙汁 |
l 无需找零 |
l 橙汁 |
|
l Case4 |
l 0.5 |
l 啤酒 |
l 无需找零 |
l 啤酒 |
- 分支/条件覆盖 Branch/Condition Coverage
综合分支和条件覆盖
|
l 测试ID |
l 投币 |
l 选择饮品 |
l 找零输出 |
l 饮品输出 |
|
l Case1 |
l 1 |
l 橙汁 |
l 找零五角 |
l 橙汁 |
|
l Case2 |
l 1 |
l 啤酒 |
l 找零五角 |
l 啤酒 |
|
l Case3 |
l 0.5 |
l 橙汁 |
l 无需找零 |
l 橙汁 |
|
l Case4 |
l 0.5 |
l 啤酒 |
l 无需找零 |
l 啤酒 |
条件组合覆盖 Condition Combination Coverage
在每个分支的所有条件值的组合
|
l 测试ID |
l 投币 |
l 选择饮品 |
l 找零输出 |
l 饮品输出 |
|
l Case1 |
l 1 |
l 橙汁 |
l 找零五角 |
l 橙汁 |
|
l Case2 |
l 1 |
l 啤酒 |
l 找零五角 |
l 啤酒 |
|
l Case3 |
l 0.5 |
l 橙汁 |
l 无需找零 |
l 橙汁 |
|
l Case4 |
l 0.5 |
l 啤酒 |
l 无需找零 |
l 啤酒 |
路径覆盖 Path Coverage
每条程序路径至少被跑过一次
|
l 测试ID |
l 投币 |
l 选择饮品 |
l 找零输出 |
l 饮品输出 |
|
l Case1 |
l 1 |
l 橙汁 |
l 找零五角 |
l 橙汁 |
|
l Case2 |
l 1 |
l 啤酒 |
l 找零五角 |
l 啤酒 |
|
l Case3 |
l 0.5 |
l 橙汁 |
l 无需找零 |
l 橙汁 |
|
l Case4 |
l 0.5 |
l 啤酒 |
l 无需找零 |
l 啤酒 |
l 对实验一2、4题使用基本路径法进行测试用例设计。
- 程序的控制流图:描述程序控制流的一种图示方法。
- 程序圈复杂度:McCabe复杂性度量。从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。
- 导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。
- 准备测试用例:确保基本路径集中的每一条路径的执行。
实验一 2
第二题流程图:
计算得环路复杂度为V(G)=6-7+2=1
基本路径:
1-2-3-4
1-2-3-5-6
1-2-3-5-7
基本路径发测试用例:
|
输入 |
测试路径 |
测试结果 |
|
|
R |
P |
||
|
65 |
87 |
1-2-3-5-7 |
50元找0张 10元找2张 5元找0张 1元找2张 |
|
0 |
56 |
1-2-3-4 |
输入有误 |
|
75 |
74 |
1-2-3-5-6 |
消费金额不够 |
实验一4
设定E为控制流图的边数,N为图的结点数,则定义环路的复杂度V(G)=E-N+2
E=17,N=14
V(G)=17-4+2=5
测试用例
|
测试编号 |
航线 |
仓位 |
飞行时间 |
路径 |
结果 |
|
1 |
欧美 |
经济舱 |
俩小时内 |
2-6-9-12 |
有食物供应 可以播放电影 |
|
2 |
欧美 |
经济舱 |
超过俩小时 |
2-6-10-12 |
有食物供应 可以播放电影 |
|
3 |
欧美 |
商务舱 |
俩小时内 |
2-7-9-12 |
有食物供应 可以播放电影 |
|
4 |
欧美 |
商务舱 |
超过俩小时 |
2-7-10-12 |
有食物供应 可以播放电影 |
|
5 |
国外非欧美 |
经济舱 |
俩小时内 |
3-6-9-13 |
有食物供应 不可播放电影 |
|
6 |
国外非欧美 |
经济舱 |
超过俩小时 |
3-6-10-13 |
有食物供应 不可播放电影 |
|
7 |
国外非欧美 |
商务舱 |
俩小时内 |
3-7-9-12 |
有食物供应 可以播放电影 |
|
8 |
国外非欧美 |
商务舱 |
超过俩小时 |
3-7-10-12 |
有食物供应 可以播放电影 |
|
9 |
国内 |
经济舱 |
俩小时内 |
4-6-9-14 |
无食物供应 不可播放电影 |
|
10 |
国内 |
经济舱 |
超过俩小时 |
4-6-10-13 |
有食物供应 不可播放电影 |
|
11 |
国内 |
商务舱 |
俩小时内 |
4-7-9-13 |
有食物供应 不可播放电影 |
|
12 |
国内 |
商务舱 |
超过俩小时 |
4-7-10-13 |
有食物供应 不可播放电影 |

浙公网安备 33010602011771号