CN109799990A - 源代码注释自动生成方法及系统 - Google Patents
源代码注释自动生成方法及系统 Download PDFInfo
- Publication number
- CN109799990A CN109799990A CN201711137568.8A CN201711137568A CN109799990A CN 109799990 A CN109799990 A CN 109799990A CN 201711137568 A CN201711137568 A CN 201711137568A CN 109799990 A CN109799990 A CN 109799990A
- Authority
- CN
- China
- Prior art keywords
- source code
- sentence
- syntax tree
- module
- sid
- 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.)
- Granted
Links
Landscapes
- Machine Translation (AREA)
Abstract
本发明涉及源代码注释自动生成方法及系统,通过对第一源代码进行语义分析并生成抽象语法树,从而建立自然语言与程序语言的内部映射关系,再以此映射关系对第二源代码进行注释,本发明使得计算机高效分析程序语言然后映射到对应的自然语言,使得程序员能高效而且容易理解源代码所实现的功能。帮助程序员快速了解计算机程序的内部运行机制、从而帮助程序员快速识别出软件设计中的缺陷、漏洞。本发明具有通用性,解决了现有的人工分析重复性源代码的工作量问题,减少了分析重复性源代码而带来的时间和成本支出。
Description
技术领域
本发明涉及软件源代码分析工具,具体涉及一种基于递归神经网络及抽象语法树的源代码注释自动生成方法及系统。
背景技术
人工智能已成为全球热门话题,其中基于深度学习的AlphaGo击败了李世石。人工智能算法不断在各个行业中得到应用。各个行业在工业时代后期积累的大量数据使得随机概率模型更加清晰,更加能反应客观规律。因此,合理使用概率理论分析能更加准确获取行业规律。概率理论作为人工智能的基石之一,随之能引申到各行各业中。
现有的源代码分析工具能帮助程序员快速分析程序源代码的数据结构,程序源代码的内部模块执行流程。但是这些信息侧重从计算机角度分析和解决实际问题,其过程过于形式化和抽象,且与我们使用的自然语言描述和表达有大差异。因此,单看这些源代码工具提供的信息,很难理解程序所实现的功能。
如控制红绿灯的计算机程序中,通过源代码分析工具能快速知道红绿灯的计算机程序的数据结构,并知道程序功能的模块,实现红绿灯的关闭开启功能。但是,通过源代码阅读工具程序员无法快速理解哪部分代码实现关闭、开启红灯这个功能。程序员必须通过理解数据结构所描述的现实信息以及该数据结构的影响范围,全局考虑才能明白源代码的哪个功能模块实现关闭及开启红灯功能。
因此,计算机程序源代码会用大量的源代码注释来解决上述问题。在计算机源代码的关键地方,使用自然语言进行文字描述,这些文字描述信息一般叫做源代码注释。计算机程序运行时会忽略掉源代码注释的文字内容,因此源代码注释不会对程序的运行有任何影响。
但是,随之而来的结果是,不同软件开发团队,实现同样的功能的计算机程序会使用不同的词汇和表达顺序,因此程序员需要排除大量重复冗余的信息。
再者,由于计算机程序还在不断应用到新的场合,为了适应新的场合,程序源代码也会不断在变化,程序源代码注释的部分非常依赖于所在的程序源代码实现的功能。因此,程序员要及时更新序源代码实现的功能与程序源代码注释。过时、错误、缺失的程序源代码注释,会导致团队中的其它程序员理解产生误差。情况可能进一步恶化,如:计算机程序的实验环境难以构建,没有实验环境就无法通过监控分析计算机程序的内部运行流程、内部处理机制来了解计算机程序的内部工作原理。因此,团队中的个人会存在理解误差,同时团队成员之间信息的传播会出现信息丢失,误差信息会不断扩大,导致软件开发管理上困难不断。
因此,需要提供一种新的源代码注释方法。
发明内容
为解决现有技术存在的不足,本发明提供了一种源代码注释自动生成方法,包括如下步骤:
步骤S1:利用第一源代码的第一抽象语法树,建立语法标识tid-句子标识sid映射关系;
步骤S2:对第二源代码进行词法及语法分析,得到第二抽象语法树,并对该第二抽象语法树进行匹配计算,得到第二语法标识tid;
步骤S3:根据步骤S1中的语法标识tid-句子标识sid映射关系以及步骤S2中的第二语法标识tid,得到第二句子标识sid;
步骤S4:构建注释生成模型;
步骤S5:根据步骤S3中的第二句子标识sid以及步骤S4中的注释生成模型,生成第二源代码的注释;
其中,第一源代码为已有注释的软件程序源代码,第二源代码为欲对其注释的源代码;第一抽象语法树为已有注释的软件程序源代码的抽象语法树,第二抽象语法树为欲对其注释的源代码的抽象语法树;第二语法标识tid及第二句子标识sid分别为欲对其注释的源代码的语法标识tid及句子标识sid。
其中,步骤S1包括:
步骤S11:对第一源代码进行词法及语法分析,得到第一源代码中的每一个功能模块的第一抽象语法树,并为每棵第一抽象语法树分配一个唯一的第一语法标识tid;
步骤S12:提取出第一源代码中各个层次的代码注释,并为每个独立的第一句子分配一个唯一的第一句子标识sid;
步骤S13:根据步骤S11的第一语法标识tid及步骤S12的第一句子标识sid,建立语法标识tid与句子标识sid的一一映射关系;
步骤S14:将第一源代码的第一句子标识sid保存到递归神经网络训练数据集中,供后续的递归神经网络模型学习;并且,在所述步骤S4中,根据步骤S14中的递归神经网络训练数据集,对由递归神经网络神经元组成的递归神经网络进行学习训练,应用领域问题知识体系结构,构建注释生成模型;
其中,第一语法标识tid及第一句子标识sid分别为已有注释的软件程序源代码的语法标识tid及句子标识sid,第一句子为已有注释的软件程序源代码的句子。
其中,所述步骤S4中,递归神经网络进行的学习训练过程包括:
S41:前向计算每个递归神经网络神经元的五个向量输出值;
S42:反向计算每个递归神经网络神经元的误差项δ值;
S43:根据相应的误差项δ值,计算每个权重的梯度;
其中,步骤S42中,神经元的反向计算包括延时间的反向传播及将误差项向上一层传播。
其中,所述步骤S11中及步骤S2中,词法分析使用Flex程序处理,语法分析使用bison程序处理;
所述步骤S13中,语法标识tid与句子标识sid的一一映射关系使用哈希算法建立。
其中,所述步骤S4中,递归神经网络进行的学习训练内容包括句子匹配以及与应用软件领域相关的知识及词汇的表述及表达顺序。
其中,所述步骤S2中,对该第二抽象语法树进行的匹配计算使用VF2子图匹配算法。
本发明另外提供了一种源代码注释自动生成系统,包括:
抽象语法树模块,用于对第一源代码及第二源代码进行词法及语法分析,得到各源代码中每个功能模块的抽象语法树;
语法树库模块,与抽象语法树模块连接,用于为抽象语法树模块中的每棵抽象语法树分配唯一的语法标识tid;
句子库模块,用于提取第一源代码中各个层次的代码注释,记录所有与自然语言相关的句子,并为每个独立的第一句子分配一个唯一的句子标识sid;
映射模块,与语法树库模块及句子库模块连接,用于建立语法标识tid与句子标识sid的一一映射关系;
递归神经网络训练数据集模块,与句子库模块连接,用于存储句子库模块中的句子标识sid;
递归神经网络模块,与递归神经网络训练数据集模块连接,用于根据递归神经网络训练数据集模块进行学习训练,构建注释生成模型;
注释生成模块,与递归神经网络模块及映射模块连接,用于结合注释生成模型及语法标识tid-句子标识sid映射关系,生成第二源代码的注释;
其中,第一源代码为已有注释的软件程序源代码,第二源代码为欲对其注释的源代码,第一句子为已有注释的软件程序源代码的句子。
其中,所述递归神经网络模块包括两个部分,其中,第一部分包括两个平行的双向递归神经网络构成的特征抽取部分,第二部分包括由单层全连接层构成的分类拟合层。
其中,所述抽象语法树模块中,对第一源代码及第二源代码进行的词法分析使用Flex程序处理,语法分析使用bison程序处理;
所述映射模块中,语法标识tid与句子标识sid的一一映射关系使用哈希算法建立。
其中,所述递归神经网络模块进行的学习训练内容包括句子匹配以及与应用软件领域相关的知识词汇的表述及表达顺序。
本发明提供的源代码注释自动生成方法及系统,通过对第一源代码进行语义分析并生成抽象语法树,从而建立自然语言与程序语言的内部映射关系,使得计算机高效分析程序语言然后映射到对应的自然语言,使得程序员能高效而且容易理解源代码所实现的功能。帮助程序员快速了解计算机程序的内部运行机制、从而帮助程序员快速识别出软件设计中的缺陷、漏洞。。本发明具有通用性,减少了现有的人工分析重复性源代码的工作量及分析重复性源代码而带来的时间和成本支出。
附图说明
图1:本发明的源代码注释自动生成系统的系统架构示意图;
图2:本发明的源代码注释自动生成方法的模型构建阶段对应的系统架构图;
图3:本发明的源代码注释自动生成方法的注释生成阶段对应的系统架构图;
图4:本发明的注释方法一实施例中功能模块代码的抽象语法树图;
图5:本发明的注释方法一实施例中功能模块代码的另一抽象语法树图。
附图标记说明
10 抽象语法树模块
20 语法树库模块
30 句子库模块
40 映射模块
50 递归神经网络训练数据集模块
60 递归神经网络模块
70 注释生成模块
D1 第一源代码
D2 第二源代码
具体实施方式
为了对本发明的技术方案及有益效果有更进一步的了解,下面结合附图详细说明本发明的技术方案及其产生的有益效果。
传统的编程语言经过词法、语法处理后形成抽象语法树,程序源代码注释则是程序员用来描述程序内部运行机制所使用的自然语言,基于现有的源代码分析系统功能不足,无法为程序员提供足够高度的信息的问题,本发明提供的基于递归神经网络及抽象语法树的源代码注释方法及系统,通过在自然语言中处理递归神经网络以获得程序源代码的注释,使递归神经网络能够处理那些输入之间前后关联的问题,由于自然语言中词与词之间的相互联系表达了具体的语境,因此使用递归神经网络处理自然语言有着独特的优势。
本发明提供的源代码注释自动生成方法及系统,利用软件开发过程中积累的大量程序源代码,以及数量庞大的变更历史,作为深度学习算法的训练数据。本发明的主要思路:使用递归神经网络分析源代码注释,通过构建软件应用领域问题知识体系结构,然后进行程序语言语法分析获得程序语法树结构,进而构建两者之间的映射。在分析新的计算机程序源代码时,能够使用语法树匹配算法,匹配已存在的语法树结构,然后查找到与之对应的自然语言序列,再通过递归神经网络以及应用领域问题知识体系结构,自动生成新的源代码注释,帮助程序员快速了解计算机程序的内部运行机制、从而帮助程序员快速识别出软件设计中的缺陷、漏洞。同时,也可以给动态内核调试提供基础支持。
本发明中,使用“第一”及“第二”将历史过程中积累的程序源代码以及新的计算机程序代码区分开,也即,第一源代码为已有注释的软件程序源代码,第二源代码为欲对其注释的源代码;第一抽象语法树为已有注释的软件程序源代码的抽象语法树,第二抽象语法树为欲对其注释的源代码的抽象语法树;第一语法标识及第一句子标识分别为已有注释的软件程序源代码的语法标识及句子标识;第二语法标识及第二句子标识分别为欲对其注释的源代码的语法标识及句子标识;第一语法及第一句子分别为已有注释的软件程序源代码的语法及句子;第二语法及第二句子分别为欲对其注释的源代码的语法及句子。
图1为本发明的注释自动生成系统的系统架构示意图,如图1所示,本发明提供的源代码注释自动生成系统,包括抽象语法树模块10、语法树库模块20、句子库模块30、映射模块40、递归神经网络训练数据集模块50、递归神经网络模块60以及注释生成模块70,其中,
抽象语法树模块10用于对第一源代码及第二源代码进行词法及语法分析,得到各源代码中每个功能模块的抽象语法树,具体的,在生成注释模型及建立语法标识tid与句子标识sid的一一映射关系时,抽象语法树模块10对第一源代码进行词法及语法分析,在利用所生成的注释模型及建立的映射关系生成第二源代码注释时,抽象语法树模块10对第二源代码进行词法及语法分析。
语法树库模块20与抽象语法树模块10连接,用于为抽象语法树模块10中的每棵抽象语法树分配唯一的变量,即语法标识tid,根据语法标识tid可以查找到抽象语法树的功能。
句子库模块30用于提取第一源代码中各个层次的代码注释,记录所有与自然语言相关的句子,并为每个独立的句子分配一个唯一的句子标识sid,根据句子标识sid可以找到句子的功能。
映射模块40与语法树库模块20及句子库模块30连接,以建立语法树库模块20中的语法标识tid与句子库模块30中的句子标识sid之间的一一映射关系。
递归神经网络训练数据集模块50与句子库模块30以及递归神经网络模块60连接,其存储句子库模块30中的句子标识sid,使递归神经网络模块60应用领域问题知识体系结构,对句子标识sid进行相似度匹配,同时进行应用软件领域相关的知识词汇的表述及表达顺序的学习训练,以构建注释生成模型,递归神经网络为由神经元构成的多层循环神经网络,并且,递归神经网络在进行相似度匹配时,所使用的句子标识sid是第一源代码的第一句子标识sid。
在具体实施时,开源软件TensorFlow软件已经实现递归神经网络模型,因此,在应用领域问题知识体系结构构建注释生成模型时,只需要提供训练数据集合、测试数据集合等参数即可。
本发明中,递归神经网络在进行学习训练时,具体可通过下述步骤进行:
S1:前向计算每个递归神经网络神经元的五个向量输出值;
S2:反向计算每个递归神经网络神经元的误差项δ值;
S3:根据相应的误差项δ值,计算每个权重的梯度;
其中,步骤S2中,神经元的反向计算包括延时间的反向传播及将误差项向上一层传播。
注释生成模块70与递归神经网络模块60及映射模块40连接,在对第二源代码进行注释时,映射模块40根据第二源代码的第二语法标识tid,从语法标识tid-句子标识sid映射关系中找到第二源代码的第二句子标识sid,注释生成模块70从映射模块40中获取第二源代码的第二句子标识sid,并利用递归神经网络模块60构建的注释生成模型生成第二源代码的注释。
本发明中,所述递归神经网络模块60包括两个部分,其中,第一部分包括两个平行的双向递归神经网络构成的特征抽取部分,第二部分包括由单层全连接层构成的分类拟合层。所述特征抽取部分是两个并行的部分,输入可以是两个词,两句话或者两篇文章,通过堆叠的单多层双向递归神经网络抽取特征。并行的堆叠递归神经网络块之间原则上应该具有不同的参数,同时,如果输出的特征长度过大,可以先用一个全连接层绛维,提升模型拟合能力,进一步抽取更有价值的特征,保证模型收敛。
本发明中,所述抽象语法树模块10中,对第一源代码及第二源代码进行的词法分析较佳使用Flex程序处理,语法分析较佳使用bison程序处理;所述映射模块40中,语法标识tid与句子标识sid的一一映射关系较佳使用哈希算法建立。
综上,本发明的提供的源代码注释自动生成系统,通过对第一源代码进行语义分析并生成抽象语法树,从而建立自然语言与程序语言的内部映射关系,使得计算机高效分析程序语言然后映射到对应的自然语言,使得程序员能高效而且容易理解源代码所实现的功能。帮助程序员快速了解计算机程序的内部运行机制、从而帮助程序员快速识别出软件设计中的缺陷、漏洞。减少程序员阅读大量重复冗余的源代码。本系统具有通用性,解决了现有的人工分析重复性源代码的工作量,减少了分析重复性源代码而带来的时间和成本支出。
本发明另外提供一种源代码注释自动生成方法,包括如下步骤:
步骤S1:利用第一源代码的第一抽象语法树,建立语法标识tid-句子标识sid映射关系;
步骤S2:对第二源代码进行词法及语法分析,得到第二抽象语法树,并对该第二抽象语法树进行匹配计算,得到第二语法标识tid,该计算方法较佳使用VF2子图匹配算法;词法分析较佳使用Flex程序处理,语法分析较佳使用bison程序处理;
步骤S3:根据步骤1中的语法标识tid-句子标识sid映射关系以及步骤S2中的第二语法标识tid,得到第二句子标识sid;
步骤S4:构建注释生成模型;
步骤S5:根据步骤S3中的第二句子标识sid以及步骤S4中的注释生成模型,生成第二源代码的注释。
其中,步骤S1包括:
步骤S11:对第一源代码进行词法及语法分析,得到第一源代码中的每一个功能模块的第一抽象语法树,并为每棵第一抽象语法树分配一个唯一的第一语法标识tid;词法分析较佳使用Flex程序处理,语法分析较佳使用bison程序处理;
步骤S12:提取出第一源代码中各个层次的代码注释,并为每个独立的第一句子分配一个唯一的第一句子标识sid;
步骤S13:根据步骤S11的第一语法标识tid及步骤S12的第一句子标识sid,建立语法标识tid与句子标识sid的一一映射关系;较佳的,使用哈希算法建立;
步骤S14:将第一源代码的第一句子标识sid保存到递归神经网络训练数据集中,供后续的递归神经网络模型学习;
所述步骤S4包括:根据步骤S14中的递归神经网络训练数据集,对由递归神经网络神经元组成的递归神经网络进行学习训练,应用领域问题知识体系结构,构建注释生成模型。
其中,所述步骤S4中,递归神经网络进行的学习训练过程包括:
S41:前向计算每个递归神经网络神经元的五个向量输出值;
S42:反向计算每个递归神经网络神经元的误差项δ值;
S43:根据相应的误差项δ值,计算每个权重的梯度;
其中,步骤S42中,神经元的反向计算包括延时间的反向传播及将误差项向上一层传播。
循环递归神经网络进行的学习训练内容包括:句子标识匹配以及与应用软件领域相关的知识及词汇的表述及表达顺序。
也即,神经网络的学习一般分为两个阶段:学习阶段及模型应用阶段。
具体的,请继续参阅图2-图3所示,分别为本发明源代码注释自动生成方法,在注释模型构建阶段以及注释自动生成阶段的对应的系统架构图。
如图1-图2所示,本发明提供的注释自动生成方法,首先利用第一源代码D1构建注释生成模型,该构建过程包括:
S1:抽象语法树模块10对第一源代码D1进行词法及语法分析,得到第一源代码D1中每个功能模块的第一抽象语法树;
S2:语法树库模块20为每棵抽象语法树分配第一语法标识tid;
S3:句子库模块30提取第一源代码D1中各个层次的代码注释,并为第一源代码D1中每个独立的第一句子分配一个唯一的第一句子标识sid,根据第一句子标识sid可以找到句子的功能;
S4:映射模块40建立语法标识tid与句子标识sid的一一映射关系;
S5:递归神经网络训练数据集模块50存储句子库模块30的第一句子标识sid;
S6:递归神经网络模块60构建注释生成模型。
如图1及图3所示,本发明提供的注释自动生成方法,在对第二源代码D2自动生成注释时,其生成过程包括:
S1:抽象语法树模块10对第二源代码D2进行词法及语法分析,得到第二源代码D2中每个功能模块的第二抽象语法树;
S2:语法树库模块20对第二抽象语法树进行匹配计算,得到第二语法标识tid;
S3:映射模块40获取第二语法标识tid,并根据语法标识tid-句子标识sid映射关系,找到第二源代码D2的第二句子标识sid;
S4:注释生成模块70结合递归神经网络模块60中的注释生成模型及映射模块40中的第二句子标识sid,生成第二源代码D2的注释。
本发明中,对该第二抽象语法标识树进行的匹配计算较佳使用VF2子图匹配算法,该方法已经多年验证,图匹配速度快而且准确率比较高。
其算法如下:
1、设置初始状态s0的部分匹配状态M(s0)为空集,即M(s0)=O,且设置中间状态集合M(s)等于M(s0)
2、如果M(s)覆盖要匹配的目标图Gt中所有节点,则算法结束,返回匹配状态M(s)中的所有节点组成的图。否则,执行下一步操作。
3、计算匹配状态M(s)中所有节点的匹配集合P(s)
4、对于匹配集合P(s)中的所有节点执行如下操作:检查加入匹配节点p后两个图还是否同构;
如果同构,将匹配节点p加入s,更新配状态M(s),转跳到步骤2)继续执行;
如果异构,异构次数大于一定值,停止循环。
通过VF2算法,当计算结束,输出的结果为空集合,表明两棵抽象语法标识树没有匹配。否则,输出的节点数目表明两棵抽象语法标识树的相似程度。
根据本发明提供的注释自动生成方法,其在具体实施时的一个实施例如下:
1、对软件程序源代码(这里指的是全部的历史源代码)进行词法、语法分析,得到软件源代码中的每一个功能模块的抽象语法标识树,并为每棵抽象语法标识树分配一个全局唯一的语法标识tid(Tree Identification),并加入抽象语法标识树数据库中;获取程序语言的注释,并为每个句子分配一个全局唯一的句子标识sid(SentenceIdentification);建立语法标识tid与句子标识sid的映射关系。
2、从部分历史源代码中提出功能模块的变更源代码,对该源代码进行词法、语法分析得到语法标识tid1;获取对应语言的注释,为对应句子分配全局唯一的句子标识sid1,建立语法标识tid与句子标识sid的映射关系。
3、使用VF2匹配算法匹配步骤1中的语法标识树数据库,得到新的软件源代码的语法标识tid2;根据映射获取对应的句子标识sid2。
4、把句子标识sid1、sid2对应的句子,组成匹配句子对,再由人工给句子对打分,收集到神经网络训练数据集。训练数据集自然语言以句子对单位,本发明使用上述步骤,收集到了共10万个句子。其中,训练数据集合共8万个句子,测试数据集合共2万个句子。
每条数据的形式如下:
[“P is pointer.”,“a readable memory address.”,4.8]
第一列为句子1,第二列为句子2,第三列为句子相似度,最高分为5分,最低分为0分。
其中,开源软件TensorFlow软件已经实现递归神经网络模型,因此,我们使用上述步骤获得的训练数据集合、测试数据集合,迭代200次使得自动代码注释递归神经网络模型收敛。
本实例,步骤1中的某个共能模块的源代码有:
/*P is pointer*/
char*P=NULL;
其中/*P is pointer*/是程序语言的注释,使用现实中的语言进行描述。于是我们得到句子标识sid2
char*P=NULL;
是C语言程序代码,其代码表示P是一个指针,C语言中的指针表示的是一块可读取内存的地址。
经过Flex词法分析、bison语法分析,我们会得到如下第一语法标识tid1结构,如图4,
然后当我们分析源代码:
char*D=NULL;
经过Flex词法分析、bison语法分析,我们会得到如下语法标识tid2结构,如图5,
我们就可以通过VF2匹配算法,计算出两棵语法标识:语法标识tid1、tid2的相识度为5,相似度非常高。
步骤2中,递归神经网络模型训练过,能得计算出如下两个句子的相识程度:
1)P is pointer
2)a readable memory address
其句子标识相似程度为4.8。
因此我们可以使用语言给程序代码进行注释,
a readable memory address
添加源代码注释后的结果如下:
/*a readable memory address*/
char*D=NULL;
虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。
Claims (10)
1.一种源代码注释自动生成方法,其特征在于,包括如下步骤:
步骤S1:利用第一源代码的第一抽象语法树,建立语法标识tid-句子标识sid映射关系;
步骤S2:对第二源代码进行词法及语法分析,得到第二抽象语法树,并对该第二抽象语法树进行匹配计算,得到第二语法标识tid;
步骤S3:根据步骤S1中的语法标识tid-句子标识sid映射关系以及步骤S2中的第二语法标识tid,得到第二句子标识sid;
步骤S4:构建注释生成模型;
步骤S5:根据步骤S3中的第二句子标识sid以及步骤S4中的注释生成模型,生成第二源代码的注释;
其中,第一源代码为已有注释的软件程序源代码,第二源代码为欲对其注释的源代码;第一抽象语法树为已有注释的软件程序源代码的抽象语法树,第二抽象语法树为欲对其注释的源代码的抽象语法树;第二语法标识tid及第二句子标识sid分别为欲对其注释的源代码的语法标识tid及句子标识sid。
2.如权利要求1所述的源代码注释自动生成方法,其特征在于,步骤S1包括:
步骤S11:对第一源代码进行词法及语法分析,得到第一源代码中的每一个功能模块的第一抽象语法树,并为每棵第一抽象语法树分配一个唯一的第一语法标识tid;
步骤S12:提取出第一源代码中各个层次的代码注释,并为每个独立的第一句子分配一个唯一的第一句子标识sid;
步骤S13:根据步骤S11的第一语法标识tid及步骤S12的第一句子标识sid,建立语法标识tid与句子标识sid的一一映射关系;
步骤S14:将第一源代码的第一句子标识sid保存到递归神经网络训练数据集中,供后续的递归神经网络模型学习;
并且,在所述步骤S4中,根据步骤S14中的递归神经网络训练数据集,对由递归神经网络神经元组成的递归神经网络进行学习训练,应用领域问题知识体系结构,构建注释生成模型;
其中,第一语法标识tid及第一句子标识sid分别为已有注释的软件程序源代码的语法标识tid及句子标识sid,第一句子为已有注释的软件程序源代码的句子。
3.如权利要求2所述的源代码注释自动生成方法,其特征在于,所述步骤S4中,递归神经网络进行的学习训练过程包括:
S41:前向计算每个递归神经网络神经元的五个向量输出值;
S42:反向计算每个递归神经网络神经元的误差项δ值;
S43:根据相应的误差项δ值,计算每个权重的梯度;
其中,步骤S42中,神经元的反向计算包括延时间的反向传播及将误差项向上一层传播。
4.如权利要求2所述的源代码注释自动生成方法,其特征在于:
所述步骤S11中及步骤S2中,词法分析使用Flex程序处理,语法分析使用bison程序处理;
所述步骤S13中,语法标识tid与句子标识sid的一一映射关系使用哈希算法建立。
5.如权利要求2所述的源代码注释自动生成方法,其特征在于:
所述步骤S4中,递归神经网络进行的学习训练内容包括句子匹配以及与应用软件领域相关的知识及词汇的表述及表达顺序。
6.如权利要求1所述的源代码注释自动生成方法,其特征在于:所述步骤S2中,对该第二抽象语法树进行的匹配计算使用VF2子图匹配算法。
7.一种源代码注释自动生成系统,其特征在于包括:
抽象语法树模块,用于对第一源代码及第二源代码进行词法及语法分析,得到各源代码中每个功能模块的抽象语法树;
语法树库模块,与抽象语法树模块连接,用于为抽象语法树模块中的每棵抽象语法树分配唯一的语法标识tid;
句子库模块,用于提取第一源代码中各个层次的代码注释,记录所有与自然语言相关的句子,并为每个独立的第一句子分配一个唯一的句子标识sid;
映射模块,与语法树库模块及句子库模块连接,用于建立语法标识tid与句子标识sid的一一映射关系;
递归神经网络训练数据集模块,与句子库模块连接,用于存储句子库模块中的句子标识sid;
递归神经网络模块,与递归神经网络训练数据集模块连接,用于根据递归神经网络训练数据集模块进行学习训练,构建注释生成模型;
注释生成模块,与递归神经网络模块及映射模块连接,用于结合注释生成模型及语法标识tid-句子标识sid映射关系,生成第二源代码的注释;
其中,第一源代码为已有注释的软件程序源代码,第二源代码为欲对其注释的源代码,第一句子为已有注释的软件程序源代码的句子。
8.如权利要求7所述的源代码注释自动生成系统,其特征在于:所述递归神经网络模块包括两个部分,其中,第一部分包括两个平行的双向递归神经网络构成的特征抽取部分,第二部分包括由单层全连接层构成的分类拟合层。
9.如权利要求7所述的源代码注释自动生成系统,其特征在于:所述抽象语法树模块中,对第一源代码及第二源代码进行的词法分析使用Flex程序处理,语法分析使用bison程序处理;
所述映射模块中,语法标识tid与句子标识sid的一一映射关系使用哈希算法建立。
10.如权利要求7所述的源代码注释自动生成系统,其特征在于:
所述递归神经网络模块进行的学习训练内容包括句子匹配以及与应用软件领域相关的知识词汇的表述及表达顺序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711137568.8A CN109799990B (zh) | 2017-11-16 | 2017-11-16 | 源代码注释自动生成方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711137568.8A CN109799990B (zh) | 2017-11-16 | 2017-11-16 | 源代码注释自动生成方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109799990A true CN109799990A (zh) | 2019-05-24 |
CN109799990B CN109799990B (zh) | 2022-02-11 |
Family
ID=66555452
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711137568.8A Active CN109799990B (zh) | 2017-11-16 | 2017-11-16 | 源代码注释自动生成方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109799990B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110262800A (zh) * | 2019-06-03 | 2019-09-20 | 中国工商银行股份有限公司 | 多语言处理方法及装置 |
CN110399162A (zh) * | 2019-07-09 | 2019-11-01 | 北京航空航天大学 | 一种源代码注释自动生成方法 |
CN111290756A (zh) * | 2020-02-10 | 2020-06-16 | 大连海事大学 | 一种基于对偶强化学习的代码-注释转换方法 |
CN111459491A (zh) * | 2020-03-17 | 2020-07-28 | 南京航空航天大学 | 一种基于树形神经网络的代码推荐方法 |
CN112181430A (zh) * | 2020-09-29 | 2021-01-05 | 北京云族佳科技有限公司 | 代码变更统计方法、装置、电子设备及存储介质 |
WO2021017025A1 (zh) * | 2019-07-29 | 2021-02-04 | 东北大学 | 一种从自然语言自动生成Python代码的方法 |
CN113065322A (zh) * | 2021-04-06 | 2021-07-02 | 中山大学 | 一种代码段注释生成方法、系统及可读存储介质 |
CN113126976A (zh) * | 2021-04-08 | 2021-07-16 | 复旦大学 | 基于语法制导编辑器生成器的跨界服务长尾变化应变方法 |
US11971805B2 (en) | 2021-10-08 | 2024-04-30 | International Business Machines Corporation | Intelligent automated feature toggle system using annotations |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001005650A (ja) * | 1999-06-23 | 2001-01-12 | Kawasaki Steel Corp | コンピュータプログラムのコメント文生成方法及び装置 |
CN102129365A (zh) * | 2010-01-20 | 2011-07-20 | 阿里巴巴集团控股有限公司 | 一种生成代码说明文档的方法及装置 |
CN103488460A (zh) * | 2013-09-04 | 2014-01-01 | 用友软件股份有限公司 | 自动标记源代码的系统和方法 |
CN106681708A (zh) * | 2016-11-16 | 2017-05-17 | 中国科学院软件研究所 | 一种基于数据挖掘的源代码注释自动生成方法 |
CN106843840A (zh) * | 2016-12-23 | 2017-06-13 | 中国科学院软件研究所 | 一种基于相似度分析的源代码版本演化注释复用方法 |
-
2017
- 2017-11-16 CN CN201711137568.8A patent/CN109799990B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001005650A (ja) * | 1999-06-23 | 2001-01-12 | Kawasaki Steel Corp | コンピュータプログラムのコメント文生成方法及び装置 |
CN102129365A (zh) * | 2010-01-20 | 2011-07-20 | 阿里巴巴集团控股有限公司 | 一种生成代码说明文档的方法及装置 |
CN103488460A (zh) * | 2013-09-04 | 2014-01-01 | 用友软件股份有限公司 | 自动标记源代码的系统和方法 |
CN106681708A (zh) * | 2016-11-16 | 2017-05-17 | 中国科学院软件研究所 | 一种基于数据挖掘的源代码注释自动生成方法 |
CN106843840A (zh) * | 2016-12-23 | 2017-06-13 | 中国科学院软件研究所 | 一种基于相似度分析的源代码版本演化注释复用方法 |
Non-Patent Citations (2)
Title |
---|
DIEGO ORDÓÑEZ CAMACHOA等: "Automated generation of program translation and verification tools", 《SCIENCE OF COMPUTER PROGRAMMING》 * |
于来: "一种基于知识的代码理解支撑工具", 《安徽农业技术师范学院学报》 * |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110262800A (zh) * | 2019-06-03 | 2019-09-20 | 中国工商银行股份有限公司 | 多语言处理方法及装置 |
CN110399162B (zh) * | 2019-07-09 | 2021-02-26 | 北京航空航天大学 | 一种源代码注释自动生成方法 |
CN110399162A (zh) * | 2019-07-09 | 2019-11-01 | 北京航空航天大学 | 一种源代码注释自动生成方法 |
WO2021017025A1 (zh) * | 2019-07-29 | 2021-02-04 | 东北大学 | 一种从自然语言自动生成Python代码的方法 |
CN111290756A (zh) * | 2020-02-10 | 2020-06-16 | 大连海事大学 | 一种基于对偶强化学习的代码-注释转换方法 |
CN111290756B (zh) * | 2020-02-10 | 2023-08-18 | 大连海事大学 | 一种基于对偶强化学习的代码-注释转换方法 |
CN111459491A (zh) * | 2020-03-17 | 2020-07-28 | 南京航空航天大学 | 一种基于树形神经网络的代码推荐方法 |
CN111459491B (zh) * | 2020-03-17 | 2021-11-05 | 南京航空航天大学 | 一种基于树形神经网络的代码推荐方法 |
CN112181430A (zh) * | 2020-09-29 | 2021-01-05 | 北京云族佳科技有限公司 | 代码变更统计方法、装置、电子设备及存储介质 |
CN113065322A (zh) * | 2021-04-06 | 2021-07-02 | 中山大学 | 一种代码段注释生成方法、系统及可读存储介质 |
CN113065322B (zh) * | 2021-04-06 | 2022-02-08 | 中山大学 | 一种代码段注释生成方法、系统及可读存储介质 |
CN113126976A (zh) * | 2021-04-08 | 2021-07-16 | 复旦大学 | 基于语法制导编辑器生成器的跨界服务长尾变化应变方法 |
CN113126976B (zh) * | 2021-04-08 | 2022-06-21 | 复旦大学 | 基于语法制导编辑器生成器的跨界服务长尾变化应变方法 |
US11971805B2 (en) | 2021-10-08 | 2024-04-30 | International Business Machines Corporation | Intelligent automated feature toggle system using annotations |
Also Published As
Publication number | Publication date |
---|---|
CN109799990B (zh) | 2022-02-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109799990A (zh) | 源代码注释自动生成方法及系统 | |
CN108446540B (zh) | 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统 | |
CN110543419B (zh) | 一种基于深度学习技术的智能合约代码漏洞检测方法 | |
CN113360915B (zh) | 基于源代码图表示学习的智能合约多漏洞检测方法及系统 | |
CN103207855B (zh) | 针对产品评论信息的细粒度情感分析系统及方法 | |
CN109284396A (zh) | 医学知识图谱构建方法、装置、服务器及存储介质 | |
CN101777042B (zh) | 信息检索领域中基于神经网络和标签库的语句相似度算法 | |
CN108874878A (zh) | 一种知识图谱的构建系统及方法 | |
CN105930368B (zh) | 一种情感分类方法及系统 | |
CN113761893B (zh) | 一种基于模式预训练的关系抽取方法 | |
CN109857846B (zh) | 用户问句与知识点的匹配方法和装置 | |
CN105706092B (zh) | 四值模拟的方法和系统 | |
CN101894236A (zh) | 基于摘要语法树和语义匹配的软件同源性检测方法及装置 | |
CN113127933B (zh) | 一种基于图匹配网络的智能合约庞氏骗局检测方法及系统 | |
US20220300831A1 (en) | Context-aware entity linking for knowledge graphs | |
CN112286575A (zh) | 基于图匹配模型的智能合约相似度检测方法及系统 | |
Wang et al. | Learning blended, precise semantic program embeddings | |
CN108536735A (zh) | 基于多通道自编码器的多模态词汇表示方法与系统 | |
CN115146279A (zh) | 程序漏洞检测方法、终端设备及存储介质 | |
CN114528398A (zh) | 一种基于交互双重图卷积网络的情感预测方法及系统 | |
Zhu et al. | Statistical learning for semantic parsing: A survey | |
Leskinen et al. | Reconciling and using historical person registers as linked open data in the AcademySampo portal and data service | |
Zhang et al. | Dual attention graph convolutional network for relation extraction | |
CN110737469A (zh) | 一种功能粒度上基于语义信息的源代码相似度评估方法 | |
CN111723021B (zh) | 一种基于知识库和表示学习的缺陷报告自动分派方法 |
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 |