代码有关论文范文参考文献,与基于K-最近邻的C克隆代码重构方法相关毕业论文致谢

时间:2020-07-05 作者:admin
后台-系统-系统设置-扩展变量-(内容页告位1-手机版)

本论文是一篇代码有关毕业论文致谢,关于基于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],减少了要提取的代码数量.但是上述方法都是注重将代码变换为连续一致的形式,计算复杂度较高,并且没有涉及到内聚度低、功能交叉的代码的处理.

基于K-最近邻的C克隆代码重构方法参考属性评定
有关论文范文主题研究: 关于代码的论文范文 大学生适用: 高校大学论文、高校毕业论文
相关参考文献下载数量: 69 写作解决问题: 怎么写
毕业论文开题报告: 文献综述、论文前言 职称论文适用: 期刊目录、职称评中级
所属大学生专业类别: 怎么写 论文题目推荐度: 优质选题

为了处理内聚度低的代码,文献[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-最近邻算法,对语句进行层次聚类.再遍历实体集合,对每个控制实体,结合控制依赖图,建立其与所有子结点的列表,形成控制实体集合;

(4)去掉每个聚类结果中相似度为零的分类;

(5)对于处于控制语句作用域中的语句,添加其控制节点,重建控制依赖;

(6)最后输出结果.

1.3基于抽象语法树的过程提取算法

代码经过聚类之后,形成了便于提取、功能独立的代码片段,可以将其提取为独立的过程.此时,主要需要解决待提

取的过程的参数相关问题,为此,本文在进行过程提取的同时,也加入了抽象语法树.当需要解决参数类型问题时,查找抽象语法树,获得需要的信息.过程提取的算法如图3所示.

具体涉及如下几个关键问题:

(1)提取变量的到达-定值信息

由于控制依赖图包含控制流信息,可通过控制依赖图获得节点之间的控制依赖关系,从而获得各个节点的到达――定值信息,因此可以在创建完成控制依赖子图后对其执行数据流分析,得到变量定值――引用信息[11].

(2)根据变量的定值――引用信息,确定变量类型

确定变量类型时,若是函数体中的声明变量,则遍历控制依赖图,找到声明语句,然后转到语法树,找到其对应的声明类型的语法树节点,根据语法规则,声明类型节点的最左孩子节点即为该变量的类型.若是函数参数列表中的变量,则首先根据函数定义得到变量所处位置信息,再遍历语法树,找到其对应的类型.


该文出处 http://www.sxsky.net/benkelunwen/060433904.html

(3)确定要提取的过程的参数类型及个数

在将语句提取为新的过程时,需要确定新过程的参数类型.参数类型主要分为两类:传引用类型和传值类型.对定值(def)变量集合进行计算,去掉声明(del)集合中的变量,剩下的变量就是引用类型的参数,计算公式如下:

para(&)=Vars(def)-Vars(del)(1)

其中,para(&)表示引用类型参数的集合,Vars(def)表示定值变量的集合,Vars(del)表示声明变量的集合.

对引用集合(ref)中的变量经过处理作为

1 2

代码有关论文范文参考文献,与基于K-最近邻的C克隆代码重构方法相关毕业论文致谢参考文献资料:

电大本科毕业论文格式

自考本科国家认可吗

成人自考本科数学

自考本科机构

大学本科论文模板

自考本科需要考几门

本科生优秀毕业论文

自考本科找工作好找吗

吉林大学本科自考

自考本科通过率多少

后台-系统-系统设置-扩展变量-(内容页告位2-手机版)
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:123456789@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。
后台-系统-系统设置-扩展变量-(内容页告位3-手机版)