参考文章
评估指标
1. CodeBLEU
- 看
词汇重合度。
2. CodeBERTScore / RTC
- CodeBERTScore:
向量相似度。 - RTC(Round-Trip Correctness):把代码翻译成另一种形式,再翻译回来,对比前后一致性。
3. Pass@k
- 评估
功能正确性,实际执行。给k次机会,只要有1个成功,就算成功。
核心思想
- 让LLM来评估是否写得好。
1. ICE-Score
- 引入
Rubrics打分细则,输出1个量化的分数。- 比如完全没用大0分、语法错误打1分、解决问题打4分。
2. CodeJudge/CodeJudgeBench
- 输入task和task_code,让模型
先思考(哪里写得好/哪里有bug),再打分。 - 缺点:不稳定。
3. BigCodeReward (多模态评估)
- 输入
代码和代码运行结果,去做打分,更关心实际效果。- 运行结果:报错日志、图标、网页截图等。
偏好打分:给2个方案及运行结果,判断谁更好。
1. ProbGen/差异测试
- 背景:判断代码
和标准答案是否一致。 - 让llm自动生成
多个输入数据(探针),分别喂给2段代码;若输出结果不同,则功能不同。
2. REFUTE/反例生成
- 给一段有bug的代码,生成输入,让代码跑崩溃。
3. EvaLooop/循环转换测试
- 代码需求循环:需求 -> 代码 -> 需求 -> 代码 -> ...
- 多语言转换循环:Python -> Java -> Python -> Java -> ...
- 评估标准:如果能坚持多轮,则效果稳健ASL分数高;否则,分数低。
1. MCTS-Judge
- 搜索输,每个节点代表一个特定检查视角(边界条件/异常/需求规范等等)。
- 沿推理路径做预测和模拟执行,如果推理和执行结果一致,则给一个奖励。
2. CodeVisionary
让多个模型一起打分。先收集情报,再让n个LLM进行打分。- 指标:共识分数,降低评估方差。
1. Incoherence/不连贯性/不一致性
- 1个任务,让模型生成2个程序,观察输出是否一致。
- 高Incoherence:模型随机性很强,不可靠。
- 低Incoherence:模型很稳定,一致性好。
2. Mean Absolute Deviation (MAD)/鲁棒性测试
- 先测原始代的准确率,做一些表面修改(如变量命名),计算评分准确率。
- 判断两个准确率之间的差距。MAD越小越好。
1. SBC 语义相似性
- 原始需求 -> 模型 -> 代码,再把代码 -> 新需求。
- 判断
原始需求描述和新需求描述是否一致。
2. Copilot Arena / BigCodeArena
- 系统同时给模型A和B的代码,开发者采纳谁,就算赢。计算排名。
3. CodeCriticBench
- 给一段代码,具体两个指标由大模型来判断
Acc准确率:模型对不对Checklist:比如安全性达标吗、命名规范吗、效率高吗?
人类均方误差:LLM打分和人类打分偏离多少。
片段级任务
代码补全和FIM
给定部分上下文,评估模型预测正确代码片段的能力。
核心点
- 利用上文前缀Prefix,
继续编写或修复代码。
Statement-Level(语句级)
- 基于上文预测单行代码或表达式,关注局部语法。
- CodeXGLUE:下一行补全,6种语言,
精准匹配作为指标。 - HumanEval-Infill/Qwencoder2.5:给定文档,
可执行、单元测试作为指标。
Function-level(函数级)
给定函数签名或部分代码,生成完整函数,关注算法逻辑。- BigCodeBench:从github上提取
真实代码,做函数还原。评估:正确性和复杂度。 - MultiPL-E:同一个功能,可以有
多个写法。
Class-Level(类级)
- 给定部分类定义中,实现整个类、多个方法。
- ClassEval:不仅写一个函数,要写整个类,关注
全局类结构理解能力。 - ClassEval-T:口占了Java和CPP,更强调面向对象。
- OOP:关注设计模式。
核心
- 利用前缀prefix和后缀suffix,来预测中间部分。
- FIM是一个预训练任务,现在单独出来,评估是否好用。
主要工作
- CCCI:强调上下文
- 喂外部知识,如数据库结构关系等;模型懂了业务逻辑,补全代码质量更高。
- SAFIM:强调语法感知的评估
- 挖空的是完整的语法块,避免随机mask。
- 如果预训练效果不好,则SAFIM能力就会差。
- ASR-FIM
- 也是避免随机mask。
- 使用抽象语法树(AST)来做掩码,遮住完整的语法结构。
- 强迫模型去预测整个逻辑结构。

