CN111309607A - 一种代码方法级别的软件缺陷定位方法 - Google Patents

一种代码方法级别的软件缺陷定位方法 Download PDF

Info

Publication number
CN111309607A
CN111309607A CN202010087773.3A CN202010087773A CN111309607A CN 111309607 A CN111309607 A CN 111309607A CN 202010087773 A CN202010087773 A CN 202010087773A CN 111309607 A CN111309607 A CN 111309607A
Authority
CN
China
Prior art keywords
defect
code
model
report
training
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
CN202010087773.3A
Other languages
English (en)
Other versions
CN111309607B (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.)
Yangzhou University
Original Assignee
Yangzhou University
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 Yangzhou University filed Critical Yangzhou University
Priority to CN202010087773.3A priority Critical patent/CN111309607B/zh
Publication of CN111309607A publication Critical patent/CN111309607A/zh
Application granted granted Critical
Publication of CN111309607B publication Critical patent/CN111309607B/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/362Software debugging
    • G06F11/366Software debugging using diagnostics
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/35Clustering; Classification
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02PCLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
    • Y02P90/00Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
    • Y02P90/30Computing systems specially adapted for manufacturing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种代码方法级别的软件缺陷定位方法,属于软件维护领域,该方法包括:构建并训练seq2seq模型;基于seq2seq模型构建缺陷定位模型;构建缺陷定位模型的训练样本;利用训练样本训练缺陷定位模型;利用训练后的缺陷定位模型预测缺陷报告中的缺陷方法。本发明提出的方法采用历史数据和深度学习技术相结合训练一个缺陷定位模型,并利用seq2seq模型确定该缺陷定位模型中代码编码器的参数,将代码方法注释作为监督信息,信息量丰富,很好地达到了在方法级别上定位软件缺陷的目的,能极大提升软件缺陷修复的效率。

Description

