CLCDSA

CLCDSA: Cross Language Code Clone Detection using Syntactical Features and API Documentation

CLCs:Cross language clones

在这里插入图片描述
Scenario A:三种语言(Java, Python, and C#)表示同一个操作,两个整数相加
Scenario B:两个浮点数相加
当Java被修改和更新,要求其他语言的版本也进行相同的操作

CLCDSA: CROSS LANGUAGE CLONE DETECTOR

A. Feature Selection

在这里插入图片描述

B. Preprocessing

  1. Remove all the comments and string literals from the source code
  2. Generate an Abstract Syntax Tree (AST) for each of source code fragments
  3. Apply regular expressions on the generated ASTs to extract a metric for each of the features
  4. Extract the API calls by traversing the AST with the help of a NODEVISITOR class.

C. Action Filter: API Call Similarity

Hypothesis : if two APIs from two different programming languages perform the same task, their usage documentation will be semantically the same.
在这里插入图片描述
上图展示了分别用Java和C#开发的两个代码块的例子,它们从用户那里获取两个整数作为输入,将它们相加,最后在控制台显示它们的和。
Java中使用的API是 PRINTLN() ,NEXTINT().
C#中使用的API是WRITE(), PARSE() , READLINE().
从上图中可以看到每个API调用的相关文档。通过分析API调用文档,我们可以看到PRINTLN()和WRITE()的文档具有相同的语义。对于其他API调用也是如此。

D. Feature Metrics Extraction & Similarity Detection

For detecting cross language clones on the fly, this model takes a matrix consisting of 9 feature values as input. It used Cosine Similarity to detect a probable clone pair using the
following equation where A and B are two matrices:
在这里插入图片描述

CLCDSA MODEL

A. DataSet Collection

B. API Learning and Action Filter Model

API Learning

  1. 首先收集了Java、c#和Python所支持的库的API文档(开发了一个WEBCRAWLER工具来抓取语言开发人员和管理人员提供的API文档)
    (1)对于每种语言的每个API调用,只收集第一句话,因为它包含了关于API调用的功能和范围的信息
    (2)将API调用文档添加到XML文件中(对于每种编程语言,都维护一个独立的API调用文档XML文件)
    (3) 创建XML文件后,遍历每个XML文件并手动读取收集的API调用文档(验证收集的API调用文档的质量)
  2. 采用Word2Vec模型来为每个API调用描述生成一个向量表示(在Google的word向量预训练模型的帮助下训练了每个API调用文档)
  3. 使用公式中所描述的余弦相似性,计算从两种不同编程语言中选择的两个API调用文档的向量表示之间的相似性。以一对多的方式将一种语言的每个API调用映射到其他语言的API调用。维护一个CSV文件来记录所有API调用相似性分数以及API调用本身的名称。

在这里插入图片描述

Action Filter Model

  1. 从两种不同的编程语言中选择一个可能的克隆对,检索它们的AST并提取API调用
  2. 从两个源代码片段中选择两个API调用,并针对API学习步骤中生成的特定于语言对的CSV文件对它们进行查询,以获得相似性得分源代码片段中的每个API调用与其他源代码片段中的所有API调用配对,并根据CSV文件查询该API对的相似性得分。相似度得分最高的API对保留,其他的API对省略。同时,该API对从候选中删除。对其他API调用执行相同的过程,直到源代码片段的所有API调用与具有最高相似性得分的其他源代码片段的API调用配对。
  3. 通过取剩余对相似度评分的平均值来规范化API调用相似度评分。

Let us consider A and B are representing lists of API calls used in two given source
code fragments. If (A1,B1),(A2,B2), …,(Ak,Bk) are API call pairs depicting the highest similarity scores then the API call similarity for a probable clone pair is calculated using the
following equation to normalize the API calls similarity score:
在这里插入图片描述

C. Feature V ector Formulation

随机划分了收集到的数据库,用于训练、测试和验证。
例如:AtCoder dataset 对于每一个问题,为三种编程语言(Java、c#和Python)选择了10个公认的解决方案,用于训练;每种语言选择了5个公认的解决方案用于测试模型,5个用于验证模型。
为每一个源代码片段配置了9个度量标准,并使用一个附加的布尔度量标准来表示该代码对是否为克隆(0表示非克隆,1表示克隆)。每个源代码的9维特征向量,每一对的特征向量维数为19

D. CLCDSA Deep-Learning Model

Siamese Architecture Neural Network
在这里插入图片描述

  1. 将每个源代码的9维特征向量作为模型的输入(对于一对,为18)。
  2. 将这两个特征向量送入两个相同的子网络,子网络对这两个特征向量进行相同的变换。两个子网络都有相同的配置,有两个完全连接的隐藏层,每层100个单元。
  3. 一旦子网模型生成输出,两个输出向量被连接并馈给下一个比较器模型。比较器模型由3个大小为100-50-10的隐藏层组成,两层之间的神经元之间具有完全的连通性。
  4. 最后,比较器的输出被送入分类单元。分类单元由单个神经元组成,该神经元由具有以下计算机制的逻辑单元组成:
    在这里插入图片描述
    i represents the number of units at the last layer of the comparator unit which is 10 for our experiments, x i x_i xi is the input value of that layer, and w i w_i wi is the estimated weight for that corresponding parameter.

E. CLCDSA Workflow

在这里插入图片描述
Step 1. Source code from the repository is fetched into a language detection chamber

Step 2. Detect the language

Step 3. Generate and record the AST

Step 4. All the ASTs are traversed and numeric metrics for our selected features are calculated and recorded.

Step 5. With the help of Cosine Similarity, CLCDSA detects whether the selected
source code pair is a clone or not.

Before Step 5 or Step 6, all the source code pairs, which are considered as probable clone
pairs, are required to pass through the action filter .

Step 6. With the help of the labelled data, the Neural Net model has already been trained,
before deploying it to detect clones.

Step 7. CLCDSA starts clone detection phase. Once the list of the probable clone pairs are given to the model as input, with source code fragments developed in any programming
language, steps 2, 3, and 4 are executed along with the action filter.

Step 8. (If on-the-fly clone detection is selected, Step 8 will occur.) It will take the feature values of both the source code fragments as a matrix, and with the help of Cosine Similarity will determine whether this pair is a clone or not based on the predefined threshold value to define a clone.

Step 9.(If the clone detection Neural Net model is preferred, the feature vector for the source code pair will then be fed to the model and Step 9 will come in effect.) The output of the neural net will define whether the given source code pair of two different programming languages are clones or not based on the predefined threshold value.

EVALUATION

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值