本文共享自华为云社区《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(github.com/liuhuigmail… ),包括从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隶属于华为云,致力于综合使用软件分析、数据发掘、机器学习等技能,为软件研制人员供给下一代智能研制工具服务的中心引擎和智慧大脑。咱们将聚焦软件工程范畴硬核能力,不断构筑研制利器,持续交付高价值商业特性!参加咱们,一同开创研制新“境界”!(详情欢迎联络 mayuchi1@huawei.com;guodongshuo@huawei.com)

PaaS技能创新Lab主页链接:www.huaweicloud.com/lab/paas/ho…

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