一种面向代码修改的概要及标签自动生成方法转让专利

申请号 : CN201510325268.7

文献号 : CN104991858B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 孙小兵沈金凤刘湘月李斌李云

申请人 : 扬州大学

摘要 :

本发明公开了一种面向代码修改的概要及标签自动生成方法。该方法根据提交的代码修改可以自动生成关于代码修改的描述信息,再根据生成的代码修改的描述信息生成内容概要,并且生成与代码修改相关的标签。所述方法为软件维护人员提供代码修改概要,方便软件开发人员阅读和理解软件历史修改,提高修改提交的质量,帮助开发人员更好地理解修改。

权利要求 :

1.一种面向代码修改的概要及标签自动生成方法,其特征在于,包括如下步骤:

1)根据定义的代码修改类型,分析修改前后的代码以及包含 bug-report 的代码,进行关联规则分析,得到关联规则结果;

2)根据关联规则分析结果确定本次修改的类型;

3)根据步骤 2)确定的代码修改类型,运用定义的格式去描述代码修改,描述结果作为代码修改的 why 信息,描述了代码修改的原因;

4)此步骤与步骤 2)并行,提取代码修改前后的代码,即源系统,运用树差分算法将修改前后的代码以树的形式表现出来,识别定位出两份代码文件中的修改;

5)分析步骤 4)发生修改的代码片段,依据以下定义的方法修改类型,确定代码片段中方法的修改类型;

所述方法修改类型定义如下:

第一种是在方法体中增加或者删除某条语句;

第二种是对方法进行重命名;

第三种是增加,删除或者更新变量声明;

第四种是权限的修改;

第五种是方法含有的参数的改变;

第六种是:找到发生方法修改所涉及到的包以及 java 文件;

6)根据步骤 5)确定的方法修改类型,运用定义的格式整合生成关于代码修改的what信息;

7)结合步骤 5)生成的 what 信息和步骤 3)生成的 why 信息,对其进行内容概要;

8)与步骤 7 同时进行的还有标签生成过程,运用了 Tag-LDA 主题模型,将步骤5)生成的 what 信息和步骤 3)生成的 why 信息作为主题模型的输入,生成多个标签描述代码的修改。

2.根据权利要求 1 所述的面向代码修改的概要及标签自动生成方法,其特征在于,步骤 1)中分析代码修改前后的文本以及包含 bug-report 的源代码,对于一些没有bug-report 的源代码,只分析代码修改前后的文本。

3.根据权利要求 1 所述的面向代码修改的概要及标签自动生成方法,其特征在于,步骤 7)中进行内容概要的过程中,对于代码中一些不必要进行描述的方法修改,在概要中不予生成其修改描述,从而实现内容概要,规定只有满足以下要求的方法,才会对其描述,第一点:相对于修改前增加的方法需要进行描述;第二点:对那些变更内容较多的代码片段,需要对变更内容涉及到的方法进行描述。

说明书 :

一种面向代码修改的概要及标签自动生成方法

技术领域

[0001] 本发明涉及软件维护领域,具体涉及一种面向代码修改的概要及标签自动生成方法。所述方法对提交的代码修改自动生成代码修改概要,并利用标签主题模型推荐与修改内容相关的标签,辅助维护人员理解代码修改。

背景技术

[0002] 在软件维护领域,软件产品一般在满足用户不断更改的需求中不断的升级和维护,为了实现某个维护请求,开发人员需要不断地根据用户的需求完善软件的各项功能,修改后开发人员需要填写程序修改登记表,并在程序变更通知书上写明新旧程序的不同之处。但是人工生成代码的修改信息,工作量极大,并且开发人员自己编写的代码修改信息往往具有主观性,描述语句或许会令人费解,所以自动生成代码修改概要是有必要的。
[0003] 在该领域中,相关人员已经对自动生成代码概要进行了研究,Luis Fernando Cortés-Coy等人(10.1109/SCAM.2014.14,28-29)基于树差分算法通过Change Distiller技术获取方法的代码修改,也有著名的diffs技术,分析代码文本之间的差异,但在这些技术中,生成的代码修改提交信息往往信息量庞大,可读性不佳,并且只是从what角度,即仅仅描述了代码差异,并没有对why信息,即此处代码修改的原因等信息进行描述,而why信息是开发人员比较关注的,开发人员更想知道发生此处修改的原因是什么。现有技术中还未出现对这一问题的相关研究报道。

发明内容

