一种面向Java框架的跨语言名称绑定方法技术

技术编号:35778793 阅读:7 留言:0更新日期:2022-12-01 14:23
本发明专利技术公开了一种面向Java框架的跨语言名称绑定方法,选择合适项目,收集数据构建跨语言名称绑定数据集;将代码信息的文本向量输入到名称绑定识别模型并进行微调;对于有重名的Java标识符,提取分类特征,采用集成学习分类模型进行区分,实现名称绑定;为需要重命名的标识符匹配全部的同名标识符,形成绑定对,提取相关代码信息输入到名称绑定识别模型;对于重复多次出现的Java标识符,提取编程上下文信息输入到重名标识符名称绑定区分模型,预测跨语言名称绑定对是否成立;执行该标识符的重命名,同时对与之绑定的其他同名标识符,依次传播重命名,最终实现完整的跨语言重命名执行任务。本发明专利技术使程序在重命名后仍可编译和运行,保证软件质量。保证软件质量。保证软件质量。

【技术实现步骤摘要】
一种面向Java框架的跨语言名称绑定方法


[0001]本专利技术属于代码静态分析
,具体涉及一种面向Java框架的跨语言名称绑定方法。

技术介绍

[0002]软件源代码中存在大量的标识符,有意义的标识符是程序理解的最重要来源之一。在软件的演化过程中,标识符常会与其语义功能变得不一致,因此需要执行重命名操作来提高标识符及其软件质量。执行标识符的重命名重构,需要保证程序在重命名后仍然编译和运行。
[0003]现在的软件项目多为多语言软件应用程序(MLSA),在开发时常常使用多种框架或多种编程语言,在执行重命名重构时,更改一种语言的标识符时,往往会影响两种以上的语言。比如对于同时包含Wicket框架和Hibernate框架的项目来说,当重命名部分Java类的属性时,会同时影响到两个框架包含的四种语言,除了需要对Java语言内部进行重命名传播,也需要重命名其他语言的标识符。
[0004]然而,即使是使用最广泛的IDE重构框架也无法完全正确的实现跨语言重命名的传播,对大多数标识符只会搜索同名的全部匹配。比如IDEA对标识符重命名时,会弹出Refactoring Preview窗口显示全部匹配,这些匹配会总体划分为在代码中和在字符串、注释和文本中两类,每一类也会根据标识符类型和出现位置等进行更细致划分,但并不会告知开发人员哪些可以重命名,如果全部替换会容易错误重命名具有相同名称的不相关实体。所以开发人员必须手动识别应该重命名的所有标识符,这需要开发人员对代码结构了解透彻并且足够细致。
[0005]执行重命名重构最主要的任务就是保留代码中所有名称绑定,以此来传播重命名,使程序在重命名后编译和运行。对于多语言软件应用程序中跨语言名称绑定,现有研究均为基于标识符引用的名称绑定方法,即找到需要重命名的标识符在项目中的全部引用,一致的重命名它们。
[0006]Chen和Johnson通过研究Java文件和XML配置文件之间的交互,提出了跨三个流行的Java框架的自动重命名,当对Java标识符重命名时,会遍历项目中的XML文件并过滤出与框架相关的文件,构建引用关系以保证程序一致性。Kempf等人的方法与之类似,将Java重命名重构的范围扩展到Groovy语言。这些方法都是只针对两种语言,应用场景较少,且特定领域语言只是作为重构中的参与者,只能实现通用语言到特定领域语言的传播。
[0007]Mayer和Schroeder提供了一个重构算法,为MLSA中每种语言建立元模型,结合框架给出的规则构建链接寻找相互引用的工件,实施重构并实现传递性闭合。他们的方法虽然可以实现多个语言之间的名称绑定和重命名传播,但是需要为每个语言建立完整的元模型,这需要开发人员掌握丰富的专业知识。
[0008]目前的重命名重构执行相关的方法,为保证代码名称绑定,传播重命名提供了良好的研究基础,但是现存方法大多针对于单一语言,对于MLSA,研究较少且尚未充分挖掘,
主要体现在:
[0009]1、现存的MLSA重构执行方法大多数都是在两个语言间链接和重构,而MLSA更改一种语言的标识符时,往往会影响两种以上的语言。
[0010]2、对于跨语言重构传播往往是针对通用语言(比如java)到某些特定领域语言(比如XML,HTML等),这些特定领域语言在IDE或者之前的方法中,总是作为重构的参与者,无法实现双向传播。
[0011]3、大多数跨语言方法首先都需要建立元模型,元模型的构建需要有丰富的专业知识且足够细致,但元模型的全部模块并非都对重构执行有影响。
[0012]4、基于搜索和替换的方法将源代码作为纯文本或抽象语法树进行遍历,不考虑语义,容易错误重命名具有相同名称的不相关实体。
[0013]5、方法不应该是语言或领域特定的,以及重构操作特定的,应该更通用。

技术实现思路

