课程名称

软件可靠性与软件测试实践

实验名称

黑盒测试

1.实验目的

1、掌握黑盒测试的基本概念和原理,基本方法和技术;

2、学会运用等价类划分和决策表等方法对应用程序进行测试;

3、学会使用测试用例,并能对测试用例进行优化;

4、学会使用测试用例对应用程序进行实际测试,并记录测试结果;

5、通过实验,逐步提高运用黑盒测试技术解决实际测试问题的能力。

2.实验内容

有一个“日期推算”程序,该程序的功能是输入一个日期,输出该日期后天的日期,例如输入2023年1月1日,则输出2023年1月3日。现在假设“日期推算”程序已经被开发出来了,请对该软件的可执行程序进行功能测试,要求用尽可能少的测试用例检测出尽可能多的软件缺陷。

为便于统一,我们约定在“日期推算”程序中有三个整型变量Year、Month、Day,分别表示日期的年月日,并假设已经限定输入数据均为整数,日期中年份的有效取值范围为1000——9999。

3.实验环境

1、Window7或以上版本的操作系统;

2、C、Java、Python开发和测试集成环境;

3、文字处理、表格制作等办公软件。

4.实验方法和步骤(含设计)

测试方法选择表

备选选项

选择结果

A.动态测试   B。静态测试

A

A.白盒测试   B.黑盒测试

B

A.等价类划分  B.边界值分析   C.因果图   D.判定表驱动   E.场景法   F.错误推测法   G.功能图法   H.正交实验设计

AD

输入数据

无效等价类

有效等价类

Year

Y1:[-∞,1000]的整数

Y2:[9999,+∞]的整数

Y3:[1000-9999]范围内平年28

Y4:[1000-9999]范围内闰年29

Month

M1:[-∞,1]的整数

M2:(12,+∞]的整数

M3:2

M4:4,6,9,11一个月30天

M5:1,3,5,7,8,10一个月31天

M6:12

Day

D1:[-∞,1)的整数

D2:(31,+∞]的整数

D3:[1,27)的整数

D4:27

D5:28

D6:29

D7:30

D8:3

程序操作表

操作编号

操作(动作)

A1

不可能

A2

Day+2

A3

Day复位

A4

Day复位+1

A5

Month+1

A6

Month复位

A7

Year+1

简化后判定表

决策表规则编号

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13

R14

R15

R16

R17

条件

year

Y3

Y4

Y3

Y4

Y4

Y3

Y4

Month

M4M5

M4

M4

M4

M5

M5

M6

M6

M6

M3

M3

M3

M3

M3

M3

M3

M3

day

D3D4D5

D6

D7

D8

D7

D8

D3D4D5D6

D7

D8

D3

D4

D4

D5

D5

D6

D6D7D8

D7D8

动作

A1

A2

A3

A4

A5

A6

A7

5.程序及测试结果

测试用例表

测试用例编号

决策表规则编号

测试用例

预期执行结果

实际执行结果

T1

R1

2012/4/15

2012 – 4 - 17

2012 – 4 - 17

T2

R2

2016/6/29

2016 - 7 - 1

2016 - 7 - 1

T3

R3

1658/9/30

1658 - 10 - 2

1658 - 10 - 2

T4

R4

1649/1/10

1649 - 1 - 12

1649 - 1 - 12

T5

R5

3549/3/30

3549 - 4 - 1

3549 - 4 - 1

T6

R6

5612/5/31

5612 - 6 - 2

5612 - 6 - 2

T7

R7

4516/12/6

4516 - 12 - 8

4516 - 12 - 8

T8

R8

7451/12/30

7452 - 1 - 1

7452 - 1 - 1

T9

R9

1322/12/31

1323 - 1 - 2

1323 - 1 - 2

T10

R10

9216/2/17

9216 - 2 - 19

9216 - 2 - 19

T11

R11

1645/2/27

1645 - 3 - 1

1645 - 3 - 1

T12

R12

1644/2/27

1644 - 2 - 29

1644 - 2 - 29

T13

R13

2018/2/28

2018 - 3 - 2

2018 - 3 - 2

T14

R14

2016/2/28

2016 - 3 - 1

2016 - 3 - 1

T15

R15

2460/2/29

2460 - 3 - 2

2460 - 3 - 2

T16

R16

2813/2/30

您输入的日期有问题,请重新输入

您输入的日期有问题,请重新输入

T17

R17

2856/2/31

您输入的日期有问题,请重新输入

您输入的日期有问题,请重新输入

测试用例执行结果统计表

项目

统计数据

测试用例总数

17

测试用例覆盖率

100%

执行测试用例数

17

测试用例执行率

82.3%

已通过的测试用例数

14

代码如下

def isLeapYear(year):
    if year % 400 == 0:
        return 1
    else:
        if year % 4 == 0 and year % 100 != 0:
            return 1
        else:
            return 0

d = {1: 31, 2: 'null', 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31}

while 1:
    print("请根据提示输入日期")
    while 1:
        while 1:
            year = int(input("请输入年:"))
            if year < 1000 or year > 9999:
                print("您输入的年份有问题,请重新输入")
            else:
                if isLeapYear(year) == 1:
                    d[2] = 29
                else:
                    d[2] = 28
                break
        while 1:
            month = int(input("请输入月:"))
            if month > 12 or month < 1:
                print("您输入的月份有问题,请重新输入")
            else:
                break
        while 1:
            day = int(input("请输入日:"))
            if day > 31 or day < 1:
                print("您输入的日份有问题,请重新输入")
            else:
                break
        if day > d[month]:
            print("您输入的日期有问题,请重新输入")
        else:
            break

    if month == 12:
        if day == 31:
            print(year, "-", month, "-", day, "的后天为:", year + 1, "-", 1, "-", 2)
        elif day == 30:
            print(year, "-", month, "-", day, "的后天为:", year + 1, "-", 1, "-", 1)
        else:
            print(year, "-", month, "-", day, "的后天为:", year, "-", month, "-", day + 2)
    else:
        if day == d[month] or day == d[month] - 1:
            print(year, "-", month, "-", day, "的后天为:", year, "-", month + 1, "-", day + 2 - d[month])
        else:
            print(year, "-", month, "-", day, "的后天为:", year, "-", month, "-", day + 2)

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