软件测试之因果图法
因果图法
1. 概述
因果图法是一种**利用图解法分析输入条件、输出结果的各种组合情况,**从而设计测试用例的方法.
因果图法适用于有多个输入和多个输出,而且输入和输入之间有相互的组合关系,输入和输出之间有相互的制约和依赖关系.
使用场景和判定表法是一样的.
在界面中有多个控件,控件之间有组合或限制关系,不同的输入组合会对应不同的输出结果,如果想弄清楚不同的输入组合到底对应哪些输出结果,可以使用因果图/判定表法。(因果图/判定表法比较适合测试组合数量较少的情况,一般少于20种)
和判定表法的不同:
- 因果图,只是一个用图形表示,表示因果方式不同而已
关联:
- 判定表和因果图是等价的,判定表是因果图的简化版。
2.核心
2.1 因果图
原因(因): 输入条件
结果(果): 输出结果
因果图: 就是通过画图的方式来表示输入条件(因)和输出结果(果)之间的关系。
2.2 因果图中的图形符号
(1). 恒等(=)

含义: 原因出现结果出现,原型不出现,结果不出现. 例如:若c=10,则d=0.
(2). 非 (~)

含义: 若原因出现,则结果不出现;原因不出现则结果出现.例如: 搜索联系人,若有就不提示错误.
(3). 或 (v)

含义: 若几个原因中有一个出现,这结果出现;若都不出现,结果不出现.
(4). 与(^)

含义: 若几个原因都出现结果才出现,否则,结果不出现.
2.3 约束
输入状态相互之间还可能存在某些互相依赖的关系,称为约束. 输出状态之间也存在某些约束.在因果图中使用特定符号表示这些约.
束.

(1). 输入条件约束
- E(exclude) 约束: a和b中至多有一个为1.
- I(include) 包含: a、b和c中至少有一个必须是1.
- R(required) 要求: a是1时,b必须是1.
- O(only) 唯一: a和b必须有一个,且仅有1个为1.
(2). 输出条件约束
- M(mandatory) 强制: 若结果a是1,结果b强制为0.
3. 设计测试用例
步骤
- 了解需求,找出所有的输入条件(因)
- 找出所有的输出结果(果)
- 画因果图、填判定表
- 判定表中每个规则就是一条测试用例
4.案例
问题描述: 如想对文件进行修改,输入的第一列字符必须是a或b,第二列字符必须是一个数字,如果第一列字符不正确则给出信息L,如果第二个字符不正确,则给出字符M
4.1 了解需求,找出输入条件
1— — 第一列字符是a
2 — — 第一列值符为b、
3 — — 第二列必须是数字
4.2 找出所有的输出结果
结果:
4— 信给出息l
5— 信息m
6— 修改文件
4.3 画因果图、填判定表
通过分析得出,原因1和原因2不可能同时出现,添加约束E. 设置9为中间点.
因果图如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R5ER9bTf-1677381558010)(/images/cause.png)]
判定表法
| 条件(原因) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
|---|---|---|---|---|---|---|---|---|---|
| 1 | Y | Y | N | N | N | N | Y | Y | |
| 2 | N | N | Y | Y | N | N | Y | Y | |
| 3 | Y | N | Y | N | Y | N | Y | N | |
| 中间值 | 9 | Y | Y | Y | Y | N | N | ||
| 动作(结果) | 4 | Y | Y | ||||||
| 5 | Y | Y | |||||||
| 6 | Y | Y | Y |
注意: 第7列和第8列不可能出现,所以排除这两种情况.
4.4 根据判定表设计测试用例

