CN112597063A - 缺陷代码定位的方法、装置以及存储介质 - Google Patents

缺陷代码定位的方法、装置以及存储介质 Download PDF

Info

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
Application number
CN202110213091.7A
Other languages
English (en)
Other versions
CN112597063B (zh
Inventor
张世琨
叶蔚
邓枭
高庆
张君福
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Peking University Software Engineering Co ltd
Original Assignee
Beijing Peking University Software Engineering Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Peking University Software Engineering Co ltd filed Critical Beijing Peking University Software Engineering Co ltd
Priority to CN202110213091.7A priority Critical patent/CN112597063B/zh
Publication of CN112597063A publication Critical patent/CN112597063A/zh
Application granted granted Critical
Publication of CN112597063B publication Critical patent/CN112597063B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/22Matching criteria, e.g. proximity measures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/049Temporal neural networks, e.g. delay elements, oscillating neurons or pulsed inputs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning 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代表节点集合,关联图中共有三种节点:代码源文件节点、类节点、函数节点;
S1022,构建关联图G的邻接矩阵A,将三种节点之间的关系进行编号,任意两个节点
Figure 125808DEST_PATH_IMAGE001
之间若存在关系,则
Figure 988722DEST_PATH_IMAGE002
值为该关系的编号,否则为0;
S1023,用向量来表示关联图G的所有节点V,并对这些向量用进行初始化,对于代码源文件节点和类节点直接根据正态分布生成随机向量作为初始化,对于函数节点则利用LS-CNN模型对函数体token序列进行编码初始化,得到整个函数的特征表示;
S1024,利用图卷积网络GCN计算关联图G的节点向量表示,代码源文件节点的向量表示则为每个代码源文件的最终向量表示c。
优选地,所述步骤S104包括:
S1041,将S102、S103中的得到的代码源文件和缺陷报告的描述文本的表示进行向量拼接,通过全连接层,得到两者融合后的向量信息特征,使用softmax计算出该缺陷报告与该代码源文件相对应的概率值,根据概率值进行预测,若该概率值大于阈值0.5则表示代码源文件可能存在与该缺陷报告相关的错误,否则不存在;
S1042,所述预测模型的目标函数为
Figure 744188DEST_PATH_IMAGE003
, 其中
Figure 477789DEST_PATH_IMAGE004
为模型对缺陷报告
Figure 434244DEST_PATH_IMAGE005
和代码源文件
Figure 518874DEST_PATH_IMAGE006
的预测结果,其中
Figure 78032DEST_PATH_IMAGE006
Figure 931718DEST_PATH_IMAGE005
为S102、S103中得出的向量表示,
Figure 793495DEST_PATH_IMAGE007
表示缺陷报告
Figure 490056DEST_PATH_IMAGE005
和代码源文件
Figure 728270DEST_PATH_IMAGE006
是否相关,
Figure 436463DEST_PATH_IMAGE008
为损失函数,这里采用交叉熵损失函数,
Figure 593775DEST_PATH_IMAGE009
为正则化项,
Figure 477217DEST_PATH_IMAGE010
为其系数。
本发明的实施方式还提供了缺陷代码定位的装置,包括如下模块:
缺陷报告及对应源文件抽取模块:抽取软件的缺陷追踪系统中已修复的缺陷报告,提取出与缺陷报告相关的提交记录,从而抽取出每个缺陷报告对应的存在缺陷的代码源文件;
代码源文件的表示计算模块:将软件的代码源文件进行分析,利用分析结果构建代码源文件、代码片段的关联图,再利用图神经网络计算每个文件代码的最终向量表示c;
缺陷报告的描述文本的表示计算模块:计算缺陷报告的描述文本的向量表示r;
缺陷报告和代码文件的相似度计算模块:构建预测模型,计算缺陷报告和每个代码源文件的相似度,对代码源文件的表示计算模块、缺陷报告的描述文本的表示计算模块中计算得到的代码源文件和缺陷报告的描述文字的向量表示进行融合,并计算相关度,从而预测得到缺陷报告可能对应的代码源文件。
优选地,所述缺陷报告及对应源文件抽取模块包括:
缺陷报告提取子模块,选出软件缺陷追踪系统中状态为已修复的缺陷报告,提取出这些缺陷报告中的缺陷编号、缺陷的概括信息、缺陷的具体描述信息;
对应源文件抽取子模块,对每一个缺陷报告,从软件的版本控制系统的提交记录中筛选出描述信息中提及该缺陷编号并包含预设关键词的记录,所述记录中涉及的被修复的代码文件即为该缺陷所在的代码源文件。
优选地,所述代码源文件的表示计算模块包括:
关联图构建子模块,利用Eclipse JDT工具对项目中的代码源文件进行分析,得到程序的抽象语法树AST,再根据抽象语法树对代码源文件构建代码及代码文件的关联图G=(E,V), 其中E代表边集合,V代表节点集合,关联图中共有三种节点:代码源文件节点、类节点、函数节点;
邻接矩阵构建子模块,构建关联图G的邻接矩阵A,将三种节点之间的关系进行编号,任意两个节点
Figure 519122DEST_PATH_IMAGE001
之间若存在关系,则
Figure 81821DEST_PATH_IMAGE002
值为该关系的编号,否则为0;
节点向量表示子模块,用向量来表示关联图G的所有节点V,并对这些向量用进行初始化,对于代码源文件节点和类节点直接根据正态分布生成随机向量作为初始化,对于函数节点则利用LS-CNN模型对函数体token序列进行编码初始化,得到整个函数的特征表示;
最终向量表示子模块,利用图卷积网络GCN计算关联图G的节点向量表示,代码源文件节点的向量表示则为每个代码源文件的最终向量表示c。
优选地,所述缺陷报告和代码文件的相似度计算模块包括:
概率预测子模块,将代码源文件的表示计算模块、缺陷报告的描述文本的表示计算模块中得到的代码源文件和缺陷报告的描述文本的表示进行向量拼接,通过全连接层,得到两者融合后的向量信息特征,使用softmax计算出该缺陷报告与该代码源文件相对应的概率值,根据概率值进行预测,若该概率值大于阈值0.5则表示代码源文件可能存在与该缺陷报告相关的错误,否则不存在;
模型优化子模块,所述预测模型的目标函数为
Figure 410035DEST_PATH_IMAGE003
, 其中
Figure 690974DEST_PATH_IMAGE004
为模型对缺陷报告
Figure 536571DEST_PATH_IMAGE005
和代码源文件
Figure 343990DEST_PATH_IMAGE006
的预测结果,其中
Figure 984049DEST_PATH_IMAGE006
Figure 752285DEST_PATH_IMAGE005
为S102、S103中得出的向量表示,
Figure 995048DEST_PATH_IMAGE007
表示缺陷报告
Figure 532340DEST_PATH_IMAGE005
和代码源文件
Figure 343301DEST_PATH_IMAGE006
是否相关,
Figure 598833DEST_PATH_IMAGE008
为损失函数,这里采用交叉熵损失函数,
Figure 379707DEST_PATH_IMAGE009
为正则化项,
Figure 37084DEST_PATH_IMAGE010
为其系数。
本发明的实施方式还提供了一种电子设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如前所述的缺陷报告代码定位的方法。
本发明的实施方式还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现如前所述的缺陷报告代码定位的方法。
本发明的有益效果,相对于现有技术,本发明考虑到缺陷报告定位往往是在同一软件项目中,在获取代码的特征时考虑了代码文件之间的相互关联以及代码的全局信息,构建了代码源文件、代码片段的关联图,再利用图神经网络计算每个代码文件的最终表示,能够高效的对缺陷报告所描述的缺陷对应的代码源文件进行定位,软件维护人员可以使用本发明所描述的方法辅助定位缺陷报告所描述的缺陷对应的代码源文件,提高效率。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图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,将三种节点之间的关系进行编号,任意两个节点
Figure 18947DEST_PATH_IMAGE001
之间若存在关系,则
Figure 886409DEST_PATH_IMAGE002
值为该关系的编号,否则为0。令1表示“调用”关系,2表示“使用”关系,3表示“包含”关系,如图3中的关联图对应的邻接矩阵A即为下表所示:
Figure 346340DEST_PATH_IMAGE011
表1 邻接矩阵A
S1023. 用向量来表示关联图G的所有节点V,并对这些向量用进行初始化,对于代码源文件节点和类节点直接根据正态分布生成随机向量作为初始化,对于函数节点则利用LS-CNN模型对函数体token序列进行编码初始化:首先对代码进行分词,针对“驼峰式命名”的变量名进行分割,根据命名习惯将变量名分割成词语,保留更多的语义信息(如createArray分割为create array),并对每个词进行独热编码作为该词的向量表示,按照语句顺序排列,然后使用卷积神经网络(CNN)从函数中每条语句的所有词中提取出特征,参见图5中,通过卷积层和池化层输出得到函数的特征表示,再将每个语句的特征按顺序输入长短期记忆网络(LSTM),得到整个函数的特征表示。
S1024. 利用图卷积网络(GCN)计算关联图G的节点向量表示,具体采用两层的GCN网络计算图中节点的向量表示。图神经网络是利用一定的方法对节点进行描述,并经过不断的节点状态更新,得到具有包含邻居节点信息和图形拓扑结构特点的状态,最终将这些节点通过特定方法进行输出。计算方式如下所示:
Figure 858224DEST_PATH_IMAGE012
(1)
Figure 135621DEST_PATH_IMAGE013
(2)
式(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. 整个模型的目标函数为
Figure 100166DEST_PATH_IMAGE003
, 其中
Figure 363789DEST_PATH_IMAGE004
为模型对缺陷报告
Figure 854813DEST_PATH_IMAGE005
和代码源文件
Figure 178478DEST_PATH_IMAGE006
的预测结果,也即表示步骤1中预测得到的代码源文件是否与该缺陷报告存在相关错误,其中
Figure 895898DEST_PATH_IMAGE006
Figure 963211DEST_PATH_IMAGE005
为S102、S103中得出的向量表示,
Figure 449687DEST_PATH_IMAGE007
表示缺陷报告
Figure 334467DEST_PATH_IMAGE005
和代码源文件
Figure 273604DEST_PATH_IMAGE006
是否相关,
Figure 144608DEST_PATH_IMAGE008
为损失函数,这里采用交叉熵损失函数,
Figure 485591DEST_PATH_IMAGE009
为正则化项,
Figure 275692DEST_PATH_IMAGE010
为其系数。所述损失函数
Figure 702125DEST_PATH_IMAGE008
计算损失从而进行模型参数的优化,可根据模型和分类场景来选择。
以图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代表节点集合,关联图中共有三种节点:代码源文件节点、类节点、函数节点;
S1022,构建关联图G的邻接矩阵A,将三种节点之间的关系进行编号,任意两个节点
Figure 874386DEST_PATH_IMAGE001
之间若存在关系,则
Figure 729210DEST_PATH_IMAGE002
值为该关系的编号,否则为0;
S1023,用向量来表示关联图G的所有节点V,并对这些向量用进行初始化,对于代码源文件节点和类节点直接根据正态分布生成随机向量作为初始化,对于函数节点则利用LS-CNN模型对函数体token序列进行编码初始化,得到整个函数的特征表示;
S1024,利用图卷积网络GCN计算关联图G的节点向量表示,代码源文件节点的向量表示则为每个代码源文件的最终向量表示c。
4.根据权利要求1所述的缺陷代码定位的方法,其特征在于,所述步骤S104包括:
S1041,将S102、S103中的得到的代码源文件和缺陷报告的描述文本的表示进行向量拼接,通过全连接层,得到两者融合后的向量信息特征,使用softmax计算出该缺陷报告与该代码源文件相对应的概率值,根据概率值进行预测,若该概率值大于阈值0.5则表示代码源文件可能存在与该缺陷报告相关的错误,否则不存在;
S1042,所述预测模型的目标函数为
Figure 181051DEST_PATH_IMAGE003
, 其中
Figure 45101DEST_PATH_IMAGE004
为模型对缺陷报告
Figure 469261DEST_PATH_IMAGE005
和代码源文件
Figure 229406DEST_PATH_IMAGE006
的预测结果,其中
Figure 434123DEST_PATH_IMAGE006
Figure 570706DEST_PATH_IMAGE005
为S102、S103中得出的向量表示,
Figure 911689DEST_PATH_IMAGE007
表示缺陷报告
Figure 701790DEST_PATH_IMAGE005
和代码源文件
Figure 128223DEST_PATH_IMAGE006
是否相关,
Figure 537339DEST_PATH_IMAGE008
为损失函数,这里采用交叉熵损失函数,
Figure 998407DEST_PATH_IMAGE009
为正则化项,
Figure 100356DEST_PATH_IMAGE010
为其系数。
5.一种缺陷代码定位的装置,其特征在于,包括如下模块:
缺陷报告及对应源文件抽取模块:抽取软件的缺陷追踪系统中已修复的缺陷报告,提取出与缺陷报告相关的提交记录,从而抽取出每个缺陷报告对应的存在缺陷的代码源文件;
代码源文件的表示计算模块:将软件的代码源文件进行分析,利用分析结果构建代码源文件、代码片段的关联图,再利用图神经网络计算每个文件代码的最终向量表示c;
缺陷报告的描述文本的表示计算模块:计算缺陷报告的描述文本的向量表示r;
缺陷报告和代码文件的相似度计算模块:构建预测模型,计算缺陷报告和每个代码源文件的相似度,对代码源文件的表示计算模块、缺陷报告的描述文本的表示计算模块中计算得到的代码源文件和缺陷报告的描述文字的向量表示进行融合,并计算相关度,从而预测得到缺陷报告可能对应的代码源文件。
6.根据权利要求5所述的缺陷代码定位的装置,其特征在于,所述缺陷报告及对应源文件抽取模块包括:
缺陷报告提取子模块,选出软件缺陷追踪系统中状态为已修复的缺陷报告,提取出这些缺陷报告中的缺陷编号、缺陷的概括信息、缺陷的具体描述信息;
对应源文件抽取子模块,对每一个缺陷报告,从软件的版本控制系统的提交记录中筛选出描述信息中提及该缺陷编号并包含预设关键词的记录,所述记录中涉及的被修复的代码文件即为该缺陷所在的代码源文件。
7.根据权利要求5所述的缺陷代码定位的装置,其特征在于,所述代码源文件的表示计算模块包括:
关联图构建子模块,利用Eclipse JDT工具对项目中的代码源文件进行分析,得到程序的抽象语法树AST,再根据抽象语法树对代码源文件构建代码及代码文件的关联图G=(E,V), 其中E代表边集合,V代表节点集合,关联图中共有三种节点:代码源文件节点、类节点、函数节点;
邻接矩阵构建子模块,构建关联图G的邻接矩阵A,将三种节点之间的关系进行编号,任意两个节点
Figure 138719DEST_PATH_IMAGE001
之间若存在关系,则
Figure 351525DEST_PATH_IMAGE002
值为该关系的编号,否则为0;
节点向量表示子模块,用向量来表示关联图G的所有节点V,并对这些向量用进行初始化,对于代码源文件节点和类节点直接根据正态分布生成随机向量作为初始化,对于函数节点则利用LS-CNN模型对函数体token序列进行编码初始化,得到整个函数的特征表示;
最终向量表示子模块,利用图卷积网络GCN计算关联图G的节点向量表示,代码源文件节点的向量表示则为每个代码源文件的最终向量表示c。
8.根据权利要求5所述的缺陷代码定位的装置,其特征在于,所述缺陷报告和代码文件的相似度计算模块包括:
概率预测子模块,将代码源文件的表示计算模块、缺陷报告的描述文本的表示计算模块中得到的代码源文件和缺陷报告的描述文本的表示进行向量拼接,通过全连接层,得到两者融合后的向量信息特征,使用softmax计算出该缺陷报告与该代码源文件相对应的概率值,根据概率值进行预测,若该概率值大于阈值0.5则表示代码源文件可能存在与该缺陷报告相关的错误,否则不存在;
模型优化子模块,所述预测模型的目标函数为
Figure 870362DEST_PATH_IMAGE003
, 其中
Figure 284157DEST_PATH_IMAGE004
为模型对缺陷报告
Figure 950762DEST_PATH_IMAGE005
和代码源文件
Figure 826314DEST_PATH_IMAGE006
的预测结果,其中
Figure 261975DEST_PATH_IMAGE006
Figure 705726DEST_PATH_IMAGE006
Figure 328468DEST_PATH_IMAGE005
为S102、S103中得出的向量表示,
Figure 148656DEST_PATH_IMAGE007
表示缺陷报告
Figure 173244DEST_PATH_IMAGE005
和代码源文件
Figure 912530DEST_PATH_IMAGE006
是否相关,
Figure 22569DEST_PATH_IMAGE008
为损失函数,这里采用交叉熵损失函数,
Figure 849710DEST_PATH_IMAGE009
为正则化项,
Figure 119018DEST_PATH_IMAGE010
为其系数。
9.一种电子设备,其特征在于,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1-4任一项所述的缺陷报告代码定位的方法。
10.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-4任一项所述的缺陷报告代码定位的方法。
CN202110213091.7A 2021-02-26 2021-02-26 缺陷代码定位的方法、装置以及存储介质 Active CN112597063B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 北京轩宇信息技术有限公司 图神经网络模型训练方法、软件缺陷检测方法及系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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) 用于软件产物的数据库的系统和方法
CN116821318A (zh) 基于大语言模型的业务知识推荐方法、装置及存储介质
US20230014904A1 (en) Searchable data structure for electronic documents
CN115577678B (zh) 文档级事件因果关系识别方法、系统、介质、设备及终端
CN116151132A (zh) 一种编程学习场景的智能代码补全方法、系统及储存介质
Nikanjam et al. Automatic fault detection for deep learning programs using graph transformations
CN110929532B (zh) 数据处理方法、装置、设备及存储介质
CN115934147A (zh) 软件自动修复方法、系统、电子设备及存储介质
CN115291854A (zh) 代码补全方法、装置及设备
CN116910307A (zh) 一种跨模态视频文本检索方法、系统、设备及介质
CN113723070B (zh) 文本相似度模型训练方法、文本相似度检测方法及装置
CN116661852B (zh) 一种基于程序依赖图的代码搜索方法
CN116432611A (zh) 文稿写作辅助方法、系统、终端及存储介质
US20230153335A1 (en) Searchable data structure for electronic documents
CN116595537A (zh) 一种基于多模态特征的生成式智能合约的漏洞检测方法
EP4064038B1 (en) Automated generation and integration of an optimized regular expression
CN116974554A (zh) 代码数据处理方法、装置、计算机设备和存储介质
CN116361788A (zh) 一种基于机器学习的二进制软件漏洞预测方法
CN116090538A (zh) 一种模型权重获取方法以及相关系统
CN113392929A (zh) 一种基于词嵌入与自编码器融合的生物序列特征提取方法
CN113076089A (zh) 一种基于对象类型的api补全方法
CN112131363A (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