Mistral AI Rails Testing Agent

Mistral AIは、RSpecテストを自動的に生成および改善することで、大規模なRuby on Railsモノリスにおけるテストのギャップを解消するために設計された自律型エージェントを開発しました。このエージェントは、人間の介入なしにCI/CDパイプライン内で動作し、並列実行を利用して大規模なコードベースを処理します。

Autonomous Test Generation Workflow

エージェントは、包括的なテストカバレッジとスタイルガイドラインへの準拠を確保するために、構造化された実行プランを採用しています。このプロセスは、リポジトリレベルの AGENTS.md ファイルを介して管理され、エージェントを以下のステップに従って誘導します:

  1. Source Analysis: ソースファイルを読み取り、利用可能なドキュメントを確認します。
  2. Existing Test Check: すでにspecが存在するかどうかを判断します。
  3. Skill Selection: ソースファイルの場所に基づいて、専門化されたskillを選択します。
  4. Pattern Identification: 既存のパターン、factories、およびhelpersを特定します。
  5. Execution: ロジックを抽出し、factoriesを管理し、テストを生成します。
  6. Validation: RuboCopおよびSimpleCovツールを使用してコードを検証します。

エージェントがpublicメソッドをスキップすることを防ぐため、ワークフローには、ソースファイル内のすべてのpublicメソッドがテストされていることをエージェント自身がカウントして検証する、必須のセルフレビューステップが含まれています。

Technical Implementation via Vibe

エージェントは、Mistralのオープンソースのコーディングアシスタントである Vibe をベースに構築されています。実装は、コンテキストエンジニアリング、専門化されたskills、およびカスタムツールという3つの主要なレバーに依存しています。

Context Engineering and Specialized Skills

異なるRailsコンポーネントは異なるテスト戦略を必要とするため、エージェントは各カテゴリ(例:models、controllers、serializers、mailers、helpers、およびplain Ruby files)に対して個別の "skills" ファイルを使用します。例えば、controller skillは、単にHTTPステータスコードをアサートすることではなく、JSONコンテンツをアサートし、すべてのactionに対して認証を検証するという特定のルールを強制します。

Custom Validation Tools

生成されたテストが機能的かつ準拠していることを確認するために、エージェントはVibeフレームワークに統合されたカスタムツールを利用します:

  • RuboCop Tool: スタイル違反を検出するリンターツールであり、エージェントに、準拠するまでコードを書き換えさせるトリガーとなります。
  • SimpleCov Tool: このツールはRSpec経由でspecファイルを実行し、パス/失敗の結果と行カバレッジの割合を報告します。このステップは、LLMが定性的に高品質に見えても、構文エラーのために実行に失敗するという「括弧の欠落問題」を防ぐために極めて重要です。

Measuring Test Quality

Mistral AIは、生成されたテストの品質を評価するために、定量的なツールベースのメトリクスと、定性的なLLMベースのスコアリングを組み合わせたハイブリッドアプローチを採用しています。

Quantitative Metrics

エージェントは、標準的なRubyツールを使用して、以下のメトリクスを追跡します:

  • RSpec: テストのパス/失敗ステータス。
  • RuboCop: ファイルあたりのスタイル違反の数。
  • SimpleCov: コードカバレッジの割合。

LLM-as-a-Judge

エラー条件がテストされているか、あるいはアサーションが正確であるかといった定性的な側面を評価するために、Mistralは "LLM-as-a-judge" モデルを使用します。このjudgeは、正確な値(例:eq(100) の代わりに be_present)の存在や、happy、error、およびboundary pathsのカバー範囲に基づいて、厳格なスコアリングルーブリック(0.0から1.0)を使用します。

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 score
  • Serializers: 0.80 score
  • Controllers: 0.67 score

Mistral AIは、最初の実行でテストがパスしたものはわずか3分の1であったと述べており、SimpleCovとRSpecによる反復的なセルフリフレクション・ループが、システム設計において最も影響力のある部分であったことを強調しています。

Sources

関連

  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch