编辑: hys520855 2013-05-06

修改时间: 2018-06-13;

采用时间: 2018-09-02 李斌 等:程序自动修复:关键问题及技术

245 complete specifications repair. The various specific repair problems and research progress of the semi-complete specifications repair problem are collated. Finally, the opportunities and challenges faced by automatic program repair are analyzed. Key words: automatic program repair;

static analysis;

program specification;

patch generation;

test suite 由于现代程序规模和复杂度(scale and complexity)的上升,程序错误(program error)不可避免地存在且数量 逐年上升.传统维护面临成本和维护能力不足、不可控条件下无法维护等诸多问题,这使得程序错误修复这一 问题上升到新的高度,程序自动修复技术(automatic program repair)应运而生并成为研究热点. (1) 传统维护面临成本和维护能力不足问题 统计表明,软件维护占用了软件开发成本的 50%~75%[1] ,其中,成本消耗最大的就是程序错误定位和修复.

2006 年,Mozilla 公司的维护人员发现:每天有大约

300 个软件错误发生,其规模远远大于 Mozilla 公司的处理能 力[2] .现在软件发布越来越快,软件维护周期越来越短.面对越来越多的软件错误,许多公司开始寻求外部开发者 的帮助,甚至通过悬赏的方式寻求缓解日益增长的软件错误问题.例如,著名 IT 公司 Mozilla[3] 、谷歌[4] 为较高安 全等级的软件错误修复设立了专门的奖励基金,微软也建立了赏金计划[5] . (2) 不可控条件下无法维护问题 由于软件逻辑设计复杂性和运行环境的限制,当软件发生错误时,维护人员可能无法远程修复该类错误.在 航天领域中应用的软件系统,当卫星、航天飞船等空间飞行器与地面的通信联络中断时存在不可控的情况.例如,2005 年,NASA 发射的 深度撞击 号探测器由于重置探测器计算机遇到一个软件通讯的小故障,使得该探测 器处于失控状态.地面控制人员无法发送指令修复程序错误,最终,美国航天局宣布探测器电池耗尽已经死亡[6] . 程序自动修复是一个飞速发展的研究领域,为了方便研究人员进入该领域并充分了解研究现状,国内外学 者已形成多篇研究综述.其中,在2016 年,已有国内学者玄跻峰等人对程序自动修复方法及实证研究基础进行 了总结[7] ,但是该综述文章将研究对象限制在基于测试集的程序自动修复方法范畴,仅仅分析和梳理了

2015 年8月之前基于测试集的程序自动修复方法和修复的实证基础研究进展.2017 年,国内学者王赞等人[8] 在综述性 文献[7]的基础上进一步对修复方法进行分类总结,新增的

38 篇研究文献主要集中在

2016 年底之前的研究成 果.该综述梳理了缺陷定位、补丁生成和补丁评价这

3 个阶段的程序自动修复研究成果,同时总结了该领域已 有的 benchmark 缺陷库、 修复工具和活跃的研究团队.国外学者 Claire 等人[9] 早在

2013 年就发表了回顾型论文 (review),主要分析了该团队的核心研究工作 GenProg 方法的创新和不足,以及当时程序自动修复研究领域面临 的挑战.2018 年,国外学者 Martin 等人[10] 主要对

2016 年底之前(除了

1 篇AAAI

2017 对编译错误进行修复的研 究文献)程序自动修复和程序动态容错两个领域的研究成果进行梳理和总结,将研究对象上升到软件自动修复 (automatic software repair)的范畴. 与该领域国内[7,8] 、国外[9,10] 已有的研究综述相比,我们的工作有如下不同. 首先,我们从一个新的角度对程序自动修复技术领域进行了分析,以问题为导向,分析技术逻辑关系更加自 然.现有的综述更倾向于对已有的程序自动修复技术在方法层面进行梳理和分类总结,阐述的是具体方法和具 体问题以及相互的异同.比如,玄跻峰等人[7] 将基于测试集的程序自动修复方法划分为基于搜索、 基于代码穷举 和基于约束求解这

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题