CN112597063A - 缺陷代码定位的方法、装置以及存储介质 - Google Patents
缺陷代码定位的方法、装置以及存储介质 Download PDFInfo
- Publication number
- CN112597063A CN112597063A CN202110213091.7A CN202110213091A CN112597063A CN 112597063 A CN112597063 A CN 112597063A CN 202110213091 A CN202110213091 A CN 202110213091A CN 112597063 A CN112597063 A CN 112597063A
- Authority
- CN
- China
- Prior art keywords
- defect
- code
- source file
- code source
- nodes
- 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.)
- Granted
Links
- 230000007547 defect Effects 0.000 title claims abstract description 210
- 238000000034 method Methods 0.000 title claims abstract description 37
- 239000013598 vector Substances 0.000 claims description 69
- 230000006870 function Effects 0.000 claims description 57
- 238000010586 diagram Methods 0.000 claims description 28
- 238000004364 calculation method Methods 0.000 claims description 22
- 238000013528 artificial neural network Methods 0.000 claims description 14
- 238000013527 convolutional neural network Methods 0.000 claims description 13
- 239000011159 matrix material Substances 0.000 claims description 12
- 238000004458 analytical method Methods 0.000 claims description 8
- 238000000605 extraction Methods 0.000 claims description 8
- 239000000284 extract Substances 0.000 claims description 5
- 238000012216 screening Methods 0.000 claims description 5
- 238000004590 computer program Methods 0.000 claims description 3
- 238000010276 construction Methods 0.000 claims description 2
- 238000005457 optimization Methods 0.000 claims description 2
- 230000004807 localization Effects 0.000 claims 1
- 238000010801 machine learning Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000013135 deep learning Methods 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 230000008439 repair process Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 239000000370 acceptor Substances 0.000 description 1
- 230000004931 aggregating effect Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000001228 spectrum Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/22—Matching criteria, e.g. proximity measures
-
- 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
-
- 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/049—Temporal neural networks, e.g. delay elements, oscillating neurons or pulsed inputs
-
- 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/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Software Systems (AREA)
- Evolutionary Computation (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Biophysics (AREA)
- Mathematical Physics (AREA)
- Biomedical Technology (AREA)
- Molecular Biology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例涉及软件维护领域,公开了一种缺陷代码定位的方法、装置以及存储介质,包括:S101:缺陷报告及对应源文件抽取;S102:计算代码源文件的表示;S103:计算缺陷报告的描述文本的表示,S104:计算缺陷报告和代码文件的相似度,得到缺陷报告可能对应的代码源文件;软件维护人员可以使用本发明所描述的方法辅助定位缺陷报告所描述的缺陷对应的代码源文件,提高效率。
Description
技术领域
本发明涉及软件维护领域,具体为缺陷代码定位的方法、装置以及存储介质。
背景技术
(一)图神经网络相关技术
近年来,机器学习和神经网络在各个领域中都有很多成功的应用,部分归因于深度学习从欧式空间数据中提取潜在表示的有效性。但是很多实际的应用场景中的数据是从非欧式空间生成的,同样需要进行有效的分析。图数据的不规则性对现有机器学习算法提出了重大挑战,一些重要的操作(比如卷积)不再适合直接用于图域。此外现有机器学习算法的核心假设是实例彼此独立,而此假设在图结构中不再适用。在深度学习的成功推动下,研究人员借鉴了卷积网络、循环网络、深度自动编码器的思想,定义和设计了用于处理图数据的神经网络结构——图神经网络。
研究人员提出了基于频谱的图卷积网络,图被假定为无向图,利用正则化的图拉普拉斯矩阵来表示该无向图。根据正则化图拉普拉斯矩阵的对称半正定性质,可以将其进行特征分解得到一组正交基,从而可以类似地定义出图的卷积操作。另有研究人员提出了图注意力网络,它是一种基于空间的图卷积网络,其注意力机制是在聚合特征信息时将注意力机制用于确定节点邻域的权重。此外,还有人提出了图自动编码器模型,这是一类图嵌入方法,其目的是利用神经网络结构将图的顶点表示为低维向量,典型的解决方法是利用多层感知机作为编码器来获取节点嵌入,其中解码器重建节点的邻域统计信息,如PPMI或一阶和二阶近似值。
(二)缺陷报告代码定位相关技术
缺陷报告是软件开发人员或用户在软件未能按照预期运行或未能遵循***的技术需求时记录的自然语言文档。缺陷报告被提交到软件的维护团队,软件维护团队校验后将阅读这些文字描述来定位源代码中可能存在缺陷的源文件。对于大型软件或发展中的软件来说,维护团队将大量缺陷报告定位至潜在缺陷源文件中的成本庞大。缺陷报告代码定位技术旨在将给定的缺陷报告自动定位至可能存在缺陷的代码源文件,从而减轻软件维护团队的压力。
一些研究人员将源代码看做自然语言,将源代码和缺陷报告都以“词袋”模型来进行建模,计算特征表示,通过计算两者的相似度来进行定位。例如,利用文档主题生成模型(LDA)来表示软件代码和缺陷报告,并计算它们之间的相似度,将缺陷报告定位至可能出现错误的代码源文件中。或者,利用向量空间模型来表示缺陷报告和软件代码,同样根据它们之间的相似度将缺陷报告定位至潜在的代码源文件中。或者,利用修正的向量空间模型,在计算缺陷报告和源代码之间相似度的基础上,利用相似的历史缺陷报告对应的缺陷代码源文件来提高定位结果。或者,利用自编码器来学习与缺陷报告和源文件中经常出现的术语相关联的特征,以增强“词袋”特征。
这一类方法利用“词袋”模型来将代码、自然语言在相同词汇特征空间中关联起来,但是,忽略了将编程语言调整为自然语言时损失的程序结构信息。程序结构指定了不同的语句如何彼此交互以完成某些功能,这为程序功能提供了除了词汇语义之外的其他语义。因此为了更好地表示程序功能语义,有研究人员提出了更好从代码中提取词汇语义特征和结构特征的模型,并将缺陷报告和代码源文件中的特征嵌入在一起。该方法认为代码中的最小语义单元为一个语句,利用卷积神经网络得到代码中的每一个语句的表示,再根据这些语句的结构特征,利用卷积神经网络或长短期记忆网络得到整个代码的表示。对于缺陷报告的自然语言特征,同样利用卷积神经网络获取。在得到代码和缺陷报告的表示后利用全连接神经网络将两者关联起来判断相关度。
也存在其它进行缺陷报告代码定位的方法。比如利用缺陷报告中的“元数据”,如版本、硬件、受理人、文件路径等信息结合缺陷的文字描述来辅助定位任务。
这些方法都忽略了缺陷报告定位往往是在同一软件项目中,在获取代码的特征时没有考虑代码文件之间的相互关联,进而忽略了代码的全局信息。然而在代码开发的过程中,当一个函数出现了错误,调用他的函数往往也会存在错误。
发明内容
本发明实施方式的目的在于提供缺陷代码定位的方法,能够自动定位软件项目中可能存在缺陷报告中所描述缺陷,包括如下步骤:
S101,缺陷报告及对应源文件抽取,抽取软件的缺陷追踪***中已修复的缺陷报告,提取出与缺陷报告相关的提交记录,从而抽取出每个缺陷报告对应的存在缺陷的代码源文件;
S102,计算代码源文件的向量表示,将软件的代码源文件进行分析,利用分析结果构建代码源文件、代码片段的关联图,再利用图神经网络计算每个文件代码的最终向量表示c;
S103,计算缺陷报告的描述文本的向量表示r;
S104,构建预测模型,计算缺陷报告和每个代码源文件的相似度,对S102、S103中计算得到的代码源文件和缺陷报告的描述文字的向量表示进行融合,并计算相关度,从而预测得到缺陷报告可能对应的代码源文件。
优选地,所述步骤S101包括:
S1011,选出软件缺陷追踪***中状态为已修复的缺陷报告,提取出这些缺陷报告中的缺陷编号、缺陷的概括信息、缺陷的具体描述信息;
S1012,对每一个缺陷报告,从软件的版本控制***的提交记录中筛选出描述信息中提及该缺陷编号并包含预设关键词的记录,所述记录中涉及的被修复的代码文件即为该缺陷所在的代码源文件。
优选地,所述步骤S102包括:
S1021,利用Eclipse JDT工具对项目中的代码源文件进行分析,得到程序的抽象语法树AST,再根据抽象语法树对代码源文件构建代码及代码文件的关联图G=(E,V), 其中E代表边集合,V代表节点集合,关联图中共有三种节点:代码源文件节点、类节点、函数节点;
S1023,用向量来表示关联图G的所有节点V,并对这些向量用进行初始化,对于代码源文件节点和类节点直接根据正态分布生成随机向量作为初始化,对于函数节点则利用LS-CNN模型对函数体token序列进行编码初始化,得到整个函数的特征表示;
S1024,利用图卷积网络GCN计算关联图G的节点向量表示,代码源文件节点的向量表示则为每个代码源文件的最终向量表示c。
优选地,所述步骤S104包括:
S1041,将S102、S103中的得到的代码源文件和缺陷报告的描述文本的表示进行向量拼接,通过全连接层,得到两者融合后的向量信息特征,使用softmax计算出该缺陷报告与该代码源文件相对应的概率值,根据概率值进行预测,若该概率值大于阈值0.5则表示代码源文件可能存在与该缺陷报告相关的错误,否则不存在;
S1042,所述预测模型的目标函数为, 其中为模型对缺陷报告和代码源文件的预测结果,其中和为S102、S103中得出的向量表示,表示缺陷报告和代码源文件是否相关,为损失函数,这里采用交叉熵损失函数,为正则化项,为其系数。
本发明的实施方式还提供了缺陷代码定位的装置,包括如下模块:
缺陷报告及对应源文件抽取模块:抽取软件的缺陷追踪***中已修复的缺陷报告,提取出与缺陷报告相关的提交记录,从而抽取出每个缺陷报告对应的存在缺陷的代码源文件;
代码源文件的表示计算模块:将软件的代码源文件进行分析,利用分析结果构建代码源文件、代码片段的关联图,再利用图神经网络计算每个文件代码的最终向量表示c;
缺陷报告的描述文本的表示计算模块:计算缺陷报告的描述文本的向量表示r;
缺陷报告和代码文件的相似度计算模块:构建预测模型,计算缺陷报告和每个代码源文件的相似度,对代码源文件的表示计算模块、缺陷报告的描述文本的表示计算模块中计算得到的代码源文件和缺陷报告的描述文字的向量表示进行融合,并计算相关度,从而预测得到缺陷报告可能对应的代码源文件。
优选地,所述缺陷报告及对应源文件抽取模块包括:
缺陷报告提取子模块,选出软件缺陷追踪***中状态为已修复的缺陷报告,提取出这些缺陷报告中的缺陷编号、缺陷的概括信息、缺陷的具体描述信息;
对应源文件抽取子模块,对每一个缺陷报告,从软件的版本控制***的提交记录中筛选出描述信息中提及该缺陷编号并包含预设关键词的记录,所述记录中涉及的被修复的代码文件即为该缺陷所在的代码源文件。
优选地,所述代码源文件的表示计算模块包括:
关联图构建子模块,利用Eclipse JDT工具对项目中的代码源文件进行分析,得到程序的抽象语法树AST,再根据抽象语法树对代码源文件构建代码及代码文件的关联图G=(E,V), 其中E代表边集合,V代表节点集合,关联图中共有三种节点:代码源文件节点、类节点、函数节点;
节点向量表示子模块,用向量来表示关联图G的所有节点V,并对这些向量用进行初始化,对于代码源文件节点和类节点直接根据正态分布生成随机向量作为初始化,对于函数节点则利用LS-CNN模型对函数体token序列进行编码初始化,得到整个函数的特征表示;
最终向量表示子模块,利用图卷积网络GCN计算关联图G的节点向量表示,代码源文件节点的向量表示则为每个代码源文件的最终向量表示c。
优选地,所述缺陷报告和代码文件的相似度计算模块包括:
概率预测子模块,将代码源文件的表示计算模块、缺陷报告的描述文本的表示计算模块中得到的代码源文件和缺陷报告的描述文本的表示进行向量拼接,通过全连接层,得到两者融合后的向量信息特征,使用softmax计算出该缺陷报告与该代码源文件相对应的概率值,根据概率值进行预测,若该概率值大于阈值0.5则表示代码源文件可能存在与该缺陷报告相关的错误,否则不存在;
模型优化子模块,所述预测模型的目标函数为, 其中为模型对缺陷报告和代码源文件的预测结果,其中和为S102、S103中得出的向量表示,表示缺陷报告和代码源文件是否相关,为损失函数,这里采用交叉熵损失函数,为正则化项,为其系数。
本发明的实施方式还提供了一种电子设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如前所述的缺陷报告代码定位的方法。
本发明的实施方式还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现如前所述的缺陷报告代码定位的方法。
本发明的有益效果,相对于现有技术,本发明考虑到缺陷报告定位往往是在同一软件项目中,在获取代码的特征时考虑了代码文件之间的相互关联以及代码的全局信息,构建了代码源文件、代码片段的关联图,再利用图神经网络计算每个代码文件的最终表示,能够高效的对缺陷报告所描述的缺陷对应的代码源文件进行定位,软件维护人员可以使用本发明所描述的方法辅助定位缺陷报告所描述的缺陷对应的代码源文件,提高效率。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1为本发明所描述方法的流程示意图。其中,GCN表示对代码关联图的图卷积模型,Bow-CNN为对缺陷报告的文本描述信息的卷积模型。
图2为eclipse的一条缺陷报告示例。第一行为缺陷编号以及缺陷的总结信息,紧接着的是缺陷报告的“元数据”信息,比如状态、产品名、版本、硬件、重要性等信息,最后一部分是缺陷的具体描述信息。
图3为根据缺陷代码构造得到的关联图。其中原型节点表示代码源文件,五边形节点表示类,矩形节点表示函数,不同类型的边同样代表不同种类的关系,如虚线表示类之间的继承关系,实线表示函数之间的调用关系,箭头边表示包含关系。
图4为图卷积网络示意图。关联图经过图卷积以后得到图中节点的表示,再从中提取出所有文件节点的表示。
图5为对关联图中函数节点的初始化计算过程。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实施方式进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施方式中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本申请所要求保护的技术方案。以下各个实施例的划分是为了描述方便,不应对本发明的具体实现方式构成任何限定,各个实施例在不矛盾的前提下可以相互结合相互引用。
下面结合附图和特定的具体实例对本发明做以详细说明。
本发明实施例提供缺陷代码定位的方法,包括如下步骤:
S101:缺陷报告及对应源文件抽取。所有开发人员和用户向软件的缺陷追踪***提交缺陷报告,软件维护人员对这些缺陷报告进行校验、修正等,在***中不断更新记录状态。该步骤抽取缺陷追踪***中已修复的缺陷报告,再通过该软件的版本控制***的提交记录,提取出与缺陷报告相关的提交记录,从而抽取出每个缺陷报告对应的存在缺陷的代码源文件。具体描述如下:
S1011. 选出软件缺陷追踪***中状态为已修复的缺陷报告,提取出这些缺陷报告中的缺陷编号、缺陷的概括信息、缺陷的具体描述信息。
S1012. 对每一个缺陷报告,从软件的版本控制***的提交记录(git记录)中筛选出描述信息中提及该缺陷编号并包含预设关键词的记录,所述预设关键词为“error,bug,fix,issue,mistake,incorrect,fault,defect,flaw,type”,这些记录中涉及的被修复的代码文件则可被视为该缺陷所在的代码源文件。其中,git记录了修改的代码,表示这次提交修改了这些代码文件,并保存了修复前后的源代码,因此只需根据这些文件名,提取修复前的源代码,即可找到缺陷对应的源代码。
S102:计算S101中获得的缺陷对应的代码源文件的表示。该步骤将软件的代码源文件根据AST分析技术(Eclipse JDT工具)进行分析,利用分析结果构建代码源文件、代码片段的关联图,再利用图神经网络计算每个代码文件的最终表示。该步骤具体描述如下:
S1021. 利用Eclipse JDT工具对项目中的代码源文件进行分析,得到程序的抽象语法树(AST),再根据抽象语法树对代码源文件构建代码及代码文件的关联图G=(E,V), 其中E代表边集合,V代表节点集合,关联图中共有三种节点:代码源文件节点、类节点、函数节点。节点之间存在的关系(边)包括以下几种:“继承”(两个节点都为类节点,且两个类之间存在继承关系)、“调用”(两个节点都为函数节点,且两个函数之间存在调用关系)、“包含”(两个节点分别为类节点和函数节点,且该类包含该函数、两个节点分别为代码源文件节点和类节点,且该代码源文件包含该类)、“使用”(两个节点分别为函数节点和类节点,且该函数中使用了该类的变量或参数)。
S1022. 构建关联图G的邻接矩阵A,将三种节点之间的关系进行编号,任意两个节点之间若存在关系,则值为该关系的编号,否则为0。令1表示“调用”关系,2表示“使用”关系,3表示“包含”关系,如图3中的关联图对应的邻接矩阵A即为下表所示:
表1 邻接矩阵A
S1023. 用向量来表示关联图G的所有节点V,并对这些向量用进行初始化,对于代码源文件节点和类节点直接根据正态分布生成随机向量作为初始化,对于函数节点则利用LS-CNN模型对函数体token序列进行编码初始化:首先对代码进行分词,针对“驼峰式命名”的变量名进行分割,根据命名习惯将变量名分割成词语,保留更多的语义信息(如createArray分割为create array),并对每个词进行独热编码作为该词的向量表示,按照语句顺序排列,然后使用卷积神经网络(CNN)从函数中每条语句的所有词中提取出特征,参见图5中,通过卷积层和池化层输出得到函数的特征表示,再将每个语句的特征按顺序输入长短期记忆网络(LSTM),得到整个函数的特征表示。
S1024. 利用图卷积网络(GCN)计算关联图G的节点向量表示,具体采用两层的GCN网络计算图中节点的向量表示。图神经网络是利用一定的方法对节点进行描述,并经过不断的节点状态更新,得到具有包含邻居节点信息和图形拓扑结构特点的状态,最终将这些节点通过特定方法进行输出。计算方式如下所示:
式(1)表示节点状态的更新方式,式(2)表示对更新完的节点状态进行输出;
式中:f 是局部转换函数;g为局部输出函数;o表示输出结果;hv表示节点当前的嵌入化结果;Xv代表节点v的特征;XCO[v]表示对应节点v的边的属性;hne[v]表示节点v更新前的状态;Xne[v]表示节点v的邻居节点的特征。
式(1)、(2)均表示以一个节点为单位进行操作,当对所有的节点进行上述运算的时候,可以更加简洁的用式(3)、式(4)进行描述:
H=F(H,X) (3)
O=G(H,XN) (4)
式中:H表示所有节点的状态;O表示对所有的节点进行输出之后的结果;X表示边的特征; XN 分别表示所有节点的特征; F(⋅) 、 G(⋅) 分别表示全局转换函数与全局输出函数。由此可知,当对所有节点的状态进行从t至t+1轮更新时,可以表示为式(5):
Ht+1=F(Ht,X) (5)
代码源文件节点的表示则为每个代码源文件的最终向量表示c。
上述步骤获取代码的特征时考虑了代码文件之间的相互关联以及代码的全局信息,构建了代码源文件、代码片段的关联图,再利用图神经网络计算每个代码文件的最终表示,能够高效的对缺陷报告所描述的缺陷对应的代码源文件进行定位,软件维护人员可以使用本发明所描述的方法辅助定位缺陷报告所描述的缺陷对应的代码源文件,提高效率。
S103:计算缺陷报告的描述文本的表示。该步骤中利用卷积神经网络计算缺陷报告中的描述文本的特征。具体描述如下:
S1031. 参见图2,首先将缺陷报告中的总结信息和具体描述信息拼接起来,然后对其进行分词。缺陷报告中可能会直接使用代码中的变量名、类名、文件名等,因此同样针对“驼峰式命名”的词语进行分割,最后对每个词进行独热编码。
S1032. 使用bow-CNN模型对编码后的缺陷报告的描述文本进行计算得到向量特征r。
S104:构建预测模型,计算缺陷报告和每个代码源文件的相似度,该步骤对S102、S103中计算得到的代码源文件和缺陷报告的描述文字的向量表示进行融合,并计算相关度,从而预测得到缺陷报告可能对应的代码源文件。具体描述如下:
S1041. 将S102、S103中的得到的代码源文件和缺陷报告的描述文本的表示进行向量拼接,通过全连接层,得到两者融合后的向量信息特征,使用softmax计算出该缺陷报告与该代码源文件相对应的概率值,根据概率值进行预测,若该概率值大于阈值0.5则表示代码源文件可能存在与该缺陷报告相关的错误,否则不存在。
S1042. 整个模型的目标函数为, 其中为模型对缺陷报告和代码源文件的预测结果,也即表示步骤1中预测得到的代码源文件是否与该缺陷报告存在相关错误,其中和为S102、S103中得出的向量表示,表示缺陷报告和代码源文件是否相关,为损失函数,这里采用交叉熵损失函数,为正则化项,为其系数。所述损失函数计算损失从而进行模型参数的优化,可根据模型和分类场景来选择。
以图2为例,本发明一种实施方式实现过程如下:
1、抽取缺陷报告中的总结信息和具体描述信息,参见图2,从版本控制***中获取对应的缺陷代码源文件。
2、对项目代码源文件构建关联图,如图 3所示,按照程序代码的抽象语法树分析结果构造以代码源文件、类、函数作为节点的关联图。
3、初始化关联图中的函数节点,如图5所示。
4、计算关联图的节点表示,如图4所示,利用图卷积网络计算图节点的表示,并提取出代码源文件节点的表示。
5、计算相似度并进行预测,对缺陷报告的文字描述特征表示和代码源文件的特征表示进行融合,计算相似度预测缺陷报告是否与该源文件相关。
本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
Claims (10)
1.一种缺陷代码定位的方法,包括如下步骤:
S101,缺陷报告及对应源文件抽取,抽取软件的缺陷追踪***中已修复的缺陷报告,提取出与缺陷报告相关的提交记录,从而抽取出每个缺陷报告对应的存在缺陷的代码源文件;
S102,计算代码源文件的向量表示,将软件的代码源文件进行分析,利用分析结果构建代码源文件、代码片段的关联图,再利用图神经网络计算每个文件代码的最终向量表示c;
S103,计算缺陷报告的描述文本的向量表示r;
S104,构建预测模型,计算缺陷报告和每个代码源文件的相似度,对S102、S103中计算得到的代码源文件和缺陷报告的描述文字的向量表示进行融合,并计算相关度,从而预测得到缺陷报告可能对应的代码源文件。
2.根据权利要求1所述的缺陷代码定位的方法,其特征在于,所述步骤S101包括:
S1011,选出软件缺陷追踪***中状态为已修复的缺陷报告,提取出这些缺陷报告中的缺陷编号、缺陷的概括信息、缺陷的具体描述信息;
S1012,对每一个缺陷报告,从软件的版本控制***的提交记录中筛选出描述信息中提及该缺陷编号并包含预设关键词的记录,所述记录中涉及的被修复的代码文件即为该缺陷所在的代码源文件。
3.根据权利要求1所述的缺陷代码定位的方法,其特征在于,所述步骤S102包括:
S1021,利用Eclipse JDT工具对项目中的代码源文件进行分析,得到程序的抽象语法树AST,再根据抽象语法树对代码源文件构建代码及代码文件的关联图G=(E,V), 其中E代表边集合,V代表节点集合,关联图中共有三种节点:代码源文件节点、类节点、函数节点;
S1023,用向量来表示关联图G的所有节点V,并对这些向量用进行初始化,对于代码源文件节点和类节点直接根据正态分布生成随机向量作为初始化,对于函数节点则利用LS-CNN模型对函数体token序列进行编码初始化,得到整个函数的特征表示;
S1024,利用图卷积网络GCN计算关联图G的节点向量表示,代码源文件节点的向量表示则为每个代码源文件的最终向量表示c。
4.根据权利要求1所述的缺陷代码定位的方法,其特征在于,所述步骤S104包括:
S1041,将S102、S103中的得到的代码源文件和缺陷报告的描述文本的表示进行向量拼接,通过全连接层,得到两者融合后的向量信息特征,使用softmax计算出该缺陷报告与该代码源文件相对应的概率值,根据概率值进行预测,若该概率值大于阈值0.5则表示代码源文件可能存在与该缺陷报告相关的错误,否则不存在;
5.一种缺陷代码定位的装置,其特征在于,包括如下模块:
缺陷报告及对应源文件抽取模块:抽取软件的缺陷追踪***中已修复的缺陷报告,提取出与缺陷报告相关的提交记录,从而抽取出每个缺陷报告对应的存在缺陷的代码源文件;
代码源文件的表示计算模块:将软件的代码源文件进行分析,利用分析结果构建代码源文件、代码片段的关联图,再利用图神经网络计算每个文件代码的最终向量表示c;
缺陷报告的描述文本的表示计算模块:计算缺陷报告的描述文本的向量表示r;
缺陷报告和代码文件的相似度计算模块:构建预测模型,计算缺陷报告和每个代码源文件的相似度,对代码源文件的表示计算模块、缺陷报告的描述文本的表示计算模块中计算得到的代码源文件和缺陷报告的描述文字的向量表示进行融合,并计算相关度,从而预测得到缺陷报告可能对应的代码源文件。
6.根据权利要求5所述的缺陷代码定位的装置,其特征在于,所述缺陷报告及对应源文件抽取模块包括:
缺陷报告提取子模块,选出软件缺陷追踪***中状态为已修复的缺陷报告,提取出这些缺陷报告中的缺陷编号、缺陷的概括信息、缺陷的具体描述信息;
对应源文件抽取子模块,对每一个缺陷报告,从软件的版本控制***的提交记录中筛选出描述信息中提及该缺陷编号并包含预设关键词的记录,所述记录中涉及的被修复的代码文件即为该缺陷所在的代码源文件。
7.根据权利要求5所述的缺陷代码定位的装置,其特征在于,所述代码源文件的表示计算模块包括:
关联图构建子模块,利用Eclipse JDT工具对项目中的代码源文件进行分析,得到程序的抽象语法树AST,再根据抽象语法树对代码源文件构建代码及代码文件的关联图G=(E,V), 其中E代表边集合,V代表节点集合,关联图中共有三种节点:代码源文件节点、类节点、函数节点;
节点向量表示子模块,用向量来表示关联图G的所有节点V,并对这些向量用进行初始化,对于代码源文件节点和类节点直接根据正态分布生成随机向量作为初始化,对于函数节点则利用LS-CNN模型对函数体token序列进行编码初始化,得到整个函数的特征表示;
最终向量表示子模块,利用图卷积网络GCN计算关联图G的节点向量表示,代码源文件节点的向量表示则为每个代码源文件的最终向量表示c。
8.根据权利要求5所述的缺陷代码定位的装置,其特征在于,所述缺陷报告和代码文件的相似度计算模块包括:
概率预测子模块,将代码源文件的表示计算模块、缺陷报告的描述文本的表示计算模块中得到的代码源文件和缺陷报告的描述文本的表示进行向量拼接,通过全连接层,得到两者融合后的向量信息特征,使用softmax计算出该缺陷报告与该代码源文件相对应的概率值,根据概率值进行预测,若该概率值大于阈值0.5则表示代码源文件可能存在与该缺陷报告相关的错误,否则不存在;
9.一种电子设备,其特征在于,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1-4任一项所述的缺陷报告代码定位的方法。
10.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-4任一项所述的缺陷报告代码定位的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110213091.7A CN112597063B (zh) | 2021-02-26 | 2021-02-26 | 缺陷代码定位的方法、装置以及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110213091.7A CN112597063B (zh) | 2021-02-26 | 2021-02-26 | 缺陷代码定位的方法、装置以及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112597063A true CN112597063A (zh) | 2021-04-02 |
CN112597063B CN112597063B (zh) | 2021-06-08 |
Family
ID=75207649
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110213091.7A Active CN112597063B (zh) | 2021-02-26 | 2021-02-26 | 缺陷代码定位的方法、装置以及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112597063B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112162917A (zh) * | 2020-09-03 | 2021-01-01 | 华为技术有限公司 | 一种软件***的缺陷定位方法及装置 |
CN114064472A (zh) * | 2021-11-12 | 2022-02-18 | 天津大学 | 基于代码表示的软件缺陷自动修复加速方法 |
CN114416524A (zh) * | 2021-12-15 | 2022-04-29 | 北京邮电大学 | 文件错误的定位方法及装置 |
CN115048316A (zh) * | 2022-08-15 | 2022-09-13 | 中国电子科技集团公司第三十研究所 | 一种半监督的软件代码缺陷检测方法及装置 |
CN115617694A (zh) * | 2022-11-30 | 2023-01-17 | 中南大学 | 基于信息融合的软件缺陷预测方法、***、设备及介质 |
CN117290238A (zh) * | 2023-10-10 | 2023-12-26 | 湖北大学 | 基于异质类关系图神经网络的软件缺陷预测方法和*** |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140033176A1 (en) * | 2012-07-26 | 2014-01-30 | Infosys Limited | Methods for predicting one or more defects in a computer program and devices thereof |
CN105159822A (zh) * | 2015-08-12 | 2015-12-16 | 南京航空航天大学 | 一种基于文本词性和程序调用关系的软件缺陷定位方法 |
CN107844414A (zh) * | 2016-09-21 | 2018-03-27 | 南京大学 | 一种基于缺陷报告分析的跨项目、并行化缺陷定位方法 |
CN111783100A (zh) * | 2020-06-22 | 2020-10-16 | 哈尔滨工业大学 | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 |
CN112288079A (zh) * | 2020-11-17 | 2021-01-29 | 北京轩宇信息技术有限公司 | 图神经网络模型训练方法、软件缺陷检测方法及*** |
-
2021
- 2021-02-26 CN CN202110213091.7A patent/CN112597063B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140033176A1 (en) * | 2012-07-26 | 2014-01-30 | Infosys Limited | Methods for predicting one or more defects in a computer program and devices thereof |
CN105159822A (zh) * | 2015-08-12 | 2015-12-16 | 南京航空航天大学 | 一种基于文本词性和程序调用关系的软件缺陷定位方法 |
CN107844414A (zh) * | 2016-09-21 | 2018-03-27 | 南京大学 | 一种基于缺陷报告分析的跨项目、并行化缺陷定位方法 |
CN111783100A (zh) * | 2020-06-22 | 2020-10-16 | 哈尔滨工业大学 | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 |
CN112288079A (zh) * | 2020-11-17 | 2021-01-29 | 北京轩宇信息技术有限公司 | 图神经网络模型训练方法、软件缺陷检测方法及*** |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112162917A (zh) * | 2020-09-03 | 2021-01-01 | 华为技术有限公司 | 一种软件***的缺陷定位方法及装置 |
CN114064472A (zh) * | 2021-11-12 | 2022-02-18 | 天津大学 | 基于代码表示的软件缺陷自动修复加速方法 |
CN114064472B (zh) * | 2021-11-12 | 2024-04-09 | 天津大学 | 基于代码表示的软件缺陷自动修复加速方法 |
CN114416524A (zh) * | 2021-12-15 | 2022-04-29 | 北京邮电大学 | 文件错误的定位方法及装置 |
CN114416524B (zh) * | 2021-12-15 | 2023-03-24 | 北京邮电大学 | 文件错误的定位方法及装置 |
CN115048316A (zh) * | 2022-08-15 | 2022-09-13 | 中国电子科技集团公司第三十研究所 | 一种半监督的软件代码缺陷检测方法及装置 |
CN115617694A (zh) * | 2022-11-30 | 2023-01-17 | 中南大学 | 基于信息融合的软件缺陷预测方法、***、设备及介质 |
CN117290238A (zh) * | 2023-10-10 | 2023-12-26 | 湖北大学 | 基于异质类关系图神经网络的软件缺陷预测方法和*** |
CN117290238B (zh) * | 2023-10-10 | 2024-04-09 | 湖北大学 | 基于异质类关系图神经网络的软件缺陷预测方法和*** |
Also Published As
Publication number | Publication date |
---|---|
CN112597063B (zh) | 2021-06-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112597063B (zh) | 缺陷代码定位的方法、装置以及存储介质 | |
Allamanis et al. | A convolutional attention network for extreme summarization of source code | |
CN111444320A (zh) | 文本检索方法、装置、计算机设备和存储介质 | |
CN106537333A (zh) | 用于软件产物的数据库的***和方法 | |
US20210133630A1 (en) | Model induction method for explainable a.i. | |
CN113723070B (zh) | 文本相似度模型训练方法、文本相似度检测方法及装置 | |
CN116151132A (zh) | 一种编程学习场景的智能代码补全方法、***及储存介质 | |
CN115577678B (zh) | 文档级事件因果关系识别方法、***、介质、设备及终端 | |
CN116821318A (zh) | 基于大语言模型的业务知识推荐方法、装置及存储介质 | |
US20230014904A1 (en) | Searchable data structure for electronic documents | |
Bentkamp et al. | A formal proof of the expressiveness of deep learning | |
Nikanjam et al. | Automatic fault detection for deep learning programs using graph transformations | |
CN115934147A (zh) | 软件自动修复方法、***、电子设备及存储介质 | |
CN116432611A (zh) | 文稿写作辅助方法、***、终端及存储介质 | |
CN115291854A (zh) | 代码补全方法、装置及设备 | |
CN116361788A (zh) | 一种基于机器学习的二进制软件漏洞预测方法 | |
CN116910307A (zh) | 一种跨模态视频文本检索方法、***、设备及介质 | |
CN110929532A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN116661852B (zh) | 一种基于程序依赖图的代码搜索方法 | |
CN117707612A (zh) | 代码的处理方法、装置及电子设备 | |
CN117520142A (zh) | 基于代码预训练模型的测试断言语句自动化生成方法 | |
CN111967253A (zh) | 一种实体消歧方法、装置、计算机设备及存储介质 | |
CN116595537A (zh) | 一种基于多模态特征的生成式智能合约的漏洞检测方法 | |
EP4064038B1 (en) | Automated generation and integration of an optimized regular expression | |
CN116974554A (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 | ||
PE01 | Entry into force of the registration of the contract for pledge of patent right | ||
PE01 | Entry into force of the registration of the contract for pledge of patent right |
Denomination of invention: Method, device, and storage medium for locating defect codes Effective date of registration: 20230614 Granted publication date: 20210608 Pledgee: Beijing first financing Company limited by guarantee Pledgor: BEIJING PEKING UNIVERSITY SOFTWARE ENGINEERING CO.,LTD. Registration number: Y2023980044035 |