摘要
arXiv:2504.04372v1 交叉公告类型:cross
摘要:大型语言模型(LLMs)越来越多地被用于代码修复和测试等后开发任务。这些任务的成功关键在于模型对代码的深刻理解。然而,LLMs真正理解代码的程度仍然很少被评估。衡量代码理解的程度具有挑战性,因为其抽象性质以及缺乏标准化的度量标准。此前,这通常是通过开发者调查进行评估的,但这种方法不适用于评估LLMs。现有的LLM基准主要集中在代码生成上,这与代码理解从根本上不同。此外,固定的基准很快就会过时,因为它们成为训练数据的一部分。本文提出了第一个针对LLMs理解代码能力的大规模实证研究。受变异测试的启发,我们使用LLM的故障查找能力作为其深层代码理解的替代指标。该方法基于这样的洞察:能够识别细微功能差异的模型必须很好地理解代码。我们在实际程序中注入故障,并要求LLM定位这些故障,确保规范足以进行故障定位。接下来,我们对有故障的程序应用语义保护断言(SPMs),并测试LLMs是否仍然能够找到故障,验证其对代码理解的信心。我们对670个Java和637个Python程序中的575,000个调试任务评估了九个流行的LLMs。我们发现,在应用SPMs的情况下,LLMs在81%的有故障的程序中失去了修复相同错误的能力,这表明对代码的理解较浅以及依赖于与语义无关的特性。此外,我们发现LLMs在程序的早期部分更好地理解代码,而不是后期。这表明LLMs的代码理解仍然受到词汇和语法特征的限制,而这些特征是为自然语言设计的token化方式所忽略的代码语义。