当前位置: 首页 > news >正文

什么是蜕变测试?

文章目录

  • 1.传统测试
  • 2.蜕变测试
    • 2.1.蜕变测试的理解
    • 2.2.蜕变测试的步骤
      • 2.2.1.生成蜕变关系
      • 2.2.2.生成蜕变用例
      • 2.2.3.执行蜕变用例
      • 2.2.4.校验蜕变关系
  • 参考文献

1.传统测试

在没有蜕变测试的时代,传统软件测试的原理是:给定输入,观察被测软件的输出,并与期望输出进行对比,基于对比结果判断软件是否存在缺陷,如下图所示:

在这里插入图片描述
传统测试存在一个基本假设,那就是:软件的期望输出是已知的。然而,许多情况下,软件的期望输出并不是已知的,或者说非常难知道。例如:

  • 测试谷歌搜索引擎,输入关键词car,怎么判断搜索结果是对的?
  • 目前在线商城使用的推荐系统,如果判断推荐的商品是符合要求的?
  • 在基于年龄的疾病预测模型中,输入年龄40,怎么判断模型返回的概率是对的?
  • 生成式对抗网络(GANs)或者扩散模型(Diffusion Model)生成的图片,如何判断生成的好不好?
  • ……

对于这些近乎“不可测”的场景,传统意义的软件测试技术爱莫能助了,于是乎蜕变测试诞生了。

2.蜕变测试

2.1.蜕变测试的理解

在这里插入图片描述

蜕变测试(metamorphic testing)是一种新型软件测试技术。蜕变测试的科学定义是:识别被测软件所具有的蜕变关系(metamorphic relations),通过检查这些蜕变关系 是否成立 来判断软件是否存在缺陷的技术。

理解: 在蜕变测试中,我们并不需要知道测试的正确输出是什么(或者说我们很难知道测试的正确输出是什么),但是我们可以确定输出1与输出2是存在某种关系的。例如我们知道输出1和输出2存在“包含关系”,那么我们不需要去验证输出1与输出2的正确性,而只需要验证输出1和输出2是否存在“包含关系”即可。

举例说明,如下图所示,在测试谷歌搜索引擎时,有两个用例,分别搜索 关键词“car”关键词“autonomous car”。这里隐含着一种蜕变关系:由于后者限定了输入关键词car的属性,因此后者的搜索结果应该是前者的一个子集。

在这里插入图片描述
如果从最终搜索结果发现子集关系不成立,例如:autonomous car的搜索结果数量大于car的搜索结果数量,或者autonomous car的搜索结果包含了一个不在car搜索结果范围内的结果,则说明:子集蜕变关系没有成立,搜索程序可能存在缺陷

2.2.蜕变测试的步骤

那么,怎么进行蜕变测试呢?一般来说,蜕变测试主要包含四大步骤。

2.2.1.生成蜕变关系

如果说软件测试最难的是期望输出的生成,那么 蜕变测试最难的就是蜕变关系的生成 。生成蜕变关系没有一个标准套路,需要结合应用场景和上下文。

上面我们介绍的例子中,两次搜索结果是包含的关系。在搜索查询类应用中,蜕变关系还可以有以下类型:

  • 等价关系:搜索大小为1MB的视频,搜索结果应该与搜索视频大小为1024KB的结果一样。
  • 混排关系:搜索特定关键词,无论采用何种排序方式,搜索结果虽然顺序不同,但是结果的集合应该是相同的。
  • 交集关系:搜索长度<5分钟视频与搜索长度>20分钟的视频,返回结果不应该存在任何交集。
  • 并集关系:搜索任意关键字视频的结果,应该与三次搜索(长度<5分钟的视频/长度在5-20分钟的视频/长度>20分钟的视频)结果的并集相同。

注:蜕变关系的挖掘和生成,是蜕变测试研究的热点,也是蜕变测试应用的难点。

2.2.2.生成蜕变用例

蜕变测试包含多对输入/输出,因此蜕变测试用例包含多个测试用例。

蜕变测试用例由两部分组成: 起始测试用例(source test case)跟随测试用例(follow up test case) 。通过对其实测试用例的输入进行变换(根据蜕变关系进行变换),得到跟随测试用例。

2.2.3.执行蜕变用例

2.2.4.校验蜕变关系

从应用角度来说,蜕变测试主要用在可测性不好的场景,例如机器学习系统、数据查询系统、科学计算系统、仿真与建模系统等。

