摘要:本文围绕LIBRO技术的主要步骤进行介绍。

本文分享自华为云社区《【LLM for SE】顶会ICSE-2023发布LIBRO技术,利用大模型技术进行缺陷重现,自动重现率(33%)实现业界突破》,作者: 华为云软件分析Lab 。

随着大模型(Large Language Model, LLM)技术的发展,LLM在许多软件工程任务上表现出良好的效果,比如代码生成、搜索、对话等任务。近期,许多研究工作结合LLM技术和软件分析技术来解决软件工程领域的问题。软件工程顶级会议ICSE2023文章《Large Language Models are Few-shot Testers: Exploring LLM-based General Bug Reproduction》(来自韩国科学技术院大学的Shin Yoo团队)发布了LIBRO技术,是首个面向通用缺陷的自动重现工作。该技术有效利用大模型技术提升了缺陷重现技术的有效性,实现业界突破。实验结果表明,在主流数据集Defects4J中,LIBRO技术可根据缺陷报告自动生成测试用例并重现出251个缺陷(共750个缺陷),自动重现率达33%。LIBRO借助LLM技术在NLP领域的突出进展,在SE领域中的缺陷重现问题中实现重大突破。利用LLM的技术优势来提升SE领域的技术能力有望成为行业趋势,吸引越来越多的研究者和业界从业人员。

论文链接详见:https://arxiv.org/abs/2209.11515

以下围绕LIBRO技术的主要步骤进行介绍。如图1所示,LIBRO框架主要包括四个步骤,分别是:(A) 提示工程、(B) LLM查询、(C) 后处理、(D) 选择&排序。

步骤A(提示工程):在LLM技术中,如何构造有效的提示进行查询是一个关键问题。LIBRO基于缺陷报告构建提示信息,利用的信息包括缺陷报告的标题和描述信息。此外,LIBRO还在提示信息中加入测试用例实例引导大模型生成测试用例。下图给出了一个缺陷报告的实例和对应的提示信息。

步骤B (LLM查询):将之前构造的提示信息输入大模型,大模型将输出一个测试用例生成的结果。具体来说,LIBRO使用的大模型是基于GPT-3的CodeX模型。LIBRO构造的提示信息末尾是“public void test”,这会引导大模型生成一段测试用例代码。此外,LIBRO通过加权随机采样(weighted random sampling)来提升大模型查询效果,并生成多个测试用例作为备选测试用例。下图是基于之前例子里的提示信息生成的一段测试用例代码。

步骤C (后处理):LIBRO对大模型生成的测试用例的后处理指将测试用例函数放入对应测试类中,并解决执行该测试用例所需的依赖。具体来说,LIBRO首先根据测试类与测试用例函数的文本相似度来计算测试类和测试函数的映射关系。该策略在业界主流数据集中能够成功匹配89%的测试类与测试函数的关系,是一种有效的匹配策略。为了解决测试用例函数的依赖问题,LIBRO首先解析生成的测试用例函数,并识别变量类型以及引用的类名/构造函数/异常。然后,LIBRO通过在测试类中与现有import语句进行词法匹配,并过滤掉已经导入的类名。

步骤D (选择&排序):一个能够重现缺陷的测试用例指当且仅当测试用例因为缺陷报告中说明的缺陷而执行失败。换而言之,LIBRO生成能够重现缺陷的必要条件是:该测试用例在被测程序的错误版本中编译成功但是执行失败。该研究工作将这类测试用例称为FIB(Fail In the Buggy program)。LIBRO对大模型生成的若干测试用例进行选择和排序,从而优先推荐质量更高的生成结果。

LIBRO的选择和排序算法主要包括三种启发式策略:(1)如果测试用例执行失败信息和/或显示了在缺陷报告中提到的行为(比如异常或输出值),那么该测试用例可能是重现缺陷的测试用例。(2)LIBRO根据选择测试用例的集合大小来观察大模型生成的测试用例之间的一致性。直觉上,如果大模型生成大量相似的测试用例,那么说明大模型认为这类测试用例具有更高的可信度。即,这类测试用例是大模型达成的共识。(3)LIBRO根据测试用例的长度来决定它们的优先级,原因是短的测试用例更便于用户理解。

缺陷重现实例介绍:

以下是一个LIBRO重现AssertJ-Core项目中编号为2666的缺陷报告的真实案例介绍。如下截图Table VIII是实际缺陷报告,如下截图Listing 4是利用LIBRO生成的测试用例。缺陷报告中提到在特定条件下比较i和I会失败。LIBRO根据缺陷报告的描述自动生成了能够重现该缺陷的测试用例。

文章来自:PaaS技术创新Lab;PaaS技术创新Lab隶属于华为云,致力于综合利用软件分析、数据挖掘、机器学习等技术,为软件研发人员提供下一代智能研发工具服务的核心引擎和智慧大脑。我们将聚焦软件工程领域硬核能力,不断构筑研发利器,持续交付高价值商业特性!加入我们,一起开创研发新“境界”!

PaaS技术创新Lab主页链接:https://www.huaweicloud.com/lab/paas/home.html

点击关注,第一时间了解华为云新鲜技术~

