System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于软件测试与程序分析领域,尤其适用于软件测试中的测试断言生成领域,其目的在于更准确地自动生成高质量的测试断言,是一种帮助软件测试人员提高软件测试有效性,保障软件质量的方法。
技术介绍
1、单元测试在软件开发和维护过程中起着至关重要的作用,其目的是确保各个组件(例如,方法、类和模块)按照其指定的规范和使用要求执行。与评估系统整体性能的集成测试和系统测试不同,单元测试侧重于验证系统的每个单元是否按照开发人员的设计工作,从而在开发早期检测和诊断故障。此外,有效的单元测试可以提高软件生产代码的质量,降低软件故障的成本,方便调试和维护,以及增强软件系统的可靠性。标准单元测试通常由两部分组成,即(1)测试前缀,由一系列语句组成,通过操作被测单元使其达到特定状态,以及(2)测试断言,指定了该状态下的预期行为。
2、尽管单元测试有显著的好处,但手动创建有效的单元测试繁琐且耗时,以往软件开发人员通常将超过 15% 的时间用于生成单元测试用例。因此,目前大量的研究工作都致力于自动化测试生成,例如 randoop 和 evosuite 等自动化工具。然而,这些测试生成工具优先生成高覆盖率测试,而不是有意义的断言,并且在理解程序语义方面存在缺陷。例如,almasi 等人对 evosuite 生成的断言进行了工业评估,表明了与自动生成的断言相比,手动编写的断言在实践中更有效。
3、为了解决现有单元测试生成工具所遇到的问题,越来越多的断言生成(ag)技术被提出。这些ag技术可以分为三类:基于深度学习(dl)的方法、基于检
4、对此,本专利技术提出一种基于大模型(llm)和检索增强的单元测试用例断言生成方法,即 retrigen 该方法结合了混合断言检索器和基于 llm 的断言生成器。这种检索增强断言的生成利用了软件工程中的一个重要方法,即在实际开发场景中,开发人员通常会参考开源项目中的类似代码片段来帮助生成新的代码片段。特别是, retrigen 首先利用基于token的检索器和基于向量的检索器来考虑 test-assert 对的词汇和语义相似性。给定一个focal-test,两个检索器共同从外部代码库中搜索最相关的 test-assert 对。然后,retrigen 使用现成的 llm 作为生成器的基础模型,以 focal-test 源代码和检索到的外部断言作为输入来执行断言生成任务。
5、通过该方法,可以为测试断言的构建提供指导信息,进而提高测试用例集的生成质量,减轻软件研发人员的工作负担。
技术实现思路
1、本专利技术通过提供一种基于大语言模型和检索增强的单元测试用例断言生成方法,即 retrigen ,来有效解决目前存在的自动生成的单元测试断言有效性差的难题,进而帮助软件研发人员提高软件测试效率,保障软件质量。我们首先构建一个混合断言检索器,结合了基于token的检索器生成的词汇相似性和基于向量的检索器生成的语义相似性,以从外部代码库中搜索最相关的测试断言对。然后, retrigen 将断言生成视为 nmt 任务,并设计一个基于 llm 的断言生成器,首先使用来自开源项目的数百万个代码片段进行预训练,然后使用检索增强的标记对进行微调,即focal-test和检索到的断言作为输入,将正确的断言作为输出。最终,当给定一个focal-test,生成器能够根据其和检索到的外部相关断言预测出正确的断言。尽管 retrigen 在概念上可以推广到各种 llm,但我们在最近的代码感知模型 codet5 上实现了 retrigen 。
2、实验结果表明, retrigen 的准确率和codebleu分别达到57.66%和73.24%,表现优于所有现有方法,平均提升率分别为50.66%和14.14%。此外, retrigen 能够生成大量其他所有方法都无法生成的唯一正确断言。我们还证明,采用其他 llm 也可以提供实质性的进步,都能够获得较高的准确率和codebleu,这表明 retrigen 在实践中具有泛化能力。
本文档来自技高网...【技术保护点】
1.一种基于大语言模型和检索增强的单元测试用例断言生成方法,其特征在于,所提出的方法首先构建一个基于 token 的和基于向量的混合断言检索器,根据给定的一个focal-test 从外部代码库中搜索最相关的测试断言对。然后,所提出的方法设计了一个基于大语言模型的断言生成器,并且首先使用来自开源项目的数百万个代码片段对其进行预训练,然后使用检索增强的标记对进行微调,最终通过使用历史测试断言对和检索到的外部断言来预测正确的断言。
2.一种基于大语言模型和检索增强的单元测试用例断言生成方法,其特征在于,我们利用混合检索方法将基于 token 的检索器和基于向量的检索器结合起来,以综合考虑词汇相似性和语义相似性,检索出最相关的 Test-Assert 对,并指导断言生成器生成断言。在这个阶段,我们采用稀疏策略 IR 作为基于 token 的检索器,并根据 Jaccard 系数计算数据集D中 focal-test 与代码库C中的所有 focal-test 之间的词汇相似性。我们使用预先训练过的 CodeLlama 作为基于向量的检索器, CodeLlama 是一种高级预训练的
3.一种基于大语言模型和检索增强的单元测试用例断言生成方法,其特征在于,我们对断言生成器进行训练,以检索增强的 focal-test 为输入,即待生成断言的 focal-test和检索到的外部断言,以正确的断言补丁为输出,通过序列到序列的学习模式来学习从检索增强输入到断言输出的转换模式,从而当给定一个focal-test,能够生成正确的断言。
4.一种基于大语言模型和检索增强的单元测试用例断言生成方法,其特征在于,在生成模型训练良好后,以 focal-test 为输入,我们采用 beam search 集束搜索策略,根据词汇表的概率分布生成断言候选的排序列表。特别是, beam search 是一种常见的做法,通过根据估计的似然分数对前 k 个可能的标记进行迭代排名来选择几个得分最高的候选断言。可以通过将生成的候选断言与真实断言进行比较来自动评估其正确性,也可以由测试专家部署在单元测试管道中以手动检查。
5.一种基于大语言模型和检索增强的单元测试用例断言生成方法,其特征在于,我们提出的方法利用混合检索器来检索相关断言,并采用代码感知的大语言模型 CodeT5 作为断言生成器的基础模型。该框架是通用的,可以与不同的 LLM 集成。据我们所知,我们的方法首次尝试将外部检索代码库的进步与最近的 LLM 相结合,以完成关键的断言生成任务。
...【技术特征摘要】
1.一种基于大语言模型和检索增强的单元测试用例断言生成方法,其特征在于,所提出的方法首先构建一个基于 token 的和基于向量的混合断言检索器,根据给定的一个focal-test 从外部代码库中搜索最相关的测试断言对。然后,所提出的方法设计了一个基于大语言模型的断言生成器,并且首先使用来自开源项目的数百万个代码片段对其进行预训练,然后使用检索增强的标记对进行微调,最终通过使用历史测试断言对和检索到的外部断言来预测正确的断言。
2.一种基于大语言模型和检索增强的单元测试用例断言生成方法,其特征在于,我们利用混合检索方法将基于 token 的检索器和基于向量的检索器结合起来,以综合考虑词汇相似性和语义相似性,检索出最相关的 test-assert 对,并指导断言生成器生成断言。在这个阶段,我们采用稀疏策略 ir 作为基于 token 的检索器,并根据 jaccard 系数计算数据集d中 focal-test 与代码库c中的所有 focal-test 之间的词汇相似性。我们使用预先训练过的 codellama 作为基于向量的检索器, codellama 是一种高级预训练的 llm,适用于支持代码理解和生成任务的常见编程语言。与之前从头开始训练密集检索器的研究不同,我们直接使用 hugging face 的 codellama 检查点,而没有在我们的工作中进行任何微调,因为它已经用大量代码语料库进行了训练,以获得有意义的向量嵌入,用于单元测试场景中的查询焦点测试。首先我们将焦点测试的源代码拆分为代码标记列表,并利用codellama 将标记化标记转换为向量...
【专利技术属性】
技术研发人员:陈振宇,张犬俊,房春荣,
申请(专利权)人:南京慕测信息科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。