首页 > 其他分享 >BugBuilder: 高质量大规模缺陷库自动构建方法

BugBuilder: 高质量大规模缺陷库自动构建方法

时间:2023-03-22 15:32:01浏览次数:49  
标签:修复 高质量 补丁 构建 自动 缺陷 BugBuilder Defects4J

摘要:本文提出并开发了高质量大规模缺陷库全自动构建方法BugBuilder,自动从版本控制系统中的人为编写的补丁中提取完整且精准的缺陷修复补丁。

本文分享自华为云社区《​​BugBuilder: 高质量大规模缺陷库自动构建方法​​》,作者:华为云软件分析Lab 。

1. 问题场景

由于各种原因,例如错误定位、软件测试、程序修复和缺陷预测,软件工程界的研究迫切需要大规模高质量的缺陷库。首先,现实世界的缺陷及其精准修复补丁对于严格评估许多自动或半自动的错误语句定位、软件缺陷数量预测以及错误应用修复方法必不可少。我们希望这些方法在现实世界的应用程序上能很好地工作,因此在这些方法广泛应用之前,必须使用大量现实世界的缺陷及其修复补丁进行评估。虽然可以通过自动变异或手动注入缺陷也可以用于评估,但他们可能与现实世界的缺陷有本质的不同,因此,根据它们得出的结论可能不适用于现实世界的缺陷。其次,有了实际缺陷及修复补丁,也可以激励研究人员提出发现、定位和修复软件缺陷的新方法。例如,通过分析大量现实世界的缺陷,研究人员可能可以找出什么样的语句更容易出错,因此他们可以在自动修复时尝试先修复此类语句,以提高程序修复的效率。再如,通过阅读人工编写的补丁,研究人员已经发现了许多常见的修复模式,并反过来利用这些模式显著提高了自动修复能力。最后,数据驱动和基于学习的程序自动修复和缺陷检测方法通常依赖大量不同的真实缺陷及精准补丁。值得注意的是,这些缺陷的质量,例如缺陷的多样性和补丁的准确性,可能会显著影响此类数据驱动方法的效果。

现有手动或半自动构建的缺陷库(如SIR、BugBench、Defects4J等)构建成本较高,缺陷规模和多样性非常有限。而全自动构建的缺陷库(如iBUGS和ManyBugs)所包含的缺陷的修复补丁质量存疑,往往包含与缺陷无关的代码变更(如重构)。

2. 我们的贡献

为解决上述问题,我们联合北京理工大学的刘辉老师团队合作共同提出并开发了高质量大规模缺陷库全自动构建方法BugBuilder,自动从版本控制系统中的人为编写的补丁中提取完整且精准的缺陷修复补丁。其工作流程如下图所示。

BugBuilder: 高质量大规模缺陷库自动构建方法_补丁

具体而言,对于每个缺陷修复提交,它的工作原理如下。

• 首先,识别重构操作。通过现有工具(即RefactoringMiner)识别缺陷修复提交中的重构操作,并将识别的重构操作重新应用于有缺陷的版本来去除重构。

• 其次,构造可能的修复补丁。通过枚举其余非重构变更的所有可能组合,自动生成所有潜在补丁。

• 最后,验证并选择补丁。通过执行测试用例来验证补丁的正确性,过滤掉那些未能通过测试的补丁。如果最终只有一个是有效补丁,则将其作为精准补丁。如果有多个补丁通过验证,则利用一系列启发式方法来选择最有可能的补丁(详细做法请参照论文[1])。

值得注意的是,如果人工编写的补丁由重构和缺陷修复组成,则BugBuilder会将其拆分为两个有序的补丁:重构补丁和缺陷修复补丁。这一点与Defects4J类似,Defects4J将人类编写的补丁拆分为与缺陷无关的补丁和缺陷修复补丁。

3. 方法有效性评估

本文从两个方面评估BugBuilder的有效性。

• 其一,将BugBuilder应用于Defects4J收集的809个真实缺陷修复提交中。对每一个提交,利用BugBuilder来自动提取精准补丁,如果得到了一个补丁,则将其与Defects4J中手动构造的补丁进行对比。在809个缺陷修复补丁中,BugBuilder自动生成了350个补丁,其中334个与Defects4J中手动构造的补丁完全相同。经人工分析,在剩下16个自动生成的补丁中有12个比Defects4J人工构造的补丁更完整更精确。只有4个是不准确的,主要原因是重构操作的检测不完整。可见,BugBuilder可以准确提取缺陷修复实例。