一种代码方法级别的软件缺陷定位方法
技术领域
本发明属于软件维护领域,特别涉及一种代码方法级别的软件缺陷定位方法。
背景技术
开发过程中,缺陷的产生是无法避免的。在传统的开发过程中,当软件测试人员或软件使用者发现缺陷后,会在缺陷跟踪管理系统中编写缺陷报告告知软件开发、维护人员。缺陷报告记录了程序缺陷的报告时间、严重程度、异常的程序表现以及如何重现软件缺陷的细节。软件开发人员和维护人员需要根据提交的缺陷报告人工确定缺陷位置,以修复该缺陷。在实际缺陷修复过程中,修复者往往会在缺陷定位这一环节中花费大量时间。
随着软件行业的发展,软件功能越来越复杂,软件代码行数迅速增加,一方面缺陷的数量也随代码行数的增长而增长,另一方面代码行数的增加也导致人工定位缺陷更加困难。因此如何实现自动定位缺陷位置,以应对不断增长的缺陷数量和代码规模,从而提高软件修复效率与质量,成为研究人员关注的热点之一。
目前缺陷定位领域已有不少先进技术。第一类称为基于程序频谱的缺陷定位方法,其是通过搜集测试用例的程序频谱和执行结果,定位缺陷语句在被测程序中的可能位置,这类方法是语句级别的缺陷定位,需要提供若干个通过的测试用例和至少一个未通过的测试用例。第二类缺陷定位技术,是通过使用代码分段技术和Stack Trace信息分析来提高缺陷定位性能。第三类缺陷定位技术,是基于缺陷报告,通过信息检索领域的方法和项目中历史缺陷的修复信息,寻找与缺陷报告相似的文件,进而实现文件级别的缺陷定位。但目前这类研究都将缺陷报告和源代码文件看作是“词包”,虽然同一个词在缺陷报告和代码中语义往往是相似的,但只关注两者之间单词的相似程度,会丢失文本的顺序信息,因而导致丢失一部分语义信息,这对缺陷定位的效果产生了负面影响。
发明内容
本发明的目的在于提供一种实现对缺陷报告进行细粒度的自动定位,以帮助缺陷修复人员快速找到该缺陷产生的位置,提高缺陷修复效率的软件缺陷定位方法。
实现本发明目的的技术解决方案为:一种代码方法级别的软件缺陷定位方法,所述方法包括以下步骤:
步骤1,构建并训练seq2seq模型;
步骤2,基于seq2seq模型构建缺陷定位模型;
步骤3,构建所述缺陷定位模型的训练样本;
步骤4,利用所述训练样本训练所述缺陷定位模型;
步骤5,利用训练后的缺陷定位模型预测缺陷报告中的缺陷方法。
进一步地,步骤1中所述seq2seq模型包括一个编码器和一个解码器,其中编码器包括依次设置的输入层、嵌入层、门控循环神经网络GRU层,解码器包括一个全连接层实现注意力机制、一个GRU层和一个softmax层;
步骤1中所述训练seq2seq模型,具体是利用项目代码库中包含方法注释的缺陷方法对seq2seq模型进行训练。
进一步地,步骤2中所述缺陷定位模型包括:
一个代码编码器,用于将方法代码转换为向量;
一个缺陷报告编码器,用于将缺陷报告转换为向量;
一个融合层,用于融合上述两个向量,获得两个向量的关联程度。
进一步地,步骤2所述基于seq2seq模型构建缺陷定位模型,具体包括:
步骤2-1,提取所述seq2seq模型中的编码器作为代码编码器,且参数固定;
步骤2-2,构建一个缺陷报告编码器,其结构与所述代码编码器一致,但参数随机初始化;
步骤2-3,构建一个融合层,该融合层包括多层全连接层,其参数随机初始化,且输入为两个向量,分别为代码编码器的输出、缺陷报告编码器的输出,输出为0到1之间的值,表示所述两个向量的关联程度即缺陷报告与方法代码的关联程度。
进一步地,步骤3构建所述缺陷定位模型的训练集,具体为:提取已经修复的缺陷报告及其中修改的、未修改的方法代码,生成若干组训练样本;每组训练样本包括3个数据:修改的或未修改的方法代码、缺陷报告、方法代码与缺陷报告的关联程度。
进一步地,步骤3构建所述缺陷定位模型的训练集,具体过程包括:
步骤3-1,提取一个处于Fixed的缺陷报告,该缺陷报告中提到的缺陷已经被修复;
步骤3-2,获取为修复步骤3-1中缺陷报告的缺陷而更改的文件的前后版本;
步骤3-3,利用gumtree获取两个文件在AST层面发生的变更,并找出发生更改的结点的祖先结点中类型值为“MethodDeclaration”的结点;
步骤3-4,将缺陷修复前的文件中类型值为“MethodDeclaration”的结点转为代码,获得的代码即为修复缺陷所需修改的方法代码;
步骤3-5,从缺陷修复前的文件中随机抽取若干个未需修改的方法代码;
步骤3-6、将步骤3-4和步骤3-5获得的方法代码均转成标记序列;
步骤3-7,将步骤3-1的缺陷报告转为单词序列;
步骤3-8,利用步骤3-6的标记序列、步骤3-7的单词序列分别构建代码语料库和文本语料库,语料库中的每个标记或单词都有一个唯一对应的one-hot向量即独热向量表示;
步骤3-9,针对每个需修改的方法代码,将需修改的方法代码对应的标记序列、缺陷报告对应的单词序列以及标签1组合为一个正训练样本;针对每个未需修改的方法代码,将未需修改的方法代码对应的标记序列、缺陷报告对应的单词序列以及标签0组合为一个负训练样本。
进一步地,步骤3-6还包括:利用词法分析工具进行代码分词,将标记序列中使用驼峰命名法和下划线命名法的标记拆分为单个单词。
进一步地,步骤3-7所述将步骤3-1的缺陷报告转为单词序列,具体过程包括:对缺陷报告依次执行分词、去除标点符号、拆分驼峰命名法和下划线命名法的单词、转为小写处理,以此将缺陷报告转为单词序列。
进一步地,步骤4利用所述训练样本训练所述缺陷定位模型,具体过程包括:
步骤4-1,将训练样本按比例分为训练集、验证集以及测试集;
步骤4-2,利用训练集对缺陷定位模型进行训练,具体包括:
结合步骤3-8中构建的语料库,将训练集中方法代码对应的标记序列、缺陷报告对应的单词序列均转为one-hot向量序列;
将训练集中每一个样本对应的one-hot向量序列依次输入缺陷定位模型;
计算缺陷定位模型的输出值与真实值即标签值的损失值loss;
根据损失值loss,利用梯度下降算法更新缺陷定位模型中的参数。
进一步地,步骤5所述利用训练后的缺陷定位模型预测缺陷报告中的缺陷方法,具体过程包括:
步骤5-1,将缺陷报告与项目代码库中所有缺陷方法依次成对输入训练后的缺陷定位模型,输出该缺陷报告与每一个缺陷方法的关联程度值;
步骤5-2,对所有关联程度值进行降序排列,将前n个关联程度值对应的缺陷方法作为最终预测的缺陷方法,其中n值自定义设置。
本发明与现有技术相比,其显著优点为:1)传统技术中基于缺陷报告的缺陷定位往往只定位到文件级别,而本发明能够定位到方法级别,大幅降低使用者在修复缺陷时需要浏览的代码行数;2)构建代码语料库时,本发明使用词法分析对代码进行分词,相比于传统的自然语言分词,本发明具有更高的准确率;3)和传统技术中基于缺陷报告的缺陷定位的代码编码器相比,本发明的代码编码器调参时,可以获得更多的监督信息:传统方法中代码编码器训练过程和其他参数同时完成,属于不确切监督,它们获得的监督信息只有一个0或1的值,代表代码特征向量与文本特征向量的相似度,而本发明中代码编码器的训练是独立于缺陷定位网络模型的,代码编码器训练过程中监督信息是代码的注释,相比于传统方法使用的监督信息,信息量更大;4)本发明中编码器使用GRU网络进行编码,避免了传统RNN的梯度消失与梯度爆炸问题,训练时间缩短,此外,能捕获代码或文本中间隔和延迟非常长的重要事件;5)本发明使用一个由多层全连接层构成的融合层计算代码与文本之间的相似度,相比于传统的余弦相似度,性能更优。
下面结合附图对本发明作进一步详细描述。
附图说明
图1为一个实施例中代码方法级别的软件缺陷定位方法流程图。
图2为一个实施例中seq2seq模型的示意图。
图3为一个实施例中缺陷定位模型的示意图。
图4为一个实施例中构建缺陷定位模型训练样本的流程图。
图5为一个实施例中缺陷定位过程的流程图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,结合图1,本发明提出了一种代码方法级别的软件缺陷定位方法,该方法包括以下步骤:
步骤1,构建并训练seq2seq(序列到序列)模型;
步骤2,基于seq2seq模型构建缺陷定位模型;
步骤3,构建缺陷定位模型的训练样本;
步骤4,利用训练样本训练缺陷定位模型;
步骤5,利用训练后的缺陷定位模型预测缺陷报告中的缺陷方法。
这里,方法是指面向对象编程中,类方法或者是实例方法的一种子程序。一个方法通常由一系列的语句所组成,并以之完成一个动作。其可以输入一组参数以制订所需的动作,且一部分的方法可能会有输出值(即返回值)。
进一步地,在其中一个实施例中,步骤1中seq2seq模型包括一个编码器和一个解码器,其中编码器包括依次设置的输入层、嵌入层、门控循环神经网络GRU层,解码器包括一个全连接层实现注意力机制、一个GRU层和一个softmax层;
步骤1中训练seq2seq模型,具体是利用项目代码库中包含方法注释的缺陷方法对seq2seq模型进行训练。
采用本实施例的方案,编码器使用GRU网络进行编码,避免了传统RNN的梯度消失与梯度爆炸问题,训练时间缩短,且能捕获代码或文本中间隔和延迟非常长的重要事件。此外,代码编码器的训练独立于缺陷定位网络模型,且代码编码器训练过程中监督信息是代码的注释,相比于传统方法使用的监督信息,信息量更大。
进一步地,在其中一个实施例中,步骤2中缺陷定位模型包括:
一个代码编码器,用于将方法代码转换为向量;
一个缺陷报告编码器,用于将缺陷报告转换为向量;
一个融合层,用于融合上述两个向量,获得两个向量的关联程度。
进一步地,在其中一个实施例中,步骤2基于seq2seq模型构建缺陷定位模型,具体包括:
步骤2-1,提取seq2seq模型中的编码器作为代码编码器,且参数固定;
步骤2-2,构建一个缺陷报告编码器,其结构与代码编码器一致,但参数随机初始化;
步骤2-3,构建一个融合层,该融合层包括多层全连接层,其参数随机初始化,且输入为两个向量,分别为代码编码器的输出、缺陷报告编码器的输出,输出为0到1之间的值,表示两个向量的关联程度即缺陷报告与方法代码的关联程度。
采用本实施例的方案,利用一个由多层全连接层构成的融合层计算代码与文本之间的相似度,相比于传统的余弦相似度,性能更优。
进一步地,在其中一个实施例中,步骤3构建缺陷定位模型的训练集,具体为:提取已经修复的缺陷报告及其中修改的、未修改的方法代码,生成若干组训练样本;每组训练样本包括3个数据:修改的或未修改的方法代码、缺陷报告、方法代码与缺陷报告的关联程度。
进一步地,在其中一个实施例中,步骤3构建缺陷定位模型的训练集,具体过程包括:
步骤3-1,提取一个处于Fixed的缺陷报告,该缺陷报告中提到的缺陷已经被修复;
步骤3-2,获取为修复步骤3-1中缺陷报告的缺陷而更改的文件的前后版本;
步骤3-3,利用gumtree获取两个文件在AST层面发生的变更,并找出发生更改的结点的祖先结点中类型值为“MethodDeclaration”的结点;
步骤3-4,将缺陷修复前的文件中类型值为“MethodDeclaration”的结点转为代码,获得的代码即为修复缺陷所需修改的方法代码;
步骤3-5,从缺陷修复前的文件中随机抽取若干个未需修改的方法代码;
步骤3-6、将步骤3-4和步骤3-5获得的方法代码均转成标记(token)序列;
步骤3-7,将步骤3-1的缺陷报告转为单词序列;
步骤3-8,利用步骤3-6的标记序列、步骤3-7的单词序列分别构建代码语料库和文本语料库,语料库中的每个标记或单词都有一个唯一对应的one-hot向量即独热向量表示;
步骤3-9,针对每个需修改的方法代码,将需修改的方法代码对应的标记序列、缺陷报告对应的单词序列以及标签1组合为一个正训练样本;针对每个未需修改的方法代码,将未需修改的方法代码对应的标记序列、缺陷报告对应的单词序列以及标签0组合为一个负训练样本。
采用本实施例的方案,其中利用词法分析对代码进行分词,相比于传统的自然语言分词,具有更高的准确率,这进一步提高缺陷定位的准确率。
进一步地,在其中一个实施例中,步骤3-6还包括:利用词法分析工具进行代码分词,将标记序列中使用驼峰命名法和下划线命名法的标记token拆分为单个单词。例如:将token“print_employee_paychecks”拆分为print,employee,paychecks。
进一步地,在其中一个实施例中,步骤3-7将步骤3-1的缺陷报告转为单词序列,具体过程包括:对缺陷报告依次执行分词、去除标点符号、拆分驼峰命名法和下划线命名法的单词、转为小写处理,以此将缺陷报告转为单词序列。
进一步地,在其中一个实施例中,步骤4利用训练样本训练缺陷定位模型,具体过程包括:
步骤4-1,将训练样本按比例分为训练集、验证集以及测试集;
步骤4-2,利用训练集对缺陷定位模型进行训练,具体包括:
结合步骤3-8中构建的语料库,将训练集中方法代码对应的标记序列、缺陷报告对应的单词序列均转为one-hot向量序列;
将训练集中每一个样本对应的one-hot向量序列依次输入缺陷定位模型;
计算缺陷定位模型的输出值与真实值即标签值的损失值loss;
根据损失值loss,利用梯度下降算法更新缺陷定位模型中的参数。
进一步地,在其中一个实施例中,步骤5利用训练后的缺陷定位模型预测缺陷报告中的缺陷方法,具体过程包括:
步骤5-1,将缺陷报告与项目代码库中所有缺陷方法依次成对输入训练后的缺陷定位模型,输出该缺陷报告与每一个缺陷方法的关联程度值;
步骤5-2,对所有关联程度值进行降序排列,将前n个关联程度值对应的缺陷方法作为最终预测的缺陷方法,其中n值自定义设置。
优选的,在其中一个实施例中,上述n=10。
作为一种具体示例,本发明提出的代码方法级别的软件缺陷定位方法,包括以下内容:
1、构建一个seq2seq模型,如图2所示,其用于将方法级别的代码序列翻译为方法级注释。该模型包括编码器和解码器,编码器将代码转为一个向量表示,解码器将向量转为注释。其中,编码器包括依次设置的输入层、嵌入层、GRU层;解码器包括一个全连接层实现注意力机制、一个GRU层、一个softmax层。利用代码仓库中包含方法级注释的方法作为训练集,对seq2seq模型进行训练,训练集中的一个样本如下表1所示。
表1训练集中某一样本
Figure BDA0002382612710000071
Figure BDA0002382612710000081
2、构建一个缺陷定位模型,如图3所示。缺陷定位模型包括一个代码编码器、一个缺陷报告编码器、一个融合层。两个编码器结构一致,且都与上述1中的编码器结构一致,依次由输入层、嵌入层、GRU层组成。编码器输入一段文本,输出这段文本的特征表示。融合层由多层全连接层构成,其输入两个向量,输出一个0到1的值表示这两个向量的关联程度。
将上述1中的编码器中的参数提取出来作为缺陷定位模型中的代码编码器的初始值,并将代码编码器中所有参数的梯度置为0;构建一个缺陷报告编码器,其参数随机初始化;构建一个由多层全连接层组成的融合层,其参数随机初始化。将两个编码器的结果输入到由多层神经网络构成的融合层,融合层输出一个0到1的值表示缺陷与代码的关联程度。
3、从缺陷管理系统中提取已经修复的缺陷报告和其中修改的、未修改的方法代码,生成若干组训练样本,如图4所示,训练样本包括正样本和负样本。每组训练样本包含3个数据:修改的或未修改的方法代码、缺陷报告、方法代码与缺陷报告的关联程度(相关为1,不相关为0)。生成样本的具体过程如下:
步骤3-1,提取一个处于Fixed的缺陷报告,该缺陷报告中提到的缺陷已经被修复;
步骤3-2,获取为修复步骤3-1中缺陷报告的缺陷而更改的文件的前后版本;
步骤3-3,利用gumtree获取两个文件在AST层面发生的变更,并找出发生更改的结点的祖先结点中类型值为“MethodDeclaration”的结点;
步骤3-4,将缺陷修复前的文件中类型值为“MethodDeclaration”的结点转为代码,获得的代码即为修复缺陷所需修改的方法代码;
步骤3-5,从缺陷修复前的文件中随机抽取若干个未需修改的方法代码;
步骤3-6、将步骤3-4和步骤3-5获得的方法代码均转成标记序列;
步骤3-7,将步骤3-1的缺陷报告转为单词序列;
步骤3-8,利用步骤3-6的标记序列、步骤3-7的单词序列分别构建代码语料库和文本语料库,语料库中的每个标记或单词都有一个唯一对应的one-hot向量即独热向量表示;
步骤3-9,针对每个需修改的方法代码,将需修改的方法代码对应的标记序列、缺陷报告对应的单词序列以及标签1组合为一个正训练样本;针对每个未需修改的方法代码,将未需修改的方法代码对应的标记序列、缺陷报告对应的单词序列以及标签0组合为一个负训练样本。
4、利用上述3中得到的训练样本,训练步骤2中的缺陷定位模型,具体包括:
结合步骤3-8中构建的语料库,将训练集中方法代码对应的单词序列、缺陷报告对应的单词序列均转为one-hot向量序列;
将训练集中每一个样本对应的one-hot向量序列依次输入缺陷定位模型;
计算缺陷定位模型的输出值与真实值即标签值的损失值loss;
根据损失值loss,利用梯度下降算法更新缺陷定位模型中的参数。
5、结合图5,对于一个新的缺陷报告R,将其与当前版本的项目代码库中所有的缺陷方法依次成对输入已经训练好的缺陷定位模型,输出该缺陷报告与所有缺陷方法的关联程度值,对所有关联程度值进行降序排列,将前10个关联程度值对应的缺陷方法作为最终预测的缺陷方法,即获得10个包含缺陷的方法代码。
本发明提出的方法采用历史数据和深度学习技术相结合训练一个缺陷定位模型,并利用seq2seq模型确定该缺陷定位模型中代码编码器的参数,将代码方法注释作为监督信息,信息量丰富,很好地达到了在方法级别上定位软件缺陷的目的,能极大提升软件缺陷修复的效率。

