[发明专利]基于深度自编码网络的软件缺陷预测方法有效
申请号: | 201710903133.3 | 申请日: | 2017-09-29 |
公开(公告)号: | CN108459955B | 公开(公告)日: | 2020-12-22 |
发明(设计)人: | 徐玲;周末;杨梦宁;廖胜平;葛永新;洪明坚;张小洪;杨丹 | 申请(专利权)人: | 重庆大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06K9/62 |
代理公司: | 重庆晟轩知识产权代理事务所(普通合伙) 50238 | 代理人: | 王海凤 |
地址: | 400044 *** | 国省代码: | 重庆;50 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明涉及基于深度自编码网络的软件缺陷预测方法,包括如下步骤,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表示该待测试版本无缺陷。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于重庆大学,未经重庆大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201710903133.3/,转载请声明来源钻瓜专利网。