CN115407978A - 一种面向Java框架的跨语言名称绑定方法 - Google Patents

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

Info

Publication number
CN115407978A
CN115407978A CN202211004722.5A CN202211004722A CN115407978A CN 115407978 A CN115407978 A CN 115407978A CN 202211004722 A CN202211004722 A CN 202211004722A CN 115407978 A CN115407978 A CN 115407978A
Authority
CN
China
Prior art keywords
name
java
binding
identifier
identifiers
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.)
Pending
Application number
CN202211004722.5A
Other languages
English (en)
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.)
Nanjing University of Aeronautics and Astronautics
Original Assignee
Nanjing University of Aeronautics and Astronautics
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 Nanjing University of Aeronautics and Astronautics filed Critical Nanjing University of Aeronautics and Astronautics
Priority to CN202211004722.5A priority Critical patent/CN115407978A/zh
Publication of CN115407978A publication Critical patent/CN115407978A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/30Semantic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Computing Systems (AREA)
  • Artificial Intelligence (AREA)
  • Health & Medical Sciences (AREA)
  • Data Mining & Analysis (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Evolutionary Computation (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Molecular Biology (AREA)
  • Mathematical Physics (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

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

Description

一种面向Java框架的跨语言名称绑定方法
技术领域
本发明属于代码静态分析技术领域,具体涉及一种面向Java框架的跨语言名称绑定方法。
背景技术
软件源代码中存在大量的标识符,有意义的标识符是程序理解的最重要来源之一。在软件的演化过程中,标识符常会与其语义功能变得不一致,因此需要执行重命名操作来提高标识符及其软件质量。执行标识符的重命名重构,需要保证程序在重命名后仍然编译和运行。
现在的软件项目多为多语言软件应用程序(MLSA),在开发时常常使用多种框架或多种编程语言,在执行重命名重构时,更改一种语言的标识符时,往往会影响两种以上的语言。比如对于同时包含Wicket框架和Hibernate框架的项目来说,当重命名部分Java类的属性时,会同时影响到两个框架包含的四种语言,除了需要对Java语言内部进行重命名传播,也需要重命名其他语言的标识符。
然而,即使是使用最广泛的IDE重构框架也无法完全正确的实现跨语言重命名的传播,对大多数标识符只会搜索同名的全部匹配。比如IDEA对标识符重命名时,会弹出Refactoring Preview窗口显示全部匹配,这些匹配会总体划分为在代码中和在字符串、注释和文本中两类,每一类也会根据标识符类型和出现位置等进行更细致划分,但并不会告知开发人员哪些可以重命名,如果全部替换会容易错误重命名具有相同名称的不相关实体。所以开发人员必须手动识别应该重命名的所有标识符,这需要开发人员对代码结构了解透彻并且足够细致。
执行重命名重构最主要的任务就是保留代码中所有名称绑定,以此来传播重命名,使程序在重命名后编译和运行。对于多语言软件应用程序中跨语言名称绑定,现有研究均为基于标识符引用的名称绑定方法,即找到需要重命名的标识符在项目中的全部引用,一致的重命名它们。
Chen和Johnson通过研究Java文件和XML配置文件之间的交互,提出了跨三个流行的Java框架的自动重命名,当对Java标识符重命名时,会遍历项目中的XML文件并过滤出与框架相关的文件,构建引用关系以保证程序一致性。Kempf等人的方法与之类似,将Java重命名重构的范围扩展到Groovy语言。这些方法都是只针对两种语言,应用场景较少,且特定领域语言只是作为重构中的参与者,只能实现通用语言到特定领域语言的传播。
Mayer和Schroeder提供了一个重构算法,为MLSA中每种语言建立元模型,结合框架给出的规则构建链接寻找相互引用的工件,实施重构并实现传递性闭合。他们的方法虽然可以实现多个语言之间的名称绑定和重命名传播,但是需要为每个语言建立完整的元模型,这需要开发人员掌握丰富的专业知识。
目前的重命名重构执行相关的方法,为保证代码名称绑定,传播重命名提供了良好的研究基础,但是现存方法大多针对于单一语言,对于MLSA,研究较少且尚未充分挖掘,主要体现在:
1、现存的MLSA重构执行方法大多数都是在两个语言间链接和重构,而MLSA更改一种语言的标识符时,往往会影响两种以上的语言。
2、对于跨语言重构传播往往是针对通用语言(比如java)到某些特定领域语言(比如XML,HTML等),这些特定领域语言在IDE或者之前的方法中,总是作为重构的参与者,无法实现双向传播。
3、大多数跨语言方法首先都需要建立元模型,元模型的构建需要有丰富的专业知识且足够细致,但元模型的全部模块并非都对重构执行有影响。
4、基于搜索和替换的方法将源代码作为纯文本或抽象语法树进行遍历,不考虑语义,容易错误重命名具有相同名称的不相关实体。
5、方法不应该是语言或领域特定的,以及重构操作特定的,应该更通用。
发明内容
发明目的:本发明的目的是提出一种面向Java框架的跨语言名称绑定方法,在软件执行重命名重构阶段,通过框架规则和编程上下文环境,使用BERT模型和集成学习,构建Java类成员(通用语言)和非java标识符(特定领域语言)的名称绑定来实现重命名的传播,使程序在重命名后仍可编译和运行,保证软件质量。
技术方案:本发明提供了一种面向Java框架的跨语言名称绑定方法,包括以下步骤:
(1)选取同时包含通用语言和特定领域语言的Java语言的框架的流行度较高的项目,提取项目全部Java语言标识符,为其在全项目范围内匹配同名标识符,提取代码信息构建跨语言名称绑定数据集;
(2)将名称绑定数据集中的代码信息的文本向量输入到名称绑定识别模型,提取代码语义信息,识别名称绑定代码格式;对于无重名的Java标识符,构建正确的名称绑定对;
(3)对于有重名的Java标识符,在确定非Java标识符具备名称绑定条件后,区分其具体与哪个类中的Java标识符匹配;分析代码信息、编程上下文信息和框架规则,从中提取特征,使用集成学习训练重名标识符名称绑定区分模型,实现区分任务,完成重名Java标识符的名称绑定;
(4)为需要重命名的标识符匹配全部的同名标识符,形成绑定对,提取代码信息输入到步骤(2)名称绑定识别模型,找到绑定成立的所以非Java标识符;如果该标识符无重名,则名称绑定对构建完成;对于有重名的标识符,提取编程上下文信息输入到步骤(3)重名标识符名称绑定区分模型,区分正确的名称绑定对;执行该标识符的重命名,同时对与之绑定的其他同名标识符,依次传播重命名,实现完整的跨语言重命名执行任务。
进一步地,所述步骤(1)包括以下步骤:
(11)提取项目全部Java类的成员,统计出现次数,分为只出现一次的和多次出现的;通过全局搜索,为每个java类的成员找到项目中同名的全部标识符;
(12)对项目中的全部名称绑定对,通过框架规则和专业知识构建跨语言名称绑定正确绑定集和错误绑定集;正确绑定集为具备名称绑定关系的Java标识符和同名非Java标识符匹配对以及它们的位置信息;错误匹配集为不相关的Java标识符和同名非Java标识符匹配对;
(13)收集每个绑定对中的两个标识符的所在代码信息并进行数据预处理,加入绑定集;
(14)为正确绑定集和错误绑定集分别添加分类标签1和0,合并组成名称绑定数据集,并划分成训练集和测试集。
进一步地,所述步骤(2)包括以下步骤:
(21)对步骤(1)构建的名称绑定集中每个绑定对的代码数据进行分词,将词汇划分成更细粒度的语义单位,将所有的文本向量转化成数字向量,并将格式处理成BERT需要的输入;BERT的输入是由三种embedding组成的,分别是词向量token embedding、对两个句子进行区分的向量segment embedding和表示位置特征的向量positional embedding;
(22)将向量输入到BERT模型,经过多层的解码器的自注意力机制和前馈神经网络,在每个位置输出融合全文语义信息的CLS向量,通过Linear层进行线性映射实现二分类任务;之后对模型进行微调,提高准确率;
(23)利用BERT模型从代码信息的文本向量中总结名称绑定成立的代码格式,完成名称绑定识别,判断非Java标识符是否具有名称绑定关系。
进一步地,所述步骤(3)包括以下步骤:
(31)特征提取:为编程上下文的文本标记构建语料库,对语料库中的单词及标点建立数字映射,将文本标记转化成数字向量表示,计算Java和非Java绑定对的编程上下文的相似度,选取余弦相似度Cosine Similarity和欧氏距离Euclidean Distance
Figure BDA0003808658740000041
Figure BDA0003808658740000042
其中,X和Y分别表示重名的Java标识符和同名非Java标识符的编程上下文信息的数字向量,xi和yi为n维向量X和Y在i维度上的坐标;
将代码信息中的文件名,去掉后缀信息,计算相似度,选取最长公共子序列长度LCS和莱文斯坦比r:
r=(sum–ldist)/sum
其中,sum是指word1和word2字串的长度总和,ldist是类编辑距离;根据框架帮助文档,总结最基本的区分同名Java标识符的规则,包括定义在非Java文件内部规则和定义在其他文件内部两大类,采用one-hot编码方式;统计Java标识符所在类的类名在非Java标识符所在文件的出现次数;统计Java标识符同类的其他成员名在非Java标识符所在文件的出现次数,计算概率和平均出现次数;
(32)构建分类数据集:对于匹配成立的非Java标识符,正确匹配集为名称绑定成立的一组绑定对,错误匹配集为其余同名Java标识符与该非Java标识符的绑定对,分类标签为1和0;为每一个匹配对提取相应特征进行归一化处理后装入一维数组,作为分类的特征集合;连接数据集中所有匹配对的特征集合得到二维矩阵;
(33)重名标识符名称绑定区分模型训练:选择支持向量机、决策树、随机森林和最邻近分类器作为第一层基本分类器,采用第一层基本分类器产生的类别概率值作为新的训练集输入,选取逻辑回归分类器作为第二层目标分类器在新的训练集上进行训练,得到最终的分类结果,实现重名标识符的名称绑定区分,为重名标识符构建正确的名称绑定。
进一步地,步骤(3)所述编程上下文信息为:
对Java标识符,利用Java Parser将所在类转化成抽象语法树,提取所在类名、同类的成员名、定义在其他类中但是类型是该类的成员名和所在类名,继承的类或接口包含的成员名、注释信息、注解信息;
对于非Java标识符,按层次结构和格式提取:提取文件最外层或者与名称绑定有意义的层次中定义的标识符,以及与该标识符处于相同标签中的相同层次的标识符名称。
进一步地,步骤(13)所述的代码信息为该标识符所在文件名、文件地址、代码、位置信息。
有益效果:与现有技术相比,本发明的有益效果:
1、本发明提出对于框架中包含多种语言,都能根据方法构建名称绑定,实现重命名的传播;
2、对比大多数方法的领域特定语言标识符只作为重构的参与者这一问题,本发明通过构建跨语言名称绑定,可以实现通用语言和特定领域语言重命名的双向传播,所有具备绑定关系的同名标识符,改变其中之一均可传播到其余标识符;
3、本发明并不构建完整的元模型,而是从框架结构入手,结合框架规则、专业知识和编程上下文环境等,通过深度学习模型(BERT)提炼含语义信息的代码格式,对于具有相同名称的不相关实体,结合集成学习模型进行区分,实现名称绑定,减少由于知识欠缺等原因导致的错误或遗漏,提高匹配的准确率;
4、本发明具有通用性,本发明选取Java作为通用语言,最常用的Java框架中的其他语言作为领域特定语言,但对于其他通用语言,或者未选取的其他框架中的语言,也可使用此方法构建模型,实现跨语言重命名传播。
附图说明
图1为本发明的流程图;
图2为本发明基于BERT模型识别名称绑定的示意图;
图3为本发明区分同名的不相关实体方法的流程图;
图4为本发明使用的集成学习分类模型示意图。
具体实施方式
下面结合附图对本发明做进一步详细说明。
本发明提供一种面向Java框架的跨语言名称绑定方法,如图1所示,包括以下步骤:
步骤1:选取使用最广泛且同时包含通用语言(Java语言)和特定领域语言(XML等)的Java语言的框架(如Spring、Hibernate等)的流行度较高的项目,提取项目全部Java语言标识符(包括只出现一次的和多次出现的),为其在全项目范围内匹配同名标识符,提取代码信息构建跨语言名称绑定数据集。
步骤1.1.项目选取。选取Java作为研究的通用语言,调研Java语言的框架,选取使用最广泛且同时包含通用语言和特定领域语言的框架(如Spring、Hibernate等),在版本控制仓库中(Git或SVN)选择使用这些框架的流行度较高的项目进行研究。
步骤1.2.标识符提取。提取每个项目的全部Java类的成员名(属性、方法等)。通过全局搜索,找到项目中同名的全部标识符。对项目中的全部名称绑定对,通过框架规则和专业知识构建跨语言名称绑定正确绑定集和错误绑定集;正确绑定集为具备名称绑定关系的Java标识符和同名非Java标识符匹配对以及它们的位置信息。错误匹配集为不相关的Java标识符和同名非Java标识符匹配对。
步骤1.3.名称绑定数据集构建。结合框架帮助文档和专业知识,人工标注名称绑定数据集,供后续训练模型使用。正确绑定集为具备名称绑定关系的Java标识符和同名非Java标识符匹配对以及它们的位置信息。错误匹配集为不相关的Java标识符和同名非Java标识符匹配对(对于有重名的Java标识符,错误匹配集中匹配对的非Java元素,可能与每个同名Java元素都不匹配,也可能与其中一个匹配,与其余的同名不相关标识符的绑定对列入错误匹配集)。为正确匹配集和错误匹配集分别添加分类标签1和0。
步骤1.4.代码信息收集。收集每个绑定对中的两个标识符的所在代码信息。代码信息为该标识符所在文件名、文件地址、代码、位置信息等。
步骤1.5.数据预处理。将代码信息的非字母数字的字符删除,保留剩余全部词语转化为文本向量。
步骤1.6.数据集划分。为正确绑定集和错误绑定集的每一行数据加入代码信息和编程上下文信息,合并形成数据集,并划分为训练集和测试集。步骤2.名称绑定识别。
步骤2:将名称绑定数据集中的代码信息的文本向量输入到名称绑定识别模型,提取代码语义信息,识别名称绑定代码格式。对于无重名的Java标识符,可构建正确的名称绑定对。
本实施方式将代码信息的文本向量输入到BERT模型并进行微调,利用BERT模型根据语义信息总结代码匹配格式,判断标识符代码格式是否符合名称绑定要求,从而实现后续名称绑定任务。图2是BERT模型实现跨语言名称绑定示意图。
步骤2.1.本发明使用了谷歌提出的BERT模型,该模型基于谷歌的Transformers架构,将多个编码器堆叠在一起,是一种用于语言表征的预训练模型,在分类和通用语言理解评估等任务取得先进的性能。
步骤2.2.对匹配集中每个绑定对的代码数据进行分词,将英文词汇划分成更细粒度的语义单位,将所有的文本向量转化成数字向量。BERT的输入是由三种embedding组成的,分别是词向量token embedding、对两个句子进行区分的向量segment embedding和表示位置特征的向量positional embedding。此发明的输入为Java语言的代码数据和非Java语言的代码数据,所以需在两个句子之间加入SEP字符。
步骤2.3.按要求将向量输入到BERT模型,在多层的解码器中不断向上流动,每一层都会经过自注意力机制和前馈神经网络。BERT输入的所有向量经过编码后,会在每个位置输出融合全文语义信息的CLS向量,通过Linear层进行线性映射达到匹配是否成立的二分类目的。对模型的参数进行微调,提高准确率。
步骤2.4.名称识别绑定就是二分类任务,结果为绑定成立和绑定失败。利用BERT模型从代码信息的文本向量中总结名称绑定成立的代码格式,完成名称绑定识别,判断非Java标识符是否具有名称绑定关系。
步骤3:对于有重名的Java标识符,在确定非Java标识符具备名称绑定条件后,需要区分它具体与哪个类中的Java标识符匹配;分析代码信息、编程上下文环境和框架规则,从中提取特征,使用集成学习训练重名标识符名称绑定区分模型,实现区分任务,完成重名Java标识符的名称绑定。具体流程如图3所示。
步骤3.1.编程上下文信息提取与处理。
对Java标识符,利用Java Parser将所在类转化成抽象语法树(AST),提取所在类名、同类的成员名(该成员的类型如果是项目中的类,也收集该类的成员名)、定义在其他类中但是类型是该类的成员名和所在类名,继承的类或接口包含的成员名、注释信息、注解信息等。
对于非Java标识符,需根据不同编程语言总结提取规则,按层次结构和相同格式提取。提取文件最外层或者与名称绑定有意义的层次中定义的标识符,以及与该标识符处于相同标签中的相同层次的标识符名称。将编程上下文信息的非字母数字的字符删除,剩余单词去重转化成文本标记。
步骤3.2.特征提取。根据步骤3.1.提取的编程上下文信息和步骤1提取的代码信息,结合框架规则,提取分类特征。特征提取过程如下:
为编程上下文的文本标记构建语料库(包含两段文本的全部单词),对语料库中的单词及标点建立数字映射,将文本标记转化成数字向量表示,计算Java和非Java绑定对的编程上下文的相似度,选取余弦相似度Cosine Similarity和欧氏距离EuclideanDistance
Figure BDA0003808658740000081
Figure BDA0003808658740000082
其中,X和Y分别表示重名的Java标识符和同名非Java标识符的编程上下文信息的数字向量,xi和yi为n维向量X和Y在i维度上的坐标。
将代码信息中的文件名,去掉后缀信息,计算相似度,选取最长公共子序列长度LCS和莱文斯坦比r:
r=(sum–ldist)/sum
其中,sum是指word1和word2字串的长度总和,ldist是类编辑距离(删除、插入数值加1,替换数值加2)。
根据框架帮助文档,总结最基本的区分同名Java标识符的规则,包括定义在非Java文件内部规则和定义在其他文件内部两大类,采用one-hot编码方式。
统计Java标识符所在类的类名在非Java标识符所在文件的出现次数。统计Java标识符同类的其他成员名在非Java标识符所在文件的出现次数,计算概率和平均出现次数。
步骤3.3.构建分类数据集。对于匹配成立的非Java标识符,正确匹配集为名称绑定成立的一组绑定对,错误匹配集为其余同名Java标识符与该非Java标识符的绑定对,分类标签为1和0。为每一个匹配对提取相应特征进行归一化处理后装入一维数组,作为分类的特征集合。连接数据集中所有匹配对的特征集合得到二维矩阵。
步骤3.4.模型训练。选取最常用的分类器,结合集成学习训练模型实现区分,完成重名Java标识符的名称绑定。图4为本发明使用的集成学习流程图。
将数据集分成训练集和测试集,使用多个分类器依次进行训练,用测试集对训练好的每个分类器分别进行预测。本发明实施例中,选择支持向量机(SVM)、决策树、随机森林和最邻近分类器(KNN)作为第一层基本分类器,采用第一层基本分类器产生的类别概率值作为新的训练集输入,选取逻辑回归分类器作为第二层目标分类器在新的训练集上进行训练,得到最终的分类结果,实现重名标识符的名称绑定区分。
步骤4:为需要重命名的标识符匹配全部的同名标识符,形成绑定对,提取代码信息输入到步骤2名称绑定识别模型,找到绑定成立的所以非Java标识符。如果该标识符无重名,则名称绑定对构建完成。对于有重名的标识符,提取编程上下文信息等输入到步骤3重名标识符名称绑定区分模型,区分正确的名称绑定对。执行该标识符的重命名,同时对与之绑定的其他同名标识符,依次传播重命名,最终实现完整的跨语言重命名执行任务。

Claims (6)

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模型从代码信息的文本向量中总结名称绑定成立的代码格式,完成名称绑定识别,判断非Java标识符是否具有名称绑定关系。
4.根据权利要求1所述的一种面向Java框架的跨语言名称绑定方法,其特征在于,所述步骤(3)包括以下步骤:
(31)特征提取:为编程上下文的文本标记构建语料库,对语料库中的单词及标点建立数字映射,将文本标记转化成数字向量表示,计算Java和非Java绑定对的编程上下文的相似度,选取余弦相似度Cosine Similarity和欧氏距离Euclidean Distance
Figure FDA0003808658730000021
Figure FDA0003808658730000022
其中,X和Y分别表示重名的Java标识符和同名非Java标识符的编程上下文信息的数字向量,xi和yi为n维向量X和Y在i维度上的坐标;
将代码信息中的文件名,去掉后缀信息,计算相似度,选取最长公共子序列长度LCS和莱文斯坦比r:
r=(sum–ldist)/sum
其中,sum是指word1和word2字串的长度总和,ldist是类编辑距离;根据框架帮助文档,总结最基本的区分同名Java标识符的规则,包括定义在非Java文件内部规则和定义在其他文件内部两大类,采用one-hot编码方式;统计Java标识符所在类的类名在非Java标识符所在文件的出现次数;统计Java标识符同类的其他成员名在非Java标识符所在文件的出现次数,计算概率和平均出现次数;
(32)构建分类数据集:对于匹配成立的非Java标识符,正确匹配集为名称绑定成立的一组绑定对,错误匹配集为其余同名Java标识符与该非Java标识符的绑定对,分类标签为1和0;为每一个匹配对提取相应特征进行归一化处理后装入一维数组,作为分类的特征集合;连接数据集中所有匹配对的特征集合得到二维矩阵;
(33)重名标识符名称绑定区分模型训练:选择支持向量机、决策树、随机森林和最邻近分类器作为第一层基本分类器,采用第一层基本分类器产生的类别概率值作为新的训练集输入,选取逻辑回归分类器作为第二层目标分类器在新的训练集上进行训练,得到最终的分类结果,实现重名标识符的名称绑定区分,为重名标识符构建正确的名称绑定。
5.根据权利要求1所述的一种面向Java框架的跨语言名称绑定方法,其特征在于,步骤(3)所述编程上下文信息为:
对Java标识符,利用Java Parser将所在类转化成抽象语法树,提取所在类名、同类的成员名、定义在其他类中但是类型是该类的成员名和所在类名,继承的类或接口包含的成员名、注释信息、注解信息;
对于非Java标识符,按层次结构和格式提取:提取文件最外层或者与名称绑定有意义的层次中定义的标识符,以及与该标识符处于相同标签中的相同层次的标识符名称。
6.根据权利要求2所述的一种面向Java框架的跨语言名称绑定方法,其特征在于,步骤(13)所述的代码信息为该标识符所在文件名、文件地址、代码、位置信息。
CN202211004722.5A 2022-08-22 2022-08-22 一种面向Java框架的跨语言名称绑定方法 Pending CN115407978A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211004722.5A CN115407978A (zh) 2022-08-22 2022-08-22 一种面向Java框架的跨语言名称绑定方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211004722.5A CN115407978A (zh) 2022-08-22 2022-08-22 一种面向Java框架的跨语言名称绑定方法

Publications (1)

Publication Number Publication Date
CN115407978A true CN115407978A (zh) 2022-11-29

Family

ID=84162003

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211004722.5A Pending CN115407978A (zh) 2022-08-22 2022-08-22 一种面向Java框架的跨语言名称绑定方法

Country Status (1)

Country Link
CN (1) CN115407978A (zh)

Similar Documents

Publication Publication Date Title
Liu et al. Learning to spot and refactor inconsistent method names
US11321364B2 (en) System and method for analysis and determination of relationships from a variety of data sources
Jung Semantic vector learning for natural language understanding
Siow et al. Core: Automating review recommendation for code changes
US7139752B2 (en) System, method and computer program product for performing unstructured information management and automatic text analysis, and providing multiple document views derived from different document tokenizations
US20040243560A1 (en) System, method and computer program product for performing unstructured information management and automatic text analysis, including an annotation inverted file system facilitating indexing and searching
US20070112763A1 (en) System, method and computer program product for performing unstructured information management and automatic text analysis, including a search operator functioning as a weighted and (WAND)
US20040243554A1 (en) System, method and computer program product for performing unstructured information management and automatic text analysis
AU2020418514A1 (en) System and method for analysis and determination of relationships from a variety of data sources
CN112541337B (zh) 一种基于递归神经网络语言模型的文档模板自动生成方法及系统
CN111831624A (zh) 数据表创建方法、装置、计算机设备及存储介质
Liu et al. Prompt Learning for Multi-Label Code Smell Detection: A Promising Approach
Ghaemi et al. Transformers in source code generation: A comprehensive survey
Rajbhoj et al. DocToModel: automated authoring of models from diverse requirements specification documents
Mohsen et al. Enhancing bug localization using phase-based approach
CN116894495A (zh) 用注释增强机器学习管道的方法、计算机可读介质和系统
US20220179894A1 (en) Automatic document classification
CN115407978A (zh) 一种面向Java框架的跨语言名称绑定方法
Goloveshkin et al. Using improved context-based code description for robust algorithmic binding to changing code
Laddha et al. Joint distributed representation of text and structure of semi-structured documents
Zhu et al. CED: Catalog Extraction from Documents
Gu et al. A neural architecture for detecting identifier renaming from diff
Li et al. ACAGNN: Source Code Representation Based on Fine-Grained Multi-view Program Features
Sharma Source code representation for comment generation and program comprehension
Iyer Learning to Map Natural Language to General Purpose Source Code

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