论文部分内容阅读
近年来,在有关软件缺陷预测(Software Defect Prediction, SDP)的研究中,基于跨项目的缺陷预测问题逐渐成为研究的重心。大多数缺陷预测的研究都将该问题作为二分类问题或回归问题进行讨论。事实上,在缺陷预测的现实场景中,开发者在大多数情况下并不需要每一个软件实体的具体预测结果,而是让自动缺陷预测工具找出项目中可能具有高风险的文件,对其进行定位修复即可。
本文借鉴推荐系统中经典的排序学习算法,设计了一种基于跨项目缺陷预测的排序学习框架,这种框架能够匹配缺陷预测的数据集,对其进行标签转化、重采样等预处理,最后选择合适的排序学习算法及排序结果优化方法训练出最优的模型,推荐top-k高风险文档反馈给开发者。为了验证针对本框架的有效性,本文主要从四个方面设计了实验:
(1)对于数据构造不匹配的问题,本文首先设定了“找出高风险文件”的单查询场景。针对该场景的问题,对数据集中缺陷个数标签进行了统计。使用折叠高斯分布拟合数据集中缺陷分布情况,并依据3σ原则进行相关度划分。
(2)对缺陷预测中常常会出现的数据不平衡问题,本文设计了一种混合采样方法SMOTE-PENN。实验对比了随机上采样,等六种经典重采样方法,本文提出的算法能够在各项评价指标中取得最高的得分。同时,本文讨论了重采样计算距离所需的7种度量方法,实验发现标准化欧氏距离在软件缺陷预测场景下的度量效果最优。
(3)在排序学习方法的选择上,本文选择了RankNet等5种排序学习的经典方法,详细讨论了每种方法的特点,并在NDCG指标下对每种模型的性能进行评价。实验发现,ListNet和RankNet在本文的框架下相较于其他方法能够取得更好的结果。
同时,我们还对评价指标中k值的变化及排序学习场景进行了讨论。
(4)在排序结果优化的问题上,本文设计了一种独立于粗排序场景的精化排序方法,对粗排序中具有并列排名的结果进一步细化排序。实验发现,该方法在推荐样本个数较多时,能够显著提高模型的性能。
下一步,我们将会对数据集进行扩充,更加全面地验证模型效果;选择更多的排序学习算法或设计新的排序学习算法并制定多查询场景以提升模型的健壮性;考虑参数搜索等方法进一步提高模型性能。
本文借鉴推荐系统中经典的排序学习算法,设计了一种基于跨项目缺陷预测的排序学习框架,这种框架能够匹配缺陷预测的数据集,对其进行标签转化、重采样等预处理,最后选择合适的排序学习算法及排序结果优化方法训练出最优的模型,推荐top-k高风险文档反馈给开发者。为了验证针对本框架的有效性,本文主要从四个方面设计了实验:
(1)对于数据构造不匹配的问题,本文首先设定了“找出高风险文件”的单查询场景。针对该场景的问题,对数据集中缺陷个数标签进行了统计。使用折叠高斯分布拟合数据集中缺陷分布情况,并依据3σ原则进行相关度划分。
(2)对缺陷预测中常常会出现的数据不平衡问题,本文设计了一种混合采样方法SMOTE-PENN。实验对比了随机上采样,等六种经典重采样方法,本文提出的算法能够在各项评价指标中取得最高的得分。同时,本文讨论了重采样计算距离所需的7种度量方法,实验发现标准化欧氏距离在软件缺陷预测场景下的度量效果最优。
(3)在排序学习方法的选择上,本文选择了RankNet等5种排序学习的经典方法,详细讨论了每种方法的特点,并在NDCG指标下对每种模型的性能进行评价。实验发现,ListNet和RankNet在本文的框架下相较于其他方法能够取得更好的结果。
同时,我们还对评价指标中k值的变化及排序学习场景进行了讨论。
(4)在排序结果优化的问题上,本文设计了一种独立于粗排序场景的精化排序方法,对粗排序中具有并列排名的结果进一步细化排序。实验发现,该方法在推荐样本个数较多时,能够显著提高模型的性能。
下一步,我们将会对数据集进行扩充,更加全面地验证模型效果;选择更多的排序学习算法或设计新的排序学习算法并制定多查询场景以提升模型的健壮性;考虑参数搜索等方法进一步提高模型性能。