コード分析機能
コード分析にはマネージコードのアセンブリを解析して分析を行うFxCopと、C++のアンマネージコードのコード分析を行うPREFastの2種類があります。PREFastはコードを実行せず、実行をシミュレートすることでnullポインタの逆参照、初期化されていないメモリへのアクセスなどの潜在的なソースコードの問題点を発見します。PREFastで見つかった問題点は警告としてVisual Studioのエラー一覧ウィンドウに表示され、該当コードを参照することができます。FxCopはソースコードそのものではなく、アセンブリに対して分析を行います。VSTDでのFxCopによる分析のタイミングはビルドを行ったタイミングになり、規約違反が認められた場合に警告またはエラーをVisual Studioのエラー一覧ウィンドウに表示します(図6)。規約違反をエラーとして表示するように設定すれば、コンパイルエラーとして規約違反をはじくことができるので、どうしても守らせたい規約がある場合には大きな威力を発揮することができます。
規則の詳細を知りたい場合、エラー一覧の知りたい項目を選択して[F1]を押す、もしくは右クリックして[エラーヘルプの表示]を選択すれば日本語のヘルプを見れます。また規約違反を起こした箇所については、エラーや警告の一つを選択してダブルクリックすると指摘されたソースコードに移動するので、迅速に対応することができます。
FxCopでチェックできる規約についてはデザインやセキュリティ等、マイクロソフトのデザインガイドラインに則ったもので200種類近くが提供されており、セキュリティ規則やデザイン規則といった11種類の規則に分類されています(図7)。
どの規約を適用するか、違反時に警告かエラーのどちらを返すようにするかはプロジェクト単位でVSの画面上から設定できます。設定方法ですが、規約の選択はソリューションエクスプローラからプロジェクトファイルを選択し、コード分析のタグを開いて必要な規約を選択することでできます(図7)。また違反時の処理については[状態]をクリックすれば警告またはエラーを選択することができます。
FxCopには多くの規約が提供されていますが、あまり使用しないと思われる規約も含まれています。例えば「グローバリゼーション規約」は多国間で使用されるアプリケーションに必要な規約がまとめられており、すべてのアプリケーションには必要ないと考えられます。このように実プロジェクトにおいてすべての規約を適用する事はまずないと思われますので、必要な項目のみを設定してください。また開発の途中から使用すると混乱や作業時間の増加といった事態を招きかねないので、開発初期から活用していくことをお勧めします。
パフォーマンス分析機能
アプリケーションのパフォーマンスを分析する機能としてコードプロファイラがあります。コードプロファイラを使用することでアプリケーションパフォーマンスを調べ、実行に時間がかかっている処理を発見し、問題のコードへ容易にアクセスすることができます。パフォーマンスの測定方法は一定間隔で実行されているプログラムを抽出する「サンプリング」と、コードの中に測定用のコードを記載してパフォーマンスを測定する「インスツルメンテーション」の2通りが提供されています。サンプリングではコードに手を加えなくてもよい反面、実行されたメソッドを見落とす可能性があります。インスツルメンテーションでは意図通りの結果を得ることができますが、作業量が大幅に増えてしまうなど、それぞれに長所と短所があります。パフォーマンス分析機能の結果はパフォーマンスレポートとして表示されますが、レポートには概要ビュー、関数ビュー 、呼び出し元/呼び出し先ビュー 、呼び出しツリービュー 、割り当てビュー、オブジェクトの有効期間ビューの6つのビューが用意されています。
- 概要ビュー
一番呼び出された関数の呼び出し数、個別作業が一番多い関数の作業時間、時間が一番かかった関数の作業時間などを表示
- 関数ビュー
プロファイリング中に呼び出された関数の一覧表示
- 呼び出し元/呼び出し先ビュー
呼び出された関数と、その前後で呼び出されたすべての関数を表示
- 呼び出しツリービュー
特定の呼び出しトレースを掘り下げて表示
- 割り当てビュー
関数名、インスタンスの数、割り当てられたバイト数の合計、合計バイト数の割合などを表示
- オブジェクトの有効期間ビュー
インスタンスの合計数と、各型のインスタンスが存続した時間を示すジェネレーションバケットを表示
まずは概要ビューを見てあたりをつけ詳細を確認する、というのが一般的なビューの見方です。呼び出し元/呼び出し先ビューなど他のビューを表示する項目を追加するなどカスタマイズが可能なので、使い勝手のいいようにカスタマイズするのもいいかもしれません。
まとめ
VSTDに付属している機能の内、単体テスト機能、コード分析機能、パフォーマンス分析機能について見てきました。いずれの機能もソフトウェアの品質の向上に役立つ機能で、今まで煩雑だった作業がある程度自動化されています。ただどの機能もやみくもに使っていては作業量がいたずらに増えてしまうだけですので、事前に使用方法を検討する必要があります。使いこなすことができれば品質向上の強力なツールとして利用できると考えていますので、本稿が使い方を想像するきっかけになることを願います。
次回は、Visual Studio Team Edition for Software Testersについて、このツールに備わっている各種テスト機能をご紹介いたします。