Personalized Defect Prediction

题目: Personalized Defect Prediction
作者: Tian Jiang, Lin Tan, Sunghun Kim
单位: University of Waterloo, Hong Kong University of Science and Technology
出版: ASE, 2013

解决的问题:personalized change classification

以往的缺陷预测模型多数是以文件为单位,本文的方法以代码的change为单位,对每次change进行分类(clean or buggy)
提出代码缺陷可能与代码的开发者有关,首次为每个开发者单独构建缺陷预测模型

局限性

文中提到的局限性全部与实验有关。

本文实验所用的工程全部是开源工程,因此不能确保本文结论对不开源工程同样适用。
虽然我们选取了有高质量commit log的工程作为数据集,但其中的bug信息仍旧含有少量噪声(commit log中的bug fix条目并不是修改bug)
实验中对于开发者的选取和对每个开发者change的选取可能影响到试验结果

方法

本文的PCC(personalized change classification)方法是在传统的CC(change classification)方法的基础上进行改进。传统的CC方法过程如下:

通过挖掘工程的revision history,将代码的每次change标记为有bug(buggy)或无bug(clean)
从代码变化中抽取特征,例如词袋。为提升性能我们还添加了一种叫特性向量(characteristic vector,不知道怎么翻译)的特征。
使用分类算法构建分类模型
利用模型来预测新的改变是否含有bug

buggy change标记

首先识别出修改bug的change,通过这些change定位到bug的位置。再通过诸如git blame等命令得到最近修改含bug的代码行的change,这些change就是引入bug的change。

特征抽取

我们抽取三类特征:特性向量,词袋和元数据

特性向量:表示抽象语法树中每种结点的数量,我们用DECKARD的方法抽取引入bug前和引入bug后的特性向量,将两者的区别作为我们的特征。
词袋:因调用了错误的函数而引入的缺陷无法通过特性向量表示,因此我们添加词袋作为我们的特征。我们利用Weka和Snowball stemmer将字符串切分为词向量。我们将提交信息和源码都做此处理。
元数据:除上面两种特征之外,我们还收集了开发者,提交时间(0, 1, 2, …),提交日期(星期一, …, 星期日),change总数,引入bug的change总数,源码文件/路径名,文件“年龄”(参照Kim et al.)作为特征。

分类

我们利用ADT,朴素贝叶斯和逻辑回归进行分类。我们的目的不是得到最好的分类算法,而是将传统CC和PCC的效果进行对比。

MARS

除了CC我们还引入了另一条基准线:多元自适应回归(MARS),我们利用商业机器学习框架Orange来实现MARS。

PCC

除为每个开发者构建单独的模型外,PCC的步骤与CC严格一致,所选特征完全相同。

PCC+

为进一步提升性能,我们提出了两种集合PCC与CC的方法:加权PCC和PCC+。加权PCC是在PCC的基础上加入其他开发者的change数据,并把这些数据赋予较小的权重。PCC+是在CC,PCC和加权PCC的三个预测结果中自动抽取置信度最高的一个作为最终的预测结果,如果某条change的两个结果置信度相同,那么我们选择的优先级为PCC,加权PCC,CC。下图为PCC+的过程。

实验

我们设计实验来研究两个问题:

PCC和PCC+能够对CC和MARS的性能有多大的提升
PCC在其他实验设定上是否能够对CC的性能有所提升

实验数据

我们选择了6个开源工程作为数据,工程信息如下图所示。6个工程的共同点是都有大量的change history用来构建和评估PCC,对于Lucene和Jackrabbit,我们利用Herzig等手工验证的bug report来标注change,对于其他工程,我们利用关键字搜索的方法来标注change。
在这里插入图片描述

在change选取方面,考虑到bug的生命周期以及最近的change中的bug很有可能还没有被发现,我们只选取了一部分时间的change,如下图所示。
在这里插入图片描述

针对PCC,我们选择了每个工程中拥有最多提交次数的10个开发者,对每个开发者选取了相同数量的change作为数据集,将它们混合起来作为CC的数据集。

分类过程

为进行对比实验,我们需要统一模型参数。采取的方法是随机选择一个工程,从中随机选择一部分change来调整参数,使这一集合的F1最大的参数将用来进行后续所有实验,每种分类模型的参数分别用此方法确定。

评估标准

成本效率(cost effectiveness):成本效率指用同样开销所能得到的最大收益。在我们的工作中,开销就是待检查的代码量,收益就是能够发现的bug数量。
为评估成本效率,我们将change按照可能是bug的概率排序,检查排名前20%的change,得到以下两个指标:

  • NofB20:前20%中bug的数量
  • PofB20:前20%中bug数量占全部bug数的百分比

F1:F1-measure将准确度和召回率结合起来考虑,是我们的第二个重要评估标准。

实验结果

CC,MARS,PCC,PCC+的对比结果如下图所示,下图结果由模型ADT得到。图中可以看出大部分实验PCC的各项指标均优于CC,而PCC+在PCC基础上又有小幅提升。
在这里插入图片描述

从下图结果可以看出,采用多种模型,PCC的效果总是优于CC
在这里插入图片描述
对Lucene,我们改变了训练集change数量进行了几组实验,结果如下图所示,结论是在训练样本超过80个时,PCC性能优于CC。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值