[发明专利]基于单个样例的代码转换推导方法和装置有效
申请号: | 201910861206.6 | 申请日: | 2019-09-12 |
公开(公告)号: | CN110633084B | 公开(公告)日: | 2020-10-02 |
发明(设计)人: | 姜佳君;任路遥;熊英飞;张令明 | 申请(专利权)人: | 北京大学 |
主分类号: | G06F8/41 | 分类号: | G06F8/41 |
代理公司: | 北京中济纬天专利代理有限公司 11429 | 代理人: | 江黎 |
地址: | 100871 北*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 单个 代码 转换 推导 方法 装置 | ||
本发明涉及一种基于单个样例的代码转换推导方法和装置。该方法包括:基于修改前和修改后的样例代码片段,提取代码超图;基于修改前和修改后的样例代码片段,提取代码修改的操作序列;依据代码修改的操作序列,并通过统计分析开源项目代码中的属性频率,对代码超图进行化简,由化简之后的代码超图和代码修改的操作序列共同组成代码转换模板;给定待修改的代码片段并提取其代码超图,然后通过与代码转换模板进行匹配得到修改后的代码片段。本发明可以仅通过一个代码修改的例子来推导出、提取出一般化的代码转换,有效避免了必须依赖于使用大量的相关代码修改来进行推导,可以更有效地推导出合理的代码转换,适用于多种应用场景。
技术领域
本发明属于计算机科学技术中的软件工程领域,具体涉及一种基于单个样例的代码转换推导方法和装置。
背景技术
软件开发中重复修改较常发生,从已有修改中推导出代码转换可以帮助开发者自动化实现这些代码修改,具体场景有系统性修改、对重复出现的程序缺陷的修复、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静态分析来提取数据依赖关系,对代码元素之间的关系进行补充和细化;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京大学,未经北京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910861206.6/2.html,转载请声明来源钻瓜专利网。