RSコラム

ただのエディタとして使うにはもったいない、Visual Studioの便利な機能をご紹介する記事の後編です。

前編中編もご覧ください。

この記事ではVisual Studio 2015 Enterpriseを使って執筆しています。バージョンにより機能や画面が異なることがありますので、ご了承ください。

コードカバレッジ

  2017 2015 2013 2012 2010
コードカバレッジ Enterprise Enterprise Premium以上 Premium以上 Premium以上

条件分岐が複雑な業務ロジックなどでは、テストによって全てのパターンが網羅されているかを確認することが困難になります。コードカバレッジの機能を使うと、「単体テスト」の方法で実施した単体テストのカバレッジ(テストによって対象のプログラムの何割が実行されたか)を簡単に確認することができます。

コードカバレッジの確認方法

「単体テスト」に記載した方法で単体テストを実行し、[テスト エクスプローラー]ウィンドウで[全てのテストのコードカバレッジの分析]をクリックすると分析が始まります。

visual-studio-tips2-fig12.png

コードカバレッジの結果は[コードカバレッジの結果]ウィンドウに表示されます。テスト対象のクラス/メソッド単位で、未カバーのブロック数/割合、カバー済みのブロック数/割合が確認できます。未カバーのブロック(テストできていないコード)が多い場合、テストプログラムを追加することを検討しましょう。

visual-studio-tips2-fig13.png

テスト対象のプログラムのどの部分がカバーできているのか/いないのか、をビジュアルに確認することができます。[コードカバレッジの結果]ウィンドウにある、[コードカバレッジの色分け表示]のアイコンvisual-studio-tips2-fig14.pngをクリックすると、テスト対象のソースコードの各行に色が付きます。青がカバーできているコードで、赤がカバーできていないコードです。

例えば以下では、Drawメソッドで50行目のIfブロック内を通るパターンがカバーできていません。

visual-studio-tips2-fig15.png

カバレッジ結果のマージ

アプリケーションの環境設定やOSのバージョンなど様々な条件のパターンを網羅する場合は、複数回テストを実行することでカバレッジが上がります。カバレッジ結果のマージの機能を使えば、複数回のテストによるカバレッジ結果を統合して確認することが可能です。

説明のため、引き続きDrawメソッドを例とします。前述した50行目のIfブロックを通るパターンがカバーできていないテスト結果では、未カバー率が33%となります。一方、テストメソッドのコードを書き換えて、Ifブロックを通すパターンでは、カバレッジは以下のようになり、Ifブロックを通らないパターンがカバーできていないものとなります。こちらの結果も未カバー率は33%です。

visual-studio-tips2-fig16.png

これら2つのカバレッジ結果はファイル保存されており、以下のようにリストボックスから選択することで、いつでも確認が可能です。

visual-studio-tips2-fig17.png

カバレッジ結果のマージ機能は、これらの結果を統合します。[結果のマージ]のアイコンvisual-studio-tips2-fig18.pngをクリックすると以下のダイアログが表示されるので、マージしたいカバレッジ結果にチェックを入れます。

visual-studio-tips2-fig19.png

[OK]をクリックすると、[コードカバレッジの結果]ウィンドウに「マージされた結果」としてカバレッジが表示されます。マージした結果、Drawメソッドの未カバー率が0%になっていることがわかります。

visual-studio-tips2-fig20.png

より詳細な情報は下記のMSDNのサイトを参照してください。
参考:「コード カバレッジを使用した、テストされるプロジェクトのコード割合の確認」

デバッグの例外設定

  2017 2015 2013 2012 2010
デバッグの例外設定

プログラムでTry-Catch構文を使った例外処理は必要ですが、例外をキャッチして処理が続行されるため、デバッグ時には例外発生箇所がわかりにくいということがあります。例外発生箇所特定のため、ブレークポイントをたくさんの場所において…、といったことをしていないでしょうか? Visual Studioで「デバッグの例外設定」を行うと、デバッグ中に指定した例外が発生したら自動で中断(ブレーク)させることができます。

