软件测试02

实验二白盒测试

一、实验目的

1、 掌握白盒测试的基础知识;

2、 掌握白盒测试的检查内容及测试目的;

3、 掌握黑盒测试的几种基本测试方法:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖。

二、实验要求

1、 复习有关内容,理解白盒测试;

2、 掌握语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,并能设计出测试用例;

3、 对具体软件,能分别使用相应的白盒测试方法设计测试用例,并实施测试、分析测试结果。

三、实验内容

l 对实验一1、3题使用逻辑覆盖法进行测试用例设计。

l 对实验一2、4题使用基本路径法进行测试用例设计。

l 5、

 

 

程序伪代码

注意: 1)参数表中EMPTAB 为职员表,DEPTTAB为部门表;

   2 ) ESIZE为职员表长度,DSIZE为部门表长度;

       3ERRCODE为出错码

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) 基本路径法绘制出控制流图,逻辑覆盖法绘制出流程图

(2) 设计测试用列表

l 对实验一1、3题使用逻辑覆盖法进行测试用例设计。

实验一:

流程图如下图1

 

 

                            1

逻辑覆盖法

语句覆盖

输入

测试路径

测试结果

Year

Month

Day

a

11

30

1-2-3-17

输入日期无效

2023

3

28

1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17

星期一

 

条件覆盖/条件覆盖/判定条件覆盖/条件组合覆盖

输入

测试路径

测试结果

Year

Month

Day

a

11

30

1-2-3-17

输入日期无效

2001

a

12

1-2-3-4-5-17

输入日期无效

2022

9

b

1-2-3-4-5-6-7-17

输入日期无效

3000

10

1

1-2-3-4-5-6-7-8-17

输入日期无效

2020

14

4

1-2-3-4-5-6-7-8-9-17

输入日期无效

2021

1

32

1-2-3-4-5-6-7-8-9-10-17

输入日期无效

2008

2

30

1-2-3-4-5-6-7-8-9-10-11-17

输入日期无效

2009

2

29

1-2-3-4-5-6-7-8-9-10-11-12-17

输入日期无效

2022

1

32

1-2-3-4-5-6-7-8-9-10-11-12-13-17

输入日期无效

2023

6

31

1-2-3-4-5-6-7-8-9-10-11-12-13-14-17

输入日期无效

2023

3

28

1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17

星期一

 

路径覆盖

输入

测试路径

测试结果

Year

Month

Day

a

11

30

1-2-3-17

输入日期无效

2001

a

12

1-2-3-4-5-17

输入日期无效

2022

9

b

1-2-3-4-5-6-7-17

输入日期无效

3000

10

1

1-2-3-4-5-6-7-8-17

输入日期无效

2020

14

4

1-2-3-4-5-6-7-8-9-17

输入日期无效

2021

1

32

1-2-3-4-5-6-7-8-9-10-17

输入日期无效

2008

2

30

1-2-3-4-5-6-7-8-9-10-11-17

输入日期无效

2009

2

29

1-2-3-4-5-6-7-8-9-10-11-12-17

输入日期无效

2021

1

32

1-2-3-4-5-6-7-8-9-10-11-12-13-17

输入日期无效

2022

4

31

1-2-3-4-5-6-7-8-9-10-11-12-13-14-17

输入日期无效

2023

3

28

1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17

星期一

 

 

运行截图如下图2:

 

                            2

实验三:

伪代码如下:

if (coin == 0.5) {

    // 投入 5

    if (drink == "橙汁") {

        dispense("橙汁")

        change = 0

    } else if (drink == "啤酒") {

        dispense("啤酒")

        change = 0

    }

} else if (coin == 1.0) {

    // 投入 1

    if (drink == "橙汁") {

        dispense("橙汁")

        change = 0.5

    } else if (drink == "啤酒") {

        dispense("啤酒")

        change = 0.5

    }

}

程序图如下图3

 

                                3

控制流图如图4

 

          4             

测试用例 表如下:

语句覆盖/判定覆盖/条件覆盖判定条件覆盖/条件组合覆盖

输入

测试路径

测试结果

Button1

Button2

e

1

1-2-3-10

输入无效

2

1

1-2-3-4-5-6-11-9

取走啤酒

2

2

1-2-3-4-5-6-7-12-9

取走橙汁

1

1

1-2-3-4-5-6-7-8-13-9

取走啤酒,找零五角

1

2

1-2-3-4-5-6-7-8-14-9

取走橙汁,找零五角

 

 

路径覆盖