需要注意的是,蜕变测试只是在一定程度上缓解软件的不可测性或者可测性不好的问题,而不能根本上解决这些问题。毕竟,蜕变关系只是被测软件众多属性中的一种。蜕变关系成立,不代表测试就进行得充分。

就像大师所言,软件测试只能证明软件存在缺陷,不能证明软件不存在缺陷。蜕变测试,更是如此。

参考文献

  • 什么是蜕变测试?

相关文章:

什么是蜕变测试?

文章目录1.传统测试2.蜕变测试2.1.蜕变测试的理解2.2.蜕变测试的步骤2.2.1.生成蜕变关系2.2.2.生成蜕变用例2.2.3.执行蜕变用例2.2.4.校验蜕变关系参考文献1.传统测试 在没有蜕变测试的时代&#xff0c;传统软件测试的原理是&#xff1a;给定输入&#xff0c;观察被测软件的输…...

74. ‘pip‘不是内部或外部命令,也不是可运行的程序-解决办法

74. pip’不是内部或外部命令&#xff0c;也不是可运行的程序-解决办法 文章目录74. pip不是内部或外部命令&#xff0c;也不是可运行的程序-解决办法1. 课题导入2. 手动配置环境变量1. 准备工作2. 配置步骤3. 命令行安装1. 课题导入 有的同学在使用pip安装第三方库时&#xf…...

MIL图像处理那些事:应用程序模块(Mapp)- 初始化和控制MIL应用程序的执行环境

提示:本系列文章通过示例详细介绍MIL图像处理的基础知识及相关操作,让给你快速学会使用MIL进行图像处理 文章目录 前言初始化Mil环境MappAllocMappAllocDefault计时MappTimer异常处理打开和关闭 Mil 异常提示C# try...catch回调函数MappHookFunction查询MappInquire文件操作Ma…...

Pytorch基础语法学习2——argparse模块

一、基本介绍 argparse 模块是 Python 内置的用于命令行参数解析的模块&#xff0c;可以通过少数代码中变量或者参数的改变以实现对整个代码项目的操控。对于大型代码项目(如代码超过1000行)&#xff0c;十分便捷 argparse 模块可以让人轻松编写用户友好的命令行接口&#xf…...

CHAPTER 2 目录及文件

目录及文件1 目录1.1 目录结构1.2 核心目录2 文件2.1 /etc/中的文件2.1.1 修改主机名(/etc/hostname)2.1.2 网卡配置文件2.1.3 开机自启动配置文件(/etc/rc.local)2.1.4 /etc/motd和/etc/issue2.2 /var/中的文件2.3 /proc/中的文件2.3.1 CPU信息(lscpu)3 文件类型3.1 类型说明3…...

2021牛客OI赛前集训营-提高组(第四场) T1最终测试

2021牛客OI赛前集训营-提高组&#xff08;第四场&#xff09; 题目大意 有nnn个选手参加比赛&#xff0c;比赛有两道题。 对于第一题&#xff0c;第iii个选手有50%50\%50%的可能拿到ai,1a_{i,1}ai,1​分&#xff0c;有50%50\%50%的可能拿到000分。 对于第二题&#xff0c;第…...

【华为OD机试2023】租车骑绿岛 C++ Java Python

【华为OD机试2023】租车骑绿岛 C++ Java Python 前言 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议! 本文解法非最优解(即非性能最优),不能保证通过率。 Tips1:机试为ACM 模式 你的代码需要处理输入输出,input/cin接收输入…...

05-路由中的Hook

hook中使用 this.props中的路由 类组件中我们通过 this.props 获取到的关于路由的相关方法和数据&#xff0c;在函数组件中还是可以继续通过参数 props 来获取使用&#xff1a; export default function Login(prosp) {return (<button onClick{() > {props.history.pu…...

Ubuntu20.04 源码编译安装SRS-6流媒体服务器,开启GB28181支持

1. 下载SRS源码 直接从仓库clone git clone -b develop https://gitee.com/ossrs/srs.git 2. 编译源码 此处通过 --gb28181on 开启GB28181支持&#xff0c;默认是不开启的 cd srs/trunk && ./configure --gb28181on && make -j4 3. 编译过程中遇到的问题 …...

Web前端学习:六 -- 练习小总结

