CodeZine(コードジン)

特集ページ一覧

ドキュメントがないコードの保守を任されても安心
~テストコードを網羅的に自動生成するVisual Studio 2015 Enterpriseの「インテリテスト」機能

あらゆるソフトウェア開発者のサポートを目指す開発ツール「Visual Studio 2015」特集 第2回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2015/07/17 14:00
目次

Visual Studio 2015に搭載されたその他のデバッグ便利機能

 インテリテスト以外のデバッグ用の新機能についても解説しておきます。なお、ここで解説する2点はEnterprise版だけでなく、すべてのVisual Studio 2015で使用できる機能です。

デバッグ中のラムダ式の評価

 1つの改善点は、デバッグ中のラムダ式の評価が可能になったことです。Visual Studio 2013では、デバッグ中にラムダ式を評価することができなかったため、データベースアクセスにEntity Frameworkを使用したプロジェクトのデバッグで、取得しているデータについてラムダ式を使った処理を行いたいケースなどに対応することができませんでした。

 Visual Studio 2015では、デバッグ中にウォッチ式やイミディエイト ウィンドウにラムダ式を使うことができますので、デバッグ時の自由度が大きく上がったといえるでしょう。例えばリスト4のようなコードの評価を試してみましょう。

リスト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のようになります。

図1 ウォッチ式でLINQクエリ式を使用した例
図1 ウォッチ式でLINQクエリ式を使用した例

 同じく、イミディエイト ウィンドウで使用した例は図2のようになります。

図2 イミディエイト ウィンドウでLINQメソッド式を使用した例
図2 イミディエイト ウィンドウでLINQメソッド式を使用した例

 派手な機能ではありませんが、C#において重要な機能であるラムダ式を、デバッグ中にも自由に使えるようになったことは重要な改善点といえるでしょう。

ブレークポイント設定の簡便化

 もう一つの改善点は、ブレークポイント設定がダイアログを開くことなく、コードペイン上ですぐに行えるようになったことです。ブレークポイントを設定し、赤丸アイコン上でマウスオーバーすると、図3のように2つのアイコンが表示されます。

図3 ブレークポイント上でマウスオーバーするとアイコンが表示される
図3 ブレークポイント上でマウスオーバーするとアイコンが表示される

 左側の歯車アイコンはブレークポイントの設定、右側の丸が重なったアイコンは、ブレークポイントの有効/無効切り替え機能です。歯車アイコンをクリックすると、図4のようにブレークポイントの設定がコードペイン上に表示され、その場で設定を行えます。

図4 歯車アイコンをクリックするとその場でブレークポイント設定ができる
図4 歯車アイコンをクリックするとその場でブレークポイント設定ができる

 例えば、図5は、ブレーク条件を「ヒットカウントが10の倍数」とし、10回ごとにブレークするよう設定した例です。

図5 ブレーク条件を「ヒットカウントが10の倍数」とする
図5 ブレーク条件を「ヒットカウントが10の倍数」とする

 ブレークポイントの条件設定などは以前から搭載されている機能ですが、別途ダイアログを開くことなく、その場で設定できるというのは、なかなか便利な機能なのでご活用ください。

まとめ:インテリテストの効能を考える

 本記事では、Visual Studio 2015 Enterpriseの新機能であるインテリテストを使い、テストコードを自動生成する方法について解説しました。インテリテスト機能を使えば、カバレッジ100%(コードに問題があって100%にならない場合は最大限のカバレッジ)になるようなテストを自動的に生成することができます。

 生成されたテストはプログラムの外部仕様を表しますので、冒頭の対象読者に挙げた「ドキュメントもコメントもないプログラムの保守を突然任された」というケースでも、まずはそのプログラムに対してインテリテストをかけてみれば、「このコードは実際にどんな入力値に対してどんな出力を返すのか」という仕様については大まかに把握することができますので、プログラムを読み解くための手がかりとなるでしょう。また、先ほどのFizzBuzz問題を解くコードでも分かったとおり、外部仕様の漏れ(先ほどの例では入力値の範囲が1から100を外れていたケース)があった場合に、それに気づける可能性もあります。

 このようにインテリテストは有用なツールではありますが、もちろん万能の「銀の弾丸」というわけではありません。インテリテストが行っているのは、コードを解析してカバレッジが最大になるような入力値と出力値の組み合わせを出力しているだけで、プログラマの意図を読み取ってくれるわけではありません。インテリテストの結果は「今そこにあるコードの入出力の組み合わせ」であり、それが「このコードが示すべき振る舞いを適切に表しているかどうか」を判定するのはプログラマの責任です。

 それでも、煩雑な作業をある程度代行し、人間では見落としてしまいがちなケースでもカバレッジが最大になるようなテストをできるだけ出力してくれるインテリテストは、人間のミスを補い、コード品質を向上させるための頼もしいサポーターとなってくれるでしょう。ぜひ、Visual Studio 2015 Enterpriseのインテリテストのパワーを体感してみてください。

 なお、Visual Studio 2015はRC版のため利用期間が限定されているものの、実際のアプリケーション開発が可能なGo-Liveライセンスが付与されています。実アプリケーションの開発にもご活用ください。



  • LINEで送る
  • このエントリーをはてなブックマークに追加

あなたにオススメ

著者プロフィール

  • WINGSプロジェクト 土井 毅(ドイ ツヨシ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

バックナンバー

連載:あらゆるソフトウェア開発者のサポートを目指す開発ツール「Visual Studio 2015」特集
All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5