买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!
申请/专利权人:南京大学
摘要:本发明提出了一种基于大语言模型的完型填空式复杂测试输入生成方法。该方法利用大规模预训练的语言模型,将软件测试输入的构造问题转化为一个完型填空的任务。通过将复杂测试输入中的部分内容遮盖住,然后使用大语言模型填充缺失的输入单元,可以有效检测出潜在的缺陷。这种方法的优势在于不需要事先构建复杂的语法规则或模板,而是通过利用语言模型的强大语言理解和生成能力,能够生成合法且多样化的复杂测试输入。同时,由于语言模型可以对大量的文本数据进行预训练,因此可以较好地捕捉到不同软件测试输入的特性和行为,可以有效地辅助测试人员发现复杂软件系统中的潜在问题。
主权项:1.一种基于大语言模型的完型填空式复杂测试输入生成方法,其特征在于使用大语言模型来自动化地生成拥有触发复杂基础软件系统缺陷能力的测试用例,通过监测被测软件系统的状态、分析其输出结果进行验证,也可通过分析同一软件系统的不同实现所得到的输出来检测其中的缺陷。也就是说,该方法支持软件系统的自验证,也适用于差分测试的场景。该方法能够自动化地检测出复杂软件系统中的缺陷,有助于提高软件系统的正确性与可靠性。本方法主要包括下列步骤:1构建数据集:构建数据集时,可以直接利用已有数据集,也可以设计爬虫程序获取被测系统对应的软件开源仓库中的测试输入,并在此基础上进行数据清洗和数据扩增。软件开源仓库中的部分测试用例包含触发其缺陷的关键元素,可以帮助模型学习到如何生成能够有效触发被测系统缺陷的输入特点,有效检测其中的缺陷。2微调模型:为了使得大语言模型可以生成被测软件系统需要的代码,需要对原有的大语言模型进行微调。微调是一种迁移学习技术,即针对特定任务要求对预先训练好的模型进行进一步训练。需要注意的是,这一步的大语言模型可以是任何生成式的预训练大语言模型。将步骤1中的数据集作为训练样本,使用字节对编码BPE对数据集中的代码进行编码,从而进行微调。为了适应硬件资源受限的情况,可以仅对模型的部分层进行训练,可使用不同优化器加快模型收敛速度。3完型填空策略生成测试用例:通过完型填空的策略生成新的测试用例。从数据集中随机选择一个初始种子,对其进行轻量化的分析和处理,例如针对rust程序,可以提取其中的括号结构“”、“[]”、“{}”和“”等,将括号中的内容用“<insert”标记进行替代,利用微调后的大语言模型根据代码上下文对“<insert”标记所在的位置进行填充,生成新的测试用例。对于SMT测试输入,可以将公式中的部分子公式替换“<insert”标记,再使用大模型进行填充补全。在该过程中,可以通过改变大语言模型的温度参数,或者构建不同的模型提示来生成多样化的测试用例。4通过编译输出来判断缺陷并通过堆栈信息进行重复缺陷的过滤:通过被测系统的输出来判断缺陷。这里,该方法能够检测的基础软件系统中的缺陷主要包括以下几类:1程序崩溃或内部错误:程序发生assertionviolation或者segmentationfault等错误导致求解器不正常地终止,以及编译器发生内部错误,即“InternalCompilerError”;2性能缺陷:当系统软件一直处于运行状态而始终无法输出结果,则说明是一个潜在的性能缺陷;3正确性缺陷:被测软件给出错误的输出结果。当被测系统具有两个或以上的不同实现时,可以通过检查不同实现所得输出是否一致来判断其中是否存在缺陷。例如针对编译器而言,如果编译器所产生的可执行文件在相同输入下的执行结果不一致,说明编译器中存在正确性缺陷。若发现任何一种可能的缺陷,则保存触发该缺陷的输入包含测试用例及对应命令以及相应的输出,以便后续审查。对于触发错误的测试用例,需要搜索错误数据集:如果堆栈跟踪信息或时间经过信息与错误数据集中的条目相匹配,放弃该测试用例;如果不匹配,将相应的堆栈跟踪信息或时间经过信息添加到错误数据集中,执行更新,并标记测试用例,以生成错误报告。最后将触发缺陷的测试用例存储到代码数据集中,以丰富后续迭代的代码数据集。通过这一过程,消除了重复缺陷对方法的影响,确保了新缺陷的检测。
全文数据:
权利要求:
百度查询: 南京大学 一种基于大语言模型的完型填空式复杂测试输入生成方法
免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。