CN110633084B - 基于单个样例的代码转换推导方法和装置 - Google Patents

基于单个样例的代码转换推导方法和装置 Download PDF

Info

Publication number
CN110633084B
CN110633084B CN201910861206.6A CN201910861206A CN110633084B CN 110633084 B CN110633084 B CN 110633084B CN 201910861206 A CN201910861206 A CN 201910861206A CN 110633084 B CN110633084 B CN 110633084B
Authority
CN
China
Prior art keywords
code
hypergraph
modification
matching
extracting
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
CN201910861206.6A
Other languages
English (en)
Other versions
CN110633084A (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.)
Peking University
Original Assignee
Peking 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 Peking University filed Critical Peking University
Priority to CN201910861206.6A priority Critical patent/CN110633084B/zh
Publication of CN110633084A publication Critical patent/CN110633084A/zh
Application granted granted Critical
Publication of CN110633084B publication Critical patent/CN110633084B/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/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Measuring Or Testing Involving Enzymes Or Micro-Organisms (AREA)
  • Stored Programmes (AREA)

Abstract

本发明涉及一种基于单个样例的代码转换推导方法和装置。该方法包括:基于修改前和修改后的样例代码片段,提取代码超图;基于修改前和修改后的样例代码片段,提取代码修改的操作序列;依据代码修改的操作序列,并通过统计分析开源项目代码中的属性频率,对代码超图进行化简,由化简之后的代码超图和代码修改的操作序列共同组成代码转换模板;给定待修改的代码片段并提取其代码超图,然后通过与代码转换模板进行匹配得到修改后的代码片段。本发明可以仅通过一个代码修改的例子来推导出、提取出一般化的代码转换,有效避免了必须依赖于使用大量的相关代码修改来进行推导,可以更有效地推导出合理的代码转换,适用于多种应用场景。

Description

