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

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

Info

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
Application number
CN201510325268.7A
Other languages
English (en)
Other versions
CN104991858B (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.)
Yangzhou Dingdang Technology Co ltd
Original Assignee
Yangzhou 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 Yangzhou University filed Critical Yangzhou University
Priority to CN201510325268.7A priority Critical patent/CN104991858B/zh
Publication of CN104991858A publication Critical patent/CN104991858A/zh
Application granted granted Critical
Publication of CN104991858B publication Critical patent/CN104991858B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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)中进行内容概要的过程中,对于代码中一些不必要进行描述的方法修改,在概要中不予生成其修改描述,从而实现内容概要,规定只有满足以下要求的方法,才会对 其描述,第一点:相对于修改前增加的方法需要进行描述;第二点:对那些变更内容较多的代码片段,需要对变更内容涉及到的方法进行描述。
CN201510325268.7A 2015-06-12 2015-06-12 一种面向代码修改的概要及标签自动生成方法 Expired - Fee Related CN104991858B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 浪潮(北京)电子信息产业有限公司 一种静态代码缺陷测试方法和装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Title
YU LIU ETC: "Supporting Program Comprehension with Program Summarization", 《IEEE》 *

Cited By (5)

* Cited by examiner, † Cited by third party
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