CN112162746B - 一种基于网络知识汇聚和迭代式搜索的程序自动构造方法 - Google Patents
一种基于网络知识汇聚和迭代式搜索的程序自动构造方法 Download PDFInfo
- Publication number
- CN112162746B CN112162746B CN202011180161.5A CN202011180161A CN112162746B CN 112162746 B CN112162746 B CN 112162746B CN 202011180161 A CN202011180161 A CN 202011180161A CN 112162746 B CN112162746 B CN 112162746B
- Authority
- CN
- China
- Prior art keywords
- api
- program
- sequencer
- construction method
- search space
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/35—Creation or generation of source code model driven
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/36—Creation of semantic tools, e.g. ontology or thesauri
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/953—Querying, e.g. by the use of web search engines
-
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明公开了一种基于网络知识汇聚和迭代式搜索的程序自动构造方法,包括:从目标网络资源中挖掘API信息,对API分类并分别构造方法排序器、return排序器以及核心API排序器;分别从构造方法排序器、return排序器和核心API排序器中选取API构建程序搜索空间,根据程序搜索空间中的API进行程序合成,若在当前程序搜索空间中找到了通过测试用例的候选程序,结束并退出,否则继续从构造方法排序器、return排序器和核心API排序器中选取API添加到程序搜索空间并根据程序搜索空间中的API进行程序合成,直到生成了通过测试用例的候选程序。本发明可以对程序搜索空间进行约束和缩小,以提高程序的合成效率。
Description
技术领域
本发明涉及软件工程领域,尤其涉及一种基于网络知识汇聚和迭代式搜索的程序自动构造方法。
背景技术
互联网的快速发展使得人们对于软件的需求越来越多也越来越高,软件已经成为人们生活中必不可少的工具,与此同时软件的开发也面临更严峻的挑战。一方面,随着互联网技术的发展和用户需求的提高,软件系统的规模和复杂性急剧增长,如何提高软件的开发效率和质量是一个挑战;另一方面,对于部分重复而枯燥的软件开发活动,如何能解放软件开发人员编程的双手,将重心放在更有挑战性的任务上是另一个挑战。为了将软件开发人员从复杂繁重的开发工作中解放出来,提升软件开发的效率与质量,程序自动合成将成为软件工程的重点研究与投入方向之一。
程序合成(Program Synthesis)的任务是从底层的程序设计语言中自动发现满足以某种形式的约束表示的用户意图的程序。它旨在让高级编程人员能够在更高的抽象层次上进行程序的设计工作,同时也能辅助初级开发人员进行编程,从而提高程序开发的效率。但是程序合成存在两个固有的挑战:用户意图的不确定性、程序空间的难处理性。为了准确的表达用户意图,可以方法采取形式化规范、自然语言、输入输出示例等作为用户意图对其进行表示。但是对于程序空间这一问题,许多方法提出通过设计领域特定语言来实现对空间的约束,进而保证程序的合成。虽然这些方法在字符串处理、数据操作、几何构造等特定领域是有效的,但是对于通用编程语言(例如,Java)的程序合成仍然是一个挑战。
随着可重用应用程序编程接口(Application Programming Interfaces,APIs)和组件的蓬勃发展,基于组件(例如,APIs)的程序合成为生成通用语言的程序提供了一种可行的方案。而且在软件开发活动中,程序员经常通过查阅相关软件库的标准文档来识别有用的函数,并将这些函数与循环和条件结合起来以实现某些需要的功能。但是,使用大型的软件库不是一件容易的事,经验丰富的程序员甚至都要花几个小时从库中确定一些必要的功能。为了简化类似的编程活动,基于组件的(Component-based program synthesis)程序合成被给予了较多的关注和研究,它旨在通过使用组件库中现有的函数进行排列组合来自动合成程序。SyPet是一个先进的基于组件的程序合成工具,它利用Petri网来对库中组件(APIs)及组件之间的关系进行建模,通过遍历Petri网的可达性图来找到满足用户声明的方法序列,通过使用SAT求解器检查(type-check)变量和参数类型对序列进行填充从而得到一系列候选程序,最终执行测试用例对候选程序进行验证直到找到满足需求的解。尽管合成通用编程语言的程序这一需求得到了满足,但是由于组件库中组件数量的庞大,所构造的程序合成空间也随之很大,将导致搜索解的过程非常耗时,产生了很大的时间开销。其次,由于程序空间随着目标程序规模的扩大呈现指数数量级增长,实际上只能小规模的程序。因此,为了使合成程序的速度更快、规模更大,如何能够缩小程序合成的空间是一个亟待解决的问题。
近年来,随着大量成功的、广泛使用的开源软件系统和平台的发展,目前在互联网上已经存在着数以十亿计的代码标记(tokens of code)和数以百万计的元数据实例(instances of meta-data)。在这些大量代码中存在着各种知识,尤其是众多已被广泛使用、高质量的软件代码,如果我们能够将它们充分加以利用,将会为软件开发工作提供很大的帮助。过去的研究表明,为了解决开发中的未知知识,程序员平均花费19%的编程时间在Web上,每天有超过20个软件开发相关的搜索查询。可以看出,互联网上的知识可以有效地帮助程序员进行编程,同样,我们也可以尝试利用这些知识通过搜索从而排除一些任务不相关的方法来约束程序空间,从而实现对程序合成的辅助作用。
目前的程序合成方法种类多样,基于组件的程序合成作为很重要的一种存在一些不足,例如程序规模的有限性、组合搜索方法的随机性、库的特定性等等。其中,程序空间的复杂性是程序合成中的一大难题,程序搜索空间的收缩能力,决定了程序合成的效率和合成程序的规模的增长能力。为了解决这一问题,我们需要使用自然语言处理、机器学习、统计分析等方法对程序的搜索空间进行限制,从而为软件开发自动化起到推动作用,进一步的提高程序员的开发效率。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种基于网络知识汇聚和迭代式搜索的程序自动构造方法,具有较高的程序合成效率并能够合成大规模程序。
为解决上述技术问题,本发明提出的技术方案为:
一种基于网络知识汇聚和迭代式搜索的程序自动构造方法,包括以下步骤:
S1)在互联网上进行检索:从目标网络资源中根据查询输入检索得到包含API的代码片段;
S2)解析和提取API:解析并提取代码片段中的API得到具有指定格式的API列表,将API列表匹配用户指定包得到API组件列表;
S3)构造API排序器:计算API组件列表中每个API的IDF值和DF值,针对API组件列表中用于构造函数的API,按照DF值排序生成构造方法排序器;针对API组件列表中返回类型与用户提供的函数签名中定义的返回类型一致的API,按照DF值排序生成return排序器;针对API组件列表中所有API,通过IDF值以及包含预先训练得到的单词向量和API向量的向量字典生成核心API排序器;
S4)构造迭代空间并合成程序:分别从构造方法排序器、return排序器和核心API排序器中选取API构建程序搜索空间,根据程序搜索空间中的API进行程序合成,若在当前程序搜索空间中找到了通过测试用例的候选程序,结束并退出,否则继续从构造方法排序器、return排序器和核心API排序器中选取API添加到程序搜索空间并根据程序搜索空间中的API进行程序合成,直到生成了通过测试用例的候选程序。
进一步的,步骤S2)的具体步骤包括:
S21)将包含API的代码片段构建为抽象语法树;
S22)对抽象语法树上的调用信息进行解析并提取API调用得到具有指定格式的API列表;
S23)将API列表与用户提供的指定包进行匹配,丢弃不属于用户指定包的API,将剩余API与用户指定包中方法进行匹配得到对应的完全限定名,将具有完整的限定名的API组成API组件列表用于后续的程序合成过程。
进一步的,步骤S3)中还包括向量字典的发布步骤,具体包括:使用CBOW模型对预设的API序列以及自然语言描述的单词集合进行训练,将生成的单词向量和API向量发布为向量字典。
进一步的,步骤S3)中每个API表示一个文档,DF值为每个API的出现次数,IDF值的函数表达式如下:
上式中,DF为API的DF值。
进一步的,步骤S3)中通过IDF值以及包含预先训练得到的单词向量和API向量的向量字典生成核心API排序器的具体步骤包括:
S31)在API组件列表中选取一个API作为当前API,在向量字典中查找当前API对应的API向量;
S32)对查询输入进行切分、去停用词等预处理得到一系列单词,而后在向量字典中查找每个单词对应的单词向量,根据当前API对应的API向量以及当前API的IDF值计算得到API与查询输入之间的相似性,函数表达式如下:
上式中,W为查询输入中的单词集合,A为当前API,w为查询输入对应的单词向量,a为当前API对应的API向量,simmax为查询输入中的单词集合和当前API之间的最大余弦相似度,idf(w)为查询输入对应的单词向量的逆文档频率,idf(a)为当前API对应的API向量的逆文档频率;
S33)返回步骤S31)直到得到API组件列表中每个API与查询输入之间的相似性,根据每个API与输入之间的相似性对所有API排序得到核心API排序器。
进一步的,步骤S4)具体步骤包括:
S41)选取构造方法排序器中前五个API,return排序器中第一个API,核心API排序器中第一个API以及核心API排序器中第一个API在API列表中对应的上下文API,构建搜索空间,将被选取的API添加到搜索空间中;
S42)根据搜索空间中的API进行程序合成得到候选程序,判断候选程序是否通过测试用例,是则结束并输出候选程序,否则进入步骤S43);
S43)判断构造方法排序器、return排序器和核心API排序器中的API是否选取完毕,是则结束并退出,否则选取构造方法排序器中下一个API,return排序器中下一个API,核心API排序器中下一个API以及核心API排序器中下一个API在API列表中对应的上下文API,将被选取的API添加到搜索空间中并返回步骤S42)。
与现有技术相比,本发明的优点在于:
(1)提高程序合成的效率,目前的基于组件的程序合成工作大都以用户提供的组件库为基础构建程序搜索空间,但是该空间规模非常大而且包含了许多不必要的组件,导致在搜索时会遍历到许多无用解,占据了大量时间,本发明通过挖掘目标网络资源中的API而不是将组件库中的所有API作为程序合成的组件,可以对程序搜索空间进行约束和缩小,以提高程序的合成效率;
(2)处理较大规模的程序,目前的程序合成工作合成出的程序规模长度有限,遇到更长规模的程序时,在有限的时间内无法得到目标解,从而出现超时或报错现象,本发明对API分类并针对每种分类进行排序,选取排名靠前的API构建程序搜索空间,可以在原来的程序合成基础上求解更大规模的程序。
(3)处理同输入输出类型的程序,目前的程序合成往往限定了目标程序为不一致的输入输出类型,从而降低组合的数量,使得在有限时间内能得到解决方案,本发明程序搜索空间的规模由API与查询输入的相关性决定,因此对输入输出类型相同的程序也可以得到正确的解决方案,不需要强行设置参数类型的不一致性。
附图说明
图1为本发明实施例的流程示意图。
图2为本发明实施例的具体流程图。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
如图1和图2所示,本发明的基于网络知识汇聚和迭代式搜索的程序自动构造方法包括以下步骤:
S1)在互联网上进行检索:从目标网络资源中根据查询输入检索得到包含API的代码片段;
S2)解析和提取API:解析并提取代码片段中的API得到具有指定格式的API列表,将API列表匹配用户指定包得到API组件列表;
S3)构造API排序器:计算API组件列表中每个API的IDF值和DF值,针对API组件列表中用于构造函数的API,按照DF值排序生成构造方法排序器;针对API组件列表中返回类型与用户提供的函数签名中定义的返回类型一致的API,按照DF值排序生成return排序器;针对API组件列表中所有API,通过IDF值以及包含预先训练得到的单词向量和API向量的向量字典生成核心API排序器;
S4)构造迭代空间并合成程序:分别从构造方法排序器、return排序器和核心API排序器中选取API构建程序搜索空间,根据程序搜索空间中的API进行程序合成,若在当前程序搜索空间中找到了通过测试用例的候选程序,结束并退出,否则继续从构造方法排序器、return排序器和核心API排序器中选取API添加到程序搜索空间并根据程序搜索空间中的API进行程序合成,直到生成了通过测试用例的候选程序。
本实施例的方法主要包括两个程序空间剪枝思路:
(1)运行前降低组件库规模,我们从网络资源中挖掘API,通过使用挖掘的API而不是组件库中的所有API作为程序合成的组件,可以减少用于构建程序空间的组件数量,在搜索程序前缩小程序空间的规模;
(2)运行时缩小程序搜索空间大小,我们提出了一种迭代策略,在搜索时逐步构造程序搜索空间来合成程序。从一个小规模空间开始构造程序搜索空间,迭代地接近目标程序所需的空间大小。
本实施例的步骤S1)中,在互联网上检索信息时,由于Web页面格式的多样性,我们只能将Web页面中的代码信息作为纯文本处理,导致结果中存在大量的噪声和冗余信息。为了减少干扰,我们执行统计分析并选择4个具有重要编程信息的站点作为知识来源:StackOverflow、JavaDocs、Java Code Example和Codota。作为一个公认的问答网站,StackOverflow包含了足够的问题和答案。JavaDocs包含有关的详细信息API的使用,这对程序员来说是至关重要的。Java Code Example和Codota提供了高质量的代码示例,它们来自Github的项目、在线论坛和一些专业开发人员网站。通过结合这4个网站的信息,大部分编程问题都可以解决。因此我们自定义一个针对以上四个网站进行检索的搜索引擎,根据查询输入检索这四个网站,从检索后返回的前10个url中抓取内容,因为它们包含了该任务所需的足够API使用知识。为了提取嵌入在Web页面中的代码文本,我们分析了这4个站点的Web格式,提取了这些Web页面包含API的代码片段。
如图2所示,本实施例的步骤S2)主要对代码片段进行解析、提取和过滤,步骤S2)的具体步骤包括:
S21)将包含API的代码片段构建为抽象语法树,我们使用Eclipse的Java开发工具解析器(Eclipse JDT parser),将代码构建为一棵抽象语法树(AST),抽象语法树包含了代码的各种信息,例如控制、循环结构以及我们需要的函数调用信息。由于大多数包含API的代码片段在Web页面中缺乏完整的程序结构,为了为它们构造AST,我们尝试通过添加一些用于补全结构的字符串来将这些片段整合为一段完整的程序后再构造AST;
S22)对抽象语法树上的调用信息进行解析并提取API调用,提取之后,我们得到一个具有指定格式(类名.方法名)的API列表;
S23)将API列表与用户提供的指定包进行匹配,丢弃不属于用户指定包的API,将剩余API与用户指定包中方法进行匹配得到对应的完全限定名,将具有完整的限定名的API组成API组件列表用于后续的程序合成过程。这个匹配步骤是由于程序合成器依赖于用户指定包的API,因此对于提取的API列表中的API,我们需要排除那些不属于用户指定包的,而后将我们提取出的、属于用户指定包的那些API(格式为类名.方法名)与用户指定包中具有完全限定名的API进行匹配,通过这种方式,我们获得了最终提供给合成器的API组件列表(具有完整的限定名)。
步骤S3)中我们对API组件列表进行预处理并获取API排序器,我们将API组件列表中的API分为3类并设置了3个对应的API排序器。API排序器的第一种类型是用于构造函数API的构造方法排序器,第二种类型是针对返回类型与用户提供的函数签名中定义的返回类型一致的API,我们将它们命名为return排序器,这两个排序器中的API都是按DF(文档频率)值排序的,第三种类型是核心API排序器。步骤S3)中每个API表示一个文档,DF值为每个API的出现次数,IDF(逆文档频率)值的函数表达式如下:
上式中,DF为API的DF值。
针对步骤S3)中包含预先训练得到的单词向量和API向量的向量字典,该字典为引用Li等人的工作Word2API,向量字典的发布步骤具体包括:使用CBOW模型对预设的API序列以及自然语言描述的单词集合进行训练,生成一系列单词和API向量嵌入,最终将生成的单词向量和API向量发布为向量字典,该训练的模型为Word2API。我们从发布的向量字典可以查找需要的API向量和单词向量,从而进行后续的相似度计算操作。
本实施例的步骤S3)中通过IDF值以及包含预先训练得到的单词向量和API向量的向量字典生成核心API排序器的具体步骤包括:
S31)在API组件列表中选取一个API作为当前API,在向量字典中查找当前API对应的API向量;
S32)对查询输入进行切分、去停用词等预处理得到一系列单词,而后在向量字典中查找每个单词对应的单词向量,根据当前API对应的API向量以及当前API的IDF值计算得到API与查询输入之间的相似性,函数表达式如下:
上式中,W为查询输入中的单词集合,A为当前API,w为查询输入对应的单词向量,a为当前API对应的API向量,simmax为查询输入中的单词集合和当前API之间的最大余弦相似度,idf(w)为查询输入对应的单词向量的逆文档频率,idf(a)为当前API对应的API向量的逆文档频率;
S33)返回步骤S31)直到得到API组件列表中每个API与查询输入之间的相似性,根据每个API与输入之间的相似性对所有API排序得到核心API排序器,核心API排序器中排名最高的API即为核心API。
本实施例的步骤S4)中,我们基于构造的3类排序器选择一些API作为初始子集来初始化程序搜索空间,然后我们在此基础上进行一个迭代过程。我们在构造的程序搜索空间中进行第一轮程序合成,如果合成器在当前程序搜索空间中找到了通过测试用例的候选程序,迭代过程将结束并返回生成的程序。否则,对于下一轮迭代,我们依然基于3类排序器选择一些API添加到程序搜索空间中。如果能够在当前迭代的程序搜索空间中找到解决方案,则该过程结束并返回生成的程序,否则,它将继续进行下一轮迭代直到超时。详细来说,具体步骤包括:
S41)选取构造方法排序器中前五个API,return排序器中第一个API,核心API排序器中第一个API以及核心API排序器中第一个API在API列表中对应的上下文API,构建搜索空间,将被选取的API添加到搜索空间中;
S42)根据搜索空间中的API进行程序合成得到候选程序,判断候选程序是否通过测试用例,是则结束并输出候选程序,否则进入步骤S43);
S43)判断构造方法排序器、return排序器和核心API排序器中的API是否选取完毕,是则结束并退出,否则选取构造方法排序器中下一个API,return排序器中下一个API,核心API排序器中下一个API以及核心API排序器中下一个API在API列表中对应的上下文API,将被选取的API添加到搜索空间中并返回步骤S42)。
根据步骤S41)至S43)的迭代过程,本实施例从一个小规模空间开始构造程序搜索空间,迭代地接近目标程序所需的空间大小,相比于现有程序合成按照用户指定包直接构造程序搜索空间提高了程序合成的效率。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
Claims (6)
1.一种基于网络知识汇聚和迭代式搜索的程序自动构造方法,其特征在于,包括以下步骤:
S1)在互联网上进行检索:从目标网络资源中根据查询输入检索得到包含API的代码片段;
S2)解析和提取API:解析并提取代码片段中的API得到具有指定格式的API列表,将API列表匹配用户指定包得到API组件列表;
S3)构造API排序器:计算API组件列表中每个API的IDF值和DF值,针对API组件列表中用于构造函数的API,按照DF值排序生成构造方法排序器;针对API组件列表中返回类型与用户提供的函数签名中定义的返回类型一致的API,按照DF值排序生成return排序器;针对API组件列表中所有API,通过IDF值以及包含预先训练得到的单词向量和API向量的向量字典生成核心API排序器;
S4)构造迭代空间并合成程序:分别从构造方法排序器、return排序器和核心API排序器中选取API构建程序搜索空间,根据程序搜索空间中的API进行程序合成,若在当前程序搜索空间中找到了通过测试用例的候选程序,结束并退出,否则继续从构造方法排序器、return排序器和核心API排序器中选取API添加到程序搜索空间并根据程序搜索空间中的API进行程序合成,直到生成了通过测试用例的候选程序。
2.根据权利要求1所述的基于网络知识汇聚和迭代式搜索的程序自动构造方法,其特征在于,步骤S2)的具体步骤包括:
S21)将包含API的代码片段构建为抽象语法树;
S22)对抽象语法树上的调用信息进行解析并提取API调用得到具有指定格式的API列表;
S23)将API列表与用户提供的指定包进行匹配,丢弃不属于用户指定包的API,将剩余API与用户指定包中方法进行匹配得到对应的完全限定名,将具有完整的限定名的API组成API组件列表用于后续的程序合成过程。
3.根据权利要求1所述的基于网络知识汇聚和迭代式搜索的程序自动构造方法,其特征在于,步骤S3)中还包括向量字典的发布步骤,具体包括:使用CBOW模型对预设的API序列以及自然语言描述的单词集合进行训练,将生成的单词向量和API向量发布为向量字典。
5.根据权利要求1所述的基于网络知识汇聚和迭代式搜索的程序自动构造方法,其特征在于,步骤S3)中通过IDF值以及包含预先训练得到的单词向量和API向量的向量字典生成核心API排序器的具体步骤包括:
S31)在API组件列表中选取一个API作为当前API,在向量字典中查找当前API对应的API向量;
S32)对查询输入进行切分、去停用词预处理得到一系列单词,而后在向量字典中查找每个单词对应的单词向量,根据当前API对应的API向量以及当前API的IDF值计算得到API与查询输入之间的相似性,函数表达式如下:
上式中,W为查询输入中的单词集合,A为当前API,w为查询输入对应的单词向量,a为当前API对应的API向量,simmax为查询输入中的单词集合和当前API之间的最大余弦相似度,idf(w)为查询输入对应的单词向量的逆文档频率,idf(a)为当前API对应的API向量的逆文档频率;
S33)返回步骤S31)直到得到API组件列表中每个API与查询输入之间的相似性,根据每个API与输入之间的相似性对所有API排序得到核心API排序器。
6.根据权利要求1所述的基于网络知识汇聚和迭代式搜索的程序自动构造方法,其特征在于,步骤S4)具体步骤包括:
S41)选取构造方法排序器中前五个API,return排序器中第一个API,核心API排序器中第一个API以及核心API排序器中第一个API在API列表中对应的上下文API,构建搜索空间,将被选取的API添加到搜索空间中;
S42)根据搜索空间中的API进行程序合成得到候选程序,判断候选程序是否通过测试用例,是则结束并输出候选程序,否则进入步骤S43);
S43)判断构造方法排序器、return排序器和核心API排序器中的API是否选取完毕,是则结束并退出,否则选取构造方法排序器中下一个API,return排序器中下一个API,核心API排序器中下一个API以及核心API排序器中下一个API在API列表中对应的上下文API,将被选取的API添加到搜索空间中并返回步骤S42)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011180161.5A CN112162746B (zh) | 2020-10-29 | 2020-10-29 | 一种基于网络知识汇聚和迭代式搜索的程序自动构造方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011180161.5A CN112162746B (zh) | 2020-10-29 | 2020-10-29 | 一种基于网络知识汇聚和迭代式搜索的程序自动构造方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112162746A CN112162746A (zh) | 2021-01-01 |
CN112162746B true CN112162746B (zh) | 2022-07-05 |
Family
ID=73865126
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011180161.5A Active CN112162746B (zh) | 2020-10-29 | 2020-10-29 | 一种基于网络知识汇聚和迭代式搜索的程序自动构造方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112162746B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4943932A (en) * | 1986-11-25 | 1990-07-24 | Cimflex Teknowledge Corporation | Architecture for composing computational modules uniformly across diverse developmental frameworks |
WO2010030978A2 (en) * | 2008-09-15 | 2010-03-18 | Aman James A | Session automated recording together with rules based indexing, analysis and expression of content |
CN109739494A (zh) * | 2018-12-10 | 2019-05-10 | 复旦大学 | 一种基于Tree-LSTM的API使用代码生成式推荐方法 |
CN110543353A (zh) * | 2019-09-05 | 2019-12-06 | 中国人民解放军国防科技大学 | 结合符号执行和路径模型检验的mpi程序验证方法、系统及介质 |
CN111475159A (zh) * | 2020-03-20 | 2020-07-31 | 吉利汽车研究院(宁波)有限公司 | 一种自动生成程序的方法、装置及存储介质 |
JP2020144509A (ja) * | 2019-03-05 | 2020-09-10 | 株式会社デンソー | 自動コード生成方法、及び自動コード生成プログラム |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8019752B2 (en) * | 2005-11-10 | 2011-09-13 | Endeca Technologies, Inc. | System and method for information retrieval from object collections with complex interrelationships |
US20140013299A1 (en) * | 2012-07-06 | 2014-01-09 | Microsoft Corporation | Generalization and/or specialization of code fragments |
US10210211B2 (en) * | 2014-08-26 | 2019-02-19 | Codota Dot Com Ltd. | Code searching and ranking |
US11586827B2 (en) * | 2017-05-10 | 2023-02-21 | Oracle International Corporation | Generating desired discourse structure from an arbitrary text |
US11132180B2 (en) * | 2018-01-05 | 2021-09-28 | Microsoft Technology Licensing, Llc | Neural-guided deductive search for program synthesis |
US10671355B2 (en) * | 2018-01-21 | 2020-06-02 | Microsoft Technology Licensing, Llc. | Code completion with machine learning |
US10983760B2 (en) * | 2019-03-12 | 2021-04-20 | Tao Guan | Source code generation from web-sourced snippets |
US11392699B2 (en) * | 2019-03-20 | 2022-07-19 | United States Of America As Represented By Secretary Of The Navy | Device, method, and system for synthesizing variants of semantically equivalent computer source code using computer source code components to protect against cyberattacks |
US11113029B2 (en) * | 2019-04-10 | 2021-09-07 | International Business Machines Corporation | Probabilistic matching of web application program interface code usage to specifications |
-
2020
- 2020-10-29 CN CN202011180161.5A patent/CN112162746B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4943932A (en) * | 1986-11-25 | 1990-07-24 | Cimflex Teknowledge Corporation | Architecture for composing computational modules uniformly across diverse developmental frameworks |
WO2010030978A2 (en) * | 2008-09-15 | 2010-03-18 | Aman James A | Session automated recording together with rules based indexing, analysis and expression of content |
CN109739494A (zh) * | 2018-12-10 | 2019-05-10 | 复旦大学 | 一种基于Tree-LSTM的API使用代码生成式推荐方法 |
JP2020144509A (ja) * | 2019-03-05 | 2020-09-10 | 株式会社デンソー | 自動コード生成方法、及び自動コード生成プログラム |
CN110543353A (zh) * | 2019-09-05 | 2019-12-06 | 中国人民解放军国防科技大学 | 结合符号执行和路径模型检验的mpi程序验证方法、系统及介质 |
CN111475159A (zh) * | 2020-03-20 | 2020-07-31 | 吉利汽车研究院(宁波)有限公司 | 一种自动生成程序的方法、装置及存储介质 |
Non-Patent Citations (2)
Title |
---|
智能化的程序搜索与构造方法综述;刘斌斌,董威,王戟;《软件学报》;20180831;第2018卷(第08期);全文 * |
程序合成研究进展;张银珠,董威,刘斌斌;《软件》;20190430;第2019卷(第04期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112162746A (zh) | 2021-01-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108446540B (zh) | 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统 | |
US11520800B2 (en) | Extensible data transformations | |
US20240028607A1 (en) | Facilitating data transformations | |
US11809223B2 (en) | Collecting and annotating transformation tools for use in generating transformation programs | |
US7987416B2 (en) | Systems and methods for modular information extraction | |
US10776380B2 (en) | Efficient transformation program generation | |
WO2013158758A1 (en) | Semantic source code searching | |
US9311058B2 (en) | Jabba language | |
US20210303989A1 (en) | Natural language code search | |
CN107679035B (zh) | 一种信息意图检测方法、装置、设备和存储介质 | |
CN108345457A (zh) | 一种对程序源代码自动生成功能描述性注释的方法 | |
JP2020009430A (ja) | モデル駆動型ドメイン固有検索を実行する方法及びシステム | |
US11263062B2 (en) | API mashup exploration and recommendation | |
Le et al. | Interactive program synthesis | |
CN108563561B (zh) | 一种程序隐性约束提取方法及系统 | |
CN105389328B (zh) | 一种大规模开源软件搜索排序优化方法 | |
CN104391969A (zh) | 确定用户查询语句句法结构的方法及装置 | |
Cheng et al. | A similarity integration method based information retrieval and word embedding in bug localization | |
CN105404677A (zh) | 一种基于树形结构的检索方法 | |
Di Grazia et al. | DiffSearch: A scalable and precise search engine for code changes | |
CN113297251A (zh) | 多源数据检索方法、装置、设备及存储介质 | |
CN104881446A (zh) | 搜索方法及装置 | |
CN111831624A (zh) | 数据表创建方法、装置、计算机设备及存储介质 | |
CN112162746B (zh) | 一种基于网络知识汇聚和迭代式搜索的程序自动构造方法 | |
US9195940B2 (en) | Jabba-type override for correcting or improving output of a model |
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 |