基于单个样例的代码转换推导方法和装置
技术领域
本发明属于计算机科学技术中的软件工程领域,具体涉及一种基于单个样例的代码转换推导方法和装置。
背景技术
软件开发中重复修改较常发生,从已有修改中推导出代码转换可以帮助开发者自动化实现这些代码修改,具体场景有系统性修改、对重复出现的程序缺陷的修复、API适配、代码迁移、代码重构等等。
所属技术领域内的现有工作中,一种典型的方法是从多个修改例子中进行学习来抽象出修改的模式,另一种方法是人工预先定义规则来对修改进行固定的抽象。
所属技术领域内的现有工作中,一方面,对于依赖于使用大量的相关代码修改来推导代码转换的方法,如Gensis(F.Long,P.Amidon,and M.Rinard,“Automatic inferenceof code transforms for patch generation,”in ESEC/FSE,2017,pp.727–739.),其特点为需要大量相同类型的修改去产生代码转换的模板,但这在现实场景中并不一定适用,尤其是对于一些项目特定的代码修改,往往已有的修改例子数量非常少。另一方面,对于人工预先定义抽象规则的方法,如SYDIT(N.Meng,M.Kim,and K.S.McKinley,“Systematicediting:Generating program transformations from an example,”in Proceedings ofthe 32Nd ACM SIGPLAN Conference on Programming Language Design andImplementation,ser.PLDI’11.ACM,2011,pp.329–342.),由于其抽象依赖于固定的规则,往往对于复杂多变的情况不能得到期望的正确修改。
发明内容
本发明针对上述问题,提供一种基于单个样例的代码转换推导方法和装置,能够从单一的代码修改例子中推导出、提取出一般化的代码转换。
本发明采用的技术方案如下:
一种基于单个样例的代码转换推导方法,包括以下步骤:
基于修改前和修改后的样例代码片段,提取代码超图;
基于修改前和修改后的样例代码片段,提取代码修改的操作序列;
依据代码修改的操作序列,并通过统计分析开源项目代码中的属性频率,对代码超图进行化简,由化简之后的代码超图和代码修改的操作序列共同组成代码转换模板;
给定待修改的代码片段并提取其代码超图,然后通过与代码转换模板进行匹配得到修改后的代码片段。
进一步地,所述提取代码超图,包括:
以函数为单位,通过解析代码的抽象语法树结构来获取代码元素;
对获取的代码元素的不同属性进行赋值,同时构建不同代码元素之间的关系;
基于类型分析来获取代码中表达式和参数的类型,对代码元素的属性进行扩充和细化;
基于过程内流非敏感的define-use静态分析来提取数据依赖关系,对代码元素之间的关系进行补充和细化;
根据提取的代码元素以及代码元素之间的关系,构成代码超图;对修改前和修改后的样例代码片段分别得到代码超图。
进一步地,所述代码超图是一个二元组<E,R>,其中E是代码元素的集合,R是超边的集合;每条超边为一个二元组<rname,r>,其中rname代表关系名称,r是关系集合,
Figure BDA0002199811440000021
其中E^k表示集合E的k元笛卡尔积;
所述代码元素定义为一个二元组<id,attrs>,其中id为元素的标号,attrs为属性的集合;每个属性为一个二元组<name,value>,其中name表示属性名,value表示该属性的值。
进一步地,采用以下方式定义元素匹配和超图匹配:
元素匹配:代码元素<id,attrs>能够匹配代码元素<id’,attrs’>,当且仅当对于任意<name,value>∈attrs有<name,value>∈attrs’;
超图匹配:代码超图<E,R>能够匹配代码超图<E’,R’>,当且仅当存在一个映射Match:E->E’,对于任意e∈E,e能够匹配e’=match(e)且对于任意<rname,r>∈R存在<rname’,r’>∈R’满足rname=rname’且
Figure BDA0002199811440000022
其中,match(e)表示e在映射Match中对应的象。
进一步地,所述提取代码修改的操作序列,包括:
将修改前和修改后的样例代码片段解析成抽象语法树的表示形式;
根据树的自顶向下方向比较两个语法树的对应节点,采用贪心的方式记录所有可能的匹配节点对;
根据树的自底向上的方向再次比较两个语法树的对应节点,同样采用贪心的方式记录所有的匹配节点对;
处理匹配结果中的冲突匹配,使得同一颗语法树中的不同节点要满足正确的结构关系。
进一步地,所述对代码超图进行化简,包括:根据统计的开源项目源代码中对应的属性频率,以及人工指定的属性频率阈值,决定每个代码元素和属性的保留和删除。
进一步地,如果一个代码元素的所有属性都被删除,则在代码超图中将该代码元素删除,否则保留该代码元素。
进一步地,所述与代码转换模板进行匹配,包括:
给定一个代码转换模板pattern=<H,seqM>,以及一个待修改的代码片段;其中H是代码超图,seqM是代码修改的操作序列;
提取待修改的代码片段的代码超图M,如果代码超图H成功匹配代码超图M,则将代码转换模板pattern中的代码修改的操作序列seqM应用在代码超图M上,从而得到修改之后的目标超图M’。
一种基于单个样例的代码转换推导装置,其包括:
代码超图提取模块,负责基于修改前和修改后的样例代码片段,提取代码超图;
操作序列提取模块,负责基于修改前和修改后的样例代码片段,提取代码修改的操作序列;
代码转换模板生成模块,负责依据代码修改的操作序列,并通过统计分析开源项目代码中的属性频率,对代码超图进行化简,由化简之后的代码超图和代码修改的操作序列共同组成代码转换模板;
匹配模块,给定待修改的代码片段并提取其代码超图,然后通过与代码转换模板进行匹配得到修改后的代码片段。
一种计算机,其特征在于,包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行本发明的基于单个样例的代码转换推导方法的指令。
本发明的关键改进点是:
1、通过单一的代码修改例子来进行一般化的代码转换的推导;
2、利用海量代码的统计信息来指导推导过程;
3、该技术具有一定的通用性,适用于多个应用场景:如系统性编辑、程序缺陷修复等。
对比现有技术,本发明的有益效果如下:
本发明提出的技术可以仅通过一个代码修改的例子来推导出、提取出一般化的代码转换,有效避免了必须依赖于使用大量的相关代码修改来进行推导。同时,本发明利用海量代码的统计信息来指导推导,基于代码上下文和对已有的海量代码的统计信息来定义选取的规则,可以更有效地推导出合理的代码转换。并且,该技术具有一定的通用性,适用于多个应用场景:如系统性编辑、代码缺陷修复。
附图说明
图1是本发明方法的步骤流程图。
图2是修改前后样例代码片段的一个例子。
图3对应于图2的例子的代码转换模板示意图。
图4是采用图3的代码转换模板进行匹配的示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面通过具体实施例和附图,对本发明做进一步详细说明。显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
首先给出如下若干定义:
定义1代码元素(Code Element)
代码元素定义为一个二元组<id,attrs>,其中id为元素的标号,attrs为一个属性的集合。每个属性为一个二元组<name,value>,name表示属性名,value表示该属性的值。
举例来说,属性可以是<“变量”(Variable),12345>、<“程序语句”(Statement),“a+b”>等等。
定义2代码超图(Code Hypergraph)
代码超图是一个二元组<E,R>,其中E是一个代码元素的集合,R是一个超边(hyperedge)的集合。每条超边为一个二元组<rname,r>,其中rname代表关系名称,r是一个关系集合,
Figure BDA0002199811440000041
Figure BDA0002199811440000042
其中E^k表示集合E的k元笛卡尔积。
其中,“关系”主要包含了以下三种:在抽象语法树中的父子关系、祖先关系(父子关系的传递闭包)、过程内数据依赖。其中“过程”是本领域公知的概念。
定义3元素匹配
代码元素<id,attrs>能够匹配代码元素<id’,attrs’>,当且仅当对于任意<name,value>∈attrs有<name,value>∈attrs’。
定义4超图匹配
代码超图<E,R>能够匹配代码超图<E’,R’>,当且仅当存在一个映射Match:E->E’,对于任意e∈E,e能够匹配e’=match(e)且对于任意<rname,r>∈R存在<rname’,r’>∈R’满足rname=rname’且
Figure BDA0002199811440000043
其中,match(e)表示e在映射Match中对应的象。
定义5代码转换模板
代码转换模板是一个二元组<g,seqM>。这里g是一个代码超图。seqM是一个代码修改的操作序列,即对于任意m∈seqM,id∈preIDs(m)且attrName∈preAttrs(m,id),存在g中一个元素<id’,attrs’>满足id=id’且attrs’包含attrName。其中,preIDs(m)表示操作m中修改前的id集合,preAttrs(m,id)表示操作m中修改前的属性名称集合。
定义6代码转换模板应用
给定一个代码超图g’=<E’,R’>,一个代码转换模板<g,seqM>和一个从g到g’的匹配M,应用代码转换模板可得到一个修改序列seqM[id0\id0’,…,idn\idn’],其中<id0,id0’>,..,<idn,idn’>∈M。换句话说,在原始修改序列中的元素idn被替换成了对应匹配的元素idn’。然后就可以应用替换后的修改序列来得到修改后的代码。其中,id0\id0’表示将id0替换为id0’,而<idn,idn’>表示idn、idn’这两个在匹配M中是一个匹配对。
基于修改前后的样例代码片段,本发明通过以下步骤来实现代码转换(如图1所示):
1)基于修改前后的样例代码片段,提取代码超图;
2)基于修改前后的样例代码片段,提取代码修改的操作序列;
3)推导代码转换模板:依据步骤2)得到的代码修改的操作序列以及通过统计分析大量开源项目代码中的代码的属性频率,决定步骤1)中得到的代码超图中的每一个代码元素是否保留,即进行代码超图的化简。最后由化简之后的代码超图和代码修改的操作序列共同组成代码转换模板。
4)给定一个新的待修改的代码片段,提取其代码超图,然后匹配并应用代码转换模板来得到应用代码转换模板后的代码片段。
以下对于每个步骤进行详细展开说明:
步骤1:
本步骤提取修改前后代码的如下信息来构造代码片段的超图:
1、以函数为单位,通过解析代码的抽象语法树结构来获取代码元素,比如变量或者函数调用等。
2、在上一步的基础之上,对所获取的代码元素的不同属性进行赋值(比如节点的类型、节点的存储内容等),同时构建不同节点之间的关系(比如父子关系或者祖先关系等)。其中节点即是指代码元素。
3、基于类型分析来获取代码中表达式和参数的类型,对代码元素的属性进行扩充和细化。其中“类型分析”指的是程序中的元素的数值类型进行分析,比如一个变量是“数值类型”或者是一个“字符串类型”等。
4、基于过程内流非敏感的define-use静态分析来提取数据依赖关系,对代码元素之间的关系进行补充和细化。其中“过程内的流非敏感define-use静态分析”为本领域公知的方法。
根据提取的上述信息(代码元素以及代码元素之间的关系),构成代码超图。针对修改前后的代码,分别执行上述的操作,可以分别得到修改前后代码片段的超图表示形式。
步骤2:
使用GumTree算法(Jean-Rémy Falleri,Floréal Morandat,Xavier Blanc,Matias Martinez,and Martin Monperrus.2014.Fine-grained and accurate sourcecode differencing.In Proceedings of the 29th ACM/IEEE internationalconference on Automated software engineering(ASE′14).ACM,New York,NY,USA,313-324.)来提取代码修改的操作序列。其主要的步骤包含以下4步:
(1)给定两个代码片段(即修改前和修改后的样例代码片段),首先将其解析成抽象语法树的表示形式。
(2)根据树的自顶向下方向比较两个语法树的对应节点,采用贪心的方式记录所有可能的匹配节点对。
(3)根据树的自底向上的方向再次比较两个语法树的对应节点,同样采用贪心的算法记录所有的匹配节点对。
(4)处理上面的匹配结果中的冲突匹配。根据上面的匹配过程可知,一个节点可能会匹配到一个节点的集合,此步的目标是使得每个节点最多只有一个匹配的节点。该过程主要遵循的约束是满足同一颗语法树中的不同节点要满足正确的结构关系,即在语法树A中的父子节点a和b,其匹配的节点a’和b’也需要满足对应的父子关系(注意,此处的父子关系可以是祖先关系)。
步骤3:
元素的选取和属性的选取,从数据代码仓库中统计不同的元素和属性在其中的分布情况,然后根据人工指定的属性频率阈值来决定每个代码元素和属性的保留和删除。具体操作是,搜集大量的开源项目源代码,对其源代码采用步骤一的分析方法来抽取代码超图。然后统计这些开元项目代码中对应的属性的频率信息,比如在开源项目中变量名称为’a’的属性。然后根据该属性出现的频率以及人工设定的阈值决定是否保留。只有当其频率大于给定的阈值时,对应的属性被保留,否则删除。在本实施例中,选取了如下频率:频率=包含该元素或属性的文件数/总文件数,并设置阈值为0.005。
根据以上的方法,给定一个代码超图,对其中的每一个代码元素的属性考虑其是否被保留和删除,如果一个代码元素的所有属性都被删除,那么在代码超图中,该代码元素将被删除,否则代码元素会被保留。最后所有与被保留元素相关的“关系”被保留,而涉及代码元素不在代码超图中的“关系”会被删除。
最终剩下的元素、属性和元素之间的关系构成一个超图H,加上代码修改的操作序列seqM,这两部分就组成了对应的代码转换模板<H,seqM>。
步骤4:
该步为代码转换模板的匹配过程,当给定一个代码转换模板pattern=<H,seqM>,以及一个代码片段,首先是根据步骤1可以提取代码片段的超图M(注意此处的超图保留所有的代码元素、属性和关系)。该代码片段可以应用给定的代码转换模板当且仅当超图H匹配超图M(见定义4超图匹配)。如果超图H成功匹配超图M,则根据定义6,可以将代码转换模板pattern中的修改seqM应用在超图M上从而得到修改之后的目标超图M’。
下面提供一个具体应用实例:
修改前后的样例代码片段如图2所示。其中,上半部分(67-70行)是一个代码修改示意图,其中以“+”起始的行是新增加的代码,以“-”起始的行是需要删除的代码。同样的,下半部分(34-35行)是另外的一个代码修改示意图,使用的修改操作和上半部分代码的修改是一致的,目标是根据上半部分的代码可以提取一个代码修改操作,然后将该操作自动的适配到下面的代码上,使得其实现相同的修改。
本发明具体应用于该例子如图3、图4所示。在匹配两个代码超图时,如果只考虑元素属性,可以得到如下映射match(p1)∈{n1},match{p2}∈{n2},match{p3}∈{n3},match{p4}∈{n4},match(p5)∈{n2,n3,…,n7}(其中p和n代表节点的id)。再进一步考虑元素之间的关系,会过滤掉对于p5来说的额外元素,得到一个合法的匹配:match(p1)∈{n1},match{p2}∈{n2},match{p3}∈{n3},match{p4}∈{n4},match(p5)∈{n5}。基于该匹配可以得到如下代码修改的操作序列:delete(n2,n4)。图3、图4中符号“⊥”表示该属性对该节点不适用,即不存在该属性。
实验选取了两个场景将本发明和已有方法进行了对比。
在系统性修改的场景中,使用了SYDIT数据集(Na Meng,Miryung Kim,andKathryn S.McKinley.2011.Systematic editing:generating program transformationsfrom an example.In Proceedings of the 32nd ACM SIGPLAN Conference onProgramming Language Design and Implementation(PLDI′11).ACM,New York,NY,USA,329-342)和C3数据集(Patrick Kreutzer,Georg Dotzler,Matthias Ring,BjoernM.Eskofier,and Michael Philippsen.2016.Automatic clustering of codechanges.In Proceedings of the 13th International Conference on MiningSoftware Repositories(MSR′16).ACM,New York,NY,USA,61-72.)进行实验。表1的对比实验效果显示,本发明提出的方法的效果显著优于SYDIT。
表1.本发明和SYDIT在系统性修改场景下的对比实验
Figure BDA0002199811440000081
其中,括号中的百分比指的是与“总程序对数”的比例。x/y表示x个语法等价和y个语义等价,比如-/40等,其中“-”表示不适用该项。对于C3数据集中的数据,为了清晰,只保留了y而省略了x。
在程序缺陷修复的场景中,本发明提出的方法在程序缺陷修复公开数据集Defects4J(R.Just,D.Jalali,and M.D.Ernst,“Defects4j:A database of existingfaults to enable controlled testing studies for java programs,”in ISSTA,2014,pp.437–440.)上成功修复了17个程序缺陷,且其中有4个是现有所有技术都未能修复的。
基于同一发明构思,本发明的另一个实施例提供一种基于单个样例的代码转换推导装置,其包括:
代码超图提取模块,负责基于修改前和修改后的样例代码片段,提取代码超图;
操作序列提取模块,负责基于修改前和修改后的样例代码片段,提取代码修改的操作序列;
代码转换模板生成模块,负责依据代码修改的操作序列,并通过统计分析开源项目代码中的属性频率,对代码超图进行化简,由化简之后的代码超图和代码修改的操作序列共同组成代码转换模板;
匹配模块,给定待修改的代码片段并提取其代码超图,然后通过与代码转换模板进行匹配得到修改后的代码片段。
基于同一发明构思,本发明的另一个实施例提供一种计算机/服务器,其包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行本发明方法中各步骤的指令。
基于同一发明构思,本发明的另一个实施例提供一种计算机可读存储介质(如ROM/RAM、磁盘、光盘),所述计算机可读存储介质存储计算机程序,所述计算机程序被计算机执行时,实现本发明方法的各个步骤。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的原理和范围,本发明的保护范围应以权利要求书所述为准。

