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

大模型辅助测试的正确打开方式?

测试的基本目的之一,是对被测对象进行质量评估。换言之,是要提供关于被测对象质量的“确定性”。因此,我们很忌讳在测试设计中引入“不确定性”,比如采用不可靠的测试工具、自动化测试代码逻辑复杂易错、测试选择假设过于主观等等。

近期,我们看到了很多利用大模型辅助测试的研究和实践。尽管大模型在提升测试效率、提高测试用例可读性等方面展现出不错的潜力,但其决策结果所固有的不可解释性,对测试所期求的“确定性”产生了直接冲击。如果我们将测试设计的底座构筑在这种工具上,质量评估结论的可信性问题就会变得非常突出。

那么,大模型辅助测试的正确打开方式究竟是什么呢?目前来看,“利用大模型的生成能力、遵循用例多样化的设计路线、拓展测试集的缺陷检出能力”,似乎是一个相对靠谱的答案。

在这方面,Deng等人利用大模型开展模糊测试的一项工作[1],给我们提供了一个颇具参考价值的示例。我们具体来看看。

假设被测对象是一组API接口,那么测试用例的表现形式,就是调用这些API的测试代码。通过多样化的测试代码,我们能够验证这些API在各种调用行为中的表现是否符合预期,并找到可能存在的缺陷。

我们知道,为了实现用例的多样化,一种常用的手段是模糊测试方法。然而,对于代码形式的用例而言,如果直接对种子代码进行随机变异,大概率将导致编译错误或运行时错误,因此传统的模糊测试手段并不适用。这时,具备代码生成能力的大模型就派上用场了。

在代码生成领域,常见的大模型有两类:生成式大模型仅根据上文(如自然语言描述或前序代码)生成完整的代码片段;填充式大模型则可以在包含占位符的代码片段中进行填空。综合利用这两类大模型,我们就能够完成模糊测试中种子生成和变异的任务:首先用Codex这样的生成式模型,生成调用目标API的种子测试代码,继而用INCODER这样的填充式模型,对种子测试代码进行演化式的变异,得到更多模糊测试代码。最后,分别在CPU和GPU服务器上执行模糊测试代码,采用差分测试策略探查缺陷。整个过程如下图所示:

以下算法描述了演化式的模糊测试用例生成过程(上图中间部分):

该算法中包含如下要点:

  1. 在初始化部分,使用Codex生成的种子测试代码Seeds对种子银行进行初始化。种子银行中维护着目前为止生成的所有目标API测试代码。另外,需要对各个变异操作符的概率分布进行初始化,这个概率分布将在后续的迭代中不断更新,用以选取最合适的变异操作符;

  2. 在演化迭代中,首先从种子银行中选取一个种子,选取策略是先选出适应值最高的N个种子,然后采用softmax函数对这N个种子的适应值进行归一化,籍此评估每个种子最终被选中的概率,概率最高的种子中选;

  3. 根据变异操作符的概率分布,选取概率最高的变异操作符;

  4. 使用选定的变异操作符对种子测试代码进行变异,也就是将种子测试代码中的一个或多个位置(譬如API参数、方法名、调用前序代码、调用后序代码等)替换为<span>占位符。不同的替换位置,对应着不同类型的变异操作符:

  5. 将变异后的代码提交给INCODER模型,要求其对占位符位置进行填空。INCODER模型可能会给出多种不同的填空结果。如果填空之后得到的代码能够编译通过,那就是一个有效的模糊测试用例,否则就是无效的。之前我们对种子进行变异的目的,就是为了得到多样化的、有效的模糊测试用例。而对不同的待测API来说,适用的变异操作也是不同的。能够通过填空生成的有效代码数量越多,说明当前选定的变异操作符越适用。因此,我们可以用有效和无效用例的数量,对变异操作符的概率分布进行动态更新。这种思路实际上来自多臂老虎机(Multi-Armed Bandit, MAB)算法;

  6. 每一个填空生成的有效模糊测试用例,都将进入种子银行,成为下个迭代中的备选种子。在此之前,我们需要先评估这一段测试代码的数据流图最大深度D,并统计其中调用各种不同API的次数U-R(R是重复调用的次数),由此算出该用例的适应值得分。通常认为,那些涉及一长串不同API调用的用例,能够更充分地覆盖API之间的交互事件,因此也就更有可能发现API的潜在缺陷。适应值函数FitnessFunction(C) = D + U - R就是根据这一思路来定义的。

