一句话:提出代码差异引导的对抗样本生成技术 CODA,高效测试并增强深度代码模型鲁棒性。
论文针对深度代码模型对抗样本生成因源代码离散且需满足复杂语法语义约束、成分搜索空间巨大而效果不佳的问题,提出 CODA。其核心利用目标输入与参考输入之间的代码差异,包括结构差异与标识符差异,来引导对抗样本生成;通过设计并引导等价结构变换和标识符重命名变换,在保留原始语义的同时大幅缩小搜索空间。在 15 个深度代码模型上的实验表明,CODA 有效且高效,生成样本具有自然性,并经对抗微调提升模型鲁棒性;相比 CARROT 和 ALERT,平均多发现 88.05% 和 72.51% 的模型缺陷。
Adversarial examples are important to test and enhance the robustness of deep code models. As source code is discrete and has to strictly stick to complex grammar and semantics constraints, the adversarial example generation techniques in other domains are hardly applicable. Moreover, the adversarial example generation techniques specific to deep code models still suffer from unsatisfactory effectiveness due to the enormous ingredient search space. In this work, we propose a novel adversarial example generation technique (i.e., CODA) for testing deep code models. Its key idea is to use code differences between the target input (i.e., a given code snippet as the model input) and reference inputs (i.e., the inputs that have small code differences but different prediction results with the target input) to guide the generation of adversarial examples. It considers both structure differences and identifier differences to preserve the original semantics. Hence, the ingredient search space can be largely reduced as the one constituted by the two kinds of code differences, and thus the testing process can be improved by designing and guiding corresponding equivalent structure transformations and identifier renaming transformations. Our experiments on 15 deep code models demonstrate the effective-ness and efficiency of CODA, the naturalness of its generated examples, and its capability of enhancing model robustness after adversarial fine-tuning. For example, CODA reveals 88.05 % and 72.51 % more faults in models than the state-of-the-art techniques (i.e., CARROT and ALERT) on average, respectively.