【软件测试之因果图法】

news2024/11/26 1:54:51

【软件测试之判断表法】(蓝桥课学习笔记)

1、因果图法的概念

因果图法是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种情况的组合。因果图(Cause-Effect-Graphing)提供了把规则转化为判定表的系统化方法,其中“原因”是表示输入条件,“结果”是输入条件经过一系列计算后得到的输出。

因果图实际上是一种数字逻辑电路(一个组合的逻辑网络),但没有使用标准的电子学符号,而是使用了稍微简单点的符号。当然,读者不必要掌握电子学方面的知识,只需要了解逻辑运算符“与”、“或”、“非”即可。

在因果图中使用 4 种符号分别表示 4 种因果关系,如下图所示。用直线连接左右结点,其中左结点 c 表示输入状态(或称原因),右结点 e 表示输出状态(或称结果)。c 和 e 取值都是 0 或者 1,0 表示该条件不出现,1 表示该条件出现。

因果图中的四种因果关系

  • 恒等:若 c1是 1,则 e1也是 1;否则 e1为 0;
  • 非:若 c1是 1,则 e1是 0;否则 e1 是 1;
  • 或:若 c1 或 c2 或 c3 中有一个是 1,则 e1是 1,;否则 e1为 0;
  • 与:若 c1 和 c2 以及 c3 都是 1,则 e1是 1;否则 e1为 0。

在大多数程序中,有一些输入条件是不可能同时存在的,比如在等价类划分法中的“用户注册”的案例中,用户名的首字符不可能既为字母又为数字,二者为互斥。也就是说输入条件相互之间存在着某些制约关系,称为“约束”。在因果图中,用特定的符号标明这些约束,如下图所示。

因果图中的五种约束关系

  • E 约束(异、互斥):a、b、c 中最多有一个可能为 1,也就是 a、b、b 不能同时为 1,输入条件之间为互斥关系。但可以同时为 0。

  • I 约束(或、包含):a、b、c 中最少有一个必须是 1,也就是 a、b、c 不能同时为 0,输入条件之间为包含关系。但可以同时为 1。比如程序中的多选按钮。

  • O 约束(唯一):a、b、c 中必须有一个且仅有一个为 1。比如程序中的单选按钮。

  • R 约束(要求):a 是 1 时,b 必须是 1,a 为 0 时,b 的值不确定。即不可能 a 是 1 时,b 是 0。

    以上 4 种是输入条件的约束,输出条件的约束只有一种,就是 M 约束:

  • M 约束(强制、屏蔽):若 a 是 1,则 b 强制为 0;若 a 是 0,那么 b 的值不确定。

比如假设在一个注册界面,输入错误的用户名和错误的密码时,都会弹出对应的错误提示。但如果弹出了“用户名错误”的提示,则“密码错误”的提示信息则被屏蔽不会弹出;但如果输入正确的用户名时,那么就不会弹出“用户名错误”的提示信息,但是是否弹出“密码错误”的提示信息则依据密码是否正确而定。

因果图法是从程序规格说明描述中,找出原因(输入条件)和结果(输出或程序状态的改变)。根据原因和结果之间的关系画出关系图,然后转换为特定的判定表的黑盒测试方法。

使用因果图设计测试用例的步骤如下:

  • 第 1 步:分析待测系统的规格说明,找出原因与结果。
  • 第 2 步:明确所有原因和结果之间的制约关系以及组合关系,画出因果图。
  • 第 3 步:在因果图上标记约束条件。
  • 第 4 步:跟踪因果图中的状态条件,把因果图转换为判定表。
  • 第 5 步:将判定表中的每一列作为依据,生成测试用例。

2、案例:用户名输入框

某软件的规格说明中对登录名输入包含这样的要求:输入的第一个字符必须是”$”或英文字母,第二个字符必须是一个数字,在此情况下进入第二个窗口;但如果第一个字符不正确,则给出信息 M;如果第二个字符不是数字,则给出信息 N。

【解析】:

分析程序的规格说明,列出原因和结果。如下表所示。

登录的原因和结果分析

将原因和结果之间因果关系用逻辑符号连接起来,得到因果图,如下图所示。

图中 c12为中间节点,是导出结果的进一步原因。

登录的因果图

在因果图上标记约束条件。

