黑盒测试方法

news2024/11/29 10:53:25

1 等价类划分

1.1 定义

等价类划分法是一种典型的,并且是最基础的黑盒测试用例设计方法。采用等价类划分法时,完全不用考虑程序内部结构,设计测试用例的唯一依据是软件需求规格说明书。

所谓等价类,是输入条件的一个子集合,该输入集合中的数据对于揭示程序中的错误是等价的。从每一个子集中选取少数具有代表性的数据,从而生成测试用例。

等价类又分为有效等价类和无效等价类。有效等价类代表对程序有效的输入,而无效等价类则是其他任何可能的输入(即不正确的输入值)。有效等价类和无效等价类都是使用等价类划分法设计用例时所必须的,因为被测程序若是正确的,就应该既能接受有效的输入,也能接受无效输入的考验。

1.2 为什么使用该方法?(Why)

理想的测试,是从所有可能的输入中找出某个小的子集,并且是可能发现错误最多的子集。即:使用最少的测试数据,达到最好的测试质量(最高性价比)。

这个子集如何确定?可以借助测试用例的两个特性:测试用例数量达到最少;某个测试用例要能覆盖大部分其他测试用例。第二个特性就暗示我们,应该尽量将程序输入范围进行划分,将其划分为有限数量的等价类,这样就可以合理地假设测试每个等价类的代表性数据等同于测试该类的其他任何数据。这两种特性形成了称为等价类划分的黑盒测试方法。

因此,等价类划分是黑盒测试最基本的方法。

1.3 如何划分等价类?(How)

