Loading
|
@IT > Visual Studio 2008快適活用ガイド 第1回 |
日々のソフトウェア開発業務の中で、あなたはどのくらいの時間をデバッグ作業に費やしているだろうか。1日の作業時間の内訳を計測してみると、意外に「プログラム・コードを書いている時間と同じくらい、もしくはそれ以上に長い」という方も少なくないのではないだろうか。 もちろん、安直にデバッグに依存するのではなく、前段階のコード作成を慎重に行うことが基本である。しかし実際にコードを実行しながら、必要なところで実行を停止し(ブレークし)、変数の内容などを確認できるデバッグは、効率よく、かつ確実にコードの正当性を確認するために不可欠の作業だ。デバッグ作業は、開発作業中の随所で必要になる。なかには「デバッグに費やす時間は、開発作業全体の50%に及ぶ」と主張するプログラマもいるようだが、あながち、過ぎた誇張表現でもないだろう。 だとすれば、逆にデバッグ作業を効率化できれば、開発期間を劇的に短縮できるのではないか。開発作業で大きなウェイトを占めるデバッグ作業の効率化は、開発生産性を飛躍的に高める大きなポイントになる。 デバッグ作業の効率は、統合開発環境の入力生産性や使い勝手に大きく左右される。テキスト・エディタを使ったシンプルなプログラミングが好きなプログラマもいるだろうが、そうしたプログラマでさえ、ことデバッグ作業については、統合開発環境の支援を望むはずだ。かつては、コマンドラインで操作するデバッガを使ったり、コード中にAssert文(=警告メッセージの表示)などを挿入して、実行の途中経過を確認したりと、開発環境の支援をほとんど期待できない不幸な時代もあったが、これらは遠い昔のことだ。デバッグ作業を効率化するには、やはりVisual Studio 2008(以降、VS 2008)などの統合開発環境は欠かせない。 もちろん大半のデベロッパーは、日ごろからVS 2008などの統合開発環境を使ってデバッグを行っていると思う。だが、本当にVS 2008のデバッグ機能を使いこなして効率的なデバッグ作業が実現できているだろうか。 VS 2008の機能を駆使すれば、従来からさらにデバッグ作業を効率化できる可能性がある。今回は、役立つにもかかわらず、あまり存在を知られていないVS 2008のデバッグ機能を2つ紹介しよう。 ちなみに、一度でもVS 2008に触れたことがあれば、すでにお気付きだろうが、以前のVisual Studio 2005と比べ、開発環境自体のパフォーマンスが飛躍的に向上している。IDEの起動スピードだけとっても圧倒的に速くなっている。開発環境の性能は、それが毎日積み重なっていけば、最終的に開発生産性を高める結果につながるだろう。この「大幅な性能向上」という1点だけでも、VS 2008にバージョンアップする価値があると主張するプログラマも少なくないようだ。VS 2008では、以前のVS 2005と同じ.NET Framework 2.0ベースの開発も可能なので、Visual Studio 2005で開発しているプロジェクトであれば、シームレスにVS 2008に移行できるのも魅力だ。現在VS 2005を利用しているなら、少なくとも互換性や機能、性能面でVS 2008に乗り換えない積極的な理由はない。 それではVS 2008デバッグ機能の解説に入ろう(ちなみに以下の2つの機能はVisual Studio 2005から存在する機能である)。
テキストボックスとボタンしか貼り付けられていないようなデモ用のアプリケーションならともかく、ある程度の規模のシステムともなれば、「ある1つの機能(メソッド)をデバッグで検証したい」と思っても、「その機能に到達するまでに、何度もボタンを押したり、何らかのデータを入力したりしなければならない」ということはよくある。たった1つのメソッドを検証したいだけなのに、これでは手間がかかりすぎる。 こんなときには、「オブジェクト・テスト・ベンチ機能」が便利だ。この機能は特定のクラスの特定のメソッドを即座にデバッグするためのものだ。メソッドを書き終えた時点で(そのコードがコンパイルで問題が出ない状態であれば)、IDEの[クラス ビュー]から実行できる。 まずメニュー・バーから[表示]−[クラス ビュー]を実行して[クラス ビュー]ウィンドウを表示する。そして、次の画面のように、デバッグしたいクラスを右クリックして、表示されるコンテキスト・メニューから[インスタンスの作成]−[<クラスのコンストラクタ名>](この例では[SampleClass (int)])を選択する。
すると、次のような[インスタンスの作成]ダイアログが表示される。ここでは、クラスのインスタンスの名前(この例では「sampleClass1」)と、クラスのコンストラクタのパラメータの値(この例では「5」)を指定する。インスタンスの名前は自由に決めてよい。
[インスタンスの作成]ダイアログの[OK]ボタンをクリックして、クラスのインスタンスの作成が完了すると、[オブジェクト テスト ベンチ]ウィンドウが開き、クラス・インスタンスを示すボックスが表示される。そこで次の画面のように、そのボックスを右クリックしてコンテキスト・メニューを表示し、そこから[メソッドの呼び出し]−[<メソッド名>](この例では「Calculate (int)」)を選択する。
これにより、次のような[メソッドの呼び出し]ダイアログが表示される。ここでは、メソッドのパラメータの値(この例では「2」)を指定する。
[メソッドの呼び出し]ダイアログの[OK]ボタンをクリックして、メソッドの呼び出しが実行されると、次の[メソッド呼び出しの結果]ダイアログが表示される。
このダイアログを見ると分かるように、メソッドの実行結果は「2005」となる。このようにして、プログラム全体を実行することなく、特定のクラスの特定のメソッドのみをデバッグすることができる。 なお、[メソッド呼び出しの結果]ダイアログの[戻り値の保存]にチェックを入れて[OK]ボタンや[再試行]ボタンを押せば、次の画面のように、メソッドの戻り値の値を[オブジェクト テスト ベンチ]ウィンドウ内でインスタンスとして表示できる。このインスタンスは前述の[メソッドの呼び出し]ダイアログでのパラメータの値として使用したり、このインスタンスからさらにメソッドを呼び出したりできる。
以上で説明したオブジェクト・テスト・ベンチ機能では、もちろん、デバッグの実行を指定した行で停止させる「ブレークポイントの設定」や、変数の内容を参照できる[ウォッチ]/[ローカル]ウィンドウなど、すべてのデバッグ機能が利用可能である。ソフトウェアの規模が大きくなればなるほど、オブジェクト・テスト・ベンチ機能は役立つのではないだろうか。
先ほどは、最短経路で目的の機能(メソッド)をデバッグする方法を紹介したが、例えばそのメソッド内部をデバッグしていく際に、1000回ループするfor文のコードがあり、その999回目のときの値を調べたいときに、手動で999回ステップ実行したり、999回ブレークしたりするのはあまりに時間の無駄である。 このようなときには、ブレークポイントの条件指定が便利だ。この機能は、特定の条件のときになって初めてデバッグをブレーク(=停止)させるためのものだ。先ほどの例なら999回になって初めてデバッグをブレークさせることができる。この条件は、VS 2008のコード・エディタから指定する。 まずコード・エディタの左端にある余白部分をクリックして目的の行でブレークポイントを設定する。ブレークポイントが設定された行では赤丸 が表示される。その赤丸 を次の画面のように右クリックして、表示されるコンテキスト・メニューから[条件]を選択する。
すると、次のような[ブレークポイントの条件]ダイアログが表示される。ここでは、ブレークする条件(この例では「i==999」)を指定し、さらにその条件が真になったときにデバッグをブレークさせるための[true の場合]オプションを選択する。 ちなみに、条件に指定できる「==」は左右の値が等価であるかをチェックする演算子で、ほかにも「>」「<」「>=」「<=」などの演算子が利用できる。複数の条件を指定したいときには、「|」演算子で条件を区切ればよい。
[ブレークポイントの条件]ダイアログの[OK]ボタンをクリックしてダイアログを閉じると、コード・エディタ上の赤丸の中に白い「+」 が表示される。これでブレークポイントの条件指定は完了だ。 後は(先ほどのオブジェクト・テスト・ベンチ機能などを使って)実際にデバッグを実行してみる。すると次の画面のように、指定した条件でデバッグがブレークするだろう。
デバッグ・ブレークポイントの条件指定をうまく活用すれば、無駄なデバッグ作業を省けるので、時間の節約になる。
以上、デバッグ作業で非常に役立つにもかかわらず、あまり知られていないデバッグ機能を紹介した。紙面の都合で少ししか紹介できなかったが、このほかにもさまざまな効率性を高めるデバッグ機能がVS 2008には搭載されている。 例えばJavaScriptのデバッグ機能は、前バージョンの2005と比べ格段にパワーアップしており、VS 2008をJavaScriptコードの開発&デバッグ環境として使うだけでも、開発生産性に対する大きな効果が期待できる(参考:「特集:Visual Studio 2008&ASP.NET 3.5」)。 またVS 2008(無償版であるExpress Editionsは除く)では、.NET Framework内部のコードもデバッグ実行できるようになっている。これまで「.NET Framework内部の動作内容が分かれば、バグの修正の助けになるのに……」と考えたことのあるデベロッパーは少なくないだろうが、この機能がその要望に答えてくれるだろう。うまく利用すれば、バグの原因究明などの作業スピードが早まるのが期待できる(参考:「Visual Studio 2008で見る.NET Frameworkのソースコード」。※なお、パフォーマンスを改善するQFE:修正パッチが提供されているが、そのQFEの日本語版は、執筆時点ではまだ提供されていない)。 ぜひVS 2008のこれらの機能を上手に活用してデバッグ作業を可能な限り短縮し、ソフトウェア開発の効率性を高めてほしい。
提供:マイクロソフト株式会社 企画:アイティメディア 営業局 制作:デジタル・アドバンテージ 掲載内容有効期限:2008年5月31日 |
|