Page 287 - 《软件学报》2021年第7期
P. 287
贾修一 等:基于变分自编码器的异构缺陷预测特征表示方法 2205
between source and target projects, and perform prediction based on it. The feature representation learned by previous studies is weak,
causing poor performance in predicting defect-prone instances. In view of the powerful feature extraction and representation capabilities
of deep neural networks, this study proposes a feature representation method for heterogeneous defect prediction based on variational
autoencoders. By combining the variational autoencoder and maximum mean discrepancy, this method can effectively learn the common
feature representation of the source and target projects. Then, an effective defect prediction model can be trained based on it. The validity
of the proposed method is verified by comparing it with traditional cross-project defect prediction methods and heterogeneous defect
prediction methods on various datasets.
Key words: heterogeneous defect prediction; variational autoencoders; feature representation
软件缺陷预测技术是软件质量保证活动中非常重要的研究课题,基于机器学习方法进行缺陷预测可以从
历史项目数据中学到软件度量和软件缺陷之间的联系,有效地帮助开发人员和测试人员在开发生命周期的早
[1]
期预测模块(软件包、文件、类、函数或变更)中包含缺陷的可能性 ,从而降低软件缺陷带来的损失,节约宝贵
且有限的资源.
现有的基于机器学习方法的软件缺陷预测模型需要首先设计衡量模块复杂度的度量并收集相关的缺陷数
[2]
据集,之后才能在缺陷数据集上训练预测模型 .大部分缺陷度量分为基于软件代码的软件度量和基于软件开
发过程的软件度量,其中常用的基于软件代码的度量包括代码行数、Halstead 科学度量、McCabe 环路复杂度
以及 CK 度量元,常用的基于软件开发过程的度量包括基于代码修改特征的度量和基于开发人员的度量.大多
数软件缺陷预测模型的研究集中于项目间(within-project)软件缺陷预测 [35] ,指的是模型的训练和预测都是基
于同一个项目.然而对于新项目而言,其历史的缺陷数据是非常稀缺的,并且软件开发方法和语言的更新迭代十
分迅速,如果仅仅只使用同一个项目的历史缺陷数据用于训练,由于训练数据的匮乏,往往很难构建有效且实用
的缺陷预测模型以用于软件质量保障过程.为此,研究人员提出了跨项目(cross-project)软件缺陷预测 [610] ,如图
1 左图所示,用其他项目的历史缺陷数据训练模型,在新的缺乏历史数据的项目上进行预测,从而可以充分地利
用已有源项目缺陷数据,构建有效的目标项目缺陷预测模型.
Fig.1 Cross-project software defect prediction and heterogeneous software defect prediction
图 1 跨项目软件缺陷预测和异构软件缺陷预测
[9]
大部分跨项目缺陷预测方法有一个严重的限制,即需要源项目和目标项目具有相同的软件度量 ,然而在
现实情况下,大部分项目都具有异构的特征表示.例如,在 PROMISE 库中的大部分 NASA 数据集有 37 个度量
[8]
[5]
元 ,AEEEM 数据集拥有 61 个度量元 ,它们之间唯一相同的度量是代码行数(LOC).由于公有度量的匮乏,现
有的跨项目软件缺陷预测方法将难以适用,并且,大量有效的度量信息未被充分地利用.为此,研究人员提出异
构缺陷预测(heterogeneous defect prediction) [10] 来解决拥有不同度量集合的跨项目缺陷预测问题,即使项目之间
拥有不同的度量集合,异构缺陷预测模型依旧可以在无法获取源代码的情况下利用已有的数据集学习度量分
布和软件缺陷之间的映射关系.如图 1 右图所示,通过解决跨项目缺陷预测问题对同构特征的依赖,开发人员可
以极大地降低收集缺陷数据带来的成本,为软件质量提供可靠的保障.
对于异构缺陷预测研究,该问题的主要难点有:(1) 源项目和目标项目的度量没有相同的语义,除了少数度