当开发人员面对大量缺陷报告无从入手的时候,自动程序修复(Automatic Program Repair,APR)可以成功完成其中一些缺陷的自动修复,从而有效减少开发人员的程序调试时间.因此自动程序修复逐渐成为当前软件维护领域中的一个研究热点并取得...当开发人员面对大量缺陷报告无从入手的时候,自动程序修复(Automatic Program Repair,APR)可以成功完成其中一些缺陷的自动修复,从而有效减少开发人员的程序调试时间.因此自动程序修复逐渐成为当前软件维护领域中的一个研究热点并取得了一定的研究进展.该文通过对权威期刊和会议进行检索,搜集了100余篇相关论文,从现有自动程序修复的研究历程、该方法中的重要问题以及国内外相关研究团队及成果等几个方面对该领域进行了系统的总结.其中基于测试用例的自动程序修复方法是当前一种主流方法,其通过配套测试用例集来评估生成补丁的质量.论文将这类方法细分为三个阶段:软件缺陷定位阶段、生成补丁阶段和补丁评估阶段.其中软件缺陷定位阶段是自动程序修复的基础,其目标是尽可能精确识别出可能含有缺陷的语句.生成补丁阶段一般通过预先定义的修改操作对缺陷语句进行修改,代码修改操作在设定时可以考虑修复程序的自身代码、开源项目的代码或者问答网站中的知识等.补丁评价阶段则对生成的候选补丁进行评估,直到找到一个补丁可以使得所有测试用例均执行通过,并随后借助开发人员的人工分析进行最终确认.在上述三个阶段中,生成补丁阶段是自动程序修复方法的核心,论文将已有补丁生成方法细分为三类:基于搜索的方法、基于语义的方法和其他类型方法.其中基于搜索的方法在搜索空间内通过搜索生成补丁,并借助配套测试用例集对该补丁进行验证,经典的方法包括GenProg、PAR、AE、RSrepair等;基于语义的方法则借助语义信息来合成补丁,主要基于符号执行和约束求解,经典的方法包括SemFix、DirectFix、Angelix、Nopol等;而不属于上述两类方法的研究工作则被归于其他类型的方法,经典的工作包括基于问答网站和开源项目托管网站挖掘来生成�展开更多
文摘当开发人员面对大量缺陷报告无从入手的时候,自动程序修复(Automatic Program Repair,APR)可以成功完成其中一些缺陷的自动修复,从而有效减少开发人员的程序调试时间.因此自动程序修复逐渐成为当前软件维护领域中的一个研究热点并取得了一定的研究进展.该文通过对权威期刊和会议进行检索,搜集了100余篇相关论文,从现有自动程序修复的研究历程、该方法中的重要问题以及国内外相关研究团队及成果等几个方面对该领域进行了系统的总结.其中基于测试用例的自动程序修复方法是当前一种主流方法,其通过配套测试用例集来评估生成补丁的质量.论文将这类方法细分为三个阶段:软件缺陷定位阶段、生成补丁阶段和补丁评估阶段.其中软件缺陷定位阶段是自动程序修复的基础,其目标是尽可能精确识别出可能含有缺陷的语句.生成补丁阶段一般通过预先定义的修改操作对缺陷语句进行修改,代码修改操作在设定时可以考虑修复程序的自身代码、开源项目的代码或者问答网站中的知识等.补丁评价阶段则对生成的候选补丁进行评估,直到找到一个补丁可以使得所有测试用例均执行通过,并随后借助开发人员的人工分析进行最终确认.在上述三个阶段中,生成补丁阶段是自动程序修复方法的核心,论文将已有补丁生成方法细分为三类:基于搜索的方法、基于语义的方法和其他类型方法.其中基于搜索的方法在搜索空间内通过搜索生成补丁,并借助配套测试用例集对该补丁进行验证,经典的方法包括GenProg、PAR、AE、RSrepair等;基于语义的方法则借助语义信息来合成补丁,主要基于符号执行和约束求解,经典的方法包括SemFix、DirectFix、Angelix、Nopol等;而不属于上述两类方法的研究工作则被归于其他类型的方法,经典的工作包括基于问答网站和开源项目托管网站挖掘来生成