因果图(Cause-EffectGraphing)提供了一个把规则转化为判定表的系统化方法,从该图中可以产生测试数据。其中,原因是表示输入条件,结果是对输入执行的一系列计算后得到的输出
    因果图方法最终生成的就是判定表。它适合于检查软件输入条件的各种组合情况

一、 因果逻辑关系

系统的逻辑层次架构图_复杂度

因果逻辑关系主要分成三大类:

  • 第一类:因果关系(输入和输出之间的逻辑关系)
        a)恒等:假设输入为a,输出为b;满足条件a则输出结果b
        b)非:假设输入条件为a,输出为b;满足条件a则不能输出结果b
        c)或:多个条件只要满足其一就可以得到某个结果;
        d)与:多个条件同事满足才能得到某个结果;
  • 系统的逻辑层次架构图_系统的逻辑层次架构图_02

  • 第二类: 原因之间的关系(输入和输入之间的制约关系)
        a)异(Exclusive):多个输入至多只能一个为真,不可以同时都为真,可以同时都不为真
        b)或(Inclusive):多个输入条件至少有一个为真,可以同时为真,不可以同时不为真
        c)唯一(Only):多个输入条件有且只能有一个为真,不可以同时都为真,也不可以同时都不为真
        d)要求(Require):有两个输入a和b,a为真则要求b为真;a为假则对b不做要求
  • 系统的逻辑层次架构图_测试用例_03

  •         早教机构:小朋友a;父母b
                     小朋友到早教机构上课,则要求父母陪护;
            小朋友不到早教机构上课,父母可以来参观也可以不来
  • 第三类: 结果之间的关系(输出和输出之间的制约关系)
        a)强制:输出a和b,如果a为真则强制b为假;a为假对b不做强制
  • 系统的逻辑层次架构图_复杂度_04

二、 因果图的运用

例1: 手机欠费或者停机则不能主被叫

原因:

    C1  欠费

    C2  停机

结果:

    Ef1  不能主被叫

系统的逻辑层次架构图_系统的逻辑层次架构图_05

例2: 有一个需求描述如下:对已运行10年以上的机器、或功率大于50马力且维修记录不全的机器,给予全面维修处理,对其它机器进行一般维修处理

原因:

    C1  运行10年以上

    C2  功率大于50马力

    C3  维修记录不全

结果:

    Ef1  全面维修处理

    Ef1  一般维修处理

系统的逻辑层次架构图_复杂度_06


Cm2:中间节点

中间节点:
    (1)当多个原因之间不是单纯的与或的关系,我们可以利用中间节点存取中间结果,使得我们的因果逻辑关系看上去更清晰;
    (2)当多个原因都在描述同一件事情时,我们可以利用中间节点归并逻辑。

例3: 修改账户密码,要求如下:首选输入正确的原始密码;输入两次一致的新密码;并且新密码要具有
一定的复杂度(8-15位;包含大写字符;小写字母;数字;其它字符)
假定:优先提醒原始密码不正确,然后提醒新密码不一致,最后提醒新密码不够复杂

原因:

    C1  原始密码正确

    C2  新密码一致

    C3  新密码够复杂度

结果:

    Ef1  修改成功

系统的逻辑层次架构图_系统的逻辑层次架构图_07

例4: 文件修改需求:
如想对文件进行修改,需要遵循以下规则:
输入的第一列字符必须是A或B;第二列字符必须是一个数字;
如果第一列字符不正确,则给出信息L;如果第二列字符不正确,则给出信息M;如果两列字符输入正确,则可修改文件

原因:
    C1  第一列为A
    C2  第一列为B
    C3  第二列为数字(0~9)
结果:
    Ef1  信息L
    Ef2  信息M
    Ef3  修改文件

系统的逻辑层次架构图_系统的逻辑层次架构图_08


根据因果图生成判定表:

系统的逻辑层次架构图_测试用例_09

例5: 有一个处理单价为5角钱盒装饮料的自动售货机软件。若投5角硬币,按下“可乐”、“雪碧”、或“红茶”按钮,相应的饮料就送出来。若投入1元硬币并按下按钮后,送出饮料的同时退还5角硬币。

原因:
    C1  投入5角硬币
    C2  投入1元硬币
    C3  按下“可乐”按钮
    C4  按下“雪碧”按钮
    C5  按下“红茶”按钮
结果:
    Ef1   退还5角硬币
    Ef2   送出“可乐”饮料
    Ef3   送出“雪碧”饮料
    Ef4   送出“红茶”饮料

原因→原因之间的关系:

    C1 与 C2 是E的关系; C3、C4、C5 是E的关系。

结果→结果之间的关系:

    Ef2与Ef3与Ef4是M的关系。

系统的逻辑层次架构图_因果逻辑_10

三、 因果图法设计用例的步骤

  • 把大的系统规格划分解成可以测试的规格片段
  • 分析分解后待测的系统规格,找出哪些是原因,哪些是结果
  • 画出因果图
  • 把因果图转换成判定表
  • 简化判定表
  • 用判定表中的每一项生成测试用例

四、 因果图的特点与应用

优点:

  • 等价类法尽管格格输入条件可能出错的情况都考虑到了,但是多个输入条件组合起来出错的情况却被忽略了
  • 因果图法能够帮助我们按照一定步骤,高效的选择测试用例,设计多个输入条件组合用例
  • 因果图分析还能为我们指出,程序规格说明描述中存在什么问题

缺点:

  • 输入条件与输出结果的因果关系,有时难以从软件需求规格说明书得到
  • 即使得到了这些因果关系,也会因为因果关系复杂导致因果图非常庞大哦,测试用例数目极其庞大