论文部分内容阅读
软件缺陷预测是软件工程中最活跃的研究领域之一。缺陷预测模型能够提供容易出错的源代码组件或更改等,使得质量保证团队可以通过更多努力应对易出错的源代码,有效地分配有限的资源来验证软件产品。随着软件项目规模的扩大,缺陷预测技术将在开发人员的工作中起到至关重要的作用,它帮助开发人员开发出更可靠的软件产品,从而加快上市速度。本文从机器学习的角度研究分析软件缺陷预测技术。目前,基于机器学习的缺陷预测已经研究出很多方法,而且大多数方法在项目内预测很有效,但是也存在一些问题:(1)在跨项目缺陷预测的表现通常较差,这主要是由于源项目和目标项目之间的特征分布差异造成的,而大多数机器学习分类器都假设训练和测试数据在相同的特征空间中表示并且来自相同的数据分布。(2)很多研究主要集中在粗粒度水平的预测缺陷,如文件、包或模块。(3)缺陷数据集的不平衡性一旦处理不当,将造成学习到的缺陷预测模型偏向大多数无缺陷类,从而严重影响了预测模型的预测性能。基于上述问题,本文着手研究了基于机器学习的软件缺陷预测技术中最先进的方法,包括迁移成分分析、深度学习等方法,并在此基础上提出了创新的实用技术,为解决软件缺陷预测中的上述问题提供了有效方法,主要包括: 1.提出了改进的迁移成分分析方法,即在迁移学习的基础上,通过调整现有方法迁移成分分析(TCA)而提出的迁移缺陷学习。该方法利用TCA将源项目和目标项目的数据映射到潜在的特征空间,基于新的特征表示来变换数据,达到减少跨项目预测中数据分布差异的目的。另外考虑到使用TCA的跨项目缺陷预测的性能对归一化很敏感,所以应用方法TCA+中针对源项目和目标项目对选择适当的归一化方法的决策规则来解决。同时通过更改底层机器学习分类器来获得具有更好跨项目预测性能的学习模型。将此方法进行实验并比较,结果表明该方法得到的预测模型有较高的F-measure度量值。 2.提出了利用TCA原理预处理数据,以此来解决缺陷数据集的不平衡性问题。该方法利用TCA技术将两个不同项目的数据集映射到一个潜在空间,当找到这一潜在空间后,将源项目中的少数类数据挑选出适当的数量添加到目标项目中作为目标项目的训练集,使目标项目中有缺陷的实例和无缺陷的实例数量相等,此时数据集的不平衡性得到改善。而在目标项目中进行训练时(项目内训练缺陷预测模型),需要先将目标项目中的全部数据映射到潜在空间,即将变换后的实例数据作为训练模型的训练数据。该方法一定程度上解决了缺陷数据集的不平衡性,保障了接下来训练缺陷预测模型的性能。 3.提出了基于改进的深度信念网络的实时缺陷预测方法。该方法是集中在更改这一细粒度的研究,结合深度信念网络这一深度学习方法提出的实时缺陷预测技术。研究发现实时缺陷预测更实用,因为它要审查的代码量较小,只需审查单个更改,而不是整个文件或包,同时使开发人员更容易分配修复缺陷。更重要的是本文将深度信念网络技术与细粒度水平的实时缺陷预测以及TCA技术处理数据不平衡性相结合,提出了改进的深度信念网络的实时缺陷预测方法,同时尝试更改DBN底层的机器学习分类器进行不同的实验研究,结果不仅验证了利用TCA技术解决数据不平衡性问题的有效性,而且还表明了本文改进的方法学习到的缺陷预测模型具有更好的预测性能。