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

2023-11-08

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

       [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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • [管理与领导-68]:IT基层管理者 - 辅助技能 - 4- 职业发展规划 - 评估你与老板的八字(向上管理之二)

    目录 前言 一 定位你与上司的关系 二 向上管理的三种误区 三 向上管理的关键点 四 向上管理的关键 预期管理 4 1 预期管理概述 4 2 如何控制上司的预期范围 4 3 如何了解你自己的预期 五 向上管理的关键 预期管理 六 什么样的上
  • 软件工程—软件结构图笔记详谈

    一 定义 结构图 Structure Chart 简称SC图 是精确表达软件结构的图形表示方法 它以特定的符号表示模块 模块间的调用关系和模块间信息的传递 二 主要构成 模块 Module 用矩形框表示 框中写有模块的名字 说明模块的功能
  • 软工导论知识框架(六)面向对象分析

    前言 绘制各种类型的图是重点 对于面向对象建模中需要绘制的图总结在第五期中 软工导论知识框架 五 面向对象方法学 一 分析过程 1 获取需求 与用户交谈 向用户提问题 参观用户的工作流程 观察用户的操作 向用户群体发调查问卷 与同行 专家交
  • 17、系统设计篇-技术选型

    技术选型 就是在两个或多个技术方案中选择适合当前项目情况的方案 技术选型不仅是个技术的选择 也是一个和项目情况密切相关的项目决策 技术选型 本质上是项目决策的一种 要做好技术选型 就是要做好项目决策 一 项目决策需考虑的角度 1 时间 范围
  • Open Source Game Clones

    Open Source Game Clones This site tries to gather open source reimplementations of great old games in one place If you t
  • 领域驱动设计:DDD重构中台业务模型

    文章目录 如何避免重复造轮子 如何构建中台业务模型 如何避免重复造轮子 要避免重复建设 就要理解中台的理念和思想 中台是企业级能力复用平台 复用 用白话说就是重复使用 就是要避免重复造轮子的事情 中台的设计思想与 高内聚 低耦合 的设计原则
  • 软考:中级软件设计师:多媒体基础,音频,图像,颜色,多媒体技术的种类,图像音频视频的容量计算,常见的多媒体标准

    软考 中级软件设计师 多媒体基础 提示 系列被面试官问的问题 我自己当时不会 所以下来自己复盘一下 认真学习和总结 以应对未来更多的可能性 关于互联网大厂的笔试面试 都是需要细心准备的 1 自己的科研经历 科研内容 学习的相关领域知识 要熟
  • 什么是项目管理?项目经理应该如何进行管理?

    项目管理 一是指一种管理活动 一种有意识地按照项目的特点和规律 对项目进行组织管理的活动 二是指一种管理学科 以项目管理活动为研究对象的一门学科 它是探求项目活动科学组织管理的理论与方法 就是把各种知识 技能 手段和技术应用于项目活动之中
  • 基于Nonconvex规划的配电网重构研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 本文基于Nonconvex规划的配电网重构
  • 2023西安交通大学软件工程915考研经验帖(初试+复试)

    目录 前言 一 初试准备 数学 英语 政治 专业课 总结 杂项 二 复试准备 1 笔试 数据库 操作系统 2 面试 总结 前言 本文仅记录我考研期间 2022 12初试 2023 3复试 的经验和感受 不具有普适性 请根据自身情况调整学习计
  • 软件工程期末试题及答案(史上最全)

    软件工程期末试题及答案 文章目录 软件工程期末试题及答案 一 填空题 二 选择题 三 判断题 四 简答题 五 分析题 六 画图题 一 填空题 在信息处理和计算机领域内 一般认为软件是 文库 程序 文档 和 数据 数据流图的基本组成部分有 数
  • 程序员要不断学习

    2016 10 20 计算机技术的发展速度还是很快的 当个人电脑赶上10年前的超算时 我们不得不感叹硬件的发展编程开发带来了很大的影响 对世界带来了很大的影响 知识和工具的更新速度还是比较快的 这就要求程序员始终需要学习 我在知乎上看到一个
  • 个人技术总结——uview-plus下的Http请求基本使用及相关使用

    这个作业属于哪个课程 软件工程 23年春季学期 这个作业要求在哪里 软件工程实践总结 个人技术总结 这个作业的目标 个人技术总结 其他参考文献 构建之法 CSDN社区 uni app官方文档 uview plus官方文档 目录 一 写在前面
  • Go 语言输出文本函数详解

    Go语言拥有三个用于输出文本的函数 Print Println Printf Print 函数以其默认格式打印其参数 示例 打印 i 和 j 的值 package main import fmt func main var i j stri
  • 软件工程期末复习+数据仓库ETL

    一 软件工程 请用基本路径测试方法为下列程序设计测试用例 并写明中间过程 第1步 画出流程图 1 菱形用于条件判断 用在有分支的地方 2 矩形表示一个基本操作 3 圆形是连接点 第2步 计算程序环路复杂性 流图G的环路复杂度V G 定义为
  • 嵌入式培训机构到底怎么选?培训了能找到工作吗

    嵌入式作为一种广泛应用于企业级开发的编程语言 对于想要从事软件开发行业的人来说 掌握嵌入式技能是非常重要的 而参加嵌入式培训机构是一个快速提升技能的途径 然而 很多人可能会担心 参加嵌入式培训了能找到工作吗 如何选择靠谱的嵌入式培训机构 要
  • 68 | 软件工程的宏观视角

    软件工程 今天开始 我们进入第六章 谈谈软件工程 我理解的架构师的职责其实是从软件工程出发的 也许大家都学过软件工程 但如果我们把软件工程这门课重新看待 这门学科到底谈的是什么 是软件项目管理的方法论 无论如何 软件工程是一门最年轻的学科
  • C# 介绍、应用领域、入门、语法、输出和注释详解

    什么是 C C 发音为 C Sharp 是一种由 Microsoft 创建的面向对象的编程语言 运行在 NET Framework 上 源于 C 家族 与流行的语言如 C 和 Java 相近 首个版本发布于 2002 年 而最新版本 C 1
  • Go 语言运算符详解:加法、算术、赋值、比较、逻辑和位运算符全面解析

    运算符用于对变量和值执行操作 加号运算符 将两个值相加 如下面的示例所示 示例代码 package main import fmt func main var a 15 25 fmt Println a 尽管加号运算符通常用于将两个值相加
  • 深入了解 Python MongoDB 操作:排序、删除、更新、结果限制全面解析

    Python MongoDB 排序 对结果进行排序 使用 sort 方法对结果进行升序或降序排序 sort 方法接受一个参数用于 字段名 一个参数用于 方向 升序是默认方向 示例 按名称按字母顺序对结果进行排序 import pymongo

随机推荐

  • JAVA byte类型转String类型

    问题 RSA加密 byte类型转String类型 格式转换之后内容变了 解密解不出来 第一种方式 使用 ISO 8859 1 编码 使用此方式编码返回结果会乱码 例如 public static void main String args
  • 超详细Shell学习教程第四篇shell脚本参数化

    目录 1 1参数化实例 1 2参数处理说明 1 3带返回值的参数 书写带参数的shell脚本 1 1参数化实例 创建bash1 sh bin bash echo Shell 传递参数实例 echo 第一个参数为 1 echo 参数个数为 e
  • 学习swoole框架需要杀掉9501进程,强制的解决办法

    1 查看进程 我们运行一下命令 netstat anp grep 9501 2 看出进程29698占用的9501端口 3 强制杀死进程 kill 9 29698 强制
  • python自动化(三):selenium微博抢票(含抢票程序设计思路)

    缘起 这个故事起源于女票是一个bjd娃圈爱好者 我才知道在娃圈里经常通过微博私信的方式进行一些商品的交易 例如娃娃的面妆 衣服和娃娃本身 这就引发了抢票需求 流程 在某一个整的时间点进行微信的私信发送 排名靠前者获得 人工操作反应慢 只能提
  • 不卸载重装,直接升级TeX Live的方法(Win11)

    不卸载重装 直接升级TeX Live的方法 Win11 1 前言 前两天想要用LaTeX写中文文档 更新ctex宏包的时候想起来已经好久没有更新TeX Live版本 上网查了下 TeX Live的2022版本已经可以使用 觉得可以在写文档的
  • JVM知识总结

    第一章 书籍推荐与JVM相关面试题 1 面试题 https blog csdn net Y0Q2T57s article details 80682013 commentBox https blog csdn net Javazhoumou
  • Unity 使用VRTK获取射线检测碰触的物体信息

    steam VR 版本 SteamVR plugin for Unity v1 2 3 VRTK版本 VRTK Virtual Reality Toolkit VR Toolkit 3 3 0 检测三维物体 1 创建脚本 并获取VRTK P
  • 【100%通过率 】【华为OD机试 c++/python】查找单入口空闲区域【 2023 Q1

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 给定一个 m x n 的矩阵 由若干字符 X 和 O 构成 X 表示该处已被占据 O 表示该处空闲 请找到最大的单入口空闲区域 解释 空闲区域是
  • [技术经理]01 程序员最优的成长之路是什么?

    00前言 谈起程序员的职业规划 针对大部分的职场人士 最优的成长之路应该是走技术管理路线 而不是走技术专家路线 01关键的一步 中国自古就有 学而优则仕 的传统 发展到今天 在我们的现代企业里面 尤其是在我们的软件企业里面 就演变成了 技而
  • awk 正则表达式、正则运算符详细介绍

    前言 使用awk作为文本处理工具 正则表达式是少不了的 要掌握这个工具的正则表达式使用 其实 我们不必单独去学习它的正则表达式 正则表达式就像一门程序语言 有自己语法规则已经表示意思 对于不同工具 其实大部分表示意思相同的 在linux众多
  • numpy取值大全

    记录numpy取值的所有方法 欢迎 切片操作 整数数组索引 布尔数组索引 布尔数组索引 花式索引 数据结构化取值 欢迎 在NumPy中 可以使用切片 整数数组索引和布尔数组索引来进行取值操作 切片操作 可以使用类似于Python中的切片操作
  • c#之哈希表(Hashtable)

    using System using System Collections Generic using System Collections 哈希表的using引用 using System Linq using System Text u
  • HttpServletRequest request 获取form参数的两种方式

    java view plain copy RequestMapping value pay method RequestMethod POST public String buildRequest HttpServletRequest re
  • 计算机毕业设计ssm基于SSM+Vue的法律咨询信息系统的设计与实现5m1le9 (附源码)轻松不求人

    项目运行 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEclispe Sts都支持 项目技术 ssm mybatis Ma
  • PHP之hash函数进行SHA256加密的方法

    SHA256加密的方法 function encrypt sha256 str return hash sha256 str SHA256Hex加密 function SHA256Hex str re hash sha256 str tru
  • 阿里实习offer成功上岸,这几点至关重要

    Hello 大家好 欢迎大家来到CSDN云原生计划 考生说 栏目 本期采访的是近期成功获得阿里巴巴暑假实习offer的CSDN云原生专业工程师计划学员的中南大学大三电子信息工程专业的刘贝同学和大家分享成功申请阿里巴巴暑假实习的经验以及面试经
  • 【Mysql】MySQL体系结构,InnoDB、MyISAM存储引擎,索引结构、分类、语法、性能分析

    1 MySQL体系结构 连接层 主要完成一些类似于连接处理 授权认证 及相关的安全方案 在该层上引入了线程池的概念 为通过认证安全接入的客户端提供线程 同样在该层上可以实现基于SSL的安全链接 服务器也会为安全接入的每个客户端验证它所具有的
  • JS实现直接插入排序

    直接插入排序 插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴 但它的原理应该是最容易理解的了 因为只要打过扑克牌的人都应该能够秒懂 插入排序是一种最简单直观的排序算法 它的工作原理是通过构建有序序列 对于未排序数据 在已排序序列中
  • 浅谈BCrypt算法

    文章目录 前言 一 BCrypt算法是什么 二 使用步骤 1 对明文进行加密 2 验证 总结 前言 BCrypt算法是一种基于哈希算法的算法 所以 这种算法是不可逆的 一 BCrypt算法是什么 BCrypt算法是一种基于哈希算法的算法 所
  • 重复代码(克隆代码)的几个概念与类型

    本文内容来源于以下两篇参考文献 1 Chanchal K Roy James R Cordy Rainer Koschke Comparison and Evaluation of Code Clone Detection Techniqu