软件测试笔记(三):黑盒测试

1 黑盒测试概述

黑盒测试也叫功能测试,通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作是一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,对程序接口进行测试,只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当接收输入数据而产生正确的输出信息。

黑盒测试以用户角度,从输入数据与输出数据的关系触发,试图发现一下几类错误:

  • 功能不正确或遗漏
  • 界面错误
  • 数据库访问错误
  • 性能错误
  • 初始化和终止错误

用例设计方法包括:

  • 等价类划分
  • 边界值分析
  • 决策表
  • 因果图
  • 场景法

等等。

2 等价类划分

2.1 等价类

等价类是指某个输入域的子集,在该子集合中,测试某等价类的代表值就等于这一类其他值的测试,对于揭露程序的错误是等效的。因此,全部输入数据可以合理划分为若干个等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量的代表性的测试数据取得比较好的效果。

等价类划分可以分为:

  • 有效等价类:对于程序的规格说明来说是合理的,有意义的输入数据构成的集合,利用有效等价类可以检验程序是否实现了规格说明中所规定的功能和意义
  • 无效等价类:与有效等价类相反,是指对程序的规格说明无意义,不合理的数据构成的集合

2.2 划分原则

  • 如果规定了输入值的范围,可以定义一个有效等价类和两个无效等价类
  • 如果规定了输入的规则,可以划分出一个有效的等价类(符合规则)和若干无效的等价类(从不同角度违反原则)
  • 如果规定了输入数据的已组织,且程序对不同输入值做不同处理,则每个允许的输入值是一个有效等价类,并有一个无效等价类
  • 如果规定了输入数据是整型,可以划分出正整数、零、负整数三个有效等价类
  • 处理表格时,有效类为空表、含一项的表、含多项的表等

3 边界值分析

3.1 边界值分析设计原则

边界值分析作为等价类划分的补充,通过选择等价类的边界值作为测试用例。

基于边界值分析有如下原则:

  • 如果输入条件规定了值的范围,应选择刚到达这个范围的边界的值,以及刚刚超过这个范围边界的值作为测试输入数据
  • 如果输入条件中规定了值的个数,则用最大个数、最小个数、比最小个数少一,比最大个数多一作为测试数据
  • 如果规格说明书给出的输入域或输出域的有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例
  • 如果程序中使用了内部数据结构,则应选择内部数据结构的边界上的值作为测试用例

3.2 边界分析的两种方法

一般包括:

  • 一般边界值分析:一般取MinMin+NormalMax-Max
  • 健壮性边界值分析:除了一般边界值分析外,还包括Min-Max+

4 决策表

决策表又叫判定表,是分析多种逻辑条件下执行不同操作的技术。决策表由四个部分组成,包括:

  • 条件桩:列出问题的所有条件,条件的顺序无关紧要
  • 动作桩:列出问题规定可能采取的所有动作,排列顺序没有约束
  • 条件项:列出了针对条件桩的取值在所有可能情况下的真假值
  • 动作项:列出了在条件项的各种取值的有机关联情况下应采取的动作

另一方面,决策表中的规则,指的是任何条件组合的特定取值以及相应要执行的动作,在决策表中贯穿条件项和动作项的列就是规则,决策表中列出多少条件取值,就对应多少规则,条件项就有多少列。

比如下面是一个使用决策表制作的打印机测试用例:

5 因果图

5.1 定义

因果图利用图解法分析输入的各种组合情况,适合于描述多种输入条件的组合,相应产生多个动作的方法,因果图的好处如下:

  • 考虑多个输入之间的相互组合、相互制约的关系
  • 指导测试用例的选择,指出需求规格说明描述中存在的问题
  • 能够帮助测试人员按照一定的步骤,高效率地开发测试用例
  • 因果图法是一种严格地将自然语言规格说明转化为形式语言规格说明的方法,可以指出规格说明存在的不完整性和二义性

5.2 基本图形符号

原因结果图:

 ciei都可以取值0或1,0表示状态不出现,1表示状态出现。

约束图:

6 场景法

同一事件不同的触发顺序和处理结果形成事件流,每个事件流触发时的情景便形成了场景。

场景法一般包含基本流和备选流(也叫备用流),从一个流程开始,通过描述经过的路径来确定过程,经过遍历所有的基本流和备用流来形成整个场景。场景法的基本设计步骤如下:

  • 根据说明,描述程序的基本流以及各项备选流
  • 根据基本流和各项备选流生成不同的场景
  • 对每一个场景生成相应的测试用例
  • 对生成的所有测试用例重新复审,去掉多余的测试用例,测试用例确定后,对每一个测试用例确定测试数据值

图示如下:

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

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

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

相关文章

Web前端3D JS框架和库 整理

在WebGL库和SVG/Canvas元素的支持下,JavaScript变得惊人的强大。几乎可以为网络构建任何东西,包括基于浏览器的游戏和本地应用,许多最新的突破性功能都在3D上运行。 为此,「数维图小编」整理了19个交互式3D Javascript库和框架&am…

开心的金明

好久没发文章了,随着这一题开始2024年吧! 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品&…

每日一练:LeeCode-235、二叉搜索树的最近公共祖先【二叉搜索树+DFS+从上往下】

本文是力扣每日一练:LeeCode-235、二叉搜索树的最近公共祖先【二叉搜索树DFS从上往下】 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐LeeCode。 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百…