Claims (10)

1.一种代码方法级别的软件缺陷定位方法,其特征在于,所述方法包括以下步骤:
步骤1,构建并训练seq2seq模型;
步骤2,基于seq2seq模型构建缺陷定位模型;
步骤3,构建所述缺陷定位模型的训练样本;
步骤4,利用所述训练样本训练所述缺陷定位模型;
步骤5,利用训练后的缺陷定位模型预测缺陷报告中的缺陷方法。
2.根据权利要求1所述的代码方法级别的软件缺陷定位方法,其特征在于,步骤1中所述seq2seq模型包括一个编码器和一个解码器,其中编码器包括依次设置的输入层、嵌入层、门控循环神经网络GRU层,解码器包括一个全连接层实现注意力机制、一个GRU层和一个softmax层;
步骤1中所述训练seq2seq模型,具体是利用项目代码库中包含方法注释的缺陷方法对seq2seq模型进行训练。
3.根据权利要求1或2所述的代码方法级别的软件缺陷定位方法,其特征在于,步骤2中所述缺陷定位模型包括:
一个代码编码器,用于将方法代码转换为向量;
一个缺陷报告编码器,用于将缺陷报告转换为向量;
一个融合层,用于融合上述两个向量,获得两个向量的关联程度。
4.根据权利要求3所述的代码方法级别的软件缺陷定位方法,其特征在于,步骤2所述基于seq2seq模型构建缺陷定位模型,具体包括:
步骤2-1,提取所述seq2seq模型中的编码器作为代码编码器,且参数固定;
步骤2-2,构建一个缺陷报告编码器,其结构与所述代码编码器一致,但参数随机初始化;
步骤2-3,构建一个融合层,该融合层包括多层全连接层,其参数随机初始化,且输入为两个向量,分别为代码编码器的输出、缺陷报告编码器的输出,输出为0到1之间的值,表示所述两个向量的关联程度即缺陷报告与方法代码的关联程度。
5.根据权利要求1所述的代码方法级别的软件缺陷定位方法,其特征在于,步骤3构建所述缺陷定位模型的训练集,具体为:提取已经修复的缺陷报告及其中修改的、未修改的方法代码,生成若干组训练样本;每组训练样本包括3个数据:修改的或未修改的方法代码、缺陷报告、方法代码与缺陷报告的关联程度。
6.根据权利要求5所述的代码方法级别的软件缺陷定位方法,其特征在于,步骤3构建所述缺陷定位模型的训练样本,具体过程包括:
步骤3-1,提取一个处于Fixed的缺陷报告,该缺陷报告中提到的缺陷已经被修复;
步骤3-2,获取为修复步骤3-1中缺陷报告的缺陷而更改的文件的前后版本;
步骤3-3,利用gumtree获取两个文件在AST层面发生的变更,并找出发生更改的结点的祖先结点中类型值为“MethodDeclaration”的结点;
步骤3-4,将缺陷修复前的文件中类型值为“MethodDeclaration”的结点转为代码,获得的代码即为修复缺陷所需修改的方法代码;
步骤3-5,从缺陷修复前的文件中随机抽取若干个未需修改的方法代码;
步骤3-6、将步骤3-4和步骤3-5获得的方法代码均转成标记序列;
步骤3-7,将步骤3-1的缺陷报告转为单词序列;
步骤3-8,利用步骤3-6的标记序列、步骤3-7的单词序列分别构建代码语料库和文本语料库,语料库中的每个标记或单词都有一个唯一对应的one-hot向量即独热向量表示;
步骤3-9,针对每个需修改的方法代码,将需修改的方法代码对应的标记序列、缺陷报告对应的单词序列以及标签1组合为一个正训练样本;针对每个未需修改的方法代码,将未需修改的方法代码对应的标记序列、缺陷报告对应的单词序列以及标签0组合为一个负训练样本。
7.根据权利要求6所述的代码方法级别的软件缺陷定位方法,其特征在于,步骤3-6还包括:利用词法分析工具进行代码分词,将标记序列中使用驼峰命名法和下划线命名法的标记拆分为单个单词。
8.根据权利要求7所述的代码方法级别的软件缺陷定位方法,其特征在于,步骤3-7所述将步骤3-1的缺陷报告转为单词序列,具体过程包括:对缺陷报告依次执行分词、去除标点符号、拆分驼峰命名法和下划线命名法的单词、转为小写处理,以此将缺陷报告转为单词序列。
9.根据权利要求8所述的代码方法级别的软件缺陷定位方法,其特征在于,步骤4利用所述训练样本训练所述缺陷定位模型,具体过程包括:
步骤4-1,将训练样本按比例分为训练集、验证集以及测试集;
步骤4-2,利用训练集对缺陷定位模型进行训练,具体包括:
结合步骤3-8中构建的语料库,将训练集中方法代码对应的标记序列、缺陷报告对应的单词序列均转为one-hot向量序列;
将训练集中每一个样本对应的one-hot向量序列依次输入缺陷定位模型;
计算缺陷定位模型的输出值与真实值即标签值的损失值loss;
根据损失值loss,利用梯度下降算法更新缺陷定位模型中的参数。
10.根据权利要求9所述的代码方法级别的软件缺陷定位方法,其特征在于,步骤5所述利用训练后的缺陷定位模型预测缺陷报告中的缺陷方法,具体过程包括:
步骤5-1,将缺陷报告与项目代码库中所有缺陷方法依次成对输入训练后的缺陷定位模型,输出该缺陷报告与每一个缺陷方法的关联程度值;
步骤5-2,对所有关联程度值进行降序排列,将前n个关联程度值对应的缺陷方法作为最终预测的缺陷方法,其中n值自定义设置。
CN202010087773.3A 2020-02-12 2020-02-12 一种代码方法级别的软件缺陷定位方法 Active CN111309607B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010087773.3A CN111309607B (zh) 2020-02-12 2020-02-12 一种代码方法级别的软件缺陷定位方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010087773.3A CN111309607B (zh) 2020-02-12 2020-02-12 一种代码方法级别的软件缺陷定位方法