• 其二,应用上述方法构造了大规模的缺陷库GrowingBugs(​​https://github.com/liuhuigmail/GrowingBugRepository ​​),包含从169个广为人知的Java应用中自动收集的1916个真实缺陷及精准修复补丁。缺陷数量是著名缺陷库Defects4J的2倍多,且在持续增长中。

4. 总结

本工作所提出的方法使得全自动构造高质量大规模缺陷库成为可能。基于该方法构建的缺陷库也可以作为Benchmark来促进缺陷相关研究。

参考文献:

[1] Jiang Y, Liu H, Luo X, Zhu Z, Chi X, Niu N, Zhang Y, Hu Y, Bian P, and Zhang L. BugBuilder: An Automated Approach to Building Bug Repository[J]. IEEE Transactions on Software Engineering, 2022.

文章来自:PaaS技术创新Lab,PaaS技术创新Lab隶属于华为云,致力于综合利用软件分析、数据挖掘、机器学习等技术,为软件研发人员提供下一代智能研发工具服务的核心引擎和智慧大脑。我们将聚焦软件工程领域硬核能力,不断构筑研发利器,持续交付高价值商业特性!加入我们,一起开创研发新“境界”!

PaaS技术创新Lab主页链接:​​​https://www.huaweicloud.com/lab/paas/home.html​​​​​


点击关注,第一时间了解华为云新鲜技术~

标签:修复,高质量,补丁,构建,自动,缺陷,BugBuilder,Defects4J
From: https://blog.51cto.com/u_15214399/6142740

相关文章

  • 如何构建内部开发者门户:企业参考指南
    在之前的文章中,我们了解了内部开发者门户的基本概念。内部开发者是一个自助应用程序和数据存储,是一个集中的枢纽,为开发及管理人员提供对各种工具、资源、文档和工作流程的......
  • 首超500亿!高质量与可持续并行下,安踏的无限可能
    文|螳螂观察作者|易不二尽管环境动荡,以“单聚焦、多品牌、全球化”为核心发展战略的安踏,依然穿越了疫情与消费市场的不稳定,再一次交出了超市场预期的韧性增长成绩单。首超5......
  • 构建之法阅读笔记1
    一、我过去是怎么做的  过去,刚开始学C时,我还不知道这些编程语言能干什么用,而且老师也只是只讲课本知识,动手实践很少,导致现在回想大一时并没有什么收获可以回味。加上......
  • 构建之法阅读笔记1
    软件=程序+软件工程,程序就是算法和数据结构,而软件工程包括构建管理软件,源代码的管理,软件的设计,对软件质量测试的软件测试,项目管理,以及用户体验和用户界面设计等。程序是软......
  • #创作者激励#由一个编译参数引发的gn构建依赖图谱查询
    【本文正在参加2023年第一期优质创作者激励计划】(目录)起因事情的起因是这样子的,在给学生上课的时候,想演示一下kv存储(小熊派nano开发板),代码版本master,结果发现编......
  • 编写高质量c#代码的20个建议
    一。字符串操作:哪个效率更高。1.string装箱2.StringBuilder更高3.string.Format("{0}{1}{2}",a,b,c)更高二。默认类型转换:使用类型内部的方法转换;parse,tryparse,tostr......
  • 构建DevOps落地的自动化持续交付流水线的工具链
    DevOps流程涉及到需求管理(包括需求的任务管理、进度管理等)、持续集成、版本管理、代码编译、测试、配置管理和监控等多项工作任务。DevOps需要构建相应的工具链,将工作任......
  • 架构师成长计划|如何利用云原生构建一个企业级高可用架构
    Gartner报告指出,到2022年,有75%的全球化企业将在生产中使用云原生的服务化应用。不仅是互联网行业,制造、房地产、生物医药、政府等各行各业都将拥抱云原生技术。在这......
  • python爬虫如何构建基础爬虫思路
    对于长期游弋于大数据中的程序来说,正常来说基础爬虫有5个模块,通过多个文件相互间配合,然而实现一个相对完善的爬虫方案,以便于后期做更完善的爬虫方案做准备。这里目的是爬......
  • 从0到1构建springboot web应用镜像并使用容器部署
    文章目录​​一、生成镜像的两种方法​​​​1.1、使用commit生成镜像​​​​1.1.1、拉取Centos基础镜像​​​​1.1.2、启动Centos容器并安装Go​​​​1.1.3、commit生成......