idea2023新UI风格不见了怎么办?

用了一段时间idea2023,有一天不知道点了什么,整个UI又变成了2022的风格 如果想换成2023的UI风格怎么办? 点击file->setting->new UI->勾选Enable new UI,restart就可以回到最新版本的UI了 新风格

wu-framework-parent 项目明细

wu-framework-parent 介绍 springboot 版本3.2.1 wu-framework-parent 是一款由Java语言开发的框架,目标不写代码但是却能完成功能。 框架涵盖无赖ORM( wu-database-lazy-starter)、仿生组件 、easy框架系列【Easy-Excel、easy-listener、easy-upsert】 授权框架(…

【C++进阶】STL容器--list底层剖析(迭代器封装)

目录 前言 list的结构与框架 list迭代器 list的插入和删除 insert erase list析构函数和拷贝构造 析构函数 拷贝构造 赋值重载 迭代器拷贝构造、析构函数实现问题 const迭代器 思考 总结 前言 前边我们了解了list的一些使用及其注意事项,今天我们进一步深入…

对于大前端开发来说,转鸿蒙开发究竟是福还是祸?

从铺天盖地的市场消息来看,华为即将面世的鸿蒙NEXT系统已经势不可挡了 想必大家都已经迫不及待地想要进行尝试。 估计大家都有着同样的疑问: 会不会是下一个风口?转鸿蒙应用开发难吗? 会不会是下一个风口? 自从鸿蒙…

C++:类与对象(3)

创作不易,感谢三连 一、深入解析构造函数 如上图,在一般情况下,我们认为A类中的_a1和_a2只不过是声明,并没有开空间,而真正的空间开辟是在【定义】的时候,也就是我们根据这个类实例化出整个对象的时候。 …

高级RAG:从理论到 LlamaIndex 实现,解决原始 RAG 管道的局限性

原文地址:Advanced Retrieval-Augmented Generation: From Theory to LlamaIndex Implementation 如何通过在 Python 中实现有针对性的高级 RAG 技术来解决原始 RAG 管道的局限性 2024 年 2 月 19 日 如何通过在 Python 中实现有针对性的高级 RAG 技术来解决 naiv…

【LeetCode刷题】146. LRU 缓存

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -…

【数据结构】B树,B+树,B*树

文章目录 一、B树1.B树的定义2.B树的插入3.B树的中序遍历 二、B树和B*树1.B树的定义2.B树的插入3.B*树的定义4.B树系列总结 三、B树与B树的应用 一、B树 1.B树的定义 1. 在内存中搜索效率高的数据结构有AVL树,红黑树,哈希表等,但这是在内存…

SpreadJS+vue3练手使用

SpreadJS的练手使用 // 首先在 package.json 这个文件里{"name": "app-admin","private": true,"version": "0.0.0","type": "module","scripts": {"dev": "vite",&quo…

前端——WEB-API那些有意思的api

1.URL和URLSearchParams 一个用于解析URL&#xff0c;一个用于查询URL的Parmas <script >let url http://zyfp-fof.ss.gofund.cn/list?type0&dst1let urlApinew URL(url)let dstnew URLSearchParams(urlApi.search).get(dst)console.log(dst);</script> 我…

猫头虎分享已解决Bug || 节点失联(Node Disconnection):NodeLost, ClusterNodeFailure

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

web.py架构使用database接口连接mysql

安装mysql sudo apt-get update sudo apt-get install mysql-server sudo apt-get install mysql-client测试mysql systemctl status mysql.service配置mysql //修改密码 sudo mysql -u root -p set password for 用户名localhost password(新密码); //修改root的host属性…

常见的socket函数封装和多进程和多线程实现服务器并发

常见的socket函数封装和多进程和多线程实现服务器并发 1.常见的socket函数封装2.多进程和多线程实现服务器的并发2.1多进程服务器2.2多线程服务器2.3运行效果 1.常见的socket函数封装 accept函数或者read函数是阻塞函数&#xff0c;会被信号打断&#xff0c;我们不能让它停止&a…

设计模式(五)-观察者模式

前言 实际业务开发过程中&#xff0c;业务逻辑可能非常复杂&#xff0c;核心业务 N 个子业务。如果都放到一块儿去做&#xff0c;代码可能会很长&#xff0c;耦合度不断攀升&#xff0c;维护起来也麻烦&#xff0c;甚至头疼。还有一些业务场景不需要在一次请求中同步完成&…

使用R语言对线性回归模型中的异方差进行诊断和处理

一、数据准备 序号XY序号XY序号XY110.61143.521817.5211.61244.422813.4310.51345.12384.5411.21455.724930.45221563.4251112.4621.31669.7261213.4722.51768.6271226.2832.2187428127.4932.41975.5   1031.220710.5     二、对y和x,绘制散点图&#xff0c;并进行回归…

​LeetCode解法汇总235. 二叉搜索树的最近公共祖先

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给定一个二叉搜索树, 找到该树中两个指定…

4.8 Verilog过程连续赋值

关键词&#xff1a;解除分配&#xff0c;强制&#xff0c;释放 过程连续赋值是过程赋值的一种。赋值语句能够替换其他所有wire 或 reg 的赋值&#xff0c;改写wire 或 reg 类型变量的当前值。 与过程赋值不同的是&#xff0c;过程连续赋值表达式能被连续的驱动到wire 或 reg …