论文部分内容阅读
软件缺陷预测是软件工程领域的一个热点研究方向。它通过分析软件度量值利用机器学习方法预测软件中是否含有缺陷。进而有助于帮助软件开发人员提高软件质量。 软件缺陷预测通常是一个分类问题,它的性能依赖于软件度量数据和所使用的分类器。目前已有大量研究应用各种分类器和数据预处理技术来试图提升缺陷预测的准确性。然而,却缺少关于“各种分类器的缺陷预测有效性如何?”,“哪种数据预处理技术有助于提升软件缺陷预测的有效性?”的深入分析。因此,有必要开展关于这些研究对比的实证分析。 在软件缺陷预测中,需要重点关注的是含有缺陷的软件模块,然而实际上,缺陷模块通常比非缺陷模块少得多。这导致了类不平衡问题,妨碍了缺陷预测的准确度。因此,类不平衡问题是缺陷预测中亟需解决的一个关键问题。 本文提出了一个软件缺陷预测实验分析模型,并基于 NASA MDP数据集,开展一系列关于软件缺陷预测的实证分析。提出了五个研究问题,并且进行了详细的实验分析。 首先,比较了经典的分类器的缺陷预测性能,例如,贝叶斯网络、朴素贝叶斯、Logistic函数、simple logistics、SMO、IBK、adaBostM1、Bagging、通过回归分析分类、决策表、J48、随机森林和随机树。然后使用数据预处理技术,例如 propositionalization,特征选择和主成分分析,研究其是否有助于提高缺陷预测的性能。接下来尝试应用SMOTE来解决类不平衡问题,并分析比较了在不同参数配置条件下SMOTE的性能。研究结果表明,对于缺陷预测实验数据集,在不应用任何预处理技术的情况下,J48、IBk、贝叶斯网络和随机树这些分类器要优于其他分类器,通过回归分析分类的性能最差。研究结果还表明,对于缺陷预测实验数据集,propositionalization要优于其他两种数据预处理技术。 除了实证分析外,本文还研究改进了SMOTE方法。提出了SMOTE ASMO算法来克服SMOTE方法的缺陷。SMOTE算法主要有两个缺陷:首先,对于每个原少数类样本产生相同数量的合成数据样本,而没有考虑其邻近样本的分布特点,这就使得类间发生重复的可能性加大,导致过分泛化问题。其次,样本是预先确定的,缺少再平衡的灵活性。SMOTE ASMO算法通过使用数据稀疏性测试来检查填充的空间、并对少数类进行聚类、采用二级(而不是一级)样本泛化,来解决过分泛化问题。通过多重试验/反馈增强再平衡的灵活性。实验结果表明,应用 ASMO算法后,通过回归分析分类、Logistic函数、IBk、随机森林的TP rate和AUC指标比其他分类器而言提升更显著。