参考文献:

[1] Deng Y, Xia C S, Peng H, et al. Large language models are zero-shot fuzzers: Fuzzing deep-learning libraries via large language models[C]//Proceedings of the 32nd ACM SIGSOFT international symposium on software testing and analysis. 2023: 423-435.

相关文章:

大模型辅助测试的正确打开方式?

测试的基本目的之一&#xff0c;是对被测对象进行质量评估。换言之&#xff0c;是要提供关于被测对象质量的“确定性”。因此&#xff0c;我们很忌讳在测试设计中引入“不确定性”&#xff0c;比如采用不可靠的测试工具、自动化测试代码逻辑复杂易错、测试选择假设过于主观等等…...

三相电的相电压、线电压、额定值、有效值,变比,零序电压,零序电流,三相三线制的三角形连接,三相四线制的星形连接

在二次设备配置中经常有根电压系统相关的名词&#xff0c;本身不是学电气的&#xff0c;有些名词经常查了忘&#xff0c;后续工作所有遇到跟电气相关的知识总结在此帖&#xff0c;便于后续直接查看&#xff0c;避免每次都要重新查、重新梳理。 相电压和线电压的关系是根号3倍&a…...

电商网站的基础用户数在100万,日活跃用户数在1万左右,系统下单TPS最大支持1000,应用服务要保证高可用。请预估该网站每天的使用成本。

要预估一个电商网站每天的使用成本&#xff0c;我们需要考虑多个因素&#xff0c;包括计算资源、数据库、缓存、存储、网络流量、负载均衡、安全服务、监控与日志等。以下是基于您提供的信息&#xff08;基础用户数100万&#xff0c;日活跃用户数1万&#xff0c;系统下单TPS最大…...

线性代数期末总复习的点点滴滴(1)

一、可逆矩阵、行列式、秩的关系 1.行列式与可逆矩阵的关系 所以&#xff0c;不难看出矩阵可逆的充分必要条件是该矩阵的行列式不为0。 2.接着来看&#xff0c;满秩和矩阵行列式的关系 不难看出满秩和行列式不为0是等价的。 3.再来看&#xff0c;满秩和矩阵可逆的关系 说明了…...

python+reportlab创建PDF文件

目录 字体导入 画布写入 创建画布对象 写入文本内容 写入图片内容 新增页 画线 表格 保存 模板写入 创建模板对象 段落及样式 表格及样式 画框 图片 页眉页脚 添加图形 构建pdf文件 reportlab库支持创建包含文本、图像、图形和表格的复杂PDF文档。 安装&…...

2024最新qrcode.min.js生成二维码Demo

找了一堆代码一堆GPT&#xff0c;终于给写对了&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…...

【Microi吾码】开源力量赋能低代码创新,重塑软件开发生态格局

我的个人主页 文章专栏&#xff1a;Microi吾码 一、引言 在当今数字化浪潮汹涌澎湃的时代&#xff0c;软件开发的需求呈现出爆发式增长。企业为了在激烈的市场竞争中脱颖而出&#xff0c;不断寻求创新的解决方案以加速数字化转型。传统的软件开发方式往往面临着开发周期长、技…...

Github - 如何提交一个带有“verified”标识的commit

Github - 如何提交一个带有“verified”标识的commit 前言(Why) 今天在Github上浏览某项目的commit记录的时候发现&#xff0c;有的commit记录带有verified绿色标识&#xff0c;有的带有橘色的Unverified标识&#xff0c;还有的什么都不显示。 既然我是根正苗红的作者(bushi)…...

HCIA笔记9--NAT、ACL与链路聚合

1. ACL ACL: 访问控制列表, Access Control List。 通过定义规则来允许或拒绝流量的通过。 1.1 ACL分类 1.2 配置实例 如图所示&#xff0c;对R2的访问只允许192.168.1.0/24网段。 我们可以配置基本acl来限制 acl 2000 acl number 2000 rule 5 permit source 192.168.1.0 0…...

SCSA:探索空间与通道注意力之间的协同效应

