1. 定义:因果图法是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,他适合与检查程序输入条件的各种组合情况。
2. 意义:等价类划分和边界值分析方法都是着重考虑输入条件,但没有考虑输入条件的各种组合、输入条件之间的相互制约关系。这样虽然各种输入条件可能出错的情况已经测试测试到了,但多个输入条件组合起来可能出错的情况却被疏忽了。
3. 认识因果图
·如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字,因此必须考虑采用一种适合于描述多种条件的组合、相应产生多个动作的形式来进行测试用例的设计,这就需要利用因果图(逻辑模型)
·因果图常用符号有以下2中:
1)CI:原因
2)EI:结果
(注意:其中I取“0”表示状态不出现,“1”表示状态出现,若有多状态,可取大于1的多个值表示。)
4. 因果图四种关系(左输入右输出)

1)恒等:原因结果同时出现,若c1是1,则e1也是1;否则e1为0.
2)非~:原因出现,结果不出现;原因不出现,结果出现。若c1是1,则e1是0;否则e1 是1;
3)或V:原因只有一个出现,结果就出现;原因都不出现,结果就不出现。
若c1或c2或c3是1,则e1是1;否则e1为0。“或”可有任意个输入
4)且/与^:原因都出现,结果才出现。若c1和c2都是1,则e1为1;否则e1为0。
“与”也有任意个输入
5. 因果图约束条件
·输入状态相互之间还可能存在某些依赖关系,称为约束。例如,某些输入条件本身不可能同时出现。输入状态之间也往往存在约束。在因果图中,用特定的符号标明这些约束。
·从输入考虑
1)E(互斥/异或):表示a,b两原因不会同时成立,最多一个能成立
2)I(包含):a、b、c三个原因中至少有一个必须成立
3)O(唯一):a、b当中必须有一个,且仅有一个成立
4)R(要求):当a出现时,b必须也出现,不可能a出现b不出现;
·从输出考虑——M(强制或屏蔽)
1)结果a是1时,结果b必须是0;
2)结果a是0时,结果b的值不定;

例子:

男士,女士:互斥
隐藏一定属于宁夏:要求
固定电话,小灵通,手机号:包含
6. 因果图法设计测试用例的步骤:
1)提取因果,赋予标识符:分析软件规格说明描述中,那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件),并给每个原因和结果赋予一个标识符。
2)提取因果关系,表示因果图:分析软件规格说明描述中的语义,找出原因与结果之间,原因与原因之间对应的关系,根据这些关系,画出因果图。
3)表名约束条件:由于语法或环境限制,有些原因与原因之间,原因与结果之间的结合情况不可能出现,为表明这些特殊情况,在因果图上用一些记号表明约束或限制条件。
4)转换成判定表:把因果图转换成判定表
5)设计测试用例:把判定表的每一列拿出来作为依据,设计测试用例。
7. 例子:文件修改程序
·某软件规格说明书包含这样的要求:输入的第一个字符必须是#或*,第二个字符必须是一数字,此情况下进行文件的修改;若第一个字符不是#或*,则给出信息N,若第二个字符不是数字,则给出信息M;
分析:
1)分析需求,列出原因和结果

2)找出因果关系、原因与原因之间的约束关系,画出因果图

10:表示中间状态,可以作为一种结果,存在c1和c2的关系或,要么c1出现要么c2出现,表示中间出现了一个,要么是#要么是*,表示其中一个。
3)将因果图转换成决策表

不可能表示:c1和c2同事出现,就是不可能的
4)根据(3)中的决策表,设计用例的输入数据和预期输出
8. 应用场合和局限性
·应用场合:当软件输入条件过多时,可以考虑输入的所有排列组合情况,考虑条件之间和条件结果之间关系,防止遗漏。
·局限性:测试用例数目可能会很大,不便于维护。如果是m个输入条件,则会有2的m次方种组合。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221895.html原文链接:https://javaforall.net
