论文部分内容阅读
缺陷预测力图建立缺陷预测模型来预测软件中包含缺陷的代码区域。精确的缺陷预测模型能协助开发者关注更可能包含缺陷的文件/方法等,从而能更好地分配软件资源,进而提升软件质量保障和维护行为的效率。当前缺陷预测研究领域中的固有难点是真实世界中软件抽取的缺陷数据集都是不平衡的,即包含缺陷的模块样本数量一般远小于不包含缺陷的模块样本数量。在不平衡数据集上进行缺陷预测模型训练时,机器学习分类器往往因为包含缺陷与不包含缺陷的模块数量间的不平衡而导致偏置,从而无法实现精确的缺陷预测模型。当前缺陷预测领域处理不平衡数据集的主要方法包括数据集平衡化技术(如下采样和过采样等)和集成学习方法(如Bagging方法等)。然而现有的不平衡数据集处理技术往往会为缺陷预测模型带来一些副作用,如训练不完全和过拟合等。在缺陷预测的过程中,除了各种数据集平衡化技术及模型辅助训练的方法之外,本文通过对缺陷预测的机制作分析,发现对预测结果概率的阈值做调整也能做到相似的效果。然而在缺陷预测领域中阈值常常以默认值(0.5)作为预测值分割依据。根据对当前的文献调研,现有的缺陷预测研究中很少有研究者采用阈值调整的方式来降低不平衡数据集对预测模型的影响。本文从缺陷预测流程中以往被忽视的阈值角度切入,试图找到比现有处理技术更适用在不平衡数据集上构建缺陷预测模型的方法。本文提出7种通过历史(训练)数据调整阈值来优化模型分类结果的方法-阈值感知技术。阈值感知技术根据历史(训练)数据集上的缺陷率自适应计算阈值,并通过新的阈值对测试数据集的预测值进行划分。本文在缺陷预测研究领域常用的三个数据仓库,PROMISE、NASA和AEEEM中挑选出缺陷率小于20%的数据集作为不平衡数据集,并在这些数据集之上进行缺陷预测。为了验证阈值感知技术在不平衡数据集上做缺陷预测的效果,本文工作主要由以下三个方面展开:(a)搭建阈值感知技术的实验平台—将阈值感知技术加入缺陷预测的整体流程中,融合现有不平衡技术实现可参数化调整的实验平台。(b)研究阈值感知技术的性能—将阈值感知技术与传统分类器及现有不平衡数据集处理技术进行比较,从必要性、有效性及广泛性3个角度着手,分析阈值感知技术为不平衡数据集的缺陷预测带来的性能提升。(c)研究阈值感知技术的应用—从学习器、现有阈值感知技术、跨版本的信息关联性、跨项目的信息关联性及数据集缺陷率五个不同方面切入研究阈值感知技术的适用场景。实验结果表明:(a)阈值感知技术能够大幅度的在各指标(如Recall、F1和Gmean等常用指标)上提升在不平衡数据集上缺陷预测的表现结果;(b)阈值感知技术在大部分指标下的表现效果比现有不平衡数据集处理技术更突出,尤其是在Recall、Gmean、Gmeasure三个指标上明显提升;(c)不平衡数据集处理技术在结合部分阈值感知技术时,在大多数场景上,对处理不平衡数据集上的缺陷预测问题能够有更好的效果,例如在Recall指标上有70%的阈值感知技术与不平衡数据集处理技术的组合效果显著优于默认阈值与不平衡数据集处理技术的组合。根据上述的发现,本文得出以下结论:(a)在不平衡数据集上建立缺陷预测模型时,强烈推荐采用阈值感知技术;(b)在处理不平衡数据集的缺陷预测问题时,相比现有不平衡数据集处理技术而言,更应该采用阈值感知技术;(c)选取适当的阈值感知技术与不平衡数据集处理技术进行搭配能够在不平衡数据集的缺陷预测上有更好的效果。