[0014]专利技术目的:本专利技术的目的是提出一种面向Java框架的跨语言名称绑定方法,在软件执行重命名重构阶段,通过框架规则和编程上下文环境,使用BERT模型和集成学习,构建Java类成员(通用语言)和非java标识符(特定领域语言)的名称绑定来实现重命名的传播,使程序在重命名后仍可编译和运行,保证软件质量。
[0015]技术方案:本专利技术提供了一种面向Java框架的跨语言名称绑定方法,包括以下步骤:
[0016](1)选取同时包含通用语言和特定领域语言的Java语言的框架的流行度较高的项目,提取项目全部Java语言标识符,为其在全项目范围内匹配同名标识符,提取代码信息构建跨语言名称绑定数据集;
[0017](2)将名称绑定数据集中的代码信息的文本向量输入到名称绑定识别模型,提取代码语义信息,识别名称绑定代码格式;对于无重名的Java标识符,构建正确的名称绑定对;
[0018](3)对于有重名的Java标识符,在确定非Java标识符具备名称绑定条件后,区分其具体与哪个类中的Java标识符匹配;分析代码信息、编程上下文信息和框架规则,从中提取特征,使用集成学习训练重名标识符名称绑定区分模型,实现区分任务,完成重名Java标识符的名称绑定;
[0019](4)为需要重命名的标识符匹配全部的同名标识符,形成绑定对,提取代码信息输入到步骤(2)名称绑定识别模型,找到绑定成立的所以非Java标识符;如果该标识符无重名,则名称绑定对构建完成;对于有重名的标识符,提取编程上下文信息输入到步骤(3)重名标识符名称绑定区分模型,区分正确的名称绑定对;执行该标识符的重命名,同时对与之绑定的其他同名标识符,依次传播重命名,实现完整的跨语言重命名执行任务。
[0020]进一步地,所述步骤(1)包括以下步骤:
[0021](11)提取项目全部Java类的成员,统计出现次数,分为只出现一次的和多次出现的;通过全局搜索,为每个java类的成员找到项目中同名的全部标识符;
[0022](12)对项目中的全部名称绑定对,通过框架规则和专业知识构建跨语言名称绑定正确绑定集和错误绑定集;正确绑定集为具备名称绑定关系的Java标识符和同名非Java标
识符匹配对以及它们的位置信息;错误匹配集为不相关的Java标识符和同名非Java标识符匹配对;
[0023](13)收集每个绑定对中的两个标识符的所在代码信息并进行数据预处理,加入绑定集;
[0024](14)为正确绑定集和错误绑定集分别添加分类标签1和0,合并组成名称绑定数据集,并划分成训练集和测试集。
[0025]进一步地,所述步骤(2)包括以下步骤:
[0026](21)对步骤(1)构建的名称绑定集中每个绑定对的代码数据进行分词,将词汇划分成更细粒度的语义单位,将所有的文本向量转化成数字向量,并将格式处理成BERT需要的输入;BERT的输入是由三种embedding组成的,分别是词向量token embedding、对两个句子进行区分的向量segment embedding和表示位置特征的向量positional emb本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种面向Java框架的跨语言名称绑定方法,其特征在于,包括以下步骤:(1)选取同时包含通用语言和特定领域语言的Java语言的框架的流行度较高的项目,提取项目全部Java语言标识符,为其在全项目范围内匹配同名标识符,提取代码信息构建跨语言名称绑定数据集;(2)将名称绑定数据集中的代码信息的文本向量输入到名称绑定识别模型,提取代码语义信息,识别名称绑定代码格式;对于无重名的Java标识符,构建正确的名称绑定对;(3)对于有重名的Java标识符,在确定非Java标识符具备名称绑定条件后,区分其具体与哪个类中的Java标识符匹配;分析代码信息、编程上下文信息和框架规则,从中提取特征,使用集成学习训练重名标识符名称绑定区分模型,实现区分任务,完成重名Java标识符的名称绑定;(4)为需要重命名的标识符匹配全部的同名标识符,形成绑定对,提取代码信息输入到步骤(2)名称绑定识别模型,找到绑定成立的所以非Java标识符;如果该标识符无重名,则名称绑定对构建完成;对于有重名的标识符,提取编程上下文信息输入到步骤(3)重名标识符名称绑定区分模型,区分正确的名称绑定对;执行该标识符的重命名,同时对与之绑定的其他同名标识符,依次传播重命名,实现完整的跨语言重命名执行任务。2.根据权利要求1所述的一种面向Java框架的跨语言名称绑定方法,其特征在于,所述步骤(1)包括以下步骤:(11)提取项目全部Java类的成员,统计出现次数,分为只出现一次的和多次出现的;通过全局搜索,为每个java类的成员找到项目中同名的全部标识符;(12)对项目中的全部名称绑定对,通过框架规则和专业知识构建跨语言名称绑定正确绑定集和错误绑定集;正确绑定集为具备名称绑定关系的Java标识符和同名非Java标识符匹配对以及它们的位置信息;错误匹配集为不相关的Java标识符和同名非Java标识符匹配对;(13)收集每个绑定对中的两个标识符的所在代码信息并进行数据预处理,加入绑定集;(14)为正确绑定集和错误绑定集分别添加分类标签1和0,合并组成名称绑定数据集,并划分成训练集和测试集。3.根据权利要求1所述的一种面向Java框架的跨语言名称绑定方法,其特征在于,所述步骤(2)包括以下步骤:(21)对步骤(1)构建的名称绑定集中每个绑定对的代码数据进行分词,将词汇划分成更细粒度的语义单位,将所有的文本向量转化成数字向量,并将格式处理成BERT需要的输入;BERT的输入是由三种embedding组成的,分别是词向量token embedding、对两个句子进行区分的向量segment embedding和表示位置特征的向量positional embedding;(22)将向量输入到BERT模型,经过多层的解码器的自注意力机制和前馈神经网络,在每个位置输出融合全文语义信息的CLS向量,通过Linear层进行线性映射实现二分类任务;之后对模型进行微调,提高准确率;(23)利用BERT模型从代码信息的文本...

【专利技术属性】
技术研发人员:张静宣鞠悦蓝金鹏秘相博
申请(专利权)人:南京航空航天大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1