Claims (8)

1.一种基于单个样例的代码转换推导方法,其特征在于,包括以下步骤:
基于修改前和修改后的样例代码片段,提取代码超图;所述代码超图是一个二元组<E,R>,其中E是一个代码元素的集合,R是一个超边的集合;每条超边为一个二元组<rname,r>,其中rname代表关系名称,r是一个关系集合,
Figure FDA0002606645820000011
其中E^k表示集合E的k元笛卡尔积;所述代码元素定义为一个二元组<id,attrs>,其中id为元素的标号,attrs为属性的集合;每个属性为一个二元组<name,value>,其中name表示属性名,value表示该属性的值;
基于修改前和修改后的样例代码片段,提取代码修改的操作序列;
依据代码修改的操作序列,并通过统计分析开源项目代码中的属性频率,对代码超图进行化简,由化简之后的代码超图和代码修改的操作序列共同组成代码转换模板;
给定待修改的代码片段并提取其代码超图,然后通过与代码转换模板进行匹配得到修改后的代码片段;
所述提取代码超图,包括:
以函数为单位,通过解析代码的抽象语法树结构来获取代码元素;
对获取的代码元素的不同属性进行赋值,同时构建不同代码元素之间的关系;
基于类型分析来获取代码中表达式和参数的类型,对代码元素的属性进行扩充和细化;
基于过程内流非敏感的define-use静态分析来提取数据依赖关系,对代码元素之间的关系进行补充和细化;
根据提取的代码元素以及代码元素之间的关系,构成代码超图;对修改前和修改后的样例代码片段分别得到代码超图。
2.根据权利要求1所述的方法,其特征在于,采用以下方式定义元素匹配和超图匹配:
元素匹配:代码元素<id,attrs>能够匹配代码元素<id’,attrs’>,当且仅当对于任意<name,value>∈attrs有<name,value>∈attrs’;
超图匹配:代码超图<E,R>能够匹配代码超图<E’,R’>,当且仅当存在一个映射Match:E->E’,对于任意e∈E,e能够匹配e’=match(e)且对于任意<rname,r>∈R存在<rname’,r’>∈R’满足rname=rname’且
Figure FDA0002606645820000012
其中,match(e)表示e在映射Match中对应的象。
3.根据权利要求1所述的方法,其特征在于,所述提取代码修改的操作序列,包括:
将修改前和修改后的样例代码片段解析成抽象语法树的表示形式;
根据树的自顶向下方向比较两个语法树的对应节点,采用贪心的方式记录所有可能的匹配节点对;
根据树的自底向上的方向再次比较两个语法树的对应节点,同样采用贪心的方式记录所有的匹配节点对;
处理匹配结果中的冲突匹配,使得同一颗语法树中的不同节点要满足正确的结构关系。
4.根据权利要求1所述的方法,其特征在于,所述对代码超图进行化简,包括:根据统计的开源项目源代码中对应的属性频率,以及人工指定的属性频率阈值,决定每个代码元素和属性的保留和删除。
5.根据权利要求4所述的方法,其特征在于,如果一个代码元素的所有属性都被删除,则在代码超图中将该代码元素删除,否则保留该代码元素。
6.根据权利要求1所述的方法,其特征在于,所述与代码转换模板进行匹配,包括:
给定一个代码转换模板pattern=<H,seqM>,以及一个待修改的代码片段;其中H是代码超图,seqM是代码修改的操作序列;
提取待修改的代码片段的代码超图M,如果代码超图H成功匹配代码超图M,则将代码转换模板pattern中的代码修改的操作序列seqM应用在代码超图M上,从而得到修改之后的目标超图M’。
7.一种采用权利要求1~6中任一权利要求所述方法的基于单个样例的代码转换推导装置,其特征在于,包括:
代码超图提取模块,负责基于修改前和修改后的样例代码片段,提取代码超图;
操作序列提取模块,负责基于修改前和修改后的样例代码片段,提取代码修改的操作序列;
代码转换模板生成模块,负责依据代码修改的操作序列,并通过统计分析开源项目代码中的属性频率,对代码超图进行化简,由化简之后的代码超图和代码修改的操作序列共同组成代码转换模板;
匹配模块,给定待修改的代码片段并提取其代码超图,然后通过与代码转换模板进行匹配得到修改后的代码片段。
8.一种计算机,其特征在于,包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行权利要求1-6中任一权利要求所述方法的指令。
CN201910861206.6A 2019-09-12 2019-09-12 基于单个样例的代码转换推导方法和装置 Active CN110633084B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910861206.6A CN110633084B (zh) 2019-09-12 2019-09-12 基于单个样例的代码转换推导方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910861206.6A CN110633084B (zh) 2019-09-12 2019-09-12 基于单个样例的代码转换推导方法和装置

