项目:NextDate()函数测试需求:NextDate函数包含三个变量:month、day和year,函数的输出为输入日期后一天的日期。例如,输入为2006年3月7日,则函数的输出为2006年3月8日。要求输入变量month、day和year均为整数值,并且满足下列条件:①1≤month≤12②1≤day≤31③1912≤year≤2050要求:黑盒测试、等价类划分法、边界值分析法分析:此函数的主要特点是输入变量之间的逻辑关系比较复杂。复杂性的来源有两个:一个是输入域的复杂性,另一个是指闰年的规则。例如变量year和变量month取不同的值,对应的变量day会有不同的取值范围,day值的范围可能是1~30或1~31,也可能是1~28或1~29。一、等价类划分法设计测试用例1、简单等价类划分测试NextDate函数分析:(1)有效等价类知识点:有效等价类是指对软件规格说明而言,由有意义的、合理的输入数据所组成的集合。利用有效等价类,能够检验程序是否实现了规格说明中预先规定的功能和性能。简单等价类划分测试NextDate函数可以划分以下三种有效等价类:M1={month:1≤month≤12}D1={day:1≤day≤31}Y1={year:1912≤year≤2050}(2)无效等价类知识点:无效等价类是指对软件规格说明而言,由无意义的、不合理的输入数据所构成的集合。利用无效等价类,可以鉴别程序异常处理的情况,检查被测对象的功能和性能的实现是否有不符合规格说明要求的地方。若条件M1,D1,Y1中任何一个条件无效,那么NextDate函数都会产生一个输出,指明相应的变量超出取值范围,例如month的值不在1~12范围当中。显然还存在着大量的year、month、day的无效组合,NextDate函数将这些组合统一输出为:“无效输入日期”。“year不在1912~2050中,请重新输入”,“month不在1~12中,请重新输入”,“day不在1~31中,请重新输入”。其无效等价类为:M2={month:month1}M3={month:month12}D2={day:day1}D3={day:day31}Y2={year:year1912}Y3={year:year2050}(3)等价类划分法的测试用例设计具体过程知识点:(1)首先为等价类表中的每一个等价类分别规定一个唯一的编号。(2)设计一个新的测试用例,使它能够尽量覆盖尚未覆盖的有效等价类。重复这个步骤,直到所有的有效等价类均被测试用例所覆盖。(3)设计一个新的测试用例,使它仅覆盖一个尚未覆盖的无效等价类。重复这一步骤,直到所有的无效等价类均被测试用例所覆盖。(1)根据输入条件的要求划分等价类,列出等价类表并编号,第一步:划分等价类(2)设计测试用例,覆盖等价类。第二步:为有效等价类设计测试用例第三步:为每一个无效等价类至少设计一个测试用例(3)执行测试用例,填写测试结果输入以及外部条件有效等价类编号无效等价类编号编号测试数据预期输出覆盖等价类编号mouthdayyearT1编号测试数据预期输出覆盖等价类编号mouthdayyearT2T3T4T5T6T7编号测试数据预期输出实际输出mouthdayyearT1T2T3T4(4)填写软件缺陷报告。简单软件缺陷报告格式如下:测试模块:NextDate()函数开发者:测试员:测试日期:2013年月日测试方法:黑盒测试、功能测试、等价类划分法软件缺陷列表缺陷ID缺陷详细信息BUG1BUG2BUG3BUG4分析:结果过多的关注于对无效等价类的测试,遗漏了很多NextDate问题需测试的关键点,比如平年闰年、二月、大小月、月底等等。此函数的主要特点是输入变量之间的逻辑关系比较复杂。复杂性的来源有两个:一个是输入域的复杂性,另一个是指闰年的规则。例如变量year和变量month取不同的值,对应的变量day会有不同的取值范围,day值的范围可能是1~30或1~31,也可能是1~28或1~29。思考:如何改进?T5T6T72、改进等价类划分测试NextDate函数在简单等价类划分测试NextDate函数中,没有考虑2月份的天数问题,也没有考虑闰年的问题,月份只包含了30天和31天两种情况。在改进等价类划分测试NextDate函数中,要考虑2月份天数的问题。关于每个月份的天数问题,可以详细划分为以下等价类:M1={month=4,6,9,11:month有30天}M2={month=1,3,5,7,8,10:month有31天,除去12月}M3={month=2:month是2月}M4={month=12:month是12月}D1={day:1≤day≤27}D2={day:day=28}D3={day:day=29}D4={day:day=30}D5={day:day=31}Y1={year:1912≤year≤2050}Y2={year:year是闰年}Y3={year:year不是闰年}(1)根据输入条件的要求划分等价类,列出等价类表并编号,第一步:划分等价类(2)设计测试用例,覆盖等价类。第二步:设计测试用例输入以及外部条件有效等价类编号无效等价类编号编号测试数据预期输出覆盖等价类编号mouthdayyearP1P2P3(3)执行测试用例,填写测试结果P4P5P6P7P8P9P10P11P12P13P14P15编号测试数据预期输出实际输出mouthdayyearP1P2P3P4P5P6P7P8P9(4)填写软件缺陷报告。简单软件缺陷报告格式如下:测试模块:NextDate()函数开发者:测试员:测试日期:2013年月日测试方法:黑盒测试、功能测试、改进的等价类划分法软件缺陷列表缺陷ID缺陷详细信息BUG1BUG2BUG3BUG4P10P11P12P13P14P15二、用边界值测试方法设计测试用例知识点:边界值分析法是对输入或输出的边界值进行测试的一种黑盒测试方法。通常,边界值分析法可作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。在测试用例设计中,需要对输入的条件进行分析并且找出其中的边界值条件,通过对这些边界值的测试查找出更多的错误。提出边界值条件时,一定要测试临近边界的有效数据,同时测试刚超过边界的无效数据。用健壮性测试法设计测试用例,按照下列步骤进行:(1)分析各变量的取值,确定边界健壮性测试时,各变量分别取:略小于最小值、最小值、略高于最小值、正常值、略低于最大值、最大值和略大于最大值。month:___________________________________________________day:___________________________________________________year:____________________________________________________测试用例数有n个变量的程序,其边界值分析会产生6n+1个测试用例。这里有3个变量,因此会产生_______个测试用例。(2)设计测试用例。NextDate函数的复杂性来源于两个方面:一是输入域的复杂性(即输入变量之间逻辑关系的复杂性),二是确定闰年的规则。但是在进行健壮性测试时,没有考虑输入变量之间的逻辑关系,也没有考虑和闰年相关的问题,因此在设计测试用例时存在遗漏问题,比如和判断闰年相关的日期:2008.2.29、1999.2.28等。NextDate函数测试用例编号测试数据预期输出mouthdayyearL1L2L3L4L5L6L7L8L9(3)执行测试用例,填写测试结果L10L11L12L13L14L15L16L17L18L19编号测试数据预期输出实际输出mouthdayyearL1L2L3L4L5L6L7L8L9L10L11(4)填写软件缺陷报告。简单软件缺陷报告格式如下:测试模块:NextDate()函数开发者:测试员:测试日期:2013年月日测试方法:黑盒测试、功能测试、边界值分析法软件缺陷列表缺陷ID缺陷详细信息BUG1BUG2BUG3BUG4说明:边界值分析法强调“独立”和“物理量”即如果被测程序是多个独立变量的函数,这些变量受物理量的限制,则很适合采用边界值法,例如:采用边界值法分析NextDate问题时这些测试用例是不充分的,没强调2月闰年等问题。这里的真正问题是,月、日、年和变量之间存在依赖关系,而边界值分析假设变量是完全独立的。思考:如何根据变量间的逻辑依赖关系设计测试输入数据,排除不可能的数据组合,解决了定义域的依赖问题。引入:因果图,决策表法。L12L13L14L15L16L17L18L19