5.小结
因果图法是通向判定表法的一个中间过程.我们经常会将因果图法和判定表分析法结合起来使用.
对于业务逻辑比较复杂的我们建议先使用因果图法进行分析,然后再转化为判定表法,最后写测试用例.这样思路比较清晰,
对于简单的可以直接使用判定表法直接分析,然后写测试用例.
相关文章:
软件测试之因果图法
因果图法 1. 概述 因果图法是一种**利用图解法分析输入条件、输出结果的各种组合情况,**从而设计测试用例的方法. 因果图法适用于有多个输入和多个输出,而且输入和输入之间有相互的组合关系,输入和输出之间有相互的制约和依赖关系. 使用场景和判定表…...
vue中子组件间接修改父组件传递过来的值
一、前言 Vue官方文档Props单向数据流讲解 Vue中遵循单向数据流,所有的 props 都遵循着单向绑定原则,props 因父组件的更新而变化,自然地将新的状态向下流往子组件,而不会逆向传递。这避免了子组件意外修改父组件的状态的情况&a…...
Java I/O
前言 关于IO, 想必你听过很多中I/O方式, 有的是OS视角的, 有的是JDK本身支持的, 有的是纯实现视角。但是作为一个developer, 我希望你能先搞清楚上下文之后, 再去理解内容, 否则容易抬杠。这个上下文有横向和纵向两个维度。纵向维度包括JDK底层, JDK上层包装库, 开发框架(如Ne…...
pytorch学习日记之图片的简单卷积、池化
导入图片并转化为张量 import torch import torch.nn as nn import matplotlib.pyplot as plt import numpy as np from PIL import Image mymi Image.open("pic/123.png") # 读取图像转化为灰度图片转化为numpy数组 myimgray np.array(mymi.convert("L"…...
【java基础】抽象类和抽象方法
文章目录基本介绍抽象类抽象方法使用总结基本介绍 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就…...
RDD的内核调度【博学谷学习记录】
RDD的依赖关系RDD的依赖: 指的一个RDD的形成可能是有一个或者多个RDD得出, 此时这个RDD和之前的RDD之间产生依赖关系在Spark中, RDD之间的依赖关系,主要有二种依赖关系:1- 窄依赖:目的: 为了实现并行计算操作, 并且提高容错的能力指的: 一个RDD上的一个分区的数据, 只能完整的交…...
二叉树——二叉搜索树的最小绝对差
二叉搜索树的最小绝对差 链接 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数,其数值等于两值之差的绝对值。 示例 1: 输入:root [4,2,6,1,3] 输出:1 示例 2&…...
git的使用(终端输入指令)下
文章目录前言1、git 分支创建分支查看分支切换分支合并分支删除分支2.提交到远程仓库远程提交链接一下自己仓库总结前言 上章链接 :git的使用(终端输入指令)上 我们接着上着来说 上章把 git 的 功能实现了一部分,本章我们接着上文…...
python使用influxdb-client管理InfluxDB的bucket
bucket的概念类似数据库的“库”,同时每个库中的数据都因为存在“时间戳”,每个数据都会有一个对应的时间点 influxdb-client-python官方github页面:https://github.com/influxdata/influxdb-client-python 管理bucket的官方示例࿱…...
【c++】模板2—类模板
文章目录类模板语法类模板与函数模板区别类模板中成员函数常见时机类模板对象做函数参数类模板与继承类模板成员函数类外实现类模板分文件编写类模板与友元类模板语法 类模板作用: 建立一个通用类,类中的成员数据类型可以不具体制定,用一个虚…...
基于SpringCloud的可靠消息最终一致性03:项目骨架代码(下)
上一节把整个项目的演示内容、项目结构、POM文件和配置文件都讲完了,接下来继续。 先安装并启动Nacos,然后在其中建立一个名为xiangwang-payment-dev.yaml的配置文件,内容为: # 指定运行环境 spring:autoconfigure:exclude: com.alibaba.druid.spring.boot.autoconfigure.D…...
linux如何彻底的删除文件
一、使用rm命令删除 直接用rm 先用ls -alt看下文件信息及拥有者等 可以看到拥有者是eve用户,所以在eve用户的终端中rm命令即可, 如果是root或者其他,则优先用root或其他账号进行删除 (base) eveEve:~$ ls -alt a.txt -rw-rw-r-- 1 eve eve …...
数据仓库Hive的安装和部署
1)去apache.hive.org官网下载hive 目前hive主要有三大版本,Hive1.x、Hive2.x、Hive3.x Hive1.x已经2年没有更新了,所以这个版本后续基本不会再维护了,不过这个版本已经迭代了很多年了,也是比较稳定的 Hive2.x最近一直…...
Python调用CANoe常见问题
一、Win32com已经安装成功但是在pycharm中提示错误 No module named win32com.clientPyCharm中出现unresolved reference的解决方法 一直提示需要升级pip版本Pywin32已成功安装,但仍提示没有win32com模块...
一起Talk Android吧(第五百零七回:图片滤镜ImageFilterView)
文章目录背景介绍功能介绍图片滤镜图片圆角图片缩放图片旋转图片平移各位看官们大家好,上一回中咱们说的例子是"如何调整组件在约束布局中的角度",这一回中咱们说的例子是" 图片滤镜ImageFilterView"。闲话休提,言归正转,…...
Java 解释器和即时解释器(JIT)之间的区别
区别是: 翻译 .class (字节码文件) 的粒度和方式不同 解释器是一个逐条解释并执行字节码指令的组件,每次**只翻译一条**指令并执行,然后再翻译下一条指令。 它的翻译粒度是一条指令,而且是按需翻译&#x…...
Acwing 蓝桥杯 第二章 二分与前缀和
今天来补一下之前没写的总结,题是写完了,但是总结没写感觉没什么好总结的啊,就当打卡了789. 数的范围 - AcWing题库思路:一眼二分,典中典先排个序,再用lower_bound和upper_bound维护相同的数的左界和右界就…...
CSDN原力增长规则解读 实测一个月
CSDN原力越来越难了,当然,这对生态发展来说也是好事。介绍下原力增长有哪些渠道吧。发布原创文章:10分/次,每日上限为15分、2篇回答问题:1分/次,每日上限2分,2回答发动态:1分/次&…...
HDMI协议介绍(三)--InfoFrame
目录 Auxiliary Video information (AVI) InfoFrame AVI InfoFrame包结构 Header Body 举个例子 附录 Audio InfoFrame Audio InfoFrame包结构 Header Body Vendor Specific InfoFrame Vendor Specific InfoFrame包结构 Header Body AVI/AUDIO/VSI Infoframe都…...
【RocketMQ】源码详解:Broker端消息储存流程、消息格式
消息存储流程 入口: org.apache.rocketmq.remoting.netty.NettyRemotingAbstract#processRequestCommand org.apache.rocketmq.broker.processor.SendMessageProcessor#asyncProcessRequest 消息到达broker后会经过netty的解码、消息处理器等,最后根据…...
5分钟掌握跨平台直播自动录制神器
5分钟掌握跨平台直播自动录制神器 【免费下载链接】LiveAutoRecord 基于 Electron 的多平台直播自动录制软件 项目地址: https://gitcode.com/GitHub_Trending/li/LiveAutoRecord 你是否经常错过心仪主播的精彩直播?是否因为工作繁忙而无法实时观看喜爱的直播…...
从 0 到 1 搭建客服 AI Agent Harness Engineering:意图识别、知识检索与对话管理完整实战
从 0 到 1 搭建客服 AI Agent Harness Engineering:意图识别、知识检索与对话管理完整实战 副标题: 基于 LangChain FastAPI Chroma Redis 构建高可用、低幻觉的 SaaS 级智能客服原型摘要/引言 问题陈述 你是否遇到过这样的场景: 公司官网…...
团队开发环境自动化:从脚本到容器的一站式解决方案
1. 项目概述:一个团队协作的代码仓库在软件开发领域,一个名为aaurelions/my-team的仓库标题,乍一看可能平平无奇。但作为一名常年混迹于 GitHub、GitLab 等代码托管平台的老兵,我深知这类以个人或组织名称为前缀、以“team”或“m…...
别再截图了!用Python爬虫+LabelImg,半小时搞定YOLOv5自定义数据集(附完整代码)
半小时构建YOLOv5机械臂抓取数据集:爬虫LabelImg自动化实战 在机械臂抓取任务中,仿真环境下的目标检测是关键技术瓶颈。传统的数据集构建方法需要人工截图、逐张标注,耗费数小时甚至数天时间。本文将揭示一套工业级解决方案:通过定…...
渗透测试的具体步骤和常用方法
🔍 渗透测试的具体步骤一个完整的渗透测试流程通常分为以下6 个核心阶段,环环相扣、可追溯、可审计:准备与授权阶段明确测试范围(目标 IP、域名、内外网边界)、规则(测试深度、时间窗口、是否允许提权 / 破…...
除了Copilot,试试VSCode插件GPT Runner:如何用它做项目文档的智能问答助手?
用GPT Runner打造智能项目文档助手:超越Copilot的团队知识管理方案 当你的技术团队规模扩大到20人时,新成员入职第一周总会重复相同的问题:"部署环境需要哪些依赖?"、"API鉴权参数在哪里配置?"——…...
全球领先制造企业(如汽车、航空航天)Windchill许可证管理最佳实践
风云突变!Windchill许可证一用就爆,怎地破?我刚从一个汽车零部件厂回来,那帮人开完会后集体抱怨:“又抢不折腾到Windchill许可了!”项目急着出图,偏偏授权全被占用。可也是,更让我惊…...
别再手动复制了!用Acrobat Pro的JavaScript脚本,一键生成带页码的PDF目录
告别手动整理!用Acrobat ProJavaScript实现PDF目录自动化 每次打开上百页的技术文档却找不到关键章节?学术论文修改后需要重新编排目录页码?电子书制作时被繁琐的目录格式折磨?这些问题背后都指向同一个痛点——PDF文档的目录管理…...
明冠新材2025年铝塑膜营收8495万元增123%,2026Q1经营现金流转正,固态电池铝塑膜已送样客户
4月27日晚间,明冠新材料股份有限公司(股票代码:688560,股票简称:明冠新材)披露2025年年度报告及2026年第一季度报告。根据公告,公司2025年度实现营业收入7.20亿元,2026年第一季度实现…...
Java 25结构化并发落地清单(含Checklist.xlsx+ByteBuddy增强插件+Prometheus监控埋点模板),仅限首批200家ISV申请下载
更多请点击: https://intelliparadigm.com 第一章:Java 25结构化并发的核心演进与工业适配意义 Java 25正式将结构化并发(Structured Concurrency)从孵化器模块 jdk.incubator.concurrent 提升为标准 API(java.util.…...