因为 c1和 c2不可能同时为 1,即第一个字符不可能既是 c1又是 c2,所以在因果图上对其施加 E 约束,得到具有约束的因果图。如下图所示。

添加约束关系

将因果图转换成判定表,如下表所示:

软件登录的判定表

设计测试用例。

表中的前 2 种情况,因为 c1和 c2不可能同时为 1,所以排除。根据判定表,设计出 6 个测试用例,如下表所示。

用例编号输入数据预期输出
TC-001$5进入第 2 个窗口
TC-002$a给出信息 N
TC-003a9进入第 2 个窗口
TC-004cb给出信息 N
TC-00542给出信息 M
TC-006@%给出信息 M 和信息 N(是否会弹出信息 N,具体要看程序是否有 M 约束屏蔽发生)

3、因果图法小结

在较为复杂的问题中,合理使用因果图法非常有效。因果图法可以帮助我们按照一定的步骤,高效的选择测试用例,设计多个输入条件组合用例,通过因果图分析还能为我们指出,软件规格说明描述中存在的问题。

因果图主要考虑控件之间条件的组合关系和制约关系。每个控件的取值不宜过多,最好为 2 个或 3 个,比如按钮点击或者不点击,单选按钮选择或者不选择,复选框是选择还是不选择。如果控件较多,或者每个控件的取值较多,组合量将会很大,不宜使用因果图法。

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

事实上,画因果图只是一种辅助工具,通过分析最终得到判定表,再通过判定表编写测试用例,比较麻烦,影响测试效率。熟练之后,可以直接填写判定表,然后编写测试用例,因果图可以省略。或者如果开发项目在设计阶段就采用了判定表,也不必再画因果图,可以直接利用判定表来设计测试用例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1587869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Rust语言

文章目录 Rust语言一,Rust语言是什么二,Rust语言能做什么?Rust语言的设计使其适用于许多不同的领域,包括但不限于以下几个方面:1. 传统命令行程序:2. Web 应用:3. 网络服务器:4. 嵌入…

MySQL选择普通索引还是唯一索引(2/16)

普通索引和唯一索引 基本概述 MySQL中可以创建普通索引与唯一索引,这两种索引的区别是: 普通索引(Non-Unique Index),也称为非唯一索引,它允许索引中的条目具有重复的键值。普通索引的主要目的是加快查询…

2024年第十四届MathorCup数学应用挑战赛A题解题思路

2024年第十四届MathorCup数学应用挑战赛A题解题思路点击链接加入【2024年第十四届MathorCup数学建模】: http://qm.qq.com/cgi-bin/qm/qr?_wv1027&kNol416eFZyg4AFPHCZsYfGkLnEnZ8H36&authKeyo9lIFgRfnk2U%2FfYYg1AlFJd5I456CSA2M6nlvJX2qcUockIKuMHj%2Bh…

【Java】SpringBoot快速整合mongoDB

目录 1.什么是mongoDB? 2.Docker安装mongoDB 3.SpringBoot整合mongoDB步骤 4.验证 1.什么是mongoDB? MongoDB是一种非关系型数据库,被广泛用于大型数据存储和分布式系统的构建。MongoDB支持的数据模型比传统的关系型数据库更加灵活&#x…

HWOD:最长回文子串

一、知识点 1、两层遍历&#xff0c;第一层i从0到n&#xff0c;第二层j从n到i 2、每一次的遍历&#xff0c;i确定子串的左边界l&#xff0c;j确定子串的右边界r 3、判断l和r界定的子串是否回文&#xff1a;while(l<r){如果下标为l和r的元素不相等&#xff0c;就break;l;r…

JAVAEE之Spring AOP

1. AOP概述 AOP是Spring框架的第⼆⼤核⼼(第⼀⼤核⼼是IoC) 1.1 什么是AOP&#xff1f; • Aspect Oriented Programming&#xff08;⾯向切⾯编程&#xff09; 什么是⾯向切⾯编程呢? 切⾯就是指某⼀类特定问题, 所以AOP也可以理解为⾯向特定⽅法编程. 什么是⾯向特定⽅法编…

python之堆的实现

堆本质是一个完全二叉树&#xff0c;分为大根堆和小根堆&#xff0c;大根堆每个结点的值都大于它的孩子的值&#xff0c;小根堆相反&#xff0c;每个结点的值都小于它的孩子的值 heapq是python的标准库&#xff0c;用于维护堆&#xff0c;非常方便 heapq库常用的几个函数 he…

