一种基于BP神经网络的代码坏味检测方法技术

技术编号:22658496 阅读:75 留言:0更新日期:2019-11-28 03:15
本文发明专利技术涉及一种基于BP神经网络的代码坏味检测方法,属于计算机软件技术领域。首先提取代码坏味实例以及标签信息,然后计算有无代码坏味度量特征,将度量特征和提取到的标签信息进行合并,以此构成训练集,采用Keras建立神经网络,将训练集作为神经网络模型的输入,完成对代码坏味预测输出训练,最后从被测程序中得到的代码坏味实例作为代码坏味测试集,输入到训练好的神经网络模型中,使模型输出代码坏味属于某类。本发明专利技术结合基于度量特征的代码坏味检测技术与神经网络算法,对数据集中含有不同类型的代码坏味进行检测,提高了检测准确度与F1值。

A bad taste detection method of code based on BP neural network

The invention relates to a code bad taste detection method based on BP neural network, which belongs to the technical field of computer software. First, extract the bad taste instance and label information, then calculate whether there is bad taste measurement feature, combine the measurement feature and the extracted label information to form the training set, use keras to build the neural network, take the training set as the input of the neural network model, complete the prediction and output training of bad taste of code, and finally get the bad taste of code from the tested program Example as a code bad taste test set, input to the trained neural network model, so that the model output code bad taste belongs to a certain category. The invention combines code bad taste detection technology based on measurement features and neural network algorithm to detect different types of code bad taste in data set, improving detection accuracy and F1 value.

【技术实现步骤摘要】
一种基于BP神经网络的代码坏味检测方法
本专利技术属于计算机软件
,特别是在代码坏味检测
,用于对一段不稳定或存在潜在问题的代码进行检测,以便于软件质量维护的需求,更具体地,涉及一种基于BP神经网络的代码坏味检测方法。
技术介绍
软件良好的设计质量能使维护和重用变得更加容易和方便,而如果代码中存在各种各样的坏味,那么必将导致软件整体设计质量下降,针对代码坏味检测一直是软件工程领域的研究热点之一,其中研究者们提出了一些基于各类机器学习算法的代码坏味检测方法。Kreimer在提出了一种自适应检测方法,结合决策树算法对过大的类和过长的方法两种代码坏味进行检测。Khomh等人在基于一种目标问题度量方法上,从反模式的定义构建贝叶斯信念网络,并在两个开源程序中验证上帝类。Maiga等人利用一种基于支持向量机的检测方法,在三个开源程序中进行反模式检测。Yang等人通过在克隆代码上应用机器学习算法研究程序员对代码坏味的判断。Palomba等人提出了一种基于信息检索技术来利用程序中的文本信息进行坏味检测的方法。Fontana等人将几种常见的机器学习算法共同应用在各类代码坏味检测上,从实验中针对代码坏味检测,总结了几种表现良好机器学习算法,分别是:J48、随机森林以及贝叶斯网络。Nucci等人考虑到代码坏味数据集的度量特征和坏味类型在数据集中分布情况的两个方面,重新对Fontana等人的研究进行了回顾,揭示了利用机器学习算法检测各类代码坏味的局限性。马赛等人利用潜在语义分析技术对上帝类进行检测。刘丽倩等人将决策树算法与代价敏感学习理论相结合,考虑数据不平衡问题对机器学习算法的影响,进而对长方法进行了检测。综上所述,现有的检测方法通常是基于人工或者工具进行代码坏味特征标记,但存在局限性。通过人工审查或工具依赖于人们的主观经验,且难以对大规模的项目源代码进行人工审查。而通过使用自动工具标注坏味则依赖于工具本身的准确度,工具的默认阈值一般会很低,这就会造成工具检测出来的代码坏味存在大量不是真正影响程序本身的实例,大多数检测工具使用指定的阈值以便区分有无坏味,不同的检测工具检测结果也不尽相同。近年来,为了解决这些局限性,出现的通过机器学习和深度学习技术来对代码坏味进行检测比较成功,在准确度与查全率上有了大幅度提升,但在训练集上是通过标签自动生成的方法进行构造,并且数据集中只包含一种类型的代码坏味类型,难以符合真正在软件设计过程中出现的问题,因为实际软件系统中会存在不同类型的代码坏味。上述问题使得对大规模可信的项目源代码进行代码坏味检测变得尤为困难,所以本专利技术以更接近实际情况对大规模开源项目检测角度出发,通过代码坏味公开数据集,将坏味类型进行合并,使数据集中包含不同坏味类型以及度量特征,并以一种基于BP神经网络的方法对现有的检测方法进行优化。
技术实现思路
长方法和特征依恋分别属于代码坏味其中的一种,长方法在程序中表现为一个方法中存在大量的函数,而特征依恋在程序中的表现为一个方法中大量使用其它类中的成员。本专利技术针对代码坏味检测的数据集中存在单一类型的问题,并不符合软件实际开发过程中代码坏味在数据集中分布情况,提出了一种基于BP神经网络对长方法和特征依恋两种代码坏味类型合并之后的数据集检测方法。为实现上述目的,本专利技术采取的技术方案为:一种基于BP神经网络的代码坏味检测的方法,包括有以下步骤:(1)提取代码坏味实例以及标签信息;具体实现过程为:首先,针对长方法和特征依恋两种代码坏味类型,使用代码坏味自动检测工具对开源软件系统进行检测,提取这两种代码坏味实例和无坏味实例,然后对其设置标签:0代表无坏味,1代表长方法,2代表特征依恋;所述的代码坏味自动检测工具为:iPlasma、inFusion、Checkstyle其中一种;(2)计算有代码坏味实例和无代码坏味实例度量特征;所述的度量特征指的是软件规模度量、内聚度度量和耦合度度量;具体实现过程为:使用浮点数序列对有代码坏味和无代码坏味实例度量特征进行编码表示,其中0代表某度量特征不是影响代码坏味因素,纯小数值代表某度量特征是影响代码坏味因素;(3)将步骤(1)和步骤(2)中的度量特征和标签进行合并,以此构成训练集;具体实现过程为:首先根据得到的度量特征以及标签信息进行合并,并对度量特征以及标签信息转换为向量表示<m11,m12,m13,......,p1n>,m表示特征度量,p表示为标签;通过合并之后的代码坏味训练集结构为:每一行代表代码坏味实例,每一列代表度量特征,最后一列为标签信息,其中k表示代码坏味实例数量,并以此形成一种矩阵数据M,可以表示为:(4)将构建好的训练集输入神经网络,进行神经网络模型训练;具体方式为:构建的神经网络采用全连接形式,第一层为一个输入层,第二层是隐藏层,网络的最后一层是输出层,输出层采用Softmax并输出代码坏味属于某类;并将步骤(2)中的代码坏味度量特征作为输入层的输入,将步骤(1)中的标签信息作为网络输出基准,可以表示为Yreal,输出层的输出值可以表示为Ypred,如果Yreal与Ypred之间的误差小于当前设定的阈值或者训练迭代轮数达到阈值,则完成神经网络对代码坏味预测输出训练,否则返回BP神经网络输入层阶段进行模型训练;(5)将被测程序中得到代码坏味实例作为代码坏味测试集,并且按照步骤(3)中所述方式对测试数据进行合并与向量形式转换,将得到的测试集输入步骤(5)中训练好的神经网络模型中,模型自动输出0或1或2,其中0代表不存在坏味,1代表长方法,2代表特征依恋。与现有技术相比,本专利技术的优点和有益效果是:本专利技术提供的检测方法可以解决现有技术在标注代码坏味的可信度难以保证的技术缺陷,以及将两种代码坏味数据集进行合并,使得数据集中包含不同代码坏味类型,使其更接近实际软件开发情况,并提高了准确度与F1值。附图说明图1为所述方法流程图。图2为基于BP神经网络的检测模型结构图。具体实施方案对于某个软件项目的源代码,目前主流是利用代码坏味自动检测工具来检测程序当中的坏味实体,每个工具对代码坏味检测的类型也不相同,缺少客观性。本专利技术通过代码坏味检测工具对15个Java开源项目检测,以此获取到代码坏味实例,并针对特征依恋和长方法的两种样本集进行合并,使代码坏味数据集中包含不同坏味类型以及度量特征值。通过从数据集中提取符合预设输入的软件度量特征,作为BP神经网络的输入,网络的预期输出为样本的标签,经过多次迭代训练后,可以得到最终被训练好的神经网络模型,并利用Fontana等人提出的公开代码坏味数据集作为测试集,对训练好的模型进行测试。表1为开发环境配置信息,表2为数据集所选的项目总体规模。表1开发环境配置信息表表2项目总体规模汇总表系统数量代码行数包的数量类的数量方法数量7本文档来自技高网
...

