在pe运行系统修复工具 (在pe运行系统修复工具在哪)

摘要

修复自动程序(APR)它是一个快速发展的领域,许多新技术正在开发,以解决最具挑战性的软件工程问题。APR 该技术表现出了希望的结果,总有一天该软件可以自行修复。本文主要研究 APR 评价技术的客观性能。我们介绍了解释性自动程序修复的新方法(E-APR),它确定了错误程序的特性,解释了为什么有一个特定的例子 APR 技术难。E-APR 用于检查大多数研究人员 buggy 分析现有程序的多样性和质量 APR 技术优缺点。E-APR 将有 bug 程序的实例空间可视化,每个都有 bug 所有的程序都表示为空间中的一个点。实例空间的构建揭示了困难和容易出错的程序领域 APR 识别技术的优缺点。

引言

软件看不见摸不着,但它有物理存在。如今,随着软件嵌入到许多设备中,软件故障不仅造成了不便,而且也造成了悲剧。例如,由于放射治疗机中可以避免的一个错误,患者因过量用药而死亡。最近的例子是谷歌的自动驾驶汽车,它在不到一年的时间里经历了 272 次故障。如果人们不干预,这些失败至少会导致 13 压死司机的事故。软件故障也是每年给全球经济造成巨大经济损失的原因 410 损失1亿美元。然而,由于软件系统的复杂性和规模的增加,修复软件故障正成为一项极其困难和昂贵的任务——占软件成本 90%。比如有车 1 预计这个数字将在不久的将来增加到亿行代码 2-3 亿。因此,软件修复的关键任务必须自动化。

修复自动程序(APR)软件工程研究中的重大挑战已被确定。许多 APR 方法在修复 bug 这方面表现出了很有希望的结果,只需要很少甚至不需要人工干预。尽管许多研究引入了各种研究 APR 技术(APRT),然而,在特定的软件系统中,如何使特定的技术工作良好(或不工作)仍有许多内容需要理解。APRT 有效性可能取决于问题,需要分析影响其有效性的软件特性,以帮助从业者为其软件系统选择最合适的技术。

此外,在选定的软件系统中,声称 APRT 未经测试的系统可能不会推广优于其他技术的结果。可能有一些软件系统 APRT 擅长,因为它利用了有缺陷程序的一些特殊特性。因此,理解预期 APRT 成功或失败的条件,成功或失败的条件至关重要。本文旨在解决 APRT 我们通过回答以下研究问题来实现这一目标:

Q1.什么影响 APRT 的有效性?引入新 APRT 或者在调查不同技术性能的实验研究中,通常基于一组精心挑选的错误程序。这些工作对缺陷程序的特征以及它们是如何与之相处的 APRT 对有效性相关性提供的见解很少。在 4 在本月发表的绝大多数作品中,只描述了新引进技术的好处,只有少数提到了其局限性或负面结果。

已在文献中讨论过 APRT 一些限制,如过度拟合的修复程序(由工具生成的修复程序,虽然是基于 oracle 正确性是有效的,但它们仍然不正确,并可能被引入 oracle 无法捕捉的新错误)。另一方面,到目前为止,文献中还没有调查过某些技术无法修复某些错误的负面结果。在本文中,我们的目标是找出缺陷程序的特定功能是否与 APRTs 有效性是相关的,以便深入了解为什么某些技术或多或少适用于某些软件和缺陷实例。通过提出一种分析 APRT 新的有效方法来实现这些观点。

Q2.APR 数据集有明显差异吗?APR 大多数研究使用著名的数据集,如 Defects4J,这可能导致技术定制解决特定问题,因此不能很好地推广到其他问题。本文旨在展示影响现有数据的数据 APRT 有效性特征的差异。这使我们能够理解现有的基准是否足够多样化 APR 压力测试技术的有效性。

Q3.如何选择最合适的? APR 技术?本研究的最终目的是调查机器学习技术 APRT 有效性的选择。我们调查了召回率、准确性和准确性,并报告了不同的多标签分类技术 f1 分数的有效性。

为了回答这些研究问题,我们引入了现有的新方法 APR 技术的优缺点。EAPR 灵感来自机器学习和基于搜索的软件测试(SBST)实例空间分析领域的早期工作.这些方法涉及机器学习和 SBST 不同算法中使用的客观性能评及问题实例选择的影响。扩展了这些研究中使用的方法 Rice 框架的目的是深入了解为什么某些算法或多或少适用于某些问题的例子。

E-APR 将 Oliveira 等人和 Munoz 等人的方法扩展到自动程序修复问题。E-APR 允许对现有 APR 对技术进行更客观的评估,有助于理解为什么会有一些 APR 有些技术是不可能的 bug 产生合理的补丁。我们对 130 个项目中的 2141 个 bug 和 23551 第二次修复试图应用我们的框架。E-APR 使用软件和 bug 特性来描述 bug 程序实例,了解哪些特性对 APRT 影响有效性。软件修复对人类程序员来说是一个挑战,因为修复 bug 这是一项困难的任务。虽然有些 bug 它可以简单地修复,但我们中的许多人可以记住一个 bug,被理解和修复需要几个小时甚至几天或几周的时间。深入了解如何选择我们的设计方法 APR 自动修复技术 bug 。

E-APR 框架

E-APR 框架有两个主要目标:帮助 APRT 设计师深入了解为什么某些技术或多或少适合修复有缺陷的程序,从而设计新的、更好的技术来解决任何具有挑战性的领域。并帮助软件开发人员选择最有效的软件系统 APRT。

