当前位置 —论文本科论文— 范文

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

本论文是一篇代码有关毕业论文致谢,关于基于K-最近邻的C克隆代码重构方法相关在职毕业论文范文。免费优秀的关于代码及过程及语句方面论文范文资料,适合代码论文写作的大学硕士及本科毕业论文开题报告范文和学术职称论文参考文献下载。

传值类型,其计算公式如下:

para(v)=Vars(ref)-Vars(def)∪Vars(del)(2)

其中,para(v)表示传值类型参数的集合,Vars(ref)表示引用变量的集合.


para(&)和para(v)两个集合的元素个数即为新过程的参数个数.

此外,还要特别对待临时变量,此变量的定义和使用都在要提取的语句范围内.对于临时变量,不作为新过程的参数,直接放到新的过程体中.

(4)解决过程的返回值问题

在将代码提取为新的过程的时候,需要确定新过程是否有返回值.目前分为两种情况:新过程没有返回值和新过程有一个或多个返回值.如果新过程没有返回值,则直接将代码提取为新的过程.如果新过程有一个或多个返回值,统一采用传引用方式解决,将返回值以引用形式添加到新过程的参数列表.

采用数据流分析的方法来确定新过程是否有返回值.先计算标记语句后面语句的变量的信息,然后与标记语句的声明变量做对比,若二者有交集,则认为新的过程有返回值,计算公式如下:

returnvalues=Vars(del)-Vars(nbm)(3)

其中,returnvalues表示返回值集合,Vars(nbm)表示要提取的语句之后的变量集合.

(5)将代码提取为新的过程

在确定了新过程的参数和返回值之后,就可以将代码提取为新的过程了.这里,特别要注意的是新过程有返回值的情况.因为如果新过程有返回值,就可能要对标记语句节点进行分裂,使之成为两个声明语句,一条语句需要提取,一条语句不需要提取.例如对于标记声明语句intx,y=1,z;如果只有x是返回值涉及到的变量,则该语句需要分裂成两个节点:intx和inty=1,z.其中前者变为不需要提取的语句,作为新方法的引用参数;后者依然为需要提取的语句.

2实验结果与分析

为了验证以上算法,选取两组实验程序:第一组是文献[8]中使用的示例程序,第二组使用开源程序.

2.1文献中程序的实验

本文选取文献[8]中的代码来测试重构算法.文献中是java代码,聚类结果只给出树形表示形式,也没有给出重构方法.本文用C语言将其改写,示例代码如图4所示,其中有++符号的为待提取的克隆代码.

示例里的克隆代码是一段功能交叉的代码,包含计算数组元素的平均值avg和数组元素所有项的乘积prod两项功能.首先使用基于控制依赖图的K-最近邻聚类算法,形成功能独立的代码,聚类结果如图5所示.代码分成两类,有++标记的语句计算平均值avg,没有标记的语句计算成绩prod.在文献[8]的聚类结果中,没有指明for的控制范围,本文结果中,for语句的控制范围直接到语句,因而更加精确.

然后,对克隆代码执行过程提取算法,将其提取为单独的过程,并用新的过程调用取代其在源代码中的位置,结果如图6所示.文献[8]中并没有给出重构方法;本文提出了过程提取算法,处理了过程提取中参数相关问题,给出了具体的重构方案.文献[6]中的过程提取方法没有涉及到功能交叉的代码的处理,本方法能够更准确地提取功能内聚的代码.

2.2开源代码的实验

本文选取若干开源软件的克隆代码来进行实验.克隆代码的检测使用CPBugdetector[12].实验结果如表1所示.其中,#find表示检测到的克隆代码组数,#suit表示适合重构的克隆代码组数,#cluster表示聚类准确的克隆代码组数,#extract表示成功提取的克隆代码组数.从表1中可以看出,本文方法对需要重构的绝大部分克隆代码都能进行正确的重构,但是对原子操作代码的处理还存在一些不足,因为原子操作可能会受到其他语句的影响不能够聚在一起.

