Mistral AI Rails Testing Agent
Mistral AI 開發了一款自主代理(autonomous agent),旨在透過自動生成與改進 RSpec 測試,來消除大型 Ruby on Rails 單體架構(monoliths)中的測試缺口。該代理在 CI/CD 流水線中運行,無需人工干預,並利用並行執行來處理大規模代碼庫。
Autonomous Test Generation Workflow
該代理採用結構化的執行計畫,以確保全面的測試覆蓋率並符合風格指南。此過程透過儲存庫層級的 AGENTS.md 檔案進行管理,引導代理執行以下步驟:
- Source Analysis: 讀取原始碼檔案與任何可用的文件。
- Existing Test Check: 判斷是否已存在 spec。
- Skill Selection: 根據原始碼檔案位置選擇專門的技能(skill)。
- Pattern Identification: 識別現有的模式(patterns)、工廠(factories)與輔助工具(helpers)。
- Execution: 提取邏輯、管理工廠,並生成測試。
- Validation: 使用 RuboCop 與 SimpleCov 工具驗證代碼。
為了防止代理跳過公開方法(public methods),工作流程中包含了一個強制性的自我審查步驟,代理必須計算並驗證原始碼檔案中的每個公開方法是否都已通過測試。
Technical Implementation via Vibe
該代理是基於 Mistral 的開源編碼助手 Vibe 所構建的。其實現依賴於三個主要槓桿:上下文工程(context engineering)、專門技能(specialized skills)以及自定義工具(custom tools)。
Context Engineering and Specialized Skills
由於不同的 Rails 組件需要不同的測試策略,代理為每個類別(例如 models、controllers、serializers、mailers、helpers 以及 plain Ruby 檔案)使用獨立的「技能」檔案。例如,一個 controller 技能會強制執行特定規則,例如斷言 JSON 內容而非僅僅是 HTTP 狀態碼,並驗證每個 action 的身份驗證。
Custom Validation Tools
為了確保生成的測試具備功能性且符合規範,代理利用了整合進 Vibe 框架的自定義工具:
- RuboCop Tool: 一款 linting 工具,用於檢測風格違規,並觸發代理重寫代碼直到符合規範。
- SimpleCov Tool: 此工具透過 RSpec 執行 spec 檔案,並回報測試通過/失敗的結果以及行覆蓋率(line coverage percentage)。此步驟至關重要,因為它能防止「缺少括號問題」(missing parenthesis problem),即測試在 LLM 看起來品質很高,但因語法錯誤而無法執行。
Measuring Test Quality
Mistral AI 使用混合方法來評估生成測試的品質,結合了基於工具的定量指標與基於 LLM 的定性評分。
Quantitative Metrics
代理使用標準 Ruby 工具追蹤以下指標:
- RSpec: 測試的通過/失敗狀態。
- RuboCop: 每個檔案的風格違規次數。
- SimpleCov: 代碼覆蓋率百分比。
LLM-as-a-Judge
為了評估定性方面——例如錯誤條件是否得到測試,或者斷言是否精確——Mistral 使用了「LLM-as-a-judge」模型。該評審員使用嚴格的評分準則(0.0 到 1.0),基於精確值的存在(例如 eq(100) 而非 be_present)以及對快樂路徑(happy path)、錯誤路徑與邊界路徑的覆蓋。
Experimental Results
在一項涉及 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 |
Performance by File Type
代理的有效性因所測試的邏輯類型而異,其中自包含的業務邏輯最容易自動化:
- Models: 0.81 分數
- Serializers: 0.80 分數
- Controllers: 0.67 分數
Mistral AI 指出,僅有三分之一的測試在第一次執行時通過,這突顯了由 SimpleCov 與 RSpec 驅動的迭代自我修正迴圈是系統設計中最具影響力的部分。
Sources
相關
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch