CN112433754B - 一种基于程序分析的Java函数注释自动生成方法 - Google Patents

一种基于程序分析的Java函数注释自动生成方法 Download PDF

Info

Publication number
CN112433754B
CN112433754B CN202110045380.0A CN202110045380A CN112433754B CN 112433754 B CN112433754 B CN 112433754B CN 202110045380 A CN202110045380 A CN 202110045380A CN 112433754 B CN112433754 B CN 112433754B
Authority
CN
China
Prior art keywords
function
annotation
calling
java
call
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
CN202110045380.0A
Other languages
English (en)
Other versions
CN112433754A (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.)
Nanjing University
Original Assignee
Nanjing 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 Nanjing University filed Critical Nanjing University
Priority to CN202110045380.0A priority Critical patent/CN112433754B/zh
Publication of CN112433754A publication Critical patent/CN112433754A/zh
Application granted granted Critical
Publication of CN112433754B publication Critical patent/CN112433754B/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/70Software maintenance or management
    • G06F8/73Program documentation
    • 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
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • 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)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • General Health & Medical Sciences (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Physics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Library & Information Science (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明为一种基于程序分析的Java函数注释自动生成方法:首先收集大量GitHub上开源项目,基于程序分析技术对Java函数信息及调用关系进行提取,形成训练数据集;随后基于深度学习领域循环神经网络技术训练出一个函数到注释的翻译模型,能自动为函数生成注释,效果明显;有效解决了当前项目中现有函数注释的稀缺性、不规范性、不一致性等问题,提高了代码可读性和可维护性。

Description

一种基于程序分析的Java函数注释自动生成方法
技术领域
本发明属于计算机技术领域,尤其是软件技术领域。本发明提出了一种基于程序分析的Java函数注释自动生成方法,能够通过构建循环神经网络模型自动为函数生成注释。有效解决了当前项目中现有函数注释的稀缺性、不规范性、不一致性等问题,从而提高代码可读性和可维护性。
背景技术
随着互联网技术的高速发展以及软件产业日新月异的变化,越来越多的项目开始使用分布式协作开发模式。开发者们通常会建立自己的分支,在自己的分支上进行开发,随后将分支合并到主分支上。这样能最大程度地利用分布式开发的特点,大大提高开发效率。与此同时,分布式协作开发过程中的常见问题有:开发者在开发或审查代码时,往往会花费较多的时间去理解其他开发者写的代码。为了解决这个问题,一个直观的解决方法是开发者在开发时留下适当的注释,用自然语言描述开发者的意图或代码的功能。良好的注释对代码审查、软件维护起着至关重要的作用。
然而,由于开发者的开发习惯不同,现有项目中往往会出现注释稀缺、注释不规范、注释与代码意图不一致等问题。针对这些问题的一个解决思路是信息检索技术(Information Retrieval)。对于待生成注释代码段,在数据集中根据代码相似性计算找到与之匹配的最相似的代码段,并使用其注释作为生成注释。但随着软件演化的速度日益加快,这种方法对数据集的要求也随之增高。随着近年来深度学习(Deep Learning)的持续火热,另一解决思路受翻译工作的启发,函数和注释本质上相当于两种源语言,可以通过深度翻译模型来构建特殊映射。在大量数据的训练下不断优化模型,最终将函数输入到训练好的模型并输出所生成的自然语言注释。
先前已经有相关工作使用上述思路对函数与注释进行建模并自动生成注释。但是先前的工作并未充分利用项目中所包含的对注释生成有利的信息和深度学习的优势,导致生成的注释在准确性、可理解性和流畅性上有一定的缺陷。
因此,本发明的主要目标是基于程序分析并充分利用项目中所有对注释生成有利的信息(包括函数的基本信息和传递其所调用函数的注释),随后基于深度学习领域的循环神经网络来构建模型并生成函数注释,从而提高所生成注释的质量,使得代码具备更好的可读性和可维护性。
发明内容
本发明的主要工作是提出一种基于程序分析的Java函数注释自动生成方法,使用到深度学习领域的循环神经网络技术。首先,本发明关注的是Java函数。Java是软件开发中最受欢迎的语言之一,其语言特点有着丰富的结构、类型信息。此外,目前针对Java语言的程序分析技术较为成熟且广泛使用,能够比较方便地提取到生成注释所需要的基本信息。其次,本发明关注如何使用程序分析的结果进行模型训练,并使用训练好的深度学习模型进行注释生成。最后,本发明会对生成结果进行机器指标和人工指标评估,并和现有方法进行比较,力求生成质量更高的注释。
针对以上问题,本发明的工作和贡献如下:
1.构建基于JDT和SOOT的Java函数信息提取器:使用GitHub API对GitHub上使用Java为主语言并以Stars数作为排序指标得到的前2000个Java项目,Clone至本地并筛选出其中使用Maven作为管理工具的项目后进行编译。对编译成功的727个项目,使用JDT和SOOT两个主流Java程序分析工具对项目中的源文件(.java)和编译文件(.class)进行数据提取。
在超过65万个Java文件中分析了超过578万个Java方法,包括每个函数的词法和语法结构。随后针对其是否有注释进行过滤,最后得到了包含176万个函数的函数信息表和包含1073万个函数调用关系的调用关系表。
为提取精确的调用关系,使用SOOT对编译过程文件字节码进行抽取,从JVM指令层面区分invokeinterface(调用接口方法)、invokevirtual(调用对象实例方法)、invokestatic(调用类静态方法)、invokespecial(调用特殊处理的实例方法)四种函数调用类型,解决了单纯使用正则表达式或其他静态分析工具获取调用关系精度不准确的问题。
每个函数信息表表项为<序号,类名,函数名,函数修饰符,函数体,函数参数,函数参数类型,函数返回值,函数返回值类型,函数抽象语法结构(AST),函数注释(JavaDoc)>,每个函数调用关系表表项为<序号,调用函数类名,调用函数修饰符,调用函数函数名,调用函数参数,调用函数返回值,被调用函数Callee类名,被调用函数修饰符,被调用函数函数名,被调用函数参数,被调用函数返回值,调用类型>。
2.构建基于映射和注释分类注释传递器:针对函数信息表和函数调用关系表,使用函数名、函数修饰符、函数参数等信息确定同一函数,并将被调用函数的注释进行分类,将分类结果为how型(描述函数如何实现的注释)、what型(描述函数功能的注释)和why型(描述函数为何如此设计的注释)注释传递到调用函数处,作为调用函数的基本信息,提供指示性信息,以丰富函数信息表,并作为后续模型训练的数据集。
3.构建基于循环神经网络的深度学习翻译模型。将有传递注释的超过17万个Java函数划分训练集和测试集。为了解决长期记忆和方向传播中的梯度等问题,使用循环神经网络的变种双向GRU对训练集数据进行训练,得到一个序列-序列(Seq2Seq)翻译模型,源语言编程Java语言,目标语言为函数注释。模型输入为两个编码器和一个解码器。其中一个编码器接收函数体token流,用于学习函数的编程语言特性,其由函数信息表中函数体按照一个或多个空格、标点符号、换行符以及驼峰法则等分割。另一个编码器接收传递注释token流,用于学习项目中已经包含的自然语言特性,通过传递注释1-n加特殊分割符‘##’拼接而成,即单行数据为<传递注释1##传递注释2##...>。
给定一个代码片段X=x1,x2...,xt,...xm,对于单个输入词xt,双向GRU会将输入编码器成前向和后向两个隐藏状态
Figure BSA0000230650180000031
均由当前token和前一个隐藏状态通过函数关系得到,如所示
Figure BSA0000230650180000032
最终隐藏状态由前向和后向两个隐藏状态拼接而成,即
Figure BSA0000230650180000033
Figure BSA0000230650180000034
同理,给定一个传递代码片段X′,编码器也能得到其在模型中的隐藏状态
Figure BSA0000230650180000035
为了解决长序列向定长向量变换过程中信息丢失的瓶颈问题,引入注意力机制(Attention Mechanism)。在注意力机制下,两个编码器得到一个上下文向量
Figure BSA0000230650180000036
其中αti和hi为接收函数体token的编码器注意力分布和隐藏状态,而α′ti和h′i为接收传递注释的编码器的注意力分布和隐藏状态。解码器被设计用来生成目标注释序列Y=y1,y2...,yt,...ym。每个生成词yt由其前面的所有生成词y1到yt-1和输入X的条件概率决定,即
Figure BSA0000230650180000037
其中
Figure BSA0000230650180000038
是上下文向量ct和解码器中隐藏状态st拼接而成,即
Figure BSA0000230650180000039
训练阶段之后,得到最终模型M(X|X′),M(X|X′)可预测任意给定一个代码片段X和一个传递代码片段X′,输出前一个单词为yt-1的情况下输出每一个位置单词为yt的概率值p(yt|X,X′,yt-1)。
为了增强结果的普适性和说服力,复现了当前现有的最好工作并在相同实验环境下进行了十则交叉验证。结果显示,本发明的合成BLEU指标和人工精度指标显著高于现有工作。
附图说明
图1为本发明基于JDT和SOOT的Java函数信息提取示意图
图2为本发明基于映射和注释分类的注释传递示意图
图3为本发明基于双向循环神经网络GRU训练示意图
具体实施方式
本发明具体包括以下步骤:
1)首先使用GitHub API对Java项目Stars数进行排序,得到前2000个Java项目,并使用静态分析工具JDT,提取项目中的函数信息,遍历每个Java类下每个函数中的每个语句,提取词法和语法特征,形成函数信息表。
2)进入项目目录执行[mvn package-DskipTests],编译项目并过滤掉其中的所有单元测试,随后为每个Java文件生成编译过程.class文件,并基于静态分析工具SOOT遍历Java类所有方法及其调用关系字节码,提取其中的函数间调用关系及调用类型,形成函数调用关系表。
3)根据函数修饰符、函数名、函数所在类名、参数类型等信息唯一确定函数,并且建立信息表和函数调用关系表映射,将被调用函数的注释进行分类,随后将指定类别的注释传递到调用函数处,作为调用函数的基本信息,丰富函数信息表,并用于后续训练。
4)将步骤3)得到的含有传递注释的函数信息表按照9∶1的比例随机划分训练集和测试集,基于深度学习模型循环神经网络的变种双向GRU对训练集数据进行训练,结合注意力机制(Attention Mechanism),得到一个序列-序列(Seq2Seq)翻译模型,将函数体token流和传递注释token流作为编码器输入,函数注释token流作为解码器输入。为提高训练效率,使用GPU进行训练。训练结束后使用测试数据中函数体token和传递注释token输入模型测试,自动生成注释。
5)将步骤4)中剩下的10%测试函数按照训练输入格式切分,输入训练好模型,按照模型参数下条件概率顺序地预测出每一个位置概率最大的单词向量,最后形成完整语句,作为生成注释。
步骤1)中提取函数信息并形成信息表如附图图1所示,具体流程如下:使用GithubAPI对Java项目Stars数进行排序,得到前2000个Java项目,Clone至本地并筛选出其中使用Maven作为管理工具的项目。随后使用静态分析工具JDT提取每个Java函数的基本信息,形成函数信息表,每个表项为<序号,类名,函数名,函数修饰符,函数体,函数参数,函数参数类型,函数返回值,函数返回值类型,函数抽象语法结构(AST),函数注释(JavaDoc)>。
步骤2)对步骤1)中用Maven管理的Java项目进行筛选,然后进入项目目录执行[mvn package-DskipTests],编译项目并过滤掉其中的所有单元测试。处理4种Java常见调用方法类型,即invokeinterface(调用接口方法)、invokevirtual(调用对象实例方法)、invokestatic(调用类静态方法)、invokespecial(调用特殊处理的实例方法,例如构造函数)。为了区分调用类型,获取函数的正确路径从而获得高精度的调用关系,对编译后.class文件使用静态分析工具SOOT进行分析,提取字节码中关键字invokeinterface、invokevirtual、invokestatic、invokespecial,并在字节码层次抽取函数调用关系,形成函数间调用关系表。每个表项为<序号,调用函数类名,调用函数修饰符,调用函数函数名,调用函数参数,调用函数返回值,被调用函数Callee类名,被调用函数修饰符,被调用函数函数名,被调用函数参数,被调用函数返回值,调用类型>。
步骤3)基于步骤1)和步骤2)中得到的函数信息表和函数调用关系表,构建映射,基于函数修饰符、类名、函数名、参数和返回值唯一确定同一函数,将被调用函数的函数注释进行分类,将how型、what型和why型注释传递到调用函数处。最后结果作为后续步骤的训练数据。每个数据项包含<序号,函数信息,传递注释1,传递注释2,...,传递注释n>,其中函数信息包含步骤1)中函数信息表中所有内容,传递注释1-n为进行传递后传递至该函数的注释,附图图2展示注释传递过程。
步骤4)基于步骤3)得到的含有传递注释的函数信息表按照9∶1比例随机划分训练集和测试集,其中90%数据用于训练。如附图图3所示,训练基于循环神经网络RNN的变种双向GRU,是一个典型的序列-序列(Seq2Seq)模型。模型输入为两个编码器和一个解码器。其中一个编码器接收函数体token流,用于学习函数的编程语言特性,由函数信息表中函数体按照一个或多个空格、标点符号、换行符以及驼峰法则等分割。另一个编码器接收传递注释token流,用于学习项目中已经包含的自然语言特性,其由步骤3)中传递注释1-n加特殊分割符‘##’拼接而成,即单行数据为<传递注释1##传递注释2##...>。
给定一个代码片段X=x1,x2...,xt,...xm。对于单个输入词xt,双向GRU会将输入编码器成前向和后向两个隐藏状态
Figure BSA0000230650180000051
均由当前token和前一个隐藏状态通过函数关系得到,如所示
Figure BSA0000230650180000052
最终隐藏状态由前向和后向两个隐藏状态拼接而成,即
Figure BSA0000230650180000053
Figure BSA0000230650180000054
同理,给定一个传递代码片段X′,编码器也能得到其在模型中的隐藏状态
Figure BSA0000230650180000055
为了解决长序列向定长向量变换过程中信息丢失的瓶颈问题,引入注意力机制(Attention Mechanism)。在注意力机制下,两个编码器得到一个上下文向量
Figure BSA0000230650180000056
其中αti和hi为接收函数体token的编码器注意力分布和隐藏状态,而α′ti和h′i为接收传递注释的编码器的注意力分布和隐藏状态。解码器被设计用来生成目标注释序列Y=y1,y2...,yt,...ym。每个生成词yt由其前面的所有生成词y1到yt-1和输入X的条件概率决定,即
Figure BSA0000230650180000061
其中
Figure BSA0000230650180000062
是上下文向量ct和解码器中隐藏状态st拼接而成,即
Figure BSA0000230650180000063
训练阶段之后,得到最终模型M(X|X′),M(X|X′)可预测任意给定一个代码片段X和一个传递代码片段X′,之前输出的所有单词为y<t的情况下输出每一个位置单词为yt的概率值p(yt|X,X′,y<t)。
步骤5)基于步骤4)中剩余的10%的测试集函数信息,均处理成步骤4)得到模型M(X|X′)中编码器所接收的输入,即函数体token流和传递注释token流,在每个位置t上预测得到所有可能生成单词的概率p并按照从大到小进行排序,选出概率p最大的词汇yt,最后将所有位置上生成单词向量转化成单词,并拼接形成注释。

