在软件开发过程中,由于软件系统的复杂性和需求的不断变化,软件缺陷难以避免,这严重影响软件质量。因此,在软件发布之前及时修复缺陷变得至关重要。为提高软件质量、节省软件修复时间和成本,研究者们不断探索自动程序修复技术。近年来,基于模板和基于机器学习的自动修复方法已经取得显著进展,但这些方法仍存在一些问题。例如,自动挖掘模板修复方法中存在模板挖掘能力低导致模板质量差的问题,而机器学习修复方法中存在生成的补丁空间中不可编译补丁占比大、正确补丁排序不准确等问题。因此,本文将围绕以上问题展开自动程序修复方法的研究,主要工作如下:(1)针对基于模板的软件自动修复方法中模板挖掘能力低引起模板质量差的问题,本文提出一种基于机器学习的自适应泛化模板的自动程序修复方法GTML。首先,通过设计叶标签细化算法和上下文七行关联提取算法,有效提高缺陷信息表现和挖掘的准确性。其次,GTML将机器学习和聚类技术应用于缺陷集聚类,解决缺陷用例之间错误关联和泛化的问题,提高模板挖掘的准确性。最后,针对模板泛化信息丢失的问题,GTML融合统计信息泛化和层次泛化,并结合缺陷用例自身信息解决过度泛化问题,提升模板挖掘能力。通过实验证明GTML在软件自动修复任务中具有一定的模板挖掘能力和较高的缺陷修复性能。(2)针对基于机器学习的软件自动修复方法生成的补丁空间中不可编译补丁占比高、正确补丁排序不准确的问题,本文提出一种基于标识符感知的NMT模型的自动程序修复方法INAPR。首先,使用字节对编码技术来标记复合词和稀有词,生成更小但更准确的令牌集,解决补丁生成过程中正确令牌搜索困难甚至缺少的问题,以减少不可编译的补丁数量。其次,针对NMT模型中可编译补丁占比低的问题,使用自然语言处理任务中的T5框架,结合新的标识符感知任务来训练缺陷修复模型,同时在微调阶段融合缺陷修复模型和Co Nu T模型,以构建补丁正确率更高的缺陷修复模型。最后,提出令牌感知的波束搜索策略,模型生成补丁时选择得分高的令牌,从而提升高正确性补丁的排名,同时减少不可编译补丁。通过实验证明INAPR在软件自动修复任务中能够有效增加候选补丁空间中正确补丁数量,并提升缺陷修复性能。
暂无评论