摘要:软件测试是发现软件缺陷和提高软件质量的重要手段。在系统功能测试过程中,对于输入条件组合的复杂情况,因果图分析法是行之有效的测试用例设计方案。以注册问题为例,对用户输入条件、系统预期输出及其两者的关系进行了深入分析,并完成了因果图模型的创建,为后续完备、准确的生成判定表和设计测试用例提供了有力的依据。
关键词:软件测试; 黑盒测试; 因果图分析;
软件测试是软件开发过程中的重要组成环节,是发现软件缺陷和提高软件质量的重要举措。其中,在系统功能测试过程中,通常以用户需求为侧重点完成对系统功能的确认和验证,因此需采用黑盒测试技术完成测试用例的设计任务。
等价类划分法和边界值分析法是应用最为普遍的黑盒测试方法,分别可以实现“合理分类、精心挑选”,两者双剑合璧,可以达到较好的测试效果。但是这两种方法通常只适用于输入条件相互独立的情况,如果输入条件之间存在联系,则很难描述,即使描述出来,其测试效果也难以保障。
因果图分析法给出了行之有效的解决方案,该方法可以通过简单、直观的图形化符号,完整准确的确定输入条件组合和输出结果之间的逻辑关系,进而依据一定的规则推导并设计出判定表和测试用例,从而实现对输入条件组合等复杂情况的完备测试。
本文以某系统的注册问题为例,展示因果图分析法的一般过程和设计要点。
1 测试需求描述
注册问题的测试需求描述如下:
(1)用户名为必填项;
(2)密码长度大于4位小于8位,可以由纯字母、纯数字或者字母加数字组成;
(3)确认密码必须与密码完全一致。
系统依次判断,如果输入均有效,则给出“注册成功”的提示。如果输入有误,则系统分别给出“请输入用户名”、“密码输入有误”和“确认密码输入有误”的错误提示信息。
从上述需求描述可以看出,注册问题中的多个输入条件组合能够产生不同的输出结果,并且输入条件间存在依赖关系,并非完全独立,因此根据应用场景,需选择因果图分析法和判定表驱动法完成测试用例的设计。
2 确定原因和结果
2.1 分析需求描述
因果图中的原因是指输入条件的有效等价类,即用户对该系统能够输入或者执行的操作所需满足的一般规则。
(1)如果输入条件为简单条件,比如用户名为必填项,则选择其有效等价类“用户名填写”作为原因即可。
(2)如果输入条件为复合条件,则为了确保测试的充分性,必须将输入条件拆分为简单条件,比如密码长度大于4位小于8位,则拆分为两个原因,即“密码长度大于4位”和“密码长度小于8位”。
因果图中的结果是预期输出或者输出的有效等价类,即系统对用户输入所能产生的所有响应,一般为界面的切换、系统的错误提示等。结果的分析相对较为简单,大部分情况可以从测试需求中直接获取,比如给出“密码输入有误”的错误提示。只有当预期输出为海量数据时,才需要从系统给出的所有响应中提取共性,分析预期输出的有效等价类。
2.2 原因的拆分
由于因果图最擅长处理输入条件和预期输出均为逻辑值的情况,因此提供的原因和结果间的关系是传统意义上的逻辑关系。
原因和结果间一对一的关系只包括两种情况,即恒等和非,所有输入情况的分析是“非真即假”的。也就是说,对于一个输入条件只能划分出一个符合输入条件的有效等价类和一个违反输入条件的无效等价类。显然这种处理方法对于复合条件而言是欠妥当的,比如输入条件为密码长度大于4位小于8位,取非后表示为“密码长度小于等于4位或者大于等于8位”,在判定表中通过0值表示,最后阶段也只能选取“小于等于4位”或者“大于等于8位”中的一种情况来设计测试用例,显然该测试方案出现了关键信息的遗漏,无法保证测试的完备性。
而将复合条件拆分后,每个原因都被描述为简单条件,大部分情况下是一个关系表达式,采用“非真即假”的设计方案,不存在上述遗漏现象,可以保证测试的完备性。
针对此类问题,等价类划分法的处理更为灵活一些。该方法不会假定输入条件为逻辑值,有效等价类和无效等价类之间也不是“非真即假”的关系,会根据不同的应用场景选择不同的等价类设计方案,即使不做拆分,测试的完备性也能得到保证。
2.3 列出原因和结果
由于因果图分析法和判定表驱动法最擅长处理逻辑值的情况,因此在分析问题时,应尽可能将原因和结果描述为条件表达式或逻辑表达式的形式。
通过分析,注册问题的原因描述如下:
C1-用户名填写;C2-密码长度大于4位;C3-密码长度小于8位;C4-密码由纯字母组成;C5-密码由纯数字组成;C6-密码由字母和数字组成;C7-确认密码与密码完全一致。
注册问题的结果描述如下:
E1-请输入用户名;E2-密码输入有误;E3-确认密码输入有误;E4-注册成功。
3 绘制因果图
3.1 确定原因和结果间的逻辑关系
在完成对原因和结果的标识与描述后,需深入分析软件规格说明中的语义,找出原因与结果之间、原因与原因之间对应的关系,并根据这些关系画出因果图[1]。
(1)因果图分析法分析问题的一般方式为,从每个结果入手,分析其如何产生,即结果与原因间存在怎样的关系;
(2)如果结果间没有递进关系,通常选择从最简单的结果开始分析,也可随意选择分析顺序;如果结果间存在递进、嵌套等依赖关系,则必须按照一定的输入顺序进行分析。
注册问题中系统依次对用户输入进行判断,一旦用户名输入无效,则密码和确认密码没有机会得到验证,因此需按顺序进行分析,并在因果图绘制过程中,将用户名输入有效作为密码和确认密码验证的基础要求和前提条件。
3.2 中间结果的确定
中间结果的确定通常是因果图绘制的一大难点,对于一个描述明确的测试需求而言,通常原因和结果是确定的,而中间结果则相对较为模糊,需要花费大量时间进行深入分析。
通常情况下,如果在分析原因和结果的过程中,为了保证测试的充分性,将一个复合输入条件拆分成了多个简单条件,则绘制因果图时,需反其道而行之,通过增加中间结果将其合并起来,为后续分析的顺利进行做好准备工作。
比如对于原因“密码长度大于4位”和“密码长度小于8位”,需创建一个中间结果“密码长度有效”,通过与关系将两者合并起来。对于原因“密码由纯字母组成”、“密码由纯数字组成”和“密码由字母和数字组成”,需创建一个中间结果“密码字符类型有效”,通过或关系将三者合并起来。
除此之外,以下情况也可创建中间结果:
(1)多个输入条件间存在更为紧密的依赖关系,考虑增加中间结果;
(2)一个结果与多个原因间存在关系,但并非纯粹的与/或关系,需要增加中间结果;
(3)多个输入条件间存在递进关系,或者某个输出以某个输入作为前提条件,必须增加中间结果。
因果图绘制过程中,原因和结果必须是完备的,而中间结果的确定并无唯一的标准答案:
(1)为了后续分析的顺利进行,以及减少不必要的交叉线,可以适当增加中间结果,甚至允许出现多层嵌套的中间结果;
(2)如果去除中间结果后,绘制出的因果图无任何歧义或错误,整张图美观、易于阅读,且与测试需求描述完全一致,则中间结果可有可无。
3.3 确定约束
在因果图分析过程中,不仅要考虑输入和输出之间的逻辑关系,还需考虑输入因素之间或输出结果之间的互相制约及依赖关系。由于语法或环境的限制,有些原因和结果的组合情况是不合理或不存在的,因此绘制因果图的最后一步需分析这种特殊情况,并通过标准的符号标明约束条件。
输入条件的约束主要包括以下三类[2]:
(1)E(Exclusive)互斥关系:表示多个输入条件至多有一个成立。
(2)I(Inclusive)包含关系:表示多个输入条件至少有一个成立。
(3)O(Only One)唯一关系:表示多个输入条件有且只有一个成立。
对于“密码由纯字母组成”、“密码由纯数字组成”和“密码由字母和数字组成”三个与密码字符类型有关的原因而言,不可能有两个或以上的条件同时成立。但从用户输入角度出发,若三者同时不成立,则表示密码包括非字母非数字符号,为密码不合法的情况,因此三个原因间应建立互斥约束。
通过以上的分析推导过程,注册问题的因果图已创建完毕,如图1所示。后续可以此为依据,按照一定的规则将其转换为判定表,并设计测试用例完成对系统的功能测试。
图1 注册问题的因果图
4 结论
软件测试是发现软件缺陷和提高软件质量的重要手段。在系统功能测试过程中,对于输入条件组合的复杂情况,因果图分析法是行之有效的测试用例设计方案。因果图分析法充分考虑了输入条件之间及输入条件与输出结果之间的各种组合关系,能够对非常复杂的功能逻辑进行分析,因此所生成的测试用例具有较高的覆盖率,测试效果能够得到保障;另外,该方法不仅对各种组合关系进行了深入分析,还对各种约束规则作出了定义,规避了大量的无效数据,有效提高了测试的效率和有效性;与此同时,该方法能够规范测试用例设计的过程,还有助于发现软件规格说明书中所存在的问题[3]。
因果图分析法的短板主要体现在对非逻辑值的处理上。该方法并非不能处理非逻辑值的输入条件和预期输出,但相对而言,若存在非逻辑值,则因果图的绘制会较为复杂,准确进行问题分析也会较为困难。因此通常将输入和输出描述为逻辑值的形式,虽然在复合条件处理上存在一定的局限性,却能大幅度降低因果图分析的问题难度,便于测试用例的设计,提高测试的效率和有效性。
参考文献
[1] 佟伟光.软件测试(第2版)[M].北京:人民邮电出版社,2015.
[2] 朱少民.软件测试(第2版)[M].北京:人民邮电出版社,2016.
[3] 王鹏宇.浅析基于因果图法软件测试用例的设计[J].电脑与电信,2018(10):64-66.