.NET Tools

例外を思いのままに発生できる
「DevPartner Fault Simulator」レビュー

株式会社ピーデー 川俣 晶
2006/06/10
Page1 Page2 Page3 Page4

スタンドアロンのシミュレーション実行

 シミュレーションの実行にはVisual Studioは必須ではなく、単独で実行できるシミュレータも提供されており、スタート・メニューから、[Compuware DevPartner Fault Simulator]−[Fault Simulator]を選んで開くことができる。

 主要な機能で利用できないのは.NET Frameworkフォールトの指定ぐらいなものだろう。この機能は、どうしてもソース・コードとの絡みが出てくるので、Visual Studio上で設定を行う必要がある。とはいえ、Visual Studio上で行った設定をファイルに保存してスタンドアロン版Fault Simulatorに読み込ませれば、シミュレーションの実行は可能である。スタンドアロンで実行できないのはフォールト条件の設定のみである。

 さて、スタンドアロン版を使用する場合は、Visual Studio上でシミュレーションを実行する場合と違って、2つの追加手順を必要とする。それは、対象とする実行ファイルの指定と、シミュレーション実行開始後に、対象とする実行ファイルの手動による実行だ。

 以下、それを簡単な例で見てみよう。

 まず、スタンドアロン版Fault Simulatorを開き、対象とする実行ファイルとフォールト条件を設定する。すでにVisual Studio上でのシミュレーション指定ができる利用者であれば、これは特に難しい話ではない。

スタンドアロン版Fault Simulator
シミュレーション対象となる実行ファイルとフォールト条件を設定する。

 この状態で対象となるプログラムを実行しても例外は発生しない。

サンプル・プログラムをコマンド・プロンプトで実行した結果
シミュレーションを開始していないため実行は正常に終了する。

 シミュレーションを行うには、まずシミュレータの[シミュレーション開始]ボタンを押さねばならない。これにより画面表示は次のようになる。

シミュレーション開始直後のFault Simulatorの画面
この状態で、最初の画面で指定したプログラムを実行する。Fault Simulatorはそのプログラムに対して例外を発生させる。

 「開始されるのを待っています」という表示が出たら、実際に対象としたプログラムを実行する。すると、異常ケースのシミュレーションが行われるので、プログラムは例外を発生させる。

シミュレーション開始後のサンプル・プログラムの実行
Fault Simulatorの設定により例外が発生するため、プログラムの実行は中断され、Just-In-Timeデバッガ起動のプロンプトが表示される。

 この段階で、Fault Simulatorのウィンドウにも、発生した異常ケースに関する情報が記録されている。

例外発生直後のFault Simulatorの画面
発生した異常ケースに関する情報が記録される。

 プログラムが終了すると、以下のようにVisual Studio内で実行したときと同様に結果の詳細が表示される。

プログラム終了後のFault Simulatorの画面
プログラム実行結果の詳細情報が表示される。

 以上のように、[シミュレーション開始]ボタンを押すだけではシミュレーションは開始されず、対象となるプログラムを手動でスタートさせねばならないため、手間は増えている。しかし、これは使い勝手の悪さを意味しない。手動でプログラムをスタートさせるということは、特殊なプログラムを対象にシミュレーションを行うことも容易であることを意味する。

 例えば、Webサーバのプロセス内部で実行されるユーザー・プログラムといったような特殊な形態であっても、シミュレーションの対象に設定することが可能になるだろう。実際、指定可能なプログラムの対象としては、実行ファイルだけでなく、COM+コンポーネントや、Webアプリケーション、Webサービスもメニュー上に用意されている。標準的な実行ファイルだけを対象としないことは、きれいに割り切れない現場レベルでは好ましい特徴といえるだろう。

コマンドラインからのテスト

 シミュレーションは1回だけ行えばよいというものではない。システム開発の各段階で繰り返し実行し、妥当な結果が出ることを確認し続けるとよいだろう。もちろん、それを手動で行うとすればあまりに多くのコストが掛かりすぎる。そこで、これを自動化する必要性が出てくる。

 Fault Simulatorではコマンドラインからシミュレーションの実行を可能とすることで、このような要求に対応している。実際、添付ドキュメントの「DPFS Getting Started.pdf」には、WSH(Windows Script Host)で使用可能なスクリプト(JScript)のテンプレートが付属するので、これを修正しながら使っていけば問題ないだろう。

 ……といいたいところだが、残念ながらこのテンプレートは少々複雑で、通常の利用には向いていないため、最低限の機能だけに絞りVBSで書き直したサンプル・スクリプトを以下に示す。

Set wshell = Wscript.CreateObject("Wscript.Shell")
dpfs = chr(34) & "C:\Program Files\Compuware\DevPartner Fault Simulator\DPFS.exe" & chr(34)
wshell.Run dpfs & " /f:D:\work\sample.dpfsfault /a:D:\work\ConsoleApplication80.exe /r:D:\work\ResultFileName.dpfs /l:D:\work\ConsoleApplication80.exe", 1, true
Fault Simulator(dpfs.exe)を自動実行するためのスクリプト例(VBS)

 2行目はスタンドアロン版Fault Simulatorの本体である「dpfs.exe」へのフルパスを記述する。「D:\work\sample.dpfsfault」の部分はシミュレーションの設定ファイルへのフルパスに置き換える。また、「D:\work\ConsoleApplication80.exe」はシミュレーション対象の実行ファイル、「D:\work\ResultFileName.dpfs」は結果を記録するファイルのフルパスに置き換える。

 dpfs.exeのコマンドラインで指定している各オプションの意味は以下のとおりだ。

  • /f − フォールト・セット(設定ファイル)のファイルを指定
  • /a − シミュレーション対象のアプリケーションを指定
  • /r − 結果を出力するファイルを指定
  • /l − シミュレーション開始時に起動するアプリケーションを指定

 より詳しい情報は、dpfs.exeと同じフォルダにインストールされるヘルプ・ファイル「DPFS_CommandLineHelp.chm」を開くと見ることができる。

 ちなみに、このスクリプト・ファイルはスタンドアロン版Fault Simulatorから読み込むことで、対話的に実行した場合と同様の結果をFault Simulatorのウィンドウで見ることができる。

結論

 さて、ここまでの話は実はまだ半分でしかない。ツールの機能の概要を伝えたが、それらをどのように活用し、何を達成すべきかについての詳細の話題にはまだ踏み込んでいないのだ。

 だが、それはこの場で説明することではないかもしれない。なぜなら、このような品質向上ツールは、ツールがあるから使うのではなく、品質向上のための活動の中から必要性が認識され、求められるものだと思うからだ。このソフトの価値にまだピンときていない技術者も地道なシステム開発を続けていれば、いずれその価値が分かる日が来ると思う。

 そう、この手のツールはいずれにしても必要なのだ。必要性を感じるか否かは、それが必要とされる場面に出合ったかどうかの差でしかなく、必要性はそこにあるのだ。それ故に、まだ必要性が理解できないという読者は、このレビュー記事が存在したことと、日本コンピュウェアの「DevPartner Fault Simulator」という製品名を頭の片隅に入れておくとよいだろう。End of Article

 

 INDEX
  [.NET Tools]
  例外を思いのままに発生できる「DevPartner Fault Simulator」レビュー 
    1.異常ケース再現シミュレータ「DevPartner Fault Simulator」
    2.簡単なシミュレーション操作(環境フォールト)
    3..NET Frameworkフォールトを試す
  4.スタンドアロン実行とコマンドラインからのテスト
 
インデックス・ページヘ  「.NET Tools」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間