Publications (2)

Publication Number Publication Date
CN111309607A true CN111309607A (zh) 2020-06-19
CN111309607B CN111309607B (zh) 2023-06-02

Family

ID=71159119

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010087773.3A Active CN111309607B (zh) 2020-02-12 2020-02-12 一种代码方法级别的软件缺陷定位方法

Country Status (1)

Country Link
CN (1) CN111309607B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112463424A (zh) * 2020-11-13 2021-03-09 扬州大学 一种基于图的端到端程序修复方法
CN112699018A (zh) * 2020-10-23 2021-04-23 西安交通大学 基于软件缺陷关联分析的软件缺陷定位方法
CN113010420A (zh) * 2021-03-05 2021-06-22 南方科技大学 一种促进测试代码与产品代码协同演化的方法及终端设备
WO2021208701A1 (zh) * 2020-11-23 2021-10-21 平安科技(深圳)有限公司 代码变更的注释生成方法、装置、电子设备及存储介质
CN114490163A (zh) * 2022-03-28 2022-05-13 北京天维信通科技有限公司 一种故障自愈方法、装置及电子设备
CN116578273A (zh) * 2023-02-28 2023-08-11 中国长江三峡集团有限公司 一种编码结构设计方法、装置、存储介质及电子设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107844414A (zh) * 2016-09-21 2018-03-27 南京大学 一种基于缺陷报告分析的跨项目、并行化缺陷定位方法
CN109376080A (zh) * 2018-09-27 2019-02-22 北京大学 时间适配的自动化缺陷定位方法和装置
WO2019094933A1 (en) * 2017-11-13 2019-05-16 The Charles Stark Draper Laboratory, Inc. Automated repair of bugs and security vulnerabilities in software
CN110502361A (zh) * 2019-08-29 2019-11-26 扬州大学 面向bug报告的细粒度缺陷定位方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107844414A (zh) * 2016-09-21 2018-03-27 南京大学 一种基于缺陷报告分析的跨项目、并行化缺陷定位方法
WO2019094933A1 (en) * 2017-11-13 2019-05-16 The Charles Stark Draper Laboratory, Inc. Automated repair of bugs and security vulnerabilities in software
CN109376080A (zh) * 2018-09-27 2019-02-22 北京大学 时间适配的自动化缺陷定位方法和装置
CN110502361A (zh) * 2019-08-29 2019-11-26 扬州大学 面向bug报告的细粒度缺陷定位方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李志敏;殷蓓蓓;张萍;王纪兵;王宾;张金鹏;: "一种实时性缺陷定位方法及其可视化实现" *

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112699018A (zh) * 2020-10-23 2021-04-23 西安交通大学 基于软件缺陷关联分析的软件缺陷定位方法
CN112699018B (zh) * 2020-10-23 2023-06-20 西安交通大学 基于软件缺陷关联分析的软件缺陷定位方法
CN112463424A (zh) * 2020-11-13 2021-03-09 扬州大学 一种基于图的端到端程序修复方法
CN112463424B (zh) * 2020-11-13 2023-06-02 扬州大学 一种基于图的端到端程序修复方法
WO2021208701A1 (zh) * 2020-11-23 2021-10-21 平安科技(深圳)有限公司 代码变更的注释生成方法、装置、电子设备及存储介质
CN113010420A (zh) * 2021-03-05 2021-06-22 南方科技大学 一种促进测试代码与产品代码协同演化的方法及终端设备
CN113010420B (zh) * 2021-03-05 2023-05-30 南方科技大学 一种促进测试代码与产品代码协同演化的方法及终端设备
CN114490163A (zh) * 2022-03-28 2022-05-13 北京天维信通科技有限公司 一种故障自愈方法、装置及电子设备
CN114490163B (zh) * 2022-03-28 2022-08-05 北京天维信通科技有限公司 一种故障自愈方法、装置及电子设备
CN116578273A (zh) * 2023-02-28 2023-08-11 中国长江三峡集团有限公司 一种编码结构设计方法、装置、存储介质及电子设备
CN116578273B (zh) * 2023-02-28 2024-02-09 中国长江三峡集团有限公司 一种编码结构设计方法、装置、存储介质及电子设备

