6.2.3 黑盒测试技术
黑盒测试,又称功能测试或数据驱动测试,是在已知软件产品应该具有的功能的情况下,通过测试来检验是否每个功能都能正常使用的测试方法。对于软件测试而言,黑盒测试法把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程。黑盒测试主要测试的错误类型有:
①不正确或遗漏的功能。
②接口错误。
③性能错误。
④数据结构或外部数据访问错误。
⑤初始化或终止条件错误等。
需要指出的是,黑盒测试与白盒测试不能互相替代,它们检查的错误类型是不同的,因此,两者应该互为补充。在测试的不同阶段灵活选用,以便检测出不同类型的错误。下面主要介绍等价类划分、边界值分析、因果图法、错误推测法等几种常见的黑盒测试用例设计方法。
一、等价类划分
等价类划分是设计测试用例的一种常见技术。要实现穷尽的黑盒测试需要使用所有有效的和无效的输入数据来测试程序,但这往往是不现实的。因此,只能选取少量有代表性的输入数据,即选择一个测试子集,用较小的代价暴露尽可能多的错误。
等价类划分的思想是将输入数据按有效的(合理的)和无效的(不合理的)划分成若干个等价类,认为测试等价类中的一个代表值的结果就等于对该类其他值的测试。利用等价类划分的测试步骤如下:
1.划分等价类
从程序的功能说明中找出每个输入条件,然后将其划分成若干个有效和无效的等价类。等价类的划分没有一个完整的法则,下面给出等价类划分的几条经验性原则,以供参考。
(1)如果规定了输入值的范围,则可划分出一个有效等价类(输入值在此范围内)和两个无效等价类(输入值小于最小值或大于最大值)。
(2)如果规定了数据输入的个数,则可划分出一个有效等价类(输入值的个数符合规定)和两个无效等价类(输入值的个数少于或多于规定个数)。
(3)如果规定了输入数据的一组值,而且程序对不同的输入值进行不同的处理,则每个允许的输入值是一个有效等价类,此外还有一个无效等价类(规定的这一组值以外的值)。比如,规定教师职称只能是助教、讲师、副教授和教授4种职称之一,则有4个有效等价类和一个无效等价类(这4个职称以外的值,如工程师等其他职称)。
(4)如果规定了输入数据必须遵循的规则,则可划分出一个有效等价类(符合规则)和若干个无效等价类(从不同的角度违反规则)。
(5)如果输入条件规定了一个集合,则可划分出一个有效等价类(此集合)和一个无效等价类(此集合的补集)。
2.设计测试用例
(1)等价类划分应列表,并为每一个等价类编号。
(2)设计一个有效等价类的测试用例,使其尽可能多地覆盖尚未被覆盖过的有效等价类。如此重复,直到所有有效等价类都被覆盖为止。
(3)设计一个测试用例,仅覆盖一个无效等价类,如此重复,直到所有无效等价类都被覆盖为止。这是因为,在输入中有多个错误存在时,往往只能对其中的一个错误进行显示而屏蔽掉其他错误的显示,因此,设计不合理的测试用例时,每个测试用例只能覆盖一个无效等价类。
【例6.2】设有一个档案管理系统,要求用户输入以年月表示的日期。假设日期限定在1990年1月至2003年12月,并规定日期由6位数字字符组成,前4位表示年,后2位表示月。现用等价类划分法设计测试用例,来测试程序的“日期检查功能”。
解:(1)划分等价类并编号。等价类划分的结果如表6.3所示,即划分成3个有效等价类和7个无效等价类。
表6.3 输入条件“日期”的等价类划分
(2)设计测试用例,以便覆盖所有的有效等价类。在表6.3中列出了3个有效等价类,编号分别为①⑤⑧,设计的测试用例如表6.4:
表6.4 有效等价类测试用例
(3)为每一个无效等价类设计一个测试用例,设计结果如表6.5:
表6.5 无效等价类测试用例
二、边界值分析
边界值分析是指设计测试用例,使程序在输入或输出的边界值或者边界值左右的值执行。实践表明,大多数错误都发生在边界值左右。
边界值分析方法可以单独设计测试用例,也可以作为等价类划分方法的补充,即在各个等价类中主要是选择边界上及其左右的值。例如,例6.2中对月份范围的测试就可以选择00、0l、02、11、12、13等数据作为测试数据。边界值分析方法设计测试用例的经验性原则是:
(1)如果输入条件指定了范围[a,b],则a、b以及紧挨a、b左右的各个值都应作为测试数据。比如,学生成绩为[0,100],应取-1、0、1、99、100、101共6个值作为测试数据。
(2)如果输入条件指定了输入数据的个数范围,则按最大、最小个数及其左右的个数各设计一个测试用例。比如,一个输入文件包括1~255个记录,则应分别设计输入0个、1个、2个、254个、255个、256个记录的测试数据。
(3)将规则(1)和(2)应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值。
三、因果图法
因果图是设计测试用例的一种工具,它主要检查各种输入条件的组合。等价类划分、边界值分析的测试用例设计方法还不能考虑到组合输入条件可能引起的软件错误,而因果图法则弥补了这个不足之处。
因果图的测试用例设计步骤如下:
(1)分析规格说明中的输入作为因,输出作为果。
(2)依据因果的处理语义画出因果图。
(3)标出因果图的约束条件。
(4)将因果图转换为因果图所对应的判定表。
(5)根据判定表设计测试用例。
在因果图中出现的基本符号,如图6.3所示。
图6.3 因果图定义符号
其中:
(a)图表示恒等:表示原因与结果之间是一对一的对应关系。若原因出现,则结果出现。若原因不出现,则结果也不出现。
(b)图表示非:表示原因与结果之间的一种否定关系。若原因出现,则结果不出现。若原因不出现,则结果出现。
(c)图表示或:表示若几个原因中有一个出现,则结果出现,只有当这几个原因都不出现时,结果才不出现。
(d)图表示与:表示若几个原因都出现,结果才出现。若几个原因中有一个不出现,结果就不出现。
(e)图表示异约束:表示a,b两个原因不会同时成立,两个中最多有一个可能成立。
(f)图表示或约束:表示a,b两个原因中至少有一个必须成立。
(g)图表示唯一约束:表示a和b原因当中必须有一个,且仅有一个成立。
(h)图表示要求约束:表示当a出现时,b必须也出现,不可能a出现,b不出现。
(i)图表示强制约束:它表示当a出现时,b必须不能出现,而当a不出现时,b的值不定。
【例6.3】某规格说明:“第一列字符必须是A或者B,第二列字符必须是一个数字,第一、二两列都满足时修改文件,第一列不正确时给出信息L,第二列不正确时给出信息M。”请用因果图法设计测试用例。
解:(1)分析规格说明并编号。
因:第一列字符是A①
第一列字符是B②
第二列字符是数字③
其中条件①和②是E约束,最多只有一个出现,我们用④表示该中间结果。
果:修改文件⑤
给出信息L⑥
给出信息M⑦
(2)根据题目中的信息,可以画出如图6.4所示的因果图。
图6.4 因果图例
(3)将因果图转换为判定表(如表6.6所示):遇到E约束记为X;条件和输出结果成立时记为1,否则记为0;表中每一列视为测试规则。
表6.6 判定表
(4)根据判定表的3~8列编写测试用例,如表6.7所示:
表6.7 根据判定表编写的测试用例
四、错误推测法
错误推测法是指测试人员根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地设计检查这些错误的测试用例的一种测试方法。
错误推测法的基本思想是:软件测试人员通过已经掌握的测试理论和实际测试中积累的经验,推测软件在哪些情况下可能发生错误,并将可能发生错误的情况列出。然后为每一个可能发生错误的情况分别设计相应的测试用例。常见的经验方法如下:
(1)零作为测试数据往往容易发现程序中的错误。
(2)分析规格说明书中的漏洞,编写测试数据。
(3)根据尚未发现的软件错误与已发现的软件错误成正比的统计规律,进一步测试时需重点测试已发现错误的程序段。
(4)等价类划分与边界值分析容易忽略组合的测试数据,因此可采用判定表列出测试数据。
(5)与人工代码审查相结合,两个模块中共享的变量已被修改的,可用来做测试用例。因为对一个模块测试出错,同样会引起另一模块的错误。
错误推测法无固定步骤,主要依据测试经验的不断积累。例如,测试一个对线性表(比如数组)进行排序的程序,可推测出以下几项需要特别测试的情况:
①输入的线性表为空表。
②表中只含有一个元素。
③输入表中的所有元素已排好序。
④输入表已按逆序排好。
⑤输入表中部分或全部元素相同。
针对以上列出的每一种情况,可以各设计一个测试用例进行测试。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。