6.7.3 因果图
前面介绍的等价类划分方法和边界值分析法.都是着重考虑输入条件,但未考虑输入条件之间的联系、相互组合等。考虑输入条件之间的相互组合,可能会产生一些新情况。但要检查输入条件的组合不是一件容易的事情,即使把所有输入条件划分成等价类,它们之同的组合情况也相当多。因此,必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作形式来考虑测试用例。因果图(逻辑模型)应运而生。
因果图法是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况,适合于描述多种输入条件的组合、相应产生多个动作的方法。
(1)因果图的优点。
①考虑多个输入之间的相互组合、相互制约关系。
②指导测试用例的选择,能够指出需求规格说明描述中存在的问题。
③能够帮助测试人员按照一定的步骤,高效率地开发测试用例。
④因果图法是将自然语言规格说明转化成形式语言规格说明的一种严格的方法,可以指出规格说明存在的不完整性和二义性。
利用因果图进行测试时,首先要明确测试内容,做到有的放矢。把规格说明中需要测试的内容(比如图书管理系统中的图书信息查询功能)找到,利用因果图对规格说明书的内容进行形式化表示。“因”一般指输入条件或者输入条件的等价类;“果”一般指输出条件,或者后续将要进行的操作,或者系统状态转换等。
(2)因果图的基本关系。
图6.7描述了因果图的四种基本关系。图中左节点ci表示输入状态(或称原因),右节点ei表示输出状态(或称结果)。ci与ei取值0或1,0表示某状态不出现,1则表示某状态出现。
①恒等:若c1是1,则e1也为1,否则e1为0。
②非(~):若c1是1,则e1为0,否则e1为1。
③或(∨):若c1或c2或c3是1,则e1为1,否则e1为0。
④与(∧):若c1和c2都是1,则e1为1,否则e1为0。

图6.7 因果图的四种基本关系
(3)因果图的约束。
输入状态相互之间还可能存在某些依赖关系,称为约束。比如,某些输入条件本身不可能同时出现,输出状态之间也往往存在约束。在因果图中,用特定的符号标明这些约束,如图6.8所示。
因果图的约束又分为输入条件的约束和输出条件的约束。
1)输入条件的约束有以下4种。
①E约束(异,Exclusive):a和b中至多有一个可能为1,即a和b不能同时为1。
②约束(或,Inclusive):a、b和c中至少有一个必须是1,即a、b、和c不能同时为0。

图6.8 因果图的五种约束图
③O约束(唯一,Only):a和b必须有一个,且有且仅有1个为1。
④R约束(要求,Request):a是1时,b必须是1。即不可能a是1时b是0。
2)输出条件约束类型。输出条件的约束只有M约束(Masks,强制):若结果a是1,则结果b强制为0。(https://www.daowen.com)
(4)因果图法设计测试用例步骤。
因果图设计测试用例需要如下五个步骤。
①确定软件规格中的原因和结果。分析规格说明中哪些是原因(即输入条件或输入条件的等价类),哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符。
②确定原因和结果之间的逻辑关系。分析软件规格说明中的语义,找出原因与结果之间、原因与原因之间对应的关系,根据这些关系画出因果图。
③确定因果图中的各个约束,由于语法或环境的限制,有些原因与原因之间、原因与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号表明约束或限制条件。
④把因果图转换为决策表。
⑤根据决策表设计测试用例。
对于逻辑结构复杂软件,先用因果图进行图形分析,再用判定表进行统计,最后设计测试用例。当然,对于比较简单的测试对象,可以忽略因果图,直接使用决策表。
例6.4 有一个处理单价为1元5角钱的盒装饮料的自动售货机软件,若投入1元5角硬币,按下“可乐”“雪碧”或“红茶”按钮,相应的饮料就送出来。若投入的是2元硬币,在送出饮料的同时退换5角硬币,试应用因果图法设计测试用例。
解:(1)根据题意。原因和结果如下。
原因:c1:投入1元5角硬币;
c2:投入2元硬币;
c3:按“可乐”按钮;
c4:按“雪碧”按钮;
c5:按“红茶”按钮。
中间状态:11:已投币。
12:已按钮。
结果:e1:退还5角硬币;
e2:送出“可乐”饮料;
e3:送出“雪碧”饮料;
e4:送出“红茶”饮料。
(2)根据原因和结果,可以设计一个因果图,如图6.9所示。

图6.9 饮料自动售货机因果图
将因果图转换为判定表,如表6.12所示,每一列可作为确定测试用例的依据。
表6.12 饮料自动售货机软件判定表
