论文部分内容阅读
用于软件测试的资源通常是有限的,但是软件测试往往需要消耗大量费时昂贵的软件模块。此外,由于软件开发过程中测试往往并不充分,导致传统的软件测试手段并不足以保证软件的质量。因此,早期软件产业发展阶段中的软件故障自动预测技术在当前仍然存在。现今软件故障预测主要用于设定与优化软件测试的优先级,以充分利用有限的测试资源并尽可能地提升软件质量。在这方面,机器学习方法得到了较为广泛的应用。然而,将机器学习方法应用于精确的软件故障预测对数据质量有较高的要求。遗憾的是,真实的数据集却质量欠佳。在软件故障预测中,人们可以借助已标注的实例来构建一个模型以预测迄今尚未发现的新实例的类别。如果用于训练预测模型的数据集受到污染,则会给训练阶段和最终得到的模型都带来不利影响。一个可预期的结果是最终得到的模型精度必然不高。因此,提升数据集质量的一个有效策略是对带有缺陷数据的数据集进行清洗,主要是通过侦测数据集中可能存在的问题并消除这些问题来实现的。通过对现有软件故障预测领域相关文献的综述我们发现,分类在此领域中的大多数场合有着不可替代的重要作用。在一些特殊的场合,一些辅助的策略在应对数据质量挑战中也不可或缺。一些无足轻重的软件指标、类别不平衡问题、分类噪声、无用实例及异常数据等的存在降低了分类精度,给软件故障预测带来越来越多的挑战,这进一步导致推理能力差和资源管理效率低下。因此,如何确定数据质量和重要软件度量以实现软件故障预测迄今仍是一个开放性问题。本文的目的在于研究新的组合式方法以应对软件故障预测面临的这些挑战,并提升软件故障预测的性能。本文首先提出了一个新的基于组合学习的框架。该方法独立地检验软件度量,包括采用多特征选择技术以解决特征冗余和不相关问题,并通过合成少数类过采样技术实现数据均衡以解决类别不均衡问题。因此,本文开发了一个新的框架,该框架以面向对象度量(OOM)和静态代码度量(SCM)的组合形式来有效地应对这些挑战。在实验中,本文使用了朴素贝叶斯、神经网络、支持向量机、随机森林、K最近邻、决策表、决策树及随机树等多种不同的机器学习方法,并采用接收者操作特征(ROC)曲线来对软件度量的性能进行评价。实验结果表明,在不采用合适的特征选择技术的情况下,软件故障预测的性能可能会受到影响。为了降低这种影响,并获得准确、无偏的预测结果,必须先实现数据均衡。通过这些操作,我们所提出的框架将获得更高的预测性能。当使用静态代码度量时,将随机森林与信息增益特征选择结合起来,得到了最高的ROC结果,这是目前最优的组合策略。此外,当使用面向对象度量时,将随机森林与基于相关性的特征选择结合起来,也得到了最高的ROC结果,也被证明是目前最优的组合策略。其次,本文提出了一个更为全面的框架,称为一种基于三阶段集成学习的软件故障预测框架。此框架先解决由于类噪声的影响而带来的大多数软件故障预测挑战,再进一步集成其他方法以解决导致软件故障预测性能偏弱的特征特征和数据偏态问题。在第一阶段,借助最高的信息增益来选取高阶特征,主要是通过计算实现特征分裂所需要的平均信息熵与期望信息熵的差值来实现的。在第二阶段,针对存在故障倾向的实例,使用线性插值操作,通过对存在故障倾向的实例进行K最近邻聚类以产生一个新的存在故障倾向的实例类,从而实现对软件故障类别分布的处理。在第三阶段,通过对所得到的故障分类器的预测结果进行数据融合,实现了对故障数据的噪声滤除,主要是通过迭代使用噪声过滤对噪声进行侦测实现的。在基于数据融合的噪声滤除中,使用了C4.5、3最近邻、Logistic回归等多种机器学习方法,并进行了大规模的综合性实验以对所提出的框架进行验证。通过13种通用的集成学习算法来对该框架各个阶段的性能进行评价。再通过单因素方差分析和Tukey HSD检验对各个阶段的性能进行较为全面而深入且统计意义上较为合理的对比分析,实验结果验证了所提出方法的卓越性能。特别地,移除噪声数据后,在分布良好数据的重要特征上使用集成学习算法(ELA)可达到较高性能的故障预测结果。此外,分别使用均方根误差(RMSE)和耗时训练(ETT)两种不同的评价指标,在大多数情况下,移除噪声数据可以大大降低故障预测的误差,同时降低了计算开销。最后,本文提出了一个新的混合数据约简方法用来提升软件故障预测的性能。该方法解决了由异常数据、冗余实例及冗余特征等带来的三类主要的软件故障预测挑战。通常情况下,软件故障数据集带有噪声数据及冗余数据等无效实例,这对软件故障分类的性能产生了负面影响。于是,通过对数据集中的邻域进行采样处理,并进行概率分布估计,实现了对软件故障数据实例的选取。进而,一个给定的采样数据归属一个特定类的概率取决于该采样数据归属于K最近邻算法所产生类别的平均概率。对异常数据的判别而言,先计算该异常数据的所有特征与对应的数据分布均值之间的距离,再综合考虑每个特征中的每个数据实例,最终实现对异常数据的判别。如果所选取的数据实例中其一个或多个特征偏离均值过远,该数据实例即被视为异常数据并将从数据集中移除。对重要特征的选取而言,需要全面考虑所有的特征-类别相关性及特征-特征相关性的综合影响。为实现重要特征的选取,需要将基于相关性的特征选择与最佳优先搜索与进化搜索二者结合起来。最终得到了混合数据约简方法。将所提出的数据约简算法与套袋算法、随机森林、决策树、朴素贝叶斯、决策表等机器学习算法进行对比,并给出了较为全面而深入且统计意义上较为合理的分析结果。实验结果表明,通过剔除异常数据,并对重要特征进行分析,进而选择有用的实例,所提出的数据约简算法可以得到优异的软件故障预测结果。因此,通过有效应对软件故障预测面临的上述挑战,所提出的方法可提升软件故障预测的性能,并为软件质量保障提供了可行的方法。