Publications (2)

Publication Number Publication Date
CN110633084A CN110633084A (zh) 2019-12-31
CN110633084B true CN110633084B (zh) 2020-10-02

Family

ID=68972237

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910861206.6A Active CN110633084B (zh) 2019-09-12 2019-09-12 基于单个样例的代码转换推导方法和装置

Country Status (1)

Country Link
CN (1) CN110633084B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023207103A1 (zh) * 2022-04-28 2023-11-02 华为云计算技术有限公司 代码转换方法和装置
US11928126B1 (en) 2022-08-22 2024-03-12 International Business Machines Corporation Data transformation methodology using generated program code and token mappings

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5860008A (en) * 1996-02-02 1999-01-12 Apple Computer, Inc. Method and apparatus for decompiling a compiled interpretive code
CN104657140A (zh) * 2015-02-10 2015-05-27 广州华多网络科技有限公司 代码生成方法及装置
CN105824828A (zh) * 2015-01-06 2016-08-03 深圳市腾讯计算机系统有限公司 一种标签挖掘方法及装置
CN108804136A (zh) * 2018-05-31 2018-11-13 中国人民解放军国防科技大学 一种基于名称语义的配置项类型约束推断方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2527118A (en) * 2014-06-13 2015-12-16 Ibm Automatic transformation of messages between service versions

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5860008A (en) * 1996-02-02 1999-01-12 Apple Computer, Inc. Method and apparatus for decompiling a compiled interpretive code
CN105824828A (zh) * 2015-01-06 2016-08-03 深圳市腾讯计算机系统有限公司 一种标签挖掘方法及装置
CN104657140A (zh) * 2015-02-10 2015-05-27 广州华多网络科技有限公司 代码生成方法及装置
CN108804136A (zh) * 2018-05-31 2018-11-13 中国人民解放军国防科技大学 一种基于名称语义的配置项类型约束推断方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
自动推断代码转换以生成补丁;范龙等;《ESEC/FSE》;20170908;第727-739页 *
首届北京大学程序设计语言讨论班;不详;《北京大学计算机科学技术系》;20190817;第1-2页 *