1、背景颜色透明度写法&#xff1a; background&#xff1a;rgba(R&#xff0c;G&#xff0c;B&#xff0c;Alpha透明度) 透明度范围&#xff1a;0–1&#xff0c;1完全不透明&#xff0c;0完全透明 2、伪类 hovar&#xff1a; 当鼠标接触该元素是&#xff0c;显示另一种样…...

微服务之 CAP原则

文章目录微服务CAP原则AC 可用性 一致性CP 一致性 分区容错性AP 可用性 分区容错性提示&#xff1a;以下是本篇文章正文内容&#xff0c;SpringCloud系列学习将会持续更新 微服务CAP原则 经过前面的学习&#xff0c;我们对 SpringCloud Netflix 以及 SpringCloud 官方整个生…...

乐鑫特权隔离机制 #4 | 用户应用程序的安全启动

乐鑫特权隔离机制 系列文章 #4 目录 安全启动 (Secure boot) 受保护应用程序的安全启动 (Secure boot for protected app ) 用户应用程序的安全启动 (Secure boot for user app) 基于证书的验证方案 (Certificate-based verification scheme) 必要条件验证过程​​​​​…...

剑指 Offer 46. 把数字翻译成字符串

摘要 剑指 Offer 46. 把数字翻译成字符串 一、递归算法解析 给定一个数字&#xff0c;我们按照如下规则把它翻译为字符串&#xff1a;0 翻译成 “a” &#xff0c;1 翻译成 “b”&#xff0c;……&#xff0c;11 翻译成 “l”&#xff0c;……&#xff0c;25 翻译成 “z”。…...

tar命令——归档/压缩和解压缩文件

tar命令的功能是将一个或多个文件归档成一个文件&#xff0c;同时可结合gzip、bzip2和xz等压缩命令实现文件的压缩和解压缩。 tar 命令的语法格式如下&#xff1a; tar [选项] 文件或目录 常用选项如下&#xff1a; 选项作用/含义-c建立归档文件-x从归档文件中解出文件-z通…...

Softing smartLink网关——推进过程工业数字化转型

虽然在过程工业中各工厂所投入的运营时间千差万别&#xff0c;但仍需按照新标准来进行有效控制和管理&#xff0c;而这就需要使用一种能够聚合其异构数据的数字通信架构。对此&#xff0c;Softing提供了两种网关解决方案&#xff0c;可用于将过程工业通信架构集成到现有以太网系…...

Spark的常用算子

Spark的常用算子 目录内容Spark的常用算子一、转换算子&#xff08;Transformation&#xff09;二、行动算子&#xff08;Action&#xff09;三、键值对算子&#xff08;PairRDDFunctions&#xff09;四、文件系统算子&#xff08;File System&#xff09;Spark 内置算子是指 S…...

Unity Avatar Cover System - 如何实现一个Avatar角色的智能掩体系统

文章目录简介变量说明实现动画准备动画状态机State 状态NoneStand To CoverIs CoveringCover To Stand高度适配高度检测脚部IK简介 本文介绍如何在Unity中实现一个Avatar角色的智能掩体系统&#xff0c;效果如图所示&#xff1a; 初版1.0.0代码已上传至SKFramework框架Package…...

steam/csgo搬砖项目到底真的假的?

搬砖是从国外steam市场置办游戏装备回来&#xff0c;在国内网易buff售卖&#xff0c;低买高卖&#xff0c;产生利润的一个项目。 但我真正上手后&#xff0c;才知道steam是面向全球的游戏平台&#xff0c;用户真的大的夸张&#xff01;&#xff01;市场非常巨大&#xff0c;一…...

【Python笔记20230307】

基础 编码、解码 str.encode(utf-8) # 编码 str.decode(utf-8) # 解码关键字 import keyword keyword.kwlist格式化输出 % 占位符:%s 字符串%d 整数%f 浮点数Hello, %s % world Hi, %s, you have $%d. % (Michael, 1000000) 占位符的修饰符 -左对齐 .小数点后位数 0左边补零…...

SBOM应该是软件供应链中的安全主食

当谈到软件材料清单(SBOM)时&#xff0c;通常的类比是食品包装上的成分列表&#xff0c;它让消费者知道他们将要吃的薯片中有什么。 美国机构有90天时间创建所有软件的清单 同样&#xff0c;SBOM是一个软件中组件的清单&#xff0c;在应用程序是来自多个来源的代码的集合的时…...

高频面试题:口径变了,历史数据断层如何处理?

