CN112764784A - 基于神经机器翻译的软件缺陷自动修复方法及装置 - Google Patents
基于神经机器翻译的软件缺陷自动修复方法及装置 Download PDFInfo
- Publication number
- CN112764784A CN112764784A CN202110151609.9A CN202110151609A CN112764784A CN 112764784 A CN112764784 A CN 112764784A CN 202110151609 A CN202110151609 A CN 202110151609A CN 112764784 A CN112764784 A CN 112764784A
- Authority
- CN
- China
- Prior art keywords
- defect
- repairing
- model
- machine translation
- program
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/40—Processing or translation of natural language
- G06F40/58—Use of machine translation, e.g. for multi-lingual retrieval, for server-side translation for client devices or for real-time translation
-
- 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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Biophysics (AREA)
- Mathematical Physics (AREA)
- Biomedical Technology (AREA)
- Molecular Biology (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种基于神经机器翻译的软件缺陷自动修复方法及处理装置,属于软件测试技术领域,该方法包括修复模型训练阶段:将从数据集中选取的缺陷程序、缺陷程序的上下文和修复程序作为训练数据送与基于BiRNN且具有双编码器的神经机器翻译模型,对模型进行训练和调整后得到多个修复不同种类缺陷的专用模型,再利用Random Forest算法将多个模型集合为一个修复效果显著的组合模型;修复模型应用阶段:利用Jaccard缺陷定位技术进行缺陷定位得到怀疑数据表,将怀疑语句及其上下文按照怀疑值从大到小依次送与修复模型并得到相应的候选补丁列表;本发明可在极少的手动操作下进行跨编程语言的软件缺陷自动修复,且能显著提高缺陷修复成功率和修复速度。
Description
技术领域
本申请涉及软件测试技术领域,尤其涉及一种基于神经机器翻译的软件缺陷自动修复方法及装置。
背景技术
软件应用于各行各业,但由于需求理解的偏差、算法和语法错误、开发过程的不合理或开发人员的经验不足等原因,使得在软件开发过程中的各个阶段都会产生软件缺陷,且随着软件复杂度和规模的上升,软件缺陷的数量也逐年上升。有研究表明,软件缺陷的修复成本通常占软件产品总开发成本的50%,在运用传统方法维护软件时,通常面临极大挑战,修复程序难:代码复杂,修复易出错,依赖专家级程序员;人力成本高:时间长,成本消耗巨大;引入错误多:不成熟的补丁引入新错误;不可控条件下无法维护:由于软件逻辑设计复杂性和运行环境的限制,当软件发生错误时,维护人员可能无法远程修复该类错误。诸多的问题使得程序错误修复这一问题上升到新的高度,程序自动修 复方法应运而生并成为研究热点,如果程序自动修复方法能够修复一部分缺陷,那么它将为人类和社会带来显著的价值。
有研究提出了基于搜索的软件缺陷自动修复方法,该方法将修复问题看成是组合优化问题,为了修复程序,将程序中若干位置的代码更新(修改、删除、添加代码)视为个体,即把更新的内容作为程序补丁,并以所有可能更新得到的程序补丁作为一个庞大的搜索空间,在这个补丁搜索空间中寻找最优可行解。基于搜索的软件缺陷自动修复方法面临着搜索空间过大、正确率低和过拟合的问题;另一些研究提出了基于语义的软件缺陷自动修复方法,该方法往往能够获得精确的结果,即正确性要高于基于搜索的方法。该方法在对可能有缺陷的实体进行可疑度排序后,先记录含有缺陷的实体的输入以及输出期望值,并将输入以及输出期望值作为输出补丁的约束,然后将修复约束转化成合成程序补丁的规约,最后用约束求解器合成补丁,利用约束求解器生成的补丁满足输出补丁的所有约束。基于语义的软件缺陷自动修复方法需要更多的程序信息,算法执行的时间较长,其部属和实现也更加困难,并且其同样存在过拟合问题。
经典的软件缺陷自动修复方法如基于搜索的和基于语义的方法,针对不同编程语言的缺陷,这些方法需要大量的手动操作来重新实现修复模式,且普遍存在浪费人力物力,耗时较多和修复效率低的问题。
发明内容
本申请实施例的目的在于提出一种基于神经机器翻译的软件缺陷自动修复方法及装置,以解决现有技术中缺陷修复方法需要大量的手动操作来重新实现修复模式,且普遍存在浪费人力物力,耗时较多和修复效率低的问题。
为了解决上述技术问题,本申请实施例提供一种基于神经机器翻译的软件缺陷自动修复方法,采用了如下所述的技术方案:
一种基于神经机器翻译的软件缺陷自动修复方法,包括:
从数据集中获取不同种类编程语言的若干个缺陷程序、所述缺陷程序上下文和与所述缺陷程序相适配的修复程序共同构成训练数据;
基于自然语言处理技术,对训练数据进行预处理,并将经预处理后的训练数据发送到预设神经机器翻译模型中;
对所述神经机器翻译模型进行超参数调整,并在每次超参数调整完成后,使用预处理后的训练数据对所述模型进行训练,最后获得修复不同类型缺陷的多个专用模型;
基于Random Forest算法对所述多个专用模型进行集成学习,获得一个可修复不同类型缺陷的组合模型;
利用Jaccard缺陷定位技术进行缺陷定位,得到怀疑数据表,其中,所述怀疑数据表包括:怀疑语句,怀疑语句上下文和怀疑语句对应的怀疑值;
将怀疑语句及其上下文按照怀疑值从大到小依次送与修复模型并得到相应的候选补丁列表;
验证候选补丁是否能够通过失败测试用例,若不能,则验证下一候选补丁;若候选补丁通过了失败测试用例,则继续进行回归测试,若通过回归测试则输出补丁。
进一步的,所述不同种类编程语言包括:
Java、C、C++、Python、JavaScript及其他编程语言。
进一步的,所述神经机器翻译模型采用双向循环神经网络BiRNN且具有双编码器。
进一步的,所述缺陷程序的上下文具体包括:
执行调用所述缺陷程序的上层程序和执行调用所述缺陷程序的下层程序。
进一步的,所述神经机器翻译模型包括:
缺陷编码器和上下文编码器,其中,缺陷编码器用于提取错误语句与正确语句之间的关系;上下文编码器可以帮助模型从上下文中学习有用的关系,可将作用域外的变量转换为作用域内的变量。
进一步的,所述对所述神经机器翻译模型进行超参数调整,并在每次超参数调整完成后,使用预处理后的训练数据对所述神经机器翻译模型进行训练,最后获得修复不同类型缺陷的多个专用模型,具体步骤包括:
依次获取预设超参数配置列表中配置数据,并将所述配置数据作为所述神经机器翻译模型的参数进行依次配置,在每次配置完成之后,使用所述预处理后的训练数据进行训练,最后获得修复不同类型缺陷的多个专用模型。
进一步的,所述在对训练数据进行预处理,具体步骤包括:
运用自然语言处理中的单词级别标记化的方法,若识别到以驼峰命名法进行命名的代码单词,则获取所述代码单词中大写字母的下标位置,以下标位置对代码单词进行分词处理,获取多个代码单元;
若识别到以“_”连接的单词,则获取所述单词下划线的下标位置,以下标位置对代码单词进行分词处理,获取多个代码单元。
进一步的,所述基于神经机器翻译的软件缺陷自动修复方法还包括:
对生成的补丁进行有效性验证的步骤,其中,所述有效性验证是指对于一个候选补丁,首先将该补丁应用于程序源代码,获取打过补丁后的可运行程序,然后使用该程序运行失败测试用例以检查补丁是否修复了原有的缺陷,如果通过了失败测试用例则进行回归测试以检查补丁是否引入了新的缺陷,若通过回归测试则认为该补丁为有效补丁。
为了解决上述技术问题,本申请实施例还提供了一种基于神经机器翻译的软件缺陷自动修复装置,采用了如下所述的技术方案:
一种基于神经机器翻译的软件缺陷自动修复装置,包括:
自动修复模型的训练与生成模块,用于将从数据集中选取的缺陷程序、缺陷程序的上下文和修复程序作为训练数据送与基于BiRNN且具有双编码器的神经机器翻译模型,对模型进行训练和调整后得到多个修复不同种类缺陷的专用模型,利用Random Forest算法将多个专用模型集成为一个组合模型,作为自动修复模型;
缺陷定位模块,用于利用Jaccard缺陷定位技术进行缺陷定位得到怀疑数据表;
补丁生成模块,用于将怀疑语句及其上下文按照怀疑值从大到小依次送与修复模型并得到相应的候选补丁列表;
补丁验证模块,用于验证候选补丁是否能够通过失败测试用例,若不能,则验证下一候选补丁;若候选补丁通过了失败测试用例,则继续进行回归测试,若通过回归测试则输出补丁。
为了解决上述技术问题,本申请实施例还提供一种计算机设备,采用了如下所述的技术方案:
一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时实现本申请实施例中提出的一种基于神经机器翻译的软件缺陷自动修复方法的步骤。
与现有技术相比,本申请实施例主要有以下有益效果:
本申请实施例公开了基于神经机器翻译的软件缺陷自动修复方法、装置、设备及存储介质,缺陷具有不同的类型,通过训练一个模型以解决所有类型的缺陷难以取得良好的效果,本发明在模型训练与生成阶段会得到多个修复不同类型缺陷的专用模型,随后会选用Random Forest算法将多个专用模型集成为一个对各种类型缺陷都有显著修复效果的组合模型;因为缺陷程序的上下文信息对于软件缺陷自动修复至关重要,因此本文在训练修复模型时将上下文信息、缺陷程序和修复程序一同作为训练数据。传统的基于神经机器翻译模型的软件缺陷自动修复方法使用单编码器(encoder)的结构,其将上下文信息和缺陷程序合并输入,但是过长的上下文信息会给缺陷程序添加噪音,显著影响修复效果。本文引入了一种具有双编码器的神经机器翻译模型,缺陷编码器只有较短的输入序列,它将能够提取错误语句和正确语句之间的关系。一个单独的上下文编码器可以帮助模型从上下文中学习有用的关系,可将作用域外的变量转换为作用域内的变量;在神经机器翻译领域,编码器和解码器作为特殊的深度神经网络,其具体采用哪种深度神经网络对于缺陷修复的效果具有关键影响作用。因为序列当前位置历史信息和这个位置未来的信息会共同对计算当前位置的输出有帮助,所以本发明在选择编码器的深度神经网络时,采用RNN中的双向RNN(BiRNN),BiRNN对输入的缺陷语句的代码单元不仅保留该单元前面的信息,也保留该单元后面的信息。对于传统的encoder-decoder模型 ,解码器仅仅依赖于编码器的最新隐藏状态,如果输入序列过长,即使是LSTM,一些关于早期序列的信息也会丢失。本发明的解码器采用具有attention机制的RNN,注意力机制克服了上述问题,它将这些长距离依赖关系存储在一个单独的注意映射中,并在每个时间步骤将它们发送给解码器。
附图说明
为了更清楚地说明本申请中的方案,下面将对本申请实施例描述中所需要使用的附图作一个简单介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例的软件缺陷自动修复方法流程图;
图2是本申请实施例的模型训练数据提取流程图;
图3是本申请实施例的训练数据预处理流程图;
图4是本申请实施例的修复模型的训练和集成流程图;
图5是本申请实施例的软件缺陷定位流程图;
图6是本申请实施例的应用修复模型生成候选补丁流程图;
图7是本申请实施例的候选补丁有效性验证流程图;
图8是本申请实施例的候选补丁有效性另一种验证流程图;
图9是本申请基于神经机器翻译的软件缺陷自动修复装置的一个实施例的示意图;
图10为本实施例计算机设备基本结构框图。
具体实施方式
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同;本文中在申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本申请;本申请的说明书和权利要求书及上述附图说明中的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。本申请的说明书和权利要求书或上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
为了使本技术领域的人员更好地理解本申请方案,下面将结合附图,对本申请实施例中的技术方案进行清楚、完整地描述。
下面结合附图对本发明做进一步详细的说明。
本发明提供一种基于神经机器翻译的软件缺陷自动修复处理装置,包括存储器、处理器以及存储在存储器中并可在处理器上运行的计算机程序,其中处理器执行一种基于神经机器翻译的软件缺陷自动修复方法,将从数据集中选取的缺陷程序、缺陷程序的上下文和修复程序作为训练数据送与基于BiRNN且具有双编码器的神经机器翻译模型,对模型进行训练和调整后得到多个修复不同种类缺陷的专用模型,利用Random Forest算法将多个专用模型集成为一个组合模型;利用Jaccard缺陷定位技术进行缺陷定位得到怀疑数据表,将怀疑语句及其上下文按照怀疑值从大到小依次送与修复模型并得到相应的候选补丁列表;验证候选补丁是否能够通过失败测试用例,若不能,则验证下一候选补丁。若候选补丁通过了失败测试用例,则继续进行回归测试,若通过回归测试则输出补丁。
如图1所示,包括具体步骤如下:
步骤S1:修复模型训练数据提取;
从数据集中获取不同种类编程语言的若干个缺陷程序、所述缺陷程序上下文和与所述缺陷程序相适配的修复程序共同构成训练数据;
本发明旨在修复多种编程语言的缺陷,因此在提取训练数据时,需要获取不同编程语言的缺陷程序和修复程序。由于缺陷程序的上下文对于软件缺陷自动修复有至关重要的作用,所以本发明也将缺陷程序的上下文作为训练数据。
如图2所示,具体流程如下:
S101:从开源项目中获得Java、C、C++、Python、JavaScript等缺陷数据集;
S102:从步骤S101中的编程语言缺陷数据集中提取若干个缺陷程序、缺陷程序的上下文和修复程序作为训练数据;
S103:修复模型训练数据提取结束。
步骤S2:训练数据预处理;
基于自然语言处理技术,对训练数据进行预处理,并将经预处理后的训练数据发送到预设神经机器翻译模型中;
数据预处理是NLP中模型训练前至关重要的一步,代码作为非结构化的字符串数据,难以被计算机处理,因此步骤S2需要将代码数据转化为计算机擅于处理的数据。
如图3所示,具体流程如下:
S201:处理代码中的标点符号;
S202:将代码中的单词、运算符以空格符分词,将驼峰字母(如getNumber)和以下划线连接的单词(如_dbg_msg())以驼峰字母(如“N”)和下划线(“_”)分词;
S203:对代码单元的频率进行统计;
S204:给每一个代码单元一个数字id,并将原来的句子替换成数字id的表现形式;
S205:数据预处理结束。
步骤S3:修复模型的训练和集成;
对所述神经机器翻译模型进行超参数调整,并在每次超参数调整完成后,使用预处理后的训练数据对所述模型进行训练,最后获得修复不同类型缺陷的多个专用模型;
基于Random Forest算法对所述多个专用模型进行集成学习,获得一个可修复不同类型缺陷的组合模型;
训练修复模型是本发明最核心的一步,本发明的编码器采用BiRNN,解码器采用利用attention机制的RNN。由于软件缺陷的类型多种多样,通过训练生成一种修复模型来修复不同类型的缺陷难以取得良好的修复效果,因此,在本发明中,通过训练将生成多个修复不同类型缺陷的专用模型,随后,再利用Random Forest算法将多个模型集合成一个修复效果显著的组合模型。
如图4所示,具体流程如下:
S301:将步骤S2中预处理后的训练数据送与修复模型进行训练;
S302:用不同的超参数对模型进行训练和调整,得到修复各种类型缺陷的专用模型;
S303:利用Random Forest算法将多个模型集合成一个修复效果显著的组合模型;
S304:模型训练与集成结束。
步骤S4:软件缺陷定位;
利用Jaccard缺陷定位技术进行缺陷定位,得到怀疑数据表,其中,所述怀疑数据表包括:怀疑语句,怀疑语句上下文和怀疑语句对应的怀疑值;
在修复模型生成后,可将修复模型应用于软件缺陷自动修复的补丁生成阶段中。按照软件缺陷自动修复的流程,在软件出现缺陷后,需要先进行缺陷位置的定位,得到怀疑数据表,怀疑数据表具体包括:怀疑语句,怀疑语句上下文和怀疑语句对应的怀疑值。本发明从现有30种基于程序谱的错误定位技术中选取Jaccard作为错误定位技术。
如图5所示,具体流程如下:
S401:获取缺陷程序源代码;
S402:利用现有成熟的Jaccard定位技术,得到怀疑数据表;
S403:软件缺陷定位结束。
步骤S5:怀疑语句及其上下文预处理;
使用修复模型进行补丁生成时,需要将怀疑数据表中的怀疑语句以及怀疑语句上下文进行预处理,预处理步骤同上述步骤S2,随后,将预处理后的怀疑语句以及怀疑语句的上下文送与修复模型。预处理的具体流程如图3。
步骤S6:应用修复模型生成候选补丁;
将怀疑语句及其上下文按照怀疑值从大到小依次送与修复模型并得到相应的候选补丁列表;
在修复模型培训阶段,需要将缺陷程序、缺陷程序上下文以及修复程序作为训练数据对模型进行训练。在利用修复模型进行补丁生成时,则将缺陷程序,缺陷程序上下文作为输入送与修复模型以生成修复程序。
如图6所示,具体流程如下:
S601:将预处理后的缺陷程序以及缺陷程序上下文送与修复模型;
S602:修复模型生成候选补丁列表;
S603:候选补丁生成结束。
步骤S7:候选补丁验证。
验证候选补丁是否能够通过失败测试用例,若不能,则验证下一候选补丁;若候选补丁通过了失败测试用例,则继续进行回归测试,若通过回归测试则输出补丁。
此阶段主要对生成的补丁进行两方面的验证,一方面要验证补丁是否成功修复原有的缺陷,另一方面要通过回归测试验证原有的程序功能是否被破坏。对于一个候选补丁,首先将该补丁应用于程序源代码,获取打过补丁后的可运行程序,然后使用该程序运行失败测试用例以检查补丁是否修复了原有的缺陷,如果通过了失败测试用例则进行回归测试以检查补丁是否引入了新的缺陷,若通过回归测试则认为该补丁为有效补丁。
第一种验证方式,具体参考图7,如图7所示,具体流程如下:
S701:验证候选补丁是否能够通过失败测试用例,若不能,则验证下一候选补丁;
S702:若候选补丁通过了失败测试用例,则继续进行回归测试,若通过回归测试则输出补丁;
S703:候选补丁验证结束。
此外,对于一个候选补丁,首先将该补丁应用于程序源代码,获取打过补丁后的可运行程序,然后使用该程序运行失败测试用例以检查补丁是否修复了原有的缺陷,如果通过了失败测试用例则进行回归测试以检查补丁是否引入了新的缺陷,若通过回归测试则认为该补丁为有效补丁.
还可以为另一种验证方式,具体参考图8,如图8所示,具体流程如下:
S801:验证候选补丁是否能够通过失败测试用例,若不能,则验证下一候选补丁;
S802:若候选补丁通过了失败测试用例,则继续进行回归测试,若不能通过回归测试则重复执行步骤S4、步骤S5、步骤S6、步骤S7,直到能通过回归测试,则输出当前正在验证的候选补丁;
S803:候选补丁验证结束。
其中,在步骤S802中的多层循环的最外层引入循环结束条件,若任一或者任多内层循环次数不小于预设循环次数,则终止此层补丁修复,对此层补丁修复时当前补丁的下一补丁进行循环修复;若任一或者任多内层循环次数小于预设循环次数且能通过回归测试,则输出当前正在验证的候选补丁。
本申请实施例中所述的基于神经机器翻译的软件缺陷自动修复方法,可以通过训练一个模型以解决所有类型的缺陷难以取得良好的效果,本发明在模型训练与生成阶段会得到多个修复不同类型缺陷的专用模型,随后会选用Random Forest算法将多个专用模型集成为一个对各种类型缺陷都有显著修复效果的组合模型;因为缺陷程序的上下文信息对于软件缺陷自动修复至关重要,因此本文在训练修复模型时将上下文信息、缺陷程序和修复程序一同作为训练数据。传统的基于神经机器翻译模型的软件缺陷自动修复方法使用单编码器(encoder)的结构,其将上下文信息和缺陷程序合并输入,但是过长的上下文信息会给缺陷程序添加噪音,显著影响修复效果。本文引入了一种具有双编码器的神经机器翻译模型,缺陷编码器只有较短的输入序列,它将能够提取错误语句和正确语句之间的关系。一个单独的上下文编码器可以帮助模型从上下文中学习有用的关系,可将作用域外的变量转换为作用域内的变量;在神经机器翻译领域,编码器和解码器作为特殊的深度神经网络,其具体采用哪种深度神经网络对于缺陷修复的效果具有关键影响作用。因为序列当前位置历史信息和这个位置未来的信息会共同对计算当前位置的输出有帮助,所以本发明在选择编码器的深度神经网络时,采用RNN中的双向RNN(BiRNN),BiRNN对输入的缺陷语句的代码单元不仅保留该单元前面的信息,也保留该单元后面的信息。对于传统的encoder-decoder模型 ,解码器仅仅依赖于编码器的最新隐藏状态,如果输入序列过长,即使是LSTM,一些关于早期序列的信息也会丢失。本发明的解码器采用具有attention机制的RNN,注意力机制克服了上述问题,它将这些长距离依赖关系存储在一个单独的注意映射中,并在每个时间步骤将它们发送给解码器。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,前述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等非易失性存储介质,或随机存储记忆体(Random Access Memory,RAM)等。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
进一步参考图9,作为对上述图1所示方法的实现,本申请提供了一种基于神经机器翻译的软件缺陷自动修复装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
如图9所示,本实施例所述的基于神经机器翻译的软件缺陷自动修复装置9包括:自动修复模型的训练与生成模块901、缺陷定位模块902、补丁生成模块903和补丁验证模块904。其中:
自动修复模型的训练与生成模块901,用于将从数据集中选取的缺陷程序、缺陷程序的上下文和修复程序作为训练数据送与基于BiRNN且具有双编码器的神经机器翻译模型,对模型进行训练和调整后得到多个修复不同种类缺陷的专用模型,利用Random Forest算法将多个专用模型集成为一个组合模型,作为自动修复模型;
缺陷定位模块902,用于利用Jaccard缺陷定位技术进行缺陷定位得到怀疑数据表;
补丁生成模块903,用于将怀疑语句及其上下文按照怀疑值从大到小依次送与修复模型并得到相应的候选补丁列表;
补丁验证模块904,用于验证候选补丁是否能够通过失败测试用例,若不能,则验证下一候选补丁;若候选补丁通过了失败测试用例,则继续进行回归测试,若通过回归测试则输出补丁。
本申请实施例所述的基于神经机器翻译的软件缺陷自动修复装置,通过训练一个模型以解决所有类型的缺陷难以取得良好的效果,本发明在模型训练与生成阶段会得到多个修复不同类型缺陷的专用模型,随后会选用Random Forest算法将多个专用模型集成为一个对各种类型缺陷都有显著修复效果的组合模型;因为缺陷程序的上下文信息对于软件缺陷自动修复至关重要,因此本文在训练修复模型时将上下文信息、缺陷程序和修复程序一同作为训练数据。传统的基于神经机器翻译模型的软件缺陷自动修复方法使用单编码器(encoder)的结构,其将上下文信息和缺陷程序合并输入,但是过长的上下文信息会给缺陷程序添加噪音,显著影响修复效果。本文引入了一种具有双编码器的神经机器翻译模型,缺陷编码器只有较短的输入序列,它将能够提取错误语句和正确语句之间的关系。一个单独的上下文编码器可以帮助模型从上下文中学习有用的关系,可将作用域外的变量转换为作用域内的变量;在神经机器翻译领域,编码器和解码器作为特殊的深度神经网络,其具体采用哪种深度神经网络对于缺陷修复的效果具有关键影响作用。因为序列当前位置历史信息和这个位置未来的信息会共同对计算当前位置的输出有帮助,所以本发明在选择编码器的深度神经网络时,采用RNN中的双向RNN(BiRNN),BiRNN对输入的缺陷语句的代码单元不仅保留该单元前面的信息,也保留该单元后面的信息。对于传统的encoder-decoder模型 ,解码器仅仅依赖于编码器的最新隐藏状态,如果输入序列过长,即使是LSTM,一些关于早期序列的信息也会丢失。本发明的解码器采用具有attention机制的RNN,注意力机制克服了上述问题,它将这些长距离依赖关系存储在一个单独的注意映射中,并在每个时间步骤将它们发送给解码器。
为解决上述技术问题,本申请实施例还提供计算机设备。具体请参阅图10,图10为本实施例计算机设备基本结构框图。
所述计算机设备10包括通过系统总线相互通信连接存储器10a、处理器10b、网络接口10c。需要指出的是,图中仅示出了具有组件10a-10c的计算机设备10,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。其中,本技术领域技术人员可以理解,这里的计算机设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
所述计算机设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述计算机设备可以与用户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互。
所述存储器10a至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器10a可以是所述计算机设备10的内部存储单元,例如该计算机设备10的硬盘或内存。在另一些实施例中,所述存储器10a也可以是所述计算机设备10的外部存储设备,例如该计算机设备10上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,所述存储器10a还可以既包括所述计算机设备10的内部存储单元也包括其外部存储设备。本实施例中,所述存储器10a通常用于存储安装于所述计算机设备10的操作系统和各类应用软件,例如基于神经机器翻译的软件缺陷自动修复方法的程序代码等。此外,所述存储器10a还可以用于暂时地存储已经输出或者将要输出的各类数据。
所述处理器10b在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器10b通常用于控制所述计算机设备10的总体操作。本实施例中,所述处理器10b用于运行所述存储器10a中存储的程序代码或者处理数据,例如运行所述基于神经机器翻译的软件缺陷自动修复方法的程序代码。
所述网络接口10c可包括无线网络接口或有线网络接口,该网络接口10c通常用于在所述计算机设备10与其他电子设备之间建立通信连接。
本申请还提供了另一种实施方式,即提供一种非易失性计算机可读存储介质,所述非易失性计算机可读存储介质存储有基于神经机器翻译的软件缺陷自动修复程序,所述基于神经机器翻译的软件缺陷自动修复程序可被至少一个处理器执行,以使所述至少一个处理器执行如上述的基于神经机器翻译的软件缺陷自动修复方法的步骤。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本申请各个实施例所述的方法。
显然,以上所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例,附图中给出了本申请的较佳实施例,但并不限制本申请的专利范围。本申请可以以许多不同的形式来实现,相反地,提供这些实施例的目的是使对本申请的公开内容的理解更加透彻全面。尽管参照前述实施例对本申请进行了详细的说明,对于本领域的技术人员来而言,其依然可以对前述各具体实施方式所记载的技术方案进行修改,或者对其中部分技术特征进行等效替换。凡是利用本申请说明书及附图内容所做的等效结构,直接或间接运用在其他相关的技术领域,均同理在本申请专利保护范围之内。
Claims (10)
1.一种基于神经机器翻译的软件缺陷自动修复方法,其特征在于,包括下述步骤:
1)从数据集中获取不同种类编程语言的若干个缺陷程序、所述缺陷程序上下文和与所述缺陷程序相适配的修复程序共同构成训练数据;
2)基于自然语言处理技术,对训练数据进行预处理,并将经预处理后的训练数据发送到预设神经机器翻译模型中;
3)对所述神经机器翻译模型进行超参数调整,并在每次超参数调整完成后,使用预处理后的训练数据对所述模型进行训练,最后获得修复不同类型缺陷的多个专用模型;
4)基于Random Forest算法对所述多个专用模型进行集成学习,获得一个可修复不同类型缺陷的组合模型;
5)利用Jaccard缺陷定位技术进行缺陷定位,得到怀疑数据表,其中,所述怀疑数据表包括:怀疑语句,怀疑语句上下文和怀疑语句对应的怀疑值;
6)将怀疑语句及其上下文按照怀疑值从大到小依次送与修复模型并得到相应的候选补丁列表;
7)验证候选补丁是否能够通过失败测试用例,若不能,则验证下一候选补丁;若候选补丁通过了失败测试用例,则继续进行回归测试,若通过回归测试则输出补丁。
2.根据权利要求1所述的基于神经机器翻译的软件缺陷自动修复方法,其特征在于,所述不同种类编程语言包括:
Java、C、C++、Python、JavaScript及其他编程语言。
3.根据权利要求2所述的基于神经机器翻译的软件缺陷自动修复方法,其特征在于,所述神经机器翻译模型采用双向循环神经网络BiRNN且具有双编码器。
4.根据权利要求3所述的基于神经机器翻译的软件缺陷自动修复方法,其特征在于,所述缺陷程序的上下文具体包括:
执行调用所述缺陷程序的上层程序和执行调用所述缺陷程序的下层程序。
5.根据权利要求4所述的基于神经机器翻译的软件缺陷自动修复方法,其特征在于,所述神经机器翻译模型包括:
缺陷编码器和上下文编码器,其中,缺陷编码器用于提取错误语句与正确语句之间的关系;上下文编码器可以帮助模型从上下文中学习有用的关系,可将作用域外的变量转换为作用域内的变量。
6.根据权利要求5所述的基于神经机器翻译的软件缺陷自动修复方法,其特征在于,所述对所述神经机器翻译模型进行超参数调整,并在每次超参数调整完成后,使用预处理后的训练数据对所述神经机器翻译模型进行训练,最后获得修复不同类型缺陷的多个专用模型,具体步骤包括:
依次获取预设超参数配置列表中配置数据,并将所述配置数据作为所述神经机器翻译模型的参数进行依次配置,在每次配置完成之后,使用所述预处理后的训练数据进行训练,最后获得修复不同类型缺陷的多个专用模型。
7.根据权利要求1至6任一项所述的基于神经机器翻译的软件缺陷自动修复方法,其特征在于,所述在对训练数据进行预处理,具体步骤包括:
运用自然语言处理中的单词级别标记化的方法,若识别到以驼峰命名法进行命名的代码单词,则获取所述代码单词中大写字母的下标位置,以下标位置对代码单词进行分词处理,获取多个代码单元;
若识别到以“_”连接的单词,则获取所述单词下划线的下标位置,以下标位置对代码单词进行分词处理,获取多个代码单元。
8.根据权利要求7所述的基于神经机器翻译的软件缺陷自动修复方法,其特征在于,所述基于神经机器翻译的软件缺陷自动修复方法还包括:
对生成的补丁进行有效性验证的步骤,其中,所述有效性验证是指对于一个候选补丁,首先将该补丁应用于程序源代码,获取打过补丁后的可运行程序,然后使用该程序运行失败测试用例以检查补丁是否修复了原有的缺陷,如果通过了失败测试用例则进行回归测试以检查补丁是否引入了新的缺陷,若通过回归测试则认为该补丁为有效补丁。
9.一种基于神经机器翻译的软件缺陷自动修复装置,其特征在于,包括:
自动修复模型的训练与生成模块,用于将从数据集中选取的缺陷程序、缺陷程序的上下文和修复程序作为训练数据送与基于BiRNN且具有双编码器的神经机器翻译模型,对模型进行训练和调整后得到多个修复不同种类缺陷的专用模型,利用Random Forest算法将多个专用模型集成为一个组合模型,作为自动修复模型;
缺陷定位模块,用于利用Jaccard缺陷定位技术进行缺陷定位得到怀疑数据表;
补丁生成模块,用于将怀疑语句及其上下文按照怀疑值从大到小依次送与修复模型并得到相应的候选补丁列表;
补丁验证模块,用于验证候选补丁是否能够通过失败测试用例,若不能,则验证下一候选补丁;若候选补丁通过了失败测试用例,则继续进行回归测试,若通过回归测试则输出补丁。
10.一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述的基于神经机器翻译的软件缺陷自动修复方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110151609.9A CN112764784B (zh) | 2021-02-03 | 2021-02-03 | 基于神经机器翻译的软件缺陷自动修复方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110151609.9A CN112764784B (zh) | 2021-02-03 | 2021-02-03 | 基于神经机器翻译的软件缺陷自动修复方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112764784A true CN112764784A (zh) | 2021-05-07 |
CN112764784B CN112764784B (zh) | 2022-10-11 |
Family
ID=75704855
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110151609.9A Active CN112764784B (zh) | 2021-02-03 | 2021-02-03 | 基于神经机器翻译的软件缺陷自动修复方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112764784B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113741886A (zh) * | 2021-08-02 | 2021-12-03 | 扬州大学 | 一种基于图的语句级程序修复方法及系统 |
CN114490163A (zh) * | 2022-03-28 | 2022-05-13 | 北京天维信通科技有限公司 | 一种故障自愈方法、装置及电子设备 |
CN115686923A (zh) * | 2023-01-05 | 2023-02-03 | 中国人民解放军军事科学院系统工程研究院 | 一种软件源代码缺陷自动修复方法及系统 |
CN115994098A (zh) * | 2023-03-22 | 2023-04-21 | 成都大前研软件开发有限公司 | 一种基于人工智能的软件运行异常的分析方法和系统 |
CN116484722A (zh) * | 2023-03-30 | 2023-07-25 | 河南工业大学 | 基于图神经网络的缺陷程序自动修复方法及处理装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109783361A (zh) * | 2018-12-14 | 2019-05-21 | 平安壹钱包电子商务有限公司 | 确定代码质量的方法和装置 |
CN110390103A (zh) * | 2019-07-23 | 2019-10-29 | 中国民航大学 | 基于双编码器的短文本自动摘要方法及系统 |
WO2019242297A1 (zh) * | 2018-06-21 | 2019-12-26 | 深圳壹账通智能科技有限公司 | 基于机器阅读理解的智能对话方法、装置、终端 |
CN111309907A (zh) * | 2020-02-10 | 2020-06-19 | 大连海事大学 | 一种基于深度强化学习的实时Bug分派方法 |
CN111401080A (zh) * | 2018-12-14 | 2020-07-10 | 波音公司 | 神经机器翻译方法以及神经机器翻译装置 |
CN111563044A (zh) * | 2020-05-11 | 2020-08-21 | 西安邮电大学 | 一种基于程序变异的程序谱错误定位方法 |
JP2020140710A (ja) * | 2019-02-26 | 2020-09-03 | 株式会社リコー | ニューラル機械翻訳モデルの訓練方法、装置及び記憶媒体 |
-
2021
- 2021-02-03 CN CN202110151609.9A patent/CN112764784B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019242297A1 (zh) * | 2018-06-21 | 2019-12-26 | 深圳壹账通智能科技有限公司 | 基于机器阅读理解的智能对话方法、装置、终端 |
CN109783361A (zh) * | 2018-12-14 | 2019-05-21 | 平安壹钱包电子商务有限公司 | 确定代码质量的方法和装置 |
CN111401080A (zh) * | 2018-12-14 | 2020-07-10 | 波音公司 | 神经机器翻译方法以及神经机器翻译装置 |
JP2020140710A (ja) * | 2019-02-26 | 2020-09-03 | 株式会社リコー | ニューラル機械翻訳モデルの訓練方法、装置及び記憶媒体 |
CN110390103A (zh) * | 2019-07-23 | 2019-10-29 | 中国民航大学 | 基于双编码器的短文本自动摘要方法及系统 |
CN111309907A (zh) * | 2020-02-10 | 2020-06-19 | 大连海事大学 | 一种基于深度强化学习的实时Bug分派方法 |
CN111563044A (zh) * | 2020-05-11 | 2020-08-21 | 西安邮电大学 | 一种基于程序变异的程序谱错误定位方法 |
Non-Patent Citations (3)
Title |
---|
MICHELE TUFANO 等: "An Empirical Study on Learning Bug-Fixing Patches in theWild via Neural Machine Translation", 《ACM TRANSACTIONS ON SOFTWARE ENGINEERING AND METHODOLOGY》 * |
包乌格德勒等: "基于RNN和CNN的蒙汉神经机器翻译研究", 《中文信息学报》 * |
李梦洁等: "基于PyTorch的机器翻译算法的实现", 《计算机技术与发展》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113741886A (zh) * | 2021-08-02 | 2021-12-03 | 扬州大学 | 一种基于图的语句级程序修复方法及系统 |
CN113741886B (zh) * | 2021-08-02 | 2023-09-26 | 扬州大学 | 一种基于图的语句级程序修复方法及系统 |
CN114490163A (zh) * | 2022-03-28 | 2022-05-13 | 北京天维信通科技有限公司 | 一种故障自愈方法、装置及电子设备 |
CN114490163B (zh) * | 2022-03-28 | 2022-08-05 | 北京天维信通科技有限公司 | 一种故障自愈方法、装置及电子设备 |
CN115686923A (zh) * | 2023-01-05 | 2023-02-03 | 中国人民解放军军事科学院系统工程研究院 | 一种软件源代码缺陷自动修复方法及系统 |
CN115686923B (zh) * | 2023-01-05 | 2023-04-07 | 中国人民解放军军事科学院系统工程研究院 | 一种软件源代码缺陷自动修复方法及系统 |
CN115994098A (zh) * | 2023-03-22 | 2023-04-21 | 成都大前研软件开发有限公司 | 一种基于人工智能的软件运行异常的分析方法和系统 |
CN115994098B (zh) * | 2023-03-22 | 2024-01-16 | 天翼安全科技有限公司 | 一种基于人工智能的软件运行异常的分析方法和系统 |
CN116484722A (zh) * | 2023-03-30 | 2023-07-25 | 河南工业大学 | 基于图神经网络的缺陷程序自动修复方法及处理装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112764784B (zh) | 2022-10-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112764784B (zh) | 基于神经机器翻译的软件缺陷自动修复方法及装置 | |
CN108256074B (zh) | 校验处理的方法、装置、电子设备和存储介质 | |
US9519477B2 (en) | Automatic pre-detection of potential coding issues and recommendation for resolution actions | |
US11775414B2 (en) | Automated bug fixing using deep learning | |
CN111177184A (zh) | 基于自然语言的结构化查询语言转换方法、及其相关设备 | |
CN107688803B (zh) | 字符识别中识别结果的校验方法和装置 | |
CN104572072B (zh) | 一种对基于mvc模式的程序的语言转换方法与设备 | |
CN110162478B (zh) | 一种基于缺陷报告的缺陷代码路径定位方法 | |
AU2019204444B2 (en) | System and method for enrichment of ocr-extracted data | |
CN104699611A (zh) | 一种基于开源软件缺陷代码修改模式的缺陷信息提取方法 | |
CN113642316B (zh) | 中文文本纠错方法、装置、电子设备及存储介质 | |
CN112148602B (zh) | 一种基于历史优化特征智能学习的源代码安全分析方法 | |
CN113841168A (zh) | 包括由分布式轻量级实时边缘引擎支持的主引擎的分层机器学习架构 | |
EP4364044A1 (en) | Automated troubleshooter | |
CN111325031B (zh) | 简历解析方法及装置 | |
CN110020190B (zh) | 一种基于多示例学习的可疑威胁指标验证方法及系统 | |
CN108932225A (zh) | 用于将自然语言需求转换成为语义建模语言语句的方法和系统 | |
CN117312148A (zh) | 一种接口自动化测试方法、装置、计算机设备及存储介质 | |
CN110221900B (zh) | 一种Dockerfile基础镜像版本信息自动补全方法和装置 | |
CN117130593A (zh) | 代码处理方法、系统和电子设备 | |
CN117113080A (zh) | 数据处理和代码处理方法、装置、一体机和存储介质 | |
CN106775914B (zh) | 一种自动生成键值的代码国际化方法及装置 | |
CN110147556B (zh) | 一种多向神经网络翻译系统的构建方法 | |
CN111797612A (zh) | 一种自动化数据功能项抽取的方法 | |
CN113204957B (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 |