文章目录 摘要1 引言2 相关工作2.1 多语义空间信息2.2 注意力分解 3 方法3.1 共享多语义空间注意力&#xff1a;空间与通道分解3.2 渐进式通道自注意力3.3 协同效应3.4 注意力机制的整合 4 实验4.1 实验设置4.2 图像分类4.3 目标检测4.4 分割4.5 消融研究 5 可视化与分析5.1 注…...

深度学习助力股市预测:LSTM、RNN和CNN模型实战解析

作者&#xff1a;老余捞鱼 原创不易&#xff0c;转载请标明出处及原作者。 写在前面的话&#xff1a;众所周知&#xff0c;传统的股票预测模型有着各种各样的局限性。但在我的最新研究中&#xff0c;探索了一些方法来高效预测股市走势&#xff0c;即CNN、RNN和LSTM这些深度学习…...

组件库TDesign的表格<t-table>的使用,行列合并以及嵌入插槽实现图标展示,附踩坑

碎碎念&#xff1a;有点难用&#xff0c;不丝滑&#xff08;以下介绍的难点不是真的难&#xff0c;只是有点点点难用&#xff09; 背景&#xff1a;需要实现表格的行列合并以及图标的嵌入&#xff0c;想到使用组件库组件来方便开发 链接&#xff1a;TDesign Web Vue Next 难点…...

jwt在express中token的加密解密实现方法

在我们前面学习了 JWT认证机制在Node.js中的详细阐述 之后&#xff0c;今天来详细学习一下token是如何生成的&#xff0c;secret密钥的加密解密过程是怎么样的。 安装依赖 express&#xff1a;用于创建服务器jsonwebtoken&#xff1a;用于生成和验证JWTbody-parser&#xff1…...

结构体、共用体的字节对齐

结构体 结构体嵌套时&#xff1a;先算一下嵌套的结构体大小 嵌套进来的结构体大小为16字节&#xff0c;仍然进行&#xff0c;8字节对齐 typedef struct {char name[20];//20字节//000开始 20字节 019 struct{int day; //000开始 4字节 003char swx; //004开始 1…...

【YOLOv3】源码(train.py)

概述 主要模块分析 参数解析与初始化 功能&#xff1a;解析命令行参数&#xff0c;设置训练配置项目经理制定详细的施工计划和资源分配日志记录与监控 功能&#xff1a;初始化日志记录器&#xff0c;配置监控系统项目经理使用监控和记录工具&#xff0c;实时跟踪施工进度和质量…...

帧缓存的分配

帧缓存实际上就是一块内存。在 Android 系统中分配与回收帧缓存&#xff0c;使用的是一个叫 ION 的内核模块&#xff0c;App 使用 ioctl 系统调用后&#xff0c;会在内核内存中分配一块符合要求的内存&#xff0c;用户态会拿到一个 fd&#xff08;有的地方也称之为 handle&…...

基于顺序表实现队列循环队列的处理

文章目录 1.假溢出的现象2.循环队列3.顺序表实现队列架构4.顺序表模拟实现队列5.设计循环队列&#xff08;校招难度&#xff09; 1.假溢出的现象 下面的这个就是我们的假溢出的这个现象的基本的来源&#xff1a; 我们的这个队列里面是有9个位置的&#xff0c;我们知道这个队列…...

磁珠选型规范

根据不同的应用场景&#xff0c;磁珠可以分为普通型磁珠&#xff0c;大电流型磁珠和尖峰型磁珠。 &#xff08;1&#xff09;普通型磁珠&#xff1a;主要用于电流比较小&#xff08;小于600mA&#xff09;.无特殊要求的场景&#xff0c;普通型磁珠的直流电阻一般不超过1Ω&…...

linux 点对点语音通话及直播推流实践一: linux USB声卡或耳机 基本配置

inux USB声卡或耳机 基本配置 工具安装查看设备录放音操作录音放音声音配置获取控制信息音量配置本文介绍 linux下alsa声音原件 工具使用方法,包括设备查询、声卡基本配置、录音放音等。 保证 alsa套件可正常操作和配置声卡,是实现SIP语音通话、音视频 采集及推拉流功能的基础…...

3DMAX镂空星花球建模插件FloralStarBall使用方法

