Mistral AI Rails 测试代理
Mistral AI 开发了一种自主代理,旨在通过自动生成和改进 RSpec 测试,消除大型 Ruby on Rails 单体架构中的测试差距。该代理在 CI/CD 流水线中运行,无需人工干预,并利用并行执行来处理大规模代码库。
自主测试生成工作流
该代理采用结构化的执行计划,以确保全面的测试覆盖率并遵循样式指南。此过程通过仓库级别的 AGENTS.md 文件进行管理,该文件引导代理执行以下步骤:
- 源码分析: 读取源文件和任何可用的文档。
- 现有测试检查: 确定是否已存在 spec。
- 技能选择: 根据源文件位置选择专门的技能。
- 模式识别: 识别现有的模式、factories 和 helpers。
- 执行: 提取逻辑、管理 factories 并生成测试。
- 验证: 使用 RuboCop 和 SimpleCov 工具验证代码。
为了防止代理跳过公共方法,工作流包含一个强制性的自我审查步骤,代理必须统计并验证源文件中的每个公共方法是否都已通过测试。
通过 Vibe 进行技术实现
该代理基于 Mistral 的开源编程助手 Vibe 构建。实现过程依赖于三个主要杠杆:上下文工程、专门的技能和自定义工具。
上下文工程与专门的技能
由于不同的 Rails 组件需要不同的测试策略,代理为每个类别(例如 models、controllers、serializers、mailers、helpers 和纯 Ruby 文件)使用单独的 "skills" 文件。例如,一个 controller 技能会强制执行特定规则,例如断言 JSON 内容而不仅仅是 HTTP 状态码,并验证每个 action 的身份验证。
自定义验证工具
为了确保生成的测试是功能完备且合规的,代理利用了集成到 Vibe 框架中的自定义工具:
- RuboCop Tool: 一个 linting 工具,用于检测样式违规,触发代理重写代码直到其符合规范。
- SimpleCov Tool: 该工具通过 RSpec 执行 spec 文件,并报告测试通过/失败的结果以及行覆盖率百分比。这一步至关重要,因为它可以防止 "missing parenthesis problem"(即测试在 LLM 看来质量很高,但由于语法错误而无法执行)。
衡量测试质量
Mistral AI 使用混合方法来评估生成测试的质量,结合了基于工具的定量指标与基于 LLM 的定性评分。
定量指标
代理使用标准 Ruby 工具跟踪以下指标:
- RSpec: 测试的通过/失败状态。
- RuboCop: 每个文件的样式违规数量。
- SimpleCov: 代码覆盖率百分比。
LLM-as-a-Judge
为了评估定性方面——例如是否测试了错误条件或断言是否精确——Mistral 使用了 "LLM-as-a-judge" 模型。该评判者使用严格的评分细则(0.0 到 1.0),基于精确值的存在(例如,使用 eq(100) 而不是 be_present)以及对 happy、error 和 boundary paths 的覆盖情况。
实验结果
在一项涉及 275 个源文件的仓库实验中,代理的任务是为未覆盖的文件生成测试并改进现有测试。结果显示测试质量和覆盖率显著提高:
| Metric | Result | | :--- | :--- | | | Files processed | 275 | | Tests passing | 100% | | Average line coverage (SimpleCov) | 100% | | RuboCop violations after self-correction | 0 | | LLM-as-a-judge score | 0.74 |
按文件类型划分的性能
代理的有效性因所测试的逻辑类型而异,其中自包含的业务逻辑最容易实现自动化:
- Models: 0.81 分
- Serializers: 0.80 分
- Controllers: 0.67 分
Mistral AI 指出,在第一次执行时只有三分之一的测试通过,这突显了由 SimpleCov 和 RSpec 驱动的迭代自我修正循环是系统设计中最具影响力的部分。
Sources
相关
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch