LLM与动态符号执行生成测试用例的比较

news2024/12/4 16:28:33

LLM与动态符号执行生成测试用例的比较

在软件测试领域,生成有效的测试用例是确保软件质量和可靠性的关键步骤。近年来,大型语言模型(Large Language Models,LLM)和动态符号执行(Dynamic Symbolic Execution)技术在测试用例生成方面展现出巨大潜力。本文将详细探讨LLM和动态符号执行在测试用例生成中的应用,并对这两种方法进行全面的比较分析。

一、LLM在测试用例生成中的应用

大型语言模型(LLM)在自然语言处理领域取得了显著成就,并在代码生成、代码评审及单元测试等任务中得到了广泛应用。LLM利用深度学习技术,通过大规模数据集的训练,能够生成高质量的代码片段和测试用例。

  1. LLM生成测试用例的基本流程

    • 准备数据集:收集相关的软件功能描述、用户需求、历史bug等信息,用于训练LLM模型。
    • 构建LLM模型:利用深度学习框架(如TensorFlow、PyTorch等)构建LLM模型,并对模型进行训练。
    • 生成测试用例:根据训练好的LLM模型,输入相关的软件功能描述或用户需求,自动生成自然语言的测试用例。
    • 执行测试:将生成的测试用例交给测试人员执行,对软件进行测试。
    • 结果分析:对测试结果进行分析,评估软件的质量和稳定性。
  2. LLM生成测试用例的有效性

    论文《An Empirical Study of Using Large Language Models for Unit Test Generation》为软件测试领域的进展提供了重要的实证研究。该研究以三种生成模型(StarCoder、Codex和GPT-3.5-Turbo)为对象,分析它们在单元测试生成任务中的性能。研究采用了两个基准测试(HumanEva和Evosuite SF110),并通过对编译率、测试正确性以及覆盖率等方面进行评估,深入探讨了这些LLM在生成测试用例方面的有效性。

    • 编译率:在HumanEval数据集上,StarCoder的编译率高达70.0%,而其他模型只有不到一半是可编译的。在SF110数据集上,编译率普遍较低,最高的StarCoder仅有12.7%。通过启发式修复后,编译率平均提高了41%,Codex(2K)增幅最大。
    • 测试正确性:在HumanEval数据集方面,StarCoder表现最好,测试通过率为81.3%,而ChatGPT的“Somewhat Correct”指标高达92.3%。在SF110数据集方面,表现最好的同样是StarCoder,有51.9%的测试通过率。
    • 覆盖率:在HumanEval数据集方面,LLM的行覆盖率在67%87.7%,分支覆盖率在69.392.8%,但低于手动测试和Evosuite生成的覆盖率。在SF110数据集方面,LLM的覆盖率更低,均不到2%。
  3. LLM生成测试用例的优势与挑战

    • 优势:LLM可以自动生成大量的测试用例,覆盖更多的软件功能和场景,从而提高测试的全面性和准确性。
    • 挑战:尽管LLM能够生成一些对输入/输出有用的测试用例,但生成的测试覆盖率和可读性仍然无法完全满足人们的需求。此外,全面覆盖仍然是一个难以实现的目标。
二、动态符号执行在测试用例生成中的应用

动态符号执行是一种动态分析技术,它通过将程序输入值用符号值代替,系统探索程序的所有可执行路径,并自动化地生成测试用例。相比于黑盒测试,动态符号执行具有较高的代码覆盖率,并且测试准确性更高。

  1. 动态符号执行的基本原理

    动态符号执行技术是在传统符号执行技术基础上发展起来的。它通过将程序输入值用符号值代替,系统探索程序的所有可执行路径。在达到目标代码时,分析器可以得到相应的路径约束,然后通过约束求解器来得到可以触发目标代码的具体值。

  2. 动态符号执行在测试用例生成中的应用

    • 符号执行分析:使用符号值作为输入,探索程序的所有可执行路径,并收集路径约束。
    • 约束求解:通过约束求解器,得到可以触发目标代码的具体值。
    • 生成测试用例:根据路径约束和具体值,生成相应的测试用例。
  3. 动态符号执行的优势与挑战

    • 优势:动态符号执行技术能够实现测试用例的自动化生成,并在此基础上实现一些常见软件漏洞的主动式发掘。它具有较高的代码覆盖率,并且测试准确性更高。
    • 挑战:动态符号执行技术主要用于软件安全和软件漏洞挖掘方面的研究,对软件性能缺陷方面的研究较少。此外,动态符号执行过程中需要实际执行被测试程序,可能会受到程序复杂性和资源限制的影响。
