CN108733359B - 一种软件程序的自动生成方法 - Google Patents

一种软件程序的自动生成方法 Download PDF

Info

Publication number
CN108733359B
CN108733359B CN201810611516.8A CN201810611516A CN108733359B CN 108733359 B CN108733359 B CN 108733359B CN 201810611516 A CN201810611516 A CN 201810611516A CN 108733359 B CN108733359 B CN 108733359B
Authority
CN
China
Prior art keywords
api
model
natural language
generation
use mode
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.)
Active
Application number
CN201810611516.8A
Other languages
English (en)
Other versions
CN108733359A (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.)
Beihang University
Original Assignee
Beihang 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 Beihang University filed Critical Beihang University
Priority to CN201810611516.8A priority Critical patent/CN108733359B/zh
Publication of CN108733359A publication Critical patent/CN108733359A/zh
Application granted granted Critical
Publication of CN108733359B publication Critical patent/CN108733359B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)

Abstract

一种软件程序的自动生成方法,其生成过程经过包括数据处理模块、用例生成模型和预测生成模块,所述数据处理模块主要负责从开源代码库中抽取模型所需要的训练数据,形成<自然语言注释,API使用模式>的数据集;用例生成模型模块中具体的根据自然语言描述生成API使用模式的模型,根据API之间控制流结构和他们之间的差异性,生成了MCTree Decoder,并通过BLEU指标和准确度进行评估模型的效果;预测生成模块主要是将训练好的模型来进行根据描述功能的自然语言生成相关的API Tree,进而生成API使用模式。

Description

