为什么么需要因果图

在黑盒测试中,等价类划分或边界值分析法只考虑了不同的输入和不同的输出之间的关系。但是如果是各个输入条件之间有很复杂的组合,这二种设计方法都很难用一个系统的方法进行描述,设计测试用例只能依靠测试人员主观的猜测或者分析,具有很大的盲目性。

让我们先来看一个简单的例子。

假设某个软件需求文档中有这样的说明:

第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件的修改。但如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M。

先用等价类来分析,第一列会有三个输入:A、B、非(A B)的字符。第二列字符有二个输入:数字、非数字(为了简便起见,有关数字再细化的问题不做讨论)。这是一个根据理论进行分析的过程。但是做完了这一步,并不能得出输出。也就是说如何分析第一列和第二列的关系,没有明确的理论指导。实际操作过程中,各个测试人员可能会设计出不同的测试用例。

这个例子还仅仅是一个2个输入条件之间有关系,如果到更复杂的应用中,可能会更多。如果没有一种方法指导我们的思想,测试用例就会很不全面。

而因果图正好弥补了上述缺点。我们先来看一下什么叫因果图。因果图是一种形式化的语言(以图的形式表现),它不仅描述了原因和结果之间的关系,也描述了各个原因之间、各个结果之间复杂关系的组合。在这里,因就是程序的输入条件,而果则是程序的输出。正确的使用因果图可以对很复杂的功能逻辑进行分析,设计出高效而简洁的测试用例。

1.1. 因果图概念介绍

学习因果图需要的基本知识是:

1.1.1. 布尔逻辑运算符

三种常用的运算符是NOT、AND、OR。还有两种比较少用的是NAND、NOR。再加上恒等,这六种符号是描述原因和结果之间的逻辑关系的。

下面以图的形式详细说明6种因果逻辑。c表示原因,e表示结果。

n 恒等:如果原因为真,那么结果必定为真。

n 与:只有2个原因都为真,那么结果为真。

n 或:2个原因中有一个为真时,结果就为真。

n 非:只有原因为假,结果才为真。

n 与非:先与后非。

n 或非:先或后非。

1.1.2. 因果图的约束关系表示法

因果图中有4种符号描述原因之间的约束关系,1种符号描述结果之间的约束关系。下面分别介绍:

n 排他性约束:各个原因之间不能同时为真,但可以同时为假。举个例子,小明同学不可能同时属于A班和B班,但可能既不是A班的,也不是B班的,而是C班的。

n 包含性约束:各个原因中总有一个为真。即可以同时为真,但不可以同时为假。举个例子,支付宝买家付款时,有个输入条件(既原因)是余额支付、网银支付,买家可以选择单独余额支付或者单独网银支付,也可以同时选择余额支付和网银支付2种方式。但是不可以选择不支付。

n 必要性约束:当原因a为真时,原因b必须同时为真;但是原因b为真时,原因a既可以为真,也可以为假。举数字证书的例子:现有的业务规则下,如果申请了数字证书(原因a),那么该用户必然通过了支付宝认证(原因b)。反之,如果用户通过了支付宝认证,那么不一定申请了数字证书(a)。

n 唯一性约束:有且只有原因a和原因b中的一个为真。非此即彼,不存在第三种情况。举例来说,人的性别不是男,就是女,不会存在既不是男也不是女的人。

n 掩码标记(结果约束):如果结果b为真,那么结果a一定为假,如果结果b为假,则结果a的状态不定。还拿支付宝来举例子,先给出两个结果:安全控件运行正常(a),无法输入登陆密码(b)。如果无法输入登陆密码,那么可以判断是安全控件没有正常运行,反过来,如果可以输入登陆密码,则不能确定安全控件一定工作正常,有可能是用了FireFox浏览器访问Alipay的。

