- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于变更类型和相似性比较代码重构模式识别
基于变更类型和相似性比较代码重构模式识别
摘 要: 在现代软件开发和维护中重构是提高软件可维护性和软件质量的常用手段。而大量重构模式掺杂在日常的bug修复、功能增加等代码变更中,使得变更理解变得非常复杂。因此,提出一种对常见的抽取方法和抽取类重构模式的识别算法。研究基于工具ChangeDistiller和JDiff分别获取变更类型和抽取代码块,通过判断移动后的代码块与原文件变更代码的关系,识别采取的重构模式。该算法在4个开源项目中进行实验,其平均准确率在80%左右。
关键词: 重构模式;抽取方法;抽取类
Abstract:Refactoring is a common way of improving software maintainability and software quality in modern software development and maintenance. In daily revision refactoring patterns are usually mixed with code changes accomplishing other tasks such as bug fixing and feature addition which makes the change understanding very complicated. The paper proposes an identifying algorithm for refactoring patterns including the extract method and extract class. It is based on ChangeDistiller and JDiff that are used to get code changes types and extract code blocks respectively. Then the algorithm will identify the refactoring pattern according to the characteristics of the relationship between the changed codes and the original codes. The algorithm has been tested on 4 open source projects with an average 80% accuracy.
Key words: refactoring patterns;extract method;extract class
引言
重??[1]是现代软件开发和维护中用于提高软件可维护性和软件质量的常用手段。现代的软件开发一般基于版本管理系统设计实现,软件工程师为了维护系统或提高系统的性能每天会提交大量的代码。而大量重构模式掺杂在日常的bug修复、功能增加等代码变更中,使得代码评审者和软件工程师在理解代码时不得不对代码进行人工探查,以区分哪些变更的代码是重构,哪些不是。因此,为了使得变更的代码易于理解,将重构模式从代码变更中隔离出来是非常必要的。
重构[2]是一种基于规则、经过训练、有条不紊的程序整理方法,在整理过程中可以将不小心引入的错误降低。重构是处理代码坏味的一种常用手段。当前,在对重构方法的研究方面包括基于K-最近邻的C克隆代码重构方法[3]、使用抽象语法树和静态分析的克隆代码自重构方法[3]、基于抽象语法树和多态机制的复杂条件语句自动重构研究[4]、长方法坏味重构选择策略[5]等等。
重构模式的识别是在变更后的代码中寻找符合特定重构模式的代码修改,是重构的反过程。刘阳[6]等人提出了一种重构检测算法,是基于版本元素匹配原理,对函数抽取重构进行了识别,但是并没有涉及其它类型的重构模式。
通过对4个开源项目的变更代码进行探查,研究发现抽取方法、抽取类等是最为常见的重构模式。因此,本文对这2种重构模式进行了研究,提出了识别的算法。
1 抽取方法与抽取类的重构模式的识别
1.1 抽取方法与抽取类模式
图1是抽取方法(Extract Method)模式的示例。其中,V1是变更前的版本,V2是变更后的版本。对比两版本,V2中多了一个含参数的新增方法printDetails,且V1 中4~5行的内容抽取到V2的新增方法5~7行中,则在V2相对于V1删除代码的位置有对方法printDetails进行调用。
抽取方法的表现形式有3种,分别是:没有局部变量的代码块移动、有局部变量的代码块移动、对局部变量再赋值。图1中的抽取方法重构是有局部变量代码块移
文档评论(0)