[发明专利]一种基于多粒度节点的软件缺陷预测方法在审
申请号: | 202111433635.7 | 申请日: | 2021-11-29 |
公开(公告)号: | CN114371989A | 公开(公告)日: | 2022-04-19 |
发明(设计)人: | 邱少健;林子濠;丰鑫 | 申请(专利权)人: | 诺维艾创(广州)科技有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06N3/04;G06N3/08 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 510800 广东省广州市花都*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 粒度 节点 软件 缺陷 预测 方法 | ||
1.一种基于多粒度节点的软件缺陷预测方法,其特征在于,至少包括以下步骤:
步骤1:代码解析;
步骤2:向量转换;
步骤3:特征提取;
步骤4:预测缺陷。
2.根据权利要求1所述的一种基于多粒度节点的软件缺陷预测方法,其特征在于,所述步骤1中代码解析具体为:运用Python的Javalang工具包解析Java文件生成相应的抽象语法树,Java代码片段中的每个结构元素都被表示为了抽象语法树的节点,通过遍历抽象语法树,将其转换为节点序列,并对节点类型进行归类。
3.根据权利要求2所述的一种基于多粒度节点的软件缺陷预测方法,其特征在于,所述节点类型至少归类为方法调用和类实例化节点、声明节点、控制流节点。
4.根据权利要求2或3所述的一种基于多粒度节点的软件缺陷预测方法,其特征在于,所述节点的粒度选择是根据粒度的粗细变化和混合方式整理为5种粒度选择。
5.根据权利要求4所述的一种基于多粒度节点的软件缺陷预测方法,其特征在于,所述5种粒度选择具体为:
(1)粗粒度:直接选取抽象语法树中节点类型作为节点标识;
(2)细粒度:选取抽象语法树中节点名作为标识,如在变量声明或调用的节点中使用变量名、方法声明或调用的节点中使用方法名,如果没有具体元素名称的节点,则选用节点类型作为标识;
(3)常规粒度:取抽象语法树中节点类型,遇方法调用节点时追加方法名,类创建节点时追加类名;
(4)混合粒度1:首先选取抽象语法树中节点类型,如是方法声明节点,追加访问修饰符和方法名;如是类声明节点,追加访问修饰符和类名;如是变量声明节点,追加访问修饰符和变量类型;如是方法调用节点,追加方法名和参数类型;如是判断节点,追加判断条件;
(5)混合粒度2:在混合粒度1的基础上,如果是方法声明或调用,类声明或调用,构造器声明或调用等节点,追加参数数量信息。
6.根据权利要求1所述的一种基于多粒度节点的软件缺陷预测方法,其特征在于,所述步骤2向量转化具体为:
(1)使用软件项目旧版本中已知是否有缺陷的代码文件和来自新版本项目的代码文件作为流程的输入,代码解析后可得到与输入代码文件数量一致的节点Token向量;
(2)将得到的Token节点序列转换为数字格式;将旧版本和新版本项目的节点和整数值之间构建统一的映射字典;
(3)使用数字零填充每个向量到最长向量的长度,保证向量长度的一致性;
(4)最后将Token向量集合转化为整数向量集合,作为下一步神经网络的输入。
7.根据权利要求1所述的一种基于多粒度节点的软件缺陷预测方法,其特征在于,所述步骤3特征提取具体为:利用神经网络模型中DBN模型和CNN模型的特征提取功能,挖掘和捕获代码中与缺陷预测相关的DL-Generated特征。
8.根据权利要求7所述的一种基于多粒度节点的软件缺陷预测方法,其特征在于,DBN模型接收由代码抽象语法树转化而成的整数向量集合,从训练数据中挖掘特征,学习数据的表示形式。
9.根据权利要求7所述的一种基于多粒度节点的软件缺陷预测方法,其特征在于,所述CNN模型接收由代码抽象语法树转化而成的整数向量作为输入数据,挖掘代码中的局部特征,判断当轮迭代的有效性。
10.根据权利要求1所述的一种基于多粒度节点的软件缺陷预测方法,其特征在于,所述预测缺陷步骤具体为:通过步骤1、2、3,每个代码文件可形成相应的实例;进一步地,选择软件缺陷预测基分类器,将旧项目生成的实例作为训练集训练分类器,用于预测新项目的实例是否有缺陷。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于诺维艾创(广州)科技有限公司,未经诺维艾创(广州)科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202111433635.7/1.html,转载请声明来源钻瓜专利网。
- 上一篇:底数大于2的指数核酸扩增
- 下一篇:制备碳化中间相沥青的方法