代码生成
早期-简单函数生成
- CodeXPLUG,
- HumanEval&MBPP (
最流行):Prompt->Code->单元测试 - 缺点:测试用你太少,
容易过拟合
增强测试严谨性
- HumanEval+, MBPP+:
自动生成测试用例,去验证是否真的懂,避免过拟合 - HumanEval Prom MBPP PRo:
增加难度、扩大题库、改进评估方式等。
多语言扩展
- MBXP/Multi-HumanEval:把测试用例扩展至Java/C++/JS等语言。
- HumanEval-XL:测试自然语言和编程语言的交叉组合。英语中文俄语、python/java 等混搭组合。
真实场景/上下文/复杂性
- McEval/BigCodeBench:强调代码不是孤立的,需要结合
代码库上下文、显示世界等。 - MERA Code:超越简单函数到复杂系统的
全方位评估框架。 - CodeFuseEval:
中文指令、多任务能力。
- ClassEval:100个python类,需要内部多个方法调用
- ClassEvalT:
- OOP:面向对象
核心思想
- 不仅要代码能跑通,还要逻辑强、效率高。
主要工作
- LiveCodeBench, LiveCodeBench Pro:收集模型训练截止日期之后的题目,测试OOD题目。
- CruxEval:让模型
写代码、还预测输入输出,测试解题能力。 - CodeNet:多语言数据集。
- APPS:竞赛问题+人类写的代码。
- MultiPL-E:要求模型为每个问题生成多个答案,评估多样性。

垂直技术栈
- Deep-Bench:写pytorch/tensorflow的能力。
- KernelBench/TritonBench:测试GPU编程。
- SciCode:科学计算。
复杂结构和全栈
- FullStackBench:测试全栈能力(前端、后端、数据库)
- YABLoCo:长上下文,读几千行代码,写新代码。一般用作老旧项目维护。
评测方法创新
- Meta-Benching/AutoCodeBench:设计框架
自动构建Bench,让AI自动抓取代码、生成测试用例。 - RAG/CodeRAG-Bench:考察
看文档写代码的能力。


代码编辑和修bug
改原始代码。

