AIコードアシスタントでユニットテスト生成とカバレッジ最大化


コードカバレッジは、テストによってソースコードのどの部分が実行されたかを測定します。使用される指標としては、実行された関数、行数、分岐、あるいは文中の独立した条件の評価といったより複雑な指標があります。使用するコードカバレッジツールに応じて、テストはユニットテスト、機能テスト、さらには手動テストの組み合わせで構成される場合があります。高いコードカバレッジは、ソフトウェアが十分にテストされていることを示すため望ましいものです。ただし、高いコードカバレッジを達成するためのテストケースの作成には、労力とコストがかかる場合があります。

本記事では、AIコードアシスタントとコードカバレッジツールを組み合わせてユニットテストを生成し、コードカバレッジを向上させる方法を具体例と共に説明します。また、新たに生成されたユニットテストを実行し、コードカバレッジレポートを分析することで、カバレッジ指標が向上したことをAIコードアシスタントが検証する手段も提供します。

本記事の例では、Visual Studio Code上でMicrosoftのGitHub Copilotと、C/C++、C#、Tcl、QtのQML向けコードカバレッジソリューションであるCocoを組み合わせて使用します。この設定は汎用的なものであり、CursorやClaude Codeなどの他のコードカバレッジツールやAIコードアシスタントにも適応可能です。同様に、本例ではCppUnitテストを生成していますが、GoogleTestやCatch2などの他のユニットテストフレームワークでも同様に機能します。

セットアップ

既存のCocoサンプルを基に構築します。詳細はこちらです。これは式パーサーを使用した簡易計算機の例であり、基本の単体テストを含んでおります。このサンプルでは、基本的なコードカバレッジからパッチ分析などの高度なトピックまで、Cocoの様々な用途に関する詳細な手順が説明されております。Cocoとパーサーサンプルのソースコードはこちらからインストールいただき、詳細な情報は開発者向けドキュメントをご参照ください。

コードカバレッジが初めての方へ 簡単に申し上げますと、Cocoで計測されたビルドを使用します。これは「実行行数を記録する装置」のような役割を果たし、実行された行を追跡し、それらをテストケースと照合します。それ以外のアプリケーションの機能は変更されず、手動テストや機能テストを含む全てのテストで同じ計測済みビルドをご利用いただけます。以上です!

Copilot、Cocoの動作環境が整い、パーサーのサンプルとその付属ユニットテストをコンパイル・実行できる状態のparser_v4バージョンから開始します。

以下の画像は、ユニットテストの改善のために構築した環境を示しています。

Coco blog

コンポーネントとその説明は以下の通りです(使用方法についてはリポジトリをご参照ください):

  1. AIコードアシスタント向けのコンテキスト(上記画像の「Coco設定」を含む):
    1. インストルメント化されたCocoターゲットをビルドします。
    2. インストルメント化されたビルドのユニットテストを実行し、
    3. Cocoコードカバレッジ結果を処理します。
  2. ステップ#1にリンクし、ユニットテスト改善のためのタスク(「Cocoガイドライン」と「タスク」)を出力するプロンプト。
  3. ステップ#2に基づきユニットテストを生成する計画。選択したメトリクス(本例では行カバレッジ)でコードカバレッジが向上したことを検証する手順を含みます。

生成されたユニットテストと改善点は、プロセスの最終段階で必ずレビューを行う必要があります。

デモ:ユニットテストの生成

上記の設定が完了しましたので、早速お試しいただけます。以下は、Visual Studio上でMicrosoft GitHub Copilotをエージェントモード(Gemini 2.5 Pro搭載)で使用し、パーサーのサンプルを用いたセッションの記録です。

 

セッションより:

  • 当初、行カバレッジは約65%でした(録画の最後をご参照ください)。
  • 初期のカバレッジを確認した後、数学関数に焦点を当てるよう指示がありました。これらは全くテストされておらず、プロジェクト全体のコードカバレッジを大幅に高める可能性を秘めていました。
  • 数学関数に対するテストを生成・実行した結果、プロジェクトの行カバレッジは78%に向上しました。

プロンプト、Coco設定の構成ガイダンス、および生成されたユニットテストの改善内容は、こちらのリポジトリでご確認いただけます。

結論と今後の取り組み

本ブログ記事では、コードカバレッジとAIコードアシスタントを活用し、コードベースのどの領域に新たなユニットテストを追加すればカバレッジ向上が図れるかを分析しました。コードカバレッジの検証により、生成されたテストの有効性と選択したカバレッジ指標の改善が確認できます。

安全認証が必要な分野で徹底的なテストカバレッジを目指す場合、同様の設定が特に有効です。例えば自動車や航空宇宙分野では、MC/DC 指標を用いた100%カバレッジが目標となる場合があります。Cocoの組み込み機能と組み合わせて、遺伝的アルゴリズムによるテストデータの発見に活用する選択肢も考えられます。

また、コードカバレッジと他の指標を組み合わせて、新たなユニットテストが必要な領域を特定することも可能です。こちらで説明されている取り組みでは、当社のソリューションエンジニアの一人が、マッケイブの循環的複雑度指標とコードカバレッジを組み合わせた「CRAPスコア」を活用し、テスト強化の恩恵を受けるリスクの高い領域を特定しました。

モデルコンテキストプロトコル(MCP)は活用せず、Cocoツールの直接的なCLI呼び出しに依存しました。MCPサーバーは、カバレッジレポートの詳細な理解や大規模コードベース向けの長いレポート処理において、テキストベースのCSVレポートをモデルで直接解析する代わりに有効な解決策となり得ます。継続的インテグレーション(CI)環境での設定利用についても同様です。

さらに詳しい情報をお求めですか?

Cocoに関する詳細は、製品ページまたは製品ドキュメントをご覧ください。Qt開発者の方には、QMLサンプルQtの操作手順をご参照ください。

こちらの記事では、MicrosoftのGitHub Copilotを使用したユニットテスト生成の例を交えながら、その概要をわかりやすく解説しております。また、ユニットテスト生成におけるコードカバレッジツールの活用についても簡潔に触れております。

お問い合わせ

Blog Topics:

Comments