[0004] 本发明的目的是提供一种面向代码修改的概要及标签自动生成方法。为软件维护人员提供代码修改概要,方便软件开发人员阅读和理解软件历史修改,提高修改提交的质量,帮助开发人员更好地理解修改。
[0005] 实现本发明目的的技术解决方案是:
[0006] 一种面向代码修改的概要及标签自动生成方法。包括如下步骤:
[0007] 1)根据定义的代码修改类型,分析修改前后的代码以及包含bug-report的代码,进行关联规则分析,得到关联规则结果;
[0008] 2)根据关联规则分析结果确定本次修改的类型;
[0009] 3)根据步骤2)确定的代码修改类型,运用定义的格式去描述代码修改,描述结果作为代码修改的why信息,描述了代码修改的原因;
[0010] 4)此步骤与步骤2)并行,提取代码修改前后的代码,即源系统,运用树差分算法将修改前后的代码以树的形式表现出来,识别定位出两份代码文件中的修改;5)分析步骤4)发生修改的代码片段,依据以下定义的方法修改类型,确定代码片段中方法的修改类型;所述方法修改类型定义如下:
[0011] 第一种是在方法体中增加或者删除某条语句;
[0012] 第二种是对方法进行重命名;
[0013] 第三种是增加,删除或者更新变量声明;
[0014] 第四种是权限的修改;
[0015] 第五种是方法含有的参数的改变;
[0016] 第六种是:找到发生方法修改所涉及到的包以及java文件;
[0017] 6)根据步骤5)确定的方法修改类型,运用定义的格式整合生成关于代码修改的what信息;
[0018] 7)结合步骤5)生成的what信息和步骤3)生成的why信息,对其进行内容概要;
[0019] 8)与步骤7同时进行的还有标签生成过程,运用了Tag-LDA主题模型,将步骤5)生成的what信息和步骤3)生成的why信息作为主题模型的输入,生成多个标签描述代码的修改;
[0020] 进一步,步骤1)中分析代码修改前后的文本以及包含bug-report的源代码,对于一些没有bug-report的源代码,只分析代码修改前后的文本。
[0021] 进一步,步骤7)中进行内容概要的过程中,对于代码中一些不必要进行描述的方法修改,在概要中不予生成其修改描述,从而实现内容概要,规定只有满足以下要求的方法,才会对其描述,第一点:相对于修改前增加的方法需要进行描述;第二点:对那些变更内容较多的代码片段,需要对变更内容涉及到的方法进行描述。
[0022] 本发明提出一种代码修改概要及标签生成方法,其有益效果包括以下几点:
[0023] (1)目前与代码修改概要生成相关的技术有很多,类似的像diff,但是生成的提交信息复杂,语言不够精炼。而本发明生成的代码修改提交信息可读性强,信息量充足。
[0024] (2)本发明对代码修改的why信息进行了生成,帮助开发人员更好的理解代码修改。
[0025] (3)本发明生成与提交信息相关的摘要与标签,帮助维护人员快速了解代码修改内容。

附图说明

[0026] 图1是本发明的整体流程图;
[0027] 图2是代码修改类型图;
[0028] 图3是bug-report代码修改提交信息;
[0029] 图4是代码修改why信息生成举例;
[0030] 图5是利用树差分算法进行的修改定位;
[0031] 图6是在方法体中增加或者删除某条语句的代码举例示意图;
[0032] 图7是对方法进行重命名的代码举例示意图;
[0033] 图8是代码修改what信息生成举例示意图;
[0034] 图9是代码概要生成示意图;
[0035] 图10是Tag-LDA模型的示意图;
[0036] 图11是生成的标签以及代码概要示意图。

具体实施方式

