专利类型:发明专利
语 言:中文
申 请 号:CN201710903133.3
申 请 日:20170929
申 请 人:重庆大学
申请人地址:400044 重庆市沙坪坝区正街174号
公 开 日:20180828
公 开 号:CN201710903133.3
代 理 人:王海凤
代理机构:重庆晟轩知识产权代理事务所(普通合伙) 50238
摘 要:本发明涉及基于深度自编码网络的软件缺陷预测方法,包括如下步骤,S1通过版本控制工具收集待预测软件的源代码文件;S2所述S1得到的源代码文件由I个模块组成,从所述源代码文件中提取度量元值,所有度量元值构成一个集合X;S3对S2得到集合X进行预处理;S4通过采样的方式通过度量元值选取模块得到采样结果集;S5深度自编码网络构建预测模型;S6对待预测版本进行预测并输出预测结果。该方法简单有效,实验结果表明在数据维度较大,并且冗余特征较多的数据集中,效果非常明显。
主 权 项: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,则返回Ⅳ);否则令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)所述的编码函数进行编码:其中,f(x)采用sigmoid函数,θ=1,2,3….mq,mq为自然数;S5e:解码阶段:通过解码函数对步骤S5d编码后的数据进行解码重构得到输出其中,f(x)仍然是sigmoid函数;S5f:令u=u+1;S5g:如u≤n,返回步骤S5d,否则执行下一步;S5h:通过公式(8)计算平均误差其中,L为误差函数,S5i:如果则执行下一步;否则令:并返回步骤S5d,其中α为学习率,是一个经验值;S5j:输出Wq、Bq和B′q;S5k:将x″u,j|u=1,2,...n,j=1,2,...J的值带入公式(9)所述的编码函数进行编码:其中,x=x″u,jS5l:令J=mq,并且将采样结果集X″n中的所有元素的值进行对应的更新,S5m:令q=q+1;S5n:如果q≤Q,则返回步骤S5c;否则执行下一步;S5o:输出S5p:根据所述步骤S5o输出的所对应的模块是否存在缺陷,给该模块打上有缺陷模块的分类标签或无缺陷模块的分类标签,分类标签y∈{±1},打上分类标签y=1的模块表示为有缺陷模块,打上分类标签y=?1的模块表示为无缺陷模块;标记后所有模块构成标签样本集,记为q=Q,其中,yu表示第u个模块的标签;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’,则返回步骤bf)否则执行下一步;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′C)令J’=mq,并且将新集合C″中的所有元素的值进行对应的更新,D)令q=q+1;E)如果q≤Q,则返回步骤B);否则执行下一步;F)输出S6e:将步骤S6d得到的输入步骤S5q所述的缺陷预测模型中进行计算,输出0或1的概率值,如果输出的概率值为1表示该待测试版本有缺陷,如果输出的概率值为0表示该待测试版本无缺陷。
关 键 词:源代码文件;自编码;预测;度量;软件缺陷;集合;预处理;版本控制工具;采样结果;模块组成;冗余特征;输出预测;数据集中;数据维度;网络构建;选取模块;预测模型;采样;网络
法律状态:公开
IPC专利分类号:G06F11/36;G06F11/00;G06K9/62;G06K9/00;G;G06;G06F;G06K;G06F11;G06K9;G06F11/36;G06F11/00;G06K9/62;G06K9/00