CN108459955B - 基于深度自编码网络的软件缺陷预测方法 - Google Patents
基于深度自编码网络的软件缺陷预测方法 Download PDFInfo
- Publication number
- CN108459955B CN108459955B CN201710903133.3A CN201710903133A CN108459955B CN 108459955 B CN108459955 B CN 108459955B CN 201710903133 A CN201710903133 A CN 201710903133A CN 108459955 B CN108459955 B CN 108459955B
- Authority
- CN
- China
- Prior art keywords
- metric
- module
- value
- values
- equal
- 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
- 230000007547 defect Effects 0.000 title claims abstract description 72
- 238000000034 method Methods 0.000 title claims abstract description 68
- 238000005070 sampling Methods 0.000 claims abstract description 32
- 238000005259 measurement Methods 0.000 claims abstract description 16
- 238000007781 pre-processing Methods 0.000 claims abstract description 7
- 230000006870 function Effects 0.000 claims description 25
- 230000002950 deficient Effects 0.000 claims description 24
- 238000012549 training Methods 0.000 claims description 21
- 239000013598 vector Substances 0.000 claims description 11
- 238000012360 testing method Methods 0.000 claims description 7
- 238000004364 calculation method Methods 0.000 claims description 6
- 239000000126 substance Substances 0.000 claims description 6
- 239000011159 matrix material Substances 0.000 claims description 5
- 238000010606 normalization Methods 0.000 claims description 3
- 230000000694 effects Effects 0.000 abstract description 3
- 239000010410 layer Substances 0.000 description 19
- 238000000605 extraction Methods 0.000 description 13
- 238000002474 experimental method Methods 0.000 description 12
- 238000000513 principal component analysis Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 10
- 238000012706 support-vector machine Methods 0.000 description 10
- 238000011156 evaluation Methods 0.000 description 8
- 230000009467 reduction Effects 0.000 description 8
- 238000007477 logistic regression Methods 0.000 description 7
- 238000010187 selection method Methods 0.000 description 7
- 238000011160 research Methods 0.000 description 4
- 238000007635 classification algorithm Methods 0.000 description 3
- 238000013135 deep learning Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 239000002356 single layer Substances 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000013398 bayesian method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 238000002790 cross-validation Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 230000002068 genetic effect Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 210000000653 nervous system Anatomy 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000007430 reference method Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
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/21—Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
- G06F18/214—Generating training patterns; Bootstrap methods, e.g. bagging or boosting
- G06F18/2155—Generating training patterns; Bootstrap methods, e.g. bagging or boosting characterised by the incorporation of unlabelled data, e.g. multiple instance learning [MIL], semi-supervised techniques using expectation-maximisation [EM] or naïve labelling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/285—Selection of pattern recognition techniques, e.g. of classifiers in a multi-classifier system
Abstract
本发明涉及基于深度自编码网络的软件缺陷预测方法,包括如下步骤,S1通过版本控制工具收集待预测软件的源代码文件;S2所述S1得到的源代码文件由I个模块组成,从所述源代码文件中提取度量元值,所有度量元值构成一个集合X;S3对S2得到集合X进行预处理;S4通过采样的方式通过度量元值选取模块得到采样结果集;S5深度自编码网络构建预测模型;S6对待预测版本进行预测并输出预测结果。该方法简单有效,实验结果表明在数据维度较大,并且冗余特征较多的数据集中,效果非常明显。
Description
技术领域
本发明涉及软件安全领域,特别涉及一种基于深度自编码网络的软件缺陷预测方法。
背景技术
软件缺陷是指计算机软件或程序中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。软件缺陷产生主要是由软件本身的特点和开发过程决定的,如何控制软件缺陷对于生产高质量的软件是非常关键的。
软件缺陷预测通过对软件或软件度量相关数据进行统计或数学分析,预测软件中缺陷的分布情况和可能的数量。缺陷预测技术通过找到有出错倾向的实体并给出相应的解决方案,可以帮助管理人员和开发人员重点关注容易出现缺陷的实体,降低了软件开发和维护的成本,提高了软件可靠性。
近年来关于缺陷预测的研究主要关注在两个方面,其一是缺陷历史,其二是软件源代码本身。Nagappan等人通过研究发现如果一个实体在过去几个版本中很容易引进缺陷,那么这个实体在未来也很容易出现缺陷。他们将历史缺陷信息作为选择度量元的一个依据,然后用选择的度量元来进行缺陷组件的预测研究。
软件度量元(软件特征)是影响软件缺陷预测精度的重要因素。在软件缺陷预测过程中,往往将不同数据源收集到的数据整合成数据集,数据不可避免地存在大量冗余特征,这些冗余特征会干扰到模型算法的学习效果,影响了缺陷预测准确性。特征提取是软件缺陷预测的重要步骤,其目的是从特征集合中选择满足一定评价准则的最优特征子集,通过剔除不相关特征或冗余特征,实现降维。
特征提取方法主要通过线性或非线性的方法对原始特征进行组合,将高维数据映射到低维空间,常见的方法有:主成分分析PCA、拉普拉斯特征映射方法LE、局部保持映射LPP等。特征选择是根据某些评价准则从原始样本的特征中选择使得评价准则最优的一个子集。一般分为过滤式[7]、封装式[8]和嵌入式。Liu等人提出了基于PCA-ISVM的软件缺陷预测模型,有效消除了软件数据中的冗余,获得了最优支持向量机参数,提升了软件缺陷预测模型性能。
上述的特征降维方法都属于浅层模型,只能从大量的数据中提取或选择一些简单的特征,不能得到具有复杂结构的特征。
发明内容
针对现有技术存在的上述问题,本发明的目的是提供一种基于深度自编码网络的软件缺陷预测方法。
为实现上述目的,本发明采用如下技术方案:
基于深度自编码网络的软件缺陷预测方法,其特征在于:具体包括如下步骤:
S1:通过版本控制工具收集待预测软件的源代码文件;
S2:所述S1得到的源代码文件由I个模块组成,从所述源代码文件中提取度量元值,所有度量元值构成一个集合X,
X={x1,1,x2,2,...xi,j,...xI,J} (1);
xij表示第j个度量元在第i个模块上的度量元值,I表示待预测软件中源代码文件的总数,J表示提取的度量元的总数;
每个模块对应一个度量元向量,定义xi表示第i个模块的度量元向量,xi={xij|i=1,2,3...I,j=1,2,3...J};
S3:对步骤S2得到集合X进行预处理,具体步骤如下:
遍历集合X中的所有度量元值,查找度量元值为缺失状态的进行填充,具体步骤如下:
1)令i=1;
2)令j=1;
3)判断xij是否有值:
如没有,则使用第j个度量元在I个模块上的度量元值的平均值进行填充;
如有,则令j=j+1,并执行下一步;
4)如果j≤J,则返回3);否则令i=i+1,并执行下一步;
5)如果i≤I,则返回2);否则执行下一步;
6)输出新集合X′:
X'={x'1,1,x'2,2,...x'i,j,...x'I,J} (2);
x′i,j表示在新集合X′中第j个度量元在第i个模块上的度量元值;
S4:采样;
S4a:定义Mj为新集合X′中,第j个度量元在I个模块上度量元值的中位数;
确定xij>Mj的数量,i=1,2,...I,j=1,2,...J;
I)令i=1;
II)令j=1;
III)令Ki=0;
IV)如果xij≥Mj,则Ki=Ki+1,并令j=j+1,执行下一步;
否则,令j=j+1,并执行下一步;
V)如果j≤J,则返回Ⅳ);否则令i=i+1,并执行下一步;
VI)如果i≤I,则返回Ⅱ);否则执行下一步;
VII)输出Ki;
S4b:Ki值对应第i个模块,i=1,2…I,根据Ki值从大到小的顺序对Ki值对应的模块进行排序;
S4c:选取所述步骤S4b排序后,处于前N位置的N个模块构成候选集,再从候选集中随机选取n个模块构成采样结果集,N>n;
所述采样结果集X′n表示为:
X'n={x'1,1,x'2,2,...x'u,j,...x'n,J} (3);
x'u,j表示在采样结果集X'n中第j个度量元在第u个模块上的度量元值;
S4d:使用Z-core法对S4c输出的采样结果集X′n中的所有度量元值进行标准化得到标准化后的采样结果集X”n,使的采样结果集X'n中的所有度量元值都分布在0~1之间;
所述标准化后的采样结果集X″n记为:
X″n={x″1,1,x″2,2,...x″u,j,...x″n,J} (4);
x″u,j表示在标准化后的采样结果集X″n中第j个度量元在第u个模块上的度量元值;
S5:深度自编码网络构建预测模型:
S5a:设深度自编码网络网络层数为Q层,Q为自然数;
S5b:令q=1,预设误差阈值D0;
S5c:令u=1;预设权重矩阵Wq、偏置向量Bq和B'q的初始值,其中
S5d:编码阶段:
将x″u,j|j=1,2,...J的值带入如公式(5)所述的编码函数进行编码:
S5f:令u=u+1;
S5g:如u≤n,返回步骤S5d,否则执行下一步;
并返回步骤S5d,其中α为学习率,是一个经验值;
S5j:输出Wq、Bq和B'q;
S5k:将x″u,j|u=1,2,...n,j=1,2,...J的值带入公式(9)所述的编码函数进行编码:
其中,x=x″u,j
S5m:令q=q+1;
S5n:如果q≤Q,则返回步骤S5c;否则执行下一步;
S5p:根据所述步骤S5o输出的所对应的模块是否存在缺陷,给该模块打上有缺陷模块的分类标签或无缺陷模块的分类标签,分类标签y∈{±1},打上分类标签y=1的模块表示为有缺陷模块,打上分类标签y=-1的模块表示为无缺陷模块;
S5q:将所述标签样本集作为训练集作为输入现有的分类器中进行训练,得到缺陷预测模型;
S6:测试分类:
S6a:获取待预测软件的待测试版本的源代码文件;
S6b:所述S6a得到的源代码文件由I’个模块组成,从所述源代码文件中提取度量元值,所有度量元值构成一个集合C,
C={c1,1,c2,2,...ci,j,...cI,J'} (11);
cij表示第j个度量元在第i个模块上的度量元值,I’表示待预测软件中待测试版本源代码文件的总数,J’表示提取的度量元的总数;
S6c:对步骤S6b得到集合C进行预处理,具体步骤如下:
遍历集合C中的所有度量元值,查找度量元值为缺失状态的进行填充,具体步骤如下:
a)令i=1;
b)令j=1;
c)判断cij是否有值:
如没有,则使用第j个度量元在I’个模块上的度量元值的平均值进行填充;
如有,则令j=j+1,并执行下一步;
d)如果j≤J’,则返回步骤c);否则令i=i+1,并执行下一步;
e)如果i≤I’,则返回步骤b
f)否则执行下一步;
g)输出新集合C':
C'={c'1,1,c'2,2,...c'i,j,...c'I',J'} (12);
c′i,j表示在新集合C'中第j个度量元在第i个模块上的度量元值;
h)使用Z-core法对步骤ⅵ)输出的新集合C'中的所有度量元值进行标准化得到标准化后的新集合C”,使的新集合C'中的所有度量元值都分布在0~1之间;
所述标准化后的新集合C”记为:
C″={c″1,1,c″2,2,...c″i,j,...c″I',J'} (14);
S6d:将标准S6c输出的标准化后的新集合C”输入深度自编码网络构;
A)令q=1;
B)将c″i,j|i=1,2,...I',j=1,2,...J'值带入公式(15)所述的编码函数进行编码:
其中,x=c″i,j|i=1,2,...I',j=1,2,...J'
D)令q=q+1;
E)如果q≤Q,则返回步骤B);否则执行下一步;
相对于现有技术,本发明具有如下优点:本发明提供的方法简单有效,实验结果表明在数据维度较大,并且冗余特征较多的数据集中,效果非常明显,优于现有的基于常用的特征提取方法的软件缺陷预测模型,同时也证明了深度学习对高维数据强大学习能力能用在软件缺陷预测中。
附图说明
图1为度量元值在缺陷数据和非缺陷数据中分布。
图2为采样流程图。
图3为深度自编码网络训练过程图。
图4为深度自编码网络模型。
图5为本发明方法测试实验框架图。
具体实施方式
下面对本发明作进一步详细说明。
本发明方法针对软件缺陷预测过程中遇到的高维特征提取问题,结合深度学习对数据特征优化学习能力,提出了一种基于深度自编码网络的软件缺陷预测方法。该方法分为两个阶段,特征提取阶段和机器学习阶段。第一阶段使用深度自编码网络进行数据特征提取,第二阶段用提取的特征和与其对应的标签训练分类器进行分类,典型的分类方法包括逻辑回归、支持向量机、人工神经网络、贝叶斯方法,得到最终的软件缺陷预测模型。
基于深度自编码网络的软件缺陷预测方法,具体包括如下步骤:
S1:通过版本控制工具收集待预测软件的源代码文件;
为了方便项目成员协作和代码的管理,目前大多数项目源代码都托管在代码仓库中,开发人员通过版本控制工具获得各版本源代码。当需要预测这一类项目数据时,可以通过版本控制工具收集相关数据,比如Ant项目使用GIT版本控制工具,Mylyn项目可以使用SVN和GIT。这需要根据项目数据托管平台的类型来选择相应的工具。工具的使用方法如下:
GIT工具:选择一个文件目录,在git brash窗口输入git clone“版本库地址”,输入用户名密码即可下载源代码到本地磁盘;
SVN工具:选择一个文件目录,使用svn checkout命令,输入版本库地址,用户名和密码,即可导出数据。
实质上该步骤是通过版本控制工具收集获取待预测软件历史版本的源代码文件。
S2:所述S1得到的源代码文件由I个模块组成,从所述源代码文件中提取度量元值,所有度量元值构成一个集合X,
X={x1,1,x2,2,...xi,j,...xI,J} (1);
xij表示第j个度量元在第i个模块上的度量元值,I表示待预测软件中源代码文件的总数,J表示提取的度量元的总数;
每个模块对应一个度量元向量,定义xi表示第i个模块的度量元向量,xi={xij|i=1,2,3...I,j=1,2,3...J}。
S3:对步骤S2得到集合X进行预处理,具体步骤如下:
遍历集合X中的所有度量元值,查找度量元值为缺失状态的进行填充,具体步骤如下:
1)令i=1;
2)令j=1;
3)判断xij是否有值:
如没有,则使用第j个度量元在I个模块上的度量元值的平均值进行填充;
如有,则令j=j+1,并执行下一步;
4)如果j≤J,则返回3);否则令i=i+1,并执行下一步;
5)如果i≤I,则返回2);否则执行下一步;
6)输出新集合X′:
X'={x'1,1,x'2,2,...x'i,j,...x'I,J} (2);
x′i,j表示在新集合X′中第j个度量元在第i个模块上的度量元值。
S4:采样;
S4a:定义Mj为新集合X′中,第j个度量元在I个模块上度量元值的中位数;
确定xij>Mj的数量,i=1,2,...I,j=1,2,...J;
I)令i=1;
II)令j=1;
III)令Ki=0;
IV)如果xij≥Mj,则Ki=Ki+1,并令j=j+1,执行下一步;
否则,令j=j+1,并执行下一步;
V)如果j≤J,则返回Ⅳ);否则令i=i+1,并执行下一步;
VI)如果i≤I,则返回Ⅱ);否则执行下一步;
VII)输出Ki;
S4b:Ki值对应第i个模块,i=1,2…I,根据Ki值从大到小的顺序对Ki值对应的模块进行排序;
S4c:选取所述步骤S4b排序后,处于前N位置的N个模块构成候选集,再从候选集中随机选取n个模块构成采样结果集,N>n;
所述采样结果集X′n表示为:
X'n={x'1,1,x'2,2,...x'u,j,...x'n,J} (3);
x'u,j表示在采样结果集X'n中第j个度量元在第u个模块上的度量元值;
S4d:使用Z-core法对S4c输出的采样结果集X′n中的所有度量元值进行标准化得到标准化后的采样结果集X″n,使的采样结果集X'n中的所有度量元值都分布在0~1之间;对采样结果集X'n进行Z-score标准化,得到标准化后的采样结果集X″n,使x″u,j∈[0,1]J;
所述标准化后的采样结果集X″n记为:
X″n={x″1,1,x″2,2,...x″u,j,...x″n,J} (4);
x″u,j表示在标准化后的采样结果集X″n中第j个度量元在第u个模块上的度量元值;
为了获得最佳预测性能,对所有度量元值进行预处理,从而尽可能的减少属性之间数值差距过大对预测模型的影响。
缺陷预测数据分布极不平衡,只有很少一部分数据存在缺陷。如果采用随机划分数据集的方式,极有可能出现训练数据集中含有极少缺陷数据甚至没有的情况。采用这样的数据作为训练集很难训练出较好的预测模型,本发明基于源代码度量元和缺陷潜在关联提出无监督的采样方法。因为度量元复杂度越高,度量元的值越大,其存在缺陷的可能性越大。如图1所示,本发明通过分析非缺陷数据和缺陷数据中度量元值得盒图发现,大多数情况下,存在缺陷的模块的度量元值高于不含缺陷模块的度量元值。
通过采用步骤可以尽可能地避免训练集中缺陷数据太少,导致训练模型性能不佳的问题。
属性中位数可以作为阈值衡量属性的复杂度。本发明提出一个无监督样本采样方法,该方法确保选择的样本中缺陷率不会过低,从而提升模型的性能,
图2给出了一个具体的采用过程图示。
如图2所示,X1-X6表示软件的模块(样本)的度量元值,I1-I7表示软件模块(样本集),假设需要采样的带标签样本数量为N,该采样方法主要分为以下五步:
1)计算每个度量元值在所有模块中值的中位数,例如,对于属性X1,在所有模块中的值分别为2,3,0,1,2,1,3,这些数值的中位数为2。采用该方法依次为所有度量元值计算中位数。
2)对于每个模块(样本),每个度量元值跟该度量元值的中位数进行比较,如果大,数量加1。例如,样本I1,属性X3和X5的值大于其中位数,3大于2,6大于4,所以样本I1的高属性值数量为2。
3)根据高属性值数量对样本进行排序。
4)选择排序结果前2*N个样本作为候选集。
5)从候选集中随机选择N个样本作为最终的采样结果。
S5:深度自编码网络构建预测模型:
采用编码函数对每个样本进行编码,其中一个样本即代表一个模块,采用编码函数对每个样本进行编码,其实就是对表达样本的J个度量元进行编码,具体通过编码函数hθ=f(x)(hθ∈[0,1]m)进行,其中m为自然数,表示J个度量元经过编码后,得到编码值的个数,即代表样本的J个度量元,经过编码函数编码后,变成了m个,并且m<J,这样降低了维度,从而减少了计算量。
S5:深度自编码网络构建预测模型:
S5a:设深度自编码网络网络层数为Q层,Q为自然数;
S5b:令q=1,预设误差阈值D0;
S5d:编码阶段:
将x″u,j|j=1,2,...J的值带入如公式(5)所述的编码函数进行编码:
S5e:解码阶段:
S5f:令u=u+1;
S5g:如u≤n,返回步骤S5d,否则执行下一步;
并返回步骤S5d,其中α为经验值;
S5j:输出Wq、Bq和B'q;
S5k:将x″u,j|u=1,2,...n,j=1,2,...J的值带入公式(9)所述的编码函数进行编码:
其中,x=x″u,j;
S5m:令q=q+1;
S5n:如果q≤Q,则返回步骤S5c;否则执行下一步;
S5p:根据所述步骤S5o输出的所对应的模块是否存在缺陷,给该模块打上有缺陷模块的分类标签或无缺陷模块的分类标签,分类标签y∈{±1},打上分类标签y=1的模块表示为有缺陷模块,打上分类标签y=-1的模块表示为无缺陷模块;
S5q:将所述标签样本集作为训练集作为输入现有的分类器中(现有的分类器比如:softmax,支持向量机svm,逻辑回归lg)进行训练,得到缺陷预测模型;
S6:测试分类:
S6a:获取待预测软件的待测试版本的源代码文件;
S6b:所述S6a得到的源代码文件由I’个模块组成,从所述源代码文件中提取度量元值,所有度量元值构成一个集合C,
C={c1,1,c2,2,...ci,j,...cI,J'} (11);
cij表示第j个度量元在第i个模块上的度量元值,I’表示待预测软件中待测试版本源代码文件的总数,J’表示提取的度量元的总数;
S6c:对步骤S6b得到集合C进行预处理,具体步骤如下:
遍历集合C中的所有度量元值,查找度量元值为缺失状态的进行填充,具体步骤如下:
i)令i=1;
j)令j=1;
k)判断cij是否有值:
如没有,则使用第j个度量元在I’个模块上的度量元值的平均值进行填充;
如有,则令j=j+1,并执行下一步;
l)如果j≤J’,则返回步骤c);否则令i=i+1,并执行下一步;
m)如果i≤I’,则返回步骤b
n)否则执行下一步;
o)输出新集合C':
C'={c'1,1,c'2,2,...c'i,j,...c'I',J'} (12);
c′i,j表示在新集合C'中第j个度量元在第i个模块上的度量元值;
p)使用Z-core法对步骤ⅵ)输出的新集合C'中的所有度量元值进行标准化得到标准化后的新集合C”,使的新集合C'中的所有度量元值都分布在0~1之间;
所述标准化后的新集合C”记为:
C″={c″1,1,c″2,2,...c″i,j,...c″I',J'} (14);
S6d:将标准S6c输出的标准化后的新集合C”输入深度自编码网络构;
G)令q=1;
H)将c″i,j|i=1,2,...I',j=1,2,...J'值带入公式(15)所述的编码函数进行编码:
其中,x=c″i,j|i=1,2,...I',j=1,2,...J'
J)令q=q+1;
K)如果q≤Q,则返回步骤B);否则执行下一步;
单层的自编码网络虽然已经具备一定的特征提取能力,但是这样提取的特征还不足以使得分类器具有很好的分类性能。深度学习是模拟人的神经系统对信息的分级处理过程,这是一个不断迭代,不断抽象的过程。高层特征是底层特征的组合,特征表示也更抽象,更能表现语义或者意图。而抽象层面越高,存在的冗余信息就越少,就越利于分类。
深度自编码网络是由多个单层自动编码器组成的神经网络,前一个自动编码器的中间层作为下一个自动编码器的输入,采用逐层贪婪训练法进行训练,获取最终的深度自编码网络参数。
深度自编码网络训练过程如图3。
1)第一层自动编码器的输入是经过Z-score标准化的数据样本的度量元的值(x1,x2……xn),x∈[0,1]n。按照上述单层自动编码的训练方式训练第一层自动编码器,得到第一层自动编码器的初始网络参数,然后将第一层自动编码器的中间层作为输入传入。
2)第二层自动编码器,以同样的无监督方法进行训练,得到该层的网络参数。在多层自动编码器进行网络参数初始化之后,在顶层添加一个分类器,然后加上每个数据样本对应的标签(有缺陷或无缺陷),用有监督学习的方法对整个网络进行训练,例如,图3是一个包含2层自动编码器的深度自编码网络的训练过程。
3)最后将输入层和中间的特征层全部连接起来,然后连接上分类器,得到最终的深度自编码网络模型如图4。
如图4,这是一个包含两个中间特征层的深度自编码网络结构,样本的输入是6个度量元值,利用深度自编码网络,最后的特征向量降为三维,把这三个最终的特征加上对应的标签,传入分类器,就可以对分类器进行训练。用所有的训练集训练好模型后,就可以用这个最终的深度自编码网络模型进行软件缺陷预测,将测试样本以特征向量的形式作为输入,最后会得到y=0(无缺陷)和y=1(有缺陷)的概率值。概率值较大的作为最终的预测结果。
本发明的预测方法与现有预测方法的比对:
实验数据集
实验数据集来自几个常用的开源项目,包括:NASA,PROMISE库中的Eclipse项目,以及NetGene库中的Lucene数据集。NASA数据集的度量元主要包括Halstead复杂度,McCabe环路复杂度[33]以及代码行数,Eclipse项目数据集主要从代码复杂度和抽象语法树方面设计度量元,Lucene数据集主要包括network和change genealogy度量元,是经过人工验证的去噪后的数据集。表1统计了数据集具体信息。数据集的特征数量包括了少量(21),中等(155),大量(465)三个级别。
表1 数据集
数据集 | 来源 | 特征数 | 实例数 | 缺陷实例数 | 缺陷率 |
kc1 | NASA | 21 | 2109 | 326 | 9.8% |
pc1 | NASA | 21 | 1109 | 77 | 6.9% |
Eclipse2.0 | PROMISE | 155 | 6927 | 975 | 14.1% |
Eclipse2.1 | PROMISE | 155 | 7888 | 854 | 10.8% |
Eclipse3.0 | PROMISE | 155 | 10593 | 1568 | 14.8% |
Lucene | NetGene | 465 | 1671 | 346 | 10.7% |
实验在表1所示的数据集中采用10折交叉法[35]验证。将数据集平均分成十份,轮流将其中九份作为训练集,一份作为测试集进行,十字交叉法是在软件工程研究中一种非常广泛评估方法。
评估指标
验证提出方法有效性的性能评估采用目前主流的四个评价指标:查全率(recall)、查准率(precision)、F1score、AUC。这些性能指标基于表2的混淆矩阵。
表2 混淆矩阵
预测为有缺陷 | 预测为无缺陷 | |
实际有缺陷 | TP(true positive) | FP(false positive) |
实际无缺陷 | TN(true negative) | FN(false negative) |
查全率,指正确预测的缺陷模块占真实所有缺陷模块的比例,计算公式如(a):
查准率,指正确预测的缺陷模块占预测为缺陷的所有模块的比例,计算公式如(b):
F1-score为查全率和查准率的调和平均数,综合了查全率和查准率的结果,可以综合评价软件缺陷模型的性能,计算公式如(c):
AUC(area under ROC curve),基于ROC曲线,综合考虑了不同的分类阈值,以此来评估软件缺陷预测模型的性能。适用于评估分类不平衡的情况下软件缺陷模型。本实验采用的数据集缺陷率最高的数据集为14.8%,典型的数据不平衡数据。
结果与分析
本发明方法中,设置采样率为u=0.4,采用十折交叉验证法,重复实验20次,取20次实验结果的平均值作为最终实验结果。分类器采样四种常用的分类算法,分别是Softmax、支持向量机(SVM)]和逻辑回归(LG)。
本发明方法用于对比的基准方法包括三种:
(1)不使用任何特征提取方法,直接使用原始数据集训练缺陷预测模型。
(2)使用常见的特征提取方法PCA提取特征,然后训练缺陷预测模型。
(3)使用一种混合的特征选择方法HFS提取特征,然后训练缺陷预测模型。
主成分分析法PCA是一种常见的特征提取算法,目的是通过线性变换寻找一个能够保留样本差异性的低维投影空间,使得少量主成分包含大量信息。具体实现参照文献[4]。特征选择方法HFS是一种混合了特征子集评估器和特征排序评估器的特征选择方法,能够提升特征质量,达到优于一般特征选择方法的预测性能。本发明方法测试实验框架如图5所示。
相对于不使用降维方法的基准软件缺陷预测模型,本文提出的基于深度自编码网络的缺陷预测模型提升性能,并且对不同的分类算法具有普遍性。
实验采用表1中的6个数据集进行实验,基准模型(basic)是指不采用特征提取方法直接分类的方法,与本发明提出的基于深度自编码网络的软件缺陷预测模型(简称DA)在使用三种不同分类器Softmax、SVM[21]、LG的情况下进行对比实验,实验结果如表3-5,字体下划线代表结果更优的数值。
表3 分类器softmax为下和基准模型的对比结果
表4 分类器为SVM下和基准模型的对比结果
表3-5的实验结果可以看出,在具有中等数量度量元的Eclipse数据集和具有大量度量元的Lucene数据集在本发明方法的预测性能在三种分类器中都要远好于基准模型,这四个数据集采用softmax作为分类器的情况下,DA相对于基准模型F1-score平均值提升了118%,AUC平均值提升了28.5%,在SVM作为分类器的情况下,DA相对于基准模型F1-score平均值提升了88.6%,AUC平均值提升了6%,在lg作为分类器的情况下,DA相对于基准模型F1-score平均值提升了61.7%,AUC平均值提升了12.5%,可以看出性能提升十分明显,因为其中含有冗余信息,通过本发明的深度自编码网络能够提取到具有复杂结构的更高层的表示特征,利用这种特征能更好的训练分类器。同时也说明该方法对分类器适用具有一定的普遍性。
RQ2:相对于基于常用PCA降维方法,即特征提取或特征选择方法的软件缺陷预测模型,本发明方法有效提升预测性能,并且对不同的分类算法具有普遍性。
本实验采用了表1中的6个数据集,分别使用了特征提取方法PCA和一种混合的特征选择方法HFS,然后和本文提出的基于深度自编码网络的降维方法(DA),在使用三种不同的分类器Softmax、SVM、LG的情况下进行对比实验,实验结果如表6-8,字体加粗和下划线代表结果更优的数值。
表6 分类器为softmax下和其他降维方法的对比结果
表7 分类器为SVM下和其他降维方法的对比结果
表8 分类器为LG下和其他降维方法的对比结果
通过表6-8的实验对比,对于特征数量中等级别和大量级别的Eclipse的3个数据集和Lucene数据集,在查全率和查准率的单项指标上,本发明方法是稍有优势,在某几个数据集上的指标不如其他两类方法,例如分类器为softmax的情况下,对数据集Eclipse2.0的查全率不如PCA,查准率又不如HFS,但是指标的平均值都要高于其他两类方法。整体来看,对于评估指标F1-score平均值,在分类器为softmax的情况下DA相对与PCA提升了25.4%,DA相对与HFS提升了28.1%,在分类器为SVM的情况下DA相对与PCA提升了23.2%,DA相对与HFS提升了1%,在分类器为lg的情况下DA相对与PCA提升了11.3%,DA相对与HFS提升了11%,可以看出在三种分类器下,平均预测结果是有显著提升的。对AUC的预测结果同F1-score一样,在整体上有明显提升。说明了本发明方法能应用于软件缺陷预测,相对与常用的特征提取和特征选择方法有一定提升,并且对于多种分类方法都适用,具有一定普遍性。
最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。
Claims (1)
1.基于深度自编码网络的软件缺陷预测方法,其特征在于:具体包括如下步骤:
S1:通过版本控制工具收集待预测软件的源代码文件;
S2:所述S1得到的源代码文件由I个模块组成,从所述源代码文件中提取度量元值,所有度量元值构成一个集合X,
X={x1,1,x2,2,...xi,j,...xI,J} (1);
xij表示第j个度量元在第i个模块上的度量元值,I表示待预测软件中源代码文件的总数,J表示提取的度量元的总数;
每个模块对应一个度量元向量,定义xi表示第i个模块的度量元向量,xi={xij|i=1,2,3...I,j=1,2,3...J};
S3:对步骤S2得到集合X进行预处理,具体步骤如下:
遍历集合X中的所有度量元值,查找度量元值为缺失状态的进行填充,具体步骤如下:
1)令i=1;
2)令j=1;
3)判断xij是否有值:
如没有,则使用第j个度量元在I个模块上的度量元值的平均值进行填充;
如有,则令j=j+1,并执行下一步;
4)如果j≤J,则返回3);否则令i=i+1,并执行下一步;
5)如果i≤I,则返回2);否则执行下一步;
6)输出新集合X′:
X'={x'1,1,x'2,2,...x'i,j,...x'I,J} (2);
x′i,j表示在新集合X′中第j个度量元在第i个模块上的度量元值;
S4:采样;
S4a:定义Mj为新集合X′中第j个度量元在I个模块上度量元值的中位数;
确定xij>Mj的数量,i=1,2,...I,j=1,2,...J;
I)令i=1;
II)令j=1;
III)令Ki=0;
IV)如果xij≥Mj,则Ki=Ki+1,并令j=j+1,执行下一步;
否则,令j=j+1,并执行下一步;
V)如果j≤J,则返回IV);否则令i=i+1,并执行下一步;
VI)如果i≤I,则返回Ⅱ);否则执行下一步;
VII)输出Ki;
S4b:Ki值对应第i个模块,i=1,2…I,根据Ki值从大到小的顺序对Ki值对应的模块进行排序;
S4c:选取所述步骤S4b排序后,处于前N位置的N个模块构成候选集,再从候选集中随机选取n个模块构成采样结果集,N>n;
所述采样结果集X′n表示为:
X′n={x′1,1,x′2,2,...x′u,j,...x′n,J} (3);
x'u,j表示在采样结果集X'n中第j个度量元在第u个模块上的度量元值;
S4d:使用Z-core法对S4c输出的采样结果集X′n中的所有度量元值进行标准化得到标准化后的采样结果集X″n,使得采样结果集X′n中的所有度量元值都分布在0~1之间;
所述标准化后的采样结果集X″n记为:
X″n={x″1,1,x″2,2,...x″u,j,...x″n,J} (4);
x″u,j表示在标准化后的采样结果集X″n中第j个度量元在第u个模块上的度量元值;
S5:深度自编码网络构建预测模型:
S5a:设深度自编码网络网络层数为Q层,Q为自然数;
S5b:令q=1,预设误差阈值D0;
S5d:编码阶段:
将x″u,j|j=1,2,...J的值带入如公式(5)所述的编码函数进行编码:
S5e:解码阶段:
S5f:令u=u+1;
S5g:如u≤n,返回步骤S5d,否则执行下一步;
并返回步骤S5d,其中α为学习率,是一个经验值;
S5j:输出Wq、Bq和B'q;
S5k:将x″u,j|u=1,2,...n,j=1,2,...J的值带入公式(9)所述的编码函数进行编码:
其中,x=x″u,j
S5m:令q=q+1;
S5n:如果q≤Q,则返回步骤S5c;否则执行下一步;
S5p:根据所述步骤S5o输出的所对应的模块是否存在缺陷,给该模块打上有缺陷模块的分类标签或无缺陷模块的分类标签,分类标签y∈{±1},打上分类标签y=1的模块表示为有缺陷模块,打上分类标签y=-1的模块表示为无缺陷模块;
S5q:将所述标签样本集作为训练集作为输入现有的分类器中进行训练,得到缺陷预测模型;
S6:测试分类:
S6a:获取待预测软件的待测试版本的源代码文件;
S6b:所述S6a得到的源代码文件由I’个模块组成,从所述源代码文件中提取度量元值,所有度量元值构成一个集合C,
C={c1,1,c2,2,...ci,j,...cI,J'} (11);
cij表示第j个度量元在第i个模块上的度量元值,I’表示待预测软件中待测试版本源代码文件的总数,J’表示提取的度量元的总数;
S6c:对步骤S6b得到集合C进行预处理,具体步骤如下:
遍历集合C中的所有度量元值,查找度量元值为缺失状态的进行填充,具体步骤如下:
a)令i=1;
b)令j=1;
c)判断cij是否有值:
如没有,则使用第j个度量元在I’个模块上的度量元值的平均值进行填充;
如有,则令j=j+1,并执行下一步;
d)如果j≤J’,则返回步骤c);否则令i=i+1,并执行下一步;
e)如果i≤I’,则返回步骤b
f)否则执行下一步;
g)输出新集合C':
C'={c'1,1,c'2,2,...c'i,j,...c'I',J'} (12);
c'i,j表示在新集合C'中第j个度量元在第i个模块上的度量元值;
h)使用Z-core法对步骤vi)输出的新集合C'中的所有度量元值进行标准化得到标准化后的新集合C”,使得新集合C'中的所有度量元值都分布在0~1之间;
所述标准化后的新集合C”记为:
C”={c”1,1,c”2,2,...c”i,j,...c”I',J'} (14);
S6d:将步骤S6c输出的标准化后的新集合C”输入深度自编码网络构;
A)令q=1;
B)将c”i,j|i=1,2,...I',j=1,2,...J'值带入公式(15)所述的编码函数进行编码:
其中,x=c”i,j|i=1,2,...I',j=1,2,...J'
D)令q=q+1;
E)如果q≤Q,则返回步骤B);否则执行下一步;
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710903133.3A CN108459955B (zh) | 2017-09-29 | 2017-09-29 | 基于深度自编码网络的软件缺陷预测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710903133.3A CN108459955B (zh) | 2017-09-29 | 2017-09-29 | 基于深度自编码网络的软件缺陷预测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108459955A CN108459955A (zh) | 2018-08-28 |
CN108459955B true CN108459955B (zh) | 2020-12-22 |
Family
ID=63221119
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710903133.3A Active CN108459955B (zh) | 2017-09-29 | 2017-09-29 | 基于深度自编码网络的软件缺陷预测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108459955B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109902617B (zh) * | 2019-02-25 | 2022-04-12 | 百度在线网络技术(北京)有限公司 | 一种图片识别方法、装置、计算机设备和介质 |
CN110309907A (zh) * | 2019-06-06 | 2019-10-08 | 大连理工大学 | 一种基于去跟踪自编码器的动态缺失值填补方法 |
CN110442523B (zh) * | 2019-08-06 | 2023-08-29 | 山东浪潮科学研究院有限公司 | 一种跨项目软件缺陷预测方法 |
CN110751186B (zh) * | 2019-09-26 | 2022-04-08 | 北京航空航天大学 | 一种基于监督式表示学习的跨项目软件缺陷预测方法 |
CN111177011A (zh) * | 2020-01-02 | 2020-05-19 | 腾讯科技(深圳)有限公司 | 软件免测的预测方法、装置、设备及存储介质 |
CN111259953B (zh) * | 2020-01-15 | 2023-10-20 | 云南电网有限责任公司电力科学研究院 | 一种基于电容型设备缺陷数据的设备缺陷时间预测方法 |
CN113448821B (zh) * | 2020-03-25 | 2023-12-08 | 北京京东振世信息技术有限公司 | 一种识别工程缺陷的方法和装置 |
CN111782512B (zh) * | 2020-06-23 | 2021-07-09 | 北京高质系统科技有限公司 | 基于不平衡噪声集的多特征软件缺陷综合预测方法 |
CN112115443B (zh) * | 2020-11-19 | 2021-02-12 | 索信达(北京)数据技术有限公司 | 一种终端用户鉴权方法及系统 |
CN112765034B (zh) * | 2021-01-26 | 2023-11-24 | 四川航天系统工程研究所 | 基于神经网络的软件缺陷预测方法 |
CN113705616A (zh) * | 2021-07-30 | 2021-11-26 | 三维通信股份有限公司 | 模型构建方法、软件缺陷预测方法、装置以及电子装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104699614A (zh) * | 2015-03-27 | 2015-06-10 | 重庆大学 | 一种软件缺陷组件预测的方法 |
CN104794534A (zh) * | 2015-04-16 | 2015-07-22 | 国网山东省电力公司临沂供电公司 | 一种基于改进深度学习模型的电网安全态势预测方法 |
CN106201871A (zh) * | 2016-06-30 | 2016-12-07 | 重庆大学 | 基于代价敏感半监督的软件缺陷预测方法 |
WO2017181286A1 (en) * | 2016-04-22 | 2017-10-26 | Lin Tan | Method for determining defects and vulnerabilities in software code |
-
2017
- 2017-09-29 CN CN201710903133.3A patent/CN108459955B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104699614A (zh) * | 2015-03-27 | 2015-06-10 | 重庆大学 | 一种软件缺陷组件预测的方法 |
CN104794534A (zh) * | 2015-04-16 | 2015-07-22 | 国网山东省电力公司临沂供电公司 | 一种基于改进深度学习模型的电网安全态势预测方法 |
WO2017181286A1 (en) * | 2016-04-22 | 2017-10-26 | Lin Tan | Method for determining defects and vulnerabilities in software code |
CN106201871A (zh) * | 2016-06-30 | 2016-12-07 | 重庆大学 | 基于代价敏感半监督的软件缺陷预测方法 |
Non-Patent Citations (1)
Title |
---|
基于概率的无监督缺陷预测方法;徐玲等;《计算机工程与科学》;20170531;第39卷(第5期);第904-911页 * |
Also Published As
Publication number | Publication date |
---|---|
CN108459955A (zh) | 2018-08-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108459955B (zh) | 基于深度自编码网络的软件缺陷预测方法 | |
CN106895975B (zh) | 基于Stacked SAE深度神经网络的轴承故障诊断方法 | |
CN110597735A (zh) | 一种面向开源软件缺陷特征深度学习的软件缺陷预测方法 | |
CN111832647A (zh) | 异常流量检测系统及方法 | |
CN109657947A (zh) | 一种面向企业行业分类的异常检测方法 | |
CN113221960B (zh) | 一种高质量漏洞数据收集模型的构建方法及收集方法 | |
Wu et al. | Optimized deep learning framework for water distribution data-driven modeling | |
CN111199469A (zh) | 用户还款模型生成方法、装置及电子设备 | |
CN112756759A (zh) | 点焊机器人工作站故障判定方法 | |
CN116257759A (zh) | 一种深度神经网络模型的结构化数据智能分类分级系统 | |
CN111666748B (zh) | 一种自动化分类器的构造方法以及识别决策的方法 | |
CN111723021B (zh) | 一种基于知识库和表示学习的缺陷报告自动分派方法 | |
CN116861924A (zh) | 基于人工智能的项目风险预警方法及系统 | |
CN115762721A (zh) | 一种基于计算机视觉技术的医疗影像质控方法和系统 | |
Garcia de Alford et al. | Reducing age bias in machine learning: An algorithmic approach | |
CN114999628A (zh) | 一种利用机器学习寻找退行性膝骨关节炎显著性特征方法 | |
CN113835739A (zh) | 一种软件缺陷修复时间的智能化预测方法 | |
CN113643141A (zh) | 解释性结论报告生成方法、装置、设备及存储介质 | |
CN116127402B (zh) | 一种融合icd层级特征的drg自动分组方法及系统 | |
CN115831339B (zh) | 基于深度学习的医疗系统风险管控事前预测方法、系统 | |
Yedida et al. | Old but Gold: Reconsidering the value of feedforward learners for software analytics | |
CN115456073B (zh) | 基于长短期记忆的生成式对抗网络模型建模分析方法 | |
CN112732570B (zh) | 一种基于上下文环境的依恋情结代码味道检测方法 | |
CN117609100B (zh) | 一种自动化代码合并及部署方法 | |
CN115460097B (zh) | 一种基于融合模型的移动应用可持续信任评估方法及装置 |
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 | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20240130 Address after: 710000, Room 1201, Building 2, Liangli Business Complex, Gaoxin Fourth Road, High tech Zone, Xi'an City, Shaanxi Province Patentee after: Xi'an Lida Ming Intelligent Technology Co.,Ltd. Country or region after: China Address before: 400044 No. 174, positive street, Shapingba District, Chongqing Patentee before: Chongqing University Country or region before: China |