【准则化的思想】变异测试的真正价值

下面我们来讨论变异充分准则。这个准则,同样是一种基于缺陷的充分准则,但是跟我们前面讨论过的准则相比,思路又完全不同。我们来具体看一看。

首先,它为什么叫“变异”充分准则呢?我们通常说的变异,指的是DNA分子结构的变化。遗传学告诉我们,变异会导致生物个体性状的差异,然后就有了物竞天择,适者生存。所以,变异是生物进化的根本原因。

在信息技术领域,有人借鉴生物进化的过程,设计了遗传算法。00年代的遗传算法,10年代的深度学习,20年代的大模型,号称paper灌水三代神器。遗传算法里也有变异的概念,指的是对个体信息进行一个微小的改动,从而实现局部寻优。

变异充分准则里所谓的“变异”,跟遗传算法里的变异概念非常相像,指的是对被测程序进行一个微小的改动,比如把决策表达式里的“≥”改成“>”、“<”或者“≤”,改动后的程序被称为变异体。

这种变异的物理意义,实际上是模拟开发者容易犯的错误,已有的研究和实践成果已经总结出了很多典型的变异方式,我们称其为变异算子。下表是变异测试开源工具muJava提供的19种典型变异算子:

比如,“数值运算符替换”这个变异算子,模拟的就是“+”被误写为“-”这样的错误;“关系运算符替换”这个变异算子,模拟的就是“≥”被误写为“>”这样的错误​。

对被测程序应用这些变异算子之后,可以生成一系列变异体,也就是一系列植入了各种模拟缺陷的程序。接下来,使用已有的测试集来测试原始程序和所有变异体。对于任一变异体来说,如果它的测试结果跟原始程序的测试结果不一样,那就说明,已有测试集能够分辨出这个变异体与原始程序的差异,或者说已有测试集能够检出这个变异体中植入的缺陷,我们说,这个变异体被“杀死”了。但是如果这个变异体的测试结果跟原始程序是一样的,我们就说变异体“存活”下来了。

为什么有的变异体会存活下来?有两种可能:

  ① 一种可能是,已有测试集不充分,不足以检出这个变异体中植入的缺陷,那么我们就需要对测试集进行补充;

  ② 另一种可能是,虽然变异体和原始程序存在语法上的差异,但是它们在语义上是等价的。这种变异体叫做“等价变异体”。比如在如下变异体中:

循环条件中的“<”变异成“!=”,但是语义上的循环逻辑没有任何改变,程序的运行时行为也不会有任何改变,所以任何测试集都无法杀死这样的变异体。

排除这种等价变异体之后,被杀死的变异体占的比例越高,就意味着我们的测试集检出各种缺陷的能力越强。我们把这个比例叫做变异得分。

利用变异得分这个指标,我们就可以建立充分准则了。如果我们希望测试集能够检出在未来发生概率比较高的各种典型缺陷,我们可以要求测试集的变异得分达到1。

这样的准则,其实并没有告诉我们怎么做测试选择,它的主要作用是评估一个已有测试集的充分性:变异得分达到1了,说明测试集已经比较充分了;没达到,说明还不太行,需要再补充一些用例。

所以,围绕变异充分准则做测试选择,大致是这样一个过程:

首先针对原始被测程序,使用变异算子生成一系列变异体,从中识别并刨除等价变异体之后,在原始程序和所有变异体上执行测试集,如果有变异体存活下来,就补充用例并再次执行测试集,直到所有变异体都被杀死。

可以看到,尽管变异充分准则是一种基于缺陷的充分准则,但这个准则所关注的,并不是被测对象现在可能有哪些缺陷,而是由变异算子所代表的、在未来发生概率比较高的那些潜在缺陷。我们把这些潜在缺陷主动注入到被测对象里,看测试集能不能检出这些缺陷,目的是为了判断,测试集能不能在下一个版本里过滤掉这些缺陷。所以,变异充分准则主要是用来做回归测试设计的。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【0304】psql 执行“VACUUM FULL”命令的背后实现过程

1. 概述 在前面讲解Postgres内核中解析器相关(【0297】Postgres内核之 INSERT INTO 原始解析树 转 Query 树 (1))内容时,曾提到过,Postgres内核大致将用户下发的SQL语句分为三大类,这里的VACUUM FULL属于CMD_UTILITY; 因此直接调用utility.c(实用程序)中的对应函数。…

SQL Server Management Studio的使用

之前在 https://blog.csdn.net/fengbingchun/article/details/140961550 介绍了在Windows10上安装SQL Server 2022 Express和SSMS&#xff0c;这里整理下SSMS的简单使用&#xff1a; SQL Server Management Studio(SSMS)是一种集成环境&#xff0c;提供用于配置、监视和管理SQL…

微信小程序【五】摇骰子

摇骰子 一、dice.js二、dice.json三、dice.wxml四、dice.wxss 效果简述&#xff1a;点击设置“骰子个数”&#xff0c;喝一杯前&#xff0c;先摇一摇。 骰子图片命名示例&#xff1a; 1.png、2.png 一、dice.js Page({data: {numDice: 1, // 初始化骰子数diceImages: [],dic…

Redis进阶(四):哨兵

为了解决主节点故障&#xff0c;需要人工操作切换主从的情况&#xff1b;因此需要一种方法可以自动化的切换&#xff1a;哨兵的引入大大改变这种情况。 哨兵的基本概念 自动切换主从节点 哨兵架构 1、当一个哨兵节点发现主节点挂了的时候&#xff0c;还需要其他节点也去检测一…

新华三H3CNE网络工程师认证—进制转换

