Skip to main content
QUICK REVIEW

[论文解读] How Does Naming Affect LLMs on Code Analysis Tasks?

Zhilong Wang, Lan Zhang|arXiv (Cornell University)|Jul 24, 2023
Software Engineering Research被引用 4
一句话总结

本文研究命名规范如何影响大型语言模型(LLMs)如ChatGPT和CodeBERT在面向安全的代码分析任务中的表现。研究发现,这两种模型严重依赖有意义的变量、函数和方法名称,当名称被匿名化后,性能急剧下降——准确率降至17–24%,表明在缺乏实际标识符的情况下,模型在从代码中学习语义逻辑方面存在关键局限。

ABSTRACT

The Large Language Models (LLMs), such as GPT and BERT, were proposed for natural language processing (NLP) and have shown promising results as general-purpose language models. An increasing number of industry professionals and researchers are adopting LLMs for program analysis tasks. However, one significant difference between programming languages and natural languages is that a programmer has the flexibility to assign any names to variables, methods, and functions in the program, whereas a natural language writer does not. Intuitively, the quality of naming in a program affects the performance of LLMs in program analysis tasks. This paper investigates how naming affects LLMs on code analysis tasks. Specifically, we create a set of datasets with code containing nonsense or misleading names for variables, methods, and functions, respectively. We then use well-trained models (CodeBERT) to perform code analysis tasks on these datasets. The experimental results show that naming has a significant impact on the performance of code analysis tasks based on LLMs, indicating that code representation learning based on LLMs heavily relies on well-defined names in code. Additionally, we conduct a case study on some special code analysis tasks using GPT, providing further insights.

研究动机与目标

  • 评估LLM(特别是ChatGPT和CodeBERT)在面向安全的代码分析任务中的有效性。
  • 研究有意义的变量、函数和方法名称的存在或缺失对LLM性能的影响。
  • 评估LLM在移除或替换为无意义字符串后,是否仍能从代码中学习语义逻辑。
  • 识别LLM在理解代码语义方面超越表面命名的优缺点。
  • 为研究人员和实践者提供关于在软件安全应用中可靠使用LLM的可操作见解。

提出的方法

  • 对ChatGPT在面向安全的代码分析任务中的响应进行定性案例研究,通过引入刻意设计的挑战来评估其推理和准确性。
  • 对CodeBERT进行定量分析,系统性地对代码元素进行匿名化处理:变量名称、方法定义和方法调用。
  • 通过应用两种匿名化策略生成原始数据集的八个变体:'随机生成'(无意义字符串)和'语义生成'(语义误导但语法正确的名称)。
  • 在匿名化数据集上微调CodeBERT和GraphCodeBERT,并在两个下游任务上评估性能:自然语言代码搜索和代码克隆检测。
  • 比较原始数据集与匿名化数据集上的模型准确率,以衡量实际命名特征对模型性能的影响。
  • 分析当不同类型的开发者定义名称被移除或替换时,性能下降的相对程度。

实验结果

研究问题

  • RQ1有意义的变量、函数和方法名称的存在如何影响ChatGPT和CodeBERT等LLM在面向安全的代码分析任务中的性能?
  • RQ2LLM在代码标识符被匿名化时,尤其是当名称被替换为无意义或误导性字符串时,其泛化能力在多大程度上受到影响?
  • RQ3使用'语义生成'名称(例如,将'bubble_sort'替换为'aes_encryption')是否比使用'随机生成'名称更易误导LLM?
  • RQ4不同类型的代码匿名化(变量、方法定义、方法调用)对代码搜索和克隆检测任务中模型准确率的独立影响如何?
  • RQ5当实际标识符缺失或被遮蔽时,当前LLM能否有效从代码中学习语义逻辑?

主要发现

  • 当所有开发者定义的名称被移除并替换为随机生成的字符串时,CodeBERT在代码搜索任务上的准确率降至17.42%,而原始Java数据集上的准确率为70.36%。
  • 在Python代码搜索任务中,使用随机生成名称进行完全匿名化后,性能下降至24.09%,而原始数据集上的准确率为68.17%。
  • 在克隆检测任务中,当所有名称被匿名化时,CodeBERT在Java上的准确率降至86.77%,在Python上降至84.76%,而原始数据集上的准确率分别为94.87%和94.27%。
  • '语义生成'匿名化策略的表现始终劣于'随机生成'字符串,表明误导性语义线索可能更易误导模型。
  • 本研究证实,当前LLM(如CodeBERT和GraphCodeBERT)严重依赖代码中的实际特征(如名称),而非语义或逻辑特征,使其容易受到混淆攻击。
  • ChatGPT在名称具有语义意义时展现出强大的高层次代码语义理解能力,但当命名上下文模糊或缺失时,其性能显著下降。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。