三、LLM与动态符号执行的比较分析
  1. 生成测试用例的方式

    • LLM:通过大规模数据集的训练,LLM能够生成自然语言的测试用例。它依赖于模型的泛化能力和对语言的理解,能够生成多样化的测试用例。
    • 动态符号执行:通过符号执行和约束求解,动态符号执行能够系统地探索程序的所有可执行路径,并生成相应的测试用例。它依赖于程序的语义和路径约束,能够生成针对特定路径的测试用例。
  2. 测试用例的质量和覆盖率

    • LLM:虽然LLM能够生成大量的测试用例,但生成的测试覆盖率和可读性仍然无法完全满足人们的需求。LLM生成的测试用例可能包含一些无效或冗余的测试,需要进一步的筛选和优化。
    • 动态符号执行:动态符号执行能够生成具有较高覆盖率的测试用例,因为它能够系统地探索程序的所有可执行路径。然而,由于程序复杂性和资源限制的影响,动态符号执行可能无法覆盖所有路径,特别是对于大型和复杂的程序。
  3. 适用场景和局限性

    • LLM:LLM适用于生成多样化的测试用例,特别是在缺乏具体路径信息或程序复杂性较高的情况下。然而,LLM生成的测试用例可能无法完全满足特定路径的测试需求,需要与其他测试方法相结合。
    • 动态符号执行:动态符号执行适用于针对特定路径的测试,特别是在软件安全和漏洞挖掘方面。然而,由于程序复杂性和资源限制的影响,动态符号执行可能无法在所有情况下都有效。此外,动态符号执行需要实际执行被测试程序,可能会受到程序状态和环境的影响。
  4. 自动化程度和可扩展性

    • LLM:LLM具有较高的自动化程度,能够自动生成大量的测试用例。随着模型的不断优化和训练数据的增加,LLM的生成能力将进一步提升。
    • 动态符号执行:动态符号执行的自动化程度取决于路径约束的复杂性和求解器的性能。随着求解器技术的不断进步和程序分析方法的改进,动态符号执行的自动化程度和可扩展性将得到进一步提升。
  5. 安全性和隐私保护

    • LLM:LLM在生成测试用例时不会直接访问被测试程序的内部状态或数据,因此具有较高的安全性。然而,在训练LLM模型时,需要收集和处理大量的数据,可能会涉及隐私保护的问题。
    • 动态符号执行:动态符号执行需要实际执行被测试程序,可能会访问程序的内部状态和数据。因此,在安全性方面需要采取额外的措施来保护敏感信息和防止数据泄露。
四、结论与展望

LLM和动态符号执行在测试用例生成方面各有优势和挑战。LLM能够生成多样化的测试用例,具有较高的自动化程度;而动态符号执行能够系统地探索程序的所有可执行路径,具有较高的测试覆盖率和准确性。然而,两者都存在一些局限性,需要与其他测试方法相结合以提高测试效果。

未来,随着人工智能技术的不断发展,LLM和动态符号执行技术将在软件测试领域发挥更大的作用。一方面,可以通过优化LLM模型的结构和训练策略来提高测试用例的质量和覆盖率;另一方面,可以结合程序分析和静态测试方法来弥补动态符号执行的局限性。此外,还可以探索将LLM和动态符号执行技术相结合的新方法,以进一步提高测试用例的生成效率和准确性。

总之,LLM和动态符号执行技术为软件测试带来了新的机遇和挑战。通过不断的研究和实践,我们可以更好地利用这些技术来提高软件测试的效率和准确性,为软件开发过程中的质量保障提供有力支持。

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

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

相关文章

故障诊断 | Transformer-LSTM组合模型的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | Transformer-LSTM组合模型的故障诊断(Matlab) 源码设计 %% 初始化 clear close all clc disp(此程序务必用2023b及其以上版本的MATLAB!否则会报错!) warning off %

亚马逊云(AWS)使用root用户登录

最近在AWS新开了服务器(EC2),用于学习,遇到一个问题就是默认是用ec2-user用户登录,也需要密钥对。 既然是学习用的服务器,还是想直接用root登录,下面开始修改: 操作系统是&#xff1…

Android笔记【12】脚手架Scaffold和导航Navigation

一、前言 学习课程时,对于自己不懂的点的记录。 对于cy老师第二节课总结。 二、内容 1、PPT介绍scaffold 2、开始代码实操 先新建一个screen包,写一个Homescreen函数,包括四个页面。 再新建一个compenent包,写一个displayText…

HookVip4.0.3 | 可解锁各大应用会员

HookVip是一款可以解锁会员的模块工具,需要搭配相应框架结合使用。这款插件工具支持多种框架如LSPosed、LSPatch、太极、应用转生等,并且完全免费,占用内存小。支持的软件包括now要想、神奇脑波、塔罗牌占卜、爱剪辑、人人视频、咪萌桌面宠物…

猎板 PCB特殊工艺:铸就电子行业核心竞争力新高度

在当今竞争激烈且技术驱动的电子制造领域,印制电路板(PCB)作为电子产品的关键基石,其特殊工艺的发展水平直接影响着整个行业的创新步伐与产品品质。猎板 PCB 凭借在厚铜板、孔口铺铜、HDI 板、大尺寸板以及高频高速板等特殊工艺方…

【教学类-43-25】20241203 数独3宫格的所有可能-使用模版替换(12套样式,空1格-空8格,每套510张,共6120小图)

