CN111858323B - 一种基于代码表示学习的即时软件缺陷预测方法 - Google Patents
一种基于代码表示学习的即时软件缺陷预测方法 Download PDFInfo
- Publication number
- CN111858323B CN111858323B CN202010665255.5A CN202010665255A CN111858323B CN 111858323 B CN111858323 B CN 111858323B CN 202010665255 A CN202010665255 A CN 202010665255A CN 111858323 B CN111858323 B CN 111858323B
- Authority
- CN
- China
- Prior art keywords
- word
- code
- change
- modification
- word sequence
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Machine Translation (AREA)
Abstract
本发明涉及一种基于代码表示学习的即时软件缺陷预测方法,借助自然语言模型思想,解决了传统神经网络无法解决长距离依赖的问题;首先审查代码变更信息,分解成提交信息和代码变更两部分;接着编码代码变更信息,得到基于单词嵌入、段落嵌入和位置嵌入等词向量序列;然后利用注意力机制构建Transformer编码器模型;最后预训练之前的编码序列,构建基于代码表示学习的代码缺陷预测模型。本发明相较现有技术,应用注意力机制的优势,构造出Transformer编码器作为模型进行两项预训练任务,使得生成的语言模型更加健壮,能更好地表示代码变更信息,进而提高软件缺陷的检测率。
Description
技术领域
本发明涉及一种基于代码表示学习的即时软件缺陷预测方法,属于软件工程中的软件分析及缺陷预测技术领域。
背景技术
软件缺陷预测技术诞生于20世纪70年代,主要作用是为了降低软件的测试成本,同时进一步保障软件的开发质量。近些年来,软件领域发展迅速,国内外对高质量软件的需求也大幅增长。随着软件的开发越来越复杂,软件开发过程中耦合度急速增长也产生了极大的隐患。软件系统作为推动我国经济和社会发展的重要组成部分,在面临上述隐患时将会对企业和人民产生巨大影响。为了提高软件系统的质量,开发人员需要在测试或调试过程中投入大量的精力。然而,在大多数情况下,开发人员精力有限而且他们的测试成本高昂,因此直接通过人工审查的方式,已难以保证软件测试的及时性和准确性。于是学者们提出了软件缺陷预测技术来帮助开发人员确定软件中是否存在可能的缺陷问题。与软件缺陷预测相关的专利主要有:基于深度神经网络和概率决策森林的软件缺陷预测模型(公开号CN 109446090);一种基于卷积神经网络的软件缺陷预测方法(公开号CN 108829607)等。
在之前的研究中,机器学习技术已广泛应用于软件的缺陷预测任务中,相关工作大都集中于设计并提取软件系统中的度量特征,例如用于度量代码复杂程度的McCabe度量特征,以此构建基于软件度量特征的预测分类模型。为了在开发过程中更早地预测软件项目模块内是否存在缺陷,一种在代码变更提交时就能进行软件缺陷预测的方法被提出,一般称其为即时软件缺陷预测。即时软件缺陷预测可以帮助软件开发人员快速缩小软件系统中最可能包含缺陷的代码搜索范围。2013年Kamei等人在代码变更级别上从五个角度手动提取了14个人工特征,包括修改子系统、文件或目录的数量、添加或删除的代码行数、当前和上次修改某些文件的平均时间间隔等,并采用逻辑回归来做软件缺陷预测任务,实验结果表明代码变更提交后进行的缺陷预测也同样有效,大大节约了软件的测试时间和成本。但是现有传统深度学习的软件缺陷预测方法中,存在着无法处理长距离依赖性的问题,该问题在软件系统中,特别是单个源代码文件内常常出现,例如方法的调用可能相隔上千行代码,由此便导致了长距离依赖问题。
发明内容
本发明所要解决的技术问题是提供一种基于代码表示学习的即时软件缺陷预测方法,借助自然语言模型思想,缓解代码中经常存在的长距离现象,能够有效提升即时软件缺陷预测的准确率。
本发明为了解决上述技术问题采用以下技术方案:本发明设计了一种基于代码表示学习的即时软件缺陷预测方法,用于针对对应代码库中各软件源代码的各变更修改,实现代码缺陷预测;包括代码缺陷预测模型构建方法,以及应用代码缺陷预测模型针对待检测变更修改实现缺陷检测;其中,代码缺陷预测模型构建方法包括如下步骤:
步骤A.选择预设数量的各类型代码缺陷、并将已提交至代码库的各个变更修改,作为各个变更修改样本,并分别针对各个变更修改样本,将变更修改样本分解为提交信息与各个代码变更信息,进而获得各变更修改样本分别所对应的提交信息与各个代码变更信息,然后进入步骤B;
步骤B.分别针对各个变更修改样本,针对变更修改样本所对应的提交信息与各个代码变更信息进行编码,获得提交信息与各个代码变更信息分别所对应的单词序列,进而获得各变更修改样本分别所对应的各个单词序列,然后进入步骤C;
步骤C.分别针对各变更修改样本所对应各个单词序列,获得单词序列分别对应单词嵌入处理、段落嵌入处理、位置嵌入处理的各个词向量,即单词序列所对应的三个词向量,进而获得各单词序列分别所对应的三个词向量,然后进入步骤D;
步骤D.应用各单词序列分别所对应的三个词向量,针对Transformer编码器模型进行构建,获得构建好的Transformer编码器模型,然后进入步骤E;
步骤E.基于各个单词序列,针对构建好的Transformer编码器模型执行预训练任务,获得训练好的Transformer编码器模型,并执行预设参数项的设定,即获得代码缺陷预测模型;
基于代码缺陷预测模型的构建,按如下步骤I至步骤III,实现应用代码缺陷预测模型针对待检测变更修改的缺陷检测;
步骤I.针对待检测变更修改执行代码审查,审查通过则进入步骤II,否则判定该待检测变更修改不符合规范;
步骤II.按步骤B至步骤C的方法,针对待检测变更修改所对应的各个单词序列,获得各单词序列分别所对应的三个词向量,然后进入步骤III;
步骤III.应用代码缺陷预测模型接收各单词序列分别所对应的三个词向量,执行针对待检测变更修改的缺陷检测。
作为本发明的一种优选技术方案:所述步骤B中,分别针对变更修改样本所对应的提交信息与各个代码变更信息,按如下步骤B1至步骤B2进行编码,获得提交信息与各个代码变更信息分别所对应的单词序列;
步骤B1.应用NLTK工具提取提交信息中的单词序列,并根据预设停止词词库,删除该单词序列中的停止词、以及出现次数未超过预设次数阈值的单词,更新该单词序列,即获得该提交信息所对应的单词序列;
步骤B2.分别针对各个代码变更信息,应用NLTK工具提取代码变更信息中的单词序列,并首先根据预设停止词词库,删除该单词序列中的停止词;接着针对该单词序列中的各数字,应用预设第三标记进行替代;然后根据预设已知代码词词库,针对该单词序列中的未知单词、以及出现次数未超过预设次数阈值的单词,采用预设第四标记进行替代;最后根据该单词序列的功能目的,针对该单词序列的开头添加其功能目的标记,由此更新该单词序列,即获得该代码变更信息所对应的单词序列;进而获得各代码变更信息分别所对应的单词序列。
作为本发明的一种优选技术方案,所述步骤D包括步骤D1至步骤D5如下:
步骤D1.应用注意力机制,构建位于Transformer编码器模型中的多头注意力层,并将各单词序列分别所对应的三个词向量输入至多头注意力层中,然后进入步骤D2;
步骤D2.根据多头注意力层中的头数I,随机初始化多头注意力层中的权重矩阵Wo,以及各头注意力分别所对应的矩阵Wi q、Wi k、Wi v,然后进入步骤D3;其中,i∈{1、…、I};
步骤D3.分别针对各个单词序列,应用单词序列分别对应单词嵌入处理、段落嵌入处理、位置嵌入处理的词向量,依次乘以各头注意力所对应的矩阵Wi q、Wi k、Wi v,获得该单词序列分别对应各头注意力的查询矩阵Qi、键码矩阵Ki、数值矩阵Vi,并根据如下公式:
步骤D4.分别针对各个单词序列,按如下公式:
MultiHead=Concatenate(head1,…,headI)Wo
获得各单词序列分别所对应多头注意力层的输出MultiHead,其中,Concatenate(·)表示Concatenate函数,然后进入步骤D5;
步骤D5.分别针对各个单词序列所对应多头注意力层的输出MultiHead,以及该单词序列分别对应单词嵌入处理、段落嵌入处理、位置嵌入处理的词向量进行求和,并针对该求和结果进行层规范化操作获得A,然后针对A经过前馈神经网络的结果,结合A进行求和,最后针对此求和结果进行层规范化操作;如此分别完成各单词序列的操作,实现对Transformer编码器模型的初始化,然后进入步骤E。
作为本发明的一种优选技术方案,所述步骤E包括步骤E1至步骤E3如下:
步骤E1.针对全部单词序列中的各个词,随机选取预设数量的词,并分别针对该各个词,针对该词替换为预设第一标记的概率定义为第一预设比例概率,针对该词替换为任意随机词的概率定义为第二预设比例概率,保留该词的概率定义为预设第三预设比例概率,并应用构建好的Transformer编码器模型完成上述缺词预测训练任务,然后进入步骤E2;
步骤E2.随机选取预设数量的相邻单词序列的序列组合,应用预设第二标记对序列组合中相邻两个单词序列进行分隔,以预设第一概率由全部单词序列中抽取一个单词序列作为序列组合中的第二个单词序列;然后应用构建好的Transformer编码器模型完成上述各序列组合中第二个单词序列的预测训练任务,然后进入步骤E3;
步骤E3.针对训练好的Transformer编码器模型进行预设参数项的设定,即获得代码缺陷预测模型。
作为本发明的一种优选技术方案:所述步骤E3中,针对训练好的Transformer编码器模型,将Transformer编码器模型的层数L设定为12,将其中注意力的头数I设为12;将要学习的参数数量设为110M。
作为本发明的一种优选技术方案,所述步骤I包括步骤I1至步骤I3如下:
步骤I1.应用程序语法检查工具针对待检测变更修改进行验证,判断是否符合编码规范,是则进入步骤I2;否则判定该待检测变更修改不符合规范,退回至该待检测变更修改的提交者进行修改;
步骤I2.基于代码审查工具Gerrit,针对待检测变更修改实现多审阅者的共同审核,若审核不通过,退回至该待检测变更修改的提交者进行修改;若审核通过,则进入步骤I3;
步骤I3.执行待检测变更修改与代码库中相应软件源代码版本之间的集成测试,若测试不通过,则退回至该待检测变更修改的提交者进行修改;若待测试通过,由代码审查工具Gerrit将待检测变更修改提交至代码库中。
作为本发明的一种优选技术方案:所述提交信息中包括变更修改的提交序号、变更修改的提交者姓名、变更修改的日期;所述代码变更信息为修正后的代码。
本发明所述一种基于代码表示学习的即时软件缺陷预测方法,采用以上技术方案与现有技术相比,具有以下技术效果:
本发明所设计基于代码表示学习的即时软件缺陷预测方法,借助自然语言模型思想,解决了传统神经网络无法解决长距离依赖的问题,并应用注意力机制的优势,构造出Transformer编码器作为模型进行两项预训练任务,使得生成的语言模型更加健壮,其中,注意力机制相比于卷积神经网络、循环神经网络,可以解决长距离依赖性、以及难于并行化的问题,能够有效提升即时软件缺陷预测的准确率,并且为软件开发团队在项目质量评估和测试资源分配上提供了重要的参考依据。
附图说明
图1是本发明所设计基于代码表示学习的即时软件缺陷预测方法的流程图;
图2是代码表示序列中第1个token注意力值的计算流程图;
图3是Transformer模型编码器的流程图。
具体实施方式
下面结合说明书附图对本发明的具体实施方式作进一步详细的说明。
本发明所设计一种基于代码表示学习的即时软件缺陷预测方法,用于针对对应代码库中各软件源代码的各变更修改,实现代码缺陷预测;包括代码缺陷预测模型构建方法,以及应用代码缺陷预测模型针对待检测变更修改实现缺陷检测;其中,代码缺陷预测模型构建方法在实际应用当中,如图1所示,具体执行如下步骤A至步骤E。
步骤A.选择预设数量的各类型代码缺陷、并将已提交至代码库的各个变更修改,作为各个变更修改样本,并分别针对各个变更修改样本,将变更修改样本分解为提交信息与各个代码变更信息,进而获得各变更修改样本分别所对应的提交信息与各个代码变更信息,然后进入步骤B。
实际应用当中,提交信息中包括变更修改的提交序号、变更修改的提交者姓名、变更修改的日期;所述代码变更信息为修正后的代码。
由于程序代码不同于普通的自然语言文本,本发明必须将其设计成为语言模型能够识别的有效编码序列,因此继续执行如下步骤B。
步骤B.分别针对各个变更修改样本,针对变更修改样本所对应的提交信息与各个代码变更信息进行编码,获得提交信息与各个代码变更信息分别所对应的单词序列,进而获得各变更修改样本分别所对应的各个单词序列,然后进入步骤C。
实际应用当中,步骤B中分别针对变更修改样本所对应的提交信息与各个代码变更信息,按如下步骤B1至步骤B2进行编码,获得提交信息与各个代码变更信息分别所对应的单词序列。
步骤B1.应用NLTK工具提取提交信息中的单词序列,并根据预设停止词词库,删除该单词序列中的停止词、以及出现次数未超过预设次数阈值的单词,更新该单词序列,即获得该提交信息所对应的单词序列。
步骤B2.分别针对各个代码变更信息,应用NLTK工具提取代码变更信息中的单词序列,并首先根据预设停止词词库,删除该单词序列中的停止词;接着针对该单词序列中的各数字,应用预设第三标记进行替代;然后根据预设已知代码词词库,针对该单词序列中的未知单词、以及出现次数未超过预设次数阈值的单词,采用预设第四标记进行替代;最后根据该单词序列的功能目的,针对该单词序列的开头添加其功能目的标记,由此更新该单词序列,即获得该代码变更信息所对应的单词序列;进而获得各代码变更信息分别所对应的单词序列。
步骤C.分别针对各变更修改样本所对应各个单词序列,获得单词序列分别对应单词嵌入处理、段落嵌入处理、位置嵌入处理的各个词向量,即单词序列所对应的三个词向量,进而获得各单词序列分别所对应的三个词向量,然后进入步骤D。
步骤D.应用各单词序列分别所对应的三个词向量,针对Transformer编码器模型进行构建,获得构建好的Transformer编码器模型,然后进入步骤E。
步骤D在实际应用执行当中,如图2和图3所示,具体执行如下步骤D1至步骤D5。
步骤D1.应用注意力机制,构建位于Transformer编码器模型中的多头注意力层,并将各单词序列分别所对应的三个词向量输入至多头注意力层中,然后进入步骤D2。
注意力机制能够有效解决代码中大量存在的长距离依赖性问题,同时能够避免传统自然语言处理中循环和卷积会导致序列固化的问题,从而更好的实现模型并行化。在步骤D1中,利用多头注意力机制构造的Transformer编码器模型,不同于受序列长度影响的循环神经网络,可以直接获取全局与局部的关系,并且每一步的结果不依赖于之前的结果,因此能实现并行化。
步骤D2.根据多头注意力层中的头数I,随机初始化多头注意力层中的权重矩阵Wo,以及各头注意力分别所对应的矩阵Wi q、Wi k、Wi v,然后进入步骤D3;其中,i∈{1、…、I};
步骤D3.分别针对各个单词序列,应用单词序列分别对应单词嵌入处理、段落嵌入处理、位置嵌入处理的词向量,依次乘以各头注意力所对应的矩阵Wi q、Wi k、Wi v,获得该单词序列分别对应各头注意力的查询矩阵Qi、键码矩阵Ki、数值矩阵Vi,并根据如下公式:
步骤D4.分别针对各个单词序列,按如下公式:
MultiHead=Concatenate(head1,…,headI)Wo
获得各单词序列分别所对应多头注意力层的输出MultiHead,其中,Concatenate(·)表示Concatenate函数,然后进入步骤D5。
步骤D5.分别针对各个单词序列所对应多头注意力层的输出MultiHead,以及该单词序列分别对应单词嵌入处理、段落嵌入处理、位置嵌入处理的词向量进行求和,并针对该求和结果进行层规范化操作获得A,然后针对A经过前馈神经网络的结果,结合A进行求和,最后针对此求和结果进行层规范化操作;如此分别完成各单词序列的操作,实现对Transformer编码器模型的初始化,然后进入步骤E。
由于注意力机制的并行化,会自动忽略序列中标记位置的影响,本发明利用位置嵌入信息重新对标记位置进行表示说明,即在Transformer中位置嵌入是基于正弦或余弦函数形成的固定值。
步骤E.基于各个单词序列,针对构建好的Transformer编码器模型执行预训练任务,获得训练好的Transformer编码器模型,并执行预设参数项的设定,即获得代码缺陷预测模型。
在实际操作中,大部分软件项目的缺陷率都是处于较低水平(20%以下),所以类不平衡现象是领域内的常见问题。类不平衡问题会给机器学习带来一定的困难,因为训练出来的分类器倾向于将样本标记成多数类,并且通常对少数类的分类能力较弱。为了缓解这个问题,很多解决类不平衡的方法被提了出来并得到了广泛使用。在本发明中,采用Focalloss损失函数,该函数通过减少易分类样本的权重,使得模型在训练时更专注于难分类的样本。
在实际此步骤的训练过程中,采用Focal loss损失函数,以解决在缺陷预测领域中缺陷样本和非缺陷样本(也称为正负样本)比例严重失调的问题,该损失函数可以减少易分类样本的权重,使得模型在训练时更专注于难分类的样本。
Focal loss损失函数:
Lfl=-α(1-y′)γlogy′
此处的参数y’是样本存在软件缺陷的预测概率。参数γ用来平滑权重曲线的陡度,当γ大于0时,对于易分类的正样本或负样本权重小,而对于难区分的样本则权重大,避免让易分类的样本主导结果。γ越大,难分类的样本权重就越大。另一个参数α用来平衡正负样本之间的比例不均,本发明设定为γ=2,α=0.25。
上述步骤E在实际执行当中,具体执行如下步骤E1至步骤E3。
步骤E1.针对全部单词序列中的各个词,随机选取预设数量的词,并分别针对该各个词,针对该词替换为预设第一标记的概率定义为第一预设比例概率,针对该词替换为任意随机词的概率定义为第二预设比例概率,保留该词的概率定义为预设第三预设比例概率,并应用构建好的Transformer编码器模型完成上述缺词预测训练任务,然后进入步骤E2。
步骤E2.随机选取预设数量的相邻单词序列的序列组合,应用预设第二标记对序列组合中相邻两个单词序列进行分隔,以预设第一概率由全部单词序列中抽取一个单词序列作为序列组合中的第二个单词序列;然后应用构建好的Transformer编码器模型完成上述各序列组合中第二个单词序列的预测训练任务,然后进入步骤E3。
步骤E3.针对训练好的Transformer编码器模型进行预设参数项的设定,诸如将Transformer编码器模型的层数L设定为12,将其中注意力的头数I设为12;将要学习的参数数量设为110M;然后即获得代码缺陷预测模型。
基于代码缺陷预测模型的构建,进一步执行如下步骤I至步骤III,实现应用代码缺陷预测模型针对待检测变更修改的缺陷检测。
步骤I.针对待检测变更修改执行代码审查,审查通过则进入步骤II,否则判定该待检测变更修改不符合规范。
具体的实际应用当中,上述步骤I包括步骤I1至步骤I3如下。
步骤I1.应用程序语法检查工具针对待检测变更修改进行验证,判断是否符合编码规范,是则进入步骤I2;否则判定该待检测变更修改不符合规范,退回至该待检测变更修改的提交者进行修改。
步骤I2.基于代码审查工具Gerrit,针对待检测变更修改实现多审阅者的共同审核,若审核不通过,退回至该待检测变更修改的提交者进行修改;若审核通过,则进入步骤I3。
步骤I3.执行待检测变更修改与代码库中相应软件源代码版本之间的集成测试,若测试不通过,则退回至该待检测变更修改的提交者进行修改;若待测试通过,由代码审查工具Gerrit将待检测变更修改提交至代码库中。
步骤II.按步骤B至步骤C的方法,针对待检测变更修改所对应的各个单词序列,获得各单词序列分别所对应的三个词向量,然后进入步骤III。
步骤III.应用代码缺陷预测模型接收各单词序列分别所对应的三个词向量,执行针对待检测变更修改的缺陷检测。
上述技术方案所设计基于代码表示学习的即时软件缺陷预测方法,借助自然语言模型思想,解决了传统神经网络无法解决长距离依赖的问题,并应用注意力机制的优势,构造出Transformer编码器作为模型进行两项预训练任务,使得生成的语言模型更加健壮,其中,注意力机制相比于卷积神经网络、循环神经网络,可以解决长距离依赖性、以及难于并行化的问题,能够有效提升即时软件缺陷预测的准确率,并且为软件开发团队在项目质量评估和测试资源分配上提供了重要的参考依据。
上面结合附图对本发明的实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下做出各种变化。
Claims (7)
1.一种基于代码表示学习的即时软件缺陷预测方法,用于针对对应代码库中各软件源代码的各变更修改,实现代码缺陷预测;其特征在于:包括代码缺陷预测模型构建方法,以及应用代码缺陷预测模型针对待检测变更修改实现缺陷检测;其中,代码缺陷预测模型构建方法包括如下步骤:
步骤A.选择预设数量的各类型代码缺陷、并将已提交至代码库的各个变更修改,作为各个变更修改样本,并分别针对各个变更修改样本,将变更修改样本分解为提交信息与各个代码变更信息,进而获得各变更修改样本分别所对应的提交信息与各个代码变更信息,然后进入步骤B;
步骤B.分别针对各个变更修改样本,针对变更修改样本所对应的提交信息与各个代码变更信息进行编码,获得提交信息与各个代码变更信息分别所对应的单词序列,进而获得各变更修改样本分别所对应的各个单词序列,然后进入步骤C;
步骤C.分别针对各变更修改样本所对应各个单词序列,获得单词序列分别对应单词嵌入处理、段落嵌入处理、位置嵌入处理的各个词向量,即单词序列所对应的三个词向量,进而获得各单词序列分别所对应的三个词向量,然后进入步骤D;
步骤D.应用各单词序列分别所对应的三个词向量,针对Transformer编码器模型进行构建,获得构建好的Transformer编码器模型,然后进入步骤E;
步骤E.基于各个单词序列,针对构建好的Transformer编码器模型执行预训练任务,获得训练好的Transformer编码器模型,并执行预设参数项的设定,即获得代码缺陷预测模型;
基于代码缺陷预测模型的构建,按如下步骤I至步骤III,实现应用代码缺陷预测模型针对待检测变更修改的缺陷检测;
步骤I.针对待检测变更修改执行代码审查,审查通过则进入步骤II,否则判定该待检测变更修改不符合规范;
步骤II.按步骤B至步骤C的方法,针对待检测变更修改所对应的各个单词序列,获得各单词序列分别所对应的三个词向量,然后进入步骤III;
步骤III.应用代码缺陷预测模型接收各单词序列分别所对应的三个词向量,执行针对待检测变更修改的缺陷检测。
2.根据权利要求1所述一种基于代码表示学习的即时软件缺陷预测方法,其特征在于:所述步骤B中,分别针对变更修改样本所对应的提交信息与各个代码变更信息,按如下步骤B1至步骤B2进行编码,获得提交信息与各个代码变更信息分别所对应的单词序列;
步骤B1.应用NLTK工具提取提交信息中的单词序列,并根据预设停止词词库,删除该单词序列中的停止词、以及出现次数未超过预设次数阈值的单词,更新该单词序列,即获得该提交信息所对应的单词序列;
步骤B2.分别针对各个代码变更信息,应用NLTK工具提取代码变更信息中的单词序列,并首先根据预设停止词词库,删除该单词序列中的停止词;接着针对该单词序列中的各数字,应用预设第三标记进行替代;然后根据预设已知代码词词库,针对该单词序列中的未知单词、以及出现次数未超过预设次数阈值的单词,采用预设第四标记进行替代;最后根据该单词序列的功能目的,针对该单词序列的开头添加其功能目的标记,由此更新该单词序列,即获得该代码变更信息所对应的单词序列,进而获得各代码变更信息分别所对应的单词序列。
3.根据权利要求1所述一种基于代码表示学习的即时软件缺陷预测方法,其特征在于,所述步骤D包括步骤D1至步骤D5如下:
步骤D1.应用注意力机制,构建位于Transformer编码器模型中的多头注意力层,并将各单词序列分别所对应的三个词向量输入至多头注意力层中,然后进入步骤D2;
步骤D2.根据多头注意力层中的头数I,随机初始化多头注意力层中的权重矩阵Wo,以及各头注意力分别所对应的矩阵Wi q、Wi k、Wi v,然后进入步骤D3;其中,i∈{1、…、I};
步骤D3.分别针对各个单词序列,应用单词序列分别对应单词嵌入处理、段落嵌入处理、位置嵌入处理的词向量,依次乘以各头注意力所对应的矩阵Wi q、Wi k、Wi v,获得该单词序列分别对应各头注意力的查询矩阵Qi、键码矩阵Ki、数值矩阵Vi,并根据如下公式:
步骤D4.分别针对各个单词序列,按如下公式:
MultiHead=Concatenate(head1,…,headI)Wo
获得各单词序列分别所对应多头注意力层的输出MultiHead,其中,Concatenate(·)表示Concatenate函数,然后进入步骤D5;
步骤D5.分别针对各个单词序列所对应多头注意力层的输出MultiHead,以及该单词序列分别对应单词嵌入处理、段落嵌入处理、位置嵌入处理的词向量进行求和,并针对该求和结果进行层规范化操作获得A,然后针对A经过前馈神经网络的结果,结合A进行求和,最后针对此求和结果进行层规范化操作;如此分别完成各单词序列的操作,实现对Transformer编码器模型的初始化,然后进入步骤E。
4.根据权利要求1所述一种基于代码表示学习的即时软件缺陷预测方法,其特征在于,所述步骤E包括步骤E1至步骤E3如下:
步骤E1.针对全部单词序列中的各个词,随机选取预设数量的词,并分别针对该各个词,针对该词替换为预设第一标记的概率定义为第一预设比例概率,针对该词替换为任意随机词的概率定义为第二预设比例概率,保留该词的概率定义为预设第三预设比例概率,并应用构建好的Transformer编码器模型完成上述缺词预测训练任务,然后进入步骤E2;
步骤E2.随机选取预设数量的相邻单词序列的序列组合,应用预设第二标记对序列组合中相邻两个单词序列进行分隔,以预设第一概率由全部单词序列中抽取一个单词序列作为序列组合中的第二个单词序列;然后应用构建好的Transformer编码器模型完成上述各序列组合中第二个单词序列的预测训练任务,然后进入步骤E3;
步骤E3.针对训练好的Transformer编码器模型进行预设参数项的设定,即获得代码缺陷预测模型。
5.根据权利要求4所述一种基于代码表示学习的即时软件缺陷预测方法,其特征在于:所述步骤E3中,针对训练好的Transformer编码器模型,将Transformer编码器模型的层数L设定为12,将其中注意力的头数I设为12;将要学习的参数数量设为110M。
6.根据权利要求1所述一种基于代码表示学习的即时软件缺陷预测方法,其特征在于,所述步骤I包括步骤I1至步骤I3如下:
步骤I1.应用程序语法检查工具针对待检测变更修改进行验证,判断是否符合编码规范,是则进入步骤I2;否则判定该待检测变更修改不符合规范,退回至该待检测变更修改的提交者进行修改;
步骤I2.基于代码审查工具Gerrit,针对待检测变更修改实现多审阅者的共同审核,若审核不通过,退回至该待检测变更修改的提交者进行修改;若审核通过,则进入步骤I3;
步骤I3.执行待检测变更修改与代码库中相应软件源代码版本之间的集成测试,若测试不通过,则退回至该待检测变更修改的提交者进行修改;若待测试通过,由代码审查工具Gerrit将待检测变更修改提交至代码库中。
7.根据权利要求1至6中任意一项所述基于代码表示学习的即时软件缺陷预测方法,其特征在于:所述提交信息中包括变更修改的提交序号、变更修改的提交者姓名、变更修改的日期;所述代码变更信息为修正后的代码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010665255.5A CN111858323B (zh) | 2020-07-11 | 2020-07-11 | 一种基于代码表示学习的即时软件缺陷预测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010665255.5A CN111858323B (zh) | 2020-07-11 | 2020-07-11 | 一种基于代码表示学习的即时软件缺陷预测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111858323A CN111858323A (zh) | 2020-10-30 |
CN111858323B true CN111858323B (zh) | 2021-06-01 |
Family
ID=72982905
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010665255.5A Active CN111858323B (zh) | 2020-07-11 | 2020-07-11 | 一种基于代码表示学习的即时软件缺陷预测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111858323B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113034469B (zh) * | 2021-03-24 | 2023-10-24 | 东北大学 | 基于transformer的热成像检测管道内部缺陷的方法 |
CN113160139B (zh) * | 2021-03-24 | 2022-12-16 | 华南理工大学 | 基于注意力的Faster R-CNN网络的钢板表面缺陷检测方法 |
CN113298789A (zh) * | 2021-05-28 | 2021-08-24 | 国网陕西省电力公司电力科学研究院 | 绝缘子缺陷检测方法、系统、电子设备及可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107967208A (zh) * | 2016-10-20 | 2018-04-27 | 南京大学 | 一种基于深度神经网络的Python资源敏感缺陷代码检测方法 |
CN108563555A (zh) * | 2018-01-10 | 2018-09-21 | 江苏工程职业技术学院 | 基于四目标优化的故障更改代码预测方法 |
CN108932192A (zh) * | 2017-05-22 | 2018-12-04 | 南京大学 | 一种基于抽象语法树的Python程序类型缺陷检测方法 |
US10430315B2 (en) * | 2017-10-04 | 2019-10-01 | Blackberry Limited | Classifying warning messages generated by software developer tools |
CN110688312A (zh) * | 2019-09-26 | 2020-01-14 | 山东浪潮人工智能研究院有限公司 | 一种基于Transformer的软件缺陷预测方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10437702B2 (en) * | 2016-02-29 | 2019-10-08 | B. G. Negev Technologies And Applications Ltd., At Ben-Gurion University | Data-augmented software diagnosis method and a diagnoser therefor |
US10838849B2 (en) * | 2016-03-08 | 2020-11-17 | International Business Machines Corporation | Analyzing software test failures using natural language processing and machine learning |
-
2020
- 2020-07-11 CN CN202010665255.5A patent/CN111858323B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107967208A (zh) * | 2016-10-20 | 2018-04-27 | 南京大学 | 一种基于深度神经网络的Python资源敏感缺陷代码检测方法 |
CN108932192A (zh) * | 2017-05-22 | 2018-12-04 | 南京大学 | 一种基于抽象语法树的Python程序类型缺陷检测方法 |
US10430315B2 (en) * | 2017-10-04 | 2019-10-01 | Blackberry Limited | Classifying warning messages generated by software developer tools |
CN108563555A (zh) * | 2018-01-10 | 2018-09-21 | 江苏工程职业技术学院 | 基于四目标优化的故障更改代码预测方法 |
CN110688312A (zh) * | 2019-09-26 | 2020-01-14 | 山东浪潮人工智能研究院有限公司 | 一种基于Transformer的软件缺陷预测方法 |
Non-Patent Citations (4)
Title |
---|
A Comparative Analysis of the Efficiency of Change Metrics and Static Code Attributes for Defect Prediction;Raimund Moser等;《ICSE》;20080518;全文 * |
Software Fault Prediction using Language Processing;David Binkley等;《IEEE》;20071031;全文 * |
基于程序语义的软件缺陷预测技术研究与实现;于悦等;《中国优秀硕士学位论文全文数据库》;20190815;全文 * |
静态软件缺陷预测方法研究;陈翔等;《软件学报》;20151103;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111858323A (zh) | 2020-10-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111858323B (zh) | 一种基于代码表示学习的即时软件缺陷预测方法 | |
Gao et al. | Smartembed: A tool for clone and bug detection in smart contracts through structural code embedding | |
CN110413319B (zh) | 一种基于深度语义的代码函数味道检测方法 | |
CN113127339B (zh) | 一种Github开源平台数据的获取方法及源代码缺陷修复系统 | |
CN109492106B (zh) | 一种文本代码相结合的缺陷原因自动分类方法 | |
CN114185769A (zh) | 基于双向长短期记忆神经网络的软件缺陷预测方法及终端 | |
CN113961241A (zh) | 一种基于gat图神经网络模型的代码克隆检测方法 | |
CN113741886B (zh) | 一种基于图的语句级程序修复方法及系统 | |
CN114547619A (zh) | 一种基于树的漏洞修复系统及修复方法 | |
CN117215935A (zh) | 一种基于多维度代码联合图表示的软件缺陷预测方法 | |
Shen et al. | Boundary sampling to boost mutation testing for deep learning models | |
Barlaug | LEMON: explainable entity matching | |
CN116702160B (zh) | 一种基于数据依赖增强程序切片的源代码漏洞检测方法 | |
CN111666748B (zh) | 一种自动化分类器的构造方法以及识别决策的方法 | |
KR102096017B1 (ko) | 추상 구문 트리를 기반으로 소스코드를 임베딩하여 소프트웨어 버그를 예측하는 방법 및 시스템 | |
CN116401289A (zh) | 一种基于多源信息结合的可追溯性链接自动恢复方法 | |
CN115495085A (zh) | 一种基于深度学习细粒度代码模板的生成方法及装置 | |
CN113157814B (zh) | 关系数据库下查询驱动的智能工作负载分析方法 | |
CN115221045A (zh) | 一种基于多任务多视角学习的多目标软件缺陷预测方法 | |
CN115496630A (zh) | 一种基于自然语言算法的专利撰写质量核检方法以及系统 | |
CN114064472A (zh) | 基于代码表示的软件缺陷自动修复加速方法 | |
Fan et al. | High-frequency keywords to predict defects for android applications | |
CN113407439B (zh) | 一种用于软件自承认型技术债务的检测方法 | |
CN115098389B (zh) | 一种基于依赖模型的rest接口测试用例生成方法 | |
CN117435246B (zh) | 一种基于马尔可夫链模型的代码克隆检测方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |