1、黑盒测试方法,计算机软件测试,由安博测试空间技术中心http:/ 黑盒测试又叫做功能测试或数据驱动测试。,黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误:是否有不正确或遗漏了的功能?在接口上,输入能否正确地接受? 能否输出正确的结果?是否有数据结构错误或外部信息(例如数据文件)访问错误?性能上是否能够满足要求?是否有初始化或终止性错误?,为什么需要不同类型的测试方法?,假设一个程序P有输入量X和Y及输出量Z。在字长为32位的计算机上运行。若X、Y取整数,按黑盒方法进行穷举测试,请问需要多少时间?(假设1毫秒钟执行一组数据),232232 / 365 24 60 60 1000 =
2、5亿年,黑盒测试方法:等价类划分法边界值分析法因果图法功能图法错误推测法,一、等价类测试,计算机软件测试,等价类是指某个输入域的子集合,在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,或者进行相同的处理。 合理假定:测试某等价类的一组数据就等价于对这一类其他值的测试。,1.等价类定义,等价类构成-集合的划分。,划分等价类测试的重要意义: 1.提供了完备性; 2.保证了无冗余性;,2.等价类分类,可分为有效等价类和无效等价类。,有效等价类: 完全满足程序输入的规格说明,有效、有意义的输入数据所构成的集合。-检验程序是否满足规格说明所规定的功能和性能,无效等价类: 不满足程序输入要求,或
3、者无效的输入数据所构成的集合。-鉴别程序异常情况的处理,保障在输入错误或空时仍有异常保护,保证程序的可靠性,3.等价类划分的原则,1)输入条件规定了取值范围或个数:确定1个有效等价类,2个无效等价类。,2)规定了输入值的集合或“必须如何”的条件:确定1个有效等价类,1个无效等价类。,年龄范围0100,性别取值,3) 输入条件是布尔量:确定1个有效等价类,1个无效等价类。,4)规定了一组输入数据(n个),并且程序对每个值分别处理:确定n个有效等价类,1个无效等价类。,5)规定了输入数据必须遵守的规则:确定1个有效等价类,若干个无效等价类。,E_mail 地址规则,在确定已知的等价类中个元素在程序
4、中的处理方式不同,则应将等价类进一步划分成更小的等价类。,4.等价类测试用例生成,1) 选择确定类的等价关系,为每个等价类规定唯一的编号。,2)设计一个新的测试用例,使其尽可能多的覆盖尚未被覆盖的有效等价类。重复直到覆盖所有有效等价类,即分割有效等价类直到最小。,3)设计一个新的测试用例,使其尽可能多的覆盖尚未被覆盖的无效等价类。重复直到覆盖所有无效等价类,即分割无效等价类直到最小。,5.等价类测试用例的种类,弱一般等价类测试用例强一般等价类测试用例弱健壮等价类测试用例强健壮等价类测试用例,计算机软件测试,函数F的功能扩展,有两个变量x1和x2的函数F。如果函数F实现为一个程序,则输入两个变量
5、x1和x2会有一些(可能未规定)边界:a x1 d 区间为a,b),b,c),c,d e x2 g 区间为e,f),f,g,计算机软件测试,弱一般等价类测试,弱一般等价类测试是基于单缺陷假设的;弱一般等价类测试通过使用一个测试用例中的每个等价类(区间)的一个变量实现。,计算机软件测试,强一般等价类测试,强一般等价类测试是基于多缺陷假设的;等价类笛卡儿积的每个元素对应的测试用例;,计算机软件测试,弱健壮等价类测试,1对于有效输入,使用每个有效类的一个值(就像我们在所谓弱一般等价类测试中所做的一样。) 2对于无效输入,测试用例将拥有一个无效值,并保持其余的值都是有效的。,计算机软件测试,强健壮等价
6、类测试,所有等价类笛卡儿积的每个元素中获得测试用例。,计算机软件测试,简单版本:三角形问题接受三个整数a、b、c作为输入,用做三角形的边。程序的输出是由这三条边确定的三角形类型,即等边三角形,等腰三角形,不等边三角形或非三角形。,例1:三角形问题的等价类测试用例,第一步:划分等价类,R1=:有三条边a、b和c的等边三角形 R2=:有三条边a、b和c的等腰三角形 R3=:有三条边a、b和c的不等边三角形 R4=:三条边a、b和c不构成三角形,第二步:选取测试用例,计算机软件测试,三角形问题的弱健壮等价类测试用例,计算机软件测试,改进版本:边长范围在1200,三角形问题的强健壮等价类测试用例,计算
7、机软件测试,三角形问题的另一种等价类划分,D1 = : a = b = c D2 = : a = b,ac D3 = : a = c,ab D4 = : c = b,ac D5 = : b a c ,D6 = :ab+c D7 = :ba+c D8 = :ca+b ,计算机软件测试,例如:NextDate函数的等价类测试用例,确定等价类:,无效等价类: M2 = 月份:月份12 D2 = 日期:日期31 Y2 = 年:年2012,有效等价类: M1 = 月份:1月份12 D1 = 日期:1日期31 Y1 = 年:1812年2012,计算机软件测试,输入年月日,求下一天的日期,NextDate函
8、数的弱一般等价类测试用例,计算机软件测试,NextDate函数的弱健壮等价类测试用例,计算机软件测试,NextDate函数的强健壮等价类测试用例,计算机软件测试,NextDate函数的等价类另一种划分法,M1 = 月份:每月有30天 M2 = 月份:每月有31天 M3 = 月份:此月是2月 D1 = 日期:1日期28 D2 = 日期:日期=29 D3 = 日期:日期=30 D4 = 日期:日期=31 Y1 = 年:年=1900 Y2 = 年:年是非1900年的闰年 Y3 = 年:年是非1900年的平年,计算机软件测试,弱一般等价类测试用例,计算机软件测试,强一般等价类测试用例,测试用例的个数:
9、MDY = 3 * 4 * 3 = 36,佣金问题,前亚利桑那州境内的一位步枪销售商销售密苏里州制造商制造的步枪机lock、枪托stock和枪管barrel。枪机卖45美元,枪托卖30美元,枪管卖25美元。销售商每月至少要售出一支完整的步枪,且生产限额是大多数销售商在一个月内可销售70个枪机、80个枪托和90个枪管。每访问一个镇子之后,销售商都给密苏里州步枪制造商发出电报,说明在该镇售出的枪机、枪托和枪管数量。到了月末,销售商要发出一封特殊的电报,通知-1个枪机被售出,这样制造商就知道当月的销售情况。销售商的佣金如下计算:销售额不到(含)1000美元的部分为10%,1000(不含)到1800(
10、含)美元的部分为15,超过1800美元的部分为20%。佣金程序生成月份销售报告,汇总售出的枪机、枪托和枪管总数,销售商的总销售额以及佣金。,计算机软件测试,佣金问题的输入域等价类划分,输入变量有效类:,L1 = 枪机:1枪机70 L2 = 枪机:枪机 = -1 S1 = 枪托:1枪托80 B1 = 枪管:1枪管90,输入变量无效类:,L3 = 枪机:枪机=0或枪机70 S2 = 枪托:枪托80 B2 = 枪管:枪管90,计算机软件测试,佣金问题的强健壮等价类测试用例,计算机软件测试,佣金问题的输出域等价类划分,销售额 = 45 枪机 + 30 枪托 + 25 枪管,佣金值域定义三个变量的等价类
11、: S1 = :销售额1000 S2 = :1000:销售额1800,计算机软件测试,佣金问题的输出域等价类测试用例,计算机软件测试,指导方针和观察,等价类测试的弱形式(一般或健壮)不如对应的强形式的测试全面。 如果实现语言是强类型的(无效值会引起运行时错误),则没有必要使用健壮形式的测试。 如果错误条件非常重要,则进行健壮形式的测试是合适的。如果输入数据以离散值区间和集合定义,则等价类测试是合适的。当然也适用于如果变量值越界系统就会出现故障的系统。通过结合边界值测试,等价类测试可得到加强。如果程序函数很复杂,函数的复杂性可以帮助标识有用的等价类,就像NextDate函数一样。强等价类测试假设
12、变量是独立的,相应的测试用例相乘会引起冗余问题。如果存在依赖关系,则常常会生成“错误”测试用例,就像NextDate函数一样。在发现“合适”的等价关系之前,可能需要进行多次尝试,就像NextDate函数例子一样。在其他情况下,存在“明显”或“自然”等价关系。如果不能肯定,最好对任何合理的实现进行再次预测。,练习,1、请以NextDate函数的36个强一般等价类测试用例为基础,按所讨论的那样修改日期类,然后找出其他9个测试用例。 2、如果使用强类型语言编译器,请讨论怎样才能执行健壮等价类测试用例。 3、请针对包含了直角三角形的扩展三角形问题来修改弱一般等价类集合 4、请对比单/多缺陷假设与边界值
13、测试和等价类测试。,5、将三角形问题、NextDate和佣金问题的等价类测试用例运行在BlackBox.exe或者Nave.exe程序上。,6、对电话账单来说,春季和秋季的标准时间与夏时制时间的转换会带来有意思的问题。春季,这种转换发生在(3月末、4月初的)星期日凌晨2:00时,这是时钟要设置为凌晨3:00时。对称的转换通常发生在10月最后一个星期日,始终要从2:59:59调回到2:00:00。请为用以下费率记账的长途电话服务函数开发等价类: (1)通话时间20分钟时,收费1.00美元,外加每分钟0.10美元,超过20分钟的部分不到1分钟时按1分钟计算; 假设: (1)通话计费时间从被叫方应答
14、开始计算,等呼叫方挂机时结束; (2)通话时间的秒数四舍五入到分钟; (3)没有超过20小时的通话。,二、边界值测试,计算机软件测试,人们从长期的测试工作经验得知,大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。,有两个变量x1和x2的函数F。如果函数F实现为一个程序,则输入两个变量x1和x2会有一些(可能未规定)边界:a x1 bc x2 d,边界值分析基于一种关键假设,在可靠性理论叫做“单缺陷”假设,关注的是输入空间的边界。,基本思想: 取输入变量在最小值、 略高于最小值、 正常值、 略低于最大值、最大值。,两变量函数
15、F的边界值分析测试用例是: , , , , , ,计算机软件测试,例1:三角形问题的边界值测试,三角形问题有三个输入,即三条边a、b、c,其取值范围为:1 a 200 1 b 200 1 c 200,a = 1,2,100,199,200 b = 1,2,100,199,200 c = 1,2,100,199,200,计算机软件测试,三角形问题的边界值测试用例,计算机软件测试,例2:NextDate函数的边界值分析,NextDate是一个有三个变量(月份、日期和年)的函数,函数返回输入日期后面的那个日期。 变量月、日和年都具是整数,且满足以下条件:1 月份 12 1 日期 31 1812 年
16、2012,月份 = 1,2,6,11,12 日期 = 1,2,15,30,31 年 = 1812,1813,1912,2011,2012,计算机软件测试,NextDate函数的边界值分析,计算机软件测试,归纳,如果有一个n变量函数, 边界值分析会产生多少个测试用例?,1.适合使用边界值分析的情况? 如果被测程序是多个独立变量的函数,如果变量受物理量的限制,则很适合。,2.不适合使用? 边界值分析对布尔变量没有什么意义,举一个这方面的很有意思的例子,菲尼克斯的航空港国际机场1992年6月26日被迫关闭,因为空气温度达到122。F。飞行员在起飞之前不能设置特定设备:该设备能够接受的最大空气温度是1
17、20。F 。,边界值分析法的其他变化,健壮性测试最坏情况测试健壮最坏情况测试特殊值测试随机测试,(1)健壮性测试,健壮性测试是边界值分析的一种简单扩展:除了变量的五个边界值分析取值,还要通过采用一个略超过最大值(max+)的取值,以及一个略小于最小值(min-)的取值,看看超过极值时系统会有什么表现。,观察例外处理情况,例1:三角形问题的健壮性测试,三角形三条边a、b、c,其取值范围为:1 a 200 1 b 200 1 c 200,a = 0,1,2,100,199,200,201 b = 0,1,2,100,199,200,201 c = 0,1,2,100,199,200,201,计算机
18、软件测试,三角形问题的健壮性测试用例,如果有一个n变量函数,健壮性测试会产生多少个测试用例?,6n+1,(2)最坏情况测试,对每个变量,首先进行包含五种基本值的集合测试,然后对这些集合进行笛卡儿积计算,以生成测试用例。,两变量函数F的最坏情况测试用例是: X1 = X1min ,X1min+ ,X1nom ,X1max- ,X1max X2 = X2min ,X2min+ ,X2nom ,X2max- ,X2max 测试用例集合 = X1 X2 = X1min ,X1min+ ,X1nom ,X1max- ,X1max X2min ,X2min+ ,X2nom ,X2max- ,X2max ,
19、F函数最坏情况测试用例,例1:三角形问题的最坏情况测试,三角形问题有三个输入,即三条边a、b、c,其取值范围为: 1 a,b,c 200,a = 1,2,100,199,200 b = 1,2,100,199,200 c = 1,2,100,199,200,最坏情况测试用例集合 = a b c = 1,2,100,199,200 1,2,100,199,200 1,2,100,199,200,计算机软件测试,如果有一个n变量函数,最坏情况测试会产生多少个测试用例?,5n,(3)健壮最坏情况测试,既考虑健壮情况:是对每个变量七元素集合的测试, 又考虑最坏情况:对这些集合进行笛卡儿积计算 生成测试
20、用例。,例2:NextDate函数的健壮最坏情况测试,三个变量(月、日和年)的函数,月份 = 0,1,2,6,11,12,13 日期 = 0,1,2,15,30,31,32 年 = 1811,1812,1813,1912,2011,2012,2013,NextDate函数健壮最坏情况测试用例集合 = 月份 日期 年 = 0,1,2,6,11,12,13 0,1,2,15,30,31,32 1811,1812,1813,1912,2011,2012,2013,计算机软件测试,如果有一个n变量函数,健壮性测试会产生多少个测试用例?,7n,(4)特殊值测试,大概是运用得最广泛的一种功能性测试。依赖于
21、测试人员的经验。尽管特殊值测试是高度主观性的,但是所产生的测试用例集合,常常比用我们已经研究过的其他方法生成的测试集合,更能有效地发现缺陷,这也说明了软件测试的工艺性质。,例3:佣金问题的测试用例,输出值域的边界值。,佣金问题的输出值域有100美元、1000美元、1800美元三个门限点。,计算机软件测试,输出边界值分析测试用例,计算机软件测试,(5)随机测试,基本思想:不是永远选取有界变量的最小值等5个值,而是使用随机数生成器选出测试用例值。,例如有界变量axb值是一个Visual Basic应用程序生成的,x满足下式:x = Int(b a + 1)* Rnd) + a,优点:随机测试可以避
22、免出现测试偏见。 缺点:多少随机测试用例才是充分的?,边界值测试的指导方针,边界值测试是所有测试方法中最基本的方法,这些测试方法假设输入变量都是独立的。如果不满足这类假设,测试用例就不令人满意。单缺陷和多缺陷;该方法也可用于输出值的边界值分析;另外,还有基于输出的异常形式的测试,主要测试生成错误消息的系统(或程序)。,练习,第五章课后习题5。,计算机软件测试,三、 基于决策表的测试,计算机软件测试,决策表(判定表),四个组成部分: 条件桩 条件条目 行动桩 行动条目,图示,列出各种可能的单个条件 针对各种条件给出组合情况 列出可能的单个动作 指出条件组合下应该采取的动作,决策表的分类,有限条目
23、决策表:所有条件都是二叉条件的决策表。,扩展条目决策表:条件有多个值的对应的决策表。,三角形问题决策表,计算机软件测试,经过修改,计算机软件测试,带有互斥条件的决策表,计算机软件测试,规则条数统计,计算机软件测试,带有互斥条件的决策表的规则条数统计,计算机软件测试,去掉重复的决策表,计算机软件测试,冗余决策表,计算机软件测试,不一致的决策表,计算机软件测试,三角形问题的测试用例,计算机软件测试,NextDate函数测试用例 第一次尝试,M1 = 月份:每月有30天 M2 = 月份:每月有31天 M3 = 月份:此月是2月 D1 = 日期:1日期28 D2 = 日期:日期=29 D3 = 日期:
24、日期=30 D4 = 日期:日期=31 Y1 = 年:年是闰年 Y2 = 年:年是平年,计算机软件测试,计算机软件测试,第二次尝试,M1 = 月份:每月有30天 M2 = 月份:每月有31天 M3 = 月份:此月是2月 D1 = 日期:1日期28 D2 = 日期:日期=29 D3 = 日期:日期=30 D4 = 日期:日期=31 Y1 = 年:年=2000 Y2 = 年:年是闰年 Y3 = 年:年是平年,计算机软件测试,第二次尝试决策表,第三次尝试,M1 = 月份:每月有30天 M2 = 月份:每月有31天,12月除外 M3 = 月份:此月是12月 M4 = 月份:此月是2月 D1 = 日期:
25、1日期27 D2 = 日期:日期=28 D3 = 日期:日期=29 D4 = 日期:日期=30 D5 = 日期:日期=31 Y1 = 年:年是闰年 Y2 = 年:年是平年,计算机软件测试,第三次尝试决策表,第三次尝试决策表精简,NextDate函数的决策表测试用例,计算机软件测试,佣金问题,决策表分析不太适合佣金问题。这并不奇怪,因为在佣金问题中只有很少的决策逻辑。由于等价类中的变量是真正独立的,在条件对应等价类的决策表中没有不可能规则。,计算机软件测试,指导方针与观察,1决策表技术适用于具有以下特征的应用程序:if-then-else逻辑很突出。输入变量之间存在逻辑关系。涉及输入变量子集的计
26、算。输入与输出之间存在因果关系。很高的圈(McCabe)复杂度. 2决策表不能很好地伸缩(有n个条件的有限条目决策表有2n个规则)。有多种方法可以解决这个问题使用扩展条目决策表、代数简化表,将大表“分解”为小表,查找条件条目的重复模式。 3与其他技术一样,迭代会有所帮助。第一次标识的条件和行动可能不那么令人满意。把第一次得到的结果作为铺路石,逐渐改进,直到得到满意的决策表。,基于因果图的测试 基于状态图的测试,计算机软件测试,因果图的例子 状态图的例子,总结: 功能性测试回顾,计算机软件测试,测试工作量测试用例数,低,高,测试用例数,边界值,等价类,决策表,精细程度,测试工作量标识测试用例工作
27、量,低,高,标识测试用例工作量,边界值,等价类,决策表,精细程度,三角形问题的测试用例统计,0,35,70,105,140,175,210,245,280,315,350,健壮 最坏,最坏,健壮 边界,边界,强健 壮等价,强一般 等价,弱健 壮等价,弱一般 等价,决策 表,测试效率,功能性测试的基本局限:测试遗漏和冗余测试。,一组没有漏洞没有冗余的测试用例可以用于量化测试效率。,可以计算A方法所生成的测试用例总数与B方法生成的测试用例总数的比值,或与某个测试用例基础的比值。,测试的有效性,我们真正想知道的是一组测试用例能够怎样有效地找出程序中的缺陷。,首先,这要假定我们知道程序中的所有缺陷。如
28、果我们知道程序中的所有缺陷,就会采取有针对性的措施。由于我们不知道程序中的所有缺陷,因此永远也不会知道给定方法所产生的测试用例是否能够发现这些缺陷。,第二个原因更有理论性:假设存在无缺陷的程序,这被认为是不可能的。,根据不同类型的缺陷进行反向研究。给出特定的一种缺陷,我们可以选择最有可能发现这种缺陷的测试方法(功能性测试和结构性测试)。,指导方针,测试不大可能存在的缺陷是没有意义的。很好地了解最有可能发生的缺陷(或损害)种类,然后选择最有可能发现这类缺陷的测试方法,这样是更为有效的。,归纳总结,1如果变量引用的是物理量,可采用定义域测试和等价类测试。 2如果变量是独立的,可采用定义域测试和等价
29、类测试。 3如果变量不是独立的,可采用决策表测试。 4如果可保证是单缺陷假设,可采用边界值分析和健壮性测试。 5如果可保证是多缺陷i民设,可采用最坏情况测试、健壮最坏情况测试和决策表测试。 6如果程序包含大量例外处理,可采用健壮性测试和决策表测试。 7如果变量引用的是逻辑量,可采用等价类测试用例和决策表测试。,北京测试空间科技发展有限公司是注册于北京市海淀区高新技术园的软件企业,目前主要业务范围包括软件测试管理 工具研发、软件测试项目外包和软件测试专业技术人才培养及派遣。在软件测试管理工具研发领域已成功开发具有 自主知识产权的STMP管理软件。在软件测试项目外包领域已建立广泛的业务渠道,服务客户包括北大软件工程中心、 东软股份、海辉高科、用友软件、莱博智科技、电子部5所、11所,航天704所、中国金融认证管理中心、国安创想、 清华同方、中软融鑫、长峰科技等100余家企业,项目覆盖行业包括军工、航天、金融、通信等领域。 地址:北京市海淀区学院路40号大唐电信测试空间楼 联系电话:010-62303223 62303260 62303230,