《软件测试第二章单元测试2.ppt》由会员分享,可在线阅读,更多相关《软件测试第二章单元测试2.ppt(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第二章第二章 单元测试单元测试-黑盒测试用黑盒测试用例设计(例设计(等价类划分法)黑盒测试黑盒测试被称为功能测试或数据驱动测试。在测试时,把被测黑盒测试被称为功能测试或数据驱动测试。在测试时,把被测程序视为一个不能打开的黑盒子,在完全不考虑程序内部结构程序视为一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下进行。和内部特性的情况下进行。采用黑盒测试的目的主要是在已知软件产品所应具有的功能的采用黑盒测试的目的主要是在已知软件产品所应具有的功能的基础上,进行:基础上,进行:(1)检查程序功能能否按需求规格说明书的规定正常使用,)检查程序功能能否按需求规格说明书的规定正常使用,测试各
2、个功能是否有遗漏,检测性能等特性要求是否满足。测试各个功能是否有遗漏,检测性能等特性要求是否满足。(2)检测人机交互是否错误,检测数据结构或外部数据库访)检测人机交互是否错误,检测数据结构或外部数据库访问是否错误,程序是否能适当地接收输入数据而产生正确的输问是否错误,程序是否能适当地接收输入数据而产生正确的输出结果,并保持外部信息(如数据库或文件)的完整性。出结果,并保持外部信息(如数据库或文件)的完整性。(3)检测程序初始化和终止方面的错误。)检测程序初始化和终止方面的错误。黑盒测试称为功能性测试或数据驱动测试。等价类划分法的思想-1n等价列划分设计方法是把所有可能的输入数据,即程序的输入域
3、划分成若干部分(子集),然后从每一个子集中选取少量具有代表性的数据作为测试用例。等价类划分法的思想-2n定义:定义:将程序的输入域划分为若干部分,然后从每个部分中选取少数代表性数据当作测试用例。n原因:原因:由于实现穷举测试的不可能性,只有从大量的可能数据中选取一部分作为测试用例。n效果:效果:经过类别划分后,每一类的代表性数据在测试中的作用都等价于这一类中的其他值。n手段:手段:在设计测试用例时,在需求说明的基础上划分等价类,列出等价表,从而确定测试用例。等价类的类型*有效等价类:是指对于程序的规格说明来说是有效等价类:是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用合理
4、的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中有效等价类可检验程序是否实现了规格说明中所规定的功能和性能所规定的功能和性能*无效等价类:无效等价类:是指对软件规格说明而言,是指对软件规格说明而言,是无意义的、不合理的输入数据所构成的集合。是无意义的、不合理的输入数据所构成的集合。利用无效等价类,可以鉴别程序异常处理的情利用无效等价类,可以鉴别程序异常处理的情况,检查被测对象的功能和性能的实现是否有况,检查被测对象的功能和性能的实现是否有不符合规格说明要求的地方。不符合规格说明要求的地方。n等价类对于测试有两个重要的意义:完备性完备性整个输入域提供一种形式的完备性无
5、冗余性无冗余性若互不相交则可保证一种形式的无冗余性。如何划分等价类如何划分等价类1n如何划分?如何划分?先从程序的规格说明书中找出各个输入条件,再为每个输入条件划分两个或多个等价类,形成若干的互不相交的子集。如何划分等价类如何划分等价类n举例:划分 加法器程序的等价类,给出测试用例n给出的 测试用例 都是整数,如果输入的是小数、字符怎么办?n只考虑了输入数据的范围,没有考虑输入数据的类型。考虑输入数据类型和范围n加数:数值非数值整数小数(4)1100(2)100(3)字母(5)特殊字符(6)空格(7)空白(8)1(1)等价类划分步骤n(1)先考虑输入数据的类型(合法型和非法型)n(2)再考虑数
6、据范围(合法型中的合法区间和非法区间)n(3)画出示意图,区分等价类n(4)为每一个等价类编号。等价类的划分原则(1)按照区间划分在输入条件规定了取值范围或值的个数的情况下,可以确定一个有效等价类和两个无效等价类。例:例:程序输入条件为小于程序输入条件为小于100100大于大于1010的的整数整数x x,则有效等价类为,则有效等价类为1010 x x100100,两个无效等价类为两个无效等价类为x10 x10和和x100 x100。例:例:程序输入程序输入x x取值于一个固定的枚举类型取值于一个固定的枚举类型1,3,7,151,3,7,15,且程序,且程序 中对这中对这4 4个数值分别进行了处
7、理,则有效等价类为个数值分别进行了处理,则有效等价类为x=1x=1、x=3x=3、x=7x=7、x=15x=15,无效等价类为,无效等价类为x1,3,7,15x1,3,7,15的值的集合。的值的集合。(2)按照数值划分在规定了一组输入数据(假设包括 n个 输入值),并且程序要对每一个输入值分别进行处理的情况下,可确定 n 个有效等价类(每个值确定一个有效等价类)和一个无效等价类(所有不允许的输入值的集合)。(3)按照数值集合划分在输入条件规定了输入值的集合或规定了“必须如何”的条件下,可以确定一个有效等价类和一个无效等价类(该集合有效值之外)。例:程序输入用户口令的长度必须是4位的串,可以确定
8、一个有效等价类是串的长度为4,一个无效等价类长度不为4。(4)按照限制条件或规则划分在规定了输入数据必须遵守的规则或限制条件的情况下,可确定一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。例:程序输入条件为取值为奇数的整数x,则有效等价类为x的值为奇数的整数,无效等价类为x的值不为奇数的整数。(5)细分等价类在确知已划分的等价类中各元素在程序中的处理方式不同的情况下,则应再将该等价类进一步划分为更小的等价类,并建立等价类表。例:例:程序输入条件为以字符程序输入条件为以字符 a a开头、长度为开头、长度为8 8的字符串,并且字符串不包含的字符串,并且字符串不包含 a za z
9、之之外的其它字符,则有效等价类为满足了上述所外的其它字符,则有效等价类为满足了上述所有条件的字符串,无效等价类为不以有条件的字符串,无效等价类为不以 a a开开头的字符串、长度不为头的字符串、长度不为8 8的字符串和包含了的字符串和包含了 a za z之外其它字符的字符串。之外其它字符的字符串。等价类划分法设计测试用例的步骤(1)确定等价类(2)建立等价类表,列出所有划分出的等价类(3)从划分出的等价类中按以下的3个原则设计测试用例:A 为每一个等价类规定一个唯一的编号 B 设计一个新的测试用例,使其尽可能多的覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止。C 设计一
10、个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。常见等价类划分测试形式n针对是否对无效数据进行测试,可以将等价类测试分为两种:n标准等价类测试(也称,一般等价类测试)n健壮等价类测试标准(一般)等价类测试n不考虑无效数据值,测试用例使用每个不考虑无效数据值,测试用例使用每个等价类中的一个值;等价类中的一个值;n通常,标准等价类测试用例的数量和最通常,标准等价类测试用例的数量和最大等价类中元素的数目相等大等价类中元素的数目相等。健壮等价类测试n出发点考虑了无效等价类;出发点考虑了无效等价类;n对有效输入,测试用例从每个有效等价类中对有效输入,测
11、试用例从每个有效等价类中取一个值;对无效输入,一个测试用例有一取一个值;对无效输入,一个测试用例有一个无效值,其他值均取有效值;个无效值,其他值均取有效值;n存在问题:存在问题:n规格说明往往没有定义无效测试用例的期望输规格说明往往没有定义无效测试用例的期望输出,因此需要定义这些测试用例的期望输出;出,因此需要定义这些测试用例的期望输出;n对强类型语言没有必要考虑无效的输入。对强类型语言没有必要考虑无效的输入。等价类划分法n常见的等价类划分测试形式n问题:某函数F有两个变量x1,x2.要求两输入变量的取值范围如下:na x1d,区间为a,b,(b,c),c,dne x2 g,区间为e,f),f
12、,gnx1,x2的无效区间为:nx1d;x2gn(1)弱一般等价类测试n特点:不考虑无效数据,测试用例使用每个等价类中的一个值abcdefgx2x1(2)强一般等价类测试特点:每一个有效等价类要选择至少一个测试用例abcdefgx2x1(3)弱健壮等价类测试对于无效输入:测试用例只使用一个无效值,其余值都是有效的。abcdefgx2x1(4)强健壮等价类测试每个有效等价类和无效等价类都至少要选择一个测试用例abcdefgx2x1案例1:1、某城市电话号码由三部分组成,分别是:地区码 空白或三位数字;前 缀 非0或1开头的三位数字;后 缀 4位数字。假定被测程序能接受一切符合上述规定的电话号码,
13、拒绝所有不符合规定的电话号码。多于多于3位数字位数字少于少于3位数字位数字有非数字字符有非数字字符 空白空白3位数字位数字地区码地区码编号编号无效等价类无效等价类编号编号有效等价类有效等价类输入条件输入条件前缀前缀200999有非数字字符有非数字字符起始为起始为0的三位数的三位数起始为起始为1的三位数的三位数少于少于3位数字位数字多于多于3位数字位数字后缀后缀4位数字位数字有非数字字符有非数字字符少于少于4位数字位数字多于多于4位数字位数字341256789101112131415(1)划分等价类、列出等价类表测试用例测试用例编号编号输入数据输入数据预期输出预期输出地区码地区码前缀前缀后缀后缀
14、1空白空白1234567接受(有效)接受(有效)21238059876接受(有效)接受(有效)320A1234567拒绝(无效)拒绝(无效)4332345678拒绝(无效)拒绝(无效)512342344567拒绝(无效)拒绝(无效)61232B31234拒绝(无效)拒绝(无效)71230131234拒绝(无效)拒绝(无效)81231231234拒绝(无效)拒绝(无效)9123231234拒绝(无效)拒绝(无效)1012323451234拒绝(无效)拒绝(无效)111232341B34拒绝(无效)拒绝(无效)1212323434拒绝(无效)拒绝(无效)1312323423345拒绝(无效)拒绝(
15、无效)覆盖等价类覆盖等价类1,3,42,3,456789101112131415n保险公司计算保费费率的程序保险公司计算保费费率的程序 某保险公司的人寿保险的保费计算方式为:投保额保险费率 其中,保险费率依点数不同而有别,10点及10点以上保险费率为0.6%,10点以下保险费率为0.1%;而点数又是由 投保人的年龄、性别、婚姻状况和抚养人数来决定,具体规则如下:年龄 性别婚姻抚养人数 2039 4059 其它 M F 已婚 未婚 1人扣0.5点 最多扣3点(四舍五入取整)6点 4点 2点 5点 3点 3点 5点案例2:计算保费费率的程序(1)分析程序规格说明中给出和隐含的对输入条件的要求,)分
16、析程序规格说明中给出和隐含的对输入条件的要求,列出等价类表(包括有效等价类和无效等价类)。列出等价类表(包括有效等价类和无效等价类)。n年龄:一位或两位非零整数,值的有效范围为年龄:一位或两位非零整数,值的有效范围为199n性别:一位英文字符,只能取值性别:一位英文字符,只能取值M或或Fn婚姻:字符,只能取值婚姻:字符,只能取值已婚已婚或或未婚未婚n抚养人数:空白或一位非零整数(抚养人数:空白或一位非零整数(19)n点数点数:一位或两位非零整数,值的范围为:一位或两位非零整数,值的范围为199(2)根据()根据(1)中的等价类表,设计能覆盖所有等价类的)中的等价类表,设计能覆盖所有等价类的 测
17、试用例。测试用例。等价类表等价类表测试用例测试用例练习n现有一个小程序,能够求出三个在-10000到+10000间整数中的最大者,程序界面如下:练习2:设计出三角形问题的测试用例n输入三个整数作为三边的边长构成三角输入三个整数作为三边的边长构成三角形。当此三角形为一般三角形、等腰三形。当此三角形为一般三角形、等腰三角形、等边三角形时,分别作计算。用角形、等边三角形时,分别作计算。用等价类划分方法为该程序进行测试用例等价类划分方法为该程序进行测试用例设计。设计。n练习3:NextDate函数nNextDateNextDate函数有三个变量函数有三个变量month,day,yearmonth,da
18、y,year的函数,输出为输入的函数,输出为输入日期下一天的日期。如:输入为日期下一天的日期。如:输入为20072007年年7 7月月1919日,输出为日,输出为20072007年年7 7月月2020日。要求三个变量都为整数,且满日。要求三个变量都为整数,且满足:足:n条件:1 month 12n条件2:1 day 31n条件3:1912 year 2050(1)划分等价类1Year Month DayYear Month Day的有效值区间定义如下:的有效值区间定义如下:nM1=month:1month 12nD1=day:1 day 31nY1=year:1912 year 2050(1)
19、划分等价类2n n无效等价类是:无效等价类是:nM2=month:month12nD2=day:day31nY2=year:year2050NextDate函数的弱健壮等价类测试用例测试用例 monthdayyear预期输出Test1Test2Test3Test4Test5Test6Test76-1136666151515-132151519122005200520052005191120511912.6.16month不在有效值内不在有效值内month不在有效值内不在有效值内day不在有效值内不在有效值内day不在有效值内不在有效值内year不在有效值内不在有效值内year不在有效值内不在有
20、效值内NextDate函数的强健壮等价类测试用例(部分)测试用例 monthdayyear预期输出Test1Test2Test3Test4Test5Test6Test7-166-16-1-115-115-1-115-11918191819112005191119111911month不在有效值内不在有效值内day不在有效值内不在有效值内year不在有效值内不在有效值内month,day不在有效值内不在有效值内day,year不在有效值内不在有效值内month,year不在有效值内不在有效值内month,day,year不在有效值不在有效值内内续:详细的等价类划分n考虑对输入日期输入日期输入日期
21、输入日期的处理:nM1=month:month有30天nM2=month:month有31天nM3=month:month是2月nD1=day:1 day 28nD2=day:day=29nD3=day:day=30nD4=day:day=31nY1=year:year=2000nY2=year:year是闰年nY3=year:year是平年弱一般等价类测试用例测试用例 monthdayyear预期输出Test1Test2Test3Test467261529303120001996200220002000.6.161996.7.302002.2.31不可能的日期不可能的日期不可能的日期不可能的
22、日期2000.7.1(不可能的输入日不可能的输入日不可能的输入日不可能的输入日期期期期)强一般等价类测试用例测试用例monthdayyear预期输出Test1Test2Test3Test4Test5Test6Test7Test8Test9Test10Test11Test12Test13Test14Test156666666666667771515142929293030303131311514142000199620022000199620022000199620022000199620022000199620022000.6.161996.6.162002.6.152000.6.301996
23、.6.302002.6.302000.6.31(不可能的日期不可能的日期)1996.6.31(不可能的日期不可能的日期)2002.6.31(不可能的日期不可能的日期)2000.7.1(无效输入无效输入)1996.7.1(无效输入无效输入)2002.7.1(无效输入无效输入)2000.7.161996.7.152002.7.15测试用例monthdayyear预期输出Test16Test17Test18Test19Test20Test21Test22Test23Test24Test25Test26Test27Test28Test29Test3077777777722222229292930303
24、03131311414142929292000199620022000199620022000199620022000199620022000199620022000.7.301996.7.302002.7.302000.7.311996.7.312004.7.312000.8.11996.8.12002.8.12000.2.151996.2.152002.2.152000.3.1(无效的输入日期无效的输入日期)1996.3.12002.3.1 不可能的日期不可能的日期测试用例 monthdayyear预期输出Test31Test32Test33Test34Test35Test36222666
25、3030303131312000199620022000199620022000.3.1无效输入日期无效输入日期1996.3.1无效输入日期无效输入日期2002.3.1无效输入日期无效输入日期2000.7.1无效输入日期无效输入日期1996.7.1无效输入日期无效输入日期2002.7.1无效输入日期无效输入日期总结:等价类测试的指导方针n(1)如果实现的语言是强类型语言如果实现的语言是强类型语言(无效值输入无效值输入会引起系统运行时出错会引起系统运行时出错),则没有必要使用健壮则没有必要使用健壮等价类测试等价类测试.n(2)如果错误输入检查非常重要如果错误输入检查非常重要,则应进行健壮则应进行健壮等价类测试等价类测试.n(3)如果输入数据以离散区间或集合的形式定如果输入数据以离散区间或集合的形式定义义,则等价类测试是合适的则等价类测试是合适的,当然也适用于变量当然也适用于变量值越界会造成故障的系统值越界会造成故障的系统.n(4)在发现合适的等价关系之前在发现合适的等价关系之前,可能需要多次可能需要多次尝试尝试.