- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于版本间克隆映射的演化模式识别及谱系构建.doc
基于版本间克隆映射的演化模式识别及谱系构建
摘要:针对当前克隆谱系的构建方法较为复杂、演化模式亟需扩充等问题,提出了新的克隆代码演化模式,并根据软件版本间的克隆代码映射关系自动构建了克隆谱系。首先,针对软件每一版本进行克隆检测并利用潜在狄利克雷分配(LDA)抽取克隆代码的主题信息;然后,根据克隆代码主题的相似度确定版本间克隆代码的映射关系;进而,根据已有的映射关系为克隆代码添加演化模式并分析演化特征;最终,结合映射信息与演化模式信息完成克隆谱系的构建。针对4款开源软件进行了克隆谱系的构建实验,实验结果表明所提克隆谱系构建方法可行,证实了新提出的演化模式在克隆代码演化过程中确实存在。实验发现约90%的克隆代码在软件演化过程中比较稳定,约67%的克隆群经历的发布版本数不超过发布版本总数的一半。实验结论及理论分析将为克隆代码的后续研究及克隆代码的维护与管理提供有力支持。
关键词:
克隆代码;主题建模;软件演化;演化模式;克隆谱系;软件维护
中图分类号: TP311.5; TP18 文献标志码:A
0引言
克隆代码(Code Clone)是指软件系统中一些具有相同或者相似的语法或语义特征的代码片段。克隆代码在软件系统中普遍存在,并且与软件工程领域中的各类研究问题密切相关。软件单一版本中的基础性克隆代码数据已经难以呈现克隆代码在软件演化过程中的变化情况,因此,需要对软件中的克隆代码进行演化跟踪并分析演化情况,从而获得更全面的信息,为软件开发及维护提供更多帮助。
当前的克隆谱系构建方法存在一些不足之处,例如克隆演化模式单一、克隆谱系构建方法复杂、能够分析的克隆类型及编程语言不全面等。本文提出了新的克隆演化模式、克隆演化特征以及克隆谱系的自动化构建方法。以区分视角的方式更加全面地分析了克隆代码的演化模式,利用代码主题信息确立版本间克隆代码映射并最终构建克隆谱系。本文研究结果将为软件开发、软件维护、软件重构及克隆管理等工作提供参考。
1相关工作
1.1克隆代码简介
在软件开发及维护过程中,由于程序员经常使用“拷贝/粘贴/修改”的开发方式、使用相同或相似的应用程序接口(Application Program Interface, API)及算法等因素,导致软件系统中存在大量相同或相似度非常高的代码片段,称为克隆代码。在该研究领域,经过学者们多年研究,已经达成了克隆代码至少应该被检测的基本共识。
克隆代码的研究工作最早可追溯到20世纪90年代,随后,该研究领域受到越来越多国内外相关研究者的高度关注,并在克隆检测、克隆演化、克隆分析以及克隆重构等方面产生了大量研究成果[1]。
在该研究领域,克隆代码以Type1、Type2、Type3和Type4的方式分类最为流行[2]。Type1指除空白符与注释变化外完全相同的代码段;Type2指除空白符、注释、标识符、类型及常量的替换外句法结构完全相同的代码段;Type3是指除空白符、注释、标识符、类型替换外,句法结构基本相同,但含有少量语句增加、删除或修改的代码段;Type4克隆代码则为功能相似或相同但句法结构不同的代码段。根据克隆代码检测的反馈粒度,相关工作通常以克隆对或克隆群(也称克隆集合、克隆类)为基本单位进行克隆代码的研究。克隆对是指存在克隆关系的一对代码片段。克隆群代表一些克隆代码的集合,同一克隆群内的任意两个代码片段可以构成克隆对,不同克隆群之间的克隆代码通常不具有克隆关系。
图1呈现了来自同一个克隆群的三段克隆代码CF1、CF2和CF3。由克隆代码类型的定义可知,CF1与CF2为Type2克隆关系、CF2与CF3为Type2克隆关系、CF1与CF3也构成了Type2克隆关系。在这三段代码中,只有函数名以及一处标识符不同,所以三者之间均可构成Type2类型克隆对。
1.2克隆演化与克隆谱系
随着软件需求的不断增加,软件需要不断升级,软件中的克隆代码也可能随着软件演化而发生改变。在分析克隆代码为软件带来的影响时,不但要研究软件单一版本中的克隆,还要研究克隆代码以时间为序的演化问题[3-4]。基于此,一些研究者从宏观上分析了克隆代码的数量或密度随着多版本演化的变化情况[5-6],从微观上利用演化模式来研究克隆代码的演化过程也受到研究者的广泛关注[7]。
Kim等[8]在2005年最早提出了克隆谱系的概念,并用克隆谱系抽取工具对克隆代码的演化进行分析[9]。随后,借助于克隆谱系研究克隆代码便在该领域成为了一种基本研究方法。例如,Zibran等[10]借助克隆谱系对软件演化过程中克隆代码的去除活动进行了研究。Saha等针对17款C、C++、Java及C#语言的开源软件进行了关于克隆谱系的实证研究[11]
文档评论(0)