一、实验目的

\1. 掌握黑盒测试的基础知识,理解黑盒测试概念和测试目的;

\2. 掌握黑盒测试的等价类划分方法、边界值分析方法等基本测试方法,能熟练应用这些测试技术进行测试用例设计;且能对测试用例进行优化设计;

\3. 能熟练应用边界值和决策表测试技术进行测试用例设计;

\4. 对测试用例进行优化设计;

二、实验环境

Windows环境,Word相关的办公软件, Java编程环境或C++编程环境;

三、实验原理

实验黑盒测试原理:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看作一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试。具体的黑盒测试用例设计方法包括等价类划分法、边界值分析法、因果图法、判定表法等。

等价类划分的办法是把程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的作用等价于这一类中的其他值。该方法是一种重要的,常用的黑盒测试用例设计方法。

\1. 划分等价类

划分等价类:等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试。因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据。取得较好的测试结果。等价类划分可有两种不同的情况:有效等价类和无效等价类。

有效等价类:是指对于程序的规格说明来说是合理的,有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。

无效等价类:与有效等价类的定义恰巧相反。

设计测试用例时,要同时考虑这两种等价类。因为,软件不仅要能接收合理的数据,也要能经受意外的考验。这样的测试才能确保软件具有更高的可靠性。

\2. 边界值分析

边界值分析是通过选择等价类边界的测试用例。边界值分析法不仅重视输入条件边界,而且也必须考虑输出域边界。它是对等价类划分方法的补充。

边界值分析方法的考虑;长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。使用边界值分析方法设计测试用例,首先应确定边界情况。通常输入和输出等价类的边界,就是应着重测试的边界情况。应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。

  1. 基于边界值分析方法选择测试用例的原则:

① 如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。

② 如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据。

③ 根据规格说明的每个输出条件,使用前面的原则1)。

④ 根据规格说明的每个输出条件,应用前面的原则2)。

⑤ 如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。

⑥ 如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。

⑦ 分析规格说明,找出其它可能的边界条件。

基于决策表的测试

决策表适合描述不同条件集合下采取行动的若干组合的情况。使用决策表标识测试用例,则把条件解释为输入,行动解释为输出。有时条件最终引用输入的等价类,行为引用被测试软件的主要功能处理部分,规则解释为测试用例。

对于有限条目决策表,如果有n个条件,则必须有2条规则。如果不关心条目实际地表明条件是不相关的,则没有不关心条目的规则统计为1条规则,规则中每出现一个不关心条目,该规则数乘一次2。

四、实验内容

针对如下找零程序要求,运用主要的黑盒测试方法:等价类划分法、边界值法、等方法进行黑盒测试用例设计。

找零程序如下:

假设商店货品价格(R)皆不大于100 元(且为整数),若顾客付款在100元内(P),求找给顾客最少货币个(张)数?(货币面值50 元10 元,5 元,1 元四 种 )。

实验测试代码:

\

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
plaintext
#include"stdio.h"

\#include "conio.h"

void fun()

{

int P; //所收到的钱总数

int R;//商品价格总数

int i = 0, k = 0, r50 = 0, r10 = 0, r5 = 0, r1 = 0;

//找零货币张数:r50(50元张数);r10(10元张数);r5(5元张数);r1(1元张数)



printf("请输入商品总价格:");

scanf_s("%d", &R);

printf("请输入所收的钱是多少:");

scanf_s("%d", &P);

k = P - R;

if (R>100||P>100||R>P||P <= 0||R <= 0)

{

printf("Wrong:输入大于100元或者商品总价大于所收的钱\n");

}

else {

if (P - R >= 50)

{

P = P - 50; r50 = r50 + 1; i++;

}

while (P - R >= 10)

{

P = P - 10; r10 = r10 + 1; i++;

}

while (P - R >= 5)

{

P = P - 5; r5 = r5 + 1; i++;

}

while (P - R >= 1){ P = P - 1; r1 = r1 + 1; i++; }

printf("应该找:\n %d 张50块的\n %d 张10块的 \n %d 张5块的 \n %d 张1块的\n共找钱%d张总共%d元\n", r50, r10, r5, r1, i, k);

}

}

