CN104991858A - 一种面向代码修改的概要及标签自动生成方法 - Google Patents
一种面向代码修改的概要及标签自动生成方法 Download PDFInfo
- Publication number
- CN104991858A CN104991858A CN201510325268.7A CN201510325268A CN104991858A CN 104991858 A CN104991858 A CN 104991858A CN 201510325268 A CN201510325268 A CN 201510325268A CN 104991858 A CN104991858 A CN 104991858A
- Authority
- CN
- China
- Prior art keywords
- code
- amendment
- information
- revision
- type
- 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
- 238000000034 method Methods 0.000 title claims abstract description 73
- 230000004048 modification Effects 0.000 title abstract description 11
- 238000012986 modification Methods 0.000 title abstract description 10
- 238000004458 analytical method Methods 0.000 claims description 18
- 238000005516 engineering process Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 238000005070 sampling Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 239000004615 ingredient Substances 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000007670 refining Methods 0.000 description 1
- 238000004645 scanning capacitance microscopy Methods 0.000 description 1
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种面向代码修改的概要及标签自动生成方法。该方法根据提交的代码修改可以自动生成关于代码修改的描述信息,再根据生成的代码修改的描述信息生成内容概要,并且生成与代码修改相关的标签。所述方法为软件维护人员提供代码修改概要,方便软件开发人员阅读和理解软件历史修改,提高修改提交的质量,帮助开发人员更好地理解修改。
Description
所属领域
本发明涉及软件维护领域,具体涉及一种面向代码修改的概要及标签自动生成方法。所述方法对提交的代码修改自动生成代码修改概要,并利用标签主题模型推荐与修改内容相关的标签,辅助维护人员理解代码修改。
背景技术
在软件维护领域,软件产品一般在满足用户不断更改的需求中不断的升级和维护,为了实现某个维护请求,开发人员需要不断地根据用户的需求完善软件的各项功能,修改后开发人员需要填写程序修改登记表,并在程序变更通知书上写明新旧程序的不同之处。但是人工生成代码的修改信息,工作量极大,并且开发人员自己编写的代码修改信息往往具有主观性,描述语句或许会令人费解,所以自动生成代码修改概要是有必要的。
在该领域中,相关人员已经对自动生成代码概要进行了研究,Luis Fernando Cortés-Coy等人(10.1109/SCAM.2014.14,28-29)基于树差分算法通过Change Distiller技术获取方法的代码修改,也有著名的diffs技术,分析代码文本之间的差异,但在这些技术中,生成的代码修改提交信息往往信息量庞大,可读性不佳,并且只是从what角度,即仅仅描述了代码差异,并没有对why信息,即此处代码修改的原因等信息进行描述,而why信息是开发人员比较关注的,开发人员更想知道发生此处修改的原因是什么。现有技术中还未出现对这一问题的相关研究报道。
发明内容
本发明的目的是提供一种面向代码修改的概要及标签自动生成方法。为软件维护人员提供代码修改概要,方便软件开发人员阅读和理解软件历史修改,提高修改提交的质量,帮助开发人员更好地理解修改。
实现本发明目的的技术解决方案是:
一种面向代码修改的概要及标签自动生成方法。包括如下步骤:
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信息作为主题模型的输入,生成多个标签描述代码的修改;
进一步,步骤1)中分析代码修改前后的文本以及包含bug-report的源代码,对于一些没有bug-report的源代码,只分析代码修改前后的文本。
进一步,步骤7)中进行内容概要的过程中,对于代码中一些不必要进行描述的方法修改,在概要中不予生成其修改描述,从而实现内容概要,规定只有满足以下要求的方法,才会对其描述,第一点:相对于修改前增加的方法需要进行描述;第二点:对那些变更内容较多的代码片段,需要对变更内容涉及到的方法进行描述。
本发明提出一种代码修改概要及标签生成方法,其有益效果包括以下几点:
(1)目前与代码修改概要生成相关的技术有很多,类似的像diff,但是生成的提交信息复杂,语言不够精炼。而本发明生成的代码修改提交信息可读性强,信息量充足。
(2)本发明对代码修改的why信息进行了生成,帮助开发人员更好的理解代码修改。
(3)本发明生成与提交信息相关的摘要与标签,帮助维护人员快速了解代码修改内容。
附图说明
图1是本发明的整体流程图;
图2是代码修改类型图;
图3是bug-report代码修改提交信息;
图4是代码修改why信息生成举例;
图5是利用树差分算法进行的修改定位;
图6是在方法体中增加或者删除某条语句的代码举例示意图;
图7是对方法进行重命名的代码举例示意图;
图8是代码修改what信息生成举例示意图;
图9是代码概要生成示意图;
图10是Tag-LDA模型的示意图;
图11是生成的标签以及代码概要示意图。
具体实施方式
下面结合附图对本发明作进一步详细说明。
实施例:
一种面向代码修改的概要及标签自动生成方法,(具体过程如图1所示)具体步骤如下:
步骤1)根据已确定的修改类型(修改类型总结如图2所示),分析代码修改前后的文本以及包含bug-report的源代码,对于一些没有bug-report的源代码,我们只分析代码修改前后的文本,进行关联规则分析,得到关联规则结果。
步骤2)根据关联规则结果确定本次代码的修改类型。例如:我们通过分析前后源代码,运用关联规则判断出是改正了某处错误,对应代码修改的类型是Corrective(纠错性维护)。对于一些有bug-report的代码修改,分析bug-report的bug概要描述(概要举例如图3所示)也能找到代码修改的类型。以上生成的代码修改类型信息作为代码概要why信息的组成部分。
步骤3)根据步骤2)确定的代码修改类型,运用定义的格式描述代码修改,描述的具体格式如下所示,其中的method type指的是方法的类型,例如;abstract method(抽象方法),static method(静态方法),normal method(普通方法)等。
最后整合生成的描述信息,作为代码修改中的why信息,描述了代码修改的原因。此步骤举例说明如图4所示。
步骤4)此步骤与步骤2并行,首先提取代码修改前后的代码,即源系统,运用树差分算法,将修改前后的代码内容以树的形式表现出来,识别定位出两份代码文件中的修改。例如,一条if-else结构语句,if的内容作为树中的某个节点,else中的内容作为该节点之后的一个节点,将语句全都以节点的形式表现出来,然后一一比对两棵树中的节点,找到发生修改的代码片段。定位结果举例如图5所示,图中包含修改前后的两份代码节点,检索第一个节点及以下分支,发现存在不同之处,表示发生了修改,连接线上显示×,检索第二个节点及以下分支,存在不同之处,连接线显示×,之后的节点按照同样的方式,若没有发生修改便在连接线上显示√,发生了修改显示×。
步骤5)步骤4定位了两份代码的修改,此步骤分析发生修改的代码片段,根据以下定义的方法修改类型,确定本次方法修改的类型。所述对方法的修改类型定义如下所示:(1)在方法体中增加或者删除某条语句,通过分析代码的语法树,语法树描述了该语言的各种语法成分的组成结构,得到增加或者删除语句的类型,例如:try statement,methodinvocation,catch clause,然后按照规定的格式(代码如下所示)生成描述信息,图6是具体代码举例:
Add<methodtype>at<methodname> |
(2)对方法进行重命名,按照定义的格式(代码如下所示)生成描述信息,图7是具体代码举例:
Replace<oldmethodname>with<newmethodname> |
(3)增加,删除或者更新变量声明,按照定义的格式(代码如下所示)生成描述信息。
<operation>variabledeclarationstatementat<methodname>. |
(4)权限的修改,例如:private变成protected,按照定义格式(代码如下所示)生成描述信息。
(5)方法含有的参数的改变,按照定义的格式(代码如下所示)生成描述信息。
Type’s<parametername>changeof<oldtype>with<newtype>at<methodname> |
method. |
(6)找到发生修改的方法所在的包以及java文件,按照格式生成代码修改的提交信息,按照定义的格式(代码如下所示)生成描述信息。
步骤6)根据步骤5确定的方法发生修改的类型,按照定义的格式生成代码修改的what信息,描述代码修改。代码举例如图8所示。
步骤7)结合步骤5)生成的what信息和步骤3)生成的why信息,对其进行内容概要。只有满足以下要求的发生修改的方法,才会对其进行内容概要,
第一点是,对于增加的方法必须对其生成代码修改概要,因为增加的方法往往是实现了某些功能,这些方法生成的概要对最后生成的代码修改概要意义重大;
第二点是,对那些变更内容较多的代码片段,需要对变更内容涉及到的方法进行描述,因为开发人员对于重要的代码修改,会对其进行详细的处理,修改涉及到的代码行数较多,所以本专利只选择代码修改行数较多的代码片段进行描述。代码举例如图9所示。步骤8)与步骤7同时进行的还有标签生成过程,为了帮助维护人员在短时间内理解代码修改,本专利还对what信息,why信息两部分内容生成标签。运用Tag-LDA主题模型(主题模型如图10所示),α和β表示语料级别的参数,也就是每个文档都一样,因此生成过程只采样一次;θ是文档级别的变量,每个文档对应一个θ,也就是每个文档产生各个主题z的概率是不同的,所以每生成一个文档采样一次θ;z和w都是单词级别变量,z表示一个主题,z由θ按照概率生成,w表示文章中的一个单词,一个单词w对应一个主题z,由z和β按照概率共同生成;t表示标签由z和β共同生成,并与单词同步生成。模型主要是从给定的输入语料(在专利中将what信息以及why信息作为输入)中学习训练两个控制参数α和β,学习出了这两个控制参数就确定了模型,便可以用来生成文档(在专利中最后生成多个标签描述代码的修改)。本步骤生成信息举例说明如图11所示,上面一部分是代码修改概要,下面Tag标识的那部分就是对应生成的标签。
在本专利中,首先生成代码的修改原因信息,之后通过对即将进行描述的代码范围进行限制,删减代码提交信息,最后的结果作为代码修改概要,与此同时,又把方法的代码修改提交信息作为输入,生成代码修改概要的标签,帮助阅读时间有限的开发人员快速理解代码修改。在本专利中,还利用关联规则,找到代码修改类型,作为代码修改why信息的描述。
本专利主要生成两部分信息,第一部分是根据代码修改描述信息生成的代码修改概要;第二部分是代码修改信息标签。本专利提出的技术解决了现有技术中why信息缺失,并且可读性不佳的难题。
Claims (3)
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)中进行内容概要的过程中,对于代码中一些不必要进行描述的方法修改,在概要中不予生成其修改描述,从而实现内容概要,规定只有满足以下要求的方法,才会对 其描述,第一点:相对于修改前增加的方法需要进行描述;第二点:对那些变更内容较多的代码片段,需要对变更内容涉及到的方法进行描述。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510325268.7A CN104991858B (zh) | 2015-06-12 | 2015-06-12 | 一种面向代码修改的概要及标签自动生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510325268.7A CN104991858B (zh) | 2015-06-12 | 2015-06-12 | 一种面向代码修改的概要及标签自动生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104991858A true CN104991858A (zh) | 2015-10-21 |
CN104991858B CN104991858B (zh) | 2017-10-20 |
Family
ID=54303674
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510325268.7A Expired - Fee Related CN104991858B (zh) | 2015-06-12 | 2015-06-12 | 一种面向代码修改的概要及标签自动生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104991858B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107133079A (zh) * | 2017-05-25 | 2017-09-05 | 中国人民解放军国防科学技术大学 | 一种基于问题报告的软件语义摘要自动生成方法 |
CN108459874A (zh) * | 2018-03-05 | 2018-08-28 | 中国人民解放军国防科技大学 | 融合深度学习和自然语言处理的代码自动化摘要方法 |
CN110349477A (zh) * | 2019-07-16 | 2019-10-18 | 湖南酷得网络科技有限公司 | 一种基于历史学习行为的编程错误修复方法、系统及服务器 |
CN113330437A (zh) * | 2019-01-22 | 2021-08-31 | 甲骨文国际公司 | 使用调用者和被调用者概要的可扩展增量分析 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140130020A1 (en) * | 2012-09-28 | 2014-05-08 | Coverity, Inc. | Static analysis of computer code to determine impact of change to a code component upon a dependent code component |
CN104166550A (zh) * | 2014-08-13 | 2014-11-26 | 扬州大学 | 一种面向软件维护的修改请求重新定制的方法 |
CN104298587A (zh) * | 2013-07-15 | 2015-01-21 | 腾讯科技(深圳)有限公司 | 一种代码覆盖测试方法、装置和系统 |
CN104424088A (zh) * | 2013-08-21 | 2015-03-18 | 腾讯科技(深圳)有限公司 | 软件的测试方法及装置 |
CN104484278A (zh) * | 2015-01-05 | 2015-04-01 | 浪潮(北京)电子信息产业有限公司 | 一种静态代码缺陷测试方法和装置 |
-
2015
- 2015-06-12 CN CN201510325268.7A patent/CN104991858B/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140130020A1 (en) * | 2012-09-28 | 2014-05-08 | Coverity, Inc. | Static analysis of computer code to determine impact of change to a code component upon a dependent code component |
CN104298587A (zh) * | 2013-07-15 | 2015-01-21 | 腾讯科技(深圳)有限公司 | 一种代码覆盖测试方法、装置和系统 |
CN104424088A (zh) * | 2013-08-21 | 2015-03-18 | 腾讯科技(深圳)有限公司 | 软件的测试方法及装置 |
CN104166550A (zh) * | 2014-08-13 | 2014-11-26 | 扬州大学 | 一种面向软件维护的修改请求重新定制的方法 |
CN104484278A (zh) * | 2015-01-05 | 2015-04-01 | 浪潮(北京)电子信息产业有限公司 | 一种静态代码缺陷测试方法和装置 |
Non-Patent Citations (1)
Title |
---|
YU LIU ETC: "Supporting Program Comprehension with Program Summarization", 《IEEE》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107133079A (zh) * | 2017-05-25 | 2017-09-05 | 中国人民解放军国防科学技术大学 | 一种基于问题报告的软件语义摘要自动生成方法 |
CN107133079B (zh) * | 2017-05-25 | 2019-12-20 | 中国人民解放军国防科学技术大学 | 一种基于问题报告的软件语义摘要自动生成方法 |
CN108459874A (zh) * | 2018-03-05 | 2018-08-28 | 中国人民解放军国防科技大学 | 融合深度学习和自然语言处理的代码自动化摘要方法 |
CN113330437A (zh) * | 2019-01-22 | 2021-08-31 | 甲骨文国际公司 | 使用调用者和被调用者概要的可扩展增量分析 |
CN110349477A (zh) * | 2019-07-16 | 2019-10-18 | 湖南酷得网络科技有限公司 | 一种基于历史学习行为的编程错误修复方法、系统及服务器 |
Also Published As
Publication number | Publication date |
---|---|
CN104991858B (zh) | 2017-10-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102982010B (zh) | 提取文档结构的方法和装置 | |
CN106371825B (zh) | 一种移动端应用界面表单动态生成方法及装置 | |
CN104133685B (zh) | 网站前端开发的方法与系统 | |
CN105528418B (zh) | 一种设计文档生成方法及装置 | |
CN104991858A (zh) | 一种面向代码修改的概要及标签自动生成方法 | |
CN106155673B (zh) | 实现页面内容编辑器的方法、装置、服务器及用户设备 | |
CN103365847A (zh) | 一种自定义网页文件的生成方法和装置 | |
CN103412868A (zh) | 文书生成方法及装置 | |
CN104407863A (zh) | 抽象控件模型编程装置和方法 | |
CN111258577B (zh) | 页面渲染方法、装置、电子设备和存储介质 | |
CN102651000A (zh) | 基于xml的金融数据显示方法及系统 | |
CN102541533A (zh) | 页面显示方法和设备 | |
CN107506190A (zh) | 基于Spring框架的XML文件修改方法及装置 | |
CN107294750A (zh) | 一种云集群能自识别的分布配置管理方法和装置 | |
Koch et al. | Patterns for the Model-based Development of RIAs | |
CN106873989A (zh) | 应用程序构造方法和装置 | |
Heisig et al. | A generic traceability metamodel for enabling unified end-to-end traceability in software product lines | |
US20140033184A1 (en) | Localizing computer program code | |
Langlois et al. | Development of modelling frameworks and viewpoints with Kitalpha | |
CN111124471A (zh) | 基于数据类型模板的仿真模型注册方法及计算机存储介质 | |
US20200034461A1 (en) | Relational database schema generation | |
WO2015186256A1 (ja) | 開発支援システム | |
CN102646128A (zh) | 一种基于xml的情感词词性标注的方法 | |
CN108628606B (zh) | 一种嵌入式设备的web网管应用程序生成方法及系统 | |
Motahari Nezhad et al. | COOL: a model-driven and automated system for guided and verifiable cloud solution design |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230113 Address after: 225000 217 Development West Road, Yangzhou high tech Industrial Development Zone, Jiangsu Patentee after: YANGZHOU DINGDANG TECHNOLOGY Co.,Ltd. Address before: 225009 No. 88, South University Road, Jiangsu, Yangzhou Patentee before: YANGZHOU University |
|
TR01 | Transfer of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20171020 |
|
CF01 | Termination of patent right due to non-payment of annual fee |