论文部分内容阅读
软件开发生命周期里,如果内部潜在缺陷发现的越晚,后期为了修复这些缺陷的开销就越大。但是,若对每个软件模块都进行仔细地测试,势必要倾注过多的人力资源。所以项目经理希望预先识别软件模块中可能出现的缺陷,并将足够的测试资源分配给该模块。软件缺陷预测是解决上述问题的可行办法。其一般过程是根据软件项目抽取相应的软件模块并设计相应的度量元(即特征)。接着搜索缺陷跟踪系统中的相关信息,对含有缺陷的软件模块进行标记,构建软件缺陷预测数据集。在构筑的数据集上建立基于机器学习算法的缺陷预测模型。最后,对待预测的软件模块进行分类,预测其是否含有软件缺陷。软件缺陷预测是当前软件工程数据挖掘领域的一个热点问题,虽然国内外研究人员已经取得了一定的研究成果,但仍存在很多亟需解决的问题。具体来说,(1)软件模块度量中,往往会度量过多的软件度量元,这会导致数据集中出现维度爆炸(curse of dimensionality)问题。造成度量元之间存在不同程度的冗余,甚至部分度量元对构建缺陷预测模型提供不了任何帮助。(2)数据集收集过程中,在程序模块类型标记和模块度量时容易出现错误并产生噪声。存在噪声的数据集会造成实证研究得到错误的结论。(3)根据以往的软件开发经验,有缺陷的软件模块规模要远小于无缺陷的模块。缺陷在软件模块中分布的不均匀造成数据集中存在类间不平衡(class imbalance)问题,因而会导致测试人员错误地将有缺陷的软件模块分类成无缺陷模块,给企业造成巨大损失。针对上述三种软件数据质量问题,论文提出相应的解决方法,主要贡献可概括如下:(1)针对维度爆炸问题,论文提出了一种基于聚类分析的特征选择方法CAFeS。该方法通过特征聚类和特征排序可以有效去除原特征集中广泛存在的冗余特征,并且仍然能将与类标相关度高的特征保存在新的特征子集中。具体来说,首先基于特征和特征之间的关联度,对原特征集进行K-Medoid聚类。然后,根据特征和类标之间的相关度,从每个聚簇中由高到低的选取特征。在实证研究中,选择了对称不确定性用于度量特征和特征之间的关联性,信息增益、卡方值及ReliefF用于度量特征和类标之间的相关性。基于Eclipse和NASA等真实软件项目,重点研究了CAFeS的缺陷预测性能,分析CAFeS所选特征子集的冗余率和所选比率。实验结果显示CAFeS能有效缓解维度爆炸问题,并能提升软件缺陷预测性能。(2)针对数据噪声问题,论文提出了一种可容忍噪声的特征选择方法NtFCS,用来缓解数据噪声对软件缺陷预测的影响。该方法是对基于聚类分析的特征选择方法CAFeS进行了扩充。主要的改进在特征选择阶段,不同于CAFeS,为了减少噪声特征被选中的概率,只从每个特征聚簇中选取1个特征作为代表。同时,还设计了 3种既有基于特征和类标相关度,又有基于特征和特征关联度的特征选择策略。前者可能对类标噪声敏感,后者对特征噪声敏感,几种策略之间可相互弥补。在实证研究中,我们选择Eclipse和NASA作为实验对象。除了进行一组数据预处理来提高数据集质量外,在数据集中同时注入了类标噪声和特征噪声,来模仿真实数据集中的噪声。实验表明NtFCS能减少数据噪声对缺陷预测的影响,并且通过分析不同噪声干扰率、特征选择比率及噪声类型,给出了应用NtFCS方法的指导建议。(3)针对类间不平衡问题,论文提出了一种特征选择结合实例筛选的两阶段数据预处理方法。具体来说,在特征选择阶段,和CAFeS明显不同,这里先进行特征和类标间的相关度分析,再基于聚类方法进行特征冗余度的控制,试图在去除冗余特征的同时,最大化特征和类标之间的相关度。特别地,我们设计了一种基于阈值的聚类方法NTC,有效避免了K-Medoid聚类需要预先给定聚簇个数而带来的局限性。在实例筛选阶段,采用随机抽样方法来降低软件模块中存在类间不平衡的问题。在实证研究中,仍然选择真软件项目Eclipse和NASA。将提出的两阶段方法和一些经典方法做比较,并深入分析了方法的参数设定对结果的影响。结果表明提出的NTC方法能有效提升缺陷预测的性能,在结合了实例筛选后,预测性能会进一步提升。