void main()

{

do {

fun();

printf("******************************\n");

printf("请按回车继续:\n");

} while (_getch() == 13);

}

*NextDate**函数*

根据下面给出的规格说明,分别利用决策表方法,给出足够的测试用例并根据用例执行测试。

NextDate函数包含三个变量:Month(月份)、day(日期)和year(年),函数的输出为输入日期后一天的日期。例如,输入为2007年9月9日,则函数的输出为2007年9月10日。要求输入变量month、day和year均为整数,并且满足下列条件:(1)1<=month<=12;(2)1<=day<=31;(3)1912<=year<=2050

*C**语言程序*

*JAVA**程序界面*

五、实验步骤

1、根据黑盒测试技术设计测试用例,主要考虑等价类划分和边界值分析测试技术;

2、根据所学知识确定优化策略(原则:用最少的用例检测出更多的缺陷、软件测试的充分性与冗余性考虑),设计测试用例;

3、根据设计的测试用例集进行测试;

测试设计按如下步骤

1、 等价类测试设计过程

列出输入有效等价类、无效等价类。

输入数据 有效等价类 无效等价类
收到的钱总数 P (1)R<=P <= 100 (3)P > 100 (钱给多) (4)P < R (钱给少) (5)P<=0
商品价格总数 R (2)0 < R < = 100 (6)R > 100 (7)R<=0

根据等价类设计的测试用例, 如表1-2。

表1-2

序号 测试输入R 测试输入P 预期输出 覆盖等价类 测试结果 (此列放入运行结果截图)
1 96 100 r1=4 1,2
2 10 10 不找零 1,2
3 100 80 错误 2,4,
4 101 10 错误 4,6
5 10 101 错误 2,3
6 -10 10 错误 1,7

2、 边界值测试用例设计

收到的钱总数P取值范围0 < P < = 100 ,P取边界值为:

商品价格总数R取值范围0 < R < = 100 ,R取边界值为:

可以对P/R的边界值分开测试,分别测试测试用例。

表1-4

序号 测试输入R 测试输入P 预期输出 测试结果 (此列放入运行结果截图)
1 50 1 错误提示
2 50 2 错误提示
3 50 50 不找零
4 50 99 r10=4,r5=1, r1=4
5 50 100 r50=1
6 1 50 r10=4,r5=1, r1=4
7 2 50 r10=4,r5=1, r1=3
8 99 50 错误提示
9 100 50 错误提示

(1) 首先根据题目要求编写nextday功能函数;

(2) 根据功能性测试技术设计测试用例,主要考虑决策表测试技术:

分析条件桩和动作桩

输入:

-Month

-Day

-Year

为获得下一个日期,NextDate函数需执行的操作只有如下5种:

-day变量加1

-day变量复位为1

-month变量加1a

-month变量复位为1

-year变量加1

考虑规则个数:

M1 = {月份:每月有30天}

M2 = {月份:每月有31天,12月除外}

M3 = {月份:此月是12月}

M4 = {月份:此月是2月}

D1 = {日期:1≤日期≤27}

D2 = {日期:日期=28}

D3 = {日期:日期=29}

D4 = {日期:日期=30}

D5 = {日期:日期=31}

Y1 = {年:年是闰年}

Y2 = {年:年是平年}

制定初始决策表:

表1-1

1 2 3 4 5 6 7 8 9 10 11 12 13 14 ……. 22
条件桩 Month在 M1 M1 M1 M1 M1 M2 M2 M2 M2 M2 M3 M3 M3 M3 M4
Day在 D1 D2 D3 D4 D5 D1 D2 D3 D4 D5 D1 D2 D3 D5 D5
Year在 Y2
动作桩 不可能
Day加1
Day复位
Month加1
Month复位
Year加1

化简决策表:

表1-2