Claims (6)

1.一种基于程序分析的Java函数注释自动生成方法,其特征是对项目进行编译及建模,使用静态分析工具JDT提取出所有函数的定义信息和注释,形成函数信息表;接着对编译后项目使用静态分析工具SOOT生成函数调用图,建立函数调用和函数信息的映射,形成函数调用关系表;随后对注释进行分类,将指定类别的被调用函数注释传递到调用函数,丰富函数信息表;再根据函数信息表数据集构建基于循环神经网络的深度学习模型,使用序列到序列模型,并采取双向GRU,使用两个编码器去接收函数体token和传递注释token,使用一个解码器接收函数注释token;使用训练完毕的模型为测试代码段生成注释;
所述方法包括以下几个步骤:
1)使用Github API对Java项目Stars数进行排序,得到前2000个Java项目,并使用静态分析工具JDT,提取项目中的函数信息,遍历每个Java类下每个函数中的每个语句,提取词法和语法特征,形成函数信息表;
2)进入项目目录执行[mvn package-DskipTests],编译项目并过滤掉其中所有单元测试,为每个Java文件生成编译过程.class文件,基于静态分析工具SOOT遍历Java类所有方法及其调用关系字节码,提取函数间调用关系及调用类型,形成函数调用关系表;
3)根据函数修饰符、函数名、函数所在类名、参数类型唯一确定函数,并且建立信息表和函数调用关系表映射,将被调用函数的注释进行分类,将指定类别的注释传递到调用函数处,作为调用函数的基本信息,丰富函数信息表,并用于后续训练;
4)将步骤3)得到的含有传递注释的函数信息表按照9∶1的比例随机划分训练集和测试集,基于深度学习模型循环神经网络的变种双向GRU对训练集数据进行训练,结合注意力机制(Attention Mechanism),得到一个序列-序列(Seq2Seq)翻译模型,将函数体token流和传递注释token流作为编码器输入,函数注释token流作为解码器输入;为提高训练效率,使用GPU进行训练;训练结束后使用测试数据中函数体token和传递注释token输入模型测试,自动生成注释;
5)将步骤4)中剩下的10%测试函数按照训练输入格式切分,输入训练好的模型,按照模型参数下条件概率顺序预测每一个位置概率最大的单词向量,形成完整语句,即为生成注释。
2.根据权利要求1所述的基于程序分析的Java函数注释自动生成方法,其特征是步骤1)中,针对GitHub中按照Stars数靠前的Java项目,Clone至本地使用静态分析工具JDT,编码遍历每个Java类下的每个函数的每条语句,提取每个Java函数的基本信息,包括词法和语法结构,每个表项为<序号,类名,函数名,函数修饰符,函数体,函数参数,函数参数类型,函数返回值,函数返回值类型,函数抽象语法结构(AST),函数注释(JavaDoc)>。
3.根据权利要求1所述的基于程序分析的Java函数注释自动生成方法,其特征是步骤2)中,基于静态分析工具SOOT的函数调用图生成技术,首先对项目进行本地编译,为获取Java中调用关系类型invokeinterface(调用接口方法)、invokevirtual(调用对象实例方法)、invokestatic(调用类静态方法)、invokespecial(调用特殊处理的实例方法),基于SOOT编码对编译.class文件,从字节码的层次提取函数间精确调用关系,形成函数间调用关系表;函数调用关系表每个表项为<序号,调用函数类名,调用函数修饰符,调用函数函数名,调用函数参数,调用函数返回值,被调用函数Callee类名,被调用函数修饰符,被调用函数函数名,被调用函数参数,被调用函数返回值,调用类型>。
4.根据权利要求1所述的基于程序分析的Java函数注释自动生成方法,其特征是步骤3)中,基于步骤1)和步骤2)中得到的函数信息表和函数调用关系表,构建映射,基于函数修饰符、类名、函数名、参数和返回值唯一确定同一函数,将被调用函数的函数注释进行分类,将how型、what型和why型注释传递到调用函数处,作为后续步骤的训练数据,每个数据项包含<序号,函数信息,传递注释1,传递注释2,...,传递注释n>,其中函数信息包含步骤1)中函数信息表中所有内容,传递注释1-n为传递至该函数的所有注释。
5.根据权利要求1所述的基于程序分析的Java函数注释自动生成方法,其特征是步骤4)中训练基于双向GRU,为一个典型的Seq2Seq模型;模型输入为两个编码器和一个解码器,其中一个编码器接收函数体token,按空格、标点符号、驼峰法则分割函数信息表中函数体,另一个编码器接收传递注释,由步骤3)中传递注释1-n加特殊分割符‘#’拼接而成;双向GRU将输入编码成前向和后向两个隐藏状态,均由当前token和前一个隐藏状态通过函数关系得到,最终隐藏状态由前向和后向两个隐藏状态拼接而成;引入注意力机制,通过两个编码器得到一个上下文向量,解码器被设计用来生成目标注释序列;每个生成词由其前面的所有生成词和编码器输入的条件概率决定,训练得到最终模型M(X|X′),可预测任意给定一个代码片段X和一个传递代码片段X′,在之前输出的所有单词为y<t的情况下,输出每一个位置单词为yt的概率值p(yt|X,X′,y<t)。
6.根据权利要求1所述的基于程序分析的Java函数注释自动生成方法,其特征是将步骤5)中剩余的10%测试集函数信息,均处理成步骤4)模型中编码器所接收的输入,即函数体token流和传递注释token流,在每个位置t上预测得到所有可能生成单词的概率p,并按照从大到小进行排序,选出概率p最大的词汇yt,最后将所有位置上生成单词向量转化成单词,并拼接形成注释。
CN202110045380.0A 2021-01-13 2021-01-13 一种基于程序分析的Java函数注释自动生成方法 Active CN112433754B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110045380.0A CN112433754B (zh) 2021-01-13 2021-01-13 一种基于程序分析的Java函数注释自动生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110045380.0A CN112433754B (zh) 2021-01-13 2021-01-13 一种基于程序分析的Java函数注释自动生成方法

