【LLM for SE】顶会 ICSE-2023 发布 LIBRO 技术,利用大模型技术进行缺陷重现,自动重现率 (33%) 实现业界突破
随着大模型(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隶属于华为云,致力于综合利用软件分析、数据挖掘、机器学习等技术,为软件研发人员提供下一代智能研发工具服务的核心引擎和智慧大脑。我们将聚焦软件工程领域硬核能力,不断构筑研发利器,持续交付高价值商业特性!加入我们,一起开创研发新“境界”!(详情欢迎联系 mayuchi1@huawei.com;guodongshuo@huawei.com)
PaaS 技术创新 Lab 主页链接:https://www.huaweicloud.com/lab/paas/home.html
评论