了解进制转换&#xff0c;先要了解一下IP地址与子网划分&#xff0c;在我们通信当中&#xff0c;每一层都有它的标识&#xff0c;网络层的标识一共有两类协议&#xff0c;一个是IP协议&#xff0c;一个是IPv6协议。IP地址和MAC地址&#xff0c;他们之间是有一些区别。IP地址在网…

07.FreeRTOS列表与列表项

文章目录 07. FreeRTOS列表与列表项1. 列表和列表项的简介2. 列表相关API函数3. 代码验证 07. FreeRTOS列表与列表项 1. 列表和列表项的简介 列表的定义&#xff1a; typedef struct xLIST {listFIRST_LIST_INTEGRITY_CHECK_VALUE /* 校验值 */volatile UBaseType_t uxN…

在百度飞浆中搭建pytorch环境

文章目录 1 先检查创建的环境2 创建虚拟环境3 最终结果 1 先检查创建的环境 选择GPU版本 检查python版本 2 创建虚拟环境 虚拟环境的创建 python3 -m venv env_name # (python3 -m 路径 环境名)激活虚拟环境 source env_name/bin/activate这里注意&#xff0c;同名文件…

sqli靶场复现(1-8关)

目录 1.sqli-labs第二关 1.判断是否存在sql注入 1.1你输入数字值的ID作为参数&#xff0c;我们输入?id1 1.2在数据库可以查看到users下的对应内容 2.联合注入 2.1首先知道表格有几列&#xff0c;如果报错就是超过列数&#xff0c;如果显示正常就是没有超出列数。 2.2得…

PHP全方位多功能投票小程序系统源码

&#x1f31f;【全民参与&#xff0c;决策更精彩】全方位多功能投票小程序大揭秘&#xff01;&#x1f389; &#x1f680; 开篇引入&#xff1a;投票新风尚&#xff0c;尽在指尖 Hey小伙伴们&#xff0c;你是否厌倦了传统的投票方式&#xff0c;觉得它们既繁琐又不够灵活&am…

IO进程----标准IO

目录 IO进程 标准IO 1. 概念&#xff1a; 2. 特点&#xff1a; 3. 缓存区 3.1. 行缓存&#xff1a;和终端操作相关 刷新缓存的条件&#xff1a; 1) 程序正常退出 2) \n刷新 3) 缓存区满刷新 4) 强制刷新 fflush 3.2. 全缓存&#xff1a;和文件操作相关 3.…

sqli-labs闯关1-4

第一关&#xff1a; 这里的输入了 &#xff1f;id1 意思是以GET方式传入id1的参数 就等于SELECT * FROM users WHERE id1 LIMIT 0,1 注意&#xff1a;-- 与-- 空格的区别 在url中输入了--以后&#xff0c;后端数据会变成--空格。在 url中输入 -- 空格 变成 -- 在mysql中&…

使用Go语言实现基于泛型的Jaccard相似度算法

基本原理 跳表&#xff1a; jaccard相似度&#xff1a; jaccard相似度的代码实现&#xff1a; 时间复杂度分析&#xff1a; 快速jaccard算法&#xff1a; 代码实现&#xff0c;这个要求两个集合都是有序的&#xff1a; Jaccard相似度算法的基本实现 算法&#xf…

LeetCode Hot100 排序链表

给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4]示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5]示例 3&#xff1a; 输…

工程技术人员职称专业一览表,赶紧收藏!有助评职称、落户

现在很多地区为了引进人才&#xff0c;都会对各类获得中级或高级职称的人才提供一系列优惠政策&#xff0c;比如人才补贴、职称入户等等。 下面小编就来为大家介绍一下中级职称专业一览表&#xff0c;告诉你能以考代评的几个考试&#xff0c;需要评职称、落户的快看过来&#…

【秋招突围】2024届秋招-京东笔试题-第二套

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍭 本次给大家…

PXE:Kickstart自动化安装Linux系统

PXE&#xff1a;工作在 Client/Server模式&#xff0c;允许客户机通过网络从远程服务器下载引导镜像&#xff0c;并加载安装文件或者整个操作系统。 运行 PXE协议需要设置&#xff1a;DHCP服务器和TFTP服务器。DHCP服务器用来给 PXE client&#xff08;将要安装系统的主机&…

【C++二分查找 决策包容性】1300. 转变数组后最接近目标值的数组和

本文涉及的基础知识点 C二分查找 决策包容性 LeetCode1300. 转变数组后最接近目标值的数组和 给你一个整数数组 arr 和一个目标值 target &#xff0c;请你返回一个整数 value &#xff0c;使得将数组中所有大于 value 的值变成 value 后&#xff0c;数组的和最接近 target …

element plus el-select修改后缀图标

使用 element plus 提供的api 默认为&#xff1a; 修改后为&#xff1a; 方法&#xff1a; <el-select v-model"value" placeholder"Select" size"large" style"width: 120px;":teleported"false" :suffix-icon"…

香港电讯为知名地产商构建安全稳定可靠的企业组网

客户背景 客户公司的总部位于香港&#xff0c;专注于房地产、酒店、基础设施及服务、商场等业务。经过多年沉淀&#xff0c;其内地业务不断壮大&#xff0c;拓展至各个地区并覆盖多个城市&#xff0c;原有的网络架构已无法满足客户的业务扩张需求。 客户需求 解决网络速度和稳…

python-约瑟夫环(赛氪OJ)

[题目描述] n 个人&#xff08; 0,1,2,3,4...n−1 &#xff09;&#xff0c;围成一圈&#xff0c;从编号为 k 的人开始报数&#xff0c;报数报到 m 的人出队。 下次从出队的人之后开始重新报数&#xff0c;循环往复&#xff0c;当队伍中只剩最后一个人的时候&#xff0c;那个人…