基于搜索软件自动修复框架及其关键问题探讨.docVIP

  • 24
  • 0
  • 约5.74千字
  • 约 11页
  • 2018-08-29 发布于福建
  • 举报

基于搜索软件自动修复框架及其关键问题探讨.doc

基于搜索软件自动修复框架及其关键问题探讨

基于搜索软件自动修复框架及其关键问题探讨   摘 要:软件在开发和维护的过程中均可能产生软件缺陷,如果能够成功自动修复部分缺陷,则可以有效减少程序调试时间,避免损失。软件自动修复是一个新兴课题,尚存在很多需要解决的问题。本文首先介绍了软件自动修复的概念,并提出了基于搜索的软件自动修复的框架;接着,从缺陷定位、搜索策略、测试数据生成三个方面概括了基于搜索的软件自动修复面临的主要挑战,以及需要解决的一些关键问题;最后,总结全文并指出下一步的工作。所提框架及其关键问题的探讨,有助于软件自动修复技术的进一步研究和在工业生产中的推广应用。   关键词:基于搜索的软件自动修复;缺陷定位;测试数据生成   中图分类号:TP311 文献标识码:A   1 引言(Introduction)   对于有缺陷的软件,一旦发生运行故障或其他软件错误,需要及时的对源程序进行修复。在发现软件缺陷后,软件自?有薷词侵福?利用已有的程序补丁自动修复程序的过程[1]。具体而言,首先,识别可能存在缺陷的程序实体,其次,根据具有缺陷可能性的大小对可疑程序实体排序,并自动生成相关程序的补丁,接着,通过某种方法评估程序补丁的有效性,并选择正确的补丁。缺陷软件自动修复问题的研究具有极高的现实需求,可以有效减少程序调试时间,提高软件运行的效率,减少因缺陷带来的损失,因此,吸引了很多研究人员的关注[2-4]。   按照补丁生成的方式,软件自动修复的方法可以分为两大类:基于语义的修复方法和基于搜索的方法[4]。其中,基于搜索的方法是最早提出的一类软件程序修复方法[5]。该方法是一种“生成―确认”方法,将修复问题看成一个组合优化问题,运用元启发式搜索算法,在搜索空间内通过搜索生成候选补丁,并借助配套测试用例集对该补丁进行验证。基于搜索的软件自动修复能够利用已有的程序信息,并结合已有的软件维护技术,提供自动化的软件修复方案,易于部署和实施,在软件程序修复中占有重要地位。   已有的软件维护技术,例如缺陷定位,测试数据生成等,这些技术的应用降低了软件自动修复问题研究的难度,但是,如何更好地将上述技术应用到软件修复中,以及针对性的提高修复的效率,在该研究领域还需要解决很多问题。   在已有工作的基础上,提出和传统软件维护技术相结合的基于搜索的软件自动修复框架,指出其中需要解决的一些关键问题,并提出一些可行的解决方案,可以为从事软件自动修复研究提供参考。   2 基于搜索的软件自动修复框架(Framework of   automatic software repair based on search method)   软件修复首先需要确定软件缺陷位于源程序的位置,其次,采用合适的方法生成补丁,最后,还要评估生成补丁的有效性。自动性的修复工作除了需要源程序外,还需要有配套的测试用例集,并且测试用例集中至少包含一个运行结果未达预期的测试用例。一方面,需要测试用例集收集程序的执行频谱,定位软件的缺陷;另一方面,若修复方法生成的补丁可以使得配套的所有测试用例均能执行通过,则可以认为该补丁正确。基于此,软件自动修复工作可以分为三个方面:(1)缺陷定位,(2)补丁生成,(3)补丁验证。进一步,如图1所示,本文提出基于搜索的软件修复框架可以分为五个阶段,期望在充分使用传统技术的基础上,例如缺陷定位、回归测试等等,致力提高软件修复的效率。   该框架依托于源程序和已有的测试用例集,首先进行缺陷定位,得到可疑的程序实体队列;然后,取怀疑度最大的程序实体,确定测试相关的范围,并对已有的测试用例集更新,接着,采用搜索的方法生成相关程序实体的补丁;对于生成的补丁,通过回归测试的方法对补丁进行验证,如果回归测试通过,则修复工作结束,否则,继续依次取怀疑度最大的实体,迭代进行补丁生成和验证。若上述步骤没有得到正确的程序补丁,则修复失败。   3 基于搜索的软件自动修复关键问题(Key issues   in search based automatic software repair)   基于搜索的软件自动修复框架涉及很多软件测试或维护的关键问题,目前尚未存在有效解决方案的如表1所列,在现有的软件测试和维护技术的研究基础上,根据采用技术的不同,这些关键问题,涵盖以下三个方面:(1)缺陷定位,(2)搜索策略,(3)测试用例的质量。表1所列关键问题的解决将有助于提高基于搜索的软件自动修复效率。   3.1 缺陷定位   所谓缺陷定位,是指基于程序的结构和测试用例执行的轨迹,确定软件缺陷的位置。基于缺陷定位的结果,能够有针对性的修复程序,从而降低程序修复的成本。可以看出,缺陷定位是软件自动修复中的先决问题,只有能够将存在缺陷的程序实体识别出来,才能够根据定位的结果生成程序补丁。

文档评论(0)

1亿VIP精品文档

相关文档