Visual Studio 2015 Update 1を使用して状況依存テストを並行して実行する

Visual Studio 2015 Update 1には、多くの機能強化と修正が含まれています。 この出版物では、ソフトウェア開発の全体的な生産性を大幅に向上させることができる2つの改善点に焦点を当てます。



テストを並行して実行する



Visual Studio 2015 Update 1のテストコアは、テストビルドを並行して実行できるため、テストのパフォーマンスが大幅に向上します。 デフォルトでは、このモードは無効になっているため、有効にする必要があります。



システムは、指定されたコアの数で、コンピューターのすべてのコアに至るまで、テストビルドを並行して実行します。 もちろん、単一のテストプロジェクトでは、これは利点をもたらしません。 このソリューションは、大規模なプロジェクトを対象としています。 使用するテストプラットフォームの種類に依存せず、MSTest、 NUnit 2NUnit 3およびXUnitで動作します。 このメカニズムは、基盤となるプラットフォームによる同時実行のサポートとは完全に独立しています。



この機能を有効にするには、Visual Studioで有効にするrunsettingsファイルを使用する必要があります。 正しいrunsettingsファイルを作成する簡単な方法は、 テンプレートの 1つを使用することです。 バージョン3.1以降のテンプレートを使用する必要があることに注意してください。 この拡張要素をインストールすると、3つのテンプレートが作成されます。 並列処理が必要な場合は、Parallelテンプレートを使用します。



次の手順に従ってください:

[ソリューション]を選択し、右クリックして[追加/新しいアイテム]を選択します。

画面に、次のようなリストが表示されます。





並列を選択します。 ソリューションの[ソリューションアイテム]タブにそのコピーが表示されます。





並列テスト実行を可能にするのに必要なことはこれだけです!

Visual Studioのテストメニューでアクティブにすることを忘れないでください。次の手順に従ってください。





(1)テスト/テスト設定メインメニューからテスト設定ファイルを選択します。

(2)次に、目的のRunsettingsファイルを選択します。この例では、Parallel2.runsettingsという名前を付けました。

(3)同じメニューで選択およびチェックされていることを確認します。



パラメータ:

runsettingsファイルの内容は次のとおりです。





ここでは、並列プロセスの数を決定するMaxCpuCountという1つの要素の値のみを変更できます。 値0は、プロセスの最大可能数が実行されることを示し、コンピューターコアの数によってのみ制限されます。 値1は、プロセスが順番に実行され、1つのプロセスのみがアクティブになることを示します(この値はデフォルトで設定されます)。 その他の値は、並行して実行されるプロセスの最大数(または使用するコンピューターのコアの数)を決定します。



コードカバレッジチェックを含めないのはなぜですか?

パラレルファイルの説明では、コードカバレッジチェックが有効になっていないことがわかります。 これは、設定のアクティベーション時に、コードカバレッジのチェックが実行されないことを意味します。 コードカバレッジには利点がないため、他の2つのテンプレートは同じ方法で設計されています。



コードカバレッジチェックを有効にすると、各テストの後にコードカバレッジ検証が実行され、総テスト時間が大幅に増加し、有用な結果が得られないため、パフォーマンスが低下します。



コードカバレッジアクティベーションを無効にしても、チームエクスプローラーから実行できません。 それどころか、あなたはそれをすることができます! 奇妙なことに、コードカバレッジのこのチェックの結果はテストエクスプローラーでは使用されません。 他の2つのテンプレートでは、コードカバレッジのバックグラウンドテストのみがアクティブ化され、その結果は[テスト結果]フォルダーにあるファイルに保存されます。





このファイルはVisual Studioでの利点はありませんが、 NDependなどの別のプログラムでコードカバレッジテストデータを使用する場合に役立ちます。



このセクションの利点の1つは、コードカバレッジチェックのバックグラウンド実行だけでなく、コードカバレッジチェックデータのフィルタリングも設定できることです。これは便利です。 これらのフィルターは、テストエクスプローラーで選択したテストのコードカバレッジの分析(「選択したテストのコードカバレッジの分析」)を実行するときにも機能します。



上記の記事には、コードカバレッジをチェックするための一連の設定が含まれています。 代わりに、これらの設定と他の設定の両方を含むCompleteRunSettingsテンプレートを使用します。 この記事で提供されるXMLは無関係です。