例外設定の使用方法

メニューから[デバッグ]→[ウィンドウ]→[例外の設定]をクリックします。Visual Studioのバージョンによっては、デフォルトでは[例外の設定]がメニューに含まれていないことがあります。メニューへの追加方法を後述していますのでご参照ください。

visual-studio-tips2-fig21.png

以下のような例外設定ウィンドウが表示されます。

このウィンドウには様々な例外のタイプがカテゴライズされており、チェックされているものがデバッグ中にスローされた場合、自動的にブレークされます。既定の設定としてあらかじめいくつかチェックされています。

説明のため、以下のコードをデバッグすることを考えます。TryブロックにてGetDirectoryNameメソッドを実行していますが、ここで例外が発生しても、Catchブロック内にブレークポイントを設定しない限り処理はブレークされません。GetDirectoryNameでは、ArgumentExceptionPathTooLongExceptionが発生する可能性があります。

例外設定ウィンドウにて、ArgumentExceptionが発生したらデバッグをブレークするように設定します。以下のように、検索キーワードのテキストボックスを使うことで目的の例外をすばやく見つけることができます。

上図のようにしておくと、デバッグ中に例外が発生したら以下のように自動でブレークします。この機能を使うことで、ブレークポイントをたくさんの場所に設定するといったことに労力をかけずに、例外の発生箇所を確実に見つけることが可能となります。

[デバッグ]メニューに[例外]コマンドを追加する方法

[デバッグ]メニューに[例外]コマンドがない場合は、以下の方法で追加することができます(画面はVisual Studio 2010)。

メニューから[ツール]→[カスタマイズ...]をクリックし、表示されたウィンドウの[コマンド]タブを開きます。メニューバーの[デバッグ]→[ウィンドウ]内にコマンドを追加したい場合は、以下のように[メニューバー]のラジオをチェックし、リストボックスから[デバッグ | ウィンドウ]を選択します。

[コマンドの追加...]ボタンをクリックすると、コマンドの追加のウィンドウが表示されます。

[カテゴリ]から「デバッグ」をクリックし、[コマンド]から「例外...」を選択して[OK]をクリックします。

より詳細な情報は下記のMSDNのサイトを参照してください。
参考:「デバッガーでの例外の管理」

データヒントのピン設定

  2017 2015 2013 2012 2010
データヒントのピン設定

デバッグ中に変数の値をウォッチしたいとき、ステップを進めては変数名の上にマウスポインターを合わせて確認…ということを何度も繰返していませんか? ピン設定の機能を使えば、変数の内容(データヒント)を常時表示させておくことができ、そのような手間を省くことができます。

ピン設定の方法

デバッグで中断(ブレーク)しているときに、変数にマウスポインターをあわせると、データヒントが表示されます。

マウスポインターを離すとデータヒントは表示されなくなります。そこで、[ソースにピン設定]のアイコンをクリック、もしくは変数を右クリックし[ソースにピン設定]をクリックします。

以下のようにデータヒントが固定され、マウスポインターを離しても表示し続けることができます。

また複数のプロパティを持つオブジェクトの場合は、データヒントでその中身(プロパティ)を展開し、確認したいものをピン設定しておくことができます。

データヒントにはコメントを追加することができます。[展開してコメントを表示]のアイコンをクリックすると、コメント入力が可能です。

データヒントのピン設定は、ソースコードの特定行に設定するイメージです。以下の例では、変数valueのデータヒントを49行目に、変数_balanceのデータヒントを53行目に設定したものです。

データヒントのエクスポート/インポート

この設定内容はエクスポート(XMLファイルに保存)することができます。さらに、他の開発者のVisual Studioにインポートすることで、データヒントの設定を共有することができます。データヒントのエクスポート/インポートは、メニューから[デバッグ]→[データヒントのエクスポート...]または[データヒントのインポート...]をクリックします。保存される内容はデータヒントの表示位置や記述したコメントです。

