一种基于卷积神经网络的软件缺陷预测方法与流程

文档序号:15981500发布日期:2018-11-17 00:23阅读:821来源:国知局
本发明涉及软件工程中的软件分析及缺陷预测领域,特别涉及一种基于卷积神经网络的软件缺陷预测方法。
背景技术
软件中潜在的和未知的缺陷将严重影响软件的质量,因此软件分析及缺陷预测技术在软件质量保障任务中起着重要的作用。如果可以及早地发现软件缺陷,这将有助于软件团队了解当前项目的质量状态,进而合理分配测试资源。然而对项目中所有代码单元的手动审查是不切实际的,因此,越来越多的软件工程研究和实践人员开始高度关注基于机器学习的软件缺陷预测技术,并尝试使用多种机器学习方法来检测软件中可能有缺陷的模块和文件。基于机器学习的软件缺陷预测方法,首先从软件项目的源文件中提取代码特征,其主要包括基于操作符和操作数的halstead特征,基于依赖性的mccabe特征,基于面向对象程序的ck特征和基于代码变化历史的change特征等。这些特征主要利用的是软件分析学者们提炼的手动特征。进一步地,软件缺陷预测方法使用机器学习算法对历史的缺陷数据进行有监督学习得到分类模型,即在对历史数据进行手动特征提取的基础上,运用如支持向量机、随机森林、逻辑回归等基分类器进行缺陷预测模型的学习。预测结果将帮助软件质量保障团队找到可能包含缺陷的代码区域。然而,传统基于机器学习的软件缺陷预测方法所利用的手动特征无法捕获和利用软件代码中丰富的语义特征,因此预测性能往往不理想。卷积神经网络作为自动化特征生成的强大技术之一,可以有效地捕捉软件代码中复杂的非线性特征,可以解决软件缺陷预测方法中手动特征缺失语义特征的问题。但是如何实现卷积神经网络在软件缺陷检测领域的应用,这对本领域的技术人员而言,是一个难题。技术实现要素:本发明的目的在于克服现有技术的缺点与不足,提供一种基于卷积神经网络的软件缺陷预测方法,该方法结合神经网络自动化特征生成的技术,解决现有软件缺陷预测方法中传统手动特征缺失语义特征的问题。该方法操作简易,只需在规范的软件缺陷预测流程基础上提交一份软件源码即可提供一套对该软件项目各文件缺陷倾向的预测结果,为软件团队在项目质量评估和测试资源分配任务提供参考依据。本发明的目的通过以下的技术方案实现:一种基于卷积神经网络的软件缺陷预测方法,包括以下步骤:1)解析软件项目中的各文件源代码,得到各文件的ast(abstractsyntaxtrees)token向量,形成asttoken向量集合;2)在整数和token之间建立映射,将步骤1)得到的asttoken向量集合中的向量转换成卷积神经网络输入所需要的数值向量;3)利用少数类别数据过采样技术(smote),对步骤2)得到的数值向量集合数据进行分类不均衡问题的处理,最终所得的结果即为均衡的数据集;4)在步骤3)中经过分类不均衡问题处理的数值向量集合的基础上,构建卷积神经网络,提炼出能够表达代码语义的特征向量;5)将步骤4)中卷积神经网络学习的特征向量与基于操作符和操作数的halstead特征,基于依赖性的mccabe特征,基于面向对象程序的ck特征合并,形成更加完整的静态代码特征向量,进而得到基于该特征向量的数据集合;6)将步骤5)中得到的数据集合输入到支持向量机(svm)分类器中,训练出基于卷积神经网络的软件缺陷预测模型。所述步骤3)具体为:通过少数类别数据过采样技术(smote)对训练数据进行预处理;smote属于一种基于过采样的分类不均衡数据处理技术。它在模型训练之前合成新的少数样本,为学习任务提供平衡的类别分布。所述过采样技术,具体的过程如下:a、对于少数类别中的每一个样本,找到其k个近邻;b、根据样本不平衡比例从每个少数类别样本k个近邻中随机选择;选取近邻个数根据类别不均衡率计算;给定m作为少数类别样本的数量,并将n作为多数类别样本的数量,过采样技术的策略是计算不平衡比率ir=m/n;随机选取的近邻个数rk=1/ir-1,如无法除尽,则向上取整;c、合成的少数类别样本是通过在少数类别样本和选取的近邻之间进行插值。所述步骤4)具体为:通过使用步骤3)得到的均衡数据集来训练一套卷积神经网络,即学习卷积神经网络中的权重和偏差;具体来说,所述卷积神经网络由一个输入层、两个卷积层、两个平均池化层和一个完全连接的隐藏层组成,这里提到的七层中都使用relu函数作为激活函数;所述卷积神经网络利用keras工具来实现,构建具有两层卷积层的卷积神经网络后提炼出能够静态代码语义的表达特征。本发明与现有技术相比,具有如下优点和有益效果:本发明利用了卷积神经网络进行软件源码自动化特征的生成,可以有效捕捉到源码中复杂的非线性特征,解决软件缺陷预测方法中缺失对语义特征分析的问题,进而提高缺陷预测模型的准确性。附图说明图1为本发明所述一种基于卷积神经网络的软件缺陷预测方法的流程图。图2为asttoken向量解析例子的示意图。图3为卷积神经网络获取语义表达特征的流程示意图。图4为基于卷积神经网络的软件缺陷预测流程的详细示意图。具体实施方式下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。如图1、2、3、4,一种基于卷积神经网络的软件缺陷预测方法,包括以下步骤:步骤1)解析软件项目中的各文件源代码,得到各文件的abstractsyntaxtrees(ast)token向量,形成asttoken向量集合。具体实现如下:本发明选择源代码文件的ast中节点作为向量的解析粒度。使用一个名为jdt-core的开源java库来解析软件文件的源代码到asttoken向量中。我们主要在ast上选择三种类型的节点作为标记:1)声明节点(含方法声明,类型声明等),其值被提取作为token的值,2)方法调用和类实例创建的节点,它们被记录为它们的方法名或类名,放入token中,以及3)包括if语句,while语句,for语句,throw语句等控制流节点被简单地记录作为它们的节点类型。本发明所选定主要的ast节点在表1中列出。通过这种方式,我们将软件项目中每个源文件转换为一个token向量。如图2所示代码例子所示,代码段可解析成asttoken向量:[for,mymethod,if,continue,print]。步骤2)将步骤1)得到的asttoken向量转换成卷积神经网络的输入所需要的数值向量。因为卷积神经网络的输入需要是数值向量集合,所以该步骤需要将步骤1)中得到的asttoken向量转换成数值向量。为了解决这个问题,我们首先在整数和token之间建立映射,进而将token向量转换为整数向量。每个token都与唯一的整数标识符关联,整数标识符范围从1到token节点类型的总数。此外,卷积神经网络需要输入的向量具有相同的长度,但是不同文件最后的整数向量的长度往往不同。因此我们将0附加到每个整数向量的尾部,使其长度与最长的整数向量一致。另外,我们只处理软件项目中出现两次或更多次的token节点,而将只出现一次的token节点表示为0,以此避免文件因调用很少出现的语句而导致一些意义不大的整数向量。表2中列举了三个asttoken向量的集合以及其转换成整数向量的例子,其中continue语句在集合中只出现过一次,因此我们不考虑它,在第一条整数向量中将其标记其为0,第三条asttoken向量是最长序列,长度为7,因此第一条和第二条整数向量用0补齐长度到7。表1:本发明所选定的主要ast节点表2:asttoken向量转换成数值向量步骤3)利用对少数类别数据的过采样(运用smote方法),对步骤2)得到的数值向量集合数据进行分类不均衡问题的处理。实际上,一些软件项目的缺陷率很低或者很高,所以在基于机器学习的软件缺陷预测问题中,分类不均衡是普遍存在且具有挑战的问题。如果我们对高度分类不均衡的数据集进行分类模型的训练,类不平衡问题可能会给学习带来困难,因为训练出来的分类器倾向于选择多数的类别,并且对少数类别的分类能力较弱。为了缓解这个问题,分类不均衡学习技术被广泛使用。在本发明中,我们在预测模型学习之前使用少数类别数据过采样技术(smote)对模型训练数据进行预处理。此处的smote是一种过度抽样技术,可以综合地创建少数类别的新样本,为学习任务提供更均衡的分类分布。步骤4)在步骤3)中经过分类不均衡问题的处理的数值向量集合的基础上,构建卷积神经网络,提炼出能够静态代码语义的表达特征。我们通过使用步骤3)得到的均衡数据集来训练一套卷积神经网络,即学习卷积神经网络中的权重和偏差。具体来说,我们的卷积神经网络由一个输入层、两个卷积层、两个平均池化层和一个完全连接的隐藏层组成,这里提到的七层中都使用relu函数作为激活函数。图3为该步骤中卷积神经网络获取语义特征流程的示意图。本发明中卷积神经网络的实现利用的是keras工具(http://keras.io)。通过keras可以快速地构建卷积神经网络,并得到卷积神经网络提炼出来的特征向量。步骤5)将步骤4)中卷积神经网络学习的特征向量与基于操作符和操作数的halstead特征,基于依赖性的mccabe特征,基于面向对象程序的ck特征合并(表3列出了典型的halstead、mccabe和ck特征),形成更加完整的静态代码特征向量,并得到基于该特征向量的数据集合。到步骤4)为止,我们只考虑通过卷积神经网络提炼出的基于语义的特征。然而,在传统的缺陷预测方法中,其他特征如复杂性度量和面向对象程序特征也包含了可用于预测缺陷的静态代码特征信息。这些静态特征都可以通过代码分析得到。为了利用这些信息,我们将卷积神经网络学习的特征向量(完全连接的隐藏层所代表的特征向量)与传统的静态特征向量连接起来。这个连接可以通过keras中的合并操作符来实现。图4中包含了卷积神经网络提炼出来的特征与传统手工特征合并的步骤示意图。在完成特征向量合并后我们得到基于该特征向量的数据集合。上述操作完成后该步骤也对数据集合进行z-score标准化处理。表3:有代表性的的halstead、mccabe和ck特征halstead&mccabe特征ck特征操作符数量及操作次数类的方法数量操作对象数量及被操作次数类在继承树中的深度基本复杂度类在继承树中的孩子节点数环形复杂度与类存在耦合关系的其他类的数量设计复杂度类中可调用的外部方法数量代码行数类中访问一个或多个属性的方法数6)将步骤5)中得到的数据集合输入到支持向量机(svm)分类器中,训练出基于卷积神经网络的软件缺陷预测模型。本发明利用开源库libsvm(https://www.csie.ntu.edu.tw/~cjlin/libsvm/)实现svm分类器的训练。最后一个作为支持向量机分类器的卷积神经网络单元输出层使用sigmoid作为激活函数。图4为实现的基于卷积神经网络的软件缺陷预测流程的详细示意图。上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1