一种软件程序的自动生成方法
技术领域
本发明涉及智能生成领域,尤其涉及一种软件程序的自动生成方法。
背景技术
软件开发过程中,开发者经常要完成某种特定需求的开发任务。如果他们面对不熟悉的开发任务,无法具体完成该任务,就需要寻求帮助信息来辅助他们完成,比如通过搜索引擎Google和Baidu或者开发者社区StackOverflow等。其核心是如何从自然语言描述的需求转化为对应的程序代码。如果能够从自然语言描述的功能需求自动地生成对应的程序代码,将可以帮助开发者高效的完成开发任务,从而极大的提升软件开发效率。在本专利中,我们提出了一种新的软件程序自动生成方法,其能够将自然语言描述的功能生成相关的API用例模式代码(包括程序代码中的所有API和API相关的控制流结构)。例如,由“删除文件”生成“File.new if(File.exists){File.delete}”,从而可以帮助开发者更高效的完成开发任务。
现有技术中,例如利用信息检索技术得到相关代码片段/API用例,有通过自然语言描述生成API序列的DeepAPI方法,还有一些通过神经网络模型来根据自然语言描述生成完整代码的方法。基于信息检索技术的方法,直接将自然语言的功能描述作为查询,利用搜索引擎(例如Lucene)在代码库中进行检索,将检索的结果作为相关内容推荐给开发者;合成API相关代码片段的SWIM方法,该方法首先将自然语言查询映射到相关的API,然后通过搜索引擎查询API相关代码片段,最后将这些代码片段合成得到最终的推荐结果;通过自然语言描述生成API序列的DeepAPI方法,该方法利用RNN Encoder Decoder模型生成API序列;由自然语言描述生成完整代码的方法,将自然语言映射到结构完整、语法正确的代码。
然而现有技术中,基于信息检索的方法,没有很好的捕捉自然语言查询的语义信息,而且仅将匹配度高的部分推荐给开发者,并没有做到根据查询的自然语言语义信息生成代码/API使用模式。这在一定程度上限制了推荐的代码片段或者API用例模式的质量。
合成API相关代码片段的SWIM方法,通过先获得相关的API,检索获得相关的代码片段,最后合成代码片段。相对朴素的信息检索方法,考虑到了API作为代码片段的核心内容这个信息,但是仍然没有很好的捕捉自然语言查询的语义信息,从而使得最终的效果下降。
通过自然语言描述生成API序列的DeepAPI方法,只针对于生成API序列,而对于API之间的依赖关系没有表达。例如API之间的控制结构的依赖关系可以给开发者提供更多的信息,更有助于提高开发者的开发效率。
由自然语言描述生成完整代码的方法具有很大的挑战性,相对于生成API序列或者API用例模式难度更大。目前一些相关工作的效果并不理想,无法生成准确度高的完整代码,从而对开发者的帮助有限。
发明内容
本发明针对于解决由自然语言描述的功能生成API使用模式的问题,该API使用模式包括API和API相关的控制流结构。通过获得自然语言查询的语义信息,从而生成准确的API使用模式的关键问题是:(1)如何较好的捕捉自然语言查询的语义信息;(2)在考虑API使用模式的特殊性的情况下,如何设计解码器来根据自然语言查询的语义信息生成具体的API使用模式。第一个关键问题包括了如何对语义信息进行捕捉和如何进行有效的利用这些语义信息;第二个问题包括如何表示一种有不同类别分支的树形结构和如何针对不同的控制结构进行优化。
为了解决上述问题,本发明提出了一种基于RNN的编码-解码(Encoder-Decoder)模型。其中Encoder部分使用了LSTM网络来捕捉自然语言查询语义内容,来解决现有的一些方法在语义捕捉部分能力的欠缺。解码Decoder部分考虑了API使用模式中控制流结构的特殊性,设计了一种树形结构的API-MCTree Decoder模型来解码Encoder部分获得的语义信息。该解码器采用了一种分级的解码结构,而且考虑了不同控制结构的特性,针对不同的控制结构展开不同的分支结构并进行继续解码。本发明从GitHub中的开源Java项目中收集了<自然语言描述,API使用模式>形式的的数据集,在该数据集上进行训练模型,用来拟合自然语言描述到API使用模式的映射。通过这些问题的考虑和对模块的设计来解决由自然语言描述生成相关API使用模式的问题。
附图说明
图1为本发明的整体框架模块;
图2为一实施例对于API使用模式的解码过程
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本方法的整体流程包括数据处理模块、用例生成模型和预测生成模块。如图1所示为本发明的整体框架模块,数据处理模块主要负责从开源代码库中抽取模型所需要的训练数据,形成<自然语言注释,API使用模式>的数据集。用例生成模型模块主要设计了具体的根据自然语言描述生成API使用模式的模型,考虑API之间控制流结构和他们之间的差异性,生成了MCTree Decoder。并通过BLEU指标和准确度进行评估模型的效果。预测生成模块主要是将训练好的模型来进行根据描述功能的自然语言生成相关的API Tree,并由它生成API使用模式。本发明模型生成API使用模式在测试集上达到BLEU分数44.90%,准确度达到37.45%。
为了获取自然语言描述和对应的API使用模式训练数据,本发明从开源平台上收集星级超过1个的Java项目。将每个Java文件解析成抽象语法树,并从语法树中获得相应的自然语言描述和API使用模式。将一个Java方法的Javadoc中第一句作为该方法要实现功能的总结描述。从Java方法体中抽取出Java JDK(Java Development Kit)API和有关的控制流结构作为相应的API使用模式。在方法体里面,忽略非JDK相关的API。对于发生API调用的部分,首先获得作为参数的API,例如从“o1.m1(o2.m2(),o3.m3())”,可以得到“C2.m2,C3.m3,C1.m1”。对于出现的控制流结构,从其中代码块中抽取API使用模式,然后再按照原顺序将控制结构和包含的API使用模式结合在一起。
对于这些抽取出来的原始API使用模式,本发明进行了3种精简方法。(1)对于不包含API的控制流语句,直接删除这部分;(2)对于if-then-else控制流语句,如果then部分不包含API,可以将else部分移动到then部分,转化得到if-then语句。例如:“if(File.exists){}else{File.delete}”可以转化得到“if(file.exists){File.delete}”。(3)对于do-while控制流语句,我们可以转化得到while控制流语句。
为了更好的学习API使用模式,本发明把它表示成树的形式,即API Multi-Colored Tree(API-MCTree)。除了根之外的叶子节点表示相关的控制流结构,叶子节点表示相关的API和一些特殊符号。
本发明设计了一种编码-解码Encoder-Decoder模型用来由描述功能的自然语言生成API使用模式。Encoder-Decoder模型将自然语言查询x转化到一个固定长度的向量c,然后解码器在向量c的条件下生成API-MCTree,进而得到API使用模式。
Encoder部分是基于LSTM单元的一种循环神经网络,通过循环的处理一个接一个的词来将自然语言序列编码到一个固定大小的向量中。图2中展示了这个过程,Encoder部分将“确保该结果文件夹存在”依次输入到LSTM网络中去,得到最后的自然语言输入的表示向量。
Decoder部分是用于在自然语言向量c的基础上生成API-MCTree。虽然API使用模式可以看成一种序列,采用类似Encoder中序列化的神经网络模型进行解码,但是考虑到了API使用模式的这种树形结构,我们设计了API-MCTree Decoder。如图2所示为一实施例对于API使用模式的解码过程,对于API使用模式“File.new if(File.exists){if(File.mkdir){}}”的解码过程。为了捕捉其中的树形结构信息,本发明定义了形如<n-*>的7种非终结符,分别对应if、else、while、switch、do、for和return。定义了两种特殊符号<s>和</s>,<s>表示第一层的开始,<\s>表示某一层的结束符。在每一层的生成过程中,不断生成相应的终结符和非终结符,直到生成<\s>表示该层的生成过程介结束。每当遇到非终结符,表示该处有一个控制结构,则我们进入到下一层进行解析继续生成,生成该控制结构下的内容。当不再产生新的非终结符而且每一层的生成过程均结束,则生成了<\s>,API使用模式模型的生成的总过程结束。
为了获得更好的效果,本发明模型中采用注意力机制。考虑到输入的自然语言的相关信息可能会有助于更好的预测当前的API使用模式,不仅使用从encoder部分获得的内容向量c,而且还考虑encoder中间获得的语义向量。
模型训练的目标是最大化条件log似然函数,其目标函数是:
Figure BDA0001695669640000051
其中,D是训练集合,x和y分别是其中描述功能的自然语言和对应的API使用模式,θ是模型中的参数集合,p(y|x)是在给定自然语言描述x情况下,模型预测生成API使用模式y的概率。
基于模型训练得到的参数,本发明生成推断算法以一种分层级的方法迭代生成API-MCTree。如果生成的是一个非终结符,这表示一个新的子树会建立生成。得到的API-MCTree最后会通过深度优先遍历,得到最终的API使用模式。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (1)

