重复代码(克隆代码)的几个概念与类型

转载 2013年12月05日 20:15:28

文章转载:http://blog.csdn.net/lovelion/article/details/9326307


本文内容来源于以下两篇参考文献:

       [1] Chanchal K. Roy, James R. Cordy, Rainer Koschke. Comparison and Evaluation of Code Clone Detection Techniques and Tools: A Qualitative Approach. Science of Computer Programming, 2009, 74(7): 470-495.

       [2] Hamid Abdul Basit, Stan Jarzabek. A Data Mining Approach for Detecting Higher-level Clones in Software. IEEE Transactions on Software Engineering, 2009, 35(4): 497-513.

 

Code FragmentA code fragment (CF) is any sequence of code lines (with or without comments.) It can be of any granularity, e.g., function definition, begin-end block, or sequence of statements. A CF is identified by its file name and begin-end line numbers in the original code base and is denoted as a triple (CF.FileName, CF.BeginLine, CF.EndLine).

代码片段:代码片段(CF)是任意一个代码行序列(可能包含注释,也可能不包含注释)。它可以是任意粒度的,例如,代码片段可以是一个函数的定义,一个begin-end语句块或者一个语句序列。一个代码片段可通过它所在的文件名、源代码中的起始行号和结束行号来标识,它可以通过一个三元组表示:CF.FileName(文件名),CF.BeginLine(起始代码行行号),CF.EndLine(结束代码行行号)。

 

Code Clone: A code fragment CF2 is a clone of another code fragment CF1 if they are similar by some given definition of similarity, that is, f(CF1) = f(CF2) where f is the similarity function. Two fragments that are similar to each other form a clone pair (CF1, CF2), and when many fragments are similar, they form a clone class or clone group.

代码克隆:代码片段CF2是另一个代码片段CF1的一个克隆,是指根据一些给定的相似性定义它们之间是相似的,也就是说,f(CF1) = f(CF2)f表示相似度函数。两个相似的代码片段构成了一个克隆对Clone Pair(CF1, CF2),多个相似的代码片段构成了一个克隆类(Clone Class)或克隆组(Clone Group)

 

Clone Type: There are two main kinds of similarity between code fragments. Fragments can be similar based on the similarity of their program text, or they can be similar based on their functionality (independent of their text). The first kind of clone is often the result of copying a code fragment and pasting into another location. In the following we provide the types of clones based on both the textual (Types 1 to 3) and functional similarities:

Type-1: Identical code fragments except for variations in whitespace, layout and comments.

Type-2: Syntactically identical fragments except for variations in identifiers, literals, types, whitespace, layout and comments.

Type-3: Copied fragments with further modifications such as changed, added or removed statements, in addition to variations in identifiers, literals, types, whitespace, layout and comments.

Type-4: Two or more code fragments that perform the same computation but are implemented by different syntactic variants.

克隆类型:代码片段之间的相似性主要有两种类型,第一类片段之间的相似性基于它们程序文本之间的相似性,第二类相似性是基于函数性的(独立于程序文本)。前者通常是由于拷贝一段代码片段并粘贴到另一个位置而产生的。接下来我们提供了四种基于文本(类型一至类型三)和函数相似性的克隆类型:

类型一:除空格、布局和注释不同之外,其余部分都相同的代码片段。

类型二:除标识符、字面量、类型、空格、布局和注释外,语法结构相同的代码片段。

类型三:除标识符、字面量、类型、空格、布局和注释外,进一步对克隆代码段进行改动,例如修改、增加或者删除语句。

类型四:两个或多个代码片段执行相同的计算,但是语法结构的实现方式不同。

 

       上述四类克隆统称为简单克隆(Simple Clone),将简单克隆组合成高层的粗粒度克隆称为结构克隆(Structural Clone)

 

【作者:刘伟 http://blog.csdn.net/lovelion


相关文章推荐

让你省写大量重复代码的方法 使用PropertyInfo类 反射获取类 的类型

以前在开发一个系统的时候 小组里的人在写方法的时候很累,很多方法都是对象的属性需要大量的重复赋值,然后 添加到List对象中   你是否还在为一个对象里有几十 上百个属性 手动写代码...

[原创]让你省写大量重复代码的方法 使用PropertyInfo类 反射获取类 的类型

以前在开发一个系统的时候 小组里的人在写方法的时候很累,很多方法都是对象的属性需要大量的重复赋值,然后 添加到List对象中 你是否还在为一个对象里有几十 上百个属性 手动写代码赋值烦恼呢? ...
  • pes605
  • pes605
  • 2013年08月17日 09:43
  • 824

Strom程序的并发机制,配置并行度(代码实现)、动态改变并行度,local or shuffle分组,分组的概念以及分组类型

1、Storm程序的并发机制1.1、概念 Workers (JVMs): 在一个物理节点上可以运行一个或多个独立的JVM 进程。一个Topology可以包含一个或多个worker(并行的跑在不同的物...

Git的命令操作-克隆,更新,提交代码

上一篇讲了安装以及克隆到本地 现在来讲述一下Git命令更新代码,文件,以及提交到git仓库 首先--进入到克隆之后的文件夹的根目录(这个文件夹下包含一个.git的文件夹)-然后鼠标右键--...

mac下使用SSH克隆git上的代码

1、打开你公司的git账号,左边目录会有一个钥匙串,然后点击,会有一个SSH配置教程,点击即可看到这个界面,然后打开终端 2、在终端中直接输入以下命令 --------------------...

java之实现Cloneable接口的详解,克隆一个对象--对应有浅克隆和深克隆,概念结合代码深入理解

1.首先,你要知道怎么实现克隆:实现Cloneable接口,在bean里面重写clone()方法,权限为public。 2.其次,你要大概知道什么是地址传递,什么是值传递。 3.最后,你要知道你为什么...

Git 上传代码到远程仓库以及从远程库克隆

1、下载安装Git 下载:https://git-scm.com/downloads 安装:可参考文章http://blog.csdn.net/zzfenglin/article/details/...
  • kong_21
  • kong_21
  • 2017年05月20日 11:51
  • 2249

【怎样写代码】对象克隆 -- 原型模式(五):原型管理器的引入和实现

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。If you like the content here, you can give me the greatest...

git的版本管理使用(二)-克隆代码到本地

主要讲git同一账号在不同电脑上,加载相同的项目: 1.第一步:将项目克隆到本地,(相当于下载了源码) **$ git clone https://github.com/hytcyjb/xxx.g...

【怎样写代码】对象克隆 -- 原型模式(三):原型模式

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。If you like the content here, you can give me the greatest...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:重复代码(克隆代码)的几个概念与类型
举报原因:
原因补充:

(最多只允许输入30个字)