语句级Bench
- 早期数据集(版本控制的提交历史)
- MegaDiff:66.3万个Java变更。
- TSSB-3M:300w个python合成的单语句错误。
- 特定类型错误:TFix (10.5万个js修复)、FixJS(32.4万个js)、PyTer(python错误)
- 后来的工作:规模、可执行和语言改进。
- RunBugRun:8种语言,45w个可执行错误修复Pair。
- xCodeEval:450个多语言样本,10+语言。
- DebugBench:4.2k的debug任务和配套测试,c++,python,java
- 最近数据集:把调试集成到指令微调中
- HumanEvalPack:把HumanEval扩展到6种语言,并增加调试变体
- MDEval:18种语言、3513个调试任务
交互迭代式Bench
- 传统:一次性修复
- 迭代与反馈
- SWT-Bench:1900个,可执行测试用例,真实Github错误
- FeedbackEval:带有结构化外部提示的迭代修复
写代码->报错->改代码->跑通
- Agentic & Tool Use
- CodeEditorBench:模拟
IDE环境,涉及增量编辑和文件间依赖。 - DebugEval:自我调试,
模型生成调试信号来指导多步修复。 - Debug-gym:
- 教模型
使用debug工具(pdb),包括打断点、单步执行、查看变量值等。 - 通过
SFT/RL教模型使用有状态工具,解决预训练此类数据稀缺问题。
- 教模型
- CodeEditorBench:模拟
代码效率
背景
- LLM 写的代码可能效果好,但
效率很低,希望写对代码->写好代码。 - 效率:运行时间、内存使用、算法复杂度、能耗。
性能和复杂度测试
- EffiBench:1k+算法任务,GPT4代码比人类代码慢3倍、内存占用多14-44倍。
- Mercury:扩展并提出多维框架,测量各种编程问题在最佳/最差下的执行时间、内存占用和复杂度。
- EffiBench-x:多种编程语言。
- BigO/DynCode:侧重算法复杂度,是否达到算法复杂度。
- COFFE:强调在现实执行负载下的实际运行时间评估,提供了互补的系统级视角。
- EvalPerf:引入了一个差分性能评估框架,评估 LLM代码在性能挑战任务上的效果。
能耗和效率优化
- ECCO/Solovyeva/Cappendijk:量化了LLMCode和人类Code的能耗开销,探索微调策略降低功耗。
训练时干预 (Training Objective)
- EffiCoder 试图在训练阶段就告诉模型:“写得快的代码才是好代码”,
把效率信号加入损失函数。
强化学习 (RL):
- ACECode 使用 RL,如果代码运行速度快,则给奖励,来激励模型优化代码。
事后修补 (Post-generation Refinement):
- Rethinking Code Refinement :先让模型写,再用专门步骤去检查“哪里写慢了”,再重构优化。
代码偏好
背景
- 不仅是写对代码,还要评估谁的代码更好,更符合人类标准:(
正确、快、安全、易读).
方法1:硬指标打分法
- CodeArena:题越难,分数越高;运行时间越短,分数越高。
- Long CodeArena:项目级,看能否在大项目里理解项目架构。
方法2:竞技场LLM-as-a-Judge法
- 找强力模型做裁判。
- CodePrefBench:直接测模型有无鉴赏力,能不能挑出好代码。
- AutoCodeArena:自动化擂台。裁判看2者的
代码+各自沙盒运行结果,来打分。
代码推理和问答
背景
- 评估模型理解分析代码的能力。
基于QA的评估
- CodeQA:
把代码注释转换成问答对,10w的数据集。 - CS1QA:从python入门课程的聊天记录中收集问答对。
- CodeMMLU:多种任务,包括代码修复、执行推断和填空挑战。
- CodeSense:
真实软件项目中细粒度的代码语义推理任务。- 现有Bench依赖合成数据或教育性编程。
基于代码语义推理的评估 (更具体的任务)
- SpecEval:4个任务来评估,规范判断、选择、补全和生成。
- CRUXEval/CRUXEval-X:执行预测,
输出预测和输入预测s。 - EquiBench:程序等价性检查,两段代码,修改了语法结构,看是否一致。
- CORE:通过静态分析来判断,如数据流(Data Flow)和控制流(Control Flow)。
- 变量 A 的值是否依赖于变量 B?,这段代码的死代码(Dead Code)在哪里?
多模态维度
- ScratchEval 非常新颖。Scratch 是图形化编程(拖拽积木块),代码是“画”出来的。
- 这测试了多模态模型(如 GPT-4V)能否看懂视觉化的逻辑结构。
代码翻译
早期方法:语法结构驱动
- AST: 抽象语法树,类似先把英文句子分析成主谓宾结构树,再把树变成中文结构。难以处理复杂结构。
- TransCoder:只给模型看大量的中文书和大量的英文书(单语语料),模型也能通过无监督学习学会翻译
基于执行反馈的方法 (测试用例)
- 保留原有代码结果,LLM翻译成新代码,执行新代码的单元测试,
- 如果结果一致,说明正确;否则,把不同信息给到,让LLM继续改。
Prompt工程
- 先解释后翻译,效果好。
安全
- 使用差分模糊测试(differential fuzzing来验证等价性。
- 如c++ -> rust,内存不安全->内存安全语言。
数据与评估的进化
- 数据合成: 很难找到完全对应的代码对,用 Back-Translation(回译) 来造数据。
- Python -> Java, 再Java -> Python,看能否复原,以此来造数据,
- 超越 BLEU: 之前看BLEU(看词重叠率,发现没用,现在看功能等价性(能不能跑通测试)和复杂度分级(是简单的改变量名,还是复杂的算法重写)。
测试用例生成
面向软件工程
- SWT-Bench/TestGenEval
- 转换了SWE-Bench代码,提供了有bug的代码和对应的补丁。
- 要求生成的测试用例,在bug代码不通过、在修复后的代码上通过。
面向程序竞赛
- TestEval:LeetCode 210个问题;其评估仍然局限于覆盖率指标。
- CodeForce-SAGA、TCGBench、TestCase-Eval
- 收集了大量的错误和正确的代码提交,以进行端到端的评估。
- 核心指标:测试用例能否拒绝错误代码同时通过正确代码的比例。

Repo-Level 任务
代码生成和补全
- 由
单一代码刷题->写工程代码。 整个代码库上下文(多文件/项目结构/依赖关系/跨文件关系),来预测/补全或生成代码片段。

- RepoBench
- 仓库级,在检索和
补全任务上评估模型。 - 训练集:
22年之前的代码;测试集:22年之后的代码。
- 仓库级,在检索和
- RepoEval
- 处理仓库级时:RAG(检索+生成) > 纯模型。
RepoCoder利用完整仓库上下文,效果好于其他模型。 - 使用
单元测试来评估14个真实代码仓库的代码补全。
- 处理仓库级时:RAG(检索+生成) > 纯模型。
- Execrepobench
- 重新生成
多粒度(表达式/语句/函数)的masked spans,来评估 LLM 的仓库级补全能力 - 通过
仓库测试文件进行验证;并在其上微调Qwen2.5-Coder以增强补全性能。
- 重新生成
- CoderEval
- 专门测试
非独立函数,需要调用其他文件代码等。- 模型效果:非独立函数 弱于 独立函数。460 个 Java/Python问题。
- 专门测试
- CrossCodeEval :多语言bench,10k,通过静态分析测试
跨文件上下文的需求。 - M2rc-Eval:多语言Bench,使用
AST(抽象语法树)来做标注的。 - Codev-Bench:使用
工业数据评估repo补全能力。- CodeLLM 优于通用模型,但在
不完整后缀场景效果都不好。
- CodeLLM 优于通用模型,但在
- RepoCod:Python Bench,11个项目,980个任务,50%都需要仓库级上下文。
- DI-Bench:
评估依赖推理,4语言,581仓库。顶级模型效果也不好。 - DependEval:
分层评估仓库级依赖,8种语言,15k仓库。 - REPOST:
沙盒测试构建仓库级环境。REPOST-TRAIN训练的模型在HumanEval/RepoEval有效果- 但在
REPOST-EVAL 效果一般。
- SecRepoBench:在仓库级别评估
安全代码生成(318 个任务,C/C++ 中的 15 种 CWE 类型)。 - DevEval:
人工注释的Bench(1.8k样本,117 仓库);有难度,当前 LLM 表现很差。
领域复杂代码生成
需要特别的领域知识,逻辑复杂、多重依赖等。

BioCoder
生物学代码生成Bench,1.7k生物学仓库、2.2k高质量代码问题。
PaperBench
- 要求模型
去复现论文,20篇ICML2024的论文。- 论文写公式原理,模型需深刻理解,才能写出和跑通代码。
评分树(Rubric Tree):不只看最终结果,而是把大任务拆解为8.3k个小步骤子任务,一步步打分。- 如数据预处理、模型定义、loss函数等。
- 也有一个llm-as-a-judge方法
- 要求模型
Commit0
- 输入
文档和空函数体,从0开始编写代码库,实现所有函数,通过单元测试。54个python库。
- 输入
HackerRank-ASTRA
- 评估跨领域、多文件的能力。每个问题运行32次做评估。
ProjectEval
- 模拟
用户交互,来测试repo-level 代码生成能力,284个测试用例,共3级输入- Level1:
NL Prompt;Level2:NL Checklist;Level3:Skeleton。
- Level1:
- 模型在需要
系统性思维和全项目理解的任务上表现很差。
- 模拟
DA-Code
- 数据科学上的代码生成。500个任务。存在挑战。
代码编辑重构Agent合作
- 对代码进行修改、重组以改进质量。
- 并由多个Agent协同工作以完成编程目标。
- 从简单代码补全插件 -> 能干脏活的agent。
- 可靠性(不能影响别的代码)、长代码不懒惰、大局观(复杂计划、跨文件依赖处理)。

Aider Edit Bench
编辑python源文件,完成133个Exercism的编程练习。
Aider Refactor Bench
- 重构大python类的
89个大方法。 - 需要
长上下文能力。
- 重构大python类的
Aider Polyglot Bench
- 基于edit bench,扩展了多种语言,共225个case。
RES-Q
- 100个真实repo的评估bench,在重构、编辑和问答中都有测试用例。
LiveRepoReflection
- 提出一个
系统来收集仓库数据,RepoReflect数据集,包含580个reflection实例。 - 集成执行反馈,解决当前llm的局限性(复杂/长上下文等)
- 提出一个
RepoExec
- 仓库级代码生成测试,构建
可执行环境来分析上下文如何影响代码的质量。 - 指标:pass@k, 依赖调用率(DIR)。
- 结果:完整依赖能提高模型效果,指令微调模型比base模型更善于使用依赖。
- 仓库级代码生成测试,构建
CodePlan
解决复杂任务,
Planning+Multi-step Edits。- 先生成
多步计划,再一步步编辑,确保每一步的依赖关系都正确。
- 先生成
仓库级编码的框架。自动化了需在
整个仓库中进行广泛编辑的任务。
Commit Message 生成
任务
- 根据
代码差异,自动生成简单、信息丰富的文本描述。
早早期方法:统计和规则
- 猜词,用朴素贝叶斯猜提交是fix还是add。
早期方法:检索&NMT
- NMT:把diff使用翻译模型翻译成英文
- 检索:去数据库里检索一个最像的diff,抄这个message。
Bert/大模型
- CommitBert:
- CoRec:
- ExGroFi:整合链接的issue描述,增强消息的rationale
- CommitChronicle:利用提交历史,提高对时间和风格的连贯性。
评估的挑战
- BELU有局限:传统指标看词重叠,一般commit消息比较短暂,稍微换个词,意思一样,但bleu分数会很低。
- B-Norm:通过平滑和忽略大小写,尽量让打分接近人类直观感受。

SWE 任务
- 来源真实的github开源项目,给定真实的issue,
- 徐自己去读代码、复现bug、定位文件、修改代码并通过测试。
SWE-Bench 家族
SWE-bench:2.2kissuse-PR对,真实github python问题,fail-to-pass单元测试。- Java bench:SWE-Bench扩展至Java。
- SWE-bench-light:为降低计算成本,仅保留300个任务。
- SWE-bench-Multilingual:9种编程语言、42个仓库、300个手动验证的任务。
- SWE-bench-Multimodal:517个基于图像的问题,测试是否解释视觉线索(屏幕截图/GUI错误等)。
SWE-bench-verified:500个人工策划的例子,基于docker评估,确保一致性。
SWE-Bench 扩展
- SWE-bench-Live:持续纳入新的github问题,164仓库、1565任务,更动态、比静态数据难。
- SWE-rebench:自动化大规模问题收集(>21k任务),实现时间纵向评估。
- SWE-dev:从bug修复转到
功能实现,1.4万个训练数据和500个评估数据。 - BugPilot:让
LLM添加新功能而非直接插入bug,来合成更逼真的bug。- 使用
Qwen3在swe-bench-verified达到SOTA。
- 使用
- Gistfy:要求agent把仓库提炼为复制其运行时行为的
最小单文件代码。 - SWE-PolyBench:跨语言推理能力,21仓库,2110任务。
- Multi-SWE-Bench:7语言,1632 issue,c/c++/rust性能最弱。
- SWE-Bench+:包括截止日期后的仓库,避免数据泄露/
- SWE-bench-M:
视觉调试,17个JS项目,619个视觉issue。很有挑战。
超越SWE-Bench
- SWE-Lancer:经济价值,1.4k真实Upwork任务(100万美元),
- FAUN-Eval:300个github细粒度问题。
- FEA-Bench:跨83个仓库的仓库级功能实现,最好模型仅10%
- SwingArea/CoreCodeBench:分别把评估扩展至持续集成和复合任务。
- AgentIssue-Bench:agent的自我维护能力,201个问题、50个任务,长期记忆挑战。
综合软件开发
- 代码只是一小部分。
- 还需要:写文档、看图修bug、用git、跟进项目等。
- README Eval:文档生成,根据项目的issue和commits等数据生成readme
- OminiGIRL:评估github issue能力,引入多模态挑战,错误包括图像。
- GitGoodBench:版本控制。
- EvoCodeBench:动态范式,不断演进真实的仓库。
- Stack-Repo:策划
大规模、去重的源代码数据,对提高真实任务性能很重要。
Repo-Level和长上下文理解
思想
- 在整个代码库或大量文档做理解推理,需要跨越多个文件、可能需保持高达数百万token的上下文。
基准测试:海量代码大海捞针
- RepoQA:仓库级问答,需对
多个文件进行检索和推理。 - CodeRepoQA:仓库级问答
- CoreQA:真实github仓库问题和评论构建的数据集
- LongCodeU:更全面和挑战的任务,四个方面来评估:
- 代码单元感知、代码单元内部理解、代码单元关系理解、长文档理解
长上下文压缩
- LongCodeZip:减少上下文长度,高效压缩长代码上下文
- 困惑度:如果一段代码对当前问题重要,去掉其以后,模型对该问题的困惑度会飙升。
- 粗粒度压缩:以函数为单位,计算每个函数对当问题的贡献度(互信息),只保留贡献大的函数。
- 细粒度压缩:基于困惑度的边界检测,把保留的函数分割成快,使用背包算法进行token预算优化

Agentic System
Agentic Tool Use
核心
- 考察选择和使用工具的能力。
入门级
- API-Bank:天气如何,意图识别。
- ToolBench
多轮交互
- BFCL:多步多轮交互。
- 还有AppWorld。
领域任务
- TauBench:复杂的公司内部流程(客服)
Deep Research Bench
核心
- 信息检索、深度推理。
Bench
- GAIA:真实问题,结合推理、网页浏览、工具使用。
- xbench:人才搜寻和市场营销领域。
- DeepResearch Bench:学术标准,需达phd-level,自主研究和生成报告。
WebSearch Bench
核心
- 开放的、不受约束的网络环境。需要持久、适应和过滤噪声和矛盾信息的能力。
Bench
- BrowseComp:把信息检索构建为组合推理任务,要求聚合多个网站上的碎片化信息。
- BrowseComp-ZH:多语言版本。
- BrowseComp-Plus:推理和检索解耦,分为
找信息和根据信息推理2步。 - WebWalker-QA:强调
网页之间的跳转,像人逛维基百科一样。 - Widesearch:大规模、开放域的信息综合synthesis。
GUI Bench
核心
- 要求理解图像用户界面。
- 把NL指令变成Grounding的UI动作,多步计划、泛化性仍然存在挑战。
前端导航Bench
- WebShop/Mind2Web:数千个目标导向的任务,要求在真实网站中操作。
- OminiACT:扩展,引入跨网页、桌面和移动设置的bench。
- WebChoreArena:长期记忆和计算的复合家务任务。
- PersonalWAB:用户历史和偏好引入个性化。
- Sphinx/NovelScreenSpot:GUI分解子技能,如目标理解、UI落地和规划。
前端开发Bench
- Design2Code/WebCode2M:设计和代码实现的pair数据集。看图写代码。
- Sketch2Code:看草图写代码
- Interaction2Code:生成动态交互式的网站。
- WebGen-Bench:从0开始生成多文件网站。
- Web-Bench:模拟了具有顺序依赖任务的真实软件开发,不仅是一次生成,还有后续修改和迭代。
Terminal Use
核心
- 在终端环境中做真实任务的自主操作能力。
- 超越了自定义环境,还需要在真实系统里做操作。
- SWE-Bench:定义好环境,边界清晰。
- Terminal-Bench:无边界,整个系统都是环境。
Bench
- Terminal-Bench:
- 需要系统级开发能力,探索系统、执行shell和各种命令行工具,完成复杂系统任务。
- 比如从源码编译和启动一个完整的linux内核。
- 整个环境都是待解的空间。
- 需要系统级开发能力,探索系统、执行shell和各种命令行工具,完成复杂系统任务。