前期做数独惨宫格的所有排列,共有12套样式,空1格-空8格,每套510张,共6120小图) 【教学类-43-24】20241127 数独3宫格的所有可能(12套样式,空1格-空8格,每套510张,共6120…

Redis+Caffeine 多级缓存数据一致性解决方案

RedisCaffeine 多级缓存数据一致性解决方案 背景 之前写过一篇文章RedisCaffeine 实现两级缓存实战,文章提到了两级缓存RedisCaffeine可以解决缓存雪等问题也可以提高接口的性能,但是可能会出现缓存一致性问题。如果数据频繁的变更,可能会导…

echarts地图立体效果,echarts地图点击事件,echarts地图自定义自定义tooltip

一.地图立体效果 方法1:两层地图叠加 实现原理:geo数组中放入两个地图对象,通过修改zlevel属性以及top,left,right,bottom形成视觉差 配置项参考如下代码: geo: [{zlevel: 2,top: 96,map: map,itemStyle: {color: #091A51ee,opacity: 1,borderWidth: 2,borderColor: #16BAFA…

D87【python 接口自动化学习】- pytest基础用法

day87 pytest运行参数 -m -k 学习日期:20241203 学习目标:pytest基础用法 -- pytest运行参数-m -k 学习笔记: 常用运行参数 pytest运行参数-m -k pytest -m 执行特定的测试用例,markers最好使用英文 [pytest] testpaths./te…

总结拓展十七:特殊采购业务——委外业务

SAP中委外采购业务,又称供应商分包(或外协、转包、、外包、托外等),是企业将部分生产任务委托给外部供应商/集团其他分子公司完成的一种特殊采购业务模式。 委外业务主要有2大类型,分别是标准委外(委外采购…

ESP8266作为TCP客户端或者服务器使用

ESP8266模块,STA模式(与手机搭建TCP通讯,EPS8266为服务端)_esp8266作为station-CSDN博客 ESP8266模块,STA模式(与电脑搭建TCP通讯,ESP8266 为客户端)_esp8266 sta 连接tcp-CSDN博客…

ATTCK红队评估实战靶场(四)

靶机链接:http://vulnstack.qiyuanxuetang.net/vuln/detail/6/ 环境搭建 新建两张仅主机网卡,一张192.168.183.0网段(内网网卡),一张192.168.157.0网段(模拟外网网段),然后按照拓补…

C 语言 “神秘魔杖”—— 指针初相识,解锁编程魔法大门(一)

文章目录 一、概念1、取地址操作符(&)2、解引用操作符(*)3、指针变量1、 声明和初始化2、 用途 二、内存和地址三、指针变量类型的意义1、 指针变量类型的基本含义2、 举例说明不同类型指针变量的意义 四、const修饰指针1、co…

封装loding加载动画的请求

图片 /*** Loading 状态管理类*/ export class Loading {constructor(timer300) {this.value falsethis.timer timer}/*** 执行异步操作并自动管理 loading 状态* param {Promise|Function|any} target - Promise、函数或其他值* returns {Promise} - 返回请求结果*/async r…

人形机器人训练、机器臂远程操控、VR游戏交互、影视动画制作,一副手套全部解决!

广州虚拟动力基于自研技术推出了多节点mHand Pro动捕数据手套,其最大的特点就是功能集成与高精度捕捉,可以用于人形机器人训练、机器臂远程操控、VR游戏交互、影视动画制作等多种场景。 一、人形机器人训练 mHand Pro动捕数据手套双手共装配16个9轴惯性…

Nginx Web服务器管理、均衡负载、访问控制与跨域问题

Nginx Web 服务器的均衡负载、访问控制与跨域问题 Nginx 的配置 1. 安装Nginx 首先安装Nginx apt install nginx -ycaccpurgatory-v:~$ sudo apt install nginx [sudo] password for cacc: Reading package lists... Done Building dependency tree... Done Reading state i…

Bert+CRF的NER实战

CRF(条件随机场-Conditional Random Field) 原始本文:我在北京吃炸酱面 标注示例(采用BIO标注方式): 我O在O北B-PLA京I-PLA吃O炸B-FOOD酱I-FOOD面I-FOOD CRF: 目的:提出一些不可能…

C++语法·识

人生建议:请手机反省一下,为什么总拉着我熬夜。 目录 STL简介 string类容器一 auto(自动声明类型) 简介: 特点 范围for(语法糖) 简介 特点 string string类的常见接口 1.构造 2.容…

蓝桥杯准备训练(lesson1,c++方向)

前言 报名参加了蓝桥杯(c)方向的宝子们,今天我将与大家一起努力参赛,后序会与大家分享我的学习情况,我将从最基础的内容开始学习,带大家打好基础,在每节课后都会有练习题,刚开始的练…

【开源】A059-基于SpringBoot的社区养老服务系统的设计与实现

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看项目链接获取⬇️,记得注明来意哦~🌹 赠送计算机毕业设计600个选题ex…