输入

测试路径

测试结果

Button1

Button2

e

1

1-2-3-10

输入无效

2

1

1-2-3-4-5-6-11-9

取走啤酒

2

2

1-2-3-4-5-6-7-12-9

取走橙汁

1

1

1-2-3-4-5-6-7-8-13-9

取走啤酒,找零五角

1

2

1-2-3-4-5-6-7-8-14-9

取走橙汁,找零五角

1

e

1-2-3-5-10

输入无效

 

测试用例运行如图5

 

                     5

l 对实验一2、4题使用基本路径法进行测试用例设计。

实验二:

伪代码如下:

change = P - R

N50 = change / 50         // 取整

r1 = change % 50

N10 = r1 / 10             // 取整

r2 = r1 % 10

N5 = r2 / 5               // 取整

N1 = r2 % 5

控制流图

 

            6

计算复杂度V(G)

判定节点数+1=5

测试用例如下:

 基本路径法(5)

输入

测试路径

测试结果

商品价格

支付金额

e

99

1-2-7

输入无效

99

a

1-2-3-7

输入无效

32

999

1-2-3-4-7

输入无效

20

10

1-2-3-4-5-7

输入无效

30

64

1-2-3-4-5-6

1元4张

5元0张

10元3张

50元0张

 

运行测试如下图7:

 

7

 

             

实验四:

程序中的主要决策路径有:

航线选择(欧美、国外非欧美、国内)

舱位选择(商务舱、经济舱)

飞行时间(两小时以内、超过两小时)

基本路径法绘制出控制流图

 

 

              8

计算复杂度V(G)

判定节点数(8)+1=9

 

测试用例如下:

基本路径法(9)

输入

测试路径

测试结果

航线

舱位

飞行时间

e

1

2

1-2-10

输入无效

1

e

2

1-2-3-10

输入无效

1

2

e

1-2-3-4-10

输入无效

1

2

2

1-2-3-4-5-11

食物供应,播放电影

2

1

1

1-2-3-4-5-6-12

食物供应,播放电影

2

2

1

1-2-3-4-5-6-7-13

食物供应

3

1

2

1-2-3-4-5-6-7-8-14

食物供应

3

2

2

1-2-3-4-5-6-7-8-9-15

食物供应

3

2

1

1-2-3-4-5-6-7-8-9-16

 

 

运行测试如下图6:

 

 

                                 9

l 5、

 

 

程序伪代码

注意: 1)参数表中EMPTAB 为职员表,DEPTTAB为部门表;

   2 ) ESIZE为职员表长度,DSIZE为部门表长度;

       3ERRCODE为出错码

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

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

2.输入表格

Employee Table

NAME

JOB CODE

DEPT

Salary

 

 

 

 

Department Table

DEPT

SALES

 

 

输出为1

3.输入表格

Employee Table

NAME

JOB CODE

DEPT

Salary

A

E

2

15000

B

E

2

15000

Department Table

DEPT

SALES

1

50000

2

30000

输出为2

条件覆盖

1.输入表格

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

2.输入表格

Employee Table

NAME

JOB CODE

DEPT

Salary

A

E

1

12000

Department Table

DEPT

SALES

 

 

输出为1

3.输入表格

Employee Table

NAME

JOB CODE

DEPT

Salary

A

E

2

15000

B

E

2

15000

Department Table

DEPT

SALES

1

50000

2

30000

 

测试用例程序验证如下图:

 

五、实验体会:

遇到的问题:

循环结构(如for(i=1; i<DSIZE; i++))的边界条件容易被忽略,需注意DSIZE=1时循环不执行的情况。

条件组合覆盖时,需确保逻辑或(||)的两个条件分别取真,避免仅覆盖其中一个条件。

解决方法:

对循环变量的取值范围进行详细分析,设计DSIZE=1和DSIZE=2的用例。

针对SALARY(k) >= 15000 || JOB(k)='M',分别设计仅满足其中一个条件的用例,确保两个条件的独立性。

收获:

深刻理解白盒测试中判定覆盖与条件覆盖的差异:判定覆盖关注判断整体,条件覆盖关注每个子条件。

掌握了如何通过边界值和等价类设计有效测试用例,覆盖程序中的关键逻辑路径和错误处理分支。

 

 

认识到伪代码阅读和逻辑分解的重要性,需逐层分析循环、条件判断和变量状态变化。

 

posted @ 2025-05-06 21:43  艾鑫4646  阅读(15)  评论(0)    收藏  举报