[0037] 下面结合附图对本发明作进一步详细说明。
[0038] 实施例:
[0039] 一种面向代码修改的概要及标签自动生成方法,(具体过程如图1所示)具体步骤如下:
[0040] 步骤1)根据已确定的修改类型(修改类型总结如图2所示),分析代码修改前后的文本以及包含bug-report的源代码,对于一些没有bug-report的源代码,我们只分析代码修改前后的文本,进行关联规则分析,得到关联规则结果。
[0041] 步骤2)根据关联规则结果确定本次代码的修改类型。例如:我们通过分析前后源代码,运用关联规则判断出是改正了某处错误,对应代码修改的类型是Corrective(纠错性维护)。对于一些有bug-report的代码修改,分析bug-report的bug概要描述(概要举例如图3所示)也能找到代码修改的类型。以上生成的代码修改类型信息作为代码概要why信息的组成部分。
[0042] 步骤3)根据步骤2)确定的代码修改类型,运用定义的格式描述代码修改,描述的具体格式如下所示,其中的methodtype指的是方法的类型,例如;abstract method(抽象方法),static method(静态方法),normal method(普通方法)等。
[0043]
[0044] 最后整合生成的描述信息,作为代码修改中的why信息,描述了代码修改的原因。此步骤举例说明如图4所示。
[0045] 步骤4)此步骤与步骤2并行,首先提取代码修改前后的代码,即源系统,运用树差分算法,将修改前后的代码内容以树的形式表现出来,识别定位出两份代码文件中的修改。例如,一条if-else结构语句,if的内容作为树中的某个节点,else中的内容作为该节点之后的一个节点,将语句全都以节点的形式表现出来,然后一一比对两棵树中的节点,找到发生修改的代码片段。定位结果举例如图5所示,图中包含修改前后的两份代码节点,检索第一个节点及以下分支,发现存在不同之处,表示发生了修改,连接线上显示×,检索第二个节点及以下分支,存在不同之处,连接线显示×,之后的节点按照同样的方式,若没有发生修改便在连接线上显示√,发生了修改显示×。
[0046] 步骤5)步骤4定位了两份代码的修改,此步骤分析发生修改的代码片段,根据以下定义的方法修改类型,确定本次方法修改的类型。所述对方法的修改类型定义如下所示:(1)在方法体中增加或者删除某条语句,通过分析代码的语法树,语法树描述了该语言的各种语法成分的组成结构,得到增加或者删除语句的类型,例如:try statement,method invocation,catch clause,然后按照规定的格式(代码如下所示)生成描述信息,图6是具体代码举例:
[0047]Addat
[0048] (2)对方法进行重命名,按照定义的格式(代码如下所示)生成描述信息,图7是具体代码举例:
[0049]Replacewith
[0050] (3)增加,删除或者更新变量声明,按照定义的格式(代码如下所示)生成描述信息。
[0051]variable declaration statement at.
[0052] (4)权限的修改,例如:private变成protected,按照定义格式(代码如下所示)生成描述信息。
[0053]
[0054] (5)方法含有的参数的改变,按照定义的格式(代码如下所示)生成描述信息。
[0055]
[0056] (6)找到发生修改的方法所在的包以及java文件,按照格式生成代码修改的提交信息,按照定义的格式(代码如下所示)生成描述信息。
[0057]
[0058] 步骤6)根据步骤5确定的方法发生修改的类型,按照定义的格式生成代码修改的what信息,描述代码修改。代码举例如图8所示。
[0059] 步骤7)结合步骤5)生成的what信息和步骤3)生成的why信息,对其进行内容概要。只有满足以下要求的发生修改的方法,才会对其进行内容概要,
[0060] 第一点是,对于增加的方法必须对其生成代码修改概要,因为增加的方法往往是实现了某些功能,这些方法生成的概要对最后生成的代码修改概要意义重大;
[0061] 第二点是,对那些变更内容较多的代码片段,需要对变更内容涉及到的方法进行描述,因为开发人员对于重要的代码修改,会对其进行详细的处理,修改涉及到的代码行数较多,所以本专利只选择代码修改行数较多的代码片段进行描述。代码举例如图9所示。步骤8)与步骤7同时进行的还有标签生成过程,为了帮助维护人员在短时间内理解代码修改,本专利还对what信息,why信息两部分内容生成标签。运用Tag-LDA主题模型(主题模型如图10所示),α和β表示语料级别的参数,也就是每个文档都一样,因此生成过程只采样一次;θ是文档级别的变量,每个文档对应一个θ,也就是每个文档产生各个主题z的概率是不同的,所以每生成一个文档采样一次θ;z和w都是单词级别变量,z表示一个主题,z由θ按照概率生成,w表示文章中的一个单词,一个单词w对应一个主题z,由z和β按照概率共同生成;t表示标签由z和β共同生成,并与单词同步生成。模型主要是从给定的输入语料(在专利中将what信息以及why信息作为输入)中学习训练两个控制参数α和β,学习出了这两个控制参数就确定了模型,便可以用来生成文档(在专利中最后生成多个标签描述代码的修改)。本步骤生成信息举例说明如图11所示,上面一部分是代码修改概要,下面Tag标识的那部分就是对应生成的标签。
[0062] 在本专利中,首先生成代码的修改原因信息,之后通过对即将进行描述的代码范围进行限制,删减代码提交信息,最后的结果作为代码修改概要,与此同时,又把方法的代码修改提交信息作为输入,生成代码修改概要的标签,帮助阅读时间有限的开发人员快速理解代码修改。在本专利中,还利用关联规则,找到代码修改类型,作为代码修改why信息的描述。
[0063] 本专利主要生成两部分信息,第一部分是根据代码修改描述信息生成的代码修改概要;第二部分是代码修改信息标签。本专利提出的技术解决了现有技术中why信息缺失,并且可读性不佳的难题。