如果程序的输入条件和动作之间的逻辑关系明确,则可直接使用判定表驱动法。但是,如果输入条件和动作关系不明确,则应当使用因果图法
1.因果图法原理:
因果图是一种形式化的图形语言,通过图形记号将自然语言规格说明转变成形式化语言规格说明,能够严格地表达程序输入和输出的逻辑关系。
(1)因果图表达形式
- 恒等:如果原因出现,则结果出现,如果愿意不出现,则结果也不出现
- 非(~):如果原因出现,则结果不出现;如果原因不出现,则结果出现
- 或(∨):如果几个原因中有一个出现,则结果出现;如果几个原因都不出现,则结果不出现
- 与(∧):如果几个原因都出现,则结果出现;如果几个原因有一个不出现,则结果不出现
在实际问题中,输入条件之间、输出条件之间往往存在着某些依赖关系,我们称之为约束。
- E(互斥):表示C1和C2两个原因不会同时成立,两个原因中最多可能有一个成立
- I(包含):表示C1、C2、C3三个原因中至少有一个必须成立
- O(唯一):表示C1、C2中必须有且仅有一个成立
- R(要求):表示当C1出现时,C2也必须出现,即C1时1时,C2也必须时1
- M(强制):表示当结果E1是1时,结果E2必须时0
(2)利用因果图设计测试用例的步骤
- 分析软件的规格说明,确定哪些是原因(即输入条件或输出条件的等价类),哪些是结果(输出条件),给每一个原因和结果赋标识符
- 分析软件规格说明中的语义信息,确定原因和结果之间、原因和原因之间的对应逻辑关系,然后根据这些关系画出因果图
- 在因果图上标明约束。由于语法或环境的限制,有些原因和结果的组合情况是不可能出现的。为了表明这些特殊情况,在因果图上通过标准的符号标明约束条件
- 将因果图转换为判定表
- 根据判定表的每一条规则设计测试用例
2.因果图法实例
软件规格说明要求如下:第一列字符必须是A或B,第二列字符必须是数字,在此情况下进行文件的修改。但是如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M
根据以上规格说明,可分析如下原因和结果
原因:1——第一列字符是A
2——第一列字符是B
3——第二列字符是数字
结果:21——修改信息
22——给出信息L
23——给出信息M
图中,11是中间原因,因为原因1和原因2不可能同时为1,即第一个地府不可能既是A又是B,因此在因果图上对他们施加E约束。
由上因果图可得如下所示判定表,由于原因1和原因2互斥,因此规则1和规则2无效,只需要设计剩下的6个规则所对应的测试用例。
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | |
2 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | |
3 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | |
中间原因 | 11 | 1 | 1 | 1 | 1 | 0 | 0 | ||
结果 | 22 | 0 | 0 | 0 | 0 | 1 | 1 | ||
21 | 1 | 0 | 1 | 0 | 0 | 0 | |||
23 | 0 | 1 | 0 | 1 | 0 | 1 | |||
测试用例 | A2 | AK | B2 | BD | F4 | UR | |||
A6 | A# | B7 | B? | S9 | W! |
3.因果图法的优点与局限性
优点:
- 因果图法借助图形,能够直观地分析和表达输入的各种组合关系、约束关系和每种组合条件下的输出结果
- 采用因果图法不仅可以发现输入和输出中的错误,而且能够发现规格说明中存在的不完整性和二义性问题
局限性:程序输入与输出之间的因果关系有时候难以从规格说明中直接得到。当输入条件很多时,测试用例数量会很大,会造成测试工作量大和用例不便于维护的问题,需要根据实际情况尽量精简输入条件的个数