Boreas: 一种基于token 的精确并且大规模检测代码克隆的方法

文章连接:

http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=6494937

写在前面的话

代码克隆检测的方法有很多,比如说 textual-based, token-based, tree-based, graph-based, metric-based,hybird based
使用的标准不同,代码克隆的检测分类也是不同的。(taxonomy)

Boreas: An Accurate and Scalable Token-Based Approach to Code Clone Detection

今天我们要翻译的是这一篇

这篇用的检测方法是 基于 token 的

它引入了一个概念叫做counting Environment(CE) 来描述每一个变量

每一个变量可以表示成为一个 Count Vector(CV) 计数向量

我们把所有的CV合并在一起我们就可以构建出一个 Count Matrix(CM)

我们构建出一个CE的标准如下

Boreas: 一种基于token 的精确并且大规模检测代码克隆的方法

这样我们可以构建出一个10维的向量

它的向量的每一位表示如下:

  1. 变量被使用的次数
  2. 变量被定义的次数
  3. 变量是不是在一个if 条件里面
  4. 变量是不是在一个加法或者减法运算
  5. 变量是不是在一个乘法或者除法运算中
  6. 变量是不是一个数组的下标
  7. 变量是不是定义为一个常量
  8. 变量是不是在第一层循环

  9. 变量是不是在第二层循环

  10. 变量是不是在第三层循环

看下面这个图应该很清楚了

Boreas: 一种基于token 的精确并且大规模检测代码克隆的方法

  • 第一步是删除字符串,字符
  • 第二部就是提取我们的 token
  • 第三部就是 构建我们的 CM
  • 计算我们的 keyword 和 symbol 的计数向量
  • 为每一个的token 向量计算相似值,计算出CM之间的相似值之后得出聚类的结果