1.一种软件程序的自动生成方法,其生成过程经过包括数据处理模块、用例生成模型模块和预测生成模块,所述数据处理模块主要负责从开源代码库中抽取模型所需要的训练数据,形成<自然语言注释,API使用模式>的数据集;用例生成模型模块中具体的根据自然语言描述生成API使用模式的模型,根据API之间控制流结构和他们之间的差异性生成了MCTree Decoder,并评估模型的效果;预测生成模块将训练好的模型来进行根据描述功能的自然语言生成相关的API Tree,进而生成API使用模式;所述数据处理模块中从开源平台上收集Java项目,将每个Java文件解析成抽象语法树,并从语法树中获得相应的自然语言描述和API使用模式,所述解析过程为从Java方法体中抽取出Java JDK API和控制流结构作为相应的API使用模式,在所述方法体里面,忽略非JDK相关的API;对于发生API调用的部分,首先获得作为参数的API;对于所述控制流结构,从其中代码块中抽取API使用模式,然后再按照原顺序将控制流结构和包含的API使用模式结合在一起;
所述用例生成模型模块中具有编码-解码模型用于由描述功能的自然语言生成API使用模式,在所述编码部分基于LSTM单元的一种循环神经网络,通过循环的处理词来将自然语言序列编码到一个固定大小的自然语言向量中,所述解码部分用于在自然语言向量的基础上生成API-MCTree,所述API-MCTree中除根之外的叶子节点表示相关的控制流结构,叶子节点表示API和特殊符号,进而得到API使用模式;在所述用例生成模型模块中加入注意力机制,生成API-MCTree包括使用从编码部分获得的内容向量和所述编码中间获得的语义向量;在所述解码部分考虑API使用模式的树形结构和不同控制流结构之间的差异性,首先定义多种非终结符,并定义第一层起始符和层终结符,在每一层的生成过程中,不断生成相应的终结符和非终结符,直到生成层终结符表示该层的生成过程结束,每当遇到非终结符,表示该处有一个控制结构,则进入到下一层进行解析继续生成,生成该控制结构下的内容,当不再产生新的非终结符而且每一层的生成过程均结束,则生成层终结符,API使用模式模型生成的过程结束;模型训练的目标是最大化条件log似然函数L(θ)=∑(x,y)∈D-logp(y|x),其中,D是训练集合,x和y分别是其中描述功能的自然语言和对应的API使用模式,θ是模型中的参数集合,p(y|x)是在给定自然语言描述x情况下,模型预测生成API使用模式y的概率,分层级迭代生成API-MCTree,如果生成的是一个非终结符,则表示一个新的子树会建立生成,得到的API-MCTree最后通过深度优先遍历,得到最终的API使用模式。
CN201810611516.8A 2018-06-14 2018-06-14 一种软件程序的自动生成方法 Active CN108733359B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810611516.8A CN108733359B (zh) 2018-06-14 2018-06-14 一种软件程序的自动生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810611516.8A CN108733359B (zh) 2018-06-14 2018-06-14 一种软件程序的自动生成方法

Publications (2)

Publication Number Publication Date
CN108733359A CN108733359A (zh) 2018-11-02
CN108733359B true CN108733359B (zh) 2020-12-25

Family

ID=63929618

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810611516.8A Active CN108733359B (zh) 2018-06-14 2018-06-14 一种软件程序的自动生成方法

