CN112162745B - 一种基于api使用概率模型的程序合成方法 - Google Patents
一种基于api使用概率模型的程序合成方法 Download PDFInfo
- Publication number
- CN112162745B CN112162745B CN202011180092.8A CN202011180092A CN112162745B CN 112162745 B CN112162745 B CN 112162745B CN 202011180092 A CN202011180092 A CN 202011180092A CN 112162745 B CN112162745 B CN 112162745B
- Authority
- CN
- China
- Prior art keywords
- api
- probability
- program
- reachable
- model
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
-
- 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/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- 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
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/205—Parsing
- G06F40/216—Parsing using statistical methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/279—Recognition of textual entities
- G06F40/284—Lexical analysis, e.g. tokenisation or collocates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/02—Knowledge representation; Symbolic representation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N7/00—Computing arrangements based on specific mathematical models
- G06N7/01—Probabilistic graphical models, e.g. probabilistic networks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Artificial Intelligence (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Evolutionary Computation (AREA)
- Mathematical Physics (AREA)
- Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Databases & Information Systems (AREA)
- General Health & Medical Sciences (AREA)
- Probability & Statistics with Applications (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Mathematics (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Algebra (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于API使用概率模型的程序合成方法,包括:计算任务描述与指定的范围库中每个API在网络资源中对应文本的相似度后求得API与任务相关度的概率信息,根据API与任务相关度的概率信息为可达图模型的每条边添加概率得到概率的可达图模型;从每个节点概率最大的边开始在概率的可达图模型上搜索可达路径,根据可达路径的API调用序列构造程序框架,对程序框架进行填充得到候选程序,对候选程序的正确性进行验证,直到通过所有测试用例后将候选程序作为结果返回。本发明通过在可达图模型的每条边添加概率为搜索最佳的可达路径提供依据,使得API调用序列任务相关性的概率较高,从而提高程序合成的效率。
Description
技术领域
本发明涉及软件工程领域,尤其涉及一种基于API使用概率模型的程序合成方法。
背景技术
计算机软件目前广泛应用于各行各业,软件的规模和复杂性也越来越高。互联网技术的快速发展给软件工程领域带来了新的机遇和挑战。一方面,互联网技术的发展将软件的生态环境变得更加开放、动态、复杂并且持续演化,使得软件系统的规模和复杂性在急剧增长,对传统的软件开发方法提出了严峻的挑战;另一方面,互联网技术的发展催生了以Linux等开源软件、GitHub等开源社区、TopCoder等众包软件开发以及Stack Overflow等编程问答网站为代表的新型群体化软件开发实践平台,为人类个体之间的交互和协作提供了更好的机会。因此,研究如何充分利用互联网中群体的智慧和能力,以有效提高软件开发的效率和质量具有非常重要的意义。
近年来,随着大量开源软件项目与开源社区的发展,目前在互联网上已经存在着数十亿行的各类程序代码,甚至在很多大型企业内,积累的代码量也已经非常巨大。人们认识到这些大量代码中存在着各种知识,尤其是众多已被广泛使用、高质量的软件代码。这些成果都是前人智慧的结晶,如果能够充分加以利用,将为软件开发工作提供很大帮助。正如互联网中海量的数据使得大数据的应用成为热点,如今互联网中大量的代码和资源催生了利用大规模代码资源库中已有的知识来进行智能化软件开发的新思路。
程序自动构造也常称为代码自动生成,一直以来被认为是提高软件开发自动化程度和最终质量的重要方法,得到了学术界和工业界的广泛关注。程序自动构造是指利用某些机制或方法自动地为计算机软件产生源代码以达到机器编程的目的。该方法使得程序员能够在更高的抽象层次上进行程序的设计工作,极大地提高程序开发的效率。另外,自动生成的程序代码具有良好的编程规范,不容易出现错误,有助于提高软件开发的质量,同时也能够降低软件后期维护的成本。
传统的程序自动构造技术多是采用以形式化方法为基础的技术,主要有模型驱动的软件开发以及基于逻辑规约的程序综合等等。模型驱动的软件开发能够降低软件开发的复杂性,利用领域特定模型语言(Domain-Specific Modeling Languages)描述系统,然后利用转换引擎和生成器自动生成各种类型的软件制品(主要指程序代码)。基于逻辑规约的程序综合利用用户提供的规约,通过定理证明等形式化方法来产生程序代码。这些传统的方法要求开发人员专注于抽象层次更高的模型设计以及规约的书写,将编写代码的工作交由机器完成,能够给软件开发带来极大便利,提高工作效率。但同时我们也看到传统的程序自动构造方法存在着一些局限:第一是依然依赖开发人员设计复杂的模型架构或者逻辑规约,对开发人员要求较高;第二是特定模型面向的需求空间有限,通用性差,当需求发生改变时,复用率很低,需要重新进行开发工作;第三是对于大规模复杂软件,传统的程序自动构造方法能力不足,难以有效处理。
程序合成是程序自动构造方法中的一种,它一直以来被认为是提高软件开发自动化程度和最终质量的重要方法,得到了学术界和工业界的广泛关注。程序合成是指利用某些机制或方法自动地为计算机软件产生源代码以达到机器编程的目的。该方法使得程序员能够在更高的抽象层次上进行程序的设计工作,极大地提高程序开发的效率。另外,自动合成得到的程序代码具有良好的编程规范,不容易出现错误,有助于提高软件开发的质量,同时也能够降低软件后期维护的成本。
目前已经有了许多不同的程序合成技术,如基于示例的程序合成,语法指导的程序合成,基于组件的程序合成和基于神经网络的深度学习编程等等。程序合成中的关键技术问题在于如何限定程序的解空间,并研究出高效的搜索技术。由于搜索空间巨大,许多方法为特定任务定义特定域语言(DSL)。尽管这些技术对于某些领域的问题是有效的,但它们不适合用于一般的程序合成,如寻找满足不同用户需求的Java或C程序。
随着可重用程序库和组件的快速发展,基于组件的程序合成成为程序合成的一个重要研究领域,即从给定的组件库中组装得到满足条件的程序。虽然这些研究大多同样局限于DSL,但也出现了一些用通用编程语言合成程序的方法。例如一些基于API的程序合成方法,它生成的Java程序只包含API。但是由于所有API序列构成的程序空间仍然非常大,找到正确的解决方案是非常耗时的,而且在实践中通常只能找到规模很小的程序。
由此可见,当前的程序合成在实际应用中还是存在着效率不高的问题,无法在有限时间内生成满足条件的程序也直接限制了生成程序的规模。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种基于API使用概率模型的程序合成方法,根据API的使用概率建立模型,提高程序合成效率。
为解决上述技术问题,本发明提出的技术方案为:
一种基于API使用概率模型的程序合成方法,包括以下步骤:
S1)数据获取和处理:从目标网络资源中获取API对应文本集合W1;
S2)概率可达图的构造:计算任务描述与指定的范围库中每个API网络资源中对应文本集合W1的相似度,并对各API对应的相似度加权求和得到各API与任务相关度的概率信息,API与任务相关度的概率信息表征API的使用概率,根据指定的范围库构造Petri网模型,然后根据Petri网模型构造得到可达图模型,根据各API与任务相关度的概率信息为可达图模型中的每条边添加概率得到概率的可达图模型;
S3)基于API使用概率的程序合成:针对概率的可达图模型上的每个节点,按照从大到小的顺序从每个节点对应的概率最大的边开始在概率的可达图模型上搜索一条从初始状态到终结状态的可达路径,根据被搜索的可达路径对应的API调用序列构造得到程序框架,若所有可达路径已搜索完毕,结束并退出;
S4)候选程序正确性验证:按照不同填充方式利用变量和参数对程序框架进行填充后得到候选程序,利用不同测试用例对候选程序的正确性进行验证,直到通过所有测试用例后将候选程序作为结果返回,若未通过测试用例且已得到所有填充方式对应的候选程序,丢弃被搜索的可达路径并返回步骤S3)。
进一步的,步骤S1)具体包括以下步骤:
S11)从互联网抓取HTML格式的API文档,提取每个API的签名和自然语言描述;
S12)从目标网站获取代码块中包含的API信息并构造得到API与文本对应的数据对;
S13)对API的签名和自然语言描述以及API与文本对应的数据对中的自然语言文本进行数据精化,构建API对应文本集合W1,将数据精化后的数据加入API对应文本集合W1中。
进一步的,步骤S2)中计算任务描述与指定的范围库中每个API网络资源中对应文本集合W1的相似度具体包括以下步骤:
S21)选取指定的范围库中的一个API作为当前API,针对当前API,将编程任务中的自然语言描述进行分词得到任务描述集合W2;
S22)利用Word2Vector模型将API对应文本集合W1和任务描述集合W2中的每个单词转化为词向量表示;
S23)计算API对应文本集合W1和任务描述集合W2中文本的相似度sim(W1,W2),函数表达式如下:
上式中,ω为API对应文本集合W1中单词转化的词向量,simmax(ω,W2)为词向量ω和任务描述集合W2中的每个单词词向量的余弦相似度的最大值,idf(ω)为词向量ω的逆文档频率,ω′为任务描述集合W2中单词转化的词向量,simmax(ω′,W1)为词向量ω′和API对应文本集合W1中的每个单词词向量的余弦相似度的最大值,idf(ω′)为词向量ω′的逆文档频率;
S24)返回步骤S21)直到指定的范围库中的所有API选取完毕
进一步的,步骤S3)包括以下步骤:
S31)判断概率的可达图模型中当前节点是否为终结状态,是则跳转步骤S33),否则按照从大到小的顺序从当前节点对应的概率最大的边开始选取一条边到达下一节点;
S32)将下一节点作为当前节点,返回步骤31)直到得到当前可达路径;
S33)判断当前可达路径是否为被丢弃的可达路径,否则进入步骤S34),是则判断是否还有未搜索的可达路径,若还有未搜索的可达路径,将前一节点作为当前节点,返回步骤S31),若所有可达路径已搜索完毕,结束并退出;
S34)根据当前可达路径对应的API调用序列构造得到程序框架,跳转步骤S4)。
进一步的,步骤S4)包括以下步骤:
S41)选取一种填充方式作为当前填充方式,按照当前填充方式利用变量和参数对程序框架进行填充后得到候选程序;
S42)利用不同测试用例对候选程序的正确性进行验证,若通过所有测试用例,将候选程序作为结果返回,若存在未通过的测试用例,进入步骤S43);
S43)判断是否还有未选取的填充方式,是则返回步骤S41),否则丢弃搜索的可达路径并跳转步骤S3)。
与现有技术相比,本发明的优点在于:
本发明通过在可达图模型的每条边添加概率构造概率的可达图模型,为搜索最佳的可达路径提供依据,使得每次搜索的可达路径中API调用序列的API均为任务相关性的概率较高的API,从而提高程序合成的效率。
附图说明
图1为本发明实施例的流程示意图。
图2为本发明实施例的具体流程图。
图3为Petri网模型。
图4为可达图模型。
图5为本发明实施例中概率的可达图模型。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
如图1和图2所示,本发明的基于API使用概率模型的程序合成方法包括以下步骤:
S1)数据获取和处理:从目标网络资源中获取API对应文本集合W1;
S2)概率可达图的构造:计算任务描述与指定的范围库中每个API在网络资源中对应文本集合W1的相似度,并对各API对应的相似度加权求和得到各API与任务相关度的概率信息,API与任务相关度的概率信息表征API的使用概率,根据指定的范围库构造Petri网模型,然后根据Petri网模型构造得到可达图模型,根据各API与任务相关度的概率信息为可达图模型中的每条边添加概率得到概率的可达图模型;
S3)基于API使用概率的程序合成:针对概率的可达图模型上的每个节点,按照从大到小的顺序从每个节点对应的概率最大的边开始在概率的可达图模型上搜索一条从初始状态到终结状态的可达路径,根据被搜索的可达路径对应的API调用序列构造得到程序框架,若所有可达路径已搜索完毕,结束并退出;
S4)候选程序正确性验证:按照不同填充方式利用变量和参数对程序框架进行填充后得到候选程序,利用不同测试用例对候选程序的正确性进行验证,直到通过所有测试用例后将候选程序作为结果返回,若未通过测试用例且已得到所有填充方式对应的候选程序,丢弃被搜索的可达路径并返回步骤S3)。
本实施例的步骤S1)中,目标网络资源包括Javadoc文档和程序员的编程问答网站Stack Overflow,Javadoc是HTML格式的API文档,其中包含每个API的详细描述,为了支持程序的高效生成,需要上述目标网络资源的代码资源中学习得到API的概率知识,步骤S1)具体包括以下步骤:
S11)从互联网抓取Javadoc的HTML文件,使用BeautifulSoup工具提取每个API的签名和自然语言描述;
S12)从Stack Exchange Data Dump上下载得到数据集,获取Stack Overflow中问题的题目以及回答的代码块中包含的API信息,具体包括:对于Stack Overflow中的帖子,选取标签为Java的数据,对于每个问题的回答,筛选分数大于零的帖子;最终构造得到API与文本对应的数据对;
S13)对从Javadoc的HTML文件获取的API的自然语言描述以及从Stack Overflow获取的API与文本对应的数据对中的自然语言文本进行去停词、词干还原以及分词等操作来对数据进行精化,构建API对应文本集合W1,将数据精化后的数据加入API对应文本集合W1中。
本实施例的步骤S2)中计算任务描述与指定的范围库中每个API在网络资源中对应文本集合W1的相似度具体包括以下步骤:
S21)选取指定的范围库中的一个API作为当前API,针对当前API,将编程任务中的自然语言描述进行分词得到对应的API任务描述集合W2;
S22)利用Word2Vector模型将API对应文本集合W1和任务描述集合W2中的每个单词转化为词向量表示;
S23)计算API对应文本集合W1和任务描述集合W2中文本的相似度sim(W1,W2),本实施例中将由W1到W2的相似度sim(W1→W2)以及W2到W1的相似度sim(W2→W1)的平均值作为相似度sim(W1,W2),函数表达式如下:
上式中,ω为API对应文本集合W1中单词转化的词向量,simmax(ω,W2)为词向量ω和任务描述集合W2中的每个单词词向量的余弦相似度的最大值,idf(ω)为词向量ω的逆文档频率,ω′为任务描述集合W2中单词转化的词向量,simmax(ω′,W1)为词向量ω′和API对应文本集合W1中的每个单词词向量的余弦相似度的最大值,idf(ω′)为词向量ω′的逆文档频率;
S24)返回步骤S21)直到指定的范围库中的所有API选取完毕。
根据步骤S21)到S24)得到任务描述与指定的范围库中每个API的Javadoc以及Stack Overflow中文本的相似度之后,对每个API对应的相似度进行加权求和,本实施例中将每个API对应的加权求和的结果作为API与任务相关度的概率信息,本实施例中API与任务相关度的概率表征API的使用概率,任务相关度的概率高的API说明该API的使用概率较高。
如图2所示,本实施例中,得到任务描述与指定的范围库中每个API对应的任务相关度的概率信息后,需要根据可达图模型以及每个API对应的API与任务相关度的概率信息得到概率的可达图模型,因此接下来构造可达图模型。
首先根据指定的范围库构造Petri网模型,Petri网模型刻画了API之前类型的迁移关系。Petri网模型如图3所示,其中圆形节点称为Place(圆圈)代表数据类型,方形节点称为Transition(矩形)代表API,Place中的token(黑色圆点)代表该数据类型的个数。由Place指向Transition的边代表API需要的输入类型,边上的权重代表个数。由Transition指向Place的边代表该API的返回类型,其权重为1,因为每个API只有一个返回值,Petri网模型中每个Place到token数目的映射称为Marking(状态标记),它代表了一个Petri网模型的状态,例如图3中Petri网的Marking可以表示为[2,0,0,0]。
然后根据Petri网模型构造得到可达图模型,如图4所示,可达图模型的节点是Petri网模型的Marking,可达图模型的边是Petri网模型的Transition,代表着迁移关系,通过激活一个Transition(即调用对应的API),可以从一个Marking到达另外一个Marking。
得到可达图模型后,由于可达图模型的边是Petri网模型的Transition,代表指定的范围库的API,因此利用指定的范围库的每个API对应的API与任务相关度的概率信息为可达图模型中每个API对应的边添加概率就可以得到概率的可达图模型。如图5所示,概率可达图中,每个节点代表一个Petri网模型的状态,每个边代表一个迁移关系(API的调用),每个边上的概率值代表了当前状态下,对应的API的使用概率大小,与任务相关度高的API具有更高的使用概率。
可达图中由表示输入类型的状态节点到表示输出类型的状态节点之间的可达路径就代表了一个API的调用序列,例如通过搜索可达路径,得到了如下的API序列:
toLocalDate;toLocalDate;daysbetween;getDays;
根据这个序列可以构造得到候选的程序框架:
LocalDate v1=#1.toLocaldate();
LocalDate v2=#2.toLocaldate();
Days v3=Days.daysBetween(#3,#4);
int v4=#5.getDays();
return#6;
利用参数和变量对程序框架进行填充就可以得到候选的程序:
最终利用用户提供的测试用例,对候选程序的正确性进行验证。如果能够通过所有的测试用例,则返回生成的候选程序。如果有一条测试用例不满足,就回溯。首先选择另外的程序框架填充方式,如果所有填充方式都不能被满足,就继续回溯,丢弃当前可达路径并搜索可达图中另外的可达路径以得到新的程序框架。
基于上述可达图的原理,在概率的可达图模型中每次枚举可达路径的时候,优先选择概率高的迁移关系,使得生成的可达路径的概率尽可能大。与任务相关度高的API具有更高的概率,在生成目标程序的时候,会优先使用跟任务相关度高的API,从而能够提高程序合成的效率。本实施例的步骤S3)包括以下步骤:
S31)判断概率的可达图模型中当前节点是否为终结状态,是则跳转步骤S33),否则按照从大到小的顺序从当前节点对应的概率最大的边开始选取一条边到达下一节点;
S32)将下一节点作为当前节点,返回步骤31)直到得到当前可达路径;
S33)判断当前可达路径是否为被丢弃的可达路径,否则进入步骤S34),是则判断是否还有未搜索的可达路径,若还有未搜索的可达路径,将前一节点作为当前节点,返回步骤S31),若所有可达路径已搜索完毕,结束并退出;
S34)根据当前可达路径对应的API调用序列构造得到程序框架,跳转步骤S4)。
本实施例的步骤S4)包括以下步骤:
S41)选取一种填充方式作为当前填充方式,按照当前填充方式利用变量和参数对程序框架进行填充后得到候选程序;
S42)利用不同测试用例对候选程序的正确性进行验证,若通过所有测试用例,将候选程序作为结果返回,若存在未通过的测试用例,进入步骤S43);
S43)判断是否还有未选取的填充方式,是则返回步骤S41),否则丢弃搜索的可达路径并跳转步骤S3)。
如图5所示,按照步骤S31)至S34)首先选取图中[2,0,0,0]-[1,1,0,0]-[0,2,0,0]的可达路径作为当前可达路径并根据当前可达路径对应的API调用序列构造得到程序框架,然后通过步骤S41)至S43)对程序框架填充得到候选程序并进行测试用例的验证,若通过所有测试用例则将候选程序作为结果输出,若不通过测试用例且所有填充方式均用完,则丢弃放弃可达路径并重新按照步骤S31)至S34)选取可达路径,此时由于图中[2,0,0,0]-[1,1,0,0]-[0,2,0,0]的可达路径被丢弃,因此在步骤S33)中从图中节点[1,1,0,0]重新选择边T2到达节点[0,1,1,0]并返回步骤S31),最终得到[2,0,0,0]-[1,1,0,0]-[0,1,1,0]-[0,0,0,1]的可达路径作为当前可达路径并根据当前可达路径对应的API调用序列构造得到程序框架,然后通过步骤S41)至S43)对程序框架填充得到候选程序并进行测试用例的验证。由此可知,由于每次重新选择的可达路径都是根据剩余可达路径中每个节点对应的概率最大的边进行选取,而使用任务相关度的概率高的API能够提高程序合成的效率。因此本实施例的方法相比于现有的方法能够每一次从所有剩余的可达路径中找到最优可达路径,从而提升了提高程序合成的成功率以及程序合成的效率。
根据步骤S1)至步骤S4),我们在30个编程任务上进行了试验并统计了程序合成的时间,改进后的方法能够减少80%的平均程序合成时间。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
Claims (5)
1.一种基于API使用概率模型的程序合成方法,其特征在于,包括以下步骤:
S1)数据获取和处理:从目标网络资源中获取API对应文本集合W1;
S2)概率可达图的构造:计算任务描述与指定的范围库中每个API在网络资源中对应文本集合W1的相似度,并对各API对应的相似度加权求和得到各API与任务相关度的概率信息,API与任务相关度的概率信息表征API的使用概率,根据指定的范围库构造Petri网模型,然后根据Petri网模型构造得到可达图模型,根据各API与任务相关度的概率信息为可达图模型中的每条边添加概率得到概率的可达图模型;
S3)基于API使用概率的程序合成:针对概率的可达图模型上的每个节点,按照从大到小的顺序从每个节点对应的概率最大的边开始在概率的可达图模型上搜索一条从初始状态到终结状态的可达路径,根据被搜索的可达路径对应的API调用序列构造得到程序框架,若所有可达路径已搜索完毕,结束并退出;
S4)候选程序正确性验证:按照不同填充方式利用变量和参数对程序框架进行填充后得到候选程序,利用不同测试用例对候选程序的正确性进行验证,直到通过所有测试用例后将候选程序作为结果返回,若未通过测试用例且已得到所有填充方式对应的候选程序,丢弃被搜索的可达路径并返回步骤S3)。
2.根据权利要求1所述的基于API使用概率模型的程序合成方法,其特征在于,步骤S1)具体包括以下步骤:
S11)从互联网抓取HTML格式的API文档,提取每个API的签名和自然语言描述;
S12)从目标网站获取代码块中包含的API信息并构造得到API与文本对应的数据对;
S13)对API的签名和自然语言描述以及API与文本对应的数据对中的自然语言文本进行数据精化,构建API对应文本集合W1,将数据精化后的数据加入API对应文本集合W1中。
3.根据权利要求1所述的基于API使用概率模型的程序合成方法,其特征在于,步骤S2)中计算任务描述与指定的范围库中每个API网络资源中对应文本集合W1的相似度具体包括以下步骤:
S21)选取指定的范围库中的一个API作为当前API,针对当前API,将编程任务中的自然语言描述进行分词得到任务描述集合W2;
S22)利用Word2Vector模型将API对应文本集合W1和任务描述集合W2中的每个单词转化为词向量表示;
S23)计算API对应文本集合W1和任务描述集合W2中文本的相似度sim(W1,W2),函数表达式如下:
上式中,ω为API对应文本集合W1中单词转化的词向量,simmax(ω,W2)为词向量ω和任务描述集合W2中的每个单词词向量的余弦相似度的最大值,idf(ω)为词向量ω的逆文档频率,ω′为任务描述集合W2中单词转化的词向量,simmax(ω′,W1)为词向量ω′和API对应文本集合W1中的每个单词词向量的余弦相似度的最大值,idf(ω′)为词向量ω′的逆文档频率;
S24)返回步骤S21)直到指定的范围库中的所有API选取完毕。
4.根据权利要求1所述的基于API使用概率模型的程序合成方法,其特征在于,步骤S3)包括以下步骤:
S31)判断概率的可达图模型中当前节点是否为终结状态,是则跳转步骤S33),否则按照从大到小的顺序从当前节点对应的概率最大的边开始选取一条边到达下一节点;
S32)将下一节点作为当前节点,返回步骤31)直到得到当前可达路径;
S33)判断当前可达路径是否为被丢弃的可达路径,否则进入步骤S34),是则判断是否还有未搜索的可达路径,若还有未搜索的可达路径,将前一节点作为当前节点,返回步骤S31),若所有可达路径已搜索完毕,结束并退出;
S34)根据当前可达路径对应的API调用序列构造得到程序框架,跳转步骤S4)。
5.根据权利要求1所述的基于API使用概率模型的程序合成方法,其特征在于,步骤S4)包括以下步骤:
S41)选取一种填充方式作为当前填充方式,按照当前填充方式利用变量和参数对程序框架进行填充后得到候选程序;
S42)利用不同测试用例对候选程序的正确性进行验证,若通过所有测试用例,将候选程序作为结果返回,若存在未通过的测试用例,进入步骤S43);
S43)判断是否还有未选取的填充方式,是则返回步骤S41),否则丢弃搜索的可达路径并跳转步骤S3)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011180092.8A CN112162745B (zh) | 2020-10-29 | 2020-10-29 | 一种基于api使用概率模型的程序合成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011180092.8A CN112162745B (zh) | 2020-10-29 | 2020-10-29 | 一种基于api使用概率模型的程序合成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112162745A CN112162745A (zh) | 2021-01-01 |
CN112162745B true CN112162745B (zh) | 2022-06-21 |
Family
ID=73865129
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011180092.8A Active CN112162745B (zh) | 2020-10-29 | 2020-10-29 | 一种基于api使用概率模型的程序合成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112162745B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103543993A (zh) * | 2012-07-11 | 2014-01-29 | 深圳市华高软件科技有限公司 | 应用程序构建方法和系统 |
CN104991956A (zh) * | 2015-07-21 | 2015-10-21 | 中国人民解放军信息工程大学 | 基于主题概率模型的微博传播群体划分与账户活跃度评估方法 |
CN105608006A (zh) * | 2015-12-22 | 2016-05-25 | 武汉工程大学 | 一种基于概率模型的程序错误检测方法及系统 |
KR20180122870A (ko) * | 2017-05-04 | 2018-11-14 | 고려대학교 산학협력단 | 프로그램 합성 방법 |
CN110543353A (zh) * | 2019-09-05 | 2019-12-06 | 中国人民解放军国防科技大学 | 结合符号执行和路径模型检验的mpi程序验证方法、系统及介质 |
-
2020
- 2020-10-29 CN CN202011180092.8A patent/CN112162745B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103543993A (zh) * | 2012-07-11 | 2014-01-29 | 深圳市华高软件科技有限公司 | 应用程序构建方法和系统 |
CN104991956A (zh) * | 2015-07-21 | 2015-10-21 | 中国人民解放军信息工程大学 | 基于主题概率模型的微博传播群体划分与账户活跃度评估方法 |
CN105608006A (zh) * | 2015-12-22 | 2016-05-25 | 武汉工程大学 | 一种基于概率模型的程序错误检测方法及系统 |
KR20180122870A (ko) * | 2017-05-04 | 2018-11-14 | 고려대학교 산학협력단 | 프로그램 합성 방법 |
CN110543353A (zh) * | 2019-09-05 | 2019-12-06 | 中国人民解放军国防科技大学 | 结合符号执行和路径模型检验的mpi程序验证方法、系统及介质 |
Non-Patent Citations (2)
Title |
---|
智能化的程序搜索与构造方法综述;刘斌斌等;《软件学报》;20180314(第08期);全文 * |
程序合成研究进展;董威,刘斌斌等;《软件信息科技辑》;20190415;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112162745A (zh) | 2021-01-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112149399B (zh) | 基于rpa及ai的表格信息抽取方法、装置、设备及介质 | |
Shi et al. | Frangel: component-based synthesis with control structures | |
CN109948710B (zh) | 基于api相似度的微服务识别方法 | |
CN112748914B (zh) | 一种应用程序开发方法、装置、电子设备和存储介质 | |
US11307831B2 (en) | Neural code completion via re-ranking | |
US11042467B2 (en) | Automated searching and identification of software patches | |
Wombacher | Evaluation of technical measures for workflow similarity based on a pilot study | |
CN111797407A (zh) | 一种基于深度学习模型优化的xss漏洞检测方法 | |
CN113076538B (zh) | 一种移动应用apk文件内嵌隐私政策提取方法 | |
CN116663019B (zh) | 一种源代码漏洞检测方法、装置和系统 | |
CN113076089B (zh) | 一种基于对象类型的api补全方法 | |
Kolovos et al. | The epsilon pattern language | |
Heiland et al. | Design Patterns for AI-based Systems: A Multivocal Literature Review and Pattern Repository | |
Liu et al. | Prompt Learning for Multi-Label Code Smell Detection: A Promising Approach | |
CN117235138A (zh) | 一种代码迁移过程中的跨库api推荐方法 | |
CN112162745B (zh) | 一种基于api使用概率模型的程序合成方法 | |
CN112767155A (zh) | 智能合约安全交易序列生成方法、装置、介质和设备 | |
CN117289938A (zh) | 一种软件开发用智能辅助系统 | |
Lee et al. | A design pattern detection technique that aids reverse engineering | |
Chen et al. | An Efficient ROS Package Searching Approach Powered By Knowledge Graph. | |
Yu et al. | Effective, Platform-Independent GUI Testing via Image Embedding and Reinforcement Learning | |
Li et al. | A lightweight API recommendation method for App development based on multi-objective evolutionary algorithm | |
Amissah | A framework for executable systems modeling | |
Chafjiri et al. | Vulnerability detection through machine learning-based fuzzing: A systematic review | |
Li et al. | Software Vulnerability Detection Method Based on Abstract Syntax Tree Feature Migration (AST-FMVD) |
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 |