判定表法的教学案例研究

2019-12-23 09:28薛峰
电脑知识与技术 2019年31期
关键词:功能测试软件测试

薛峰

摘要:结合教学实践,归纳和整理了软件测试课程中与判定表法相关的典型教学案例。这些教学案例能够很好地适用于判定表法的教学工作,有助于深入浅出地向学生展示判定表法的使用方法。此外,提出在教学中应当充分利用被测程序输入条件之间存在的约束关系,简化初始判定表的构造。

关键词:软件测试;黑盒测试;功能测试;判定表

中图分类号:G642 文献标识码:A

文章编号:1009-3044(2019)31-0159-03

1概述

软件测试是软件质量控制的一种有效手段,也是软件生命周期的一个重要环节。在开发过程中,采用有效的软件测试方法和技术,不仅有助于提高软件产品的质量水平,而且能够显著地降低项目后期的维护成本。

软件测试的核心任务是寻找被测软件中存在的各种缺陷。实施测试的基本手段是为被测程序设计一组测试用例,每条测试用例至少包含输人数据和预期结果两个部分。然后,将数据逐条输人被测程序,并观察实际运行结果是否和对应的预期结果一致。由此可见,测试用例的设计是软件测试的一项重要活动,也是测试工程师所应当掌握的一项基本技能。因此,测试用例设计方法就构成了软件测试课程的核心理论内容。判定表法是一种经典的测试用例设计方法,主要适用于在多项输入条件中存在复杂逻辑组合关系的被测程序。该方法被广泛应用于软件测试实践,因此也是测试用例设计方法的教学重点。

本文旨在归纳和整理与判定表法相关的典型教学案例,这些案例能够逐步引导学生理解并掌握判定表法的概念和步骤。此外,在生成初始判定表的过程中,通常可以利用被测程序输入条件之间的约束关系,达到简化初始判定表的目的。许多软件测试教材对此未做强调,本文将结合案例分析对其加以补充。

2判定表法

判定表法是一种典型的黑盒测试方法。所谓黑盒测试,即将被测程序视为一个黑盒,测试工程师在不了解被测程序内部数据结构和算法的情况下,仅依据被测程序的规格说明即可完成测试用例的设计。各种黑盒测试方法都能够帮助测试工程师找出满足特定覆盖要求的一系列情况,然后针对每种情况设计一条测试用例。设计测试用例的前提条件是被测程序的规格说明必须是规范的。规范的规格说明应当准确描述被测程序的输入、处理和输出。在不考虑内部处理的情况下,依据规格说明设计出的每条测试用例,反映了特定输入条件组合与输出之间的对应关系,其中的每个输入条件组合通常是所有输入变量的一组特定取值。

判定表法以表格形式列举出被测程序的所有情况,这些情况应当覆盖被测程序的所有输入条件组合和对应的输出,从而帮助测试工程师清晰、直观地考察这些情况,并顺利地设计出对应的测试用例。因此,一张判定表的基本结构应当包含如下四个部分:

条件桩:列出被测程序的所有输人条件。

动作桩:列出被测程序的所有输出。

条件项:列出被测程序的所有输入条件组合。

动作项:列出被测程序所有输入条件组合与输出之间的对应关系。

其中,由条件项和动作项构成的一列称为一条规则,每条规则都包含特定输入条件组合及其对应的输出。

3教学案例

本文主要从规格说明和案例分析两个方面描述判定表的教学案例。其中,案例分析部分又分为如下两个步骤:(1)初始化判定表。列出所有条件桩和动作桩,并填写条件项及其对应的动作项。如果输入条件之间存在明显的约束关系,则在填写条件项时利用这些约束关系简化初始判定表。(2)化简判定表。合并冗余规则并消除矛盾规则。

这里需要说明一点,判定表法的完整教学案例还包括选取测试用例的步骤,即为每条规则选取一条测试用例,限于篇幅本文省略了这一步骤。

3.1案例1:合并冗余规则

规格说明:某网站的会员注册程序要求用户输入两次密码,并检查输入的密码是否正确。系统首先检查两次输入的密码是否一致,如果不一致则提示“密码不一致”。然后,检查密码是否少于8个字符,如果少于8个字符则提示“密码不足8个字符”。最后,检查密码是否由字母和数字构成。如果不满足要求则提示“密码应包含字母和数字”。如果上述三个条件都满足,则用户输入的密码通过检查。

步骤1初始化判定表

该步骤的主要任务是填写判定表的初始内容。首先,在条件桩中列出所有输入条件,在动作桩中列出所有输出动作。其中,条件应尽量简单,不要列出复合条件。事实上,复合条件可以由基本条件组合得到。对于布爾类型的条件,在条件桩中仅列举一个取值,另一个取值自然就是其逻辑非。但如果条件不是布尔类型,则需要在条件桩中列举该条件的所有取值。

如表1所示,本例的基本条件共有三个,动作共有四个。由于三个基本条件都是布尔类型,因此共列出8(23)个条件项。条件项中每个条件的取值用“T”表示逻辑真,用“F”表示逻辑假。最后,本例的所有条件项对应的动作项都仅有一个取值,这是因为当存在多个条件为假时,系统按检查的顺序仅提示一条错误信息。

步骤2化简判定表

