一、实验目的
保证一个模块中的所有路径至少被执行一次;
对所有的逻辑值均需要测试真、假两个分支;
在上下边界及可操作范围内运行所有循环;
检查内部数据结构以确保其有效性。
二、实验内容
要求:
被测测试程序功能:PriorDate函数;
程序定义:
为了获得前一个日期, PriorDate函数执行如下操作:
(默认年数大于等于0)
如果输入日期day变量值大于1,则把day变量的值减1;
如果输入日期是2~12月份中某月的第一天,则把day变量的值置为前一个月的最后一天,month变量的值减1;
如果输入日期是1月的第一天,则day变量的值置为31,month变量的值置为12,year变量的值减1。
关于最后一天的判断:
如果是有31天的月份(1,3,5,7,8,10,12),day变量值为31;
如果是有30天的月份(4,6,9,11),day变量值为30;
如果是有29天的月份(闰年的2月),day变量值为29;
如果是有28天的月份(非闰年的2月),day变量值为28。
测试环境:Windows 7、Eclipse;
三、实验要求
根据代码调通程序并进行白盒测试,即用语句覆盖、分支覆盖、条件覆盖、分支/条件覆盖、条件组合覆盖及基本路径测试方法,写出测试用例,执行测试,给出测试报告,实验报告。
四、实验测试用例与测试结果
程序的流程图如下图:
1.语句覆盖
语句覆盖就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。
| 测试数据 | 执行路径 | 结果 |
| month=13,day=32,year=-10 | OACEGZ | 日的范围为:1...31 月的范围为: 1...12 年应该大于0 |
| month=12,day=12,year=2012 | OBDFHLY | 前一天为:12 11 2012 |
| month=12,day=1,year=2012 | OBDFHMY | 前一天为:11 30 2012 |
| month=11,day=12,year=2012 | OBDFINY | 前一天为:11 11 2012 |
| month=11,day=1,year=2012 | OBDFIPY | 前一天为:10 31 2012 |
| month=3,day=12,year=2000 | OBDFJQY | 前一天为:3 11 2000 |
| month=3,day=1,year=2012 | OBDFJRY | 前一天为:2 28 2012 |
| month=1,day=12,year=2012 | OBDFKSY | 前一天为:1 11 2012 |
| month=1,day=1,year=2012 | OBDFKTWY | 前一天为:12 31 2009 |
| month=1,day=1,year=0 | OBDFKTXY | 上一年也应大于0 |
执行足够的测试用例,使得程序中的每一个分支至少都通过一次
| 测试数据 | 执行路径 | 结果 |
| month=13,day=32,year=-10 | OACEGZ | 日的范围为:1...31 月的范围为: 1...12 年应该大于0 |
| month=12,day=12,year=2012 | OBDFHLY | 前一天为:12 11 2012 |
| month=12,day=1,year=2012 | OBDFHMY | 前一天为:11 30 2012 |
| month=11,day=12,year=2012 | OBDFINY | 前一天为:11 11 2012 |
| month=11,day=1,year=2012 | OBDFIPY | 前一天为:10 31 2012 |
| month=3,day=12,year=2000 | OBDFJQY | 前一天为:3 11 2000 |
| month=3,day=1,year=2000 | OBDFJRY | 前一天为:2 29 2000 |
| month=3,day=1,year=2012 | OBDFJRY | 前一天为:2 28 2012 |
| month=1,day=12,year=2012 | OBDFKSY | 前一天为:1 11 2012 |
| month=1,day=1,year=2012 | OBDFKTWY | 前一天为:12 31 2009 |
| month=1,day=1,year=0 | OBDFKTXY | 上一年也应大于0 |
| 测试数据 | 执行路径 | 结果 |
| month=13,day=32,year=-10 | OACEGZ | 日的范围为:1...31 月的范围为: 1...12 年应该大于0 |
| month=0,day=0,year=1800 | OACEGZ | 日的范围为:1...31 月的范围为: 1...12 年应该大于0 |
| month=12,day=12,year=2012 | OBDFHLY | 前一天为:12 11 2012 |
| month=12,day=1,year=2012 | OBDFHMY | 前一天为:11 30 2012 |
| month=11,day=12,year=2012 | OBDFINY | 前一天为:11 11 2012 |
| month=11,day=1,year=2012 | OBDFIPY | 前一天为:10 31 2012 |
| month=3,day=12,year=2000 | OBDFJQY | 前一天为:3 11 2000 |
| month=3,day=1,year=2000 | OBDFJRY | 前一天为:2 29 2000 |
| month=3,day=1,year=2012 | OBDFJRY | 前一天为:2 28 2012 |
| month=1,day=12,year=2012 | OBDFKSY | 前一天为:1 11 2012 |
| month=1,day=1,year=2012 | OBDFKTWY | 前一天为:12 31 2009 |
| month=1,day=1,year=0 | OBDFKTXY | 上一年也应大于0 |
4.分支/条件覆盖
执行足够的测试用例,使得分支中每个条件取到各种可能的值,并使每个分支取到各种可能的结果。
| 测试数据 | 执行路径 | 结果 |
| month=13,day=32,year=-10 | OACEGZ | 日的范围为:1...31 月的范围为: 1...12 年应该大于0 |
| month=0,day=0,year=1800 | OACEGZ | 日的范围为:1...31 月的范围为: 1...12 年应该大于0 |
| month=12,day=12,year=2012 | OBDFHLY | 前一天为:12 11 2012 |
| month=12,day=1,year=2012 | OBDFHMY | 前一天为:11 30 2012 |
| month=11,day=12,year=2012 | OBDFINY | 前一天为:11 11 2012 |
| month=11,day=1,year=2012 | OBDFIPY | 前一天为:10 31 2012 |
| month=3,day=12,year=2000 | OBDFJQY | 前一天为:3 11 2000 |
| month=3,day=1,year=2004 | OBDFJRUY | 前一天为:2 29 2004 |
| month=3,day=1,year=2000 | OBDFJRUY | 前一天为:2 29 2000 |
| month=3,day=1,year=2012 | OBDFJRY | 前一天为:2 28 2012 |
| month=1,day=12,year=2012 | OBDFKSY | 前一天为:1 11 2012 |
| month=1,day=1,year=2012 | OBDFKTWY | 前一天为:12 31 2009 |
| month=1,day=1,year=1812 | OBDFKTXY | 上一年也应大于0 |
执行足够的例子,使得每个判定中条件的各种可能组合都至少出现一次。
| 测试数据 | 执行路径 | 结果 |
| month=13,day=32,year=-10 | OACEGZ | 日的范围为:1...31 月的范围为: 1...12 年应该大于0 |
| month=0,day=0,year=1800 | OACEGZ | 日的范围为:1...31 月的范围为: 1...12 年应该大于0 |
| month=0,day=1,year=1800 | OBCEGZ | 月的范围为: 1...12 年应该大于0 |
| month=0,day=0,year=2000 | OACFGZ | 日的范围为:1...31 月的范围为: 1...12 |
| month=0,day=1,year=2000 | OBCFGZ | 月的范围为: 1...12 |
| month=1,day=0,year=1800 | OADFKTXZ | 日的范围为:1...31 年应该大于0 |
| month=1,day=1,year=1800 | OBDEKTXZ | 年应该大于0 |
| month=1,day=0,year=2000 | OADFKTXZ | 日的范围为:1...31 |
| month=1,day=1,year=2000 | OBDFKTXY | 前一天为:12 31 1999 |
| month=12,day=12,year=2012 | OBDFHLY | 前一天为:12 11 2012 |
| month=12,day=1,year=2012 | OBDFHMY | 前一天为:11 30 2012 |
| month=11,day=12,year=2012 | OBDFINY | 前一天为:11 11 2012 |
| month=11,day=1,year=2012 | OBDFIPY | 前一天为:10 31 2012 |
| month=3,day=12,year=2000 | OBDFJQY | 前一天为:3 11 2000 |
| month=3,day=1,year=2004 | OBDFJRUY | 前一天为:2 29 2004 |
| month=3,day=1,year=2000 | OBDFJRUY | 前一天为:2 29 2000 |
| month=3,day=1,year=2008 | OBDFJRUY | 前一天为:2 29 2008 |
| month=3,day=1,year=2001 | OBDFJRUY | 前一天为:2 28 2001 |
| month=3,day=1,year=2012 | OBDFJRY | 前一天为:2 28 2012 |
| month=1,day=12,year=2012 | OBDFKSY | 前一天为:1 11 2012 |
| month=1,day=1,year=2012 | OBDFKTWY | 前一天为:12 31 2009 |
| month=1,day=1,year=0 | OBDFKTXY | 上一年也应大于0 |
设计足够的测试用例,覆盖程序中所有可能的路径,其中控制流图如下图:
图形矩阵如下:
| 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 | |
| 1 | 1 | ||||||||||||||||||||||||||||||
| 2 | 1 | 1 | |||||||||||||||||||||||||||||
| 3 | 1 | ||||||||||||||||||||||||||||||
| 4 | 1 | ||||||||||||||||||||||||||||||
| 5 | 1 | 1 | |||||||||||||||||||||||||||||
| 6 | 1 | ||||||||||||||||||||||||||||||
| 7 | 1 | ||||||||||||||||||||||||||||||
| 8 | 1 | 1 | |||||||||||||||||||||||||||||
| 9 | 1 | ||||||||||||||||||||||||||||||
| 10 | 1 | ||||||||||||||||||||||||||||||
| 11 | 1 | 1 | 1 | 1 | 1 | ||||||||||||||||||||||||||
| 12 | 1 | ||||||||||||||||||||||||||||||
| 13 | 1 | 1 | |||||||||||||||||||||||||||||
| 14 | 1 | 1 | |||||||||||||||||||||||||||||
| 15 | 1 | 1 | |||||||||||||||||||||||||||||
| 16 | 1 | 1 | 1 | ||||||||||||||||||||||||||||
| 17 | 1 | ||||||||||||||||||||||||||||||
| 18 | 1 | ||||||||||||||||||||||||||||||
| 19 | 1 |
| 20 | 1 | ||||||||||||||||||||||||||||||
| 21 | 1 | ||||||||||||||||||||||||||||||
| 22 | 1 | 1 | |||||||||||||||||||||||||||||
| 23 | 1 | ||||||||||||||||||||||||||||||
| 24 | 1 | 1 | |||||||||||||||||||||||||||||
| 25 | 1 | ||||||||||||||||||||||||||||||
| 26 | 1 | ||||||||||||||||||||||||||||||
| 27 | 1 | ||||||||||||||||||||||||||||||
| 28 | 1 | ||||||||||||||||||||||||||||||
| 29 | 1 | ||||||||||||||||||||||||||||||
| 30 | 1 | ||||||||||||||||||||||||||||||
| 31 |
| 测试数据 | 执行路径 (图形矩阵对应路径) | 结果 | |
| month=13,day=32,year=-10 | OACEGZ | 日的范围为:1...31 月的范围为: 1...12 年应该大于0 | |
| month=0,day=0,year=1800 | OACEGZ | 日的范围为:1...31 月的范围为: 1...12 年应该大于0 | |
| month=0,day=1,year=1800 | OBCEGZ | 月的范围为: 1...12 年应该大于0 | |
| month=0,day=0,year=2000 | OACFGZ | 日的范围为:1...31 月的范围为: 1...12 | |
| month=0,day=1,year=2000 | OBCFGZ | 月的范围为: 1...12 | |
| month=1,day=0,year=1800 | OADFKTXZ | 日的范围为:1...31 年应该大于0 | |
| month=1,day=1,year=1800 | OBDEKTXZ | 年应该大于0 | |
| month=1,day=0,year=2000 | OADFKTXZ | 日的范围为:1...31 | |
| month=1,day=1,year=2000 | OBDFKTXY | 前一天为:12 31 1999 | |
| month=12,day=12,year=2012 | OBDFHLY | 前一天为:12 11 2012 | |
| month=12,day=1,year=2012 | OBDFHMY | 前一天为:11 30 2012 | |
| month=11,day=12,year=2012 | OBDFINY | 前一天为:11 11 2012 | |
| month=11,day=1,year=2012 | OBDFIPY | 前一天为:10 31 2012 | |
| month=3,day=12,year=2000 | OBDFJQY | 前一天为:3 11 2000 | |
| month=3,day=1,year=2004 | OBDFJRUY | 前一天为:2 29 2004 | |
| month=3,day=1,year=2000 | OBDFJRUY | 前一天为:2 29 2000 | |
| month=3,day=1,year=2008 | OBDFJRUY | 前一天为:2 29 2008 | |
| month=3,day=1,year=2001 | OBDFJRUY | 前一天为:2 28 2001 | |
| month=3,day=1,year=2012 | OBDFJRY | 前一天为:2 28 2012 | |
| month=1,day=12,year=2012 | OBDFKSY | 前一天为:1 11 2012 |
| month=1,day=1,year=2012 | OBDFKTWY | 前一天为:12 31 2009 |