• 《因果图法》-有这篇就够了


    目录:

    1. 定义(What
    2. 为什么使用因果图法?(Why
    3. 因果图中的图形符号
    4. 因果图法设计测试用例的步骤How
    5. 优缺点
    6. 难点
    7. 应用场合
    8. 实战演练

    1.定义

    因果图(Cuase-effect Graph)是一种描述输入条件的组合以及每种组合对应的输出的图形化工具。在因果图的基础上可以设计测试用例。

    2.为什么使用因果图法?(Why

    等价类划分法和边界值分析方法都是着重考虑输入条件,如果程序输入之间没有什么联系,采用等价类划分和边界值分析是一种比较有效的方法。如果输入之间有关系,例如,约束关系、组合关系,这种关系用等价类划分和边界值分析是很难描述的,测试效果难以保障,因此必须考虑使用一种适合于描述多种条件的组合,产生多个相应动作的测试方法,因果图正是在此背景下提出的。因果图法着重测试规格说明中的输入与输出间的依赖关系。

    3.因果图中的图形符号

    1)基本图形符号

    • 恒等。若原因出现,则结果出现;若原因不出现,则结果不出现。
    • 非。若原因出现,则结果不出现;若原因不出现,则结果出现。
    • 或。若几个原因中有一个出现,则结果出现;若几个原因均不出现,则结果不出现。
    • 与。若几个原因都出现,结果才出现;若几个原因中有一个不出现,则结果不出现。

    为了表示因果图中的约束条件,可用一些符号在因果图中加以标识。

    (2)限制关系图形符号

    限制关系图形要么在因(输入条件)之间,要么在果(输出结果)之间。

    从原因方面考虑主要有4种约束条件:

    • E(互斥、排他)。a、b两个原因不会同时出现,最多只有一个出现。
    • I(包含、或)。a、b、c三个原因至少有一个出现。
    • O(唯一)。a、b两个原因必须有一个出现,且仅有一个出现。
    • R(需求)。a出现时b必定出现。

    从结果方面考虑主要有1种约束条件:

    • M(屏蔽)。a出现时,b必定不出现;a不出现时,b则不确定。

     

    4.因果图法设计测试用例的步骤How

    • 分析程序的规格说明书中哪些原因,哪些是结果。所谓原因,是指输入条件或输入条件的等价类,而结果是指输出条件。给每一个原因和结果赋一个标识符。
    • 分析程序规格说明书中的语义,确定原因与原因,原因与结果之间的关系,画出因果图。
    • 由于语法环境的限制,一些原因与原因之间,原因与结果之间的组合不能出现。对于这些特殊情况,在因果图中用一些记号标明约束或限制条件。
    • 将因果图转化为判定表。
    • 根据判定表的一列设计测试用例。

    当然,若能直接得到判定表,可以直接根据判定表设计测试用例。

     

    5.优缺点

    优点:

    • 有助于用一个系统的方法选择出高效的测试用例集;
    • 还有一个额外的好处,通过将规格说明转换为布尔逻辑网络,就可以指出规格说明的不完整和不明确之处。

    缺点:

    尽管因果图方法确实能产生一组有效的测试用例,但通常它不能生成全部应该被确定的有效测试用例。最好是单独考虑边界值分析等方法。

    6.难点

    因果图法最具难度的部分是将因果图转换为判定表。但这个过程是有算法的,即意味着我们可以编写程序来自动完成这个过程。

    7.应用场合
    在界面中有多个控件,控件之间有组合或限制关系,不同的输入组合会对应不同的输出结果,如果想弄清楚不同的输入组合到底对应哪些输出结果,可以使用因果图/判定表法。(因果图/判定表法比较适合测试组合数量较少的情况,一般少于20)

    8.实战演练

    有一个单价为五角钱的饮料自动售货机软件,对其采用因果图方法设计测试用例。需求如下:

    • 若售货机没有零钱找,则一个显示 “零钱找完”的红灯亮,以提示顾客在此情况下不要投入1元钱,否则此红灯不亮。
    • 顾客投入5角硬币,然后按下“橙汁”或“啤酒”按钮,则相应的饮料被送出。
    • 顾客投入1元硬币并按下“橙汁”或“啤酒”按钮后,若售货机没有零钱找,则显示“零钱找完”的红灯亮,1元硬币被退出,且无饮料送出;若有零钱找,则五角硬币被退出且饮料被送出。

    Step1.列出原因

     

    Step2.列出结果

     

    Step3.根据需求说明设置中间节点

     

    Step4.根据列出的原因、结果、中间节点画出因果图

    23号原因不能同时出现,45号原因不能同时出现。

    Step5.将因果图转换成判定表

    在构成的判定表中,原因、中间节点、结果的取值为0表示其代表的状态不出现;为1表示状态出现。

    中间节点与结果没有值,代表因违反约束而不会出现的情况,1632列没有做任何操作,8122428列不符合常理(投币却没有选择饮料)为无效列,14153031列不符合常理(只选择饮料却没投币)为无效列。

    Step6.根据剩下的列设计测试用例

     

    这个例子中,事实上在分析问题时进行了一些简化,主要有以下几点:

    • 判定表中8,12,24,28列不符合常理(投币却没选饮料),但却是可能发生的。可以考虑对需求做一下完善:若投币N秒后仍没有选择饮料,售货机上“请选择饮料”灯亮。进而根据需求规格说明改进因果图和判定表。
    • 判定表中14,15,30,31列表示只选择饮料却没投币。可以对需求做以下完善:只选择饮料却没有投币时,自动售货机上“请投币”的灯亮。进而根据需求规格说明改进因果图和判定表。
    • 2627表示在自动售货机没零钱找的情况下投入五角钱,此时自动售货机进入有零钱找状态,由于需求说明没有考虑这一特殊状态,故判定表中第2627列的21号结果没有从1变成0实际上是不正确的。在需求规格说明书中应对此种情况加以考虑,进而改进因果图和判定表。
    • 67列对应的是自动售货机在有零钱的情况下找了5角钱,此刻自动售货机有可能进入无零钱找的状态,由于需求说明没有考虑这一特殊状态,故判定表中第67列的21号结果没有从1变成0实际上是不一定正确的。在需求规格说明书中应对此种情况加以考虑,进而改进因果图和判定表。

     ---------------------全文完----------------------

     

     

     

     

  • 相关阅读:
    BigDecimal 使用方法详解
    vbs xml 解析
    hybris
    淘宝SKU组合查询算法实现
    GitHub入门教程 Hello World for GitHub
    利用Java进行MySql数据库的导入和导出
    计算机网络自顶向下第三章传输层二TCP
    django网站搭建常用的一些代码
    django中日志使用学习记录
    python遍历当前目录并删除某文件
  • 原文地址:https://www.cnblogs.com/jitipaper/p/12690146.html
Copyright © 2020-2023  润新知