关注小智,了解更多华为云PaaS
随着大模型(Large Language Model, LLM)技术的发展,LLM在许多软件工程任务上表现出良好的效果,比如代码生成、搜索、对话等任务。近期,许多研究工作结合LLM技术和软件分析技术来解决软件工程领域的问题。软件工程顶级会议ICSE2023文章发布了LIBRO技术,是首个面向通用缺陷的自动重现工作。该技术有效利用大模型技术提升了缺陷重现技术的有效性,实现业界突破。
随着大模型(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
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
前言 本系列前面讲解了Spring的bean定义、bean实例化、bean初始化等生命周期。这些步骤使我们能够了解bean从创建到准备好使用所经历的过程。但是,除了这些步骤,bean的销毁也是非常重要的一步。在本系列的最后,我们将深入探讨bean的销毁过程,包…