一、因果图分析的优点

边界值分析和等价类划分的一个弱点是未对输入条件的组合进行分析。
对输入组合分析并不是一件容易的事,因为即使对输入条件进行了等价类划分,这些组合的数量也是个天文数字。如果在选择输入条件的子集时没有采用一个系统的方法,很可能会选择出一个任意的输入条件子集,这样会使测试没有什么成效。
因果图有助于用一个系统的方法选择出高效的测试用例集。它还有一个额外的好处,就是可以指出规格说明中不完整和不明确之处。

二、生成测试用例时采用的过程如下:

1.将规格说明分解为可执行的片段,这是必须的步骤,因为因果图不善于处理较大的规格说明。
2.确定规格说明中的因果关系。所谓“因”,是指一个明确的输入条件或输入条件的等价类。所谓“果”,是指一条件或系统转换。通过逐字逐句地阅读规格说明书,同时标识出“因”和“果”的文字或句子,就可以将因和果确定出来,每个因和果都被赋予一个惟一的编号。
3.分析规格说明的语义内容,并将其转化为连接因果关系的布尔图,这就是因果图。
4.给图加上注解符号,说明由于语法或环境的限制而不能联系起来的因和果。
5.通过仔细跟踪图中的状态变化情况,将因果图转换成一个有限项的判定表。表中的每一列代表一个测试用例。
6.将判定表中的列转换为测试用例。

三、因果图中的基本符号:

每个结点的值为0或者为1,0代表不存在状态,1代表存在状态。

1.identity函数表示如果a=1,则b=1,否则b=0;

python 因果分析预测法 因果预测分析法优缺点_规格说明

 2.NOT函数表示如果a=1,则b=0,否则b=1;

python 因果分析预测法 因果预测分析法优缺点_规格说明_02

 3.AND函数表示如果a和b都等于1,则c=1,否则c=0;

python 因果分析预测法 因果预测分析法优缺点_提示信息_03

 4. OR函数表示如果a或b或c等于1,则d=1;

python 因果分析预测法 因果预测分析法优缺点_提示信息_04

 

四、由于语法和环境的原因,某些原因的组合是不可能存在的,为了对此做出解释,我们采用如下符号:

1.互斥:约束E(Exclude)表示a和b中最多只有一个1,可以都不是1;

python 因果分析预测法 因果预测分析法优缺点_规格说明_05

 2.包含:约束I(Include)表示a,b,c中至少有一个为1;

python 因果分析预测法 因果预测分析法优缺点_测试用例_06

 3.唯一:约束O(Only)表示a,b中有且仅有一个必须为1;

python 因果分析预测法 因果预测分析法优缺点_测试用例_07

 4.要求:约束R(Required)表示如果a为1,b也必须为1;

python 因果分析预测法 因果预测分析法优缺点_规格说明_08

5.屏蔽:约束M(Masked)表示如果a为1,则b为0;

 

五、为描述一个因果图,考虑下面的规格说明:

第一列中的字符必须是“A”或“B”第二列中的字符必须是一个数字。在这种情况下,对文件进行更新。如果第一个字符不正确,产生提示信息X12.如果第二个字符不是数字,产生提示信息X13.


1.根据规格说明,列出因和果:

因如下:

1--第一列的字符是A;

2--第一列的字符是B;

3--第二列是一个数字。


果如下:

70--对文件做了更新

71--产生提示信息X12

72--产生提示信息X13


2.根据列出的因果,画出因果图:

python 因果分析预测法 因果预测分析法优缺点_测试用例_09

 

 3.根据因果图,生成判定表

 

python 因果分析预测法 因果预测分析法优缺点_规格说明_10

 4.根据判定表,确定有效的组合:

1.组合1,3,70
2.组合1,72
3.组合2,3,70
4.组合2,72
5.组合3,71

5.根据有效组合编写用例:
1.第一列字符是A,第二列字符是一个数字,期望结果:对文件做了更新;
2.第一列字符是A,期望结果:产生提示信息X13;
3.第一列字符是B,第二列字符是一个数字,期望结果:对文件做了更新;
4.第一列字符是B,期望结果:产生提示信息X13;
5.第二列字符是一个数字,期望结果:产生提示信息X12.

 

参考资料:《软件测试的艺术》