Country Status (1)

Country Link
CN (1) CN108733359B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109614111B (zh) * 2018-12-28 2022-02-01 北京百度网讯科技有限公司 用于生成代码的方法和装置
CN110489102B (zh) * 2019-07-29 2021-06-18 东北大学 一种从自然语言自动生成Python代码的方法
CN111459491B (zh) * 2020-03-17 2021-11-05 南京航空航天大学 一种基于树形神经网络的代码推荐方法

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7761858B2 (en) * 2004-04-23 2010-07-20 Microsoft Corporation Semantic programming language
CN101853314A (zh) * 2010-07-02 2010-10-06 上海交通大学 语义Web服务的自动生成系统
US20160162464A1 (en) * 2014-12-09 2016-06-09 Idibon, Inc. Techniques for combining human and machine learning in natural language processing
US20170075953A1 (en) * 2015-09-11 2017-03-16 Google Inc. Handling failures in processing natural language queries
CN105701253B (zh) * 2016-03-04 2019-03-26 南京大学 中文自然语言问句语义化的知识库自动问答方法
CN109564599A (zh) * 2016-03-31 2019-04-02 克劳斯公司 用于创建和执行数据驱动法律合同的系统和方法
CN107291701B (zh) * 2016-04-01 2020-12-01 阿里巴巴集团控股有限公司 一种机器语言生成方法及装置
CN106843849B (zh) * 2016-12-28 2020-04-14 南京大学 一种基于文档的库函数的代码模型的自动合成方法
CN106873973B (zh) * 2016-12-30 2020-05-08 南京大学 一种基于api文档的约束自动生成方法
CN107506414B (zh) * 2017-08-11 2020-01-07 武汉大学 一种基于长短期记忆网络的代码推荐方法
CN107783960B (zh) * 2017-10-23 2021-07-23 百度在线网络技术(北京)有限公司 用于抽取信息的方法、装置和设备
CN108021390A (zh) * 2017-10-24 2018-05-11 南京航空航天大学 一种Java应用编程接口的文档缺陷自动修复方法
CN107885999B (zh) * 2017-11-08 2019-12-24 华中科技大学 一种基于深度学习的漏洞检测方法及系统
CN108021705B (zh) * 2017-12-27 2020-10-23 鼎富智能科技有限公司 一种答案生成方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
深度学习方法(八):自然语言处理中的Encoder-Decoder模型,基本Sequence to Sequence模型;大饼博士X;《https://blog.csdn.net/xbinworld/article/details/54605408》;20170119;全文 *

Also Published As

Publication number Publication date
CN108733359A (zh) 2018-11-02

Similar Documents

Publication Publication Date Title
Zhang et al. A novel neural source code representation based on abstract syntax tree
Chen et al. Tree-to-tree neural networks for program translation
Brockschmidt et al. Generative code modeling with graphs
CN110489102B (zh) 一种从自然语言自动生成Python代码的方法
CN108733359B (zh) 一种软件程序的自动生成方法
CN110309511B (zh) 基于共享表示的多任务语言分析系统及方法
CN111651198A (zh) 代码摘要自动化生成方法及装置
CN114625844B (zh) 一种代码搜索方法、装置及设备
CN116661805B (zh) 代码表示的生成方法和装置、存储介质及电子设备
CN116204674B (zh) 一种基于视觉概念词关联结构化建模的图像描述方法
US11983513B2 (en) Multi-lingual code generation with zero-shot inference
CN115543437B (zh) 一种代码注释生成方法和系统
CN101751385A (zh) 一种采用层次管道过滤器体系结构的多语言信息抽取方法
CN115438709A (zh) 基于代码属性图的代码相似性检测方法
Banerjee et al. Variable name recovery in decompiled binary code using constrained masked language modeling
CN115658846A (zh) 一种适用于开源软件供应链的智能搜索方法及装置
CN114816517A (zh) 一种层次语义感知的代码表示学习方法
Ji et al. Code clone detection with hierarchical attentive graph embedding
Hu et al. Deep-autocoder: Learning to complete code precisely with induced code tokens
CN117313850A (zh) 一种信息抽取及知识图谱构建系统及方法
CN117574898A (zh) 基于电网设备的领域知识图谱更新方法及系统
Zhang et al. Research and application of machine learning in automatic program generation
CN113468875A (zh) 一种面向SCADA系统自然语言交互接口语义分析的MNet方法
Tao et al. Cram: Code recommendation with programming context based on self-attention mechanism
Xia et al. BContext2Name: Naming Functions in Stripped Binaries with Multi-Label Learning and Neural Networks

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