E-APR 提供客观评价 APR 技术整体有效性的方法。它基于软件测试、机器学习和优化领域的实例空间分析和算法选择。实例空间分析的概念首先由史密斯迈尔斯介绍了优化问题的优缺点,并形成了 E-APR 方法的基础。理解 APR 为特定错误程序选择最合适的技术对技术的有效性至关重要,以避免 APR 反复应用技术。

上图给出了 E-APR 框架概述。E-APR 一组错误程序 p∈P 和 APRT 的集合 t∈T.对于每一个有缺陷的程序,APRTs 性能测量为 y(T,p),这表明该程序是否找到了合理的补丁。E-APR 第一步是确定缺陷程序的重要特征(f(p)∈F) 这对特定 APRT 影响难度。接下来,E-APR 构造 APRT (g(f(P)))∈

,表示每个 APRT 的强度。最后,E-APR 将机器学习技术应用于未来最重要的特征 APRT 所选模型。

1. Buggy 程序

Buggy 该程序是研究人员评估自动程序修复技术的软件实例。大多数 Java 的 APRT 使用 Defects4J。我们的实验是基于的 Durieux 实验数据等人生成。总的来说,我们考虑了来自 130 个项目的 2141 个 bug,以及 23551 二次修复试验。有修复试验 bug 执行程序 APRT。11 个 APRTs 对 5 所有修复试验的基准试验都要花费 314 天。本研究所考虑的补丁是可信的补丁。实现这些补丁:失败的测试用例可以通过,剩余的测试用例可以继续通过。这些补丁也被称为可信补丁。以前的工作表明,一个测试套件足够的补丁可以通过所有的测试,但它们仍然不正确。这些都是过度拟合的补丁,可能是由于合成补丁测试套件的缺陷造成的。过拟合检测还不成熟(即所有过拟合补丁都无法检测),因此在这项工作中可能会引入一定的偏差,因此我们考虑的是 RepairThemAll 修复工具生成的所有补丁。这意味着我们没有过滤掉它 APRT 输出。

bug 在基准测试中 bug 来源多样:Defects4J 和 Bugs.jar 它包含从软件存储库中提取的真实性 bug, Bears 包含从 Travis 在平台的破坏构建中收集的真实 bug, IntroClassJava 包括学生 bug 主题,QuixBugs 包括已知算法 bug 实现。

2. APR 技术

在本文中,我们关注一系列基于测试套件的修复方法。

2. APR 技术

在本文中,我们关注一系列的修复方法:基于测试套件的修复方法。该系列的修复方法旨在通过至少一个失败的测试用例进行修复 bug。这些方法的主要思想是利用失败的测试用例本地化潜在错误,然后突变源代码应用,直到程序满足所有单元的测试用例。应用于程序代码的突变可以从修改、添加或删除单个代码行等小变化挖掘到复杂的编辑操作,用于在不同的上下文中修复错误。我们在这篇文章中做到了 Java 程序使用了 11 类似于修复工具 Durieux 等人的研究。这些工具可以分为基于语义的修复工具(Nopol 和 DynaMoth)、基于元编程的工具(NPEFix)并生成和验证工具(ARJA、Cardumen、jGenProg、GenProg-A、jKali、Kali-A、jMutRepair 和 RSRepair-A)。

APR 该技术可根据其先进的修复策略进行广泛的分类。例如,jGenProg,ARJA 和 RSRepair-A 使用或基于遗传编程。其他技术采用,其他技术采用了更独特的方法 bug,例如,针对空指针异常 NPEFix。其他修复工具只能在代码以某种方式结构时工作 Nopol,它只在存在 if 条件起作用,只涉及补丁的变化 if 找到有效的补丁。这些观察进一步支持我们的假设,即每种技术的性能都可能受到代码特性的影响。不同的修复策略可能更喜欢不同的代码特性,不同的错误定位肯定会在错误类型的代码中表现不佳。

3. APRT 性能度量

一个 APRT 性能度量 y(t, p)将 APRT 输入特定缺陷程序产生的补丁。APRT 补丁的质量主要集中在各种性能测量上。在这项工作中,我们考虑测试足够的补丁。我们承认部分补丁可能是过度拟合的,即根据测试套件,有 bug 该程序可能已被补丁修复,但新错误可能已被引入。许多研究人员正在解决过滤正确补丁的问题。他们正在寻找自动化或半自动化过程的方法,因为通过自动程序修复技术手动检查所有生成的补丁是不现实的。E-APR 中的 APRT 补丁正确性等性能测量可以很容易地扩展到新的测量。

4. 重要特性

F-APR 一个关键步骤是识别有缺陷的程序实例的特征 APR 影响技术的有效性。特征取决于问题,必须选择暴露缺陷程序实例的不同复杂性、捕获软件系统的任何已知结构属性和不同的特征 APR 任何已知的优势和限制都与特征有关。

为了这项工作的目的,APR 如果能生成一个有漏洞的软件系统,技术是有效的。虽然已知和报告了许多与软件质量相关的特征,但我们必须考虑其他未知特征 APR 影响技术的有效性。另外,对于我们分离硬软件实例和简单软件实例的目标,并非所有已知特征都有用。候选人特征集可能包含冗余。这些特征测量了一个有缺陷的程序,要么相似,要么不相关,以暴露 APR 任务本身的困难。因此,必须选择一组相关特征。

学习重要特征有两个步骤:首先,我们定义如何测量特定特征集的质量,其次,我们使用遗传算法来选择最大限度地提高这个测量集。如果它们导致一个例子,特性子集被认为是高质量的 空间


电脑知识