426

实验二白盒测试

一、实验目的

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

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

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

二、实验要求

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

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

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

三、实验内容

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

设计函数实现输入日期显示星期几

1. 语句覆盖

测试用例表

测试用例编号

输入日期

预期输出

SC1

2025-04-20

星期日(Sunday)

SC2

2025-02-29

无效日期

SC3

2000-02-29

星期二(Tuesday)

SC4

非法格式(如abc)

错误提示

 

2. 判定覆盖

确保程序中的每个判定语句的真假分支都被执行。

测试用例信息表

测试用例编号

输入日期

测试判定条件

预期输出

DC1

2025-04-20

合法日期为真

星期日

DC2

2025-02-29

合法日期 为假

无效日期

DC3

2000-02-29

是否闰年 为真

星期二

DC4

2001-02-28

是否闰年 为假

星期三

DC5

非法格式(如abc)

分隔符判断为假

错误提示

 

3. 条件覆盖

确保程序中的每个条件的可能结果都被执行。

测试用例表

测试用例编号

输入日期

测试条件

预期输出

CC1

2000-02-29

year % 4 == 0 为真

星期二

CC2

2000-02-29

year % 100 != 0 为假

星期二

CC3

2000-02-29

year % 400 == 0 为真

星期二

CC4

1900-02-28

year % 4 == 0 为真

星期二

CC5

1900-02-28

year % 100 != 0 为假

星期二

CC6

1900-02-28

year % 400 == 0 为假

星期二

CC7

2004-02-29

year % 4 == 0 为真

星期五

CC8

2004-02-29

year % 100 != 0 为真

星期五

CC9

2004-02-29

year % 400 == 0 为假

星期五

流程图

 
   

有一个饮料自动售货机(处理单价为5角钱)的控制处理软件,它的软件规格说明如下:

若投入5角钱的硬币,按下橙汁啤酒的按钮,则相应的饮料就送出来。若投入1元钱的硬币,同样也是按橙汁啤酒的按钮,则自动售货机在送出相应饮料的同时退回5角钱的硬币。

1. 语句覆盖

测试用例表

测试用例编号

输入硬币

按钮选择

预期输出

SC1

5角

橙汁

送出橙汁

SC2

5角

啤酒

送出啤酒

SC3

1元

橙汁

送出橙汁并退回5角

SC4

1元

啤酒

送出啤酒并退回5角

SC5

非法硬币

任意按钮

无动作并提示无效硬币

 

2. 判定覆盖

测试用例信息表

测试用例编号

输入硬币

按钮选择

测试判定条件

预期输出

DC1

5角

橙汁

判断投入硬币为5角为真

送出橙汁

DC2

1元

橙汁

判断投入硬币为1元为真

送出橙汁并退回5角

DC3

非法硬币

任意按钮

判断投入硬币合法为假

无动作并提示无效硬币

DC4

5角

无效按钮

判断按钮选择有效为假

无动作并提示无效选择

 

3. 条件覆盖

测试用例表

测试用例编号

输入硬币

按钮选择

测试条件

预期输出

CC1

5角

橙汁

投入硬币为5角为真

送出橙汁

CC2

1元

橙汁

投入硬币为1元为真

送出橙汁并退回5角

CC3

非法硬币

任意按钮

投入硬币合法为假

无动作并提示无效硬币

CC4

5角

无效按钮

按钮选择有效为假

无动作并提示无效选择

流程图

 
   

 

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

假设商店货品价格(R) 都不大于100元(且为整数),若顾客付款(P)100元内,现有一个程序能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币张数最少)。 假定此商店的货币面值只包括:50(N50)10(N10) 5(N5)1(N1) 四种。

控制流图

 
   

 

基本路径法测试用例设计

测试用例信息表

测试用例编号

价格 R

付款 P

预期输出(N50, N10, N5, N1)

覆盖路径

TC1

95

100

(1, 0, 0, 0)

1→2→3→4→5→6→7

TC2

101

100

"无效输入"

1→2→3→7

TC3

50

49

"无效输入"

1→2→3→4→7

TC4

'a'

100

"输入必须为整数"

1→2→7

TC5

45

100

(1, 0, 1, 0)

1→2→3→4→5→6→7

TC6

99

100

(0, 0, 0, 1)

1→2→3→4→5→6→7

TC7

1

100

(1, 1, 0, 0)

1→2→3→4→5→6→7

4、航空服务查询问题:根据航线,仓位,飞行时间查询航空服务。

假设一个中国的航空公司规定:

① 中国去欧美的航线所有座位都有食物供应,每个座位都可以播放电影。

② 中国去非欧美的国外航线都有食物供应,只有商务仓可以播放电影。

