(19)国家知识产权局
(12)发明 专利申请
(10)申请公布号
(43)申请公布日
(21)申请 号 202210445965.6
(22)申请日 2022.04.26
(71)申请人 南通大学
地址 226000 江苏省南 通市崇川区啬园路9
号
(72)发明人 文万志 张瑞年 祁佳篁 沈陈强
陆晓虹 宋梦婷 尹思文 程学云
(74)专利代理 机构 南通一恒专利商标代理事务
所(普通合伙) 32553
专利代理师 梁金娟
(51)Int.Cl.
G06F 11/36(2006.01)
G06K 9/62(2022.01)
G06N 3/04(2006.01)
G06F 40/30(2020.01)
(54)发明名称
基于代码语义融合传统度量元的软件缺陷
预测方法
(57)摘要
本发明属于软件缺陷预测的技术领域, 提供
一种基于代码语义融合传统度量元的软件缺陷
预测方法, 包括如下步骤: S1、 获取项目传统度量
元; S2、 构建项目代码实例向量集PCIVS; S3、 构建
语义提取器SEM; S4、 生成语义向量集 GSVS; S5、 构
建语义融合器SCM; S6、 生成组合语义向量集
CSVS; S7、 构建缺陷预测 分类模型; S8、 构建基于
代码语义融合传统度量元的软件缺陷预测方法
MSFDP。 本发明使用特征提取器提取代码中潜在
的语义信息, 并融合人工提取的传统度量元, 使
用组合的语义向量表示构建缺陷预测分类模型,
弥补使用传统度量元建立预测模 型方法的不足,
提高软件使用的稳定性, 进一步帮助开发人员及
早的发现软件缺陷, 优化测试资源分配 。
权利要求书3页 说明书7页 附图2页
CN 114968764 A
2022.08.30
CN 114968764 A
1.一种基于代码语义融合传统度量元的软件缺陷预测方法, 其特征在于, 包括如下步
骤:
S1、 获取项目传统度量元;
S2、 构建项目代码实例向量 集PCIVS;
S3、 构建语义 提取器SE M;
S4、 生成语义向量 集GSVS;
S5、 构建语义融合器SC M;
S6、 生成组合语义向量 集CSVS;
S7、 构建缺陷预测分类模型;
S8、 构建基于代码语义融合传统度量元的软件缺陷预测方法MSFD P。
2.根据权利要求1所述的基于代码语义融合传统度量元的软件缺陷预测方法, 其特征
在于, 步骤S1包括如下步骤:
S1.1、 基于开源网站获取 软件项目集 合;
S1.2、 以项目类作为实例构建项目实例集 合;
S1.3、 基于开源数据历史记录、 项目源代码语法结构、 源代码抽象语法树构建特征集
{WMC, DIT, NOC, CBO, RFC, LCOM, LCOM3, NPM, DAM, MOA, MFA, CAM, IC, CBM, AMC, Ca, Ce, Max_CC,
Avg_CC, LOC}, 其中, WMC代表每个类的加权方法, DIT代表继承树的深度, NOC代表子类的数
目, CBO代表对象类之间的耦合, RFC代表一个类的响应, LCOM和LCOM3代表在方法上缺少的
凝聚力, NPM代表公共类的个数, DAM代表数据访问指标, MOA代表聚合的量度, MFA代表功能
抽象的量度, CAM代表类方法之间的聚合, IC代表继承耦合, CBM代表方法之间的耦合, AMC代
表平均方法复杂度, Ca代表传入耦合, Ce代表传出耦合, Max_CC代表McCabe圈复杂性的最大
值, Avg_C C代表McCabe圈复杂性的平均值, LOC代 表代码的行 数;
S1.4、 将源项目中的第一个实例按步骤S1.3处 理得到tradition_src1;
S1.5、 将源项目中的所有实例按照步骤S1.4处 理;
S1.6、 构建源项目传统度量元向量集SPTMVS=[tradition_src1,tradition_src2,…,
tradition_srci]; 其中, i =1,2,3, …,n;
S1.7、 将目标项目中的第一个实例按步骤S1.3处 理得到tradition_tar1;
S1.8、 将目标项目中的所有实例按照步骤S1.7处 理;
S1.9、 构建目标项目传统度量元向量集TPTMVS=[tradition_tar1,tradition_
tar2,…,tradition_tarj]; 其中, j=1,2,3, …,m。
3.根据权利要求1所述的基于代码语义融合传统度量元的软件缺陷预测方法, 其特征
在于, 步骤S2包括如下步骤:
S2.1、 将代码按照预定的规则分割 成一个个 的标识token, 将得到的token合并为一个
列表;
S2.2、 token是一个字符串, 将token中的每一个字符转换成ASCII中对应的十进制 值,
然后采用加法运算规则计算该token中所有token对应的十进制值, 将得到的结果作为该
token的语义 值tsv;
S2.3、 将实例中的所有to ken按照步骤S2.2计算得到实例对应的实例向量tsv_l ist;
S2.4、 将项目中的所有实例按步骤S2.3处理得到tsv_listi, 计算每一个tsv_list列表权 利 要 求 书 1/3 页
2
CN 114968764 A
2的长度, 统计列表的最大长度tsv_list_max。 将长度没有达到tsv_list_max的列表使用0填
补到最大长度;
S2.5、 设定列表长度cl ip_len, 将每一个tsv_l ist长度按cl ip_len截取 得到tsv_cl ipi;
S2.6、 读取源项目源代码集, 按照步骤S2.1~S2.5构建源项目代码实例向量集PCIVS ‑S
=[tsv_cl ip1,tsv_clip2,…,tsv_clipi];
S2.7、 读取目标项目源代码集, 按照步骤S2.1~S2.5构建目标项目代码实例向量集
PCIVS‑T=[tsv_cl ip1,tsv_clip2,…,tsv_clipj]。
4.根据权利要求1所述的基于代码语义融合传统度量元的软件缺陷预测方法, 其特征
在于, 步骤S3包括如下步骤:
S3.1、 初始化GRU隐藏层状态;
S3.2、 模型优化器采用Adam;
S3.3、 模型的batch设为当前项目的实例个数, 序列长度设为clip_len, 将同一个GRU正
向和反向的隐藏层累加作为当前GRU的输出out;
S3.4、 定义处 理隐藏层特 征维度容器EFC, 按顺序添加全连接层1, 激活层, 全连接层2;
S3.5、 定义处 理序列长度容器SLC, 按顺序添加全连接层1, 激活层, 全连接层2;
S3.6、 定义统一输出语义 容器UOSC, 添加全连接层;
S3.7、 将步骤S3.3的输出按顺序经过步骤S3.4、 S3.5、 S3.6处理, 计算该结果与实例对
应的标签之间的损失, 将损失反向传递给整个网络实现对权 重的调整;
S3.8、 由步骤S3.1~S3.7定义的容器和规则构建语义提取器SEM, 并通过语义提取器
SEM多次训练得到源代码多语义信息 。
5.根据权利要求1所述的基于代码语义融合传统度量元的软件缺陷预测方法, 其特征
在于, 步骤S4包括如下步骤:
S4.1、 从步骤S2.6中选择源项目代码实例向量集中的一个实例向量, 使用步骤S3构建
的语义提取器SE M对该实例向量进行语义 提取;
S4.2、 在第一次迭代次数下重复S4.1步骤直到所有源项目中实例向量的语义提取完
成;
S4.3、 设置迭代次数epochs, 将步骤S4.2重复epochs次, 将每一次迭代训练得到的结果
记录在源项目代码语义向量 集GSVS‑s中;
S4.4、 从步骤S2.7中选择目标项 目代码实例向量集中的一个实例向量, 使用步骤S3构
建的语义 提取器SE M对该实例向量进行语义 提取;
S4.5、 在第一次迭代次数下重 复S4.4步骤直到所有目标项目中实例向量的语义提取完
成;
S4.6、 设置迭代次数epochs, 将步骤S4.5重复epochs次, 将每一次迭代训练得到的结果
记录在目标项目代码语义向量 集GSVS‑t中。
6.根据权利要求1所述的基于代码语义融合传统度量元的软件缺陷预测方法, 其特征
在于, 步骤S5包括如下步骤:
S5.1、 使用步骤S3构建的语义提取器SEM对项目传统度量元向量集的一个传统度量元
向量进行语义抽取;
S5.2、 在第一次迭代次数下重复步骤S5.1, 直到所有项目传统度量元向量语义提取完权 利 要 求 书 2/3 页
3
CN 114968764 A
3
专利 基于代码语义融合传统度量元的软件缺陷预测方法
文档预览
中文文档
13 页
50 下载
1000 浏览
0 评论
309 收藏
3.0分
温馨提示:本文档共13页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 人生无常 于 2024-03-18 17:48:49上传分享