powered by TechFeed
表示モード
Microsoft

MicrosoftがAI生成コードのテスト専用エージェントを公開 — ミューテーションテストで「カバレッジ数値がチームを欺いてきた」問題に挑む

8月8日、Tom Smithが「Microsoft's New Testing Agent Tackles the Trust Gap in AI-Generated Code」と題した記事を公開した。MicrosoftがAI生成コードのテスト品質問題に対処するオープンソースのユニットテスト専用エージェントを公開したことについて詳しく紹介されている。

8月8日、Tom Smithが「Microsoft's New Testing Agent Tackles the Trust Gap in AI-Generated Code」と題した記事を公開した。MicrosoftがAI生成コードのテスト品質問題に対処するオープンソースのユニットテスト専用エージェントを公開したことについて詳しく紹介されている。


AI生成コードの「テスト問題」はすでに顕在化している

AIコーディングアシスタントがコードを高速に生成する一方で、そのコードへの信頼性は別の話だ。今年の調査では、開発者がAI生成コードに寄せる平均的な信頼度は5点満点でわずか中間点をやや上回る程度にとどまっており、半数以上の開発者がテストなしでAI生成コードをshipしていると認めている。

カバレッジ数値は表面上は問題なく見えることが多いが、その実態は薄い。「nullでないことを確認してテスト完了」といった形式的なテストが多数含まれているのが現状だ。

Microsoftが公開したcode-testing-generatorとは

Microsoftはこの問題に対処するため、ユニットテスト専用のオープンソースエージェント code-testing-generator を公開した。microsoft/dotnet-skillsリポジトリ内のdotnet-testプラグインとして提供されており、「ユニットテストを生成して」という単純なプロンプトでは答えが出ない問いに答えるよう設計されている。

  • どのコードにカバレッジが必要か
  • プロジェクトがすでに使っているテストフレームワークは何か
  • 新しいテストをどこに配置すべきか
  • ビルドがそのテストを実際に検出するか

最後の点は特に重要だ。新しいテストプロジェクトがローカルでコンパイル・パスしても、ソリューションやテストコマンドに組み込まれていなければCIでは一切実行されない。この「静かな失敗」をエージェントが明示的にチェックする。

単なるコード生成ではなく「プロセス」として動く

このエージェントの核心は、テスト生成を単発のプロンプトではなくチェックポイント付きのプロセスとして扱う点にある。

動作フローの概要:

  1. リポジトリ調査フェーズ:言語の検出、既存テストフレームワークの特定、ローカル慣習の学習
  2. スケーリング:単一メソッドなら直接的な読み書き・検証。大規模リクエストはプランニングフェーズを経て、サブシステム全体ならカバレッジ目標に達するまでイテレーションを繰り返す
  3. テスト作成:依存関係の少ないコードから順に書き始め、書きながらテストを実行。コンパイルエラーやアサーション誤りはその場で修正する。本番コードには手を触れない。実際のURL・ポート・タイミングに依存するテストは書かない(フレーキーテストの温床になるため)
  4. 品質検証:ここが最大の差別化点だ

ミューテーションテストで「テストの有効性」を自己検証

多くのテストツールが省略する最終ステップとして、このエージェントは**ミューテーションテスト**を軽量な形で実行する。意図的に小さなコード変更を加え、そのバグを既存テストが検出できるかを確認する手法だ。加えて、弱いアサーションのチェック、要求されたシナリオに対応するテストの存在確認、全スイートの最終実行も行う。

ベンチマーク:失敗率を63%削減

Microsoftは実際のリポジトリから抽出した152タスクを使い、同じ基盤モデルを用いた通常のGitHub Copilotと比較検証を行った。

タスク完了率
code-testing-generator(専用エージェント) 92.1%
通常のGitHub Copilot 78.9%

失敗率にして63%の削減となる。

差が最も広がったのは曖昧なプロンプトを与えた場合だ。専用エージェントが88.8%のタスクをパスしたのに対し、通常Copilotは66.3%にとどまった。特定のコードdiffに紐づいたプロンプトでは、専用エージェントがベンチマーク内の全15テストケースをパスし、通常Copilotはゼロだった。一方、プロンプトが詳細だった場合は両者の差はなかった。詳しいプロンプトがエージェントの調査フェーズを代替するため、という解釈は筋が通っている。

重要なのは、生成するテストの数を増やしたわけではない点だ。 専用エージェントが生成したテスト数は通常Copilotよりわずかに少なく、平均的なライン・ブランチカバレッジはほぼ同等で、処理速度は平均約5.5%速かった。改善の源泉は量ではなく、「初回で動くものを出す」信頼性にある。

元記事によれば、Claude Opus 4.8、GPT-5.5、Claude Haiku 4.5でも同様の比較を行い、いずれのモデルでもワークフローの効果が確認されたとのことだ。言語別では、Pythonタスクの完了率が2倍以上に向上し、Goタスクはベンチマークで全問パスを達成。一方、PowerShellのみ通常Copilotがわずかに上回る結果となった。

バグ混入テストを用いた独立系ベンチマーク「SWE Atlas」では、専用エージェントが36.4%、通常Copilotが27.3%と、差は小さいが正の方向に出ている。

Futurum GroupのVP・Mitch Ashleyは次のように指摘している。

「カバレッジ数値はずっとチームを欺いてきた。AI生成コードはその嘘をより大きくした。MicrosoftのエージェントはAI自身の出力に対してミューテーションテストを実行し、テストがバグを本当に検出できるかを確認する」

「63%という失敗削減は、モデルが賢くなったのではなく、手順によって生まれた数字だ。カバレッジ目標をAIポリシーに組み込む前に、コードが壊れたときにテストが失敗するという証拠をエンジニアリングリーダーは要求すべきだ」

対応言語と利用方法

エージェントは現在、GitHub Copilot CLIから利用可能で、Visual Studio CodeおよびVS Code Insidersでのサポートがプレビュー中だ。Visual Studioへの対応は今後予定されている。.NETに加え、Python、Go、Java、Rustなど12以上の言語をカバーしており、同じアプローチを他の種類のテストに拡張することも検討中とのことだ。

詳細はMicrosoft's New Testing Agent Tackles the Trust Gap in AI-Generated Codeを参照していただきたい。