CN117591913A - 基于改进的R-Transformer的语句级软件缺陷预测方法 - Google Patents
基于改进的R-Transformer的语句级软件缺陷预测方法 Download PDFInfo
- Publication number
- CN117591913A CN117591913A CN202311592615.3A CN202311592615A CN117591913A CN 117591913 A CN117591913 A CN 117591913A CN 202311592615 A CN202311592615 A CN 202311592615A CN 117591913 A CN117591913 A CN 117591913A
- Authority
- CN
- China
- Prior art keywords
- code
- defect prediction
- fransformer
- improved
- layer
- 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.)
- Pending
Links
- 230000007547 defect Effects 0.000 title claims abstract description 82
- 238000000034 method Methods 0.000 title claims abstract description 54
- 230000006870 function Effects 0.000 claims abstract description 34
- 238000009499 grossing Methods 0.000 claims abstract description 30
- 230000003068 static effect Effects 0.000 claims abstract description 17
- 238000012360 testing method Methods 0.000 claims abstract description 14
- 230000000694 effects Effects 0.000 claims abstract description 10
- 238000005516 engineering process Methods 0.000 claims abstract description 9
- 238000012545 processing Methods 0.000 claims abstract description 6
- 238000012549 training Methods 0.000 claims description 15
- 238000002790 cross-validation Methods 0.000 claims description 10
- 230000002950 deficient Effects 0.000 claims description 10
- 238000002474 experimental method Methods 0.000 claims description 9
- 239000013598 vector Substances 0.000 claims description 8
- 238000011156 evaluation Methods 0.000 claims description 7
- 238000002679 ablation Methods 0.000 claims description 6
- 238000009826 distribution Methods 0.000 claims description 6
- 230000006872 improvement Effects 0.000 claims description 6
- 230000004913 activation Effects 0.000 claims description 5
- 238000013528 artificial neural network Methods 0.000 claims description 5
- 239000011159 matrix material Substances 0.000 claims description 5
- 230000000306 recurrent effect Effects 0.000 claims description 5
- 238000004364 calculation method Methods 0.000 claims description 4
- 238000010606 normalization Methods 0.000 claims description 3
- 238000004140 cleaning Methods 0.000 claims description 2
- 238000002372 labelling Methods 0.000 claims description 2
- 230000035945 sensitivity Effects 0.000 claims description 2
- 238000013135 deep learning Methods 0.000 abstract 1
- 230000002708 enhancing effect Effects 0.000 abstract 1
- 230000006978 adaptation Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 3
- 235000019580 granularity Nutrition 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 230000007774 longterm Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008033 biological extinction Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000003709 image segmentation Methods 0.000 description 1
- 238000013140 knowledge distillation Methods 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 238000005065 mining Methods 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 230000002194 synthesizing effect Effects 0.000 description 1
- 238000009827 uniform distribution Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/044—Recurrent networks, e.g. Hopfield networks
- G06N3/0442—Recurrent networks, e.g. Hopfield networks characterised by memory or gating, e.g. long short-term memory [LSTM] or gated recurrent units [GRU]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
- G06N3/0455—Auto-encoder networks; Encoder-decoder networks
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y04—INFORMATION OR COMMUNICATION TECHNOLOGIES HAVING AN IMPACT ON OTHER TECHNOLOGY AREAS
- Y04S—SYSTEMS INTEGRATING TECHNOLOGIES RELATED TO POWER NETWORK OPERATION, COMMUNICATION OR INFORMATION TECHNOLOGIES FOR IMPROVING THE ELECTRICAL POWER GENERATION, TRANSMISSION, DISTRIBUTION, MANAGEMENT OR USAGE, i.e. SMART GRIDS
- Y04S10/00—Systems supporting electrical power generation, transmission or distribution
- Y04S10/50—Systems or methods supporting the power network operation or management, involving a certain degree of interaction with the load-side end user applications
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- General Physics & Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Software Systems (AREA)
- Evolutionary Computation (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Mathematical Physics (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Bioinformatics & Computational Biology (AREA)
- Evolutionary Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种基于改进的R‑Transformer的语句级软件缺陷预测方法,该方法具体包括:利用设计好的32个语句级代码指标对每个代码行提取静态代码特征,使用One‑Hot编码对每行代码提取token特征,构建DP‑Tramo缺陷预测模型对软件缺陷进行语句级别的预测,通过代价敏感学习技术处理类别的不平衡,运用标签平滑技术来增强模型泛化能力。本发明通过改进的R‑Transformer有效地获取了函数代码行的语法和语义信息,进而提高了语句级软件缺陷预测的效果。该发明在细粒度软件缺陷预测以及基于深度学习引导模糊测试等领域均具有广大应用前景。
Description
技术领域
本发明属于软件缺陷预测领域,具体涉及一种基于改进的R-Transformer的语句级软件缺陷预测方法。
背景技术
软件缺陷是指可以导致软件产生意外结果的错误/故障。在某些情况下,软件缺陷会被利用并导致严重后果。软件缺陷预测(SDP)是帮助开发者提高软件质量的重要技术之一。给定一个程序,SDP模型可以确定该程序的哪些部分容易出错。
主流的SDP方法可以根据模型输入分为基于软件度量、基于缺陷代码模式和基于异常的方法。软件度量是对可计算的特性的衡量,可用于衡量、评估和预测软件质量。典型的软件度量包括代码复杂性度量(比如McCabe)、面向对象度量(比如CK度量套件)、变更度量(比如代码流失度量、变更突发、代码延迟)和开发人员度量(比如开发人员修改模块的累计次数、开发人员修改的代码行数)等。缺陷代码形式的输入包括从代码表面提取的平坦化特征和通过静态分析获得的结构特征。结构特征包括抽象语法树,控制流图,数据流图,程序依赖图等。
SDP的一个重要问题是预测的粒度。SDP技术可以在不同的粒度上工作,包括程序、文件、模块、类、函数以及最细粒度的语句。一般来说,粗粒度的SDP方法无法确定缺陷的确切位置。开发人员仍然需要花费大量的资源来识别缺陷。相反,细粒度的SDP技术可以帮助更准确地定位缺陷,因此更受开发者的青睐。然而,细粒度SDP比粗粒度SDP更难,因为它对缺陷的定位能力要求很高。近十年来,大多数SDP是粗粒度的。Sestili等人首先考虑在合成代码中使用记忆网络进行语句级SDP。他们使用代码生成器(s-bAbI)来生成和标注缓冲区溢出的数据集。但其代码相对简单,包含的错误类型有限(只包括缓冲区溢出缺陷)。目前最先进的语句级SDP是由Majd等人提出的SLDeep,作者使用LSTM来实现语句级SDP,并取得比基线更好的性能。但LSTM也有其相应的局限性,LSTM在时间序列较长时易发生梯度消失,由于其不能并行训练所以训练速度也比较慢。
目前,现有方法在语句级SDP任务上的准确率较低。
发明内容
本发明的一个目的在于,提供一种基于改进的R-Transformer的语句级软件缺陷预测方法,以提高语句级别软件缺陷预测的准确率。
为达到上述目的,本发明所采用的技术方案是:
提供一种基于改进的R-Transformer的语句级软件缺陷预测方法,包括:
利用设计好的32个语句级代码指标对每个代码行提取静态代码特征;
使用One-Hot编码对每行代码提取token特征;
构建DP-Tramo缺陷预测模型对软件缺陷进行语句级别的预测;
使用代价敏感学习技术处理类别的不平衡;
使用标签平滑技术来增强模型泛化能力。
作为优选的一个方面,该方法还包括对对该DP-Tramo缺陷预测模型进行训练测试的步骤,具体包括:
对数据集进行清洗,排除空行等无作用代码行;
对清洗后的数据集中的每行代码打上标签,考虑一个准确度领域的概念,即对于某个缺陷行上下N行,都将其标签设为1,分类标签0表示该代码行是正常的,分类标签1表示该代码行是有缺陷的,将处理过的数据集按照9:1的比例划分为训练集和测试集;
采用十折交叉验证来测试DP-Tramo缺陷预测模型,在每一折中,使用训练集对DP-Tramo缺陷预测模型进行训练,并对模型参数进行调整,使用测试集对DP-Tramo缺陷预测模型进行缺陷预测,并利用评估指标进行验证;
使用消融实验验证DP-Tramo缺陷预测模型中对R-Transformer的改进和标签平滑技术的作用。
作为优选的一个方面,对软件代码进行语句级别缺陷预测的具体过程为:
对数据集中的每行代码提取静态特征及token特征,并将两者拼接在一起作为DP-Tramo缺陷预测模型的输入向量;
对数据集标签矩阵使用标签平滑技术进行处理,得到DP-Tramo缺陷预测模型的标签向量;
将输入向量送入DP-Tramo缺陷预测模型,通过R-Transformer来学习每行代码的语法和语义特征,经过LSTM层和全连接层来对每行代码进行预测,最后利用Softmax函数输出每行代码的分类结果;
对分类结果结合标签向量使用代价敏感学习技术,解决样本不平衡问题。
作为优选的一个方面,32个语句级静态指标反映每行代码的内容和复杂度,在这32个指标中,有10个外部指标可以捕捉到代码的背景复杂度,其他22个内部指标估计代码语句本身所包含的复杂度,使用Clang 13.0.1得到每个程序的抽象语法树(AST),基于抽象语法树,可以通过相关的节点标签和行号来计算一个代码语句的度量。
作为优选的一个方面,使用PLY 3.11库来解析程序,得到每一行的token序列,每个token被表示为(t,v)对,其中t是token类型,v是token值,t、v均采用One-Hot编码表示,在资源允许的最大限度内,每行代码选择相同的token数目Mt,每行代码的token特征表示由Mt个token对拼接而成。
作为优选的一个方面,DP-Tramo缺陷预测模型具体包括:
改进的R-Transformer层,使用改进的R-Transformer来学习每行代码的语法和语义信息;
LSTM层、全连接层和分类层,使用一个Bi-GRU层、一个LSTM层、一个全连接层来预测每行代码的缺陷可能性,使用Softmax函数来将输出值转换为范围在[0,1]且和为1的缺陷概率分布。
作为优选的一个方面,采用的代价敏感学技术是通过让DP-Tramo缺陷预测模型的损失函数对正样本(缺陷代码行)和负样本(正常代码行)分配不同的损失权重,以达到最小的损失,从而来解决样本失衡问题。使用标签平滑法来防止DP-Tramo缺陷预测模型过于自信地预测结果,从而增加模型的泛化能力,采用的平滑系数是0.1。
作为优选的一个方面,评估指标包括:准确率、精确率、召回率和F1值,准确率代表分类后预测正确的结果占总样本的比例,精确率代表在所有被预测为正的样本中实际为正样本的概率,召回率代表在实际为正的样本中被预测为正样本的概率,F1值代表精确率和召回率的加权调和平均值,因为使用十折交叉验证来验证DP-Tramo缺陷预测模型性能,的评估指标最终算的是十折的平均值。
作为优选的一个方面,进行消融实验以研究改进的R-Transformer和标签平滑的效果。当准确度邻域分别为2和4时,使用十折交叉验证比较普通的R-Transformer、没有标签平滑的改进的R-Transformer和DP-Tramo缺陷预测模型。
作为优选的一个方面,普通的R-Transformer层由多个相同的网络层组成,每层有三个组成部分:
LocalRNN层,使用一个循环神经网络(RNN)来建模长序列中的局部连续短序列,这里RNN可以是任何RNN单元(如LSTM,GRU);
多头注意网络层,多个独立的放缩点积注意力计算;
位置前馈网络层,由两个全连接层组成,中间是RELU激活;
普通的R-Transformer层在每一个网络层使用Add&Norm(即残差连接和归一化)来连接这三个组成部分。
对R-Transformer的改进在于增加一个GlobalRNN来建模输入中的全局序列结构,在每个网络层的第一个组成部分用GlobalRNN替换Add&Norm中的跳跃连接,即该层输出最终可表示为以下形式:
GlobalRNN(inputs)+LocalRNN(LayerNorm(inputs))
LocalRNN层使用Bi-GRU网络,GlobalRNN层使用Bi-LSTM网络。
本发明产生的有益效果是:
本发明提出一个基于改进的R-Transformer的软件缺陷预测模型DP-Tramo,使用代价敏感学习技术处理类别的不平衡,使用标签平滑技术来提高DP-Tramo的泛化能力。对R-Transformer的改进在于增加一个GlobalRNN来建模输入中的全局序列结构,从而使得R-Transformer在使用LocalRNN获取局部的序列信息的同时能够关注整个序列的状态。进行实验来评估DP-Tramo。实验结果表明,DP-Tramo的性能优于最先进的语句级SDP方法。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明实施例中DP-Tramo结构的高层概述;
图2是本发明实施例中类似于Code4Bench风格的代码片段;
图3是本发明实施例中改进的R-Transformer的结构;
图4是本发明实施例中DP-Tramo学习模型的高层拓扑。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
如图1所示,本发明实施例的基于改进的R-Transformer的语句级软件缺陷预测方法,包括以下步骤。
步骤101:利用设计好的32个语句级代码指标对每个代码行提取静态代码特征。
采用32个语句级别的软件指标。这些指标反映每个语句的背景和复杂性。在这32个指标中,有10个外部指标反映代码的背景复杂性,其他22个内部指标则估计语句本身的复杂性。表1和表2分别显示外部线性和内部线性指标的描述和计算方法。
表1
ID | Metric | Description |
1 | Function | Is the code line in a function body |
2 | Recursive Function | Is the code line in a recursive function body |
3 | FOR Block | The number of FOR blocks containing the code line |
4 | DO Block | The number of DO WHILE blocks containing the code line |
5 | WHILE Block | The number of WHILE blocks containing the code line |
6 | IF Block | The number of IF blocks containing the code line |
7 | SWITCH Block | The number of SWITCH blocks containing the code line |
8 | Blocks Count | The number of basic blocks containing the code line |
9 | Recursive Blocks Count | The number of recursive basic blocks containing the code line |
10 | Comparison Blocks count | The number of comparison operations in blocks containing the code line |
表2
例如,外部WHILE块指标(表2中的编号5)表示语句停留在其中的嵌套while块的数量。内部Binary Operator指标表示语句中二进制运算符的数量。
选择这些静态指标有三个原因。首先,这些特征代表代码的复杂性,而代码的复杂性已经被作为软件缺陷的一个指标。第二,它们的变化足以区分类似的语句。第三,这些特征在SLDeep中使用,在实验中选择它作为基线。原则上,将其他特征整合到的方法中是很简单的。此外,工作中使用的特征适用于许多编程语言。
使用Clang 13.0.1来生成每个程序的抽象语法树(AST)。基于AST,可以通过相关的节点标签和它的行号来计算一个语句的指标。例如,如果一些函数声明出现在函数本身的主体中,它就被标记为递归函数。相应地,函数主体中的所有代码行都被标记为在Recursive Function(表2中的编号2)中。函数调用次数指标(表3中的编号27)可以通过计算语句中的CallExpr标志的数量来计算。
步骤102:使用One-Hot编码对每行代码提取token特征。
如图2所示,本发明实施例中的类似于Code4Bench风格的代码片段。表3为该代码片段的静态指标值。虽然静态代码指标可以捕捉到代码的各种复杂性,但对于软件缺陷预测来说,这些指标是不够的。例如,图2中的第1行和第18行是不同的。然而,它们有相同的度量值。因此,选择从代码结构本身提取token特征。
表3
一个token指的是一系列的字母,在程序语法中可以构成一个单元。使用PLY 3.11库来解析程序,得到每一行的token序列。每个token被表示为一对(t,v),其中t是token类型,v是token值。表4显示每个token类型的描述。例如,程序中的标记int被表示为(CPP ID,int)。为每个token类型分配一个全局唯一的数字,为每个token值分配一个跨程序的唯一数字。在输入中保留标记值是必要的,因为两个不同的代码行可能有相同的token类型序列(例如,图2中的第11行和第13行)。
表4
Token Type | Description |
CPP_ID | Identifiers,key words |
CPP_INTEGER | Integer literal |
CPP_FLOAT | Floating-point literal |
CPP_STRING | String literal |
CPP_char | Character constant |
CPP_WS | Whitespace |
CPP_POUND | # |
CPP_DPOUND | ## |
CPP_COMMENT1 | Comments after the code line |
CPP_COMMENT2 | The whole line of comments |
神经网络模型的输入是一个矩阵S,大小为B×NP×NR。这里批量大小B代表每个批次程序的数量。NP代表一个程序中的代码行数。NR是每个代码行的表示长度。假设一个数据集D有n个程序,每个程序Pi(1≤i≤n)有ri个代码行。Pij表示程序Pi的第j行(1≤j≤ri)。假定Pij有tij个token。然后设定NP为最大行数。
NP=max(ri)
将每一行的32个静态代码指标与所有token的编码对串联起来得到特征表示。设Mt为所有程序行中的最大token数。那么Mt和NR可以按以下方式计算:
Mt=max(tij)
NR=32+2*Mt
步骤103:构建DP-Tramo缺陷预测模型对软件缺陷进行语句级别的预测。
Transformer已被应用在各个领域,包括自然语言处理、语音处理和计算机视觉。Transformer通过使用多头注意力机制使信息在不同位置流动,并具有捕捉长期依赖关系的出色能力。到目前为止,研究人员已经提出各种变体来提高Transformer的性能。例如,普通的R-transformer使用绝对位置表示来编码位置信息,这限制Transformer捕捉位置序列信息和局部结构的能力。Wang等人提出R-Transformer来解决普通的Transformer的上述限制。R-Transformer使用局部递归神经网络,简称LocalRNN,来明确地捕捉序列的局部结构和位置信息。由于其在序列中的出色表现,研究人员已将R-Transformer用于许多领域的任务中(如文本分类,图像分割,语音识别,语音合成)。在研究中引入R-Transformer,希望LocalRNN能够有效地捕捉所有函数代码行的局部结构和位置信息。同时,多头注意力能捕捉到函数中所有代码行的长期依赖关系。
R-Transformer由多个相同的层组成。每层有三个组成部分,分别是LocalRNN、多头注意力网络、位置前馈网络。三个组成部分的详细介绍如下。
(1)LocalRNN
R-Transformer使用一个循环神经网络(RNN)来建模长序列中的局部连续性短序列。这里RNN可以是任何RNN单元(如LSTM,GRU)。给定一个长度为L的长输入序列(x1,x2,...,xL),LocalRNN会处理一个长度为M的局部短序列xt-(M-1),xt-(M-2),…,xt(1≤t≤N)并输出M个隐藏状态。把最后一个隐藏状态ht作为这个局部短序列的表示。
ht=LocalRNN(xt-M-1,xt-M-2,…,xt)
在每个时间步中,LocalRNN从长度为M的局部短序列中提取局部信息,该短序列结束于位置xk(1≤k≤L)。在输入序列的起始位置之前填充(M-1)个位置。因此,随着窗口在输入序列中的滑动,LocalRNN不断提取窗口中的短序列信息,最后输出一系列的隐藏表示。此外,逐一的滑动操作使这些隐藏表示自然地包含输入的位置信息。
h1,h2,…,hL=LocalRNN(x1,x2,…,xL)
(2)多头注意力网络
在多头注意力网络层中使用的注意力函数是"放缩点积注意力"。假定多头注意力的输入是可以按如下公式计算放缩点积注意力。
Q=HWQ
K=HWK
V=HWV
其中投影矩阵
在多头注意力函数中,在每个查询、键和值投影版本上并行应用注意力函数,并将它们拼接起来以得到最终输出。
MultiHead(H)=Concat(head1,head2,…,headh)WO
headi=Attention(Q,K,V)
Q=HWi Q
K=HWi K
V=HWi V
其中投影矩阵
(3)位置前馈网络
一个全连接前馈网络由两个全连接层组成,中间是RELU激活函数。
FFN(x)=W2 RELU(W1x+b1)+b2
采用Add&Norm(即残差连接和归一化)来连接这三个组成部分。让子层是三个组成部分中的一个。Add&Norm的计算方法是:
x+Sublayer(LayerNorm(x))
LocalRNN缓解Transformer在建立序列信息模型方面的问题。此外,研究人员还提出将LSTM和Transformer结合来整合这两种模型的能力。在本文中,也结合LSTM和Transformer来进行SDP。如图3所示,增加一个并行的GlobalRNN来建模输入中的全局顺序结构。
g1,g2,…,gL=GlobalRNN(x1,x2,…,xL)
在的模型中,LocalRNN负责对局部特征进行建模并获得输入中的位置信息。GlobalRNN负责提取输入的全局顺序结构。在第一个子层中用GlobalRNN代替跳跃连接,具体如下。
seq(y)=seq(g)+LocalRNN(LayerNorm(seq(x)))
其中seq(g)表示g1,g2,…,gL。
图4显示DP-Tramo模型的整体架构。在使用改进的R-Transformer提取输入的语法和语义特征后,依次使用一层Bi-GRU网络、一层LSTM网络和一层Dense网络来预测代码行正确的概率。
改进后的R-Transformer的细节如下:
GlobalRNN是一个有48个节点的Bi-LSTM层。Bi-LSTM层中dropout和recurrent参数值分别为0.25和0.1。
LocalRNN是一个由48个节点组成的Bi-GRU层,且该Bi-GRU层使用ReLU激活函数。窗口大小W为3。
网络block的数量N是2,多头注意力中多头数量h是8。
其他网络层细节如下:
Bi-GRU层有150个节点,且其使用ReLU激活函数。
LSTM层有150个节点,其dropout值为0.2。
全连接层有2个输出节点,这两个节点的输出输入Softmax后得到最终输出。
步骤104:使用代价敏感学习技术处理类别的不平衡。
训练数据集总共包含2,356,458行代码。然而,其中只有12.4%(292,064行)被标记为缺陷。因此,数据集是严重不平衡的。使用成本敏感型学习来处理类的不平衡。在训练阶段,在损失函数中给少数类(脆弱的缺陷类)更大的权重,如下所示。
其中yi(i=0,1)表示真实类别,是模型的输出概率分布,wi(i=0,1)是给类别i的权重。
步骤104:使用标签平滑技术来增强模型泛化能力。
标签平滑是神经网络的一个有效的正则化工具。研究者已经在各个领域使用标签平滑,包括知识蒸馏、文本挖掘、图像分类、语音识别和语义分割。标签平滑是一种通过估计训练期间标签损失的边际化效应来正则化分类器层的机制。它可以提高模型的泛化能力和适应性。使用标签平滑来防止DP-Tramo过于自信地预测结果,以提高缺陷预测性能。标签被设置为:
其中yi′(i=0,1)是标签平滑后的标签值,ε是一个平滑参数。在标签平滑的情况下,如下计算损失:
进行实验来评估DP-Tramo的性能,相关步骤如下:
(1)实验设置
Code4Bench包含许多由不同用户编写的程序。每个程序都有多个版本,包括错误和正确的版本。错误版本还指出缺陷代码行的位置。从Code4Bench中选择119,989个程序构建一个包含2,356,458条代码行的数据集D,其中292,064条是有缺陷的。
使用Clang 13.0.1来提取每个程序的AST,然后分析AST得到每个代码行的32个语句级静态度量。为得到每一行的token序列,使用PLY 3.11的词法分析函数。使用Python3.8、TensorFlow 2.4.0和scikit-learn 1.0.2来建立DP-Tramo学习模型。在一台运行Ubuntu21.04的服务器上进行实验,该服务器配备2.90GHz的英特尔i7-10700处理器、16GB内存以及一张NVIDIA GeForce GTX 2080Ti显卡。
在实验中,还考虑准确度邻域的概念。在数据集中,如果有一条真正的错误代码行离pij最多只有a行(即在pi(j-a)和pi(j+a)之间),那么该代码行pij被标记为有缺陷。对于a=2和a=4的情况,分别对数据集进行10折交叉验证。在的服务器上进行一次10折交叉验证大约需要5天。表5显示该模型的主要参数设置。
表5
(2)评估指标
使用四个指标:准确率、精确率、召回率和F-measure来评估DP-Tramo。把有缺陷的代码作为一个阳性样本。在的任务中,真阴性(TN)代表模型预测为无缺陷的正确代码行的数量。假阳性(FP)指的是模型预测为有缺陷的正确代码行的数量。假阴性(FN)指模型预测为无缺陷的错误代码行的数量。真阳性(TP)表示模型预测为有缺陷的错误代码行的数量。
按如下公式计算准确率、精确率、召回率和F-measure。
(3)基线方法
将DP-Tramo与下列基线方法进行比较:
1)SLDeep:基于LSTM的语句级SDP方法。使用与SLDeep相同的数据集和特征集。
2)DP-AGL:基于Bi-LSTM和Bi-GRU的语句级SDP方法。原论文中DP-AGL优于SLDeep。但发现,原论文中的结果是不一致的。
3)DP-AGL*:对DP-AGL的复现版本。
重新实现DP-AGL,原因如下。首先,在DP-AGL的原始论文中准确度邻域等于4的实验结果中,由召回率和精确率结果计算的F-Measure不等于原始论文中表4给出的F-Measure。第二,在准确度邻域等于2的情况下,DP-AGL在测试集上的平均F-Measure比训练集上的平均F-Measure高出近4%(见原始论文中的表5和表6)。
此类问题在DP-AGL的原始论文中并未得到解释,所以申请人重新实现DP-AGL,并评估它。重新实现的DP-AGL*的性能优于SLDeep,但没有达到原始论文中报告的最初结果。在表格中列出DP-AGL的初始结果,以便读者可以识别其不一致性。在的评估中,使用重新实现的DP-AGL*作为基线。
(4)实验结果
表6和7显示DP-Tramo在准确度邻域分别等于4和2时测试阶段的实验结果。两个表中Average行代表该模型的10折性能指标的平均值。当准确度邻域等于4时,DP-Tramo在召回率、精确率、准确率和F-measure上的平均性能分别为0.949、0.602、0.734和0.737。当准确度邻域等于2时,DP-Tramo在召回率、精确率、准确率和F-measure上的平均表现分别为0.896、0.442、0.629和0.592。可以看到,DP-Tramo的F-measure分别比基线方法高出近1.2%和0.8%,同时保持相对较高的召回率和精确率。
表6
/>
表7
进行一项消融研究以研究改进的R-Transformer和标签平滑的效果。当准确度邻域为2和4时,分别进行10折交叉验证比较普通的R-Transformer、不带标签平滑的改进的R-Transformer和DP-Tramo。表8和表9分别显示准确度邻域等于4和2时的平均结果。
表8
表9
可以看到,当准确度邻域为4时,vanilla R-Transformer在F-measure上比基线方法高0.6%,改进的R-Transformer比vanilla R-Transformer高0.2%。DP-Tramo比改进的R-Transformer高0.4%。当准确度邻域为2时,vanilla R-Transformer比基线方法高0.4%。改进的R-Transformer的F-measure值与vanilla R-Transformer相同。DP-Tramo在F-measure上比改进的R-Transformer高0.4%。
这些结果表明,对R-Transformer的改进和标签平滑是有效的。从以下几个方面解释方法的优越性。
(1)R-Transformer
基线方法使用LSTM/Bi-LSTM来获得函数中所有代码行的全局信息。除使用多头注意力来获得全局信息外,普通R-Transformer还使用LocalRNN来学习函数所有代码行的局部结构和位置信息。在实践中,为每个代码行构建一个大小为M的局部窗口,这样局部窗口就包含M个连续的代码行,并且串口在当前代码行处结束。因此,每个局部窗口中的代码行形成一个短序列。这样一来,学习到的潜伏表示就明确包含函数的每个局部区域的局部结构信息。此外,由于局部窗口是沿着序列一步步滑动的,可以获得函数的所有代码行的位置信息。因此,vanilla R-Transformer可以超越基线方法。
(2)Improved R-Transformer
与vanilla R-Transformer相比,改进后的R-Transformer在LocalRNN之外增加GlobalRNN。应用GlobalRNN来提取函数中所有代码行的全局序列信息。在这之后,多头注意力可以根据函数行的全局和局部信息的结合,得到每行代码更准确的分数。改进的R-Transformer结合GlobalRNN和R-Transformer的优点,取得最佳效果。
(3)DP-Tramo
一般来说学到的模型可能会过度拟合训练数据集。DP-Tramo中的标签平滑使用真实标签分布和均匀分布的加权平均。这样一来,标签平滑后的标签分布就相当于在真实分布中加入噪声。这增强DP-Tramo的泛化能力和适应性。
下面从局限性和对有效性的威胁两方面对的方法进行讨论:
(1)局限性
在性能指标中,F-Measure同时考虑召回率和精确率,是一个比单一召回率或精确率更平衡的衡量标准。发现,与基线方法相比,DP-Tramo在召回率方面稍弱,而在精率和准确率方面则较强。认为,这种限制在实践中可以得到缓解。在软件工程活动中,SDP方法的结果通常被用来作为后续测试活动的指导。由于模糊测试中引入的随机性,许多测试输入可以覆盖其他未被SDP模型报告为缺陷的部分。认为,的模型可以实现更高的F-Measure,并在现实世界的测试活动中提供更精确的指导。
(2)对有效性的威胁
对于32个句子级代码指标,没有考虑数据冗余和特征选择。有研究指出,如果能确定一组基本的指标,并专注于使用它们来预测缺陷,与处理大量的特征集相比,将是很实用和容易的。不考虑特征选择有两个主要原因。首先,假设改进后的R-Transformer可以学习并过滤多余的特征。第二,忽略特征选择可以简化任务预处理。由于资源限制,没有对DP-Tramo的超参数进行搜索。一个完整的10折交叉验证在的服务器上需要5天时间。在未来将进行更广泛的实验。
在本发明中,提出一个新的学习模型DP-Tramo来提高语句级软件缺陷预测的性能。提出一个改进的R-Transformer,并在训练中使用标签平滑和加权损失。在Code4Bench的数万个程序中评估DP-Tramo。当准确度邻域为4和2时,DP-Tramo的F-measure比最先进的基线方法分别高出1.2%和0.8%。消融研究表明,改进的R-Transformer和标签平滑有利于模型
在未来,可以在以下方面扩展这项工作。首先,可以探索更多的指标来描述代码的特征,并对静态代码的指标进行特征筛选。其次,可以对token进行更详细的处理。最后,可以在其他基准、编程语言和真实世界的程序上评估DP-Tramo。
以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种基于改进的R-Transformer的语句级软件缺陷预测方法,其特征在于,包括:
利用32个语句级代码指标对每个代码行提取静态代码特征;
使用One-Hot编码对每行代码提取token特征;
构建DP-Tramo缺陷预测模型对软件缺陷进行语句级别的预测;
使用代价敏感学习技术处理类别的不平衡;
使用标签平滑技术来增强模型泛化能力。
2.根据权利要求1所述的基于改进的R-Transformer的语句级软件缺陷预测方法,其特征在于,该方法还包括对该DP-Tramo缺陷预测模型进行训练测试的步骤,具体包括:
对数据集进行清洗,排除空行等无作用代码行;
对清洗后的数据集中的每行代码打上标签,考虑一个准确度领域的概念,即对于某个缺陷行上下N行,都将其标签设为1,分类标签0表示该代码行是正常的,分类标签1表示该代码行是有缺陷的,将处理过的数据集按照9:1的比例划分为训练集和测试集;
采用十折交叉验证来测试DP-Tramo缺陷预测模型,在每一折中,使用训练集对DP-Tramo缺陷预测模型进行训练,并对模型参数进行调整,使用测试集对DP-Tramo缺陷预测模型进行缺陷预测,并利用评估指标进行验证;
使用消融实验验证DP-Tramo缺陷预测模型中对R-Transformer的改进和标签平滑技术的作用。
3.根据权利要求1所述的基于改进的R-Transformer的语句级软件缺陷预测方法,其特征在于,对软件代码进行语句级别缺陷预测的具体过程为:
对数据集中的每行代码提取静态特征及token特征,并将两者拼接在一起作为DP-Tramo缺陷预测模型的输入向量;
对数据集标签矩阵使用标签平滑技术进行处理,得到DP-Tramo缺陷预测模型的标签向量;
将输入向量送入DP-Tramo缺陷预测模型,通过R-Transformer来学习每行代码的语法和语义特征,经过LSTM层和全连接层来对每行代码进行预测,最后利用Softmax函数输出每行代码的分类结果;
对分类结果结合标签向量使用代价敏感学习技术,解决样本不平衡问题。
4.根据权利要求1所述的基于改进的R-Transformer的语句级软件缺陷预测方法,其特征在于,32个语句级静态指标反映每行代码的内容和复杂度,在这32个指标中,有10个外部指标可以捕捉到代码的背景复杂度,其他22个内部指标估计代码语句本身所包含的复杂度,使用Clang 13.0.1得到每个程序的抽象语法树(AST),基于抽象语法树,可以通过相关的节点标签和行号来计算一个代码语句的度量。
5.根据权利要求1所述的基于改进的R-Transformer的语句级软件缺陷预测方法,其特征在于,使用PLY 3.11库来解析程序,得到每一行的token序列,每个token被表示为(t,v)对,其中t是token类型,v是token值,t、v均采用One-Hot编码表示,在资源允许的最大限度内,每行代码选择相同的token数目Mt,每行代码的token特征表示由Mt个token对拼接而成。
6.根据权利要求1所述的基于改进的R-Transformer的语句级软件缺陷预测方法,其特征在于,DP-Tramo缺陷预测模型具体包括:
改进的R-Transformer层,使用改进的R-Transformer来学习每行代码的语法和语义信息;
LSTM层、全连接层和分类层,使用一个Bi-GRU层、一个LSTM层、一个全连接层来预测每行代码的缺陷可能性,使用Softmax函数来将输出值转换为范围在[0,1]且和为1的缺陷概率分布。
7.根据权利要求1所述的基于改进的R-Transformer的语句级软件缺陷预测方法,其特征在于,采用的代价敏感学技术是通过让DP-Tramo缺陷预测模型的损失函数对正样本(缺陷代码行)和负样本(正常代码行)分配不同的损失权重,以达到最小的损失,从而来解决样本失衡问题,使用标签平滑法来防止DP-Tramo缺陷预测模型过于自信地预测结果,从而增加模型的泛化能力,采用的平滑系数是0.1。
8.根据权利要求2所述的基于改进的R-Transformer的语句级软件缺陷预测方法,其特征在于,评估指标包括:准确率、精确率、召回率和F1值,准确率代表分类后预测正确的结果占总样本的比例,精确率代表在所有被预测为正的样本中实际为正样本的概率,召回率代表在实际为正的样本中被预测为正样本的概率,F1值代表精确率和召回率的加权调和平均值,因为使用十折交叉验证来验证DP-Tramo缺陷预测模型性能,的评估指标最终算的是十折的平均值。
9.根据权利要求2所述的基于改进的R-Transformer的语句级软件缺陷预测方法,其特征在于,进行消融实验以研究改进的R-Transformer和标签平滑的效果。当准确度邻域分别为2和4时,使用十折交叉验证比较普通的R-Transformer、没有标签平滑的改进的R-Transformer和DP-Tramo缺陷预测模型。
10.根据权利要求6所述的基于改进的R-Transformer的语句级软件缺陷预测方法,其特征在于,普通的R-Transformer层由多个相同的网络层组成,每层有三个组成部分:
LocalRNN层,使用一个循环神经网络(RNN)来建模长序列中的局部连续短序列,这里RNN可以是任何RNN单元(如LSTM,GRU);
多头注意网络层,多个独立的放缩点积注意力计算;
位置前馈网络层,由两个全连接层组成,中间是RELU激活;
普通的R-Transformer层在每一个网络层使用Add&Norm(即残差连接和归一化)来连接这三个组成部分。
对R-Transformer的改进在于增加一个GlobalRNN来建模输入中的全局序列结构,在每个网络层的第一个组成部分用GlobalRNN替换Add&Norm中的跳跃连接,即该层输出最终可表示为以下形式:
GlobalRNN(inputs)+LocalRNN(LayerNorm(inputs))
LocalRNN层使用Bi-GRU网络,GlobalRNN层使用Bi-LSTM网络。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311592615.3A CN117591913A (zh) | 2023-11-25 | 2023-11-25 | 基于改进的R-Transformer的语句级软件缺陷预测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311592615.3A CN117591913A (zh) | 2023-11-25 | 2023-11-25 | 基于改进的R-Transformer的语句级软件缺陷预测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117591913A true CN117591913A (zh) | 2024-02-23 |
Family
ID=89917927
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311592615.3A Pending CN117591913A (zh) | 2023-11-25 | 2023-11-25 | 基于改进的R-Transformer的语句级软件缺陷预测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117591913A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117851909A (zh) * | 2024-03-05 | 2024-04-09 | 深圳市雅乐实业有限公司 | 一种基于跳跃连接的多循环决策意图识别系统及方法 |
-
2023
- 2023-11-25 CN CN202311592615.3A patent/CN117591913A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117851909A (zh) * | 2024-03-05 | 2024-04-09 | 深圳市雅乐实业有限公司 | 一种基于跳跃连接的多循环决策意图识别系统及方法 |
CN117851909B (zh) * | 2024-03-05 | 2024-05-31 | 深圳市雅乐实业有限公司 | 一种基于跳跃连接的多循环决策意图识别系统及方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Buratti et al. | Exploring software naturalness through neural language models | |
Bui et al. | Infercode: Self-supervised learning of code representations by predicting subtrees | |
Dam et al. | A deep tree-based model for software defect prediction | |
Shin et al. | Improving neural program synthesis with inferred execution traces | |
Rahman et al. | A neural network based intelligent support model for program code completion | |
CN116049831A (zh) | 一种基于静态分析和动态分析的软件漏洞检测方法 | |
Liu et al. | Modeling programs hierarchically with stack-augmented LSTM | |
Garg et al. | Cerebro: Static subsuming mutant selection | |
CN117591913A (zh) | 基于改进的R-Transformer的语句级软件缺陷预测方法 | |
Wang et al. | Learning blended, precise semantic program embeddings | |
CN113900923A (zh) | 一种跨指令集架构的二进制函数相似性检查系统及方法 | |
CN116305158A (zh) | 一种基于切片代码依赖图语义学习的漏洞识别方法 | |
White et al. | Reassert: Deep learning for assert generation | |
Xu et al. | Dsmith: Compiler fuzzing through generative deep learning model with attention | |
Yu et al. | Learning the relation between code features and code transforms with structured prediction | |
Phung et al. | Error-type—A novel set of software metrics for software fault prediction | |
Meng et al. | Template-based neural program repair | |
CN114385491A (zh) | 一种基于深度学习的js转译器缺陷检测方法 | |
Gruner et al. | Cross-domain evaluation of a deep learning-based type inference system | |
Yang et al. | Locating faulty methods with a mixed RNN and attention model | |
Liu et al. | Adaptivepaste: Code adaptation through learning semantics-aware variable usage representations | |
CN115495085A (zh) | 一种基于深度学习细粒度代码模板的生成方法及装置 | |
Salman | Test case generation from specifications using natural language processing | |
CN113076089B (zh) | 一种基于对象类型的api补全方法 | |
Qi et al. | Dynamically relative position encoding-based transformer for automatic code edit |
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 |