论文部分内容阅读
软件缺陷预测是软件工程中的一个非常重要的研究课题,它基于软件历史数据中的模块缺陷记录(包括了软件模块的静态代码特征)来对新的软件模块进行缺陷预测,还能提供决策支持来指导软件项目的规划和过程管理。本文从机器学习的角度分析了软件缺陷预测的特点。同时分析了当前已有的预测方法在应用过程中存在的三个主要问题:(1)因为数据集是来自不同的项目或不同的领域,他们具有不同的数据分布。因此,基于传统方法建立的预测模型具有较弱的适应能力。(2)通过代码审查来手工标记有缺陷的模块是既费资金又费时间的活动,因此,数据集中的正样本数据是有限的。当前的方法是基于监督学习算法建立的预测模型,是仅基于有标记的数据的学习过程。这些方法不能满足要求,因为数量有限的标记数据不具备建立合适的预测模型的足够信息。(3)软件缺陷数据通常是类不平衡的,正样例数远远高于负样例数。该类不平衡问题已经很大程度上地影响了缺陷预测模型的性能。本文研究了软件缺陷预测中的最先进的方法技术,包括这些方法的动机,进展,特点和劣势。在此基础上提出了创新的实用技术,并为解决软件缺陷预测中上述的三个问题提供了有效方法。本文在以下几个方面取得了一些有价值的研究成果:(1)基于迁移学习的缺陷预测研究提出了新的缺陷预测算法,基于朴素贝叶斯的迁移学习算法(TNB)。不同于已有的预测模型选择与测试数据相类似的训练数据,该算法使用了训练数据中所有特征的实用信息。TNB首先计算出测试数据的分布情况,并将跨公司的待预测的数据信息通过赋权的方式作用于训练数据。然后基于这些加权数据,建立缺陷预测模型。我们还对已有的方法进行了理论分析,并在来自不同组织的数据集上进行了实验比较。结果表明通过TNB建立的预测模型能得到更好的AUC性能,同时具有较低的运行时间。(2)基于半监督学习的缺陷预测研究提出了改进的半监督学习方法,用于解决软件缺陷预测中类不平衡和标记数据有限的问题。基于协同训练风范的半监督学习,该方法采用随机抽样技术来对原始训练数据集和每轮更新后训练数据集进行抽样。这能解决半监督学习中的类不平衡问题,使得缺陷预测模型更实用。我们的方法与传统的机器学习方法相比,具有更好的预测性能。实验结果还表明,通过解决半监督学习中的类不平衡问题,有可能设计出更好的半监督分类器。(3)基于主动学习的软件缺陷预测研究引入主动学习策略,用于减少缺陷预测中标记缺陷模块的代价。本文提出了一种主动学习的方法,两阶段主动学习算法(TAL),用于预测软件缺陷模块。该方法结合聚类方法和支持向量机技术,提高了预测性能并具有较少的标记代价。实验验证了其有效性。(4)基于核理论的软件缺陷预测研究提出了基于核理论的非对称分类器用于建立软件缺陷预测模型。核方法能有效的解决线性不可分数据的分类问题。我们从理论上分析了类不平衡问题对核主成分分析的影响。在此基础上,提出了非对称核主成分分类器(AKPCC),试图解决核主成分分析中的类不平衡问题。由于在核主成分分析的基础上弥补了类不平衡问题带来的性能影响,这种方法提高了类不平衡数据集上的预测性能。这种方法较其他知名方法具有较优的F-measure性能。