相比于文献[8]的方法,本文方法结合控制依赖图,有效地处理了语句之间的控制依赖关系,并将聚类结果应用于克隆代码的重构中,能够处理更多的情况.分别用本文方法和文献[8]的方法对上述开源软件进行实验,结果如表2所示.其中,#control表示有嵌套控制克隆代码组数.从表2中可以看出,本文算法对控制依赖有更好的处理.例如对图7中来自libmemcached-0.26中的克隆代码,文献[8]中的方法将两个while聚在同一个类中,使第二个while脱离了for的控制,如图8所示.本文方法则能够保持图7所示的控制依赖.

3结束语

本文提出一种基于K-最近邻的克隆代码重构方法.该方法结合控制依赖图和K-最近邻聚类算法,形成功能独立、便于提取的代码,再使用过程提取算法,对克隆代码进行重构.与文献[6]方法相比,本文方法能够较好地提取内聚度低、功能交叉的克隆代码;与文献[8]方法相比,本文方法能够较好地处理程序语句的控制依赖关系,具有较高的聚类准确性.


如何写代码学位论文
播放:20890次 评论:5532人

参考文献:

[1]BURSTALLJ,DARLINGTONJ.Atransformationsystemford-evelopingrecursiveprograms[J].JournaloftheACM,1977,24(1):44-67.

[2]GRISWOLDWG,NOTKIND.Automatedassistanceforprogr-amrestructuring[J].ACMTransactionsonSoftwareEngineering,1993,2(3):228-269.

[3]GRISWOLDWG

关于基于K-最近邻的C克隆代码重构方法的在职毕业论文范文
代码有关论文范文参考文献
.ProgramRestructuringasanaidtosoftwaremaintenance[D].Washington:UniversityofWashington,1991.

[4]LAKHOTIAA,DEPREZJ.Restructuring-programsbytuckingstatementsintofunctions[C]//HARMANM,GALLAGHERK,EDS.InformationandSoftwareTechnologySpecialIssueonPr-ogramSlicing.Elsevier,1998,40(11-12):677-689.

[5]KOMONDOORR,HORWITZS.Semantics-preservingprocedureextraction[C]//Proc.the27thAcmSIGPLAN-SIGACTSymposiumonPrinciplesofProgramminglanguages.NewYork:ACMPress,2000:155-169.

[6]KOMONDOORR,HORWITZS.Effective,automaticprocedu-reextraction[C]//Proc.oftheInternationalWorkshoponProgramComprehension.Washington:IEEEPress,2003:33-43.

[7]HARMANM,BINKLEYD,DANI-CICS.Amorphousprogramslicing[J].JournalofSystemsandSoftware,2003,68(1):45-64

[8]ALKHALIDA,YEBMA,MAHMOUDS.SoftwarerefactoringatthefunctionlevelusingnewAdaptiveK-NearestNeighbora-lgorithm[J].AdvancesinEngineeringSoftware,2010:41:1160-1178.

[9]LUNGCH,XUX,ZAMANM,etal.Programrestructuringus-ingclusteringtechniques[J].TheJournalofSystemsandSoft-ware,2006:79,1261-1279.

[10]王伟.C冗余代码及相关缺陷检测方法研究[D].哈尔滨:哈尔滨工业大学计算机与科学技术学院,2009.

[11]王甜甜.基于语义相似度的编程题自动评分系统研究[D].哈尔滨:哈尔滨工业大学计算机与科学技术学院,2005.

[12]苏小红,马培军,王伟,等.克隆C程序代码引起的软件缺陷检测工具[简称:CPBugDetector]V1.0.2010SR049161[P].2009-6-26.


1 2

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

电大本科毕业论文格式

自考本科国家认可吗

成人自考本科数学

自考本科机构

大学本科论文模板

自考本科需要考几门

本科生优秀毕业论文

自考本科找工作好找吗

吉林大学本科自考

自考本科通过率多少

基于K-最近邻的C克隆代码重构方法(2)WORD版本 下载地址