3DMAX镂空星花球建模插件FloralStarBall使用教程 就是那个3DMAX镂空星花球建模&#xff0c;再也不用手动做了&#xff0c;使用3DMAX镂空星花球建模FloralStarBall插件可以一键生成&#xff01; 3DMAX镂空星花球建模插件FloralStarBall&#xff0c;经典星形球体的美丽变体。星形…...

OpCore-Simplify:从3天手动调试到3步智能配置,黑苹果配置的自动化革命

OpCore-Simplify&#xff1a;从3天手动调试到3步智能配置&#xff0c;黑苹果配置的自动化革命 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 想象一下…...

为什么选择ODB++格式?Cadence与HyperLynx数据交换的最佳实践

为什么选择ODB格式&#xff1f;Cadence与HyperLynx数据交换的最佳实践 在高速PCB设计领域&#xff0c;数据格式的选择直接影响着设计到制造的整个流程效率。当工程师需要在Cadence Allegro和HyperLynx之间传递设计数据时&#xff0c;ODB正逐渐成为行业首选。这种智能数据格式不…...

MATLAB与AI结合:使用Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF进行科学计算与数据分析

MATLAB与AI结合&#xff1a;使用Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF进行科学计算与数据分析 1. 科研与工程中的智能计算新范式 想象一下这样的场景&#xff1a;你正在处理一组复杂的实验数据&#xff0c;需要快速实现滤波、拟合和可视化。传统方式可能需要…...

保姆级教程:将你的YOLOv8模型用Gradio部署到公网,并设置密码保护(避免临时链接失效)

从原型到生产&#xff1a;YOLOv8模型的安全部署与Gradio高级应用指南 当你的YOLOv8模型在本地运行良好&#xff0c;接下来最自然的想法就是把它分享给团队成员、客户或者进行小范围演示。Gradio提供的shareTrue参数看似简单&#xff0c;但背后隐藏着许多值得深入探讨的技术细节…...

ComfyUI-FramePackWrapper功能选择指南:如何根据资源控制与使用便捷性选择最优方案

ComfyUI-FramePackWrapper功能选择指南&#xff1a;如何根据资源控制与使用便捷性选择最优方案 【免费下载链接】ComfyUI-FramePackWrapper 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-FramePackWrapper ComfyUI-FramePackWrapper作为一款高效的AI视频生成插…...

价值投资中的智能城市废水处理与再利用系统分析

价值投资中的智能城市废水处理与再利用系统分析 关键词:价值投资、智能城市、废水处理、废水再利用、系统分析 摘要:本文聚焦于价值投资视角下的智能城市废水处理与再利用系统。首先介绍了研究的背景,包括目的、预期读者、文档结构和相关术语。接着阐述了智能城市废水处理与…...

AI辅助开发新体验:描述需求即可让快马AI生成智能浏览器下载插件

今天想和大家分享一个用AI辅助开发浏览器插件的实战经验。最近在InsCode(快马)平台上尝试开发了一个智能下载插件&#xff0c;整个过程让我深刻体会到AI如何改变传统开发流程。 需求分析 这个插件的核心目标是让下载变得更智能。传统下载工具需要我们手动选择保存位置&#xff…...

BilibiliDown终极指南:如何快速掌握B站视频批量下载技巧

BilibiliDown终极指南&#xff1a;如何快速掌握B站视频批量下载技巧 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirrors…...

共享图书借阅系统 Java 源码 + 数据库设计完整方案

以下是一个共享图书借阅系统的Java源码与数据库设计的完整方案&#xff0c;涵盖系统架构、核心功能实现、数据库设计以及安全防护措施等方面&#xff1a;一、系统架构技术栈&#xff1a;后端&#xff1a;Spring Boot 2.x MyBatis-Plus&#xff08;简化数据库操作&#xff09;前…...

忍者像素绘卷镜像免配置部署:自动检测GPU型号并加载最优配置

忍者像素绘卷镜像免配置部署&#xff1a;自动检测GPU型号并加载最优配置 1. 产品概览&#xff1a;打破次元壁的像素艺术工作站 忍者像素绘卷是一款基于Z-Image-Turbo深度优化的图像生成工作站&#xff0c;专为像素艺术创作而设计。它将传统漫画创作与现代AI技术相结合&#x…...