提要

  • 主要解释了论文中的部分内容。

本周总结

1、主要是阅读了《Comparison and Evaluation of Clone Detection Tools》这篇论文

论文内容

section 1

在文章的第一部分主要是分析了代码克隆的一些应用场景以及检测代码克隆的实际意义。

主要是因为代码克隆这种情况普遍存在并且普遍缺少相关的文档记录,所以对于被克隆部分的在需要修改的时候往往耗费颇多,于是代码克隆的检测就显得很有必要。

section 2

主要介绍了几种克隆检测的方式

  • 文本比较
    为了提高性能,使用字符串的哈希函数对行进行分区。只比较同一分区中的行。结果显示为点图,每个点表示一对克隆线。
    在这些点图中,克隆可以被发现为特定的模式视觉上。连续的在点图中,直线可以自动地总结成更大的克隆序列,
    如不间断的对角线或斜线。Johnson[13]使用Karpand Rabin[14]基于指纹的高效字符串匹配。

  • 令牌比较

    是一种线性的比较。不用字符串比较,而是通过后缀树有效地比较行的标记序列。

    首先,整行的每个标记序列由一个所谓的函子总结,函子从标识符和文字的具体值中抽象出来[1]。函子唯一地刻画了这个标记序列。赋值函子可以看作是一个完美的散列函数。标识符和文字的具体值被捕获为这个函子的参数。这些参数的编码是从它们的具体值中提取出来的,而不是从它们的顺序中提取出来的,这样就可以检测到只在参数的系统重命名中不同的代码片段。如果两行的函子和参数编码匹配,那么它们就是克隆。

    函子及其参数汇总在后缀树中,后缀树以紧凑的方式表示程序的所有后缀。后缀树可以建立在时间和空间线性输入长度[7],[15]。后缀树中的每一个分支都表示程序后缀,它们的开头都是相同的克隆序列。

  • 度量比较

    收集代码片段的不同度量并比较这些度量向量,而不是直接比较代码。这些度量向量的允许距离(例如,欧几里德距离)可以用作类似度量的提示代码。(网站中使用较多)

  • 抽象语法树的比较

    Baxter等人。基于哈希函数划分程序抽象语法树的子树,然后通过树匹配比较同一分区中的子树(允许一些差异)[8]。Yang[22]早期提出了一种类似的方法,使用动态规划来发现同一文件的两个版本之间的差异。

  • 程序依赖图(PDG)的比较。
    函数的控制和数据流依赖关系可以用程序依赖图来表示;克隆可以被识别为同构子图[10],[11];因为这个问题是NP-hard的,Krinke 使用近似解。

  • 其他技术。

    Marcus和 Maletic 使用潜在语义索引(一种信息检索技术)来识别出现相似名称的片段[23]。
    Leitao[24]通过组合专门的比较函数(类似的调用子图、交换运算符、用户定义的等价关系以及转换为规范的语法形式)
    将句法和语义技术结合起来。每个比较函数都会产生一个证据,该证据在一个产生克隆可能性的证据因子模型中汇总。
    Wauler-等人(25)和Li等人(26)将相似的片段搜索作为数据挖掘问题。语句序列汇总到项集。
    一种自适应的数据挖掘算法搜索频繁项集。

section 3

主要是一些相关的定义

  • what is clone?

    粗略地说,根据给定的相似性定义,如果两个代码片段足够相似,就形成一个克隆对。不同的相似性定义和相关的容忍度允许不同种类和程度的克隆。如果B包含A的功能,那么一段代码A与另一段代码B相似;换句话说,它们具有“相似”的前提条件和后置条件。我们把这样的一对称为(A,B)语义克隆。不幸的是,检测语义克隆通常是不确定的。

    另一个定义:

    相似性的另一个定义是考虑程序文本:如果两个代码片段的程序文本相似,它们就形成一个克隆对。这两个代码片段在语义上可能等价,也可能不等价。这类克隆通常是复制粘贴的结果,也就是说,程序员选择一个代码片段并将其复制到另一个代码片段位置。复制和粘贴是一种常见的编程实践,也是特别重用的一个例子。本实验所评估的自动克隆检测仪发现了程序文本中相似的克隆,因此本文采用了克隆对的后一种定义。

  • 关于克隆程度的相关定义

    类型1是没有修改的精确副本(空白和注释除外)。

    类型2是语法上相同的副本;只更改了变量、类型或函数标识符。

    类型3是经过进一步修改的副本;状态更改、添加或删除。

    相关定义

    定义1.克隆(对)是三元组(f1;f2;t),其中f1和f2是两个相似的代码片段,t是相关的相似类型(类型1、2或3)。

    定义2.代码片段是一个元组(f;s;e),它由源文件的名称f、片段的起始行s和结束行e组成。两个行号都包含在内

section 4

主要讲述了他们实验的设置

定义3.重叠是共同代码与两个代码片段(CF1和CF2)的比率,即它们的交集与其并集相关。让行(CF)表示代码片段CF的行集合;然后,重叠(CF1;CF2)定义为:

定义4.包含是一个代码片段的代码与另一个代码片段的代码之比。让行(CF1)表示第一个代码片段的行集合,行(CF2)表示第二个代码片段的行集合;然后,包含的(CF1;CF2)定义为:

关于CF1<CF2的定义,CF1的文件名小于CF2的文件名,或者说尽管两者的文件名相等但是CF1的开始行小于CF2的开始行,或者说在文件名与开始行相等的情况下,CF1的结束行小于CF2的结束行

定义5.两个克隆对CP1和CP2之间的良好值定义如下

两个克隆对CP1和CP2满足以下条件,存在p∈[0,1]使得

成立,则称CP1和CP2是好匹配(p)–>原文标识good-match(p)