Publications (2)

Publication Number Publication Date
CN112433754A CN112433754A (zh) 2021-03-02
CN112433754B true CN112433754B (zh) 2022-05-31

Family

ID=74697169

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110045380.0A Active CN112433754B (zh) 2021-01-13 2021-01-13 一种基于程序分析的Java函数注释自动生成方法

Country Status (1)

Country Link
CN (1) CN112433754B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113778852B (zh) * 2021-06-04 2023-07-28 南方科技大学 一种基于正则表达式的代码分析方法
CN117170673B (zh) * 2023-08-03 2024-05-17 浙江大学 面向二进制代码文本注释自动化生成方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103336760A (zh) * 2013-07-11 2013-10-02 北京信息科技大学 一种基于逆向工程自动生成软件文档的方法及装置
CN108345457A (zh) * 2018-01-24 2018-07-31 上海交通大学 一种对程序源代码自动生成功能描述性注释的方法
CN109783079A (zh) * 2018-12-21 2019-05-21 南京航空航天大学 一种基于程序分析和循环神经网络的代码注释生成方法
CN110018820A (zh) * 2019-04-08 2019-07-16 浙江大学滨海产业技术研究院 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法
CN111090461A (zh) * 2019-11-18 2020-05-01 中山大学 一种基于机器翻译模型的代码注释生成方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10803252B2 (en) * 2018-06-30 2020-10-13 Wipro Limited Method and device for extracting attributes associated with centre of interest from natural language sentences
CN111694570A (zh) * 2019-03-13 2020-09-22 南京大学 一种基于静态程序分析的JavaScript函数参数不匹配检测方法
CN110750297B (zh) * 2019-10-11 2021-08-20 南京大学 一种基于程序分析和文本分析的Python代码参考信息生成方法
CN111104159A (zh) * 2019-12-19 2020-05-05 南京邮电大学 一种基于程序分析和神经网络的注释定位方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103336760A (zh) * 2013-07-11 2013-10-02 北京信息科技大学 一种基于逆向工程自动生成软件文档的方法及装置
CN108345457A (zh) * 2018-01-24 2018-07-31 上海交通大学 一种对程序源代码自动生成功能描述性注释的方法
CN109783079A (zh) * 2018-12-21 2019-05-21 南京航空航天大学 一种基于程序分析和循环神经网络的代码注释生成方法
CN110018820A (zh) * 2019-04-08 2019-07-16 浙江大学滨海产业技术研究院 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法
CN111090461A (zh) * 2019-11-18 2020-05-01 中山大学 一种基于机器翻译模型的代码注释生成方法

