论文部分内容阅读
随着信息时的到来,软件成了人们生产与生活中不可或缺的存在。在软件需求迅猛上升的情况下,软件开发的规模和复杂度不断增大。由于软件工程师的开发能力不一定能够完美满足软件开发的需求,因此不可避免的产生软件缺陷。暗藏的软件缺陷可能会对人们的生产和生活造成难以估量的损失,这些让人难以承受的后果让人们开始关注软件质量的重要性。软件测试可以有效地探测出软件产品中隐藏的缺陷,但是由于软件项目时间和人力成本以及功能的复杂性等方面的影响,软件测试工程师不能考虑到软件模块所有方面,无法对软件模块完全覆盖测试。而软件缺陷预测技术结合机器学习等热门技术,利用软件产品的历史度量数据构建预测模型,进而预测软件中存在缺陷的模块,该技术对软件测试技术进行了卓有成效的补充。本论文主要从机器学习角度剖析软件缺陷预测的特点,并针对当前实际应用中软件缺陷预测研究存在的问题提出了对应的解决方法。主要包含问题如下:(1)缺陷数据集中存在部分冗余或者不相关的特征,这些特征严重影响缺陷预测模型的性能;(2)软件缺陷数据中存在的类不平衡以及数据集未完全进行类标记,现实情况中,软件缺陷数据的正负样例数目比例相差较大,并且不是所有的数据都存在类标记,因此传统的监督学习不能满足预测模型构建的需要;(3)新项目缺少足够的历史缺陷数据来训练预测模型,因此无法使用独立同分布的训练集和测试集进行缺陷预测模型的构建和验证;(4)未来传统的单机模型已经不能满足大模软件缺陷数据的存储和计算的需要。具体针对措施如下:(1)针对缺陷数据集中存在部分冗余或者不相关的特征的问题,本文提出一种基于相关度和冗余度的稳定特征选择方法(RRSFS)。RRSFS在K重交叉检验下通对特征与特征之间冗余度与特征与类之间的相关度进行两阶段多算法融合选取最优子集,RRSFS算法不仅降低了建模过程中数据运算的成本,还加强了特征选择算法的稳定性。(2)针对软件缺陷数据中存在的类不平衡以及数据集未完全进行类标记等问题,本文提出了一种基于采样与集成的半监督软件缺陷预测方法(SISDP)。SISDP首先通过采取类别平衡的样本构建稳健的KNN打标模型,来对一批未标记的数据进行打标,再通过迭代形式,将新标记的数据加入原有数据集进行下一次打标模型构建,迭代到数据标记完毕。对打标完毕的数据集,最后用混合采样算法获取训练集,并对多分类算法构成的集成分类模型进行分类训练。SISDP不仅减少了少数类对打标过程的干扰,而且提升了缺陷预测模型的泛化能力。(3)针对新项目缺少足够的历史缺陷数据来训练预测模型问题,本文主要提出了基于卷积神经网络的迁移学习算法(CNNTL)进行缺陷预测,该方法将迁移学习过程分为A、B两类任务,首先提升A任务中源项目数据集的特征维度,并将其输入到多次卷积网络之中进行初步训练,将训练A任务源项目数据集得到的卷积层权重参数,应用到B任务目标项目数据集的卷积层训练中,从而实现了迁移学习。CNNTL算法不仅特征迁移能力强,并且有不错的预测性能。(4)针对大规模软件缺陷数据的存储和计算这类问题,本文提出了基于神经网络的分布式缺陷预测算法(NNDDP)。该方法基于集成了Kerberos的Hadoop集群进行研究,将需要处理的缺陷数据集存储在分布式文件系统HDFS上,再对数据进行预处理得到训练集和测试集,通过将数据划分并分配到多台服务器上进行同步并行训练,最终由参数服务器进行局部参数汇总,训练出一个全局的缺陷预测模型。NNDDP算法不仅能够处理大规模数据集,而且拥有不俗的预测性能。为了探究本文提出算法的可行性,本文对每个算法都进行了相应的对比实验。同时为了探究本文提出算法的稳定性,本文在不同数据集上进行了多批次实验。实验结果表明本文所提算法对软件缺陷预测数据集的处理拥有较优的性能。本文的所有研究旨在为软件质量保障提供新的理论基础,为软件缺陷预测技术探索新的研究方向。