図7●PREfastの実行結果
警告が出た部分が黄色で表示される。
図8●Visual Studio 2005に標準で設定されているFxCopのルール
9つに分類された中から,適用するルールを任意に決められる。
図9●FxCopの実行結果
警告が出た部分が水色で表示される。
図10●(a)実行中に最も呼び出されているアプリケーション内の関数と,外部の関数が表示される。(b)すべての関数についての情報も見られる。(c).NET対応プログラムでは,ガベージ・コレクション*の動作も調べられる。

 Visual Studio 2005 Team Developer Editionは,ソース・コードの静的分析ツールやカバレッジ,プロファイラの機能を備える。

 静的分析ツールとは,開発者が記述したコードに対して,そのコードを実行せずに調べることで,より実行性能が高くなる命令をアドバイスしたり,セキュリティ上問題のあるコーディングに対して警告を出したりするものだ。Team Developerに実装される分析ツールは,「PREfast」と「FxCop」の2つである。

 一方,カバレッジとは,ソース・コード上で実行した部分を調べるツールである。条件分岐の条件設定を間違えると想定したルーチンを通過しなくなるが,そのようなバグを発見するのに役立つ。正しくテスト・コードを実行していることの確認にも使える。

 そしてプロファイラとは,そのプログラムを実行したときに,どのメソッドがどこから何回呼び出され,実行にどれくらいの時間がかかったかを調べる機能で,実行性能上のボトルネックなどを見つけるツールである。

C/C++コードに対するバグを指摘するPREfast

 PREfastは,C/C++言語向けのツールで,バッファ・オーバーフロー*,初期化していないメモリーへのアクセス,nullポインタの逆参照*,メモリー・リーク,リソース・リークといったバグを指摘する。

 PREfastは,標準では無効になっている。PREfastを有効にするには,プロジェクトのプロパティ設定画面の[Configuration Properties]-[Code Analysis]-[General]にある,[Enable Code Analysis for C/C++]オプションを[Yes]にする。コマンド・ライン・オプションとしては,「/prefast」を指定することになる。

 PREfastが有効な状態でコンパイルすると,PREfastの警告が[Error List Options]画面に表示される。図7[拡大表示]は,サンプルとして作ったファイル表示ソフトに対してPREfastを実行した結果である。ここでは「バッファ・オーバーフローの恐れがあるコード」を指摘された。

.NETのデザイン規則に沿っていることを調べるFxCop

 一方のFxCopは.NETプログラム向けのツールで,コンパイル後の実行ファイル(マネージ・コード*)が対象である。.NETのデザイン・ルールに対する違反を指摘したり,より実行性能の出るコーディング方法をアドバイスしたりする。

 FxCopも標準では無効になっている。FxCopを有効にするには,プロジェクトのプロパティ設定画面の[Code Analysis]で,[Enable Code Analysis]チェック・ボックスをチェックする。標準で,ルールが9つのカテゴリに分類されている。この中から適用するルールを自由に選べる(図8[拡大表示])。独自のルールを追加することも可能だ。

 図9[拡大表示]は,サンプルとして作ったプログラムにFxCopを実行した結果である。「最低限の実行権限を設定すべきだが,設定されていない」といったセキュリティ上のアドバイスや,「文字列を""(空文字列)と比較するのに,==演算子の代わりに,NullOrEmptyメソッドを使え」といった実行性能に関するアドバイスを出す。

性能のボトルネックを調べるプロファイリング・ツール

 プロファイリング機能を使うには,[Tools]―[Performance Tools]―[Performance Wizard]メニューをクリックして起動するウィザードを使う。ウィザードで設定するのは,プロファイリングの対象プロジェクトと,その方法の2項目だけである。プロファイリング方法は,アプリケーション全体の実行速度を調べる[Sampling](デフォルト)と,特定のモジュールだけを調べる[Instrumentation]――の2種類から選択する。

 実際にプロファイラを動かすには,[Performance Tools]ツールバーにある[Launch]ボタンをクリックする。すると,アプリーケーションが起動するので,適当に操作する。アプリケーションを閉じると解析が始まり,結果が画面に表示される(図10[拡大表示])。

 プロファイリング機能の対象となるのは,EXE,DLL,ASP.NETアプリケーションである。C#やVisual Basicなどで開発した.NET対応アプリケーションと,C++で開発したWin32アプリケーションのどちらもプロファイリング可能である。

 なおプロファイラは,あくまでも測定ツールであり,デバッグ・ツールではない。実行性能上のボトルネックを見つけ出したり,それを基にコードを修正/改善したりするのは,あくまでも開発者の仕事である。