Also Published As

Publication number Publication date
CN110633084A (zh) 2019-12-31

Similar Documents

Publication Publication Date Title
US11789715B2 (en) Systems and methods for transformation of reporting schema
US11620117B2 (en) Systems and methods for code clustering analysis and transformation
US11188319B2 (en) Systems and methods for entry point-based code analysis and transformation
US11436006B2 (en) Systems and methods for code analysis heat map interfaces
US20240045850A1 (en) Systems and methods for database orientation transformation
US20200167143A1 (en) Systems and methods for automated retrofitting of customized code objects
US8806452B2 (en) Transformation of computer programs and eliminating errors
US8898635B2 (en) System and method for automatic impact variable analysis and field expansion in mainframe systems
CN109992271B (zh) 一种基于代码词汇和结构依赖的分层架构识别方法
CN110633084B (zh) 基于单个样例的代码转换推导方法和装置
CN108459846B (zh) 软件云定制方法及平台
CN110806977A (zh) 基于产品需求的测试用例集生成方法、装置及电子设备
CN113867714B (zh) 一种适配多语言的自动代码生成方法
CN112416362B (zh) 一种pdk编译功能的实现方法
KR100656559B1 (ko) Bibd 방법론을 이용하는 프로그램 자동 개발 장치
CN116755662B (zh) 一种应用开发安全需求的生成方法及系统
CN114610320B (zh) 一种基于llvm的变量类型信息修复与比较方法及系统
US20240004620A1 (en) Automated generation of web applications based on wireframe metadata generated from user requirements
CN116257819A (zh) 面向大规模软件的开源许可证快速识别方法、系统及介质
KGDKI " Code Point"-software code clone analysis visualizer
CN118259874A (zh) 一种产品设计的分析方法、系统和电子设备
CN113704335A (zh) 一种将数据库表信息转换成标准模型的方法和装置
Seneviratna et al. “Code Point”–Software Code Clone Analysis Visualizer
JP2011100233A (ja) マスタメンテナンス支援システム

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