英语原文共 11 页,剩余内容已隐藏,支付完成后下载完整资料
在实时软件缺陷预测中的类不平衡演化和验证延迟
摘要—实时软件缺陷预测是一种在软件变更级别进行缺陷预测的软件缺陷预测方法。大多数现有的JIT-SDP工作假设问题的特征随着时间的推移保持不变。然而,JIT-SDP可能会被类不平衡演化所影响。具体而言,问题的不平衡状态(即导致缺陷的变化被低估了多少)可能随着时间的推移而加剧或减少。如果出现这种情况,可能会使现有的JIT-SDP方法变得不合适,包括那些只使用最新数据随时间重新构建分类器的方法。因此,这项工作提供了首次关于类不平衡引发的问题是否对JIT-SDP构成威胁的调查。这项调查是在一个现实的场景中进行的,它考虑到了验证延迟,这是一个经常被忽视的事实,即标记的训练示例会延迟到达。基于10个GitHub项目,我们发现JIT-SDP存在类不平衡演化,严重阻碍了现有JIT-SDP方法的预测性能。与最先进的类不平衡演化学习方法相比,JIT-SDP方法的预测性能在g均值方面低了97.2%。因此,在JIT-SDP中解决类不平衡的演变问题是至关重要的。然后,我们针对JIT-SDP的具体情况提出了一种新的类不平衡演化方法。在保持顶级g均值的同时,这种方法成功地在缺陷诱导和干净类上产生了比最先进的类不平衡进化方法多63.59%的均衡召回率。因此,我们建议避免在JIT-SDP中过分强调一个类而忽略另一个类。
索引术语—软件缺陷预测、类不平衡、验证延迟、在线学习、概念漂移、集成
I .导言
减少软件缺陷的数量(及其高调试成本)是一个具有挑战性的问题,特别是考虑到软件团队的测试资源有限,[1],[2],并且经常面临快速交付的强大压力[1],[3]。因此,已经提出了机器学习方法来预测软件源代码[4]中的缺陷。这种软件缺陷预测(SDP)方法可能有助于更容易和更明智地分配测试和检查工作,将更多的注意力集中在可能包含缺陷的软件组件上。
及时(JIT)SDP是一种特定类型的SDP方法,它在软件更改级别进行预测。它可以在缺陷导致软件变更实现后立即识别(即“及时”)。由于开发人员对这些变化仍记忆犹新,他们的检查比后期容易得多。此外,软件变更通常涉及很少的代码行(即,它们具有精细的代码粒度),并且可以直接分配给正确的开发人员进行检查,从而进一步促进他们的任务。这些都优于(1)缺陷报告产生后的代码调试和(2) 更传统的软件缺陷预测方法,后者关注的是预测软件组件(如文件或包)中的缺陷[5]。因此,JIT-SDP引起了业界的特别关注。例如,朗讯公司[1]、黑莓公司[6]和思科公司[7]都采用了这种方法。
关于JIT-SDP的大多数现有工作都假设过去导致缺陷的软件变化总是与未来的相似。然而,正如麦金托什和龟井[8]号最近所显示的那样,导致缺陷的软件变化的特征(输入特征值)在软件的生命周期中波动。这些波动会对在旧数据上训练的分类器的预测性能产生负面影响,需要机器学习算法不仅能够考虑时序,而且能够随着时间的推移学习和适应。随着时间的推移,可以单独学习新训练示例的算法通常被称为在线学习算法[9]。
除了导致缺陷的软件变化特征的波动之外,JIT-SDP还可能受到类不平衡演化的影响。这意味着随着时间的推移,问题的不平衡状态(即,在训练数据中缺陷诱发软件变化的代表不足程度)可能会加剧或减少。JIT-SDP是一个众所周知的类不平衡问题,与干净的软件变更相比,导致缺陷的软件变更通常是少数([5],[7],[2])。然而,现有的工作假设JIT-SDP的类不平衡状态是静态的,即它不会随着时间而演变。如果它确实随着时间的推移而发展,现有的JIT-SDP方法(例如,[5]、[2]、[7]很可能随着时间的推移变得不合适(表现不佳),因为它们将假设错误的类不平衡水平。即使是最近仅使用最近的数据重建分类器的方法,也难以获得良好的预测性能,该方法被推荐用于应对导致缺陷的软件变化特征的波动([8)。尽管能够追踪类不平衡程度,但这是以丢弃旧的培训范例为代价的,这些范例对于学习少数类可能至关重要。因此,这不太可能是应对类不平衡演变的合适方法。
考虑到类不平衡演化对JIT-SDP分类器预测性能的潜在威胁,本工作的第一个目的是首先研究类不平衡演化是否发生,并对现有JIT-SDP方法的预测性能产生负面影响。我们的研究基于十个GitHub开源项目,揭示了类不平衡演化的确是JIT-SDP中的一个问题,并且从文献中可以对JIT-SDP方法的预测性能产生非常不利的影响。它们在g均值方面的预测性能比准备处理类不平衡演化的机器学习算法要差97.2%。因此,为了提高JIT-SDP方法的适用性,必须考虑类不平衡的演化。
然而,我们的研究也揭示了现有的机器学习算法的类别不平衡进化[10]遭受过分强调一个类别(缺陷诱导或清洁)超过另一个在JIT-SDP。这在实践中可能非常有害。过分强调干净类意味着可能会遗漏导致缺陷的软件变更。过分强调缺陷引发类意味着几个变更被错误地标记为缺陷引发,这意味着过多的干净软件变更需要开发人员仔细检查,从而降低了他们对该方法的信任。因此,本文的第二个目的是提出一种新的JIT-SDP方法来解决这个问题。我们提出的方法成功地获得了顶级的g均值,同时将缺陷诱导类和干净类之间的召回差异减少了高达63.59%。
我们的调查是在一个真实的场景中进行的,在这个场景中,不仅随着时间的推移会产生新的软件变更,并作为新的培训示例出现,而且还存在验证延迟。该术语指的是与培训示例相关联的标签延迟到达的事实,[9]。我们无法在提交时知道新的软件变更是否会导致缺陷。如果我们知道这一点,我们就不需要对此进行预测,JIT-SDP也就没有必要了。相反,发现缺陷需要时间,这意味着需要时间将“缺陷诱导”标签分配给给定的训练示例。一个人需要时间来获得一个给定变化是干净的信心。因此,我们需要等待一段给定的时间(等待时间),然后将标签“干净”分配给给定的培训示例。忽略验证延迟意味着在实践中尚未获得的数据上训练JIT-SDP模型,导致无效的研究和对预测性能的过于乐观的估计[7]。然而,正如谭等人[7]所警告的那样,这一问题经常被综合技援方案研究忽视。我们的研究首次调查了在JIT-SDP中验证延迟的程度。我们发现验证延迟导致接收导致缺陷的软件变更的真实标签的延迟从1年到11.5年(4210天)。
本文进一步组织如下。第二部分提出了研究问题,总结了本论文的创新贡献。第三节介绍相关工作。第四节介绍了建议的方法。第五节详细介绍了调查的数据集。第六节解释了研究RQs的实验设置。第七节介绍了回答RQs的分析。第八节对有效性构成威胁。第九节介绍了这项工作的结论和影响
二.研究问题和新贡献
总的来说,这项工作回答了以下研究问题:
RQ1在JIT-SDP中有多大的验证延迟?
JIT-SDP研究中合理的等待时间是多少?该RQ通过调查软件变更被发现为导致缺陷通常需要多长时间,为在本研究和未来研究中JIT-SDP的机器学习方法的建议和应用提供信息。
RQ2 JIT-SDP是否受害于类不平衡的演变?
更具体地说,在JIT-SDP中,导致缺陷的软件变更和干净的软件变更的比率会随着时间的推移而变化吗?怎么做?这个RQ调查类不平衡进化的主题是否真的与JIT-SDP相关。
RQ3如果在JIT-SDP中确实发生了类不平衡的演变,那是什么
当考虑验证延迟时,它对(1)现有JIT-SDP方法和(2)专门设计用于处理类不平衡引发的机器学习算法的预测性能有影响吗?该RQ揭示了现有JIT-SDP方法的预测性能是否受到类不平衡进化的负面影响,以及处理类不平衡进化的最先进的机器学习算法在JIT-SDP环境中的表现如何。
RQ4对于给定类不平衡发展和验证延迟如何提高准时生产计划的预测性能?
该RQ提出了一种新的JIT-SDP方法,以更好地应对存在验证延迟时的类不平衡演化。
总的来说,这项工作的主要新颖贡献是:
第一,表明在JIT-SDP中出现了类不平衡的演变;揭示这对预测性能有负面影响
第二,调查来自机器学习文献的最先进的在线类不平衡学习算法是否有助于在JIT-SDP中解决这一问题;
第三,提出一种新的在线类不平衡学习算法,以改进这些最新算法在JIT-SDP环境下获得的结果;
第四,调查在JIT-SDP中出现验证延迟的程度,使研究人员和实践者在将机器学习应用于JIT-SDP时能够做出更明智的选择
三.相关著作
我们讨论了与本文最相关的四个SDP研究领域,并对比了我们之前的工作。我们还讨论了机器学习文献在线类不平衡学习,以解决类不平衡演化和验证延迟问题。
- JIT-SDP
首批研究JIT-SDP方法的Kim等人[11],利用软件的变更特性,如添加和删除增量中的关键字、目录/文件名中的关键字、复杂性度量等,将变更分类为是否导致缺陷。
其他几项研究调查了导致缺陷的软件变化的特征和预测缺陷的潜在指标(输入特征),包括一周中的那一天[12]或一天中的时间[13]已经提交了更改,并且确定需要进行大量工作来确定更改的度量标准[14]Shihab等人 [6]研究了风险(缺陷诱导)的变化---被认为是这些做出变化的开发者带来的。他们发现增加的代码行、被触发的缺陷(即,被发现的缺陷与总变化的比率)、与提交相关的缺陷报告的数量以及开发人员的经验是风险变化的首要指标。
其中一个最大的JIT-SDP研究是由Kamei等人进行的[5].他们使用了从提交和错误报告中提取的多种因素,这些因素被认为是导致缺陷的软件更改的良好指标。他们表示,他们研究中使用的指标对开源和商业项目都有很高的预测性能。因此,我们在这项工作中使用相同的指标,如工具Commit Guru(http://Commit.Guru)提供的那样。用于创建这些度量的维度在第五部分中进一步解释。
以上论文均未考虑类不平衡演化或验证延迟。
- JIT-SDP中的中的验证延迟
如第一节所解释的,验证延迟指的是训练示例的标签到达的时间可能比它们的输入特征晚得多。忽略这种延迟意味着在实际中无法获得的数据上训练JIT-SDP模型,这对有效性是一个严重的威胁。Tan等人[7]发现忽略验证延迟会导致对预测性能的过度乐观估计。他们提出了一种考虑验证延迟的方法。它随着时间的推移存储新的一批培训示例,并使用迄今收到的所有批次来构建JIT-SDP分类。只有在经过预先定义的等待时间后,培训示例才可用于组成新批次。这个等待时间应该反映出一个人对软件变更不会导致缺陷足够自信所花费的时间。然而,他们的研究没有分析发现缺陷通常需要多长时间,他们提出的方法假设没有类不平衡的进化。与他们的工作不同,我们的研究(1)调查类不平衡演化及其对JIT-SDP分类器预测性能的影响(2)提出更好地处理类不平衡演化的方法,以及(3)调查软件变化被揭示为缺陷诱导通常需要多长时间。
- SDP中的概念漂移
概念漂移是数据生成过程中的一种变化,影响数据的潜在概率。它们可以是(1)描述示例的输入特征和被预测的标签之间的关系(p(x|y))或(2)被预测的每个类别的示例的比率(p(y))中的变化。在JIT-SDP中,这些对应于缺陷生成过程中的变化,并且可能由于软件项目的演进或成熟过程而发生。例如,开发团队最初可能专注于图形用户界面,然后转向实现业务逻辑,导致影响p(x|y)的概念漂移。或者,重构可能会影响导致缺陷的软件变化的速度,导致影响p(y)的概念漂移。类不平衡演化对应于类不平衡问题中影响p(y)的概念漂移。
很少有研究调查SDP中的概念漂移。Ekanayake等人[16]研究了四个开源项目,并表明SDP分类器的性能随着时间的推移会有很大变化,这表明SDP受到概念漂移的影响。本研究没有调查即时软件缺陷预测。最近,麦金托什和龟井[8]在JIT-SDP的特定背景下研究了影响p(x|y)的概念漂移的影响。他们考虑了三个开源项目,发现(一)JIT-SDP分类器在一年后会损失大量的性能,(二)导致缺陷变化的重要指标也会随着时间的推移而变化。为了解决这种概念漂移,他们建议在只包含最近软件变化的滑动窗口上重建JIT-SDP分类器。据我们所知,这是第一次研究JIT-SDP中的概念漂移。
但是McIntosh 和Kamei [8]没有调查类不平衡的演化,这需要不同的策略来避免预测性能的降低[15].他们建议的滑动窗口策略甚至会对这种情况下的预测性能产生不利影响。这是因为,尽管能够跟踪类不平衡的程度,但这是以放弃学习少数类的潜在重要信息为代价的。因此,滑动窗口不太可能适用于处理类不平衡的演变。此外,他们的工作没有考虑验证延迟,含蓄地假设训练样本的标签在发布后立即可用。
Tan等人[7]研究了可更新学习场景中的JIT-SDP,在该场景中,随着时间的推移,可以接收更多的训练示例。然而,他们的可更新类假设所有的训练样本都来自相同的基本概率分布,即他们假设没有概念漂移。正如Ditzler等人所解释的那样[9],在存在概念漂移的情况下学习需要“能够监测和跟踪潜在变化的方法,并相应地调整模型以适应这些变化。”Tan等人研究的方法[7]不符合这些要求。
- SDP中的类不平衡
SDP是众所周知的一个类不平衡的问题。许多研究认为这个问题是独立于它的中心主题与否的。Mahmood等人[17]研究表明,随着数据越来越不平衡,SDP分类的预测性能越来越差(以马修斯相关系数衡量)。Wang和Yao[18]提供了一个在SDP背景中的有关类不平衡的全面的研究,包括重采样(resampling),阈值移动(threshold moving),和集成(ensemble)。他们的研究,基于平衡性,g-均值,和模型评估指标(AUC,即ROC曲线下的面积)的表现,得出一个名为AdaBoost.NC的集成方法使得它的整体预测性能最好。他们还提出了一个版本的AdaBoost.NC可以自动调
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[254508],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。