CompleteRunsettingsテンプレートでは、MaxCpuCountパラメーターの値は0です。 これは、並行して実行されるプロセスの数が可能な限り多くなることを意味します。



CoverageNoParallelテンプレートは以前のテンプレートとほとんど同じです。MaxCpuCountの値は1を除き、同じフィールドと値が含まれています。これは、テストが順次実行されることを意味します。



ユニットテストのより適切な構成に関する記事MSDN公開されていますが、この公開には上記のリンクほど詳細な情報は含まれていません。 ただし、この記事ではすべてのフィールドについて説明します。



並列実行のテストプロジェクト



テストを並行して実行するための簡単なプロジェクトを作成しました。 4つのテストプロジェクトで構成され、各プロジェクトには5秒以内に実行される1つのテストが含まれています。 ここからプロジェクトのソースコードをダウンロードして、これらのテストを自分で実行できます。





(1)設定なしでテストを実行します。 この場合、テストは順次実行され、実行時間は26秒です。 各テストは5秒と6秒の遅延で実行されます。

(2)CodeCoverageNoParallelを使用したテストの実行は、古いrunsettingsファイルを使用した場合と同じです。 テストに加えて、コードカバレッジチェックが実行されますが、同時実行性はありません。 合計時間が31秒に増加します。

(3)CodeCoverageやParallelを含む設定の完全なセットを使用する場合、テストの実行時間は18秒に短縮されます。

(4)コードカバレッジをチェックせずにParallelのみを使用する場合、テストの実行時間は12秒に短縮されます。

したがって、オプション(4)は、オプション(1)と比較して生産性が2倍以上になります。 これは良い結果です!

これらのテストが実行されたコンピューターには8つのコアが搭載されていましたが、他のプログラムではこれらすべてのコアをテストに使用することはできませんでした。 テストパフォーマンスの向上は、コンピューターコアの数の倍数ではありませんが、2倍の増加は、日常業務での優れた非常に具体的な成果です。



ビルドサーバーでの同時実行

説明した回路はビルドサーバーで動作しますか? はい:ビルド定義では、ビルドサーバーの実行時に使用するrunsettingfileを指定できます。 しかし、別の質問を自問してください。本当に必要ですか? 答えは、使用するビルドサーバーの数、その設定が何であるか、実行するチェックとコミットの数、つまり ビルドサーバーの負荷から。 通常、各ビルドコアは1つのビルドエージェントを実行します。 日中に多数のアセンブリ定義を使用し、常にコミットとチェックを実行する場合、アセンブリエージェントの負荷は大きくなり、テストの追加の並列実行は大きな影響を引き起こしません。 さらに、生産性の成長を妨げる追加コストが発生する場合があります。



一方、アセンブリに使用されるコンピューターの負荷が大きくなく、修正の数が少ない場合、テストを並行して実行してパフォーマンスを向上させてみませんか?

テストを並行して実行する方法は他にもありますが、そのうちの1つをこの記事で説明します



状況依存テスト



状況依存テストの実行は、Update 1の新機能の1つです。新しいテストエクスプローラーは、コードが変更を検出したアセンブリのみをテストします。



つまり、システムの特定のモジュールでコードを操作している場合、そのコードは複数のモジュールで使用されます。 アセンブリ内のモジュールの1つを変更すると、変更したコードのみが関係します。 これは、デフォルトで使用される通常のインクリメンタルアセンブリです。 目新しさは、変更されたコードを検証するテストのみがテスト時に実行されることです。 明らかに、これにより大規模システムのテストのパフォーマンスが大幅に向上します。



この機能を使用するには、「ビルド後にテストを実行」アイテムをアクティブにする必要があります。

これは、テストエクスプローラー(1)またはメインメニューのテスト/テスト設定/ビルド後にテストを実行(テスト/テスト設定/アセンブリ後にテストを実行)(2)で実行できます。







結果は次のスクリーンショットに示されています。







(1)「ビルド後にテストを実行する」を有効にします。

(2)コードを変更する

(3)[ビルド]を選択するか、適切なキーボードショートカットを使用します

(4)必要なテストのみが実行され、残りのテストはミュートされた緑色で表示されます。 前回実行され、緑色で表示されましたが、今回はチェックされているコードが変更されていないため、実行されません。



このプロセスにより、大規模プロジェクトをテストする際の生産性が大幅に向上し、次のビルドのテスト後のコード編集への移行が加速されます。 これは開発者にとって重要な利点であることに同意してください!



All Articles