在给定了输入或外部条件之后,等价类的划分原则如下:

  • 如果输入条件规定了一个取值范围(例如,“数量可以是1到999”),那么就应确定出一个有效等价类(1<数量<999),以及两个无效等价类(数量<1,数量>999)。
  • 如果输入条件规定了取值的个数(例如,“汽车可登记一至六名车主”),那么就应确定出一个有效等价类和两个无效等价类(没有车主,或车主多于六个)。
  • 如果输入条件规定了一个输入值的集合,而且有理由认为程序会对每个值进行不同处理(例如,“交通工具的类型必须是公共汽车、卡车、出租车、火车或摩托车”),那么就应为每个输入值确定一个有效等价类和一个无效等价类(例如,“拖车”)。
  • 如果存在输入条件规定了“必须是”的情况,例如“标识符的第一个字符必须是字母”,那么就应确定一个有效等价类(首字符是字母)和一个无效等价类(首字符不是字母)。
  • 以上是基于字面上的需求划分的等价类,而细化等价类依据的是数据在内存或数据库中存储的类型。(举例,测试加法器,两个文本框,要求输入-99~99之间的整数。整数的存储在计算机底层中会使用不同的算法,正整数和负整数算法不同。所以测试时正整数和负整数应该分开来测(一般对有效等价类数据应用,无效等价类数据一般不需要正、负分别测)。所以将有效等价类细分为:-99–(-1)负整数、0—99 正整数。

Tips:如果有任何理由可以认为程序并未等同地处理等价类中的元素,那么应该将这个等价类再划分为小一些的等价类。

划分等价类的标准:

  • 完备测试、避免冗余;
  • 划分等价类重要的是:集合的划分,划分为互不相交的一组子集,而子集的并是整个集合;
  • 并是整个集合:完备性;
  • 子集互不相交:保证一种形式的无冗余性;
  • 同一类中标识(选择)一个测试用例,同一等价类中,往往处理相同,相同处理映射到"相同的执行路径"。

1.4 设计测试用例

Step1.确定等价类

确定等价类是选取每一个输入条件(通常是规格说明中的一个句子或短语)并将其划分为两个或更多的组。注意,我们确定了两类等价类:有效等价类代表对程序的有效输入,而无效等价类代表的则是其他任何可能的输入条件(即不正确的输入值)。这样,我们就遵循了测试原则,即要注意无效和未预料到的输入情况。

Step2.建立等价类表

划分等价类后,应建立等价类表,列出与每一个输入条件对应的有效等价类和无效等价类,并为每个等价类设置一个唯一的编号。

在这里插入图片描述

Step3.生成测试用例

现在利用等价类表来生成测试用例,其过程如下:

  • 编写新的测试用例,尽可能多地覆盖那些尚未被涵盖的有效等价类,直到所有的有效等价类都被测试用例所覆盖(包含进去)。
  • 编写新的用例,每次覆盖一个(仅一个)尚未被涵盖的无效等价类,直到所有的无效等价类都被测试用例所覆盖(包含进去)。

Tips:用测试用例每次只覆盖1个无效等价类,是因为某些特定的输入错误检查可能会屏蔽或取代其他输入错误检查。举例,如果规格说明规定了“请输入书籍类型(硬皮、软皮或活页)及数量(1~999)”,代表两个错误输入(书籍类型错误,数量错误)的测试用例“(XYZ,0)”,很可能不会执行对数量的检查,因为程序也许会提示“XYZ是未知的书籍类型”,就不检查输入的其余部分了。

1.5 使用场景

有数据输入(编辑框)的地方,可以使用等价类划分法。例如用户登录、注册、新建、查询。

在这里插入图片描述

1.6 根据测试用例的完整性划分

https://zhuanlan.zhihu.com/p/112810758

1.8 等价类划分的优缺点

  • 优点:等价类划分的测试用例设计方法减少了穷举法带来的大量测试用例,保证测试效果和测试效率,一般是有输入性需求的被测对象可以采用的方法;
  • 缺点:输入与输入之间的关系考虑少,可能产生一些逻辑错误。还需要其他用例设计方法来补充测试。

https://zhuanlan.zhihu.com/p/112810758

2 边界值测试

2.1 定义(What?)

边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法,通常作为对等价类划分法的补充,其测试用例来自等价类的边界。

所谓边界值,是指相对于输入等价类和输出等价类而言,稍高于边界或稍低于边界的一些特定情况。

2.2 为什么使用该方法?(Why)

  • 等价类划分忽略掉了某些特定类型的高效测试用例,而边界值分析可以弥补其中的很多不足;
  • 根据大量的测试统计数据,编程的很多错误是发生在输入定义域或输出值域的边界上,而不是发生在输入/输出范围的中间区域。因此针对输入和输出等价类的边界情况设计测试用例,可以查出更多的错误,具有更高的测试回报率;
  • 边界值数据本质上是属于某个等价类的范围,测试时确实是一种冗余(重复),但是为了更好的测试质量(边界值特别容易出bug),边界值必须要单独测,适当的冗余是可以接受的。

2.3 如何选定边界值?(How)

很难提供一份如何进行边界值分析的“详细说明”,因为这种方法需要一定程度的创造性,以及对问题采取一定程度的特殊处理办法。

但是可以提供一些通用指南:

  • 如果输入条件规定了一个输入值范围,那么应针对范围的边界设计测试用例,针对刚刚越界的情况设计无效输入测试用例。举例,如果输入值的有效范围是-1.0至+1.0,那么应针对-1.0、1.0、-1.001和1.001的情况设计测试用例。
  • 如果输入条件规定了输入值的数量,那么应针对最小数量输入值、最大数量输入值,以及比最小数量少一个、比最大数量多一个的情况设计测试用例。举例,如果某个输入文件可容纳1~255条记录,那么应根据0、1、256和255条记录的情况设计测试用例。
  • 对每个输出条件应用指南1。举例,如果某个程序按月计算FICA的扣除额,且最小金额是0,最大金额是1165.25,那么应该设计测试用例来测试扣除0和1165.25的情况。此外,还应观察是否可能设计出导致扣除金额为负数或超过1165.25的测试用例。(Tips:检查结果空间的边界很重要,因为输入范围的边界并不总是能代表输出范围的边界情况(例如三角正弦函数sin)。但是总是产生超过输出范围的结果也是不大可能的,但无论如何,应该考虑这种可能性。)
  • 对每个输出条件应用指南2。如果某个信息检索系统根据输入请求显示关联程度最高的信息摘要,而摘要的数量从未超过4条,则应编写测试用例,使程序显示0条、1条和4条摘要,还应设计测试用例,导致程序错误地显示5条摘要。
  • 如果程序的输入或输出是一个有序序列(例如顺序的文件、线性列表或表格),则应特别注意该序列的第一个和最后一个元素。
  • 如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。
    此外,发挥聪明才智找出其他的边界条件。

Tips:边界值分析方法和等价类划分之间的重要区别是,边界值分析考察正处于等价划分边界或在边界附近的状态。

2.4 设计测试用例

A.确定边界值

在尝试针对划分好的等价类进行边界值取值的时候,一定要有适当的范围,不是根据我们的端点值往左右两侧随意选择测试值,而是也有科学的方法进行选择。

边界值点的定义:

  • 上点:边界上的点
  • 离点:离上点最近的点称为离点。开内闭外。
  • 内点:域范围内的任意一点。

三点分析法:结合等价类划分的具体情况,针对边界值的选择就包括开区间、闭区间以及半开半闭区间。

  • 闭区间:闭区间中的情况,上点为可以取值的点,在上点之间任取一点就是内点。而紧邻上点范围之外的第一对点被称为离点(也称为外点)

  • 半开半闭区间:半开半闭区间中,上点与内点的定义不变。离点是开区间一侧上点内部范围内紧邻的点,而在闭区间一侧是上点外部范围内紧邻的点。
  • 开区间:开区间中,上点与内点的定义仍然不变。而离点就是上点内部范围内紧邻的一对点。

总结为,上点就是区间的端点值,而内点就是上点之间任意一点。对于离点,要分具体情况,如果开区间的离点,就是开区间中上点内侧紧邻的点;如果是闭区间的离点,就是闭区间中上点外侧紧邻的点。

PS.小数类型,等价类+边界值测试时的注意事项:
有效等价类:除了有效的小数外,有效的整数也需要测(小数中默认包含了整数,除非需求中明确的说:小数中不包含整数)
无效等价类:小数类型—非小数(非数):字母、汉字、特殊字符;小数位数—超出小数的有效位数(例如:最多两位,那么>2位就是无效等价类)
边界值:小数的次边界与边界之间的相差单位是与精确度相关的,例如:精确到小数点后2位,那么相差单位就是0.01。例如:最小值是:1.00那么次边界就是 0.99 和1.01;要考虑小数位数的边界问题。例如:小数位数最大值:小数点后2位
那么次边界是:小数点后1位和小数点后3位

https://zhuanlan.zhihu.com/p/121133074

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

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

相关文章

kali整体版本更新方法,为啥更新?

玩过kali都知道&#xff0c;如果不更新版本&#xff0c;那么安装某个软件总是有很多依赖版本问题&#xff0c;解决起来的确麻烦&#xff0c;这篇文章彻底解决这些问题。 1&#xff0c;更新源 国外源与国内源的选择 kali默认配置的是国外源&#xff0c;但国外源的下载速度非常慢…

基于容器和Kubernetes的应用无限扩容

基于应用负载动态管理CPU、内存等资源的使用是云原生架构的最佳实践之一&#xff0c;Kubernetes通过资源请求和限制以及HPA/VPA等机制&#xff0c;为云原生应用资源管理提供了很好的支持。原文: Infinite Scaling with Containers and Kubernetes[1] 如果没有足够资源让容器完成…

matlab第八章_Simulink简介

目录 Simulink简介 基本知识 Simulink组成 模块库简介 Simulink系统仿真 Stateflow建模与应用 Stateflow的定义 状态图编辑器 Stateflow流程图 Simulink简介 基本知识 Simulink是实现动态系统建模&#xff0c;仿真和分析的软件包&#xff0c;被广泛应用于线性系统&…

土地报征简介

报征概念&#xff1a; 土地报征是指国家为了人民整体利益出发&#xff0c;根据我国相关法律和法规的要求和流程&#xff0c; 将集体土地性质转化为国有土地性质&#xff0c;并给予被征地的对象给予合理的补偿和安置工作。报征4个价段&#xff1a; 1、组卷阶段 &#xff08;1&…

Linux系统之top命令的基本使用

Linux系统之top命令的基本使用 一、top命令介绍二、检查本地环境1. 检查操作系统版本2. 检查系统内核版本 三、top命令的使用帮助1. top命令的选项2. top命令的交换命令 四、top显示信息解释1. top的第一行解释2. top的第二、三行信息解释3. top的第四、五行信息解释4. top的进…

Java 常用注解的使用

在Java中&#xff0c;注解&#xff08;Annotation&#xff09;是一种元数据&#xff0c;它提供了一种机制&#xff0c;可以将元数据与代码一起存储&#xff0c;并使其可用于编译器、解释器或其他工具的处理。注解可以在Java源代码中添加元数据&#xff0c;以提供更多的信息&…

【Linux】Linux基本指令(3)

一.时间的相关指令 date显示 单纯的输入 date 会以这种形式输出&#xff1a; 但其实这种形式我们看着是不太习惯的&#xff0c;我们可以指定形式输出&#xff1a; 格式为&#xff1a;date 选项 %H : 小时(00..23) %M : 分钟(00..59) %S : 秒(00..61) %X : 相当于 %H:%M:%S %d …

Qt扫盲-QPieSlice理论总结

QPieSlice理论总结 一、概述二、标签三、属性设置四、信号说明 一、概述 QPieSlice 类表示饼图中的单个QPieSlice。饼图QPieSlice有一个值和一个标签。将QPieSlice添加到饼图时&#xff0c;QPieSeries对象将自动计算QPieSlice的百分比&#xff0c;并与序列中所有QPieSlice的总…

Java SE(十一)之包装类(各种类型之间的转换)

文章目录 Object类 &Number类1.Object2.Number类 包装类&#xff0c;装箱&#xff0c;拆箱1.手动装箱/拆箱2.自动装箱/ 拆箱 应用——常见包装类1.Integer类2.Character类3.实战——各种类型之间的转换&#xff08;1&#xff09;int和Integer相互转换&#xff08;2&#xf…

20230514-SmartChat测试效果图

E:\20230514-SmartChat测试效果图您好&#xff0c;我是SmartChat&#xff0c;新生代智能机器人&#xff0c;通过运用自然语言处理、机器学习和人工智能等高精尖技术&#xff0c;可以与您进行自然、流畅、有趣的对话&#xff0c;帮助您获取所需的信息和服务。无论您想要写商业计…

如何提高跨职能团队的绩效和成果

在50年代&#xff0c;当计算机仍被视为复杂的计算器时&#xff0c;西北互助人寿保险公司就计算机对未来业务的影响进行了研究。有趣的是&#xff0c;该公司的首席执行官为这项研究设立了一个不同寻常的团队——由来自多个部门的员工组成&#xff0c;每个人都看到了计算机在保险…

redis批处理任务,多线程 or pipeline

前言 工作中使用redis的时候遇到一个问题&#xff0c;如果我们要对存储在redis中的一批数据进行操作&#xff0c;为了加快处理的速度&#xff0c;我们一般有两种方式&#xff1a; 建立多个线程&#xff0c;使用多个连接发送请求使用redis提供的pipeline 引发了一个小思考&…

股票量价关系基础知识9----图解各阶段量价关系:价平量平

价平量平是指股价涨跌幅度不大&#xff0c;成交量持平&#xff0c;反映多空双方受不明朗因素困扰&#xff0c;均对后市走势持观望态度&#xff0c;投资者在此阶段不宜盲目入市&#xff0c;但具体到某一阶段又略有差异。 一、上涨初期的价平量平 &#xff08;一&#xff09;形态…

深度学习之图像分类(二):ZFNet

本专栏介绍基于深度学习进行图像识别的经典和前沿模型&#xff0c;将持续更新&#xff0c;包括不仅限于&#xff1a;AlexNet&#xff0c; ZFNet&#xff0c;VGG&#xff0c;GoogLeNet&#xff0c;ResNet&#xff0c;DenseNet&#xff0c;SENet&#xff0c;MobileNet&#xff0c…

SpringBoot 2.0 + Nacos + Sentinel 流控规则集中存储

前言 Sentinel 原生版本的规则管理通过API 将规则推送至客户端并直接更新到内存中&#xff0c;并不能直接用于生产环境。不过官方也提供了一种 Push模式&#xff0c;扩展读数据源ReadableDataSource&#xff0c;规则中心统一推送&#xff0c;客户端通过注册监听器的方式时刻监…

四轴飞控DIY Mark4 - 优化后续二

四轴飞控DIY Mark4 - 优化后续二 1. 源由2. 优化方案3. 实现细节3.1 锡箔屏蔽3.2 热缩管固定3.3 电池地接地3.4 更换飞控 4. 整体效果4.1 配置4.2 Roll&Pitch波形4.3 电机波形 5. 结论6. 附录&#xff1a;FPV Quad GPS cable sheilding 1. 源由 Betaflight BN880 GPS 简单测…

Qt扫盲-QPieSeries理论总结

QPieSeries理论总结 一、概述二、简单的使用1. 创建 QPieSeries 并赋值2. 自定义显示 QPieSlice3. 初始化绘图设备&并关联上图4. 把绘图设备框架放置在 Gui 控件上5. 完整代码 三、镂空饼状图1. 初始化 QPieSeries 和 QPieSlice2. 初始化绘图设备&并关联上图3. 把绘图设…

深度学习之图像分类(四):AlexNet

本专栏介绍基于深度学习进行图像识别的经典和前沿模型&#xff0c;将持续更新&#xff0c;包括不仅限于&#xff1a;AlexNet&#xff0c; ZFNet&#xff0c;VGG&#xff0c;GoogLeNet&#xff0c;ResNet&#xff0c;DenseNet&#xff0c;SENet&#xff0c;MobileNet&#xff0c…

Python地理数据处理 22:基于arcpy批量操作(四)

批量裁剪 1. 批量裁剪进阶2. 统计运算3. 栅格批量缩小n倍4. 建立属性表&#xff08;简化、普适&#xff09;5. 计算土地利用未变化区域&#xff08;LUCC&#xff09; 1. 批量裁剪进阶 代码描述&#xff1a;遍历a文件夹下的所有tif影像&#xff0c;并使用每个a文件夹中的tif影像…

MobileOne(CVPR 2023)原理与代码解析

paper&#xff1a;MobileOne: An Improved One millisecond Mobile Backbone official implementation&#xff1a;https://github.com/apple/ml-mobileone third-party implementation&#xff1a;mmpretrain/mobileone.py at main open-mmlab/mmpretrain GitHub 前言 …