IntelliTest for .NET – 手間をかけずにカバレッジの高いテストを実施するには

 

本記事は、マイクロソフト本社の The Visual Studio Blog の記事を抄訳したものです。 【元記事】 IntelliTest for .NET - Test More with Less (effort)  2015/09/30 6:00 PM

 

単体テストにおいて、対象コードのロジックを網羅的に検証できるテスト スイートを作成するのは非常に手間がかかります。また、すべてを検証するとなるとコストが足りなくなる場合もあります。Visual Studio 2015 Enterprise Edition で提供される IntelliTest 機能 (英語) はこの両方の課題に対処し、わずかなコストで高いコードカバレッジ (網羅率) を達成します。

.NET コードで IntelliTest を実行すると、CLR でテスト対象のコードが動的に分析され、テスト ケースが生成されます。ホワイト ボックステストのように、コード内の各ステートメントに対して、そこに到達する入力値が生成され、各条件分岐 (if ステートメント、アサート ステートメント、例外をスローする可能性のあるすべての処理) に対するケース分析が実行されます。IntelliTest の目的は、コードのすべての分岐を網羅するテスト スイートを生成することです。そのため、カバレッジを高める入力値を生成するたびに、C# と MSTest、xUnit.net、NUnit のいずれかをテスト フレームワークとして使用して、その具体的な値をテスト ケースとして出力します。その結果、開発者がゼロからテストを作成しなくても、カバレッジの高いコンパクトなテストスイートが生成されます。

clip_image002

メモ: IntelliTest は Pex プロジェクト (英語) を基盤とし、何度も更新が実施されてきました。当初は Visual Studio の拡張機能として提供されており、Visual Studio 2015 RC 以前は Smart Unit Tests と呼ばれていました。しかし、基盤 API と名前空間は変更されていないため、以前のリリースに関する専門知識や拡張機能を引き続き活用することができます。ほとんどの場合、これまでに作成した Pex の拡張機能は IntelliTest でも動作します。

 

単体テストの作成と保守が容易に

IntelliTest で解決できる問題は以下のとおりです。

  • 問題点 1: 複雑なコードに対して網羅的なテスト スイートを作成するには、コードを作成するのと同程度の労力が必要になる場合があります。そのため、テスト作成の省略によるテスト漏れが生じ、後の結合テスト工程に依存する結果に陥ることも少なくありません。すると、バグは開発サイクルの後半で検出されてから削除されるため (最悪の場合、検出されないこともあります)、バグ修正にかかるコストが大幅に増加します。
  • 問題点 2: テスト対象のコードが継続的に改良されている場合、テストの保守が困難になります。その結果、最初からテストが作成されず、テスト漏れや結合テスト時の問題が発生する場合があります (問題点 1)。

IntelliTest を使用することで、上記の問題を解決できます。実行中にコードを分析し、的確なテスト入力値を統合して高いカバレッジを達成するホワイト ボックス テストの手法を用いてコードの複雑性に対処します。テストの作成にかかる手間を削減するために、これらの入力値を使用してテストケースを自動生成し、対象コードの出力を記録します。テスト対象のコードが改良されるたびに、(IntelliTest の再実行時に) スイートが自動的に変更されるので、テスト本体の保守に関する問題が解決されます。また、バグを初期に検出できるように、IntelliTest は Visual Studio に統合され、ワンクリックで実行することができるので、通常の開発ワークフローの最中に呼び出すことができます。

上記の問題は、新規コードだけでなく、既存のコードやレガシ コードでも同様に発生します。そのような場合、結合テストと手動で作成した (ほとんどが正常系の) 単体テストを組み合わせるだけでは不十分です。そこで、IntelliTest を使用して既存のテストを補完することができます。

  • 既存/レガシ コードの改良: IntelliTest を使用して、リファクタリングを開始する前に網羅的なテストを生成します。
  • 既存/新規コードの確認: IntelliTest を使用して、さまざまなデータ値に対するコードの入力/出力動作を把握することで、単体テストをスムーズに実施できます。

 

関連資料

この記事で説明しきれなかった IntelliTest の詳細に関する資料を以下にご紹介します。

引き続き、皆様からのフィードバックをお待ちしています。この記事または上記でリンクをご紹介した記事のコメント欄か、Visual Studio の [Send a Smile] 機能UserVoice (英語)Twitter からフィードバックをお寄せください。ご不明な点については、MSDN のフォーラムまたは Stack Overflow に「IntelliTest」タグを付けてご投稿ください。

 

clip_image004

Pratap Lakshman (Visual Studio テスト ツール、シニア リード プログラム マネージャー) @pvlakshm

Pratap は、IntelliTest、Fakes、単体テスト、CodeCoverage の分野におけるテスト ツールの開発に携わっています。