上一次我们介绍了判定表法设计测试用例,这里我们介绍一个经常与判定表一起使用的测试用例设计方法——因果图法。
因果图法是基于这样的一种思想:一些程序的功能可以用判定表(或称决策表)的形式来表示,并根据输入条件的组合情况进行相应的操作。但是,由于一些软件输入条件的组合比较复杂,且存在相互制约的关系,因此,我们需要利用因果图这种逻辑模型快速得到判定表。
因果图法的定义:是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。
采用因果图方法能够帮助我们按一定步骤,高效率地选择测试用例,同时还能为我们指出,程序规格说明描述中存在的一些设计问题。
因此,使用因果图法具有以下优点: (1)考虑到了输入情况的各种组合以及各个输入情况之间的相互制约关系。 (2)能够帮助测试人员按照一定的步骤,高效率的开发测试用例。 (3)因果图法是将自然语言规格说明转化成形式语言规格说明的一种严格的方法,可以指出规格说明存在的不完整性和二义性。
因果图中用来表示4种因果关系的基本符号: 因果图中的4种基本关系:在因果图的基本符号中,图中的左结点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。“与”也可有任意个输入。
因果图中的约束:在实际问题中输入状态相互之间、输出状态相互之间可能存在某些依赖关系,称为“约束”。 对于输入条件的约束有E、I、O、R四种约束: E约束(异):a和b中最多有一个可能为1,即a和b不能同时 为1。 I 约束(或):a、b、c中至少有一个必须为1,即 a、b、c不能同时为0。 O约束(唯一):a和b必须有一个且仅有一个为1。 R约束(要求):a是1时,b必须是1,即a为1时,b不能为0。
对于输出条件的约束只有M约束: M约束(强制):若结果a为1,则结果b强制为0。
因果图法最终生成的是判定表。利用因果图生成测试用例的基本步骤如下: (1)分析软件规格说明中哪些是原因(即输入条件或输入条件的等价类),哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符。 (2)分析软件规格说明中的语义,找出原因与结果之间、原因与原因之间对应的关系, 根据这些关系画出因果图。 (3)由于语法或环境的限制,有些原因与原因之间、原因与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号表明约束或限制条件。 (4)把因果图转换为判定表。 (5)根据判定表中的每一列设计测试用例。
例:使用因果图法为以下程序设计测试用例。 程序的规格说明要求:输入的第一个字符必须是#或*,第二个字符必须是一个数字,此情况下进行文件的修改;如果第一个字符不是#或*,则给出信息N,如果第二个字符不是数字,则给出信息M。
解题步骤: (1)分析程序的规格说明,列出原因和结果。 (2)找出原因与结果之间的因果关系、原因与原因之间的约束关系,画出因果图。 (3)将因果图转换成决策表。 (4)根据(3)中的决策表,设计测试用例的输入数据和预期输出。 原因: 1——第一个字符是#; 2——第一个字符是*; 3——第二个字符是一个数字。 结果: 21——修改文件; 22——给出信息N; 23——给出信息M。 其对应的因果图如下: 11为中间节点;考虑到原因1和原因2不可能同时为1,因此在因果图上施加E约束。 对应的判定表及测试用例如下: 表中8种情况的左面两列情况中,原因①和原因②同时为1,这是不可能出现的,所以要排除这两种情况。表的最下一栏给出了6种情况的测试用例及需要测试的数据。
因果图方法小结 判定表法经常和因果图法一起用,先进行因果图分析,再结合判定表,最后完成测试用例。 在多个条件决定多个动作,并且每个条件的取值只有两种情况下,我们就可以采用因果图和判定表方法。 条件和动作之间的逻辑关系是明确的,可以直接使用判定表法;如果条件和动作关系不明确,则要先得到因果图,再确定判定表 。