CN111767216B - 一种可缓解类重叠问题的跨版本深度缺陷预测方法 - Google Patents
一种可缓解类重叠问题的跨版本深度缺陷预测方法 Download PDFInfo
- Publication number
- CN111767216B CN111767216B CN202010581583.7A CN202010581583A CN111767216B CN 111767216 B CN111767216 B CN 111767216B CN 202010581583 A CN202010581583 A CN 202010581583A CN 111767216 B CN111767216 B CN 111767216B
- Authority
- CN
- China
- Prior art keywords
- class
- semantic
- learning
- data set
- current
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/23—Clustering techniques
- G06F18/232—Non-hierarchical techniques
- G06F18/2321—Non-hierarchical techniques using statistics or function optimisation, e.g. modelling of probability density functions
- G06F18/23213—Non-hierarchical techniques using statistics or function optimisation, e.g. modelling of probability density functions with fixed number of clusters, e.g. K-means clustering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Evolutionary Computation (AREA)
- Bioinformatics & Cheminformatics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Evolutionary Biology (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种可缓解类重叠问题的跨版本深度缺陷预测方法,包括如下:1、跨版本软件缺陷预测中面向深度语义学习的整体框架;2、基于卷积神经网络的语义特征学习模型;3、面向深度语义学习的混合式最近邻清理策略。本发明采用混合式最近邻清理策略来缓解深度学习学出的语义特征中存在的类重叠问题。具体来说对源代码对应的抽象语法树,采用卷积神经网络学出深度语义特征,继而采用混合式最近邻清理策略对标注数据集进行重采样与数据清理。采用混合式最近邻清理策略能够处理类不平衡问题与类重叠问题,对数据的统计分析结果表明该策略能够提升基于深度语义学习的软件缺陷预测的性能。
Description
技术领域
本发明具体涉及一种可缓解类重叠问题的跨版本深度缺陷预测方法。
背景技术
软件缺陷预测(software defect prediction)被用来识别软件开发过程中的软件缺陷。软件开发过程中产生的历史数据构成了软件缺陷预测分类器的训练数据,这些数据可以从文件、类等多个粒度进行标注。从软件开发过程(software process)角度出发面向历史数据的度量元被人工设计用于构建分类模型,这些度量元包括基于代码行数(linesof code)的度量元、Halstead科学度量、以及McCabe环路复杂度(cyclomatic complexity)等。传统的项目内缺陷预测模型关注静态度量元,基于度量元进行分类模型构建,基于潜在的有缺陷模块应该具有相同的统计分布特征。然而在实际的软件开发过程中,静态度量元构建的分类器无法预测具有相同的统计特征分布却具有不同语义特征的代码模块,比如JAVA代码中Queue队列的add,remove方法的先后顺序虽然具有相同的统计分布特征,却具有明显不同的语义特征。通过使用自编码网络,卷积神经网络等深度学习框架能够从源数据集中学习到语义特征,建立面向语义学习的软件缺陷预测模型。在实际的训练数据集标注过程中,拥有不同的数据标记却在特征空间中有相同的特征,这种类重叠(classoverlap)问题是由于标注过程中的多种因素造成的。类重叠问题是数据挖掘以及机器学习中常见的问题,影响了分类性能。类重叠的训练样例模糊了分类边界,增大了分类的难度。很多应用领域都存在类重叠问题,比如信用卡欺诈检测领域、文本分类领域等等。然而这些策略都是基于传统的静态度量元进行的,面向基于语义学习的软件缺陷预测的类重叠问题研究较少。
基于此,本发明将基于卷积神经网络的深度学习框架应用到跨版本软件缺陷预测中,设计了面向跨版本软件缺陷预测的深度学习框架,从前一个版本的历史数据中根据抽象语法树构建基于文件级别的特征语义向量;以该语义向量为基础,改进了数据抽样策略,融合基于近邻的样例清理策略与基于K-Means算法的清理策略,对训练数据集进行预处理,作为Logistic Regression分类器的输入训练分类模型。将下一个版本软件代码作为测试数据集,使用常见的AUC(Area Under Curve)作为分类性能的评价指标,测试了该清理策略的有效性。通过对实验结果使用Friedman test与Nemenyi后检验进行统计分析,证明该策略能够解决类重叠问题,提升基于深度语义学习特征的分类器的性能。
发明内容
发明目的:针对软件缺陷预测建模时未充分使用源代码语义特征以及学出的语义特征中存在的类重叠问题,本发明提供了一种可缓解类重叠问题的跨版本深度缺陷预测方法。
技术方案:一种可缓解类重叠问题的跨版本深度缺陷预测方法,包括如下:1、跨版本软件缺陷预测中面向深度语义学习的整体框架;2、基于卷积神经网络的语义特征学习模型;3、面向深度语义学习的混合式最近邻清理策略;具体如下:
1.跨版本软件缺陷预测中面向深度语义学习的整体框架:
该方法采用混合式最近邻清理策略处理深度语义特征学习过程中的类重叠,使用该方法可以自动的从源代码中学习语义和结构特征,为分类器提供基于深度语义学习的特征向量;
该方法首先从训练数据集和测试数据集出发,构建抽象语法树(Abstract SyntaxTrees),具体实验中,采用软件开发过程中发布的前一个版本的历史数据作为训练数据集,下一个版本的软件开发数据作为测试数据集;构建抽象语法树过程中,选择具有代表性的语法树节点表示软件模块,每个软件模块构筑符号向量;
符号向量采用one-hot编码方式进行编码,对输入向量进行词嵌入,作为卷积神经网络的输入,卷积神经网络随后从输入向量中自动学习深度语义特征,由于标注过程中的噪音的存在,类重叠不可避免,有必要对深度语义特征进行预处理;考虑在软件缺陷预测数据集中普遍存在的类不平衡问题,对训练数据进行过采样,过采样完的数据集可能会带来更多的类重叠;从近邻出发,对多数类与少数类同时进行清理,处理潜在的重叠软件模块向量;经过预处理的深度语义特征,作为传统分类器,比如Logistic Regression分类器的输入;在Logistic Regression分类器上训练分类模型,并对测试数据集进行测试;
2.基于卷积神经网络的语义特征学习模型:
卷积神经网络拥有深度特征提取的能力,基于源代码使用one-hot编码以后的特征向量具有内在的语义和语法结构,通过引入CNN能够创建表征语义信息的新的深度特征向量;本文提出的基于卷积神经网络的语义特征学习模型采用的是有监督的深度语义学习范式,通过对训练数据集的优化能够生成更加适合当前项目的语义;
假定当前软件项目有文件数目为n,X={x1x2,..xn}软件缺陷预测问题可以被形式化为学习任务,该学习任务从训练数据集中学习预测函数:
F:X→Y,yi∈Y={1,0} (1)
其中yi∈Y,指示软件模块是否含有软件缺陷;
软件项目源文件被编码为one-hot特征向量,以one-hot特征向量输入采用预训练的word2vec模型获取词嵌入向量;对项目文件xi,其one-hot特征向量为max表示为该文件中最大特征标记数目;该标记指的是具有代表性的语法树节点,同时剔除了文件中数目小于3的标记;经过word2vec模型处理完以后,得到具有固定长度的词嵌入向量,该向量为:vi∈Rp×q;vi表示对应于项目文件xi的词嵌入向量;
训练过的词嵌入向量作为CNN的输入,在输入方向设置多个一维卷积核,从词嵌入向量中提取单词的特征,并将输出结果输入到池化层;为了对优化过程中的参数加以约束,引入正则化,采用dropout方法在反向传播误差更新权值时候随机删除部分神经元;
对池化层输出展开为全连接层,多次迭代训练得到语义特征向量;训练过程中采用minibatch stochastic gradient descent算法,优化器选用Adam optimizer,基于该语义特征向量来判断当前模块是否存在缺陷;
3.面向深度语义学习的混合式最近邻清理策略:
该策略以生成的深度语义特征向量集合为输入,根据集合中标记的不同,将样例分为Cmax和Cmin两类,算法过程大致分为三个步骤:
第一个步骤是对少数类样例循环遍历,依据欧式距离选择k个最近邻,并使用随机种子数在某个样例与最近邻之间生成新的样例,迭代完成过采样,实现多数类与少数类之间的平衡,解决类不平衡问题;
第二个步骤是在新生成的少数类集合C′min与多数类集合Cmax上分别进行迭代,依据欧式距离计算得到与样例最近的Nx近邻;如果该近邻的标记与当前的标记不一致,则最终删除,实现对多数类与少数类潜在类重叠模块的清理;
第三个步骤是将第二个步骤的输出{C″min,C′max}作为输入,计算当前两类模块的统计分布值,使用标准K-means聚类算法划分为k簇,对每个簇进行遍历,根据当前簇两个模块的统计分布值删除对应的模块,实现对多数类与少数类潜在类重叠模块的清理。
2.根据权利要求1所述的可缓解类重叠问题的跨版本深度缺陷预测方法,其特征在于:所述面向深度语义学习的混合式最近邻清理策略中的算法1混合式最近邻策略如下:
1)输入:训练数据集T={Cmax,Cmin},其中Cmax属于多数类,Cmin属于少数类,d表示有缺陷模块与所有模块数目的比值;
输出:清理完成的数据集T′={C″′max,C″′min};
2)遍历Cmin.集合中的每个样例;
3)利用欧氏距离选择k最近邻;
4)选择样例xi(nn),生成随机数δ,δ∈{0,1};
5)刊用当前样例与xi(nn)生成新样例:xi1=xi+δ*(xi(nn)-xi);
6)将新生成样例加入到Cmin集合,更新集合为C′min;
7)遍历Cmin.集合中的每个样例完成后,遍历Cmin集合中的每个样例;
8)根据预定义的欧式距离计算与当前样例最近的Nx个样例;
9)如果Nx中任意一个样例包含于集合Cmax,则删除;
10)更新集合Cmax为C′max;
11)同理,遍历Cmax集合中的每个样例,删除类重叠样例,更新C′min为C″min;
12)定义当前的输入数据集为{C″min,C′max};
14)使用标准K-means算法将数据集分为k簇;
15)循环遍历每个簇;
19)合并所有簇中剩余的样例为新的输出集合T′。
有益效果:本发明采用混合式最近邻清理策略来缓解深度学习学出的语义特征中存在的类重叠问题。具体来说对源代码对应的抽象语法树,采用卷积神经网络学出深度语义特征,继而采用混合式最近邻清理策略对标注数据集进行重采样与数据清理。在PROMISE公开数据集上进行实证研究发现,采用混合式最近邻清理策略能够处理类不平衡问题与类重叠问题,对数据的统计分析结果表明该策略能够提升基于深度语义学习的软件缺陷预测的性能,使用混合式最近邻清理策略能够比不处理类重叠问题情况下,AUC指标最多在中值上提升14.8%。
附图说明
图1是本发明的面向类重叠的跨版本软件缺陷深度特征学习方法CnnSncr流程图;
图2是本发明的采用的具有代表性的语法树节点示意图;
图3是本发明的深度特征语义向量生成过程示意图;
图4是本发明的不同数据处理策略的性能对比小提琴图。
具体实施方式
下面将对本发明实施例中的技术方案进行清楚、完整地描述,以使本领域的技术人员能够更好的理解本发明的优点和特征,从而对本发明的保护范围做出更为清楚的界定。本发明所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
本发明包括跨版本软件缺陷预测中面向深度语义学习的整体框架、基于卷积神经网络的语义特征学习模型和面向深度语义学习的混合式最近邻清理策略。
1.跨版本软件缺陷预测中面向深度语义学习的整体框架
针对软件缺陷预测过程中未充分使用源代码语义特征以及训练数据集中类重叠问题,提出一种面向类重叠的跨版本软件缺陷深度特征学习方法CnnSncr,该方法采用混合式最近邻清理策略处理深度语义特征学习过程中的类重叠。使用该方法可以自动的从源代码中学习语义和结构特征,为分类器提供基于深度语义学习的特征向量。该方法的整体流程如图1所示。
该方法首先从训练数据集和测试数据集出发,构建抽象语法树(Abstract SyntaxTrees),具体实验中,采用软件开发过程中发布的前一个版本的历史数据作为训练数据集,下一个版本的软件开发数据作为测试数据集。构建抽象语法树过程中,选择具有代表性的语法树节点表示软件模块,每个软件模块构筑符号向量。采用的具有代表性的语法树节点如图2所示。
符号向量采用one-hot编码方式进行编码,对输入向量进行词嵌入,作为卷积神经网络的输入。卷积神经网络随后从输入向量中自动学习深度语义特征。由于标注过程中的噪音的存在,类重叠不可避免,有必要对深度语义特征进行预处理。考虑在软件缺陷预测数据集中普遍存在的类不平衡问题,对训练数据进行过采样,过采样完的数据集可能会带来更多的类重叠。从近邻出发,对多数类与少数类同时进行清理,处理潜在的重叠软件模块向量。经过预处理的深度语义特征,作为传统分类器,比如Logistic Regression分类器的输入。在Logistic Regression分类器上训练分类模型,并对测试数据集进行测试。
2.基于卷积神经网络的语义特征学习模型
卷积神经网络(Convolutional Neural Networks,CNN)拥有深度特征提取的能力,基于源代码使用one-hot编码以后的特征向量具有内在的语义和语法结构,通过引入CNN能够创建表征语义信息的新的深度特征向量。考虑到不同的源代码之间拥有较大的文件大小差异,本文提出的基于卷积神经网络的语义特征学习模型采用的是有监督的深度语义学习范式,通过对训练数据集的优化能够生成更加适合当前项目的语义。
假定当前软件项目有文件数目为n,X={x1x2,..xn},软件缺陷预测问题可以被形式化为学习任务,该学习任务从训练数据集中学习预测函数:
F:X→Y,yi∈Y={1,0} (1)
其中yi∈Y,指示软件模块是否含有软件缺陷;
软件项目源文件被编码为one-hot特征向量,以one-hot特征向量输入采用预训练的word2vec模型获取词嵌入向量;对项目文件xi,其one-hot特征向量为max表示为该文件中最大特征标记数目;该标记指的是具有代表性的语法树节点,同时剔除了文件中数目小于3的标记;经过word2vec模型处理完以后,得到具有固定长度的词嵌入向量,该向量为:vi∈Rp×q;vi表示对应于项目文件xi的词嵌入向量。
训练过的词嵌入向量作为CNN的输入。在输入方向设置多个一维卷积核,从词嵌入向量中提取单词的特征,并将输出结果输入到池化层。为了对优化过程中的参数加以约束,引入正则化,采用dropout方法在反向传播误差更新权值时候随机删除部分神经元。
对池化层输出展开为全连接层,多次迭代训练得到语义特征向量。训练过程中采用minibatch stochastic gradient descent算法,优化器选用Adam optimizer。基于该语义特征向量来判断当前模块是否存在缺陷。
3.面向深度语义学习的混合式最近邻清理策略
基于卷积神经网络的深度语义学习模型,能够从软件开发过程中的源代码学习到语义特征。软件缺陷模块标注存在特征相同却拥有不同标记的情况,这种情况被称作类重叠(class overlap),类重叠问题同样存在于文本分类等领域。本发明使用混合式的策略来解决类重叠问题,该策略为special neighborhood cleaning rule(SNCR)。该策略的伪代码如算法1所示。
算法1混合式最近邻策略
1)输入:训练数据集T={Cmax,Cmin},其中Cmax属于多数类,Cmin属于少数类,d表示有缺陷模块与所有模块数目的比值;
输出:清理完成的数据集T′={C″′max,C″′min};
2)遍历Cmin.集合中的每个样例;
3)利用欧氏距离选择k最近邻;
4)选择样例xi(nn),生成随机数δ,δ∈{0,1};
5)利用当前样例与xi(nn)生成新样例:xi1=xi+δ,*(xi(nn)-xi);
6)将新生成样例加入到Cmin集合,更新集合为C′min;
7)遍历Cmin.集合中的每个样例完成后,遍历Cmin集合中的每个样例;
8)根据预定义的欧式距离计算与当前样例最近的Nx个样例;
9)如果Nx中任意一个样例包含于集合Cmax,则删除;
10)更新集合Cmax为C′max;
11)同理,遍历Cmax集合中的每个样例,删除类重叠样例,更新C′min为C″min;
12)定义当前的输入数据集为{C″min,C′max};
14)使用标准K-means算法将数据集分为k簇;
15)循环遍历每个簇;
19)合并所有簇中剩余的样例为新的输出集合T′。
该策略以生成的深度语义特征向量集合为输入,根据集合中标记的不同,将样例分为Cmax和Cmin两类,算法过程大致分为三个步骤:
第一个步骤是对少数类样例循环遍历,依据欧式距离选择k个最近邻,并使用随机种子数在某个样例与最近邻之间生成新的样例,迭代完成过采样,实现多数类与少数类之间的平衡,解决类不平衡问题;
第二个步骤是在新生成的少数类集合C′min与多数类集合Cmax上分别进行迭代,依据欧式距离计算得到与样例最近的Nx近邻;如果该近邻的标记与当前的标记不一致,则最终删除,实现对多数类与少数类潜在类重叠模块的清理:
第三个步骤是将第二个步骤的输出{C″min,C′max}作为输入,计算当前两类模块的统计分布值,使用标准K-means聚类算法划分为k簇,对每个簇进行遍历,根据当前簇两个模块的统计分布值删除对应的模块,实现对多数类与少数类潜在类重叠模块的清理。
提出SNCR策略的动机是,从直观上讲软件缺陷深度语义数据集包含大量数据,并且类重叠的问题是不可避免的,仅对大多数类别进行欠采样来解决类别不平衡的问题是不合理的。因此,首先应使用过采样来使不同类型直接达到数据平衡。同时,过采样也可能导致更多的类重叠。此时,同时对当前多数类和少数类执行最近邻居学习,并消除了潜在的类重叠实例。由于深度语义数据量相对较大,除了使用上述最近邻方法查找潜在的类重叠实例外,还可以通过引入标准K-Means算法来分析当前数据集。对数据集执行聚类分析,并删除每个集群中的异常实例。
实验测试例1
本发明的实验测试如下:本发明的实验过程包括实验数据集、评价指标以及数据统计分析方法和实验中用以进行比较的类重叠处理策略等。所有实验基于至强E5-2670的CPU与16G内存的工作站上完成,同时在NVIDIA GeForce RTX 2070上的GPU上训练深度神经网络并进行分析处理。实验中使用的相关分类器来源于scikit-learn,深度神经网络库采用TensofFlow 2.0稳定版本。
1.实验数据集
该实验采用的软件缺陷预测数据集来源于PROMISE数据仓库,该数据集为公开的数据集,在软件缺陷预测问题上被广泛使用。该数据集中七个开源的JAVA软件项目被选择以完成实验,因为每个软件项目的版本号、类名称、相关的标记都是确定的,与类名称相对应的源代码从GitHub上下载并进行分析处理。表I简要的描述了实验中用到的七个项目,包括项目描述,版本号,缺陷模块比例等。为了获取项目中用到的训练数据集和测试数据集,将前一个版本的源代码作为训练数据集,而将下一个相邻版本的源代码作为测试数据集。本实验中没有使用传统的基于统计的软件缺陷特征。
表I数据集描述
2.评价指标以及数据统计分析方法
鉴于软件缺陷预测数据集中常见的类不平衡问题,AUC(area under thereceiver operating characteristic curve)被作为分类器性能的评价指标。AUC定义为ROC曲线和坐标轴所包围的区域。最大值不能超过1,AUC值越接近1,则分类器检测的真实性越高。相反,当它接近最小值0.5时,表示没有应用价值。为了对详细的预测结果进行统计评估,我们首先使用Friedman test确定不同的数据处理策略之间是否存在统计学上的显着差异。如果存在统计学上的显着差异,则应用post-hoc Nemenyi test比较差异。
3.实验中用到的类重叠处理策略
为了比较类重叠对基于深度语义的软件缺陷预测分类性能的影响,将SNCR策略与IKMCCA策略,以及NCR策略进行了比较。为了公平起见,将以上种数据预处理策略与没有数据预处理的情况进行了比较,该策略被记为noclean策略。
4.结果分析
对实验结果进行展示以对比在使用了数据处理策略以后与未使用数据处理策略情况下的性能差别。使用IKMCCA与SNCR策略的时候,算法中的超参数值p%被设定为少数类与多数类之间的比值。不同数据处理策略的性能对比小提琴图如图4所示。从图中,可以观察到,使用SNCR策略可以获得Logistic Regression分类器上AUC度量的最佳中值。也就是说,(1)与noclean策略相比,最好考虑使用清洗策略来解决类重叠问题;(2)与IKMCCA与NCR相比,SNCR方法在七个开源项目组成的数据集上表现更好。
评价指标的图形显示不能量化表明不同策略的直接差异;同时,为了从统计角度比较差异训练数据集上不同策略的性能,使用置信度为95%的非参数Friedman test对结果进行统计分析。首先,我们定义Null和Alternative Hypotheses,如下所示:
H0:基于深度学习学出的语义特征,不同针对类重叠问题的数据预处理方法不存在性能差异。
H1:基于深度学习学出的语义特征,不同针对类重叠问题的数据预处理方法存在性能差异。
其次,设置显着性水平α=0.05,通过计算发现计算值小于临界值,因此NullHypotheses被拒绝,这四种策略之间存在统计差异。为了揭示不同策略之间的差异,进一步采用post-hoc Nemenyi test分析方法。表II显示了使用AUC指标的四种数据处理策略的平均排名结果。
表II基于AUC指标的不同策略的平均排名
本发明中的类重叠问题的结果是语义特征向量在特征空间中重叠,这种模糊性削弱了分类器的边界,并导致分类器的性能下降。鉴于此,从解决深度语义特征学习和噪声清除的角度出发,本发明公开了一种SNCR策略。同时,通过实验来进行深入研究,以确定是否使用这种策略解决类重叠问题可以有效提高分类器的性能。在PROMISE公开数据集上进行实证研究发现,采用混合式最近邻清理策略能够处理类不平衡问题与类重叠问题,对数据的统计分析结果表明该策略能够提升基于深度语义学习的软件缺陷预测的性能,使用混合式最近邻清理策略能够比不处理类重叠问题情况下,AUC指标最多在中值上提升14.8%。
Claims (2)
1.一种可缓解类重叠问题的跨版本深度缺陷预测方法,其特征在于:包括如下:步骤一、创建跨版本软件缺陷预测中面向深度语义学习的整体框架;步骤二、训练基于卷积神经网络的语义特征学习模型;步骤三、设计面向深度语义学习的混合式最近邻清理策略;具体如下:
步骤一、创建跨版本软件缺陷预测中面向深度语义学习的整体框架:
该方法采用混合式最近邻清理策略处理深度语义特征学习过程中的类重叠,使用该方法自动的从源代码中学习语义和结构特征,为分类器提供基于深度语义学习的特征向量;
该方法首先从训练数据集和测试数据集出发,构建抽象语法树(Abstract SyntaxTrees),具体实验中,采用软件开发过程中发布的前一个版本的历史数据作为训练数据集,下一个版本的软件开发数据作为测试数据集;构建抽象语法树过程中,选择具有代表性的语法树节点表示软件模块,每个软件模块构筑符号向量;
符号向量采用one-hot编码方式进行编码,对输入向量进行词嵌入,作为卷积神经网络的输入,卷积神经网络随后从输入向量中自动学习深度语义特征,由于标注过程中的噪音的存在,类重叠不可避免,有必要对深度语义特征进行预处理;考虑在软件缺陷预测数据集中普遍存在的类不平衡问题,对训练数据进行过采样,过采样完的数据集会带来更多的类重叠;从近邻出发,对多数类与少数类同时进行清理,处理潜在的重叠软件模块向量;经过预处理的深度语义特征,作为传统分类器,Logistic Regression分类器的输入;在Logistic Regression分类器上训练分类模型,并对测试数据集进行测试;
步骤二、训练基于卷积神经网络的语义特征学习模型:
卷积神经网络拥有深度特征提取的能力,基于源代码使用one-hot编码以后的特征向量具有内在的语义和语法结构,通过引入CNN能够创建表征语义信息的新的深度特征向量;基于卷积神经网络的语义特征学习模型采用的是有监督的深度语义学习范式,通过对训练数据集的优化能够生成更加适合当前项目的语义;
假定当前软件项目有文件数目为n,X={x1,x2,..xn},软件缺陷预测问题被形式化为学习任务,该学习任务从训练数据集中学习预测函数:
F:X→Y,yi∈Y={1,0} (1)
其中yi∈Y,指示软件模块是否含有软件缺陷;
软件项目源文件被编码为one-hot特征向量,以one-hot特征向量输入采用预训练的word2vec模型获取词嵌入向量;对项目文件xi,其one-hot特征向量为max表示为该文件中最大特征标记数目;该标记指的是具有代表性的语法树节点,同时剔除了文件中数目小于3的标记;经过word2vec模型处理完以后,得到具有固定长度的词嵌入向量,该向量为:vi∈Rp×q;vi表示对应于项目文件xi的词嵌入向量;
训练过的词嵌入向量作为CNN的输入,在输入方向设置多个一维卷积核,从词嵌入向量中提取单词的特征,并将输出结果输入到池化层;为了对优化过程中的参数加以约束,引入正则化,采用dropout方法在反向传播误差更新权值时候随机删除部分神经元;
对池化层输出展开为全连接层,多次迭代训练得到语义特征向量;训练过程中采用minibatch stochastic gradient descent算法,优化器选用Adam optimizer,基于该语义特征向量来判断当前模块是否存在缺陷;
步骤三、设计面向深度语义学习的混合式最近邻清理策略:
该策略以生成的深度语义特征向量集合为输入,根据集合中标记的不同,将样例分为Cmax和Cmin两类,算法过程大致分为三个步骤:
第一个步骤是对少数类样例循环遍历,依据欧式距离选择k个最近邻,并使用随机种子数在某个样例与最近邻之间生成新的样例,迭代完成过采样,实现多数类与少数类之间的平衡,解决类不平衡问题;
第二个步骤是在新生成的少数类集合C′min与多数类集合Cmax上分别进行迭代,依据欧式距离计算得到与样例最近的Nx近邻;如果该近邻的标记与当前的标记不一致,则最终删除,实现对多数类与少数类潜在类重叠模块的清理;
第三个步骤是将第二个步骤的输出{C″min,C′max}作为输入,计算当前两类模块的统计分布值,使用标准K-means聚类算法划分为k簇,对每个簇进行遍历,根据当前簇两个模块的统计分布值删除对应的模块,实现对多数类与少数类潜在类重叠模块的清理。
2.根据权利要求1所述的可缓解类重叠问题的跨版本深度缺陷预测方法,其特征在于:所述面向深度语义学习的混合式最近邻清理策略中的算法1混合式最近邻策略如下:
1)输入:训练数据集T={Cmax,Cmin},其中Cmax属于多数类,Cmin属于少数类,d表示有缺陷模块与所有模块数目的比值;
输出:清理完成的数据集T′={C″′max,C″′min};
2)遍历Cmin.集合中的每个样例;
3)利用欧氏距离选择k最近邻;
4)选择样例xi(nn),生成随机数δ,δ∈{0,1};
5)利用当前样例与xi(nn)生成新样例:xi1=xi+δ*(xi(nn)-xi);
6)将新生成样例加入到Cmin集合,更新集合为C′min;
7)遍历Cmin集合中的每个样例完成后,遍历C′min集合中的每个样例;
8)根据预定义的欧式距离计算与当前样例最近的Nx个样例;
9)如果Nx中任意一个样例包含于集合Cmax,则删除;
10)更新集合Cmax为C′max;
11)同理,遍历Cmax集合中的每个样例,删除类重叠样例,更新Cmin为Cmin;
12)定义当前的输入数据集为{C″min,C′max};
14)使用标准K-means算法将数据集分为k簇;
15)循环遍历每个簇;
19)合并所有簇中剩余的样例为新的输出集合T′。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010581583.7A CN111767216B (zh) | 2020-06-23 | 2020-06-23 | 一种可缓解类重叠问题的跨版本深度缺陷预测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010581583.7A CN111767216B (zh) | 2020-06-23 | 2020-06-23 | 一种可缓解类重叠问题的跨版本深度缺陷预测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111767216A CN111767216A (zh) | 2020-10-13 |
CN111767216B true CN111767216B (zh) | 2022-08-09 |
Family
ID=72721787
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010581583.7A Active CN111767216B (zh) | 2020-06-23 | 2020-06-23 | 一种可缓解类重叠问题的跨版本深度缺陷预测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111767216B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113204482B (zh) * | 2021-04-21 | 2022-09-13 | 武汉大学 | 基于语义属性子集划分与度量匹配的异质缺陷预测方法及系统 |
CN113204481B (zh) * | 2021-04-21 | 2022-03-04 | 武汉大学 | 一种基于数据重采样的类不平衡软件缺陷预测方法 |
CN117472789B (zh) * | 2023-12-28 | 2024-03-12 | 成都工业学院 | 基于集成学习的软件缺陷预测模型构建方法和装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108563556A (zh) * | 2018-01-10 | 2018-09-21 | 江苏工程职业技术学院 | 基于差分演化算法的软件缺陷预测优化方法 |
CN108829607B (zh) * | 2018-07-09 | 2021-08-10 | 华南理工大学 | 一种基于卷积神经网络的软件缺陷预测方法 |
CN109214191A (zh) * | 2018-09-18 | 2019-01-15 | 北京理工大学 | 一种利用深度学习预测软件安全漏洞的方法 |
-
2020
- 2020-06-23 CN CN202010581583.7A patent/CN111767216B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN111767216A (zh) | 2020-10-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111783100B (zh) | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 | |
CN111767216B (zh) | 一种可缓解类重叠问题的跨版本深度缺陷预测方法 | |
CN110232280B (zh) | 一种基于树结构卷积神经网络的软件安全漏洞检测方法 | |
CN112507699B (zh) | 一种基于图卷积网络的远程监督关系抽取方法 | |
Lin et al. | Parameter tuning, feature selection and weight assignment of features for case-based reasoning by artificial immune system | |
Fan et al. | Querying big graphs within bounded resources | |
CN112364352B (zh) | 可解释性的软件漏洞检测与推荐方法及系统 | |
CN111275172A (zh) | 一种基于搜索空间优化的前馈神经网络结构搜索方法 | |
WO2020092020A1 (en) | Learning property graph representations edge-by-edge | |
CN101404033A (zh) | 本体层级结构的自动生成方法及系统 | |
CN113221960B (zh) | 一种高质量漏洞数据收集模型的构建方法及收集方法 | |
Garzón et al. | On the performance of deep generative models of realistic sat instances | |
CN112888008B (zh) | 基站异常检测方法、装置、设备及存储介质 | |
Hasanpour et al. | Improving rule-based classification using Harmony Search | |
CN111240993B (zh) | 一种基于模块依赖图的软件缺陷预测方法 | |
US20220172105A1 (en) | Efficient and scalable computation of global feature importance explanations | |
Zhou et al. | Deeptle: Learning code-level features to predict code performance before it runs | |
Morshed et al. | LeL-GNN: Learnable edge sampling and line based graph neural network for link prediction | |
US11609936B2 (en) | Graph data processing method, device, and computer program product | |
CN114722920A (zh) | 一种基于图分类的深度图卷积模型钓鱼账户识别方法 | |
Jaroszewicz | Using interesting sequences to interactively build Hidden Markov Models | |
KR102440629B1 (ko) | 반도체 설계를 위한 신경망 모델 학습 방법 | |
CN117473510B (zh) | 一种基于图神经网络和漏洞补丁关系的自动化漏洞挖掘技术 | |
US12093840B2 (en) | Method of training object prediction models using ambiguous labels | |
US20220405599A1 (en) | Automated design of architectures of artificial neural networks |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |