因果图法是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种情况的组合。因果图(Cause-Effect-Graphing)提供了把规则转化为判定表的系统化方法,其中**“原因”是表示输入条件**,“结果”是输入条件经过一系列计算后得到的输出。
因果图实际上是一种数字逻辑电路(一个组合的逻辑网络),但没有使用标准的电子学符号,而是使用了稍微简单点的符号。当然,读者不必要掌握电子学方面的知识,只需要了解逻辑运算符“与”、“或”、“非”即可。
因果图的特点
- 考虑输入条件的相互制约及组合关系
- 考虑输出条件对输入条件的依赖关系
因果图的基本符号
- 通常在因果图中用Ci表示原因,用Ei表示结果,各结点表示状态,可取值‘0’或‘1’。‘0’表示某状态不出现‘1‘表示某状态出现。
在大多数程序中,有一些输入条件是不可能同时存在的,比如在等价类划分法中的“用户注册”的案例中,用户名的首字符不可能既为字母又为数字,二者为互斥。也就是说输入条件相互之间存在着某些制约关系,称为“约束”。在因果图中,用特定的符号标明这些约束,如下图所示。
-
E 约束(异、互斥):a、b、c 中最多有一个可能为 1,也就是 a、b、b 不能同时为 1,输入条件之间为互斥关系。但可以同时为 0。
-
I 约束(或、包含):a、b、c 中最少有一个必须是 1,也就是 a、b、c 不能同时为 0,输入条件之间为包含关系。但可以同时为 1。比如程序中的多选按钮。
-
O 约束(唯一):a、b、c 中必须有一个且仅有一个为 1。比如程序中的单选按钮。
-
R 约束(要求):a 是 1 时,b 必须是 1,a 为 0 时,b 的值不确定。即不可能 a 是 1 时,b 是 0。
以上 4 种是输入条件的约束,输出条件的约束只有一种,就是 M 约束:
-
M 约束(强制、屏蔽):若 a 是 1,则 b 强制为 0;若 a 是 0,那么 b 的值不确定。
因果图设计用例步骤
- 第 1 步:分析待测系统的规格说明,找出原因与结果。
- 第 2 步:明确所有原因和结果之间的制约关系以及组合关系,画出因果图。
- 第 3 步:在因果图上标记约束条件。
- 第 4 步:跟踪因果图中的状态条件,把因果图转换为判定表。
- 第 5 步:将判定表中的每一列作为依据,生成测试用例。
用户名输入框案例
某软件的规格说明中对登录名输入包含这样的要求:输入的第一个字符必须是”$”或英文字母,第二个字符必须是一个数字,在此情况下进入第二个窗口;但如果第一个字符不正确,则给出信息 M;如果第二个字符不是数字,则给出信息 N。
1、分析题目说明,列出原因结果
登录的原因结果分析 | |
---|---|
原因 | C1:第一个字符是$ |
C2:第一个字符是英文字母 | |
C3:第二个字符是数字 | |
结果 | e1:给出信息 M |
e2:进入第二个窗口 | |
e3:给出信息 N |
2、画出因果图
图中 c12为中间节点,是导出结果的进一步原因。
因为 c1和 c2不可能同时为 1,即第一个字符不可能既是 c1又是 c2,所以在因果图上对其施加 E 约束,得到具有约束的因果图。如下图所示。
3、将因果图转化为判定表
表中的前 2 种情况,因为 c1和 c2不可能同时为 1,所以排除。根据判定表,设计出 6 个测试用例,如下表所示。
用例编号 | 输入数据 | 预期输出 |
---|---|---|
TC-001 | $5 | 进入第二个窗口 |
TC-002 | $a | 给出信息N |
TC-003 | a5 | 进入第二个窗口 |
TC-004 | aa | 给出信息N |
TC-005 | 11 | 给出信息M |
TC-006 | ## | 给出信息M |