随着大模型(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