论文部分内容阅读
随着软件应用的普及和深化,其多样性和复杂度都不断提高,相应的,对软件质量保障技术也提出了更高的要求。在软件生命周期中,软件缺陷预测技术对保障软件质量具有重要作用。如果可以在软件开发和测试阶段提前检测出软件的缺陷,将有助于质量保障团队发现软件的潜在问题、了解软件的缺陷分布,进而合理地分配测试人员和资源,提高软件质量和节省测试成本。近年来,学者们开始关注软件缺陷预测技术,并尝试使用机器学习方法检测软件中有缺陷倾向的程序模块,取得了一定成效。然而该技术在实际应用过程中,容易遇到软件冷启动和带标注数据稀缺的问题。为了使软件缺陷预测技术可以更早地运用于软件项目的生命周期中,跨项目软件缺陷预测技术作为一种可行且有效的解决方案被提出。跨项目软件缺陷预测方法旨在将缺陷预测知识从成熟项目(具有标注数据的源项目)中迁移到没有标注数据或标注数据非常有限的目标项目中,从而将源项目训练的缺陷预测模型用于检测目标项目的程序模块是否具有缺陷。目前跨项目软件缺陷预测技术还存在一些问题未被解决,影响了模型预测性能。本文针对该技术中存在的跨项目数据类不平衡、负迁移、分布欠适配和可迁移语义特征缺失四个问题进行研究。首先围绕类不平衡问题开展方法研究,然后在数据类平衡的基础上,利用和改进迁移学习算法和模型,针对数据负迁移、分布欠适配和可迁移语义特征缺失三个问题设计对应的解决方案。具体研究工作包括:(1)研究解决跨项目软件缺陷预测任务中的类不平衡问题。目前跨项目软件缺陷预测研究中处理类不平衡问题多采用二次采样和代价敏感学习的类不平衡学习方法,本文拓展了类不平衡学习方法比较范围,基于5个软件缺陷数据仓库中的31个开源项目开展了较大规模的实验,并引入改良的统计分析方法,对15种类不平衡学习方法和其产生的37504个预测结果进行分析,讨论和评估了各方法在不同数据集和基分类器下的有效性,为本文后续研究提供数据类不平衡处理基础。(2)探索解决跨项目软件缺陷预测过程中无关数据引发的负迁移问题。目前多数处理跨项目数据负迁移问题的方法,尚未考虑源项目中实例簇的迁移性能可能较差的情况。本文基于归纳式迁移学习方法,提出了一种多簇权重分析方法,其通过使用小比例的目标项目内标注数据,评估源项目中各簇对目标项目缺陷预测任务的辅助能力;随后,本文将核均值匹配算法与多簇权重分析方法相结合,调整源项目中实例权重和各簇的权重,从而减轻跨项目软件缺陷预测任务中不相关数据所带来的负面影响。(3)探索解决跨项目间因数据分布存在差异,影响缺陷预测性能的问题。目前多数基于分布适配的跨项目软件缺陷预测方法主要适配了数据的边缘概率分布,而未充分考虑条件概率分布差异,存在跨项目间数据分布欠适配的问题。为了解决这一问题,本文提出了一种基于概率分布自适应的联合分布匹配算法。该算法引入最大均值差异度量项目间联合概率分布的距离,旨在通过直推式迁移学习方法,为源项目实例重新分配权重,进而最小化项目间数据的边缘概率分布差异和条件概率分布差异,从而提高跨项目软件缺陷预测模型的预测能力。(4)探索解决跨项目软件缺陷预测任务中可迁移语义特征缺失的问题。由于项目间数据存在分布差异,现有研究中通过深度学习提取的源项目语义特征往往不能很有效地运用到目标项目的缺陷预测任务中。针对项目间可迁移语义特征缺失的问题,本文提出了迁移卷积神经网络模型。该模型将程序源码解析为整数向量作为神经网络的输入,并将数据分布匹配层添加到卷积神经网络中,通过同时最小化项目之间的分类错误、分布差异和流形正则项的方式,提取可迁移的深度学习生成特征,并将其运用到跨项目软件缺陷预测任务中,进一步提升了预测模型的性能。