Skip to main content

Coco MCP Server Preview のご紹介

コメント
Coco MCP Server Preview のご紹介
8:15
このブログは「Introducing the Coco MCP Server Preview」の抄訳です。

著者: Otso Virtanen、James Vance

テストケース生成におけるコンテキストの課題

テスト生成は、AIコーディングエージェントの実用的な使用例として最も一般的なものの一つです。しかし、実行時のコードカバレッジデータがない場合、テストの不足箇所を判断するAIコーディングエージェントは、ソースファイルとテストファイルを静的に解析してカバー範囲を推測するしかありません。この方法は信頼性が低く、複数の層を経て間接的に呼び出される関数と、まったく到達しないコードとを区別できず、デッドコードも確実には検出できません。

Coco のようなコードカバレッジソリューションは、実際のテスト実行から得られる、計測ポイント単位の正確な実行データをコンテキストとしてエージェントに提供します。Coco を繰り返し呼び出すことで、探索空間内でカバレッジ目標に向けてテストコード生成ワークフローを導くフィードバックループを構築できます。

本ブログシリーズの第1回(Part 1)では、Coco CLI ツールを活用してコードカバレッジを最大化する単体テスト生成タスクにおいて、このワークフローを実装しました。この度、開発者、テスター、マネージャー、そしてCI/CDで活用できる、生成AIを活用したワークフロー向けの Coco MCP Server Preview をリリースします。

コードカバレッジをご存じない方へ

コードカバレッジは、テストによってソースコードのどの部分が実行されたかを測定するものです。測定指標としては、実行された関数、行、分岐のほか、文内の独立した条件を評価するといった、より複雑な指標も使用できます。

ここでは、Cocoのインストルメンテーションが施されたビルドを使用します。これは「カウンター」のような役割を果たし、実行された行のカウンターを記録し、それらの行をテストケースと照合します。アプリケーションの機能に変更はなく、手動テストや機能テストを含め、すべてのテストで同じインストルメンテーションが施されたビルドを使用できます。

 

Coco MCP Server のご紹介

Coco MCP server は、Coco コマンドラインインターフェース(CLI)ツールを構造化されたインターフェースでラップした Model Context Protocol(MCP)サーバーです。エージェントは cmreportcmcsexeimport を直接呼び出して出力を解析する代わりに、MCP server 内の専用ツールを呼び出すことで構造化データを取得でき、効率的に処理しつつコンテキストウィンドウを圧迫しません。

MCP はAIコーディングエージェントを外部ツールやデータソースに接続するための、事実上の業界標準です。VS Code の GitHub Copilot や Claude Code を含め、主要なAIコーディングエージェントはすべてこのプロトコルをサポートし、MCPホストとして動作します。そのため Coco MCP server は、ワークフローのプロンプトを変更することなく、すべてのMCPホストで利用できます。以下の図が構成を示しています。

Coco_MCP_Server

Coco MCP server には、以下の利点があります。

  1. トークン効率
    カバレッジサマリーから不要なフィールドを除去し、レポート全体をコンテキストウィンドウに読み込む代わりにカバレッジレポートのセクションをストリーミングすることで、必要なトークン数とコンテキストを削減します。また、Coco MCP server は段階的開示によってカバレッジデータを提供するため、AIコーディングエージェントは最初は最小限の有用な情報のみを受け取り、必要に応じてより的確で詳細な情報を取得できます。
  2. CLI ツールの利用が容易
    Coco CLI のフラグは扱いが煩雑になりがちですが、その複雑さはMCPツール呼び出しの内部に隠蔽されます。
  3. 内蔵ワークフロー
    Coco MCP Server には、コードカバレッジを利用する際にどのみち定義が必要となるワークフローがあらかじめ組み込まれています。

上記の利点は特に大規模プロジェクトで有効だと考えられます。小規模プロジェクトであれば、AIコードエージェントが Coco CLI ツールを直接利用する方法でも十分に機能するでしょう。

Coco MCP server が提供するツール

前述の通り、このツールセットは、エージェントがその時点の判断に必要な分だけデータを取得できるように構成されています。これにより、レスポンスが小さく保たれ、エージェントのコンテキストウィンドウも本来の作業に集中できます。

check_coverage_summary