我们使用最小重叠度,因为它比最大重叠度或平均重叠度更严格。

定义6.两个克隆对CP1和CP2之间的OK值定义如下

section 5

主要讲述了他们实验的结果

section 6

主要是将他们的研究与其他的实验结果相联系。

section 7

主要是得出一些相关的结论

下周期望

1、继续阅读论文《Comparison and Evaluation of Clone Detection Tools》。

2、尽量实现其中的代码部分。

2021.4.2项目阶段报告相关推荐

  1. 2021爱分析·云计算趋势报告——支撑数字化转型,企业云平台建设进入新阶段

    报告编委 报告指导人 李喆 爱分析 合伙人&首席分析师 报告执笔人 郭佳伶 爱分析 分析师 李书娴 爱分析 分析师 外部专家(按姓氏拼音排序) 金霄 新钛云服 合伙人&产品运营中心负责 ...

  2. 超8成项目存在高危开源漏洞 《2021中国软件供应链安全分析报告》发布

     聚焦源代码安全,网罗国内外最新资讯! 专栏·供应链安全 数字化时代,软件无处不在.软件如同社会中的"虚拟人",已经成为支撑社会正常运转的最基本元素之一,软件的安全性问题也正在成为 ...

  3. 物联网应用平台开发——项目总结报告

    文章目录 项目实战--物联网应用平台项目总结报告 1. 项目概述 1.1 项目背景 1.2 项目名称 1.3 项目介绍 1.4 相关人员及项目支持 1.4.1 任务提出者 1.4.2 开发者 1.4. ...

  4. 区块链产业发展面临的挑战、发展建议以及趋势丨2021中国区块链产业发展报告...

    目前,区块链作为数字经济革命中的重要支撑,正以新一代信息基础设施的姿态快速发展并渗透到我国经济的各个领域,对我国经济社会发展的支撑作用初步显现.但同时,我国区块链也面临核心技术亟待突破.融合应用尚不成 ...

  5. ​行业竞争格局已显,上市公司布局加速丨2021中国区块链产业发展报告

    目前,区块链作为数字经济革命中的重要支撑,正以新一代信息基础设施的姿态快速发展并渗透到我国经济的各个领域,对我国经济社会发展的支撑作用初步显现.但同时,我国区块链也面临核心技术亟待突破.融合应用尚不成 ...

  6. 团队作业第二次—项目选题报告(追光的人)

    所属课程 软件工程1916 作业要求 团队作业第二次-项目选题报告 团队名称 追光的人 作业目标 组员提出选题,大家挑选出可行性最高的进行分析,制作选题报告和选题PPT 目录 队员贡献分比例 选题报告 ...

  7. 简单可行性报告模板_项目可行性报告模板分享!第三章主要内容

    项目可行性报告模板分享!第三章主要内容如下: 第三章 市场分析与建设规模 市场分析在可行性研究中的重要地位在于,任何一个项目,其生产规模的确定.技术的选择.投资估算甚至厂址的选择,都必须在市场需求情况 ...

  8. 液体火箭发动机技术国家级重点实验室2021年度对外开放项目指南

    液体火箭发动机技术国家级重点实验室2021年度对外开放项目指南 人工智能技术与咨询 国家级重点实验室 简介 西安航天动力研究所液体火箭发动机技术国家级重点实验室瞄准面向航天运输系统对液体火箭发动机技术 ...

  9. 超 8 成软件存已知高危开源漏洞,奇安信发布《2021 中国软件供应链安全分析报告》

    编辑 | 宋 慧 出品 | CSDN云计算 头图 | 付费下载于东方IC 2020年底,SolarWinds 遭受的大规模网络攻击,使得美国和多国政府在内的 18000+ 机构被影响.几乎每个月,软件 ...

最新文章

  1. 开启一个新的终端并执行特定的命令
  2. 《C语言程序设计基础》第2章作业,清华大学出版社-图书详情-《C语言程序设计基础实验与题解》...
  3. 详细聊聊k8s deployment的滚动更新(二)
  4. Zend Framework 跳转方法(render, forward, redirect)区...
  5. python输入输出简单例子_Python 文件和流的简单示例
  6. python元编程详解
  7. Flutter实战之(Clubhouse App)
  8. 深入理解 Java 锁与线程阻塞
  9. java面试题——java基础(四),java初级面试笔试题
  10. 数据库:mysql内置功能-函数
  11. 网站内容批量抓取和《著作权法》
  12. Datawhale 零基础入门CV赛事-Task2 数据读取与数据扩增
  13. easypanel安装php5.4,kangle一键脚本-凌梦云
  14. Tips:PowerDesigner16.5 图表显示Code以及 Columns新增Commet显示
  15. 手机号码归属地查询API
  16. 【牛客刷题-SQL进阶挑战】NO5.窗口函数
  17. Kafka-Zookeeper监控工具简介、安装及使用 03
  18. 必应搜索引擎怎么了?
  19. Python图像库PIL的类Image的paste写法
  20. 从“蛙步”到“雁行”vivo的新周期与新常态

热门文章

  1. 软件测试的度量方法包括,软件测试过程的度量
  2. 五分钟了解设计模式六大原则(上)
  3. [UVM] include_coverage not located message
  4. 我的2016—遇见自己,遇见未来
  5. VUE3 watch写法与属性
  6. R语言epiDisplay包cox.display函数获取cox回归模型汇总统计信息(风险率HR、调整风险率及其置信区间、模型系数t检验的p值、Wald检验的p值和似然比检验的p值)、保存结果到csv
  7. [BJDCTF2020]Mark loves cat 1——(超详细 三种方法)
  8. 我的第一个WFF项目
  9. 新手学编程前端好还是后端?
  10. 【音频系列】——MTK6735模块耳机通道外接功放的处理