1 2 3 4 5 6 7 8 9 10 11 12 13
条件桩 Month在 M1 M1 M1 M2 M2 M3 M3 M4 M4 M4 M4 M4 M4
Day在 D1,D2,D3 D4 D5 D1 D2D3D4 D5 D1 D2 D3 D4 D5 D1 D2 D2 D3 D4 D5 D3 D4 D5
Year在 Y1 Y2 Y2 Y1 Y2 Y1 Y1
动作桩 不可能
Day加1
Day复位
Month加1
Month复位
Year加1

(3) 设计测试用例

表1-3

用例ID 年份 月份 日期 期望输出 实际结果
1 2001 4 15 2001-04-16
2 2001 4 30 2001-05-01
3 2001 4 31 输入有误
4 2001 5 15 2001-5-16
5 2001 5 31 2001-06-01
6 2001 12 15 2001-12-16
7 2001 12 31 2002-01-01
8 2001 2 15 2001-02-15
9 2000 2 28 2000-02-29
10 2001 2 28 2001-03-01
11 2001 2 29 输入有误
12 2000 2 29 2000-03-01
13 2000 2 30 输入有误

六、实验结果

输入数据 有效等价类 无效等价类
收到的钱总数 P (1)R<=P <= 100 (3)P > 100 (钱给多) (4)P < R (钱给少) (5)P<=0
商品价格总数 R (2)0 < R < = 100 (6)R > 100 (7)R<=0

1、等价类测试设计和结果展示

序号 测试输入R 测试输入P 预期输出 覆盖等价类 测试结果 (此列放入运行结果截图)
1 96 100 r1=4 1,2
2 10 10 不找零 1,2 ![img](file:///C:/Users/dell/AppData/Local/Packages/oice_16_974fa576_32c1d314_34eb/AC/Temp/msohtmlclip1/01/clip_image060.jpg
3 100 80 错误 2,4,
4 101 10 错误 4,6
5 10 101 错误 2,3
6 -10 10 错误 1,7

2、边界值测测试设计和结果展示

序号 测试输入R 测试输入P 预期输出 测试结果 (此列放入运行结果截图)
1 50 1 错误提示
2 50 2 错误提示
3 50 50 不找零
4 50 99 r10=4,r5=1, r1=4
5 50 100 r50=1
6 1 50 r10=4,r5=1, r1=4
7 2 50 r10=4,r5=1, r1=3
8 99 50 错误提示
9 100 50 错误提示

初始决策表如图

表1-1

1 2 3 4 5 6 7 8 9 10 11 12 13 14 ……. 22
条件桩 Month在 M1 M1 M1 M1 M1 M2 M2 M2 M2 M2 M3 M3 M3 M3 M4
Day在 D1 D2 D3 D4 D5 D1 D2 D3 D4 D5 D1 D2 D3 D5 D5
Year在 Y2
动作桩 不可能
Day加1
Day复位
Month加1
Month复位
Year加1

化简决策表:

表1-2

1 2 3 4 5 6 7 8 9 10 11 12 13
条件桩 Month在 M1 M1 M1 M2 M2 M3 M3 M4 M4 M4 M4 M4 M4
Day在 D1,D2,D3 D4 D5 D1 D2D3D4 D5 D1 D2 D3 D4 D5 D1 D2 D2 D3 D4 D5 D3 D4 D5
Year在 Y1 Y2 Y2 Y1 Y2 Y1 Y1
动作桩 不可能
Day加1
Day复位
Month加1
Month复位
Year加1

(1) 设计测试用例

表1-3

用例ID 年份 月份 日期 期望输出 实际结果
1 2001 4 15 2001-04-16
2 2001 4 30 2001-05-01
3 2001 4 31 输入有误
4 2001 5 15 2001-5-16
5 2001 5 31 2001-06-01
6 2001 12 15 2001-12-16
7 2001 12 31 2002-01-01
8 2001 2 15 2001-02-15
9 2000 2 28 2000-02-29
10 2001 2 28 2001-03-01
11 2001 2 29 输入有误
12 2000 2 29 2000-03-01
13 2000 2 30 输入有误