这道题是数据岗面试的核心高频题,尤其贴合当下口径精细化迭代的主流趋势——新口径要么是旧口径新增过滤规则、剔除无效数据,要么是拓展数据源、补充细分维度,绝非单纯的逻辑推翻。作答核心绝非粗暴刷数,而是平滑过渡、权责清晰、数据可追溯、可信度不打折,全程围绕“精细…...

Fish-Speech-1.5在虚拟偶像中的应用:个性化语音合成方案

Fish-Speech-1.5在虚拟偶像中的应用&#xff1a;个性化语音合成方案 1. 引言 虚拟偶像正在改变数字娱乐的格局&#xff0c;但要让这些数字角色真正"活起来"&#xff0c;声音的表现力至关重要。传统的语音合成技术往往显得生硬机械&#xff0c;缺乏真实感和情感共鸣…...

【即插即用】CFPNet特征金字塔在边缘检测中的实战应用(附源码)

1. CFPNet特征金字塔为何适合边缘检测 第一次看到CFPNet这个结构时&#xff0c;我正被传统边缘检测算法困扰——那些基于Canny或者Sobel的方法在复杂场景下总会出现断边或噪声。CFPNet最吸引我的地方在于它独特的层内特征调节机制&#xff0c;这正好解决了边缘检测中的核心痛点…...

SEO_掌握这几个SEO核心技巧让流量翻倍

掌握这几个SEO核心技巧让流量翻倍在互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为了每一个网站主人不可忽视的关键环节。SEO不仅仅是一套技术&#xff0c;更是一门艺术&#xff0c;它能够大大提高网站在搜索引擎中的排名&#xff0c;从而带来更多的流…...

居然还在使用付费的https证书?

网站的https证书过期了&#xff0c;一直使用阿里云的免费ssl证书&#xff0c;但是现在阿里云调整了策略[1]&#xff0c;证书有效期从1年缩短到3个月了&#xff0c;所以我决定放弃阿里云转而使用 Let’s Encrypt[2] 申请免费证书。简介Let’s Encrypt 是一家免费、开放、自动化的…...

DCT变换在图像处理中的三大核心应用场景解析

1. DCT变换&#xff1a;图像处理的"魔法滤镜" 第一次听说DCT变换时&#xff0c;我把它想象成一个神奇的筛子——能把图像中的不同成分自动分类整理。就像厨房里的滤网可以把面粉和结块分开&#xff0c;DCT&#xff08;离散余弦变换&#xff09;能把图像分解成不同频率…...

告别线程池!Java 26虚拟线程终极优化,高并发接口性能直接翻倍

文章目录前言线程池这老古董&#xff0c;早该进博物馆了结构化并发&#xff1a;给临时工大军配个智能管家G1 GC 偷偷加强&#xff0c;虚拟线程跑得更快AOT 缓存&#xff1a;云原生时代的冷启动杀手HTTP/3 来了&#xff1a;网络层也跟上高并发节奏实战&#xff1a;从零搭建一个高…...

网工毕业设计最全选题大全

文章目录&#x1f6a9; 1 前言1.1 选题注意事项1.1.1 难度怎么把控&#xff1f;1.1.2 题目名称怎么取&#xff1f;1.2 选题推荐1.2.1 起因1.2.2 核心- 如何避坑(重中之重)1.2.3 怎么办呢&#xff1f;&#x1f6a9;2 选题概览&#x1f6a9; 3 项目概览题目1 : 深度学习社交距离检…...

GVM实战:5分钟搞定Go多版本切换与国内镜像加速(含常见报错修复)

GVM实战&#xff1a;5分钟搞定Go多版本切换与国内镜像加速&#xff08;含常见报错修复&#xff09; 在国内开发环境中&#xff0c;Go语言开发者最头疼的莫过于版本切换时的网络卡顿问题。想象一下&#xff0c;当你正急着测试一个新特性&#xff0c;却因为gvm install命令卡在60…...

EBIT、EBITDA与净利润:从财报数字到商业决策的实战指南

1. 为什么企业管理者必须搞懂这三个财务指标&#xff1f; 刚接手一家制造企业时&#xff0c;我盯着财务报表上密密麻麻的数字直发懵。最让我困惑的是&#xff1a;为什么明明EBITDA显示公司很赚钱&#xff0c;银行账户里的现金却总是不够用&#xff1f;后来才明白&#xff0c;原…...