- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于K-最近邻C克隆代码重构方法
基于K-最近邻的C克隆代码重构方法
摘要: 在软件开发过程中,克隆代码已经成为引起软件缺陷的一个重要因素。针对现有的方法不能很好地处理内聚度低、功能交叉的克隆代码的问题,提出了一种基于K-最近邻的克隆代码重构方法。首先,对克隆代码进行静态分析,搜集控制依赖信息和数据流信息,再经过K-最近邻聚类方法,形成便于提取、功能独立的代码片段,然后对代码片段进行过程提取,使之成为一个独立的过程,并用过程调用替代原来的克隆代码。实验结果表明,该方法能够对克隆代码进行有效组织,并对功能独立的部分进行提取。
关键词:
中图分类号: TP311 文献标识码:A 文章编号:2095-2163(2011)01-0047-04
0引言
随着计算机软件的不断发展,研究人员提出了软件复用的概念。人们希望通过复用已有的高质量开发成果,避免重新开发可能引入的错误,提高软件的质量。当在开发过程中碰到一些熟悉问题的时候,编程人员就从已有的系统中寻找实现类似功能的代码,稍作修改,以满足需求,然后应用到当前系统中。随着时间的推移和系统功能的增加,拷贝-粘贴的方法很容易导致整个软件系统充斥着大量的克隆代码。
克隆代码在大多数情况下是有害的,增加了软件系统代码的长度,使得软件系统愈加复杂、难以维护,系统运行效率降低,并且给软件引入大量的程序缺陷。对克隆代码使用的重构技术主要是过程提取,就是将出现在源代码中的克隆代码提取为一个新的过程,这在一定程度上降低了克隆代码带来的危害。
过程提取这个概念最早出现在1977年,由BURSTALL和DARLINGTON首次提出[1]。但是直到90年代初,才由GRISWOLD 和NOTKIN第一次在其著作[2,3]中提出extract-function(过程提取)这个词。比较早的过程提取方法有LAKHOTIA提出的tuck[4]方法,该方法可以将连续的语句和不连续的语句提取成单独的过程。随后,KOMONDOOR和HORWITZ提出了语义保持的自动过程提取方法[5-6],来提取可能含有跳转语句的不连续的代码片段。HARMAN和BINKLEY针对自动过程提取方法又做了一些改进[7],减少了要提取的代码数量。但是上述方法都是注重将代码变换为连续一致的形式,计算复杂度较高,并且没有涉及到内聚度低、功能交叉的代码的处理。
为了处理内聚度低的代码,文献[8-9]在源代码级别上使用了聚类算法,选取可执行语句作为实体,根据实体的数据属性和控制属性计算相似度,将彼此关联的元素归类,但是文献中算法对语句之间的控制依赖考虑较少,导致聚类结果不准确,也没有将聚类算法应用到克隆代码的重构中。
针对上述方法中存在的不足,提出一种基于K-最近邻的克隆代码重构方法,结合控制依赖图和K-最近邻聚类算法,形成便于提取和功能独立的代码片段,然后基于抽象语法树,应用过程提取算法,将代码片段提取为一个新的过程。该方法能够有效改进程序结构,对克隆代码进行重构。
1基于K-最近邻的克隆代码重构算法
1.1基于K-最近邻的克隆代码重构模型
本文提出的克隆代码重构模型如图1所示。该模型的基本思路为:首先读入C克隆代码,接着进行词法分析和语法分析,在此基础上生成抽象语法树,然后建立程序依赖图,获得控制流信息和数据流信息。其次,采用控制依赖图和K-最近邻聚类算法相结合的方法分析代码,分离出便于提取、功能独立的代码片段。最后,调用基于抽象语法树的过程提取算法,解决参数相关问题,将代码片段提取为独立的过程,并用过程调用取代其在源代码中的位置。
1.2改进的基于控制依赖图的K-最近邻聚类算法
通过建立和分析程序的控制依赖图[10],可以求得代码语句的定值-引用变量信息。在此基础上,对代码执行聚类算法[8],将语句进行归类,可以提高提取、功能独立的代码片段的准确性。
基于这样一种思路,本文在文献[8-9]的基础上提出一种改进的基于控制依赖图的K-最近邻聚类算法。该聚类算法结合控制依赖图,查找、记录控制语句的作用域,重新调整语句之间的控制依赖关系,使得聚类结果更加准确;并且利用相似度矩阵和控制依赖关系,调整分类结果,使其可以作为过程提取算法的输入,支持克隆代码重构。改进的基于控制依赖图的K-最近邻算法如图2所示。
本文聚类算法选取程序语句作为聚类的实体对象,控制变量和数据变量作为实体的属性,以实体属性矩阵作为算法的输入,矩阵的行表示语句的行号,列表示实体相关的属性。
算法步骤如下:
(1)根据实体属性矩阵,计算两两实体之间的相似度,构建相似度矩阵;
(2)处理声明类型节点,初始化每个实体的类标签,类标签用来记录该实体在聚类过程中的分类情况;
(3)执行K-最近邻算法,对语句进
您可能关注的文档
最近下载
- 高等数学英文1-6-10.ppt VIP
- 高等数学英文1-5-10全省公开课一等奖省赛获奖精品课件.pptx VIP
- 配电自动化终端运行维护管理规程(试行) 2.pdf VIP
- 茅台工艺员题库.pdf VIP
- 人大附中学习方法-自学.ppt VIP
- 高中物理必修三全套复习课件练习题及答案解析.doc VIP
- 人乳头瘤病毒核酸分型检测试剂盒说明书-硕世生物.pdf VIP
- 基于国家智慧教育云平台的家校共育协同模式在初中物理实验教学中的应用研究教学研究课题报告.docx
- 7第七章 裤装缝制工艺_2(课件)-《服装工艺(第4版)》同步教学(纺织出版社).pptx VIP
- 实用资料_配电自动化终端运行维护管理规定.doc VIP
文档评论(0)