摘要:本文围绕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. c++实现类似python的map一样,批量操作一个vector的功能【python一样写c++、三】

    python里有一个东西,叫map. 它可以实现像这样,对list每个元素进行操作,并返回新的list(python3是迭代器) 像这样 a=list(map(int,input().split()) ...

  2. 认证全家桶(Cookie、Session、Token、JWT)

    什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证明"你是你自己"(比如:你每天上下班打卡,都需要通过指纹打卡,当你的指纹和系统里录入的指纹相匹配时,就 ...

  3. RPA的数字化标签

    随着中国经济的飞速发展,"人口红利"也正在不断消失,在过去几十年中,我们已经看到了各种智能化.自动化技术的进步对各行各业产生的巨大影响.但在现代金融行业中,仍然有许多重复.简单.繁 ...

  4. vulnhub靶场之HACKSUDO: SEARCH

    准备: 攻击机:虚拟机kali.本机win10. 靶机:hacksudo: search,下载地址:https://download.vulnhub.com/hacksudo/hacksudo-sea ...

  5. 17.explicit关键字

    c++提供了关键字explicit,禁止通过构造函数进行的隐式转换.声明为explicit的构造函数不能在隐式转换中使用. [explicit注意] ● explicit用于修饰构造函数,防止隐式转化 ...

  6. NOIP2022游记

    NOIP2022游记 今年是第二次考NOIP了,去年第一次考的时候没学过什么东西,混了个省二.今年以高中生的身份考,不仅仅是要省一,还得拿个不错的名次,任务不小. 考试当天早上校园里的雾很大,不知道会 ...

  7. Windows系统下载最新版Windows10 iso映像

    在电脑PC端如何下载最新版的完整Windows10 iso映像?打开https://www.microsoft.com/zh-cn/software-download/windows10/页面,是不能 ...

  8. 第四部分:Spdlog日志库的核心组件分析-logger

    Spdlog是一个快速且可扩展的C++日志库,它支持多线程和异步日志记录.在本文中,我们将分析Spdlog日志库的核心代码,探究其实现原理和代码结构. Spdlog的基本架构 上一篇文章介绍了spdl ...

  9. 全网最详细中英文ChatGPT-GPT-4示例文档-复杂函数快速转单行函数从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

    目录 Introduce 简介 setting 设置 Prompt 提示 Sample response 回复样本 API request 接口请求 python接口请求示例 node.js接口请求示 ...

  10. 系统评价——层次分析法AHP的R语言实现(四)

    对一个事物的评价往往会涉及多个因素或者多个指标,评价是在多个因素相互作用下的一个综合判断.多指标综合评价方法具有以下的特点:包含若干个指标,分别说明被评价对象的不同方面,评价方法最终要对被评价对象作出 ...