1、第四章 测试工程,3.2 黑盒测试,黑箱测试(又称为功能测试)是把程序或系统看成一个黑盒子,完全不考虑其内部结构和处理过程。,3.2 黑盒测试,主要是测试各个程序或功能模块之间的接口,检查系统功能是否能按照设计书的规定正常执行,是否能接收正确的输入数据产生正确的输出结果。 主要适用于系统测试等后期的测试阶段,3.2 黑盒测试,等价划分(同值分割) 边界分析(界限分割) 错误推测法 因果图,3.2 黑盒测试,等价划分(同值分割)等价类划分是一种典型的黑盒测试方法,使用这一方法时,完全不考虑程序的内部结构,只依据程序的规格说明来设计测试用例。 等价类划分方法把所有可能的输入数据,即程序的输入域划分
2、成若干部分,然后从每一部分中选取少数有代表性的数据做为测试用例。,使用这一方法设计测试用例要经历划分等价类(列出等价类表)和选取测试用例两步。 划分等价类 等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。测试某等价类的代表值就等价于对这一类其它值的测试。,等价类的划分有两种不同的情况: 有效等价类:是指对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合。 无效等价类:是指对于程序的规格说明来说,是不合理的,无意义的输入数据构成的集合。 在设计测试用例时,要同时考虑有效等价类和无效等价类的设计。,3.2 黑盒测试,等价类划分的启发式规则: 如果规
3、定了输入数据的范围则可划分一个有效的等价类(输入数据在此范围),两个无效的等价类(输入数据小于最小值或大于最大值);,如果规定了输入数据的个数,也可以按以上方法划分出一个有效的等价类,两个无效的等价类; 如果规定了输入数据的一组值,且程序对不同输入值做不同处理,则每个输入值有一个有效的等价类(允许的输入值),此外针对这组值确立一个无效等价类,它是所有不允许的输入值的集合 ;,等价类划分的启发式规则(续):,例:输入条件说明学历可为:专科、本科、硕士、博士四种之一,则分别取这四种值作为四个有效等价类,另外把四种学历之外的任何学历作为无效等价类。,如果规定了输入数据必须遵循的规则,则可以划分出一个
4、有效的等价类(符合规则)和若干个无效等价类(从各种不同角度违反规则);,等价类划分的启发式规则(续):,例如,C语言规定 “一个语句必须以分号;结束”。这时,可以确定一个有效等价类“以;结束”,若干个无效等价类 “以:结束”、“以,结束”、“以 结束”、“以LF结束”等。,如果规定了输入数据为整型,则可以划分出三个有效类(正整数、零和负整数)和一个无效类(非整数),等价类划分的启发式规则(续):,如果程序的处理对象是表格,则应该使用空表,以及含一项或多项的表。,等价类划分的启发式规则(续):,3.2 黑盒测试,注: (1)以上列出的启发式规则只是测试时可能遇到的情况中的很小一部分。为了正确划分
5、等价类,一是要注意积累经验,二是要正确分析被测程序的功能。,3.2 黑盒测试,(2)在划分无效的等价类时还必须考虑到编译程序的检错功能,一般说来,不需要设计测试数据用来暴露编译程序肯定能发现的错误。 (3)上面列出的启发式规则虽然都是针对输入数据说的,但是其中绝大部分也同样适用于输出数据。,3.2 黑盒测试,用等价类划分法设计测试用例步骤 (1)形成等价类表,每一等价类规定一个唯一的编号 (2)设计一测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类,重复这一步骤,直到所有有效等价类均被测试用例所覆盖; (3)设计一新测试用例,使其只覆盖一个无效等价类,重复这一步骤直到所有无效等价类均被覆盖;,
6、3.2 黑盒测试,例: 某报表处理系统要求用户输入处理报表的日期,日期限制在2001年1月至2005年12月,即系统只能对该段期间内的报表进行处理,如日期不在此范围内,则显示输入错误信息。系统日期规定由年、月的6位数字字符组成前四位代表年,后两位代表月。如何用等价类划分法设计测试用例, 来测试程序的日期检查功能?,3.2 黑盒测试,第一步:等价类划分,输入条件 有效等价类 无效等价类,报表日期的 类型及长度,6位数字字符(1),有非数字字符 (4) 少于6个数字字符 (5) 多于6个数字字符 (6),年份范围,在20012005 之间 (2),小于2001 (7) 大于2005 (8),月份范
7、围,在112之间(3),“报表日期”输入条件的等价类表,小于1 (9) 大于12 (10),3.2 黑盒测试,第二步:为有效等价类设计测试用例,对表中编号为1,2,3的3个有效等价类用一个测试用例覆盖:,测试数据 期望结果 覆盖范围,200105,等价类(1)(2)(3),输入有效,3.2 黑盒测试,第三步:为每一个无效等价类至少设计一个测试用例,测试数据 期望结果 覆盖范围,001MAY,等价类(4),输入无效,2015,等价类(5),输入无效,20010005,等价类(6),输入无效,199805,等价类(7),输入无效,200905,等价类(8),输入无效,200100,等价类(9),输
8、入无效,200118,等价类(10),输入无效,测试数据不能有重复,3.2 黑盒测试,例: 对招干考试系统“输入学生成绩” 子模块设计测试用例招干考试分三个专业,准考证号第一位 为专业代号,如: 1-行政专业, 2-法律专业,3-财经专业.行政专业准考证号码为:110001111215 法律专业准考证号码为:210001212006 财经专业准考证号码为:310001314015,3.2 黑盒测试,例:准考证号码的等价类划分有效等价类:(1) 110001 111215(2) 210001 212006(3) 310001 314015无效等价类:(4) - 110000(5) 111216
9、210000(6) 212007 31000(7) 314016 + ,3.2 黑盒测试,边界分析(界限分割)边界值分析也是一种黑盒测试方法,是对等价类划分方法的补充。人们从长期的测试工作经验得知,大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。,比如,在做三角形计算时,要输入三角形的三个边长:A、B和C。 我们应注意到这三个数值应当满足A0、B0、C0、ABC、ACB、BCA,才能构成三角形。但如果把六个不等式中的任何一个大于号“”错写成大于等于号“”,那就不能构成三角形。问题恰出现在容易被疏忽的边界附近。,这里所说的边
10、界是指,相当于输入等价类和输出等价类而言,稍高于其边界值及稍低于其边界值的一些特定情况。 使用边界值分析方法设计测试用例,首先应确定边界情况。应当选取正好等于,刚刚大于,或刚刚小于边界的值做为测试数据,而不是选取等价类中的典型值或任意值做为测试数据。,例:“报表日期”边界值分析法测试用例,错误推测法,人们也可以靠经验和直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的例子。这就是错误推测法。 错误推测法的基本想法是:列举出程序中所有可能的错误和容易发生错误的特殊情况,根据它们选择测试用例。例如,数据测试中的 缺省值、空白、空值、零值,3.2 黑盒测试,因果图法,因果图的适用范围
11、 如果在测试时必须考虑输入条件的各种组合,可使用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来设计测试用例,这就需要利用因果图。 因果图方法最终生成的就是判定表。它适合于检查程序输入条件的各种组合情况。,3.2 黑盒测试,用因果图生成测试用例的基本步骤 (1) 分析软件规格说明描述中,哪些是原因 (即输入条件或输入条件的等价类),哪些是结果 (即输出条件),并给每个原因和结果赋予一个标识符。 (2) 分析软件规格说明描述中的语义,找出原因与结果之间,原因与原因之间对应的是什么关系? 根据这些关系,画出因果图。,(3) 由于语法或环境限制,有些原因与原因之间,原因与结果之间的组合情况
12、不可能出现。为表明这些特殊情况,在因果图上用一些记号标明约束或限制条件。 (4) 把因果图转换成判定表。 (5) 把判定表的每一列拿出来作为依据,设计测试用例。,在因果图中出现的基本符号 通常在因果图中用Ci表示原因,用Ei表示结果,各结点表示状态,可取值“0”或“1”。“0”表示某状态不出现,“1”表示某状态出现。 主要的原因和结果之间的关系有:,表示约束条件的符号 为了表示原因与原因之间,结果与结果之间可能存在的约束条件,在因果图中可以附加一些表示约束条件的符号。, E(互斥):表示a,b两个原因不会同时成立,两个中最多有一个可能成立。 I(包含):表示a,b,c三个原因中至少有一个必须成
13、立。 O(唯一):表示a和b当中必须有一个,且仅有一个成立。 R(要求):表示当a出现时,b必须也出现。不可能a出现,b不出现。 M(屏蔽):表示当a是1时,b必须是0。而当a为0时,b的值不定。,例如,有一个处理单价为5角钱的饮料的自动售货机软件测试用例的设计。其规格说明如下:若投入5角钱或1元钱的硬币,押下橙汁或啤酒的按钮,则相应的饮料就送出来。若售货机没有零钱找,则一个显示零钱找完的红灯亮,这时在投入1元硬币并押下按钮后,饮料不送出来而且1元硬币也退出来;若有零钱找,则显示零钱找完的红灯灭,在送出饮料的同时退还5角硬币。”,(1) 分析这一段说明,列出原因和结果 原因: 1. 售货机有零
14、钱找2. 投入1元硬币 3. 投入5角硬币4. 押下橙汁按钮5. 押下啤酒按钮建立中间结点,表示处理中间状态 11. 投入1元硬币且押下饮料按钮 12. 押下橙汁或啤酒的按钮 13. 应当找5角零钱并且售货机有零钱找 14. 钱已付清,结果: 21. 售货机零钱找完灯亮 22. 退还1元硬币 23. 退还5角硬币24. 送出橙汁饮料25. 送出啤酒饮料 (2) 画出因果图。所有原因结点列在左边,所有结果结点列在右边。(3) 由于 2 与 3 ,4 与 5 不能同时发生,分别加上约束条件E。 (4) 因果图(5) 转换成判定表,黑盒测试与白盒测试的比较,3.3 测试方法选择的综合策略,Myers
15、提出了使用各种测试方法的综合策略: 在任何情况下都必须使用边界值分析方法。经验表明用这种方法设计出测试用例发现程序错误的能力最强。 必要时用等价类划分方法补充一些测试用例。 用错误推测法再追加一些测试用例。 对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度。如果没有达到要求的覆盖标准,应当再补充足够的测试用例。 如果程序的功能说明中含有输入条件的组合情况,则一开始就可选用因果图法。,4 集成测试策略,集成测试又称之为组合测试或组装测试。 组合测试需要考虑的问题是:在把各个模块连接起来的时侯,穿越模块接口的数据是否会丢失;一个模块的功能是否会对另一个模块的功能产生不利的影响; 各个子功能组合起
16、来,能否达到预期要求的父功能;全局数据结构是否有问题;单个模块的误差累积起来,是否会放大,从而达到不能接受的程度,集成测试策略(组装方式)分为: 非渐增式组装方式又称为一次性组装方式或非增殖式组装方式或整体拼装。 渐增式组装方式又分为三种:自顶向下、自底向上、 混合方式,4.1 一次性组装方式,使用这种方式,首先对每个模块分别进行模块测试,然后再把所有模块组装在一起进行测试,最终得到要求的软件系统。,4.2渐增式组装,这种组装方式又称增殖式组装方式 首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的系统 在组装的过程中边连接边测试,以发现连接过程中产生的问题 通过增殖逐步组装成为要求
17、的软件系统。,(1) 自顶向下的测试,这种组装方式将模块按系统程序结构,沿控制层次自顶向下进行组装。 自顶向下的渐增方式在测试过程中较早地验证了主要的控制和判断点。 选用按深度方向组装的方式,可以首先实现和验证一个完整的软件功能。,(2) 自底向上的测试,这种组装的方式是从程序模块结构的最底层的模块开始组装和测试。 因为模块是自底向上进行组装,对于一个给定层次的模块,它的子模块(包括子模块的所有下属模块)已经组装并测试完成,所以不再需要桩模块。在模块的测试过程中需要从子模块得到的信息可以直接运行子模块得到。,自顶向下增殖的方式和自底向上增殖的方式各有优缺点。 一般来讲,一种方式的优点是另一种方
18、式的缺点。,自顶向下测试与自底向上测试方法的比较,混合集成测试方法由于自顶向下测试和自底向上测试各有优缺点,因此在实际测试过程中一般将两种方法结合起来使用。 对较上层的模块使用自顶向下的测试方法, 对下层模块则使用自底向上的测试方法。 而对于较小规模的程序,一般采用一次性连接所有模块进行测试的方法,回归测试,每当加入一个新模块作为集成测试的一部分时,软件发生变更,建立了新的数据流路径,出现新的I/O,以及调用了新的控制逻辑。这些变更可能会使本来可以正常工作的功能产生问题。回归测试是重新执行已进行测试的某个子集,以确保变更没有传播不期望的副作用。 随着集成测试的进行,回归测试的数量可能变地相当庞大,对每个软件功能重新执行所有的测试是不切实际的,而且也是低效率的。 回归测试可以通过重新执行所有测试用例的子集进行。选取能够测试软件所有功能的有代表性的测试样本。,