より詳細な情報は下記のMSDNのサイトを参照してください。
参考:「コード エディターでのデータ ヒントのデータ値の表示」

デバッグ中の呼び出し履歴の確認

  2017 2015 2013 2012 2010
デバッグ中の呼び出し履歴の確認

不具合修正等のためのデバッグにおいて、中断(ブレーク)したコードを含むメソッドが、どのメソッドから呼び出されたか知りたいことはないでしょうか? また、呼び出しの階層が深い場合、どういった経路で呼び出されているかを知るために苦労していないでしょうか? そんなときに便利な「呼び出し履歴」の機能があります。

呼び出し履歴の確認方法

呼び出し履歴を確認する方法は、デバッグのブレーク中に、メニューから[デバッグ]→[ウィンドウ]→[呼び出し履歴]をクリックします。例えば、以下の箇所でブレークしているとします。

呼び出し履歴のウィンドウを開くと以下が表示されます。のアイコンが出ている先頭の行が現在ブレークしている箇所です。そのコードを含むメソッドを呼び出している箇所がその下の行です。さらにその呼び出し箇所が下の行、と遡っていくかたちで呼び出し履歴が複数行、表示されています。

呼び出し履歴の行をダブルクリックすると、該当箇所(次のメソッドを呼び出している箇所)のコードにジャンプします。

3行目をダブルクリックすると以下のようにコードにジャンプし、メソッド呼び出しが記述されている行がハイライトされます。呼び出し履歴ウィンドウ、ジャンプしたコードの双方にアイコンが表示されます。

これによって、現在ブレークしている箇所までにどのような呼び出しを経ているかを確認することができます。また、呼び出し履歴からコードジャンプすると、メソッド呼び出しの箇所から参照できるスコープの変数をデータヒントで確認することができます。つまり、メソッド呼び出しの際にどのような値で引数を渡しているかがわかります。単純にブレークした状態で呼び出し、もとのソースコードを開いただけでは確認ができないこともあるので、この呼び出し履歴の機能を活用してください。

また、デバッグ中は画面上部のメニュー欄に[スタックフレーム]が表示されます。ここを使えば、呼び出し履歴ウィンドウを開かなくても、呼び出し履歴の確認や呼び出し箇所へのコードジャンプが可能です。

より詳細な情報は下記のMSDNのサイトを参照してください。
参考:「方法 : [呼び出し履歴] ウィンドウを使用する」

コードスニペット

  2017 2015 2013 2012 2010
コードスニペット

プログラムをしていて似たようなコードを何度も書いたり、例えばループを回すロジックを書きたいけれど細かい構文をすぐに思い出せず調べたり、といったことはないですか? 「コードスニペット」を利用すれば、よく使われるコードを簡単な操作でソース中に挿入することができます。

コードスニペットの使用方法

例として、For Each ... Nextの構文を、コードスニペットを使って作成します。コードを挿入した居場所で右クリックし、[スニペットの挿入...]をクリックするか、Ctrl + K, Ctrl + Xを入力します。

以下のようなスニペットピッカーが表示されます。

コードスニペットはカテゴライズされています。[common code patterns]→[conditionals and loops]とドリルダウンし、一覧から[For Each...Next ステートメント]をクリックすると、以下のようにFor Each ... Nextの構文のコードが作成されます。コレクションの変数名は固定で決まっているため、その部分は修正します。

コードスニペットマネージャー

コードスニペットの一覧はコードスニペットマネージャーで確認することができます。メニューから、[ツール]→[コードスニペットマネージャー...]をクリックするか、Ctrl + K, Ctrl + Bを入力します。

