Page 43 - 《软件学报》2021年第9期
P. 43
姜佳君 等:软件缺陷自动修复技术综述 2667
Fig.1 Distribution of publications over years Fig.2 Distribution of publications in venues
图 1 不同年份论文发表分布 图 2 不同会议或期刊论文发表分布
鉴于已有综述论文对部分相关文献已经有了相关介绍,本文在介绍不同类型的缺陷修复技术时将更加侧
重对 2016 年之后发表论文的介绍.但是,由于个别类型的自动修复方法主要集中在早期所发表的工作中(2016
年或之前),为了使得本文内容更加完整,以及更好地反映相关研究的发展脉络,本文中所介绍论文与已有综述
论文可能会存在少部分重叠.最终,本论文选取了 94 篇软件缺陷自动修复相关论文进行详细介绍,其中绝大多
数论文是所涉及领域的高质量会议和期刊,例如 ICSE 会议(21 篇)、ESEC/FSE 会议(8 篇)、POPL 会议(1 篇)、
CAV 会议(1 篇)、PLDI(1 篇)、OOPSLA 会议(1 篇)、ISSTA 会议(7 篇)、ASE 会议(8 篇)、TSE 期刊(10 篇)、
TOSEM 期刊(1 篇)、《软件学报》(3 篇).
综上所述,本文的主要贡献总结如下.
(1) 对国内外软件缺陷自动修复技术的最新研究进展进行了系统的分析和介绍;
(2) 提出了基于统计和分析的修复技术分类,对已有的技术分类进行了补充;
(3) 对当前自动修复技术所面临的挑战进行了系统的梳理,并总结了未来可能的研究方向;
(4) 总结了该领域常用的缺陷数据集以及开源工具,促进未来的研究.
本文第 1 节介绍缺陷修复的研究框架并概述缺陷修复的组成模块、修复流程以及修复工具的评价指标.
第 2 节对已有的基于测试或静态分析的缺陷修复技术进行详细介绍,并梳理和分析自动修复方法的演进方向.
第 3 节根据研究现状的介绍总结该领域研究所面临的挑战及对未来研究的启示.第 4 节对自动修复常用验证数
据集以及开源修复工具进行总结.最后,第 5 节对全文进行总结.
1 研究框架
(1) 缺陷修复过程
软件缺陷自动修复技术根据其修复的过程大致可以分为 3 个模块:缺陷定位(fault localization)、补丁生成
(patch generation)、补丁排序过滤以及验证.图 3 是目前主流缺陷修复技术的一般流程.
Fig.3 Automatic software defect repair research framework
图 3 软件缺陷自动修复技术研究框架