顶会ICSE-2023发布LIBRO技术,利用大模型技术进行缺陷重现,自动重现率达33%的更多相关文章

  1. 利用大数据技术处理海量GPS数据

    我秀中国物联网地图服务平台目前接入的监控车辆近百万辆,每天采集GPS数据7亿多条,产生日志文件70GB,使用传统的数据处理方式非常耗时. 比如,仅仅对GPS做一些简单的统计分析,程序就需要几个小时才能 ...

  2. 【学习笔记】大数据技术原理与应用(MOOC视频、厦门大学林子雨)

    1 大数据概述 大数据特性:4v volume velocity variety value 即大量化.快速化.多样化.价值密度低 数据量大:大数据摩尔定律 快速化:从数据的生成到消耗,时间窗口小,可 ...

  3. 大数据技术人年度盛事! BDTC 2016将于12月8-10日在京举行

    2016年12月8日-10日,由中国计算机学会(CCF)主办,CCF大数据专家委员会承办,中国科学院计算技术研究所和CSDN共同协办的2016中国大数据技术大会(Big Data Technology ...

  4. 跟我一起学WCF(2)——利用.NET Remoting技术开发分布式应用

    一.引言 上一篇博文分享了消息队列(MSMQ)技术来实现分布式应用,在这篇博文继续分享下.NET平台下另一种分布式技术——.NET Remoting. 二..NET Remoting 介绍 2.1 . ...

  5. TOP100summit:【分享实录-WalmartLabs】利用开源大数据技术构建WMX广告效益分析平台

    本篇文章内容来自2016年TOP100summitWalmartLabs实验室广告平台首席工程师.架构师粟迪夫的案例分享. 编辑:Cynthia 粟迪夫:WalmartLabs实验室广告平台首席工程师 ...

  6. 利用Spring.Net技术打造可切换的分布式缓存读写类

    利用Spring.Net技术打造可切换的Memcached分布式缓存读写类 Memcached是一个高性能的分布式内存对象缓存系统,因为工作在内存,读写速率比数据库高的不是一般的多,和Radis一样具 ...

  7. 利用过采样技术提高ADC测量微弱信号时的分辨率

    1. 引言 随着科学技术的发展,人们对宏观和微观世界逐步了解,越来越多领域(物理学.化学.天文学.军事雷达.地震学.生物医学等)的微弱信号需要被检测,例如:弱磁.弱光.微震动.小位移.心电.脑电等[1 ...

  8. 利用JSP编程技术实现一个简单的购物车程序

    实验二   JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP ...

  9. 利用apache伪静态技术防止盗链

    (在我们制作网站的过程中,可能会遇到这样的问题,就是其他的网站直接盗用了我们网站的图片或css或js,这样可能会大大增加我们自己网站的负载. 所以,我们应该考虑一下怎样防止这样的事情发生.) 下面我们 ...

  10. 利用内存锁定技术防止CE修改

    利用内存锁定技术防止CE修改 通过这种在R3环利用的技术,我们可以来达到保护内存的目的,像VirtualProtect等函数来修改页属性根本无法修改. 而CE修改器推测应该使用VirtualProte ...

随机推荐

  1. VsCode里面运行mvn命令显示The JAVA_HOME environment variable is not defined correctly

    问题描述 关于这个问题,就是环境配置出了问题!!! 问题解决 在settings.json里面,配置的环境的路径不能出错,我就是在配置的时候,名为Environments的文件夹写成Environme ...

  2. PicList 现已上架Mac App Store 分享下整个上架过程和遇到的问题

    PicList 是一款云存储/图床平台管理和文件上传工具,基于 PicGo 进行了深度二次开发,保留了 PicGo 的所有功能的同时,为相册添加了同步云端删除功能,同时增加了完整的云存储管理功能,包括 ...

  3. Insecure Randomness 不安全的随机数

    Insecure Randomness Abstract 标准的伪随机数生成器不能抵挡各种加密攻击. Explanation 在对安全性要求较高的环境中,使用一个能产生可预测数值的函数作为随机数据源, ...

  4. Any to Any 实时变声的实现与落地丨RTC Dev Meetup

    前言 「语音处理」是实时互动领域中非常重要的一个场景,在「RTC Dev Meetup丨语音处理在实时互动领域的技术实践和应用」活动中,来自声网.微软和数美的技术专家,围绕该话题进行了相关分享. 本文 ...

  5. 声网 X 在线自习室 同学陪伴、老师监督的在线自习是如何火出圈的?

    实时互联网像触角一样,通过情景的共享延伸开来,链接着我们彼此的线下.线上生活,形成一张不可分割的网络.随着社交直播.在线教育.视频会议成为大众生活不可或缺的一部分的同时,智能手表.智能作业灯.视频双录 ...

  6. SpringBoot——拦截器

    更多内容,前往 IT-BLOG 一.登录时可能会出现重复提交问题.我们可以通过重定向解决此问题.例如:用户提交的请求为:/user/login,通过 redirect:重定向至 main.html请求 ...

  7. Kafka 消息送达语义

    更多内容,前往IT-BLOG 消息送达语义是消息系统中一个常见的问题,主要包含三种语义:[1]At most once:消息发送或消费至多一次:[2]At least once:消息发送或消费至少一次 ...

  8. Go接入kafka

    需要借助的库 github.com/Shopify/sarama // kafka主要的库* github.com/bsm/sarama-cluster // kafka消费组 生产者 package ...

  9. EX6新增的字符串

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 中心极限定理的模拟—R实现

    中心极限定理,是指概率论中讨论随机变量序列部分和分布渐近于正态分布的一类定理.这组定理是数理统计学和误差分析的理论基础,指出了大量随机变量近似服从正态分布的条件.它是概率论中最重要的一类定理,有广泛的 ...