[发明专利]一种基于深度学习的代码缺陷检测方法及装置有效
申请号: | 201811278355.1 | 申请日: | 2018-10-30 |
公开(公告)号: | CN109408389B | 公开(公告)日: | 2020-10-16 |
发明(设计)人: | 计卫星;高玉金;王一拙;杨恬;石剑君;石峰 | 申请(专利权)人: | 北京理工大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京慕达星云知识产权代理事务所(特殊普通合伙) 11465 | 代理人: | 姜海荣 |
地址: | 100081 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 深度 学习 代码 缺陷 检测 方法 装置 | ||
1.一种基于深度学习的代码缺陷检测方法,其特征在于,包括:
选取多个代码缺陷检测工具,分别对被检测代码进行检测,相应生成多个检测结果;
将所述被检测代码通过预设的转换方法,转换为所述被检测代码的特征向量;所述特征向量包括所述被检测代码的结构特征和语义特征;
将所述特征向量分别输入多个所述代码缺陷检测工具各自相对应的评估模型,输出多个所述代码缺陷检测工具分别对所述被检测代码检测缺陷结果的置信度;
将多个所述检测结果和多个所述置信度,进行加权求和生成预测结果;
当所述预测结果大于预设阈值时,确定所述被检测代码存在缺陷;所述评估模型的生成过程,包括:
选择代码缺陷检测工具Tk;
获取测试用例C1,C2,…Cj;针对某种代码缺陷Di,获取所述测试用例C1,C2,…Cj的人工标注结果,当测试用例Cj存在缺陷Di时,则标记为L(j,i)=1,否则标记为L(j,i)=0;
使用工具Tk对每个测试用例进行测试,并记录每个测试用例的测试结果;当测试用例Cj存在缺陷Di时,测试结果则记为E(k,j,i)=1,否则记为E(k,j,i)=0;
将工具Tk的测试结果与所述人工标注结果进行对比,针对每种缺陷,当工具Tk测试结果与人工标注结果相同时,即L(j,i)=E(k,j,i),则表示工具测试正确,记为V(k,j,i)=1;否则表示工具测试错误,即L(j,i)!=E(k,j,i),记为V(k,j,i)=-1,将所有对比结果存储在数据库中;
将所述测试用例C1,C2,…Cj转换为对应的特征向量,作为训练数据集;
针对缺陷类型Di,将所述对比结果作为相应数据标签进行训练,生成所述工具Tk对于缺陷Di的检测能力评估模型M(k,i)。
2.如权利要求1所述的方法,其特征在于,将多个所述检测结果和多个所述置信度,进行加权求和生成预测结果,包括:
将多个所述检测结果和多个所述置信度,输入以下公式,生成预测结果;
其中:P表示预测结果,k表示不同代码缺陷检测工具的数量,t表示代码缺陷检测工具(t∈[1,k]),new表示被检测代码,i表示代码缺陷类别,P(t,new,i)表示不同代码缺陷检测工具的置信度,E(t,new,i)表示不同代码缺陷检测工具的检测结果;
当所述代码缺陷检测工具检测的代码new存在缺陷i时,所述E(t,new,i)=1;
当所述代码缺陷检测工具检测的代码new不存在缺陷i时,所述E(t,new,i)=0。
3.如权利要求1所述的方法,其特征在于,所述预设阈值,通过以下方式获得:
所述预设阈值通过对训练集学习而得;所述训练集为:标记是否存在某种缺陷的代码集合。
4.如权利要求1所述的方法,其特征在于,所述预设的转换方法,包括:图算法、代码向量化算法和代码分析方法。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京理工大学,未经北京理工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201811278355.1/1.html,转载请声明来源钻瓜专利网。