练习题:万年历查询软件,要求用户输入以年月日表示的日期,然后系统会换算出该日期的农历表示法及相关黄历信息。假设日期限定在1900年1月1日~2049年12月31日,并规定日期由8位数字字符组成,前4位表示年,中间2位表示月,最后2位表示日期。其中4、6、9、11月只有30天,平年的2月份只有28天,闰年的2月份有29天。 (备注:为简化处理,本题在进行用例设计时,不必考虑对平年、闰年的判断)
现用等价类划分法设计测试用例,来测试程序的\日期检查功能\。 1)划分等价类并编号,下表等价类划分的结果
输入等价类 日期的类型及长度 有效等价类 (1)8位数字字符 无效等价类 (9 )有非数字字符 (10)少于8位数字字符 (11)多于8位数字字符 (12)小于1900 (13)大于2049 (14)等于00 (15)大于12 (16)等于00 年份范围 月份范围 日期下限 平年2月份有28天 闰年2月份有29天 1、3、5、7、8、10、 12月份有31天 4、6、9、11月份 只有30天
(2)在1900~2049之间 (3)在01~12之间 (4)日期>=01 (5)平年2月份 日期<=28 (17)平年2月份 日期>28 (6)闰年2月份 日期<=29 (18)闰年2月份 日期>29 (7)大月 日期<=31 (8)小月 日期<=30 (19)大月 日期>31 (20)小月 日期>30 2)设计测试用例覆盖所有的有效等价类,设计的测试用例如下:
测试用例 1 2 3 4
3)为每一个无效等价类设计一个测试用例,设计结果如下:
测试用例 1 2 3 4 测试数据 9533June 2003061 200112301 18951031 覆盖的无效等价类 9 10 11 12 测试数据 20070225 20080228 20050530 19900418 覆盖的有效等价类 1、2、3、4、5 1、2、3、4、6 1、2、3、4、7 1、2、3、4、8 5 6 7 8 9 10 11 12
4)测试用例举例: 用例编号 测试项目 测试标题 预置条件 优先级别 输入 操作步骤 预期输出 20500201 20080001 20041301 19960100 20070230 20080231 19980132 19900433 13 14 15 16 17 18 19 20 DATE-ST-DATE-VALID-001 万年历查询 输入平年2月份有效日期进行查询 启动万年历软件 H 20070225 1、在日期输入框中输入20070225 2、点击查询按钮 软件显示该日期的万年历信息: 星期日 农历1月8日 丁亥年、壬寅月、庚寅日
5)存在的问题:
1、在对2月、大月、小月的无效日期进行用例选择时,日期没有取到边界上,如果程序忘记了对2月份的日期进行特殊判断,而是粗略写成所有的日期都必须小于等于28,那么用例9、用例10并不能发现错误。
2、在对大月、小月进行用例选择时,按照等价类的思想,从集合{1、3、5、7、8、10、 12}和{4、6、9、11}中任意挑选了中间数据,感觉令人不够放心。
6)解决办法:
结合边界值方法进行用例设计。
首先还是利用等价类的方法进行用例设计,然后看看哪些边界值已经被覆盖到了,最后再针
对没有被覆盖的边界值补充测试用例。
输入等价类 有效等价类 无效等价类 (9 )有非数字字符 (10)少于8位数字字符 (11)多于8位数字字符 边界值: (30)7位 (31)9位 (2)在1900~2049之间 年份范围 边界值: (21)1900 (22)2049 (3)在01~12之间 月份范围 边界值: (23)01 (24)12 (4)日期>=01 边界值: (25)01 平年2月份有28天 (12)小于1900 (13)大于2049 边界值: (32)1899 (33)2050 (14)等于00 (15)大于12 边界值: (34)00 (35)13 (16)等于00 边界值: (36)00 日期的类型及长度 (1)8位数字字符 日期下限 (5)平年2月份 日期<=28 (17)平年2月份 日期>28 边界值: 边界值: (26)28 (37)29 (6)闰年2月份 日期<=29 (18)闰年2月份 日期>29 边界值: (27)29 (7)大月 日期<=31 边界值: (28)31 (8)小月 日期<=30 边界值: (29)30 边界值: (38)30 (19)大月 日期>31 边界值: (39)32 (20)小月 日期>30 边界值: (40)31 闰年2月份有29天 1、3、5、7、8、10、 12月份有31天 4、6、9、11月份 只有30天 设计测试用例覆盖等价类和边界值
测试用例 1 2 3 4 测试数据 19000101 20491231 20010228 20000229 覆盖的有效等价类 1、2、3、4 1、2、3、4、7 1、2、3、4、5 1、2、3、4、6 覆盖边界值 21、23、25 22、24、28 26 27 5 19950430 1、2、3、4、8 29 可以再补充1月31日、11月30日的测试用例,因为1月是大月的第一个月,11月是小月的最后一个月,也可以算是边界值。
测试用例 6 7
设计测试用例覆盖无效等价类:
测试用例 1 2 3 4 5 6 7 8 9 10 11 12
测试数据 9533June 2003061 200112301 18991031 20500201 20080001 20041301 19960100 20070229 20080230 19980132 19900431 覆盖的无效等价类 9 10 11 12 13 14 15 16 17 18 19 20 覆盖的边界值 30 31 32 33 34 35 36 37 38 39 40 测试数据 19980131 20051130 覆盖的有效等价类 1、2、3、4、7 1、2、3、4、8 覆盖边界值 23、28 29