cmreport を呼び出し、単一のブール値を返す軽量なサニティチェックです。false の場合、データベースに実行結果が存在しないため、以降のレポート呼び出しは空のデータを返します。その場合、エージェントは先に import_execution_report を呼び出す必要があります。

import_execution_report

cmcsexeimport によって、.csexe 実行レポートを .csmes データベースにマージします。この呼び出し後、以降のすべてのツールでカバレッジデータが利用可能になります。

get_coverage_overview

グローバルなカバレッジ率、ファイル単位の内訳、そして任意で関数単位の内訳を返します。これにより、エージェントは調査すべきファイルや関数を特定できます。エージェントはこの情報を使って優先順位を付けるため、すべてのファイルを詳細に確認する必要がありません。

出力例(デシジョンカバレッジ、parser サンプル)

File

Coverage

Decisions

Complexity

parser.cpp

47.6%

137/288

121

error.cpp

25.0%

9/36

19

variablelist.cpp

47.1%

8/17

11

functions.cpp

0.0%

0/17

7

parser.h

100%

9/9

7

error.h

100%

4/4

4

Global

45.0%

167/371

 

get_file_coverage_detail

カバレッジ状態(unexecuted、dead-code、executed)ごとにグループ化した、正確なファイル:行の位置情報を返します。エージェントはこれを使って、新しいテストで対象とすべき行を正確に特定でき、ソースファイル全体を読んで不足箇所を推測する必要がなくなります。

status_filter を使うと、エージェントが対処すべきステータス(通常は ["unexecuted"])のみにレスポンスを絞り込めます。大規模なコードベースでは、実行済みの行が大半を占め、実用的な情報が埋もれてしまうためです。

include_tests=True を指定すると、各計測ポイントを実行したテスト名の一覧もレスポンスに含まれます。これは、特定のコードを変更する前に既存のテストカバレッジを把握したい場合や、変更後に実行すべきテストを判断したい場合に有用です。

analyze_patch_coverage / analyze_patch_coverage_from_diff

このツールは、Coco のパッチ分析機能を提供します。統一 diff を渡すと、変更された行をカバーする既存テストの一覧と、その現在の成功/失敗状態を返します。エージェントはこれを使って、コード変更後にリスクのあるテストを判断でき、フルスイートの実行ではなく的を絞った再実行が可能になります。 パッチファイルのパスまたはインラインの diff 文字列のいずれかを受け付けるため、中間ファイルを作成せずに git diff の出力から直接呼び出せます。

ワークフロー例

以下は、Coco parser サンプルに対して Coco MCP server を利用するAIコーディングエージェントとのセッション例です。

プロンプト: 「parser サンプルをビルドし、現在のデシジョンカバレッジを分析して」

ステップ MCP ツール 結果
ソースと既存テストの確認 - 構造理解のため parser.cpp、unittests.cpp を読み込み
未実行行の特定 get_file_coverage_detail(status_filter: unexecuted、file: parser.cpp) 151件の未実行計測ポイントを特定
対象を絞ったテストの作成 - ビット演算、比較演算、算術演算、数学関数、三角関数の演算子に対する新規テストケースを追加
計測済みバイナリの再ビルド - 更新された unittests.exe.csexe を生成
更新結果のマージ import_execution_report 新しい実行データをマージ
改善の確認 get_coverage_overview(decision、global + source-tree) parser.cpp 47.6% → 88.9%;グローバル 45.0% → 80.1%

今後の予定

今後も Coco の機能を MCP server に追加・拡張していきます。次の候補としては、Change Risk Anti-Patterns(CRAP)メトリクスPython のサポート、agent skills の統合、そして QML のコードカバレッジが挙げられます。

詳しく知りたい方へ

Coco に関する詳細は、製品ページおよび製品ドキュメントをご覧ください。Qt 開発者の方は、QML の例およびQt の手順もご参照ください。

日本国内のお問い合わせは japan@qt.io 宛にご連絡ください。

コメント

ブログを購読

Qt 6.11 を今すぐ試そう!

最新リリースはこちらからダウンロードできます。 www.qt.io/download

 Qt 6.11 がリリースされました!アプリケーション開発者やデバイス開発者向けに、多くの新機能と改善が追加されています。 

採用情報 

現在、さまざまなポジションで採用を行っています。募集職種はこちら をご覧ください。また、Instagram をフォローして #QtPeople の働き方もぜひチェックしてください。