Page 42 - 《软件学报》2021年第9期
P. 42
2666 Journal of Software 软件学报 Vol.32, No.9, September 2021
proposed the category of statistical-analysis-based APR for the first time based on the most recent publications, which complements and
improves existing taxonomy. Based on existing techniques, the key challenges and insights are summarized for future research. Finally,
benchmarks and open-source APR tools are briefly summarized for reference.
Key words: software maintenance; software quality assurance; program repair; program debugging; software automation
软件缺陷(software defects)在软件的开发过程中是不可避免的,特别是随着现代信息技术的迅速发展,软件
规模在不断增加,软件缺陷的数量也在随之增加.软件缺陷会破坏程序的正常执行,使得程序在某种程度上不能
满足其既有的功能要求.严重的软件缺陷不仅会造成企业的重大经济损失,甚至会对人们的生命安全造成重大
威胁.因此,及时修复程序中的缺陷十分重要,已经成为软件维护中的一项重要任务.对 Linux 开发者的一项调查
[1]
研究表明,在程序的开发过程中大约一半时间是用在了缺陷修复上 .然而,修复程序中的缺陷不仅耗时,且容易
[2]
出错.研究表明:开发者在修复软件缺陷时,有可能会引入新的程序缺陷 ,使得软件缺陷的修复变得更加困难.
软件缺陷自动修复(automatic software repair)技术有希望将开发人员从繁重的修复任务中解脱出来.从
2009 年开始,软件缺陷自动修复技术成为了一个热门的研究方向,吸引了来自软件工程(software engineering)、
程序语言(programming language)、人工智能(artificial intelligence)、形式化验证(formal verification)等多个社区
的大量研究人员.已有研究提出了一系列的软件自动修复技术,综合使用了软件分析(software analysis)、启发式
搜索(heuristic search)、程序综合(program synthesis)以及机器学习(machine learning)等多种技术手段.缺陷自动
修复技术根据程序中的测试或者通过静态分析技术等获取程序的规约(specification)信息,并基于此定位程序
中出错的代码位置,最后采用不同的技术手段尝试生成修复代码使程序满足规约要求.
在过去的 10 多年中,大量的缺陷自动修复技术被提出.为了对该研究问题的进展进行系统地归纳总结和分
析比较,本文搜集了最近 10 多年(2009~2020)发表的关于缺陷自动修复的相关论文并进行了梳理.我们采用谷歌
学术搜索、ACM Digital Library、IEEE Explore、Springer、Elsevier 以及 CNKI 等搜索引擎和数据库,并且使用
“program/software/fault/bug/defect repair/fix”“软件修复”和“程序修复”等关键字进行检索,并要求论文发表时间
自 2009 年至今.同时,我们结合缺陷自动修复的共享主页(http://program-repair.org)对搜索结果进行了补充.该主
页记录了大部分与软件缺陷自动修复技术相关的已发表论文,涉及新的修复技术以及相关的实证研究
(empirical study)等.最后,对于每一篇论文,我们通过人工筛选过滤掉无关论文以及少于 5 页的短文.最终,我们一
共搜集到了 186 篇程序缺陷自动修复相关的论文.
图 1 展示了从 2009 年~2020 年每年的论文发表数量统计,其中包括会议论文 149 篇,期刊论文 37 篇.从图
中数据可以发现,该研究领域论文发表数量呈逐年增加的趋势.仅在 2018 年,就有 36 篇相关的论文发表.该数据
表明,程序缺陷自动修复领域的研究热度在不断增加.我们又进一步对论文发表的会议和期刊进行了统计.图 2
列出了在过去 10 年里,不同会议和期刊上所发表的相关论文数量,其中,“others”分类包含了所有仅包含一篇论
文的会议和期刊,JoS 和 SCIS 分别代表期刊《软件学报》和英文版《计算机科学》.从图中数据可以发现:相关
论文主要发表在软件工程领域的高质量会议和期刊上,如 ICSE 和 TSE 等.此外,在形式化验证(如 CAV)以及编
程语言(如 PLDI 和 POPL)等高质量会议上也有相关论文发表.
[3]
事实上,早在 2016 年,武汉大学的玄跻峰教授等人 就已经对软件自动修复方法的研究进展进行了分析和
总结.并在此之后,先后有多篇综述论文发表 [1,2,4−6] .但由于上述论文发表时间比较早,它们主要针对 2017 年之前
的相关研究进行了详细介绍,且大部分论文发表于 2016 年及之前.根据图 1 中的统计数据分析可以发现,大概一
半的论文在 2017 年~2020 年间发表.在此期间,研究人员提出了一些新的方法和思路.特别地,随着最近几年人工
智能领域的迅速发展,一些智能化的新技术也被应用到缺陷修复领域中 [7−10] .因此,本文旨在对目前已有的缺陷
自动修复技术进行一个更加全面的总结和分析,并对已有技术进行系统性分类.此外,基于目前该领域的研究现
状,本文提出该领域研究的可行思路以及面临的挑战,为未来的研究提供指导.