Qwen-7B-Chat 在 DevQualityEval v0.5.0 评测报告中的表现解读:测试生成任务的分类、评分与复现指南
【免费下载链接】Qwen3-CoderQwen3-Coder is the code version of Qwen3, the large language model series developed by Qwen team.项目地址: https://gitcode.com/GitHub_Trending/co/Qwen3-Coder
本篇技术指南基于仓库内的DevQualityEval v0.5.0 评测报告,针对openrouter/qwen/qwen-7b-chat模型在测试生成(write-tests)任务上的评测结果进行逐项解读,并结合 DevQualityEval 框架文档 与测试仓库源码,说明其结果分类体系、积分规则的底层逻辑,以及如何复现同类评测。读完本文,你将掌握 DevQualityEval 评测报告的阅读方法,理解 Qwen 系列模型在代码质量基准下的原始表现,并能在本地复现对指定模型的评测。
报告概览:一次针对 Qwen-7B-Chat 的多语言测试生成评测
该报告由 DevQualityEval 基准框架在version 0.5.0下自动生成,评测执行于2024-06-19 11:28:59。报告主体为单个模型openrouter/qwen/qwen-7b-chat(经 OpenRouter 托管的 Qwen-7B-Chat)在 Go 与 Java 两种语言的测试生成任务上的结果。
该报告目录(docs/reports/v0.5.0/qwen-7b-chat/)由以下文件组成:
| 文件 | 内容 |
|---|---|
README.md | 报告正文:分类图、分类体系说明、模型归属 |
categories.svg | 对所有被测模型进行分类的柱状图(矢量图) |
evaluation.csv | 逐任务明细评分(模型 × 语言 × 仓库 × 任务) |
models-summed.csv | 按模型汇总的评分 |
golang-summed.csv | 仅 Go 语言任务的汇总 |
java-summed.csv | 仅 Java 语言任务的汇总 |
报告中内嵌的分类图如下:
报告开篇即提醒:LLM 具有非确定性,以下结果只是当前时间点的快照,不应被当作模型能力的绝对结论。
结果分类体系:七类质量标签的含义
DevQualityEval 将每个模型的每次响应按质量划分为七个递进式类别。理解这七类标签,是解读全部结果数据的前提:
- category unknown:模型无法被归类;
- response error:响应过程发生错误;
- no code:模型未产生任何代码;
- invalid code:模型产生了代码,但代码无效;
- executable code:模型产生的代码可执行;
- statement coverage reached:模型产生的代码达到了完整语句覆盖率;
- no excess response:模型响应中没有超出要求的多余内容。
该分类层级从"能否响应"逐步收敛到"响应质量是否达标",越靠后的类别代表越严格的约束。分类逻辑与 DevQualityEval 的积分规则一一对应(详见下文"积分规则"小节)。
Qwen-7B-Chat 评测结果解读:数据透视
模型归属:category unknown
报告在Result category "category unknown"小节中列出了openrouter/qwen/qwen-7b-chat,即该模型在此次评测中未能被归类到任何有质量区分度的类别。结合 CSV 明细数据可以推断原因:其响应虽然总是包含代码且无错误,但从未达到"可执行代码"乃至"覆盖率达标"阶段,因此无法进入executable code及其之后的类别。
按语言拆解的明细(evaluation.csv)
evaluation.csv记录了模型在 Go 与 Java 的plain仓库上执行write-tests任务的完整数据:
| 语言 | 仓库 | 任务 | 得分 | 覆盖率 | 执行文件数 | 处理时间(ms) | 响应字符数 | 无错误响应 | 无多余响应 | 含代码响应 |
|---|---|---|---|---|---|---|---|---|---|---|
| Go | golang/plain | write-tests | 10 | 0 | 0 | 15122 | 5678 | 5/5 | 0/5 | 5/5 |
| Java | java/plain | write-tests | 10 | 0 | 0 | 18001 | 9045 | 5/5 | 0/5 | 5/5 |
汇总数据(models-summed.csv / golang-summed.csv / java-summed.csv)
- 模型总分:20(Go 10 + Java 10),输入代码总字符 8143,总处理时间 33123ms,总响应字符 14723;
response-no-error = 10/10:全部 10 次请求均正常返回;response-with-code = 10/10:全部响应都包含代码;response-no-excess = 0/10:没有任何一次响应是"只有测试代码、没有多余内容"的;coverage = 0、files-executed = 0:没有任何生成文件被执行,即生成的测试未通过编译/执行验证,语句覆盖率为 0。
得分构成推断
从积分规则反推,可以推断出每语言 10 分的构成:write-tests任务共发起 5 次请求(response-no-error=5),每次响应无错误(+1)且包含代码(+1),合计 10 分;而compiled(编译通过)、statement-coverage-reached(覆盖率达标)、no-excess(无多余内容)均未得分。换言之,该模型"会说话但没做对事":响应稳定、格式完整,但生成的测试既没有编译执行成功,也始终夹杂超出要求的内容。
评测框架原理:write-tests 任务与积分规则
要理解上述分数的含义,需要回到框架本身的定义。DevQualityEval 是一个用于比较和提升 LLM 代码生成质量的评测基准与框架,其核心理念是:让模型完成定义良好的软件开发任务(如为给定函数编写单元测试),并以可自动验证的方式评估结果质量。
任务:Test Generation(测试生成)
write-tests任务是框架的主要任务之一:模型需要为给定源码示例生成测试套件。该任务之所以"好评测",是因为结果容易自动校验——生成的测试必须能编译且达到 100% 覆盖率;而模型只有真正理解源码才能写出这样的测试,因此隐式地在评估模型的语言理解能力。流程上,框架将模型响应保存为文件,并与原始源码一起执行验证。
当前write-tests任务可用的 case 覆盖 Java、Go、Ruby 三种语言,每种语言包含plain与light两个仓库(参见框架文档中的 case 列表)。报告目录中同时存在大量其他模型(如claude-3.5-sonnet、deepseek-coder-v2、codeqwen等)的平行报告,说明这是一次多模型横向评测。
积分规则(Reward Points)
框架当前按以下规则计分,README.md中明确列出:
response-no-error:+1,响应过程未出错;response-not-empty:+1,响应非空;response-with-code:+1,响应包含源代码;compiled:+1,源码编译通过;statement-coverage-reached:每覆盖一个执行代码对象 +10(在transpile与code-repair任务中禁用,防止模型通过堆砌任意语句刷分);no-excess:+1,响应未包含超出要求的内容;passing-tests:每个通过的测试 +10(在write-tests任务中禁用,防止模型通过堆砌任意测试用例刷分)。
可见框架刻意通过禁用项约束投机行为:测试生成任务不计passing-tests、修复/转译任务不计statement-coverage-reached,从而保证分数反映真实质量。这也解释了为何 Qwen-7B-Chat 在得分上仅有基础的响应分——它没有拿到任何质量相关的加分。
从源码看评测数据:golang/plain 测试仓库剖析
报告中的golang/plain用例并非虚构,其测试数据就存放在框架仓库中。查看testdata/golang/plain/plain.go:
package plain func plain() { return // This does not do anything but it gives us a line to cover. }这是评测中"最简单的场景"——一个空函数,仅提供一个可覆盖的语句行。模型需要为它写出能编译并达到 100% 覆盖率的测试。而该仓库的repository.json指定了本仓库要执行的任务:
{ "tasks": [ "write-tests" ] }框架文档说明:仓库根目录下的repository.json决定该仓库运行哪些任务;若不存在,则运行全部任务。
评测的完整调用链在框架 README 的示例日志中有直观呈现:框架向模型发送提示词("Given the following Go code file ... provide a test file ... The tests should produce 100 percent code coverage and must compile. The response must contain only the test code and nothing else."),收到响应后执行symflower test --language golang --workspace ...进行编译与覆盖率验证,最终汇总为分数并写出evaluation.csv。这与 Qwen-7B-Chat 报告中的coverage=0, files-executed=0形成对照:生成物没能通过执行验证,因而在该环节得分为零。
复现与扩展:如何运行 DevQualityEval 评测 Qwen 模型
如果你想复现该报告或评测其他模型(例如 Qwen 系列其他尺寸),可按如下步骤进行:
安装
安装 Git 与 Go 后,克隆框架仓库并安装二进制:
git clone <eval-dev-quality 仓库地址> cd eval-dev-quality go install -v github.com/symflower/eval-dev-quality/cmd/eval-dev-quality配置模型提供方
报告中的模型经 OpenRouter 托管,需创建访问密钥并写入环境变量:
export PROVIDER_TOKEN=openrouter:${your-key}执行评测
运行全部任务的默认评测:
eval-dev-quality evaluate若只想评测指定模型(可叠加多个--model):
eval-dev-quality evaluate --model=openrouter/qwen/qwen-7b-chat执行结束后,明细结果保存在evaluation.csv,默认还会生成REPORT.md报告文件及指向各结果文件的链接。更多参数见eval-dev-quality evaluate --help。
安全提示
框架文档特别提醒:默认情况下项目不在沙箱中执行 LLM 生成的代码,务必在隔离环境中运行评测,例如通过--runtime docker使用容器运行时;使用容器时还需注意--configuration(容器运行时暂不支持传入配置文件)与--testdata(路径存在性检查在宿主机上被忽略、容器内仍会校验)两项参数的特殊行为。
小结
本报告为 Qwen-7B-Chat 在 DevQualityEval v0.5.0 上留下了一组基线快照:响应稳定、包含代码,但生成测试未能通过编译执行验证,且普遍包含多余内容,最终归入category unknown。需要强调的是,LLM 是非确定性的,任何单次评测都只是特定时间点的抽样;模型的"好坏"还取决于算力成本、权重开放程度与具体使用场景,并不存在普适的最优模型。若想持续跟踪 Qwen 系列在测试生成任务上的表现,可直接基于本仓库的 DevQualityEval 框架对qwen-7b-chat乃至更新的 Qwen 模型重新发起评测,并对照docs/reports/v0.5.0下其他模型的平行报告进行横向比较。
【免费下载链接】Qwen3-CoderQwen3-Coder is the code version of Qwen3, the large language model series developed by Qwen team.项目地址: https://gitcode.com/GitHub_Trending/co/Qwen3-Coder
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考