Also Published As

Publication number Publication date
CN112433754A (zh) 2021-03-02

Similar Documents

Publication Publication Date Title
CN108388425B (zh) 一种基于lstm自动补全代码的方法
CN110348016B (zh) 基于句子关联注意力机制的文本摘要生成方法
CN108446540B (zh) 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统
CN111090461B (zh) 一种基于机器翻译模型的代码注释生成方法
CN109344230B (zh) 代码库文件生成、代码搜索、联结、优化以及移植方法
CN113076133B (zh) 基于深度学习的Java程序内部注释的生成方法及系统
CN112215013B (zh) 一种基于深度学习的克隆代码语义检测方法
CN112433754B (zh) 一种基于程序分析的Java函数注释自动生成方法
CN101576850B (zh) 一种改进的面向宿主的嵌入式软件白盒测试方法
CN113138920B (zh) 基于知识图谱与语义角色标注的软件缺陷报告分派方法及装置
CN113961241A (zh) 一种基于gat图神经网络模型的代码克隆检测方法
CN110147552B (zh) 基于自然语言处理的教育资源质量评价挖掘方法及系统
CN113190219A (zh) 一种基于递归神经网络模型的代码注释生成方法
CN112417888A (zh) 一种结合BiLSTM-CRF算法与R-BERT算法解析稀疏语义关系的方法
CN113657123A (zh) 基于目标模板指导和关系头编码的蒙语方面级情感分析方法
CN115357719A (zh) 基于改进bert模型的电力审计文本分类方法及装置
CN115048141A (zh) 一种基于图引导的Transformer模型代码注释自动生成方法
CN115438709A (zh) 基于代码属性图的代码相似性检测方法
Wax Automated grammar engineering for verbal morphology
CN111831624A (zh) 数据表创建方法、装置、计算机设备及存储介质
Hu et al. Deep-autocoder: Learning to complete code precisely with induced code tokens
CN111382333B (zh) 基于案件相关性联合学习与图卷积的新闻文本句中案件要素抽取方法
CN117521629A (zh) 一种基于大语言模型的桥梁检测报告生成方法
CN108563561A (zh) 一种程序隐性约束提取方法及系统
CN115826988A (zh) 一种基于数据流分析和注意力机制的Java方法注释即时自动更新方法

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