通过语义保持的代码变换挑战基于机器学习的克隆检测器
软件工程
2023-02-07 v1
摘要
软件克隆检测用于识别相似的代码片段。在过去二十年中,它一直是一个活跃的研究课题,吸引了广泛关注。近年来,基于机器学习(ML)的检测器,尤其是基于深度学习的检测器,在克隆检测上展现出令人印象深刻的能力。似乎由于ML技术的进展,这一长期存在的问题已被解决。在本工作中,我们旨在通过代码语义保持变换来挑战近期基于ML的克隆检测器的鲁棒性。我们首先利用十五个简单的代码变换算子结合常用启发式方法(即随机搜索、遗传算法和马尔可夫链蒙特卡洛)来执行等价程序变换。此外,我们提出了一种基于深度强化学习的序列生成(DRLSG)策略,以有效引导搜索过程生成可逃避检测的克隆。然后我们用原始克隆与生成克隆对来评估基于ML的检测器。我们在一个名为CloneGen的框架中实现了我们的方法。在评估中,我们借助CloneGen通过语义保持变换后的代码克隆挑战了两个最先进的基于ML的检测器和四个传统检测器。令人惊讶的是,我们的实验表明,尽管现有克隆检测器取得了显著成功,这些检测器内部的ML模型仍无法区分CloneGen中代码变换产生的众多克隆。此外,使用CloneGen生成的克隆对基于ML的克隆检测器进行对抗训练可提升其鲁棒性和准确率。同时,与常用启发式方法相比,DRLSG策略在生成代码克隆以降低基于ML的检测器检测准确率方面表现出最佳有效性。
引用
@article{arxiv.2111.10793,
title = {Challenging Machine Learning-based Clone Detectors via Semantic-preserving Code Transformations},
author = {Weiwei Zhang and Shengjian Guo and Hongyu Zhang and Yulei Sui and Yinxing Xue and Yun Xu},
journal= {arXiv preprint arXiv:2111.10793},
year = {2023}
}