(3)(3.1) 英特尔Realsense深度摄像头(三)

文章目录 前言 10 系统概述 11 手动设置配套计算机 前言 本文介绍如何将英特尔 Realsense 深度摄像头(Intel Realsense Depth Camera)与 ArduPilot 配合使用&#xff0c;以实现避障(obstacle avoidance)。该方法使用在配套计算机上运行的 Python 脚本&#xff08;非 ROS&am…

每天学点儿Python(5) -- 序列索引和切片

Python中&#xff0c;序列是指一块可存放多个值的连续内存空间&#xff0c;这些值按一定顺序排列&#xff0c;可通过每个值所在位置的编号&#xff08;称为索引&#xff09;访问它们。它类似于C/C中的数组或字符串&#xff0c;但又比数组或字符串强大很多 序列类型包括字符串、…

(洛谷P34060):海底高铁—->差分数组,贪心思想

海底高铁 题目描述 该铁路经过 N N N 个城市&#xff0c;每个城市都有一个站。不过&#xff0c;由于各个城市之间不能协调好&#xff0c;于是乘车每经过两个相邻的城市之间&#xff08;方向不限&#xff09;&#xff0c;必须单独购买这一小段的车票。第 i i i 段铁路连接了…

分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量…

掌握 C# 爬虫技术:使用 HttpClient 获取今日头条内容

摘要/导言&#xff1a; 在本文中&#xff0c;我们将探讨如何使用 C# 中的 HttpClient 类和爬虫代理IP技术来获取今日头条的内容。我们还将实现多线程技术&#xff0c;以提高数据采集的效率。 背景/引言&#xff1a; 随着信息时代的到来&#xff0c;数据已经成为了一种非常宝…

Leetcode110_平衡二叉树

1.leetcode原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2.题目描述 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;…

机器学习machine learning

1. 概念 机器学习是从数据中提取知识。涉及统计学和人工智能&#xff0c;也被称为预测分析或统计学习。 应用领域非常广泛&#xff0c;用户习惯预测&#xff0c;个性推荐&#xff0c;分析DNA序列等等。 机器学习优势是将决策过程自动化&#xff0c;需要涉及较好的算法。如果…

如何打造高度柔性动态的智能仓储物流解决方案?

近年来&#xff0c;仓储物流行业步入自动化系统集成时代&#xff0c;以货架为存储主体的方式逐步发展成为了自动化储方式&#xff0c;核心设备也由货架转变为机器人货架&#xff0c;形成系统集成物流存储体系。河北沃克根据客户需求精准发力&#xff0c;推出了新一代海格里斯智…

九招!教做出立体感十足的地图组件,不服?还有谁

一、立体感地图在可视化大屏中的作用 在可视化大屏中&#xff0c;立体感十足的地图组件可以起到以下作用&#xff1a; 引导用户注意力&#xff1a;立体感的地图组件可以吸引用户的注意力&#xff0c;使其更加关注地图所代表的信息和数据。通过增加立体感&#xff0c;地图组件可…

Spring Security——08,自定义失败处理

自定义失败处理 一、自定义实现类1.1 实现AccessDeniedHandler1.2 实现AuthenticationEntryPoint 二、配置SpringSecurity三、测试3.1 认证失败3.2 权限不足 一键三连有没有捏~~ 我们还希望在认证失败或者是授权失败的情况下也能和我们的接口一样返回相同结构的json&#xff0c…

SpringBoot3整合RabbitMQ之二_简单队列模型案例

SpringBoot3整合RabbitMQ之二_简单队列模型案例 文章目录 SpringBoot3整合RabbitMQ之二_简单队列模型案例1. 简单队列模型1. 消息发布者1. 创建简单队列的配置类2. 发布消费Controller 2. 消息消费者3. 输出结果 1. 简单队列模型 简单队列模型就是点对点发布消息&#xff0c;有…

基于spring boot的社区医院管理服务系统

基于spring boot的社区医院管理服务系统设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开…

【MySQL】数据库开篇

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习技术栈 个性签名&#xff1a;保留赤子之心也许是种幸运吧 本文封面由 凯楠&#x1f4f8;友情提供 目录 本系列传送门 1. 什么是数据库&#xff1f; 2. 为什么使用数据库 3. 数据库的分类 4. NoSQL 与关系…