Also Published As

Publication number Publication date
CN111309607B (zh) 2023-06-02

Similar Documents

Publication Publication Date Title
CN111309607B (zh) 一种代码方法级别的软件缺陷定位方法
CN111427775B (zh) 一种基于Bert模型的方法层次缺陷定位方法
CN111581474B (zh) 基于多头注意力机制的涉案微博评论的评价对象抽取方法
CN113191148B (zh) 一种基于半监督学习和聚类的轨道交通实体识别方法
CN113127339B (zh) 一种Github开源平台数据的获取方法及源代码缺陷修复系统
CN112183094A (zh) 一种基于多元文本特征的中文语法查错方法及系统
CN112463424A (zh) 一种基于图的端到端程序修复方法
CN111124487A (zh) 代码克隆检测方法、装置以及电子设备
CN116484024A (zh) 一种基于知识图谱的多层次知识库构建方法
Shen et al. Event causality identification via derivative prompt joint learning
CN114547619A (zh) 一种基于树的漏洞修复系统及修复方法
CN114492460B (zh) 基于衍生提示学习的事件因果关系抽取方法
CN114996470A (zh) 一种智能调度检修识别库构建方法
CN114896369A (zh) 基于增量学习优化的故障录波文件通道名称识别方法
CN113343701B (zh) 一种电力设备故障缺陷文本命名实体的抽取方法及装置
CN114648029A (zh) 一种基于BiLSTM-CRF模型的电力领域命名实体识别方法
CN113065352B (zh) 一种电网调度工作文本的操作内容识别方法
CN115617689A (zh) 一种基于cnn模型和领域特征的软件缺陷定位方法
CN113342982B (zh) 融合RoBERTa和外部知识库的企业行业分类方法
CN115392255A (zh) 一种面向桥梁检测文本的少样本机器阅读理解方法
CN113139061A (zh) 一种基于词向量聚类的案件特征提取方法
CN114330350A (zh) 一种命名实体识别方法、装置、电子设备及存储介质
CN110727695A (zh) 面向新型供电城轨列车数据运维的自然语言查询解析方法
Zhang et al. Research on Defect Location Method of C Language Code Based on Deep Learning
CN116821349B (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