JP2007133590A - エラー処理テスト方法 - Google Patents
エラー処理テスト方法 Download PDFInfo
- Publication number
- JP2007133590A JP2007133590A JP2005325051A JP2005325051A JP2007133590A JP 2007133590 A JP2007133590 A JP 2007133590A JP 2005325051 A JP2005325051 A JP 2005325051A JP 2005325051 A JP2005325051 A JP 2005325051A JP 2007133590 A JP2007133590 A JP 2007133590A
- Authority
- JP
- Japan
- Prior art keywords
- program
- error
- processing routine
- processing
- calls
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
【課題】オペレーティング・システムのタイプに依存することなくプログラムで動的なエラーが発生した場合のエラー処理のテストを行うことができるプログラムのテスト方法を提供する。
【解決手段】テスト制御プログラム66がプログラム60からmalloc関数が呼び出される回数を上限とした呼出回数を、システム関数ラッパ68に指定してプログラム60を呼び出し、プログラム60がmalloc関数の代わりにシステム関数ラッパ68を呼び出し、システム関数ラッパ68が呼び出された回数をカウントし、カウントされたカウント値が指定された呼出回数以外の場合にmalloc関数を呼び出し、カウント値が指定された呼出回数の場合にエラーの発生を示す情報をプログラム60に送る。
【選択図】図2
【解決手段】テスト制御プログラム66がプログラム60からmalloc関数が呼び出される回数を上限とした呼出回数を、システム関数ラッパ68に指定してプログラム60を呼び出し、プログラム60がmalloc関数の代わりにシステム関数ラッパ68を呼び出し、システム関数ラッパ68が呼び出された回数をカウントし、カウントされたカウント値が指定された呼出回数以外の場合にmalloc関数を呼び出し、カウント値が指定された呼出回数の場合にエラーの発生を示す情報をプログラム60に送る。
【選択図】図2
Description
この発明は、エラー処理テスト方法に係り、特に、所定の処理が実行される処理ルーチンを1回以上呼び出すと共に、当該処理ルーチンでエラーが発生した場合のエラー処理の処理手順が記述され、かつコンピュータに予め定められた処理を実行させるプログラムの前記エラー処理のテストを行うエラー処理テスト方法に関する。
従来、コンピュータでは、プログラムの実行が指示されると、CPU(中央処理装置)により当該プログラムがメモリ上にロードされ、その後、オペレーティング・システムからプログラムの実行開始ルーチン(例えば、C言語ではMain関数)が呼びだされてプログラムの処理が開始される。
ところで、プログラムの処理の実行中に発生するエラーは、ロジックの誤りによる静的なエラーと、メモリや外部記憶装置などの領域不足あるいは通信経路遮断などによる動的なエラーとに大別できる。
一般に前者の静的なエラーは再現させることが容易であるため、デバッグにより修正することが容易である。
一方、後者の動的なエラーはエラー発生時の条件を再現することが困難であるため、デバッグが困難である場合が多く、例えば、プログラム実行時にメモリの記憶領域を動的に確保するようなプログラムでは、同時に実行されている他のプログラムによる記憶領域の使用状況によって、記憶領域の不足がいつ発生するかが一義的には決定できず、テスト自体を系統的に行なうことが困難であった。このため、動的なエラーが発生した場合は、プログラムが異常終了したり、異常動作を起こしたりする場合があった。
そこで、特許文献1には、オペレーティング・システムのシステム関数に、テスト対象とするプログラムから予め指定された回数だけ呼び出された場合にエラーを発生させるコードを追加しておき、エラーを発生させる回数を1から順に指定してプログラムの実行を繰り返すことにより、プログラムからシステム関数が呼び出される全ての部分のエラー処理をテストする方法が提案されている。
特開2000−181749公報
しかしながら、システム関数はオペレーティング・システムのタイプに依存して異なっており、例えば、Windows(登録商標)とUNIX(登録商標)ではシステム関数のコードの種類や、システム関数が記憶されている記憶領域も異なっている。このため、特許文献1の技術を用いた場合、オペレーティング・システムのタイプ毎にシステム関数にエラーを発生させるコードを追加するプログラムを個別に作成する必要がある、という問題点があった。
本発明は上記問題点を解決するためになされたものであり、オペレーティング・システムのタイプに依存することなくプログラムで動的なエラーが発生した場合のエラー処理のテストを行うことができるエラー処理テスト方法を提供することを目的とする。
上記目的を達成するため、請求項1に記載の発明は、所定の処理が実行される処理ルーチンを1回以上呼び出すと共に、当該処理ルーチンでエラーが発生した場合のエラー処理の処理手順が記述され、かつコンピュータに予め定められた処理を実行させるプログラムの前記エラー処理のテストを行うエラー処理テスト方法であって、前記エラー処理のテスト動作を制御するテスト制御プログラムにより前記プログラムから前記処理ルーチンが呼び出される回数を上限とした呼出回数を、前記処理ルーチンをラッピングした処理ルーチンラッパに指定して前記プログラムを呼び出す工程と、前記プログラムにより前記処理ルーチンに代えて前記処理ルーチンラッパを呼び出す工程と、前記処理ルーチンラッパにより前記プログラムから呼び出された回数をカウントし、カウント値が指定された前記呼出回数以外の場合に前記処理ルーチンを呼び出し、前記カウント値が指定された前記呼出回数と等しい場合にエラーの発生を示す情報を前記プログラムに送る工程と、を含んでいる。
請求項1記載の発明によれば、エラー処理のテスト動作を制御するテスト制御プログラムにより、プログラムから処理ルーチンが呼び出される回数を上限とした呼出回数が、処理ルーチンをラッピングした処理ルーチンラッパに指定されてプログラムが呼び出され、プログラムにより、処理ルーチンに代えて処理ルーチンラッパが呼び出される。
そして、本発明では、処理ルーチンラッパにより、プログラムから呼び出された回数がカウントされ、カウント値が指定された呼出回数以外の場合に処理ルーチンが呼び出され、カウント値が指定された呼出回数と等しい場合にエラーの発生を示す情報がプログラムに送られる。
このように、請求項1記載の発明によれば、テスト制御プログラムがプログラムから処理ルーチンが呼び出される回数を上限とした呼出回数を、処理ルーチンをラッピングした処理ルーチンラッパに指定してプログラムを呼び出し、プログラムが処理ルーチンに代えて処理ルーチンラッパを呼び出し、処理ルーチンラッパがプログラムから呼び出された回数をカウントし、カウント値が指定された呼出回数以外の場合に処理ルーチンを呼び出しているので、オペレーティングシステムのタイプに関わらず、メインプログラムから処理ルーチンラッパを介して処理ルーチンが呼び出される。また、処理ルーチンラッパは、カウント値が指定された呼出回数と等しい場合にエラーの発生を示す情報をプログラムに送っているので、オペレーティング・システムのタイプに依存することなくプログラムで動的なエラーが発生した場合のエラー処理のテストを行うことができる。
また、請求項1記載の発明は、請求項2記載の発明のように、前記処理ルーチンを、前記コンピュータに備えられた、ワークエリアとして機能するメモリの記憶領域を確保する記憶領域確保処理を行なうものとしてもよい。
また、請求項1記載の発明は、請求項3記載の発明のように、前記処理ルーチンを、前記コンピュータに備えられた、ワークエリアとして機能するメモリの記憶領域を確保する記憶領域確保処理と、当該記憶領域確保処理によって確保された記憶領域を開放する記憶領域開放処理とを行なうものとし、前記処理ルーチンラッパを、前記処理ルーチンにより確保された前記メモリの記憶領域のアドレスを示す情報を記憶するものとしてもよい。
さらに、請求項1記載の発明は、請求項4記載の発明のように、前記処理ルーチンを、前記コンピュータに備えられた、電子化ファイルを記憶するための記憶装置に電子化ファイルを書き込む書込処理、及び前記記憶装置に記憶された電子化ファイルを読み込む読込処理の少なくとも一方の処理を行うものとしてもよい。
以上説明したように、本発明によれば、テスト制御プログラムがプログラムから処理ルーチンが呼び出される回数を上限とした呼出回数を、処理ルーチンをラッピングした処理ルーチンラッパに指定してプログラムを呼び出し、プログラムが処理ルーチンに代えて処理ルーチンラッパを呼び出し、処理ルーチンラッパがプログラムから呼び出された回数をカウントし、カウント値が指定された呼出回数以外の場合に処理ルーチンを呼び出し、カウント値が指定された呼出回数と等しい場合にエラーの発生を示す情報をプログラムに送っているので、オペレーティング・システムのタイプに依存することなくプログラムで動的なエラーが発生した場合のエラー処理のテストを行うことができる、という優れた効果を有する。
以下、図面を参照して、本発明の実施の形態について詳細に説明する。なお、以下では、本発明をパーソナル・コンピュータ(以下「PC」という。)で実行されるプログラムのエラー処理のテストに適用した場合について説明する。
[第1の実施の形態]
図1には、本実施の形態に係るPC10の電気的な構成が示されている。
図1には、本実施の形態に係るPC10の電気的な構成が示されている。
PC10は、PC10全体の動作を司るCPU40と、PC10の電源がオンされた際に起動されるブートプログラム等が予め記憶されたROM42と、上記ブートプログラムにより起動されて装置全体の動作を制御するオペレーティング・システム(以下、「OS」という。)や各種プログラムが記憶されたハードディスク・ドライブ(以下、「HDD」という。)46と、各種プログラムの実行時におけるワークエリア等として用いられるRAM44と、マウスやキーボード等のユーザからの操作情報が入力される操作入力部48と、ディスプレイ12に対する各種情報の表示を制御するディスプレイドライバ50と、コネクタ52A及び不図示のネットワークを介して接続された不図示の外部装置との間で各種データの送受信を行うネットワークI/F(インタフェース)部52と、を備えている。
CPU40、ROM42、RAM44、HDD46、操作入力部48、ディスプレイドライバ50及びネットワークI/F部52は、システムバスBUSを介して相互に接続されている。従って、CPU40は、ROM42、RAM44、HDD46へのアクセス、マウスやキーボードに対するユーザの操作による指示内容の把握、ディスプレイドライバ50を介したディスプレイ12への各種情報の表示、及びネットワークI/F部52を制御してコネクタ52A及びネットワークを介して接続された外部装置との間の各種データの送受信、を各々行うことができる。
PC10は、各種のプログラム言語を用いて開発されたプログラムが実行可能とされており、OSには、例えば、API(Application Program Interface)等のシステム関数が予め用意されている。プログラムの開発者は、例えば、RAM44やHDD46の記憶領域の制御や、ディスプレイ12への描画の制御を行う場合に、プログラムからOSに用意されたシステム関数を呼び出して制御を依頼するようにプログラミングすることにより、各種の制御を行う制御ルーチンを個別に開発する必要がなくなるため、ソフトウェアの生産性が向上している。
ところで、システム関数は、プログラムから呼び出された場合に、同時に実行されている他のプログラムやPC10の動作状態等によって動的なエラーが発生する場合がある。
そこで、本実施の形態では、システム関数をラッピングするシステム関数ラッパ、及びエラー処理のテスト動作を制御するテスト制御プログラムを作成し、システム関数ラッパ及びテスト制御プログラムを用いてプログラムからシステム関数を呼び出す部分のエラー処理のテストを実施する。
図2には、C言語により作成されたプログラム、システム関数ラッパ、及びテスト制御プログラムの一例が模式的に示されている。
図2(A)に示されるように、本実施の形態に係るプログラム60は、RAM44の記憶領域を確保する場合にシステム関数62としてmalloc関数を呼び出している。なお、同図に示されるプログラム60では、malloc関数を呼び出すコードが1箇所のみ示されて他の部分のコードが省略されているが、省略した部分にもmalloc関数を呼び出すコードが含まれている。
また、本実施の形態では、図2(B)に示すように、テスト制御プログラム66と、malloc関数をラッピングしたシステム関数ラッパ68(ここでは、test_malloc関数)と、が予め作成されている。
テスト制御プログラム66は、プログラム60のソースファイル(ここでは、main.c)を取り込むと共に、プログラム60内のMain関数の呼び出しをtest_Main関数の呼び出しに置き換え、malloc関数の呼び出しをtest_malloc関数の呼び出しに置き換えるマクロ64が定義されている。
また、図2(B)に示されるシステム関数ラッパ68では、malloc関数を呼び出すコードのみ示されて他の部分のコードが省略されているが、省略した部分にプログラム60から呼び出された回数をカウントすると共に、後述するエラーチェックフラグFの判定を行なうコードが含まれている。
このテスト制御プログラム66のソースファイル(ここでは、testmain.c)をコンパイルすると、マクロ64によるプリプロセットが行われてプログラム60内の「Main」が「test_Main」に置き換えられ、「malloc」が「test_malloc」に置き換えられる。よって、プログラム60は、RAM44の記憶領域を確保する場合にtest_malloc関数を呼び出すことになる。なお、このように本実施の形態では、テスト制御プログラム66にマクロ64を定義して呼び出す関数名を置き換える場合について説明するが、プログラム60をコンパイルしたオブジェクトファイルを共有ライブラリ化(例えば、DLL(Dynamic Link Library))し、テスト制御プログラム66から当該共有ライブラリを動的にロードし、そのエントリポイントを取得して呼び出す方法をとることもできる。
図3には、本実施の形態に係る各プログラム及び各関数の関連状態を示すブロック図が示されている。
上述したように、テスト制御プログラム66には、上述したようにマクロ64が定義されているため、テスト制御プログラム66がtest_Main関数を呼び出すと、プログラム60の処理が実行される。
プログラム60は、マクロ64によってmalloc関数の呼び出しがtest_malloc関数の呼び出しに置換されており、RAM44の記憶領域を確保する場合にtest_malloc関数を呼び出す。
test_malloc関数には、プログラム60から呼び出された回数を管理するコードが記述された呼び出し回数管理部70が設けられている。test_malloc関数は、プログラム60から呼び出された回数が予め指定された呼出回数以外の場合にmalloc関数を呼び出し、プログラム60から呼び出された回数が予め指定された呼出回数と等しい場合にエラーの発生を示す情報がプログラム60に送られる。
次に、図4を参照して、第1の実施の形態に係るテスト制御プログラム66を実行する際のPC10の作用を説明する。なお、図4は、テスト制御プログラム66の処理の流れを示すフローチャートであり、当該テスト制御プログラム66はHDD46の所定領域に予め記憶されている。
同図のステップ100では、呼び出し回数カウンタ変数nの値をゼロに初期化すると共に、エラーチェックフラグFに偽(false)を設定する。
次のステップ102では、test_Main関数の呼び出しを行なう。これにより、プログラム60が実行される。プログラム60は、RAM44の記憶領域を確保する場合にシステム関数ラッパ68を呼び出しており、プログラム60からシステム関数ラッパ68が呼び出される毎に以下のシステム関数ラッパ68の処理が実行される。
ここで、図5を参照して、第1の実施の形態に係るシステム関数ラッパ68を実行する際のPC10の作用を説明する。なお、図5は、システム関数ラッパ68の処理の流れを示すフローチャートであり、当該システム関数ラッパ68はHDD46の所定領域に予め記憶されている。
同図のステップ150では、呼び出し回数カウンタ変数nの値をインクリメントする。次のステップ152では、エラーチェックフラグFに偽が設定されているか否かを判定し、肯定判定となった場合はステップ156へ移行し、否定判定となった場合はステップ154へ移行する。なお、上記テスト制御プログラム(図4参照。)のステップ102によって実行されたプログラム60からシステム関数ラッパ68が呼び出された場合は、エラーチェックフラグFに偽が設定されているため、本ステップ152が肯定判定となる。
ステップ154では、後述するテストループカウンタ変数iの値と呼び出し回数カウンタ変数nの値が等しいか否かを判定し、肯定判定となった場合はステップ158へ移行し、否定判定となった場合はステップ156へ移行する。
ステップ156では、malloc関数を呼び出してRAM44の記憶領域の確保を行い、malloc関数の処理が終了すると当該malloc関数の復帰情報を呼び出し元へ送って、本システム関数ラッパ68の処理は終了となる。
一方、ステップ158では、エラーが発生したことを示すエラー情報を復帰情報として呼び出し元へ送って、本システム関数ラッパ68の処理は終了となる。
プログラム60は、システム関数ラッパ68から復帰情報としてエラー情報が返された場合、エラー処理を実行する。
テスト制御プログラム(図4参照。)は、上記ステップ102によって実行されたプログラム60の処理が終了となるとステップ104へ移行し、後述するステップ110によって実行されたプログラム60の処理が終了となるとステップ112へ移行する。
ステップ104では、エラーチェックフラグFに真(True)を設定すると共に、呼び出し回数カウンタ変数nに保持されているプログラム60からtest_malloc関数が呼び出された回数を総呼び出し回数変数COUNTに記憶させる。また、テストループカウンタ変数iの値を1に初期化する。
次のステップ106では、テストループカウンタ変数iの値が総呼び出し回数変数COUNT以下であるか否かを判定し、肯定判定となった場合はステップ108へ移行し、否定判定となった場合は本テスト制御プログラム66の処理は終了となる。
次のステップ108では、呼び出し回数カウンタ変数nの値をゼロに初期化し、次のステップ110では、test_Main関数の呼び出しを行なう。これにより、プログラム60が実行される。プログラム60は、RAM44の記憶領域を確保する場合にシステム関数ラッパ68を呼び出しており、プログラム60からシステム関数ラッパ68が呼び出される毎に上述したシステム関数ラッパ68の処理(図5参照)が実行される。本ステップ110からプログラム60の呼び出しを行なった場合、エラーチェックフラグFに真が設定されているため、上述したシステム関数ラッパ処理では、ステップ152の判定が否定判定となり、テストループカウンタ変数iの値と呼び出し回数カウンタ変数nの値が等しい場合にエラー情報がプログラム60に送られてプログラム60でエラー処理が行われる。
次のステップ112では、テストループカウンタ変数iの値をインクリメントして再度ステップ106へ移行する。
このように、テスト制御プログラム66では、テストループカウンタ変数iにプログラム60からシステム関数62が呼び出される回数を上限とした呼出回数を指定してプログラム60を呼び出している。システム関数ラッパ68は、エラーチェックフラグFが真の場合、プログラム60から呼び出された回数とテストループカウンタ変数iの値が等しい場合にエラー情報をプログラム60に送る。よって、上述したステップ106〜ステップ112のループが繰り返されてテストループカウンタ変数iの値がインクリメントされることにより、プログラム60からシステム関数ラッパ68を呼び出す部分のエラー処理のテストを全て実施することができる。
このように、第1の実施の形態によれば、所定の処理が実行される処理ルーチン(ここでは、malloc関数)を1回以上呼び出すと共に、当該処理ルーチンでエラーが発生した場合のエラー処理の処理手順が記述され、かつコンピュータ(ここでは、PC10)に予め定められた処理を実行させるプログラム(ここでは、プログラム60)のエラー処理のテストを行うエラー処理テスト方法であって、エラー処理のテスト動作を制御するテスト制御プログラム(ここでは、テスト制御プログラム66)がプログラムから処理ルーチンが呼び出される回数を上限とした呼出回数を、処理ルーチンをラッピングした処理ルーチンラッパ(ここでは、システム関数ラッパ68)に指定してプログラムを呼び出し(ここでは、テスト制御プログラム66のステップ106の処理、及びステップ110の処理)、プログラムが処理ルーチンに代えて処理ルーチンラッパを呼び出し、処理ルーチンラッパがプログラムから呼び出された回数をカウントし(システム関数ラッパ68のステップ150の処理)、カウント値が指定された呼出回数以外の場合に処理ルーチンを呼び出し(システム関数ラッパ68のステップ156の処理)、カウント値が指定された呼出回数と等しい場合にエラーの発生を示す情報をプログラムに送っている(システム関数ラッパ68のステップ158の処理)ので、オペレーティング・システムのタイプに依存することなくプログラムで動的なエラーが発生した場合のエラー処理のテストを行うことができる。
また、第1の実施の形態よれば、処理ルーチンを、コンピュータに備えられた、ワークエリアとして機能するメモリ(ここでは、RAM44)の記憶領域を確保する記憶領域確保処理を行なうものとしているので、記憶領域の確保で動的なエラーが発生した場合のエラー処理をテストすることができる。
[第2の実施の形態]
第2の実施の形態では、プログラム60にエラーが発生した場合にメモリリークが発生していないかをテストする形態例について説明する。
第2の実施の形態では、プログラム60にエラーが発生した場合にメモリリークが発生していないかをテストする形態例について説明する。
第2の実施の形態に係るPC10の構成は、上記第1の実施の形態に係るPC10(図1)と同一であるので、ここでの詳細な説明は省略する。
本実施の形態では、RAM44の記憶領域を確保するシステム関数であるmalloc関数をラッピングしたシステム関数ラッパ68に加えて、malloc関数により確保された記憶領域を解放するシステム関数であるfree関数をラッピングしたシステム関数ラッパ69が作成されている。
また、本実施の形態に係るプログラム60には、Main関数の呼び出しをtest_Main関数の呼び出しに置き換え、malloc関数の呼び出しをtest_malloc関数の呼び出しに置き換え、free関数の呼び出しをtest_free関数の呼び出しに置き換えるマクロ64が定義されている。
図6には、本実施の形態に係る各プログラム及び各関数の関連状態を示すブロック図が示されている。
プログラム60は、マクロ64によってmalloc関数の呼び出しがtest_malloc関数(システム関数ラッパ68)の呼び出しに置換され、free関数の呼び出しがtest_free関数(システム関数ラッパ69)の呼び出しに置換されており、RAM44の記憶領域を確保する場合にtest_malloc関数を介してmalloc関数を呼び出し、確保した記憶領域を開放する場合にtest_free関数を介してfree関数を呼び出す。
また、test_malloc関数は、malloc関数を呼び出して確保した記憶領域のメモリアドレスをメモリアドレス管理部72に記憶させており、システム関数ラッパ69は、free関数を呼び出して開放したメモリアドレスをメモリアドレス管理部72から消去している。
次に、図7を参照して、第2の実施の形態に係るテスト制御プログラム66を実行する際のPC10の作用を説明する。なお、図7は、テスト制御プログラム66の処理の流れを示すフローチャートであり、当該テスト制御プログラム66はHDD46の所定領域に予め記憶されている。また、同図における図4と同一の処理については図4と同一符号を付して、その説明を省略する。
本実施の形態に係るプログラム60は、テスト制御プログラム66のステップ102においてtest_Main関数が呼び出されることにより実行され、RAM44の記憶領域を確保する場合にシステム関数ラッパ68を呼び出し、確保した記憶領域を開放する場合にシステム関数ラッパ69を呼び出す。
システム関数ラッパ68は、プログラム60より呼び出されると、malloc関数の呼び出しを行なって記憶領域を確保し、確保された記憶領域のメモリアドレスをメモリアドレス管理部72に記憶させる。
一方、システム関数ラッパ69は、プログラム60より呼び出されると、free関数を呼び出して指定された記憶領域の開放を行ない、メモリアドレス管理部72に記憶されている開放した記憶領域のメモリアドレスを消去する。
よって、メモリアドレス管理部72には、プログラム60の実行中に確保されている記憶領域のメモリアドレスが記憶されている。
テスト制御プログラム66のステップ111では、メモリアドレス管理部72を検索し、解放されずに残っている記憶領域があるか否かをチェックし、記憶領域があればメモリリークが発生している呼び出し回数として、テストループカウンタiの値をHDD56に記憶させる。
開発者は、本テスト制御プログラムの終了後、HDD56に記憶されているメモリリークが発生している呼び出し回数を読み出すことにより、エラーが発生した場合にメモリリークが発生しているか否かを知ることができる。
このように、第2の実施の形態によれば、処理ルーチンを、コンピュータに備えられた、ワークエリアとして機能するメモリの記憶領域を確保する記憶領域確保処理と、当該記憶領域確保処理によって確保された記憶領域を開放する記憶領域開放処理とを行なうものとし、処理ルーチンラッパを、処理ルーチンにより確保されたメモリの記憶領域のアドレスを示す情報を記憶するものとしているので、エラーが発生してプログラム60が終了した場合に開放されていない記憶領域があるか否かを判定することができる。
[第3の実施の形態]
第3の実施の形態では、HDD46にデータを電子化ファイルとして書き込む際、又はHDD46に記憶された電子化ファイルを読み込み際に動的なエラーが発生した場合をテストする形態例について説明する。
第3の実施の形態では、HDD46にデータを電子化ファイルとして書き込む際、又はHDD46に記憶された電子化ファイルを読み込み際に動的なエラーが発生した場合をテストする形態例について説明する。
第3の実施の形態に係るPC10の構成は、上記第1の実施の形態に係るPC10(図1)と同一であるので、ここでの詳細な説明は省略する。
プログラム60では、データを電子化ファイルとしてHDD46に書き込む場合があるが、HDD46の記憶領域の残容量不足で書き込みが失敗する場合ある。このHDD46の残容量は、時々刻々と変化しているため、残容量不足による書き込みエラーを意図的に発生させることが困難であるため、テスト自体を系統的に行なうことが困難であった。
また、プログラム60は、HDD46に記憶された電子化ファイルを読み込む場合があるが、電子化ファイルのデータが途中で途切れて全てのデータを正常に読み込めない場合がある。
そこで、本実施の形態では、HDD46に電子化ファイルを書き込む書込ルーチン及びHDD46から電子化ファイルを読み込む読込ルーチンをそれぞれラッピングしたシステム関数ラッパを作成する。なお、本実施の形態では、書込ルーチン及び読込ルーチンをそれぞれラッピングしたシステム関数ラッパを作成しているが、何れか一方ルーチンのみシステム関数ラッパを作成するものとしてもよい。
これにより、HDD46に電子化ファイルを書き込む場合、及びHDD46から電子化ファイルを読み込む場合の全てのケースでエラーをテストすることが可能である。
なお、呼び出し回数だけでなく、例えば、n回目の電子化ファイルの読み込みで読み込むデータ量を記憶しておき、データ量がXバイトであれば、そのn回の読み込み時に読み込まれるデータを0バイトからX−1バイトまで変化させてエラー処理をテストすることも可能である。このようにすることにより、電子化ファイルの読み込みエラーに対する安定度をより向上させることができる。
このように、第3の実施の形態によれば、処理ルーチンを、コンピュータに備えられた、電子化ファイルを記憶するための記憶装置(ここでは、HDD46)に電子化ファイルを書き込む書込処理を行うものか又は記憶装置に記憶された電子化ファイルを読み込む読込処理を行うものかの少なくとも一方としているので、記憶装置に電子化ファイルを書き込む場合や、記憶装置から電子化ファイルを読み込む場合に動的なエラーが発生した場合のエラー処理をテストすることができる。
なお、第1及び第2の実施の形態では、RAM44の記憶領域の確保に関する処理を行うシステム関数のエラー処理のテストを実施し、第3の実施の形態では、電子化ファイルの書込み及び読み込みに関する処理を行うシステム関数のエラー処理のテストを実施する場合について説明したが、本実施の形態はこれに限定されるものではなく、他のシステム関数のエラー処理のテストに適用できることは言うまでもない。
また、第1〜3の実施の形態では、システム関数をラッピングするシステム関数ラッパを作成した場合について説明したが、本発明はこれに限定されるものではなく、例えば、開発者により開発された処理ルーチンをラッピングするルーチンラッパを作成し、プログラム60から処理ルーチンを呼び出す部分のエラー処理のテストを実施するものとしてもよい。
さらに、本実施の形態で説明したPC10の構成(図1参照。)は、一例であり、本発明の主旨を逸脱しない範囲内において適宜変更可能であることは言うまでもない。
また、第1〜第3実施の形態で説明したテスト制御プログラム(図4、図7参照。)、システム関数ラッパ(図5参照。)も一例であり、本発明の主旨を逸脱しない範囲内において適宜変更可能であることは言うまでもない。
さらに、第1実施の形態で説明したプログラム、システム関数ラッパ、及びテスト制御プログラム(図2参照。)も一例であり、開発において用いられるコンピュータ言語や処理に応じて本発明の主旨を逸脱しない範囲内において適宜変更可能であることは言うまでもない。
10 PC
44 RAM
60 プログラム
62 システム関数
66 テスト制御プログラム
68 システム関数ラッパ
69 システム関数ラッパ
70 回数管理部
72 メモリアドレス管理部
44 RAM
60 プログラム
62 システム関数
66 テスト制御プログラム
68 システム関数ラッパ
69 システム関数ラッパ
70 回数管理部
72 メモリアドレス管理部
Claims (4)
- 所定の処理が実行される処理ルーチンを1回以上呼び出すと共に、当該処理ルーチンでエラーが発生した場合のエラー処理の処理手順が記述され、かつコンピュータに予め定められた処理を実行させるプログラムの前記エラー処理のテストを行うエラー処理テスト方法であって、
前記エラー処理のテスト動作を制御するテスト制御プログラムにより前記プログラムから前記処理ルーチンが呼び出される回数を上限とした呼出回数を、前記処理ルーチンをラッピングした処理ルーチンラッパに指定して前記プログラムを呼び出す工程と、
前記プログラムにより前記処理ルーチンに代えて前記処理ルーチンラッパを呼び出す工程と、
前記処理ルーチンラッパにより前記プログラムから呼び出された回数をカウントし、カウント値が指定された前記呼出回数以外の場合に前記処理ルーチンを呼び出し、前記カウント値が指定された前記呼出回数と等しい場合にエラーの発生を示す情報を前記プログラムに送る工程と、
を含むエラー処理テスト方法。 - 前記処理ルーチンを、前記コンピュータに備えられた、ワークエリアとして機能するメモリの記憶領域を確保する記憶領域確保処理を行なうものとした
請求項1記載のエラー処理テスト方法。 - 前記処理ルーチンを、前記コンピュータに備えられた、ワークエリアとして機能するメモリの記憶領域を確保する記憶領域確保処理と、当該記憶領域確保処理によって確保された記憶領域を開放する記憶領域開放処理とを行なうものとし、
前記処理ルーチンラッパを、前記処理ルーチンにより確保された前記メモリの記憶領域のアドレスを示す情報を記憶するものとする
請求項1記載のエラー処理テスト方法。 - 前記処理ルーチンを、前記コンピュータに備えられた、電子化ファイルを記憶するための記憶装置に電子化ファイルを書き込む書込処理、及び前記記憶装置に記憶された電子化ファイルを読み込む読込処理の少なくとも一方の処理を行うものとした
請求項1記載のエラー処理テスト方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005325051A JP2007133590A (ja) | 2005-11-09 | 2005-11-09 | エラー処理テスト方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005325051A JP2007133590A (ja) | 2005-11-09 | 2005-11-09 | エラー処理テスト方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007133590A true JP2007133590A (ja) | 2007-05-31 |
Family
ID=38155207
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005325051A Pending JP2007133590A (ja) | 2005-11-09 | 2005-11-09 | エラー処理テスト方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2007133590A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8769504B2 (en) | 2009-03-30 | 2014-07-01 | Samsung Electronics Co., Ltd. | Method and apparatus for dynamically instrumenting a program |
-
2005
- 2005-11-09 JP JP2005325051A patent/JP2007133590A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8769504B2 (en) | 2009-03-30 | 2014-07-01 | Samsung Electronics Co., Ltd. | Method and apparatus for dynamically instrumenting a program |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7774761B2 (en) | Use of memory watch points and a debugger to improve analysis of runtime memory access errors | |
US6634020B1 (en) | Uninitialized memory watch | |
US6539501B1 (en) | Method, system, and program for logging statements to monitor execution of a program | |
US7962832B2 (en) | Method for detecting memory error | |
US6378087B1 (en) | System and method for dynamically detecting unchecked error condition values in computer programs | |
US20090089766A1 (en) | Automatically Modifying a Native Code Module Accessed from Virtual Machine Bytecode to Determine Execution Information | |
US6698016B1 (en) | Method for injecting code into another process | |
US20120167057A1 (en) | Dynamic instrumentation of software code | |
US20100192026A1 (en) | Implementations of program runtime checks | |
US9183114B2 (en) | Error detection on the stack | |
CA2226224A1 (en) | Fast traps for computer software instrumentation | |
US20080276129A1 (en) | Software tracing | |
JP2004516549A (ja) | シングルステップ処理 | |
US20130125096A1 (en) | Systems and Methods for Dynamic Collection of Probe Call Sites | |
US7404107B2 (en) | Fault injection selection | |
US8117499B2 (en) | Generation of a stimuli based on a test template | |
US20080127118A1 (en) | Method and system for dynamic patching of software | |
US20110029953A1 (en) | System and Method for Scalable Handling of Debug Information | |
JP2009237610A (ja) | コード変換装置及びコード変換方法 | |
US6785883B1 (en) | Software system for tracing data | |
CN109901831B (zh) | 软件的多平台兼容运行方法及兼容运行装置 | |
US20020129336A1 (en) | Automatic symbol table selection in a multi-cell environment | |
CN116909819A (zh) | 一种处理器调试方法、装置、计算机设备及处理器 | |
JP2007133590A (ja) | エラー処理テスト方法 | |
US20060126799A1 (en) | Fault injection |