③ 中国国内的航班的商务仓有食物供应,但是不可以播放电影

④ 中国国内航班的经济仓只有当飞行时间大于2小时时才有食物供应,但是不可以播放电影。

控制流图

 
   

基本路径法测试用例设计

 

测试用例信息表

测试用例编号

航线类型

舱位类型

飞行时间

预期输出(食物供应,电影服务)

覆盖路径

TC1

国际欧美

商务舱

超过两小时

有,有

1→2→3→11→12

TC2

国际非欧美

经济舱

两小时以内

有,无

1→2→4→7→11→12

TC3

国内

经济舱

超过两小时

有,无

1→2→5→9→10→11→12

TC4

国内

商务舱

超过两小时

有,无

1→2→5→8→11→12

TC5

国际欧美

经济舱

两小时以内

有,有

1→2→3→11→12

TC6

国际非欧美

商务舱

超过两小时

有,有

1→2→4→6→11→12

TC7

国内

经济舱

两小时以内

无,无

1→2→5→9→10→11→12

 

 

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;

}

}

 

采用判定覆盖、条件覆盖对该程序进行用例设计

流程图

 

判定覆盖和条件覆盖测试用例设计

判定覆盖

测试用例编号 描述 输入条件 输出结果(ERRCODE 覆盖路径

TC1 输入表为空 ESIZE = 0DSIZE = 0 1 1231011

TC2 正常输入,最大部门有职员 ESIZE > 0DSIZE > 0 0 1234567891011

TC3 最大部门无职员 ESIZE > 0DSIZE > 0 2 1234567891011

测试用例信息表

测试用例编号

描述

输入条件

输出结果(ERRCODE

TC1

输入表为空

ESIZE = 0DSIZE = 0

1

TC2

正常输入,最大部门有职员

ESIZE > 0DSIZE > 0

0

TC3

最大部门无职员

ESIZE > 0DSIZE > 0

2

 

条件覆盖

测试用例编号 描述 输入条件 输出结果(ERRCODE 覆盖路径

TC4 薪资 15000.00 SALARY[k] 15000.00 0 1234567891011

TC5 职位为经理 (M) JOB[k] = 'M' 0 1234567891011

TC6 薪资 < 15000.00 且职位非经理 SALARY[k] < 15000.00JOB[k] 'M' 0

测试用例信息表

测试用例编号

描述

输入条件

输出结果(ERRCODE

TC4

薪资 ≥ 15000.00

SALARY[k] ≥ 15000.00

0

TC5

职位为经理 (M)

JOB[k] = 'M'

0

TC6

薪资 < 15000.00 且职位非经理

SALARY[k] < 15000.00JOB[k] ≠ 'M'

0

 

五、实验体会:

1. 遇到的问题

理解需求问题,一开始对于实验的具体要求和目标理解不够深入,导致在设计测试用例时方向有偏差,走了弯路。逻辑梳理问题,在分析程序逻辑时,对于一些复杂的条件判断和循环结构理解不够透彻,难以准确地构建控制流图和流程图。工具使用问题,不熟悉绘图工具的操作,绘制流程图时遇到了一些困难,如节点布局不合理、连线不清晰等,影响了图表的美观性和可读性。测试用例设计问题,在设计判定覆盖和条件覆盖的测试用例时,难以确保所有条件组合都被覆盖,存在遗漏的风险,设计出的测试用例不够全面。

2. 问题解决方法

深入分析逻辑,通过仔细阅读代码,使用调试工具单步执行程序,观察程序的执行流程和变量变化,结合手动画流程图的方式,逐步梳理清楚程序的逻辑结构,准确构建控制流图和流程图。学习工具使用,在网上查找绘图工具的使用教程,通过实践操作熟悉工具的各项功能,不断调整和优化流程图的布局,使其更加清晰、美观和符合规范。采用系统方法设计测试用例,学习和应用测试用例设计的系统方法,如判定表、等价类划分等,结合程序逻辑,全面分析所有可能的条件组合和路径,确保测试用例覆盖充分。

3. 收获

专业知识提升,通过本次实验,对程序测试的方法和流程有了更深入的理解,掌握了控制流图、流程图的绘制以及判定覆盖和条件覆盖的基本概念和应用场景,进一步巩固了软件工程的相关知识。问题解决能力增强,在遇到问题时,学会了通过多种途径查找资料、分析原因并寻找解决方案,提高了独立解决问题的能力,培养了严谨的思维习惯和耐心。工具使用熟练度提高,熟悉了绘图工具的使用,能够更熟练地运用工具表达自己的想法和成果,提高了工作效率,为今后的学习和工作提供了有力的支持。

 

posted @ 2025-04-26 23:45  混沌武士丞  阅读(14)  评论(0)    收藏  举报