曲豫宾,陈 翔,李 龙
(1. 桂林电子科技大学 广西可信软件重点实验室,广西 桂林 541004; 2. 江苏工程职业技术学院 信息工程学院,江苏 南通 226001; 3. 南通大学 信息科学技术学院,江苏 南通 226019)
软件缺陷预测用于识别软件开发过程中的软件缺陷,软件开发过程中产生的历史数据构成了软件缺陷预测分类器的训练数据,这些数据可以从文件、类等多粒度进行标注[1-4]. 基于软件开发过程,面向历史数据的度量元用于构建分类模型,这些度量元包括基于代码行数的度量元、Halstead科学度量以及McCabe环路复杂度等[4]. 传统的项目内缺陷预测模型主要关注静态度量元,基于度量元进行分类模型构建,基于潜在的有缺陷模块应具有相同的统计分布特征. 但在实际软件开发过程中,静态度量元构建的分类器无法预测具有相同统计特征分布却不同语义特征的代码模块,如JAVA代码中Queue队列的add,remove方法的先后顺序虽然具有相同的统计分布特征,却有明显不同的语义特征. 通过使用自编码网络[5]、卷积神经网络(CNN)[6]等深度学习框架能从源数据集中学习到语义特征,建立面向语义学习的软件缺陷预测模型. 在实际训练数据集标注过程中,拥有不同的数据标记却在特征空间中有相同的特征,这种类重叠问题是由标注过程中多种因素导致的. 类重叠问题是数据挖掘以及机器学习中常见的问题,其影响了分类性能. 类重叠的训练样例模糊了分类边界,增大了分类难度[7]. 很多应用领域都存在类重叠问题,如信用卡欺诈检测和文本分类领域等. Chen等[8]提出了使用基于k近邻的方法处理存在类重叠的样例;……