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) |
所有评论(0)