设计一个名为complex的类来表示复数_因果图用例设计方法概念详解相关推荐

  1. 设计一个名为complex的类来表示复数_天线波束设计

    蜂窝通信系统中,基站和用户通过使用多天线来提升系统性能.根据天线理论,发送天线工作时辐射电磁场,而接收天线捕获空间中的电磁场,并解调其所承载的比特信号.无线通信理论研究者通常将电磁波在空间的传播抽象成 ...

  2. 设计一个名为complex的类来表示复数_complex类java解决

    作者:wzu_cza123 出自:CSDN 原文:blog.csdn.net/wzu_cza123/article/details/108857953?utm_medium=distribute.pc ...

  3. 设计一个名为complex的类来表示复数_CAE必修课:结构动力优化设计_搜狐汽车

    01 结构动力优化设计简介 工程结构在其工作期间将经常性地受到风浪.地震.振动设备等各种外界激励的影响,本质上讲,工程结构所受到的环境载荷都是动载荷,其正常服役性能会受到动力破坏或损伤的影响.船舶在正 ...

  4. 设计一个名为complex的类来表示复数_CAE必修课:结构动力优化设计

    01 结构动力优化设计简介 工程结构在其工作期间将经常性地受到风浪.地震.振动设备等各种外界激励的影响,本质上讲,工程结构所受到的环境载荷都是动载荷,其正常服役性能会受到动力破坏或损伤的影响.船舶在正 ...

  5. Java黑皮书课后题第11章:11.2(Person Student Employee Faculty Staff类)设计一个名为Person的类及其两个名为Student和Employee的子类

    Java黑皮书课后题第11章:11.2(Person Student Employee Faculty Staff类) 题目 缺陷 UML图 代码 Test02_MyDate.java:用于参考的My ...

  6. Java黑皮书课后题第10章:*10.10(Queue类)10.6节给出一个Stock类。设计一个名为Queue的类用于存储整数。像栈一样,队列保存元素。在栈中,元素后进先出。队列中元素先进先出

    10.10(Queue类)10.6节给出一个Stock类,设计一个名为Queue的类用于存储整数 题目 程序 破题 代码 Test10.java Test10_Queue.java UML 题目 程序 ...

  7. Java黑皮书课后题第10章:10.4(MyPoint类)设计一个名为MyPoint的类,代表一个以x坐标和y坐标表示的点

    10.4(MyPoint类)设计一个名为MyPoint的类,代表一个以x坐标和y坐标表示的点 题目 程序 代码 Test4.java Test4_MyPoint.java 运行实例 UML 题目 程序 ...

  8. Java黑皮书课后题第10章:10.3(MyInteger类)设计一个名为MyInteger的类

    10.3(MyInteger类)设计一个名为MyInteger的类 题目 程序说明 代码 Test3.java Test3_MyInteger.java 运行实例 UML 题目 程序说明 测试程序:T ...

  9. Java黑皮书课后题第10章:*10.1(Time类)设计一个名为Time的类。编写一个测试程序,创建两个Time对象(使用new Time()和new Time(555550000))

    Java黑皮书课后题第10章:*10.1设计一个名为Time的类.编写一个测试程序,创建两个Time对象 题目 程序 代码 Test1.java Test1_Time.java 运行结果 UML 题目 ...

最新文章

  1. 关于软件开发你真正需要知道的几个事情
  2. byte数组转字符串_leetcode刷题844比较含退格的字符串(带代码解析,带知识点回顾)...
  3. 禁止sethc.exe运行 防止3389的sethc后门
  4. G4560 HD610安装黑苹果Hakintosh
  5. 详解:离线项目一: 为什么大数据面前没有秘密
  6. 4. 卷2(进程间通信)---管道和FIFO
  7. ASO秘籍:教你如何学会积分墙优化套路
  8. 请问苹果x是如何建文件夹_苹果手机怎么建文件夹
  9. 巧用 CSS 实现炫彩三角边框动画
  10. 微信小程序自定义导航栏(带汉堡包菜单)
  11. 伯恩半导体 - ESD 选型指南
  12. win2008系统 安装hplaserj1010打印机驱动程序
  13. 车牌识别之字符切割2
  14. 条码应用与企业ERP无缝集成
  15. win10快速关机_WIN10系统几种方便快速的关机方式
  16. (一)双S型速度规划 原理
  17. 基于Webio交互的Pyecharts数据分析脚本小记
  18. CSS # 通过CSS使图片颜色反转
  19. 求解某项目的关键路径和总工期
  20. 基于STC15W系列的板载LED灯控制程序讲解

热门文章

  1. 去哪儿霸面题目——泪
  2. 记一次失败的导师霸面
  3. 参与影片《大城小事》的记者会
  4. 51nod3108 小明爱换钱
  5. OpenJudge-2152:Pots
  6. 6种原型设计工具大比对! Axure,Invision, 墨刀……哪款适合你?
  7. vue3之provide(提供)与inject(注入)
  8. Java中得到GMT 时间(格林时间)
  9. docker下自定义分词器词库
  10. 一种可以使人体朝向神圣生命的电脑