通过分析不难发现表1中存在可以合并的冗余规则。在寻找冗余规则时,首先应找出具有相同动作的规则,然后确定这些规则中条件项取值相同的条件,最后检查剩余条件是否能够遍历所有的取值,如果可以则这些规则就可以合并为一条规则。在合并所得的规则中,对于那些原本取值不同的条件,将其取值都统一修改为“一”,代表可以任意取值。

例如在表1中,第5、6、7、8条规则的动作都是“密码不一致”,这四条规则的条件项依次为:FTF、FTF、FFT、FFF。通过观察不难发现,它们的第一个条件都取值为F,而剩余的第二、三条件则遍历了二者的所有四种取值(TT、TF、FT、FF),因此这四条规则可以合并为一条规则:F-。其中的两个“一”代表第二、三两个条件可以任意取值。

类似地,第3、4条规则的动作都是“密码不足8个字符”,二者的条件项依次是TFT和TFF。其中,第一、二两个条件的取值都为TF,剩余的第一个条件的取值遍历了该条件的所有两种情况佃和F),因此这两条规则可以合并为TF-。化简的判定表如表2所示。

3.2案例2:消除矛盾规则

规格说明:闰年判定程序用于判断一个给定年份是否为闰年,它输入一个代表年份的整型变量year,如果year是闰年则输出true,否则输出false。

步骤1初始化判定表

本例的三个基本条件是year能够分别被4、100或400整除,两个动作分别是输出true或false。由于每个条件都属于布尔类型,因此总共需要列出八个条件项。初始判定表如表3所示,考虑到规则有可能存在逻辑矛盾,因此在表中特别增加了一个“矛盾”动作。

步骤2化简判定表

表3的第3、5、6、7条规则都存在逻辑矛盾。例如第3条规则的含义是year能够被4和400整除,但不能被100整除,这是不可能的,因此存在矛盾。对其他三条规则也可以做类似的分析。上述四条规则的“矛盾”动作中都填入了“T”,表示这是矛盾规则。在化简判定表时,只要删除矛盾规则所在的列即可。化简的判定表如表4所示。此时,判定表中不用再包含“矛盾”动作了。

3.3案例3:利用约束关系简化初始判定表

规格说明:三角形类型判定程序用于判断三角形的类型。该程序输入代表三条边长的三个整型变量a、b、c(a>0,b>0,c>0),输出三角形的类型可能是“等边三角形”“等腰三角形”和“一般三角形”。如果三条边无法构成三角形,則输出“不构成三角形”。

步骤1初始化判定表

当问题规模比较大的时候,由于输入变量或变量的取值数量众多,直接构造初始判定表将面临组合爆炸的问题。此时,如果基本条件之间存在约束关系,不妨利用问题本身所蕴含的这一特点,获得简化的初始判定表。

在本例中,判定构成三角形的基本条件是:a+b>c、a+c>b、b+c>a。判定三角形类型的基本条件是:a=b、a=c、b=c。由这六个条件所形成的条件项共有64(261项,在判定表中直接列举所有这64项的工作量显然是巨大的。事实上,借助平面几何知识不难证明如下结论:当a>0,b>0,c>0时,a+b>c、a+c>b、b+c>a三个条件中,最多只有一个不成立。该结论反映了上述三个条件之间存在的约束关系,利用该关系可以获得简化的初始判定表。

如表5所示,其中第1~3条规则对应不能构成三角形的三种情况。对于a+b>c、a+c>b、b+c>a三个条件而言,在每种情况下都仅有一者不成立。由于无法构成三角形,因此这三条规则中的其他三个条件都取值为“一”。第4-11条规则对应能够构成三角形的八条规则,其中每条规则的前三个条件都取值为“T”,表示能够构成三角形。而这些规则的后三个条件则遍历所有八种取值。与前面分析的64条规则相比,此处获得的初始判定表仅包含11条规则,从而在很大程度上简化了初始判定表的规模。

步骤2化简判定表

在表5中不存在可以合并的冗余规则,因此本例无须考虑规则的合并。然而,第5、6、8条规则却存在矛盾。例如,对于第5条规则而言,后面三个条件的取值是TTF,分别表示a=b、a=c和b*c,这显然是矛盾的。对第6、8条规则也可以做类似的分析。消除这三条规则将获得化简的判定表,化简结果如表6所示。

4结束语

软件测试是一门实践性很强的课程,因此对于判定表法的教学不能仅局限于理论知识的讲授,而应当在各个教学环节中为学生提供动手实践的机会。本文所列举的几个案例为判定表法的理论教学和实践教学都奠定了坚实的基础。在此基础之上,还要结合实践教学的需要,设计并实现相应的被测程序。通过在被测程序中预先埋设缺陷,学生可以验证其设计测试用例的有效性,从而更加深化对判定表法的认识。当然,这一教学思路不仅适用于判定表法,也适用于其他黑盒测试方法。

猜你喜欢
功能测试软件测试
某内花键等速传动轴八功能测试夹具设计
基于OBE的软件测试课程教学改革探索
EXCEL和VBA实现软件测试记录管理
关于软件测试技术应用与发展趋势研究
智能电能表软件测试技术概述
功能测试系统开发平台设计
《软件测试》课程教学策略研究