コードスニペットには条件分岐やループなどよく使う構文だけでなく、文字列のハッシュコードを生成するコードや、SQL Serverへの接続文字列のひな形を生成するもの、ファイル入出力のコードなど、様々なものが登録されています。いろいろ探してみるとよいでしょう。

コードスニペットにはショートカットが割り当てられています。例えばFor Each ... Nextであれば、ショートカットは”ForEach”です。

ショートカットを使えば、スニペットピッカーを表示させる必要がなくなります。使い方は、ショートカットのコードを入力し、Tabキーを押下するだけです。よく使うスニペットについてショートカットを覚えておけば、より高速なコーディングが可能になります。

さらに、コードスニペットは独自で作成し、他の開発者へ展開することも可能です。ここでは詳細は割愛しますが、MSDNのサイトに説明があるので参考にしてください。

より詳細な情報は下記のMSDNのサイトを参照してください。 参考:「コードスニペット」 参考:「チュートリアル:コード スニペットを作成する」

ドキュメントコメントを使ったリファレンス作成

  2017 2015 2013 2012 2010
ドキュメントコメントを使ったリファレンス作成

Visual Studioでは、C#やVB.NETの場合はコンパイラの機能でソースコード中のドキュメントコメントをXMLファイルに出力することができます。ドキュメントコメントとは、XML形式でクラスやプロパティ、メソッドの説明を記述するものです。そしてそのXMLファイルからツールを使うことで、以下のようなプログラムのリファレンスを簡単に作成することができます。

ドキュメントコメント

クラスやプロパティ、メソッドの定義が始まる行の直前で、「’’’」を入力してから改行します(VB.NETの場合)。すると以下のようにドキュメントコメントのひな形が自動で表示されます。

記載したドキュメントコメントはコーディング時に参照できます。例えば以下のように、あるクラスのメソッド呼び出しのコードを記述する際、コメントで記載したメソッドの概要や引数の説明が表示されます。

上図にあるように、ドキュメントコメントには既定のXMLタグに対応する説明を記載します。よく使用するタグの一部を以下に示します。

タグ 説明 構文
summary クラス、プロパティ、メソッドなどの概要 <summary>description</summary>
param メソッドのパラメーターの名前や説明 <param name="name">description</param>
returns メソッドの戻り値の説明 <returns>description</returns>
exception 例外をスローする可能性があるメソッドなどについて、スローする例外の説明 <exception cref="member">description</exception>
example サンプルコードの説明 <example>description</example>
remarks summaryを補足する情報 <remarks>description</remarks>

後述するツールを使ったリファレンスの作成では、コンパイラでドキュメントコメントの内容をXMLファイルに出力する設定が必要です。プロジェクトのプロパティから[コンパイル]→[XMLドキュメントファイルを生成する]をチェックします。

リファレンスの作成方法

ツールを使うことでドキュメントコメントからプログラムのリファレンスを自動生成することができます。ここではSandcastleというツールを紹介します。SandcastleはMicrosoftから無償で提供されているツール(ドキュメントビルダー)です。このツールを使うと、ヘルプファイル形式(.chm)、Web形式(.html)、Word形式(.docx)など様々な形式でリファレンスを作成できます。

Sandcastleは以下からダウンロードできます。 https://www.microsoft.com/en-us/download/details.aspx?id=10526

Sandcastleの使用方法の詳細はここでは割愛します。Word形式でリファレンスを作成するための手順を簡単に説明します。

[Help file language]を「Japanese(Japan)」に、[Presentation style]を「Open XML Document」に設定します。

[Build these help file formats:]で「Open XML(docx)」にチェックします。[Framework version]では、追加したプロジェクトの.NET Frameworkと同じバージョンを選択します。次にメニュー上部のビルドターゲットを指定します。こちらも追加したプロジェクトと合わせておきます。

最後にビルドボタン をクリック、またはメニューから[Documentation]→[Build Project]をクリックするとドキュメントが作成されます。

いかがでしたでしょうか? 1つでも参考になれば幸いです。

TOP