Visual Studio 2015に搭載されたその他のデバッグ便利機能
インテリテスト以外のデバッグ用の新機能についても解説しておきます。なお、ここで解説する2点はEnterprise版だけでなく、すべてのVisual Studio 2015で使用できる機能です。
デバッグ中のラムダ式の評価
1つの改善点は、デバッグ中のラムダ式の評価が可能になったことです。Visual Studio 2013では、デバッグ中にラムダ式を評価することができなかったため、データベースアクセスにEntity Frameworkを使用したプロジェクトのデバッグで、取得しているデータについてラムダ式を使った処理を行いたいケースなどに対応することができませんでした。
Visual Studio 2015では、デバッグ中にウォッチ式やイミディエイト ウィンドウにラムダ式を使うことができますので、デバッグ時の自由度が大きく上がったといえるでしょう。例えばリスト4のようなコードの評価を試してみましょう。
//以下のコードがプログラム本体に書かれているとする var list = new string[] { "土井", "中村", "山田", "竹ノ内", "佐々木" }; ↓ //デバッグ中に以下のコードをイミディエイト ウィンドウやウォッチ式で使用できる //(1)文字列配列から、ラムダ式を使ったWhereメソッドやOrderByメソッドでデータを抽出する list.Where(x => x.Length==3).OrderBy(x => x) //(2)LINQのクエリ式も問題なく使用可能 from e in list where e.Length == 3 orderby e select e
文字列配列listに対して「名前が3文字のものを名前順に並び替えて取得する」という処理を、(1)ではLINQメソッド式で、(2)ではLINQクエリ式を使って記述しています。ウォッチ式で使用すると図1のようになります。
同じく、イミディエイト ウィンドウで使用した例は図2のようになります。
派手な機能ではありませんが、C#において重要な機能であるラムダ式を、デバッグ中にも自由に使えるようになったことは重要な改善点といえるでしょう。
ブレークポイント設定の簡便化
もう一つの改善点は、ブレークポイント設定がダイアログを開くことなく、コードペイン上ですぐに行えるようになったことです。ブレークポイントを設定し、赤丸アイコン上でマウスオーバーすると、図3のように2つのアイコンが表示されます。
左側の歯車アイコンはブレークポイントの設定、右側の丸が重なったアイコンは、ブレークポイントの有効/無効切り替え機能です。歯車アイコンをクリックすると、図4のようにブレークポイントの設定がコードペイン上に表示され、その場で設定を行えます。
例えば、図5は、ブレーク条件を「ヒットカウントが10の倍数」とし、10回ごとにブレークするよう設定した例です。
ブレークポイントの条件設定などは以前から搭載されている機能ですが、別途ダイアログを開くことなく、その場で設定できるというのは、なかなか便利な機能なのでご活用ください。
まとめ:インテリテストの効能を考える
本記事では、Visual Studio 2015 Enterpriseの新機能であるインテリテストを使い、テストコードを自動生成する方法について解説しました。インテリテスト機能を使えば、カバレッジ100%(コードに問題があって100%にならない場合は最大限のカバレッジ)になるようなテストを自動的に生成することができます。
生成されたテストはプログラムの外部仕様を表しますので、冒頭の対象読者に挙げた「ドキュメントもコメントもないプログラムの保守を突然任された」というケースでも、まずはそのプログラムに対してインテリテストをかけてみれば、「このコードは実際にどんな入力値に対してどんな出力を返すのか」という仕様については大まかに把握することができますので、プログラムを読み解くための手がかりとなるでしょう。また、先ほどのFizzBuzz問題を解くコードでも分かったとおり、外部仕様の漏れ(先ほどの例では入力値の範囲が1から100を外れていたケース)があった場合に、それに気づける可能性もあります。
このようにインテリテストは有用なツールではありますが、もちろん万能の「銀の弾丸」というわけではありません。インテリテストが行っているのは、コードを解析してカバレッジが最大になるような入力値と出力値の組み合わせを出力しているだけで、プログラマの意図を読み取ってくれるわけではありません。インテリテストの結果は「今そこにあるコードの入出力の組み合わせ」であり、それが「このコードが示すべき振る舞いを適切に表しているかどうか」を判定するのはプログラマの責任です。
それでも、煩雑な作業をある程度代行し、人間では見落としてしまいがちなケースでもカバレッジが最大になるようなテストをできるだけ出力してくれるインテリテストは、人間のミスを補い、コード品質を向上させるための頼もしいサポーターとなってくれるでしょう。ぜひ、Visual Studio 2015 Enterpriseのインテリテストのパワーを体感してみてください。
なお、Visual Studio 2015はRC版のため利用期間が限定されているものの、実際のアプリケーション開発が可能なGo-Liveライセンスが付与されています。実アプリケーションの開発にもご活用ください。