买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!
申请/专利权人:南京大学
摘要:本发明提出了一种大模型赋能历史缺陷用例掩蔽填充的编译器测试技术。通过把编译器测试输入的构造问题转化为一种完型填空任务,利用编译器历史缺陷用例,掩蔽其中的部分代码,利用大型预训练语言模型来重新填充这些被掩盖的输入单元,以生成缺陷检测能力强的新的测试输入。通过这种方式能够有效生成缺陷检测能力强和多样性高的测试输入,从而对编译器中隐藏的缺陷进行有效检测。其主要优势在于,该方法无需事先人工构建复杂的语法规则或变异策略,而是依靠语言模型的代码理解和生成能力,自动生成合法且多样化的复杂测试输入程序,从而提升编译器的测试效率。
主权项:1.一种大模型赋能历史缺陷用例掩蔽填充的编译器测试技术,其特征在于使用大语言模型来自动化地生成拥有触发目标编译器缺陷能力的测试用例,通过编译器在编译这些测试用例时是否触发了崩溃类问题和挂起类问题进行验证,以检测目标编译器中的缺陷。也就是说,该方法支持目标编译器的自验证,解决了部分编程语言中由于缺少对标编译器而无法差分测试编译器的关键挑战。该方法能够有效检测编译器的缺陷,有助于提高被测试的编译器的正确性与可靠性。本方法主要包括下列步骤:1搜集历史缺陷用例并通过数据扩增构建数据集:构建一个网络爬虫,获取目标编译器项目缺陷追踪系统中某个issue的历史触发缺陷的代码片段,在提取代码片段的时候,需要选择状态为关闭closed的缺陷。使用正则表达式提取issue中的代码,使用分析器进行过滤,去除空代码以及一些被错误的markdown语言标记的代码段。将提取出的代码片段用抽象语法树AST进行表示,通过AST的随机重组和切片得到数据扩增后的数据集。2微调模型:为了使得大语言模型可以客制化地生成测试特定编译器需要的代码,需要对原有的大语言模型进行微调。具体来说,需要使用微调技术来改进特定编译器错误的代码生成任务。微调是一种迁移学习技术,即针对特定任务要求对预先训练好的模型进行进一步训练。需要注意的是,这一步的大语言模型可以是任何生成式的支持被测编译器编程语言的预训练大语言模型。将步骤1中的数据集作为训练样本,使用字节对编码BPE对数据集中的代码进行编码,从而进行微调。为了适应硬件资源受限的情况,可以仅对模型的最后3层进行训练,使用Adam作为优化器加快模型收敛速度。最终微调后的大语言模型能够从种子代码片段生成新的测试程序。3利用历史触发缺陷的测试用例进行特定位置的掩蔽和填充以生成新的测试用例:从数据集中随机选择一个代码段,利用DFS来提取历史触发缺陷地测试用例中嵌套的括号结构,将括号中的内容用掩码进行掩蔽,再利用微调后的大语言模型进行填充,生成新的测试用例。另外,需要通过分析代码上下文中是否存在感兴趣的关键字判断依据来自于对历史触发缺陷代码的文本统计,根据关键字感兴趣的权重,来决定修改模型的temperature参数以及重新填充的次数。这样做可以尽可能保证生成更多更有可能触发缺陷的新的测试用例。4通过编译输出来判断缺陷并通过堆栈信息进行重复缺陷的过滤:输入测试用例,通过监视编译过程中的异常行为以及异常输出来判断缺陷并通过堆栈信息进行重复缺陷的过滤。本发明主要是检测编译器崩溃类和挂起类的缺陷,功能性的缺陷的检测也同样适用。其中崩溃类问题是目标编译器严重的内部错误,当编译器在编译结果中输出特定提示或者以指定异常代码退出时,即表明这是一个崩溃类问题;挂起类问题是另一个关于目标编译器编译效率或陷入死循环状态的缺陷,当编译器一直处于编译状态而无法输出编译结果无论正确或错误,表明编译器陷入了一个挂起类问题。本发明中,将生成的测试用例作为目标编译器的输入,通过判断编译器是否出现崩溃类或挂起类问题来判断编译器的缺陷。根据设计需要将触发崩溃类缺陷的测试用例的堆栈跟踪信息收集到崩溃类缺陷数据集,并将触发挂起类问题的测试用例的时间占用信息也收集到挂起类缺陷数据集。对于触发缺陷的测试用例,需要搜索缺陷数据集;如果堆栈跟踪信息或时间占用信息与缺陷数据集中的条目相匹配,则认为该测试用例触发了重复的缺陷;如果不匹配,将相应的堆栈跟踪信息或时间占用信息添加到缺陷数据集中。最后将触发缺陷的测试用例存储到代码数据集中,以丰富后续迭代的代码数据集。通过这一过程,消除了重复缺陷对方法的影响,确保了新缺陷的检测。
全文数据:
权利要求:
百度查询: 南京大学 一种大模型赋能历史缺陷用例掩蔽填充的编译器测试技术
免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。