文章连接:
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的标准如下
这样我们可以构建出一个10维的向量
它的向量的每一位表示如下:
- 变量被使用的次数
- 变量被定义的次数
- 变量是不是在一个if 条件里面
- 变量是不是在一个加法或者减法运算
- 变量是不是在一个乘法或者除法运算中
- 变量是不是一个数组的下标
- 变量是不是定义为一个常量
变量是不是在第一层循环
变量是不是在第二层循环
- 变量是不是在第三层循环
看下面这个图应该很清楚了
- 第一步是删除字符串,字符
- 第二部就是提取我们的 token
- 第三部就是 构建我们的 CM
- 计算我们的 keyword 和 symbol 的计数向量
- 为每一个的token 向量计算相似值,计算出CM之间的相似值之后得出聚类的结果