【技术保护点】
1.一种基于BP神经网络的代码坏味检测方法,其特征在于以下步骤:/n(1)提取代码坏味实例以及标签信息;/n具体实现过程为:首先,针对长方法和特征依恋两种代码坏味类型,使用代码坏味自动检测工具对开源软件系统进行检测,提取这两种代码坏味实例和无坏味实例,然后对其设置标签:0代表无坏味,1代表长方法,2代表特征依恋;/n所述的代码坏味自动检测工具为:iPlasma、inFusion、Checkstyle其中一种;/n(2)计算有代码坏味实例和无代码坏味实例度量特征;/n所述的度量特征指的是软件规模度量,内聚度度量和耦合度度量;/n具体实现过程为:使用浮点数序列对有代码坏味和无代码坏味实例度量特征进行编码表示,其中0代表某度量特征不是影响代码坏味因素,纯小数值代表某度量特征是影响代码坏味因素;/n(3)将步骤(1)和步骤(2)中的度量特征和标签进行合并,以此构成训练集;/n具体实现过程为:首先根据得到的度量特征以及标签信息进行合并,并对度量特征以及标签信息转换为向量表示<m

【技术特征摘要】
1.一种基于BP神经网络的代码坏味检测方法,其特征在于以下步骤:
(1)提取代码坏味实例以及标签信息;
具体实现过程为:首先,针对长方法和特征依恋两种代码坏味类型,使用代码坏味自动检测工具对开源软件系统进行检测,提取这两种代码坏味实例和无坏味实例,然后对其设置标签:0代表无坏味,1代表长方法,2代表特征依恋;
所述的代码坏味自动检测工具为:iPlasma、inFusion、Checkstyle其中一种;
(2)计算有代码坏味实例和无代码坏味实例度量特征;
所述的度量特征指的是软件规模度量,内聚度度量和耦合度度量;
具体实现过程为:使用浮点数序列对有代码坏味和无代码坏味实例度量特征进行编码表示,其中0代表某度量特征不是影响代码坏味因素,纯小数值代表某度量特征是影响代码坏味因素;
(3)将步骤(1)和步骤(2)中的度量特征和标签进行合并,以此构成训练集;
具体实现过程为:首先根据得到的度量特征以及标签信息进行合并,并对度量特征以及标签信息转换为向量表示<m11,m12,m13,......,p1n>,m表示特征度量,p表示...

【专利技术属性】
技术研发人员:王曙燕张一权孙家泽
申请(专利权)人:西安邮电大学
类型:发明
国别省市:陕西;61

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1