自動テスト実行システム
【課題】自動テスト実行システムが実行した自動テスト結果から重複を省き、必要最小限のテスト結果のみを確認するようにし、より効率的にテストを実施するための方法を提供すること。
【解決手段】テスト対象のソースコードに処理の流れを追跡するための処理を埋め込むトレース機能埋込部と、トレース情報表と自動テスト実行システムが出力したテスト実行結果表を連結し、重複したテストケースを削除するテスト結果分析部を用いて、重複したテストケースを削除した後、テスト実行結果表を表示装置に表示する。
【解決手段】テスト対象のソースコードに処理の流れを追跡するための処理を埋め込むトレース機能埋込部と、トレース情報表と自動テスト実行システムが出力したテスト実行結果表を連結し、重複したテストケースを削除するテスト結果分析部を用いて、重複したテストケースを削除した後、テスト実行結果表を表示装置に表示する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、テスト対象のソースコードを解析し、プログラムに対して様々な値を投入して対象のプログラムをテストするシステムに関するものである。
【背景技術】
【0002】
ソフトウェアの品質を確保するためには、対象のソフトウェアを十分にテストすることが重要である。そのためのテスト手法のひとつとして、ソフトウェアを構成するモジュール単位でテストを行う単体テストがある。単体テストは、まずプログラムの開発者がテストデータを作成し、そのテストデータを対象のプログラムに投入してテストを行う、という手順が一般的である。
【0003】
しかし、従来のテスト方法には、開発者が想定したテストデータの範囲内でしかテストが行われないという問題がある。
例えば、図1に示すソースコードにおいて、divideメソッドは、与えられえた二つの引数を用いて除算を行うメソッドである(なお本明細書では、説明のための例としてJava(登録商標)言語によるソースコードを用いる)。このメソッドをテストする場合、ある開発者は以下のような引数の組み合わせをテストデータとして考案したとする。
(1) x = 4, y = 2
(2) x = 10, y = 5
この開発者は上記テストデータを用いてテストを行えば十分品質は保てると判断したのであろうが、これでは十分であるとは言えない。たとえば引数x, yの値が100以上であった場合に、3、4行目及び7、8行目が正しく実行されるかテストする必要がある。また、y = 0であった場合、多くの計算機では10行目で0による除算エラーが発生するため、この点についてもテストする必要がある。またdivideメソッドの引数がint型である以上、マイナスの値や、極端に大きな値が引数として与えられた場合の挙動についてもテストしておいたほうがよいかもしれない。このようにソフトウェアのテストにおいて、投入されるテストデータは開発者のスキルや考え方に大いに依存しており、未熟な開発者がテストを行った場合、テストケースに漏れが発生してしまう可能性がある。
【0004】
この問題を解決するために、想定されるあらゆるテストデータをプログラムに投入してテストを行う、自動テスト実行システムがある。自動テスト実行システムは、まずテスト対象のソースコードを解析し、メソッド引数の個数や型の情報を取得する。図1の例では「divideメソッドはint型の引数を2つもつ」という情報を得られる。次に取得した引数の情報をもとに、ありとあらゆるテストデータを生成する。引数がint型の場合は、int型の最小値、最大値、ゼロなど、あらゆるint型の値をテストデータとして生成する。次に生成したテストデータを次々とテスト対象プログラムに投入し、その返値などをテスト結果として記録する。開発者はこの記録を目視で確認し、プログラムが想定どおりに動作しているかどうかを判断する。この自動テスト実行システムによって、開発者が思いもつかなかったようなテストデータを用いたテストを実施できるようになる。これにより、テストケースの漏れを防ぐことができるため、より品質の高いソフトウェアを開発することが可能となる。
【0005】
特許文献1には、ソースコードの分岐行を検索し、各分岐行毎に分岐条件を抽出し、分岐条件の正否両条件を取り出し、プログラム入力変数のみで表した式に分解してテスト項目を抽出し出力するテスト項目作成装置が開示されている。
【特許文献1】特開平5−210537号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
しかしながら、従来の自動テスト実行システムには、開発者が目視でテスト結果を確認する必要があるため確認作業に多大な作業量を必要とする、という問題がある。さらに自動テスト実行システムは、ありとあらゆるテストデータを投入するため、同じような内容のテストを行っている場合がある。たとえば自動テスト実行システムが以下のようなテストデータを生成したとする。
(1) x = 4, y = 2
(2) x = 10, y = 5
この場合、どちらのテストデータを用いたとしても、divideメソッドの2行目、6行目、10行目及び11行目が実行される。処理の流れはいずれのテストデータを用いても同一であり、10行目で行っている処理が4÷2か、10÷5か、の違いしかない。これは実質的には重複したテストを行っていることになる。
【0007】
このような重複したテストデータがあった場合、(1)か(2)のいずれかのテストのみ実施しても問題ないはずである。しかし自動テスト実行システムは、重複したいずれのテストについても実施する。これにより本来実施する必要のなかったテストまで実施していることになり、その結果、テスト結果の確認作業の無駄な工数が増大し、また大量のテスト結果を目視で確認するため、人為的なミスも発生しやすくなるという問題がある。
【0008】
本発明の目的は、自動テスト実行システムが実行した自動テスト結果において重複を生じさせず、必要最小限のテスト結果のみを確認するようにし、より効率的にテストを実施するための方法を提供することにある。
【課題を解決するための手段】
【0009】
上記目的を達成するために本発明の自動テスト実行システムは、テスト対象ソースコードを読み込み、そのテスト対象ソースコード中に定義されているメソッドとメソッド引数の型を解析して空のテストデータ表を作成し、同時にメソッドに定義されている条件式を解析して境界値表を作成するソースコード解析部と、代表テストデータ表及び前記境界値表を読み込み、すべてのテストデータを組み合わせて前記空のテストデータ表に登録するテストデータ生成部と、前記テスト対象ソースコードに対し、処理の流れを示すトレース情報を取得するための機能を埋め込み該テスト対象ソースコードを修正することにより、修正済みテスト対象ソースコードを作成するトレース機能埋込部と、前記テストデータを登録したテストデータ表を読み込み、各テストデータを使用して前記修正済みテスト対象ソースコードのメソッドを実行し、それぞれの実行を各テストケースとして、その返値または発生した例外をテスト実行結果表に登録すると同時にそのトレース情報をトレース情報表に登録するテスト実行部と、前記トレース情報表と前記テスト実行結果表とを結合し、結合した表中におけるトレース情報の重複したテストケースを削除するテスト結果分析部と、重複したテストケースを削除された前記テスト実行結果表を、表示装置に表示するテスト結果表示部と、を備えたことを特徴とする。
【発明の効果】
【0010】
本発明の自動テスト実行システムによれば、次のような効果がある。
(1)重複したテストケースがテスト実行結果から除去されるため、開発者がテスト結果を確認する作業を最小限に抑えることができ、その分の工数が削減できる。
(2)開発者がテスト結果を目視で確認する作業を最小限に抑えることができるため、人 為的な確認作業ミスが発生しにくく、ソフトウェアの品質向上につながる。
よって、本発明により、効率的な自動テスト実行システムが実現された。
【発明を実施するための最良の形態】
【0011】
以下、実施例を示した図面を参照して本発明の実施の形態を説明する。
図2は、本発明の自動テスト実行システムの一実施例を示すシステム概要構成図である。本システムは、自動テスト実行の基本処理を行うための自動テスト実行部21と、自動テスト実行の効率化処理を行うための自動テスト最適化部22とから構成される。
【0012】
自動テスト実行部21では、まずテスト対象ソースコード23を読み取り、ソースコード解析部24に与える。ソースコード解析部24は、境界値表25を生成する。次にテストデータ生成部26が、境界値表25と、あらかじめ用意してある代表テストデータ表27を読み込み、テストデータ表28を生成する。自動テスト最適化部22では、テスト対象ソースコード23をトレース機能埋込部29に与える。トレース機能埋込部29は、修正済みテスト対象ソースコード210を生成する。そしてテスト実行部211はテストデータ表28と修正済みテスト対象ソースコード210を読み込み、テスト対象メソッドを実行し、テスト実行結果表212とトレース情報ファイル217を出力する。さらに出力したトレース情報ファイル217の内容をトレース情報表213に登録する。ここでテスト結果分析部214が、トレース情報表213を読み込み、分析した結果を元にテスト実行結果表212を書き換える。最後にテスト結果表示部215がテスト実行結果表212を読み込み、その内容を表示装置216に表示する。
【0013】
次に各構成要素の詳細を、手順を追って説明する。
ここでは、例として図1のソースコードを自動テストする場合について考える。このソースコードには除算を行うdivideメソッドが定義されている。このメソッドを自動テストするには、まずソースコードを、図2のソースコード解析部24に与える。
【0014】
図3はソースコード解析部の処理の流れを示したものである。
ステップ31:まず、ソースコード解析部は、境界値表とテストデータ表を初期化する。境界値表とはテスト対象のメソッド内の条件分岐処理の境界値を登録するための表である。またテストデータ表とは、自動テストを実行する際のテストデータとなる値を登録するための表である。ここでは、これらの各表を保存する計算機上のメモリ領域を計算機のメモリ上に確保している。
【0015】
ステップ32:次に、テスト対象のソースコードを読み込む。ソースコードには1つ以上のメソッドの定義が記述されている。
ステップ33:次に、ソースコード解析部はソースコードを一行ずつ読み込み、各メソッドの定義内容を1つずつ取得する。ここで「メソッド定義」とは、図1の符号11の範囲の文字列のことを示す。なお、メソッド定義は「<型> <メソッド名>(<メソッド引数のリスト>){ <メソッド本体> }」という構文で記述されているものとする。
ステップ34:次に、取得したメソッド定義を解析し、メソッド引数の定義を1つずつ取得する。なお、メソッド引数のリストは、「<型名> <一時変数名>, <型名> <一時変数名>, ..」という形式で列挙されており、「<型名> <一時変数名>」の各々がメソッド引数の定義である。
【0016】
ステップ35:この時点で、メソッド名、メソッド引数の型名、メソッド引数の一時変数名がわかっているので、これらの情報を境界値表、テストデータ表に登録する。テストデータ表の形式は、図5に示すとおりである。符号51、52、53の箇所にそれぞれ、メソッド名、メソッド引数の一時変数名、メソッド引数の型名、を埋め込むことで登録を行う。また、境界値表の形式は、図6に示すとおりであり、こちらも同様に図6の符号61、62、63の箇所にそれぞれ、メソッド名、メソッド引数の一時変数名、メソッド引数の型名、を埋め込むことで登録を行う。
【0017】
ステップ36:次にステップ34で取得したメソッド引数の定義について、このメソッド引数の一時変数がメソッド定義の中で参照されている箇所を探し、その箇所を1つずつ取得する。たとえば、図1のソースコードにおいて、メソッド引数x(符号12)は、2行目、4行目、10行目で参照されているので、これらの行をひとつずつ取得する。
【0018】
ステップ37:次にステップ36で取得した参照箇所行と、ステップ34で取得したメソッド引数の一時変数名を、境界表登録処理に与え、実行する。境界表登録処理の詳細は図4で説明する。
【0019】
以上の処理を繰り返し、すべてのテスト対象メソッドについて、境界値表とテストデータ表の各項目を埋める。この時点でテストデータ表は、図5のように、空のテストデータ表となっている。
【0020】
次に図4について説明する。境界値登録処理は、メソッド引数の一時変数名と、その変数が参照されている箇所の文字列を与えて実行する。図4は境界値登録処理の詳細について示したものである。
ステップ41:まずメソッド引数の参照箇所が比較式であるかどうかを判定する。比較式とはif文やswitch文などのことである。なお、厳密に境界値の解析を行う場合は、比較式だけではなくwhileなどの制御文についても判定する必要があるが、本実施例では説明を簡潔にするためif文のみに限定する。
ステップ42:参照箇所が比較式であった場合、比較している値が単純なint型の値であるかどうかを判定する。例えば、図1の2行目は「if(100 < x)」という条件文が記述されているが、ここで比較値は”100”であり、これは単純なint型の値である。なお、厳密に境界値の解析を行う場合は、比較値が単純なint値の場合だけでなく、たとえばdouble, float, String型であった場合や、比較値が変数の参照である場合についても考慮する必要がある。しかし本実施例では説明を簡潔にするためint値のみに限定する。
ステップ43、44、45:比較値がint値であった場合、その比較値、比較値から1を引いた値、比較値に1を加えた値、を境界値表に登録する。たとえば図1の2行目を解析する場合、比較値は100であるため、図6の符号64の箇所に100を、符号65の箇所に99を、符号66の箇所に101を、それぞれ登録する。
【0021】
図3及び図4の処理をすべてのメソッドに対して実行すると、最終的に図6に示すような境界値表が完成する。
【0022】
ここで、代表テストデータ表について説明する。代表テストデータ表とは、自動テスト実行システムが保持するテストデータの集合であり、よく使用されるテストデータを、代表テストデータとして保持しているものである。図8は代表テストデータ表の例を示したものである。代表テストデータ表は、型列81とテストデータ列82で構成されたデータの集合である。図8ではたとえば、int型のテストデータの代表値として、0, -1 , 1, Integer.MAX_VALUE(int型の最大値)、Integer.MIN_VALUE(int型の最小値)、など、int型の引数をもつメソッドをテストするときに、頻繁に使用されるテストデータが登録されている。int型のテストデータの他にも、double, float, String型、さらにユーザが独自に定義した型の代表テストデータも登録されている。代表テストデータ表自体は、自動テスト実行システムが提供するデータ表であり、このデータ表の作成方法等については周知であり、本発明の範囲外となるため、ここでは言及しない。
【0023】
次に図7について説明する。図7は、図2のテストデータ生成部26の詳細な処理について示したものである。テストデータ生成部26は、境界値表25と代表テストデータ表27を読み込み、テストデータ表28を生成する。
【0024】
ステップ71:まず、テストデータ生成部は、代表テストデータ表、境界値表を読み込む。
ステップ72:次に、境界値表からメソッド行をひとつずつ取得する。ここで「境界値のメソッド行」とは図6の符号67に示す範囲のデータのことである。符号67の範囲には、図1のソースコードのdivideメソッドについての境界値情報が格納されている。
ステップ73:次に、ステップ72で取得した行の境界値情報と、代表テストデータ表のテストデータをすべて組み合わせて、テストデータ表に書き込む。組み合わせ処理はメソッド引数ごとに行う。例えば、図6及び図8において、divideメソッドの引数xに対するテストデータの組み合わせを行う際は、まず、図6の境界値表から引数xの境界値(符号64、65、66)をすべて取得する。また、引数xはint型の値なので、図8の代表テストデータ表の型列からint型の行を取り出し、そのテストデータ列の値(符号83の範囲)を全て取得する。同様に、引数yについても、境界値表と代表テストデータ表からテストデータを全て取得する。そして、図9に示すように引数x、yに関するテストデータについて全ての組み合わせを求める。図9では144通りの組み合わせが求められる。これらのテストデータの組み合わせを、図5の空のテストデータ表に登録すると、図10に示すようなテストデータ表が完成する。図10はテストデータ表の一部を示したものである。
すべてのメソッドについて上記処理を繰り返すことにより、テストデータ表が完成する。
【0025】
図11は、図2のトレース機能埋込部29の詳細な処理の流れを示したものである。
ステップ111:トレース機能埋込部は、まずテスト対象ソースコードを一行ずつ読み込む。
ステップ112:次に読み込んだ行がトレース対象行かどうかを判定する。トレース対象行とは、例えばJava(登録商標)言語によって記述されたソースコードであれば、ifやwhileなどの制御文や、代入処理やメソッド呼び出しなどの式が記述されている行を示す。空白行やコメント行、中括弧だけの行、クラス、メソッドの定義行などはトレース対象行としない。例えば図1では、2、3、4、6、7、8、10、11行目がトレース対象行に該当する。
ステップ113:ステップ112で読み込んだ行がトレース対象行であった場合、その行番号を取得する。
ステップ114:読み込んだ行の行末に”trace(<行番号>);”というメソッド呼び出し処理を埋め込む。traceメソッドは、引数として与えられた数値を、図2のトレース情報ファイル217に書き込む機能をもつメソッドである。トレース情報ファイルは単純なテキストファイルである。traceメソッドは、図2の自動テスト最適化部22が提供している。
ステップ115:読み込んだすべての行に対して上記処理が完了したら、トレース情報出力処理が埋め込まれたソースコードを、修正済みテスト対象ソースコードとして保存する。
【0026】
この時点で、図1のソースコードは、図12に示すように修正され、修正済みテスト対象ソースコードとして保存されている。これにより、メソッドの各行が実行されるごとにtraceメソッドが呼び出されトレース情報ファイルに行番号が出力されるようになる。このトレース情報ファイルに書き込まれた行番号の羅列を見れば、このメソッドがどのような処理の流れで実行されたかが追跡可能となる。
【0027】
図13は、図2のテスト実行部211の処理の詳細を示したものである。
ステップ131:テスト実行部は修正済みテスト対象ソースコードをコンパイルし、実行可能な形式に変換する。
ステップ132:図10のテストデータ表を読み込み、メソッド行をひとつずつ取得する。ここで取得するのは図10の符号101に示すような範囲のデータである。
ステップ133:テスト実行結果表、トレース情報表を初期化する。図14、図15はそれぞれテスト実行結果表、トレース情報表の例であり、このようなデータを格納するためのメモリ領域を確保する。なおこれらの表はテスト対象メソッドの数だけ生成することになる。
ステップ134:テスト実行結果表に、ステップ132で取得したメソッド名とメソッド引数の情報を書き込む。例えば図14の符号141に示す範囲にメソッド名とメソッド引数の情報を書き込む。
ステップ135:ステップ132で読み込んだメソッド行からテストデータを一件ずつ取得する。符号102は、1件目のテストデータ(テストケース名:テスト1、x=0、y=0)を指している。ここで、1件のテストデータを使用した1つのメソッドの実行を、1つのテストケースとし、固有のテストケース名を付ける。
ステップ136:ステップ132で取得したテストデータのテストケース名を、テスト実行結果表、トレース情報表に登録する。例えば、符号103に示す列がテストケース名となるため、符号102のテストデータの場合、「テスト1」がテストケース名となる。この「テスト1」を、符号143と、符号152の箇所に書き込む。
【0028】
ステップ137:以上でテスト実行の準備が完了し、いよいよテスト対象のメソッドを実行する。メソッドの実行時には、ステップ135で読み込んだテストデータをメソッド引数として実行する。例えば、符号102に示すテストデータを使用する場合は、x=0、y=0をdivideメソッドに対して与えて実行する。
ステップ138:テスト対象メソッドの実行が完了したら、そのメソッドが返値を返したかどうかを判定する。
ステップ139:テスト対象メソッドが返値を返した場合、その返値の型を登録するための新たな行をテスト実行結果表に挿入する。図14ではテスト2(符号144)でint型の返値を返しているので、int型の返値を登録するための行(符号145)を新たに追加している。
ステップ1310:次にテスト対象メソッドの返値をテスト実行結果表に登録する。図14では、符号146の箇所にテスト2(符号144)の返値の値である0を登録している。
【0029】
ステップ1311:ステップ138の判定によって、テスト対象メソッドが返値を返さない場合、次にテスト対象メソッド実行時に例外がスローされたかどうかを判定する。
ステップ1312:例外が発生した場合、その型の例外を登録するための新たな行をテスト実行結果表に挿入する。図14ではテスト1(符号143)でArithmeticExceptionをスローしているので、ArithmeticExceptionが発生したことを登録するための行(符号147)を新たに追加している。
ステップ1313:次に例外が発生したことを実行結果表に○を付けて登録する。図14では、符号148の箇所にテスト1でArithmeticExceptionが発生したことを登録している。
ステップ1314:最後にメソッドの実行により出力されたトレース情報ファイルの内容を、トレース情報表に登録する。例えば図10のテスト1(符号102)のテストを実行すると、トレース情報ファイルには、「2 6 10」という数値の羅列が出力される。これらの数値をトレース情報表に、図15の符号153に示すように書き込む。
【0030】
上記処理をすべてのテスト対象メソッドに対して実行すると、テスト対象メソッドごとにテスト実行結果表とトレース情報表が生成される。
【0031】
図16は、図2のテスト結果分析部214の処理の詳細を示したものである。
ステップ161:まずテスト結果分析部214は、テスト実行結果表とトレース情報表とを結合する。いずれの表も列数は同一なので、テストケース名で単純に結合可能である。図17は、図14のテスト実行結果表と、図15のトレース情報表を結合したものである。図17に示すとおり、テスト実行結果表の部分(符号171)とトレース情報表の部分(符号172)が結合していることがわかる。
ステップ162:次に、ステップ161で結合した表から、テスト実行結果をひとつずつ取得する。
ステップ163:次に、ステップ162で取得したテスト実行結果以降のテスト実行結果を、ひとつずつ取得する。例えば、ステップ162において符号173のテスト実行結果を取得した場合は、ステップ163では、符号174、符号175...のテスト実行結果を1つずつ取得する。
【0032】
ステップ164:次に、ステップ162及び163で取得したテスト実行結果を比較し、トレース情報が同一かどうかを判定する。例えば、符号173と符号174のテスト実行結果を取得した場合は、それぞれの符号1720と符号1721の部分を比較する。この場合は、[2,6,10]と[2,6,10,11]であり、異なっていることがわかる。しかし、符号173と符号178のテスト実行結果を取得した場合、符号1720と符号1722を比較すると、いずれも[2,6,10]であり、同一であることがわかる。
【0033】
ステップ165:ステップ164で同一であると判定した場合、ステップ163で取得したテスト実行結果を、テスト実行結果表から削除する。先ほどの例では、符号173と符号178のトレース情報が同一であったため、符号178のテスト実行結果をテスト実行結果表から削除する。
【0034】
以上の処理を繰り返すと、重複したテスト実行結果が取り除かれたテスト実行結果表が完成する。図18は、テスト結果分析部によって図17から重複が取り除かれたものである。図18では、削除したテスト実行結果(テスト4〜7、10)を網掛けで表している。
【0035】
最後に、テスト結果表示部215によって、テスト実行結果表の内容が、表示装置216に表示される。例えば、テスト結果表示部によって図18のテスト実行結果表は表示装置で図19のように表示される。開発者は、この表示を見ることで、以下のテストケースと、その実行結果を確認することができる。
(テスト1)y=0の場合(例外が発生)
(テスト2)x,y ともに100以下の場合
(テスト3)xが100以下、yが100より大きい場合
(テスト8)xが100より大きい、yが100以下の場合
(テスト9)x,yともに100より大きい場合
【0036】
このように、本発明の自動テスト実行システムを用いることで、自動テスト実行部が実行した自動テスト結果に含まれる重複を、自動テスト最適化部が省き、必要最小限のテスト結果のみを開発者に提示できるため、開発者がテスト結果を確認する作業を最小限に抑えることができ、工数が削減や作業ミスの低減によるソフトウェアの品質向上が実現できる。
【図面の簡単な説明】
【0037】
【図1】本発明の実施例で用いるテスト対象ソースコードである。
【図2】本発明のシステム概要構成図である。
【図3】ソースコード解析部の処理の詳細である。
【図4】ソースコード解析部の境界値表登録処理の詳細である。
【図5】テストデータ表の例である。
【図6】境界値表の例である。
【図7】テストデータ生成部の処理の詳細である。
【図8】代表テストデータ表の例である。
【図9】テストデータの組み合わせの例である。
【図10】テストデータ表にテストデータを登録した例である。
【図11】トレース機能埋込部の処理の詳細である。
【図12】トレース機能を埋め込んだテスト対象ソースコードの例である。
【図13】テスト実行部の処理の詳細である。
【図14】テスト実行結果表の例である。
【図15】トレース情報表の例である。
【図16】テスト結果解析部の処理の詳細である。
【図17】テスト実行結果表(トレース情報表結合済み)である。
【図18】テスト実行結果表(重複削除済み)である。
【図19】テスト実行結果表示の例である。
【符号の説明】
【0038】
21:自動テスト実行部、22:自動テスト最適化部、23:テスト対象ソースコード23、24:ソースコード解析部、25:境界値表、26テストデータ生成部、27:代表テストデータ表、28:テストデータ表、29:トレース機能埋込部、210:修正済みテスト対象ソースコード、211テスト実行部、212:テスト実行結果表、213:トレース情報表、214:テスト結果分析部、215:テスト結果表示部、216:表示装置、217:トレース情報ファイル
【技術分野】
【0001】
本発明は、テスト対象のソースコードを解析し、プログラムに対して様々な値を投入して対象のプログラムをテストするシステムに関するものである。
【背景技術】
【0002】
ソフトウェアの品質を確保するためには、対象のソフトウェアを十分にテストすることが重要である。そのためのテスト手法のひとつとして、ソフトウェアを構成するモジュール単位でテストを行う単体テストがある。単体テストは、まずプログラムの開発者がテストデータを作成し、そのテストデータを対象のプログラムに投入してテストを行う、という手順が一般的である。
【0003】
しかし、従来のテスト方法には、開発者が想定したテストデータの範囲内でしかテストが行われないという問題がある。
例えば、図1に示すソースコードにおいて、divideメソッドは、与えられえた二つの引数を用いて除算を行うメソッドである(なお本明細書では、説明のための例としてJava(登録商標)言語によるソースコードを用いる)。このメソッドをテストする場合、ある開発者は以下のような引数の組み合わせをテストデータとして考案したとする。
(1) x = 4, y = 2
(2) x = 10, y = 5
この開発者は上記テストデータを用いてテストを行えば十分品質は保てると判断したのであろうが、これでは十分であるとは言えない。たとえば引数x, yの値が100以上であった場合に、3、4行目及び7、8行目が正しく実行されるかテストする必要がある。また、y = 0であった場合、多くの計算機では10行目で0による除算エラーが発生するため、この点についてもテストする必要がある。またdivideメソッドの引数がint型である以上、マイナスの値や、極端に大きな値が引数として与えられた場合の挙動についてもテストしておいたほうがよいかもしれない。このようにソフトウェアのテストにおいて、投入されるテストデータは開発者のスキルや考え方に大いに依存しており、未熟な開発者がテストを行った場合、テストケースに漏れが発生してしまう可能性がある。
【0004】
この問題を解決するために、想定されるあらゆるテストデータをプログラムに投入してテストを行う、自動テスト実行システムがある。自動テスト実行システムは、まずテスト対象のソースコードを解析し、メソッド引数の個数や型の情報を取得する。図1の例では「divideメソッドはint型の引数を2つもつ」という情報を得られる。次に取得した引数の情報をもとに、ありとあらゆるテストデータを生成する。引数がint型の場合は、int型の最小値、最大値、ゼロなど、あらゆるint型の値をテストデータとして生成する。次に生成したテストデータを次々とテスト対象プログラムに投入し、その返値などをテスト結果として記録する。開発者はこの記録を目視で確認し、プログラムが想定どおりに動作しているかどうかを判断する。この自動テスト実行システムによって、開発者が思いもつかなかったようなテストデータを用いたテストを実施できるようになる。これにより、テストケースの漏れを防ぐことができるため、より品質の高いソフトウェアを開発することが可能となる。
【0005】
特許文献1には、ソースコードの分岐行を検索し、各分岐行毎に分岐条件を抽出し、分岐条件の正否両条件を取り出し、プログラム入力変数のみで表した式に分解してテスト項目を抽出し出力するテスト項目作成装置が開示されている。
【特許文献1】特開平5−210537号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
しかしながら、従来の自動テスト実行システムには、開発者が目視でテスト結果を確認する必要があるため確認作業に多大な作業量を必要とする、という問題がある。さらに自動テスト実行システムは、ありとあらゆるテストデータを投入するため、同じような内容のテストを行っている場合がある。たとえば自動テスト実行システムが以下のようなテストデータを生成したとする。
(1) x = 4, y = 2
(2) x = 10, y = 5
この場合、どちらのテストデータを用いたとしても、divideメソッドの2行目、6行目、10行目及び11行目が実行される。処理の流れはいずれのテストデータを用いても同一であり、10行目で行っている処理が4÷2か、10÷5か、の違いしかない。これは実質的には重複したテストを行っていることになる。
【0007】
このような重複したテストデータがあった場合、(1)か(2)のいずれかのテストのみ実施しても問題ないはずである。しかし自動テスト実行システムは、重複したいずれのテストについても実施する。これにより本来実施する必要のなかったテストまで実施していることになり、その結果、テスト結果の確認作業の無駄な工数が増大し、また大量のテスト結果を目視で確認するため、人為的なミスも発生しやすくなるという問題がある。
【0008】
本発明の目的は、自動テスト実行システムが実行した自動テスト結果において重複を生じさせず、必要最小限のテスト結果のみを確認するようにし、より効率的にテストを実施するための方法を提供することにある。
【課題を解決するための手段】
【0009】
上記目的を達成するために本発明の自動テスト実行システムは、テスト対象ソースコードを読み込み、そのテスト対象ソースコード中に定義されているメソッドとメソッド引数の型を解析して空のテストデータ表を作成し、同時にメソッドに定義されている条件式を解析して境界値表を作成するソースコード解析部と、代表テストデータ表及び前記境界値表を読み込み、すべてのテストデータを組み合わせて前記空のテストデータ表に登録するテストデータ生成部と、前記テスト対象ソースコードに対し、処理の流れを示すトレース情報を取得するための機能を埋め込み該テスト対象ソースコードを修正することにより、修正済みテスト対象ソースコードを作成するトレース機能埋込部と、前記テストデータを登録したテストデータ表を読み込み、各テストデータを使用して前記修正済みテスト対象ソースコードのメソッドを実行し、それぞれの実行を各テストケースとして、その返値または発生した例外をテスト実行結果表に登録すると同時にそのトレース情報をトレース情報表に登録するテスト実行部と、前記トレース情報表と前記テスト実行結果表とを結合し、結合した表中におけるトレース情報の重複したテストケースを削除するテスト結果分析部と、重複したテストケースを削除された前記テスト実行結果表を、表示装置に表示するテスト結果表示部と、を備えたことを特徴とする。
【発明の効果】
【0010】
本発明の自動テスト実行システムによれば、次のような効果がある。
(1)重複したテストケースがテスト実行結果から除去されるため、開発者がテスト結果を確認する作業を最小限に抑えることができ、その分の工数が削減できる。
(2)開発者がテスト結果を目視で確認する作業を最小限に抑えることができるため、人 為的な確認作業ミスが発生しにくく、ソフトウェアの品質向上につながる。
よって、本発明により、効率的な自動テスト実行システムが実現された。
【発明を実施するための最良の形態】
【0011】
以下、実施例を示した図面を参照して本発明の実施の形態を説明する。
図2は、本発明の自動テスト実行システムの一実施例を示すシステム概要構成図である。本システムは、自動テスト実行の基本処理を行うための自動テスト実行部21と、自動テスト実行の効率化処理を行うための自動テスト最適化部22とから構成される。
【0012】
自動テスト実行部21では、まずテスト対象ソースコード23を読み取り、ソースコード解析部24に与える。ソースコード解析部24は、境界値表25を生成する。次にテストデータ生成部26が、境界値表25と、あらかじめ用意してある代表テストデータ表27を読み込み、テストデータ表28を生成する。自動テスト最適化部22では、テスト対象ソースコード23をトレース機能埋込部29に与える。トレース機能埋込部29は、修正済みテスト対象ソースコード210を生成する。そしてテスト実行部211はテストデータ表28と修正済みテスト対象ソースコード210を読み込み、テスト対象メソッドを実行し、テスト実行結果表212とトレース情報ファイル217を出力する。さらに出力したトレース情報ファイル217の内容をトレース情報表213に登録する。ここでテスト結果分析部214が、トレース情報表213を読み込み、分析した結果を元にテスト実行結果表212を書き換える。最後にテスト結果表示部215がテスト実行結果表212を読み込み、その内容を表示装置216に表示する。
【0013】
次に各構成要素の詳細を、手順を追って説明する。
ここでは、例として図1のソースコードを自動テストする場合について考える。このソースコードには除算を行うdivideメソッドが定義されている。このメソッドを自動テストするには、まずソースコードを、図2のソースコード解析部24に与える。
【0014】
図3はソースコード解析部の処理の流れを示したものである。
ステップ31:まず、ソースコード解析部は、境界値表とテストデータ表を初期化する。境界値表とはテスト対象のメソッド内の条件分岐処理の境界値を登録するための表である。またテストデータ表とは、自動テストを実行する際のテストデータとなる値を登録するための表である。ここでは、これらの各表を保存する計算機上のメモリ領域を計算機のメモリ上に確保している。
【0015】
ステップ32:次に、テスト対象のソースコードを読み込む。ソースコードには1つ以上のメソッドの定義が記述されている。
ステップ33:次に、ソースコード解析部はソースコードを一行ずつ読み込み、各メソッドの定義内容を1つずつ取得する。ここで「メソッド定義」とは、図1の符号11の範囲の文字列のことを示す。なお、メソッド定義は「<型> <メソッド名>(<メソッド引数のリスト>){ <メソッド本体> }」という構文で記述されているものとする。
ステップ34:次に、取得したメソッド定義を解析し、メソッド引数の定義を1つずつ取得する。なお、メソッド引数のリストは、「<型名> <一時変数名>, <型名> <一時変数名>, ..」という形式で列挙されており、「<型名> <一時変数名>」の各々がメソッド引数の定義である。
【0016】
ステップ35:この時点で、メソッド名、メソッド引数の型名、メソッド引数の一時変数名がわかっているので、これらの情報を境界値表、テストデータ表に登録する。テストデータ表の形式は、図5に示すとおりである。符号51、52、53の箇所にそれぞれ、メソッド名、メソッド引数の一時変数名、メソッド引数の型名、を埋め込むことで登録を行う。また、境界値表の形式は、図6に示すとおりであり、こちらも同様に図6の符号61、62、63の箇所にそれぞれ、メソッド名、メソッド引数の一時変数名、メソッド引数の型名、を埋め込むことで登録を行う。
【0017】
ステップ36:次にステップ34で取得したメソッド引数の定義について、このメソッド引数の一時変数がメソッド定義の中で参照されている箇所を探し、その箇所を1つずつ取得する。たとえば、図1のソースコードにおいて、メソッド引数x(符号12)は、2行目、4行目、10行目で参照されているので、これらの行をひとつずつ取得する。
【0018】
ステップ37:次にステップ36で取得した参照箇所行と、ステップ34で取得したメソッド引数の一時変数名を、境界表登録処理に与え、実行する。境界表登録処理の詳細は図4で説明する。
【0019】
以上の処理を繰り返し、すべてのテスト対象メソッドについて、境界値表とテストデータ表の各項目を埋める。この時点でテストデータ表は、図5のように、空のテストデータ表となっている。
【0020】
次に図4について説明する。境界値登録処理は、メソッド引数の一時変数名と、その変数が参照されている箇所の文字列を与えて実行する。図4は境界値登録処理の詳細について示したものである。
ステップ41:まずメソッド引数の参照箇所が比較式であるかどうかを判定する。比較式とはif文やswitch文などのことである。なお、厳密に境界値の解析を行う場合は、比較式だけではなくwhileなどの制御文についても判定する必要があるが、本実施例では説明を簡潔にするためif文のみに限定する。
ステップ42:参照箇所が比較式であった場合、比較している値が単純なint型の値であるかどうかを判定する。例えば、図1の2行目は「if(100 < x)」という条件文が記述されているが、ここで比較値は”100”であり、これは単純なint型の値である。なお、厳密に境界値の解析を行う場合は、比較値が単純なint値の場合だけでなく、たとえばdouble, float, String型であった場合や、比較値が変数の参照である場合についても考慮する必要がある。しかし本実施例では説明を簡潔にするためint値のみに限定する。
ステップ43、44、45:比較値がint値であった場合、その比較値、比較値から1を引いた値、比較値に1を加えた値、を境界値表に登録する。たとえば図1の2行目を解析する場合、比較値は100であるため、図6の符号64の箇所に100を、符号65の箇所に99を、符号66の箇所に101を、それぞれ登録する。
【0021】
図3及び図4の処理をすべてのメソッドに対して実行すると、最終的に図6に示すような境界値表が完成する。
【0022】
ここで、代表テストデータ表について説明する。代表テストデータ表とは、自動テスト実行システムが保持するテストデータの集合であり、よく使用されるテストデータを、代表テストデータとして保持しているものである。図8は代表テストデータ表の例を示したものである。代表テストデータ表は、型列81とテストデータ列82で構成されたデータの集合である。図8ではたとえば、int型のテストデータの代表値として、0, -1 , 1, Integer.MAX_VALUE(int型の最大値)、Integer.MIN_VALUE(int型の最小値)、など、int型の引数をもつメソッドをテストするときに、頻繁に使用されるテストデータが登録されている。int型のテストデータの他にも、double, float, String型、さらにユーザが独自に定義した型の代表テストデータも登録されている。代表テストデータ表自体は、自動テスト実行システムが提供するデータ表であり、このデータ表の作成方法等については周知であり、本発明の範囲外となるため、ここでは言及しない。
【0023】
次に図7について説明する。図7は、図2のテストデータ生成部26の詳細な処理について示したものである。テストデータ生成部26は、境界値表25と代表テストデータ表27を読み込み、テストデータ表28を生成する。
【0024】
ステップ71:まず、テストデータ生成部は、代表テストデータ表、境界値表を読み込む。
ステップ72:次に、境界値表からメソッド行をひとつずつ取得する。ここで「境界値のメソッド行」とは図6の符号67に示す範囲のデータのことである。符号67の範囲には、図1のソースコードのdivideメソッドについての境界値情報が格納されている。
ステップ73:次に、ステップ72で取得した行の境界値情報と、代表テストデータ表のテストデータをすべて組み合わせて、テストデータ表に書き込む。組み合わせ処理はメソッド引数ごとに行う。例えば、図6及び図8において、divideメソッドの引数xに対するテストデータの組み合わせを行う際は、まず、図6の境界値表から引数xの境界値(符号64、65、66)をすべて取得する。また、引数xはint型の値なので、図8の代表テストデータ表の型列からint型の行を取り出し、そのテストデータ列の値(符号83の範囲)を全て取得する。同様に、引数yについても、境界値表と代表テストデータ表からテストデータを全て取得する。そして、図9に示すように引数x、yに関するテストデータについて全ての組み合わせを求める。図9では144通りの組み合わせが求められる。これらのテストデータの組み合わせを、図5の空のテストデータ表に登録すると、図10に示すようなテストデータ表が完成する。図10はテストデータ表の一部を示したものである。
すべてのメソッドについて上記処理を繰り返すことにより、テストデータ表が完成する。
【0025】
図11は、図2のトレース機能埋込部29の詳細な処理の流れを示したものである。
ステップ111:トレース機能埋込部は、まずテスト対象ソースコードを一行ずつ読み込む。
ステップ112:次に読み込んだ行がトレース対象行かどうかを判定する。トレース対象行とは、例えばJava(登録商標)言語によって記述されたソースコードであれば、ifやwhileなどの制御文や、代入処理やメソッド呼び出しなどの式が記述されている行を示す。空白行やコメント行、中括弧だけの行、クラス、メソッドの定義行などはトレース対象行としない。例えば図1では、2、3、4、6、7、8、10、11行目がトレース対象行に該当する。
ステップ113:ステップ112で読み込んだ行がトレース対象行であった場合、その行番号を取得する。
ステップ114:読み込んだ行の行末に”trace(<行番号>);”というメソッド呼び出し処理を埋め込む。traceメソッドは、引数として与えられた数値を、図2のトレース情報ファイル217に書き込む機能をもつメソッドである。トレース情報ファイルは単純なテキストファイルである。traceメソッドは、図2の自動テスト最適化部22が提供している。
ステップ115:読み込んだすべての行に対して上記処理が完了したら、トレース情報出力処理が埋め込まれたソースコードを、修正済みテスト対象ソースコードとして保存する。
【0026】
この時点で、図1のソースコードは、図12に示すように修正され、修正済みテスト対象ソースコードとして保存されている。これにより、メソッドの各行が実行されるごとにtraceメソッドが呼び出されトレース情報ファイルに行番号が出力されるようになる。このトレース情報ファイルに書き込まれた行番号の羅列を見れば、このメソッドがどのような処理の流れで実行されたかが追跡可能となる。
【0027】
図13は、図2のテスト実行部211の処理の詳細を示したものである。
ステップ131:テスト実行部は修正済みテスト対象ソースコードをコンパイルし、実行可能な形式に変換する。
ステップ132:図10のテストデータ表を読み込み、メソッド行をひとつずつ取得する。ここで取得するのは図10の符号101に示すような範囲のデータである。
ステップ133:テスト実行結果表、トレース情報表を初期化する。図14、図15はそれぞれテスト実行結果表、トレース情報表の例であり、このようなデータを格納するためのメモリ領域を確保する。なおこれらの表はテスト対象メソッドの数だけ生成することになる。
ステップ134:テスト実行結果表に、ステップ132で取得したメソッド名とメソッド引数の情報を書き込む。例えば図14の符号141に示す範囲にメソッド名とメソッド引数の情報を書き込む。
ステップ135:ステップ132で読み込んだメソッド行からテストデータを一件ずつ取得する。符号102は、1件目のテストデータ(テストケース名:テスト1、x=0、y=0)を指している。ここで、1件のテストデータを使用した1つのメソッドの実行を、1つのテストケースとし、固有のテストケース名を付ける。
ステップ136:ステップ132で取得したテストデータのテストケース名を、テスト実行結果表、トレース情報表に登録する。例えば、符号103に示す列がテストケース名となるため、符号102のテストデータの場合、「テスト1」がテストケース名となる。この「テスト1」を、符号143と、符号152の箇所に書き込む。
【0028】
ステップ137:以上でテスト実行の準備が完了し、いよいよテスト対象のメソッドを実行する。メソッドの実行時には、ステップ135で読み込んだテストデータをメソッド引数として実行する。例えば、符号102に示すテストデータを使用する場合は、x=0、y=0をdivideメソッドに対して与えて実行する。
ステップ138:テスト対象メソッドの実行が完了したら、そのメソッドが返値を返したかどうかを判定する。
ステップ139:テスト対象メソッドが返値を返した場合、その返値の型を登録するための新たな行をテスト実行結果表に挿入する。図14ではテスト2(符号144)でint型の返値を返しているので、int型の返値を登録するための行(符号145)を新たに追加している。
ステップ1310:次にテスト対象メソッドの返値をテスト実行結果表に登録する。図14では、符号146の箇所にテスト2(符号144)の返値の値である0を登録している。
【0029】
ステップ1311:ステップ138の判定によって、テスト対象メソッドが返値を返さない場合、次にテスト対象メソッド実行時に例外がスローされたかどうかを判定する。
ステップ1312:例外が発生した場合、その型の例外を登録するための新たな行をテスト実行結果表に挿入する。図14ではテスト1(符号143)でArithmeticExceptionをスローしているので、ArithmeticExceptionが発生したことを登録するための行(符号147)を新たに追加している。
ステップ1313:次に例外が発生したことを実行結果表に○を付けて登録する。図14では、符号148の箇所にテスト1でArithmeticExceptionが発生したことを登録している。
ステップ1314:最後にメソッドの実行により出力されたトレース情報ファイルの内容を、トレース情報表に登録する。例えば図10のテスト1(符号102)のテストを実行すると、トレース情報ファイルには、「2 6 10」という数値の羅列が出力される。これらの数値をトレース情報表に、図15の符号153に示すように書き込む。
【0030】
上記処理をすべてのテスト対象メソッドに対して実行すると、テスト対象メソッドごとにテスト実行結果表とトレース情報表が生成される。
【0031】
図16は、図2のテスト結果分析部214の処理の詳細を示したものである。
ステップ161:まずテスト結果分析部214は、テスト実行結果表とトレース情報表とを結合する。いずれの表も列数は同一なので、テストケース名で単純に結合可能である。図17は、図14のテスト実行結果表と、図15のトレース情報表を結合したものである。図17に示すとおり、テスト実行結果表の部分(符号171)とトレース情報表の部分(符号172)が結合していることがわかる。
ステップ162:次に、ステップ161で結合した表から、テスト実行結果をひとつずつ取得する。
ステップ163:次に、ステップ162で取得したテスト実行結果以降のテスト実行結果を、ひとつずつ取得する。例えば、ステップ162において符号173のテスト実行結果を取得した場合は、ステップ163では、符号174、符号175...のテスト実行結果を1つずつ取得する。
【0032】
ステップ164:次に、ステップ162及び163で取得したテスト実行結果を比較し、トレース情報が同一かどうかを判定する。例えば、符号173と符号174のテスト実行結果を取得した場合は、それぞれの符号1720と符号1721の部分を比較する。この場合は、[2,6,10]と[2,6,10,11]であり、異なっていることがわかる。しかし、符号173と符号178のテスト実行結果を取得した場合、符号1720と符号1722を比較すると、いずれも[2,6,10]であり、同一であることがわかる。
【0033】
ステップ165:ステップ164で同一であると判定した場合、ステップ163で取得したテスト実行結果を、テスト実行結果表から削除する。先ほどの例では、符号173と符号178のトレース情報が同一であったため、符号178のテスト実行結果をテスト実行結果表から削除する。
【0034】
以上の処理を繰り返すと、重複したテスト実行結果が取り除かれたテスト実行結果表が完成する。図18は、テスト結果分析部によって図17から重複が取り除かれたものである。図18では、削除したテスト実行結果(テスト4〜7、10)を網掛けで表している。
【0035】
最後に、テスト結果表示部215によって、テスト実行結果表の内容が、表示装置216に表示される。例えば、テスト結果表示部によって図18のテスト実行結果表は表示装置で図19のように表示される。開発者は、この表示を見ることで、以下のテストケースと、その実行結果を確認することができる。
(テスト1)y=0の場合(例外が発生)
(テスト2)x,y ともに100以下の場合
(テスト3)xが100以下、yが100より大きい場合
(テスト8)xが100より大きい、yが100以下の場合
(テスト9)x,yともに100より大きい場合
【0036】
このように、本発明の自動テスト実行システムを用いることで、自動テスト実行部が実行した自動テスト結果に含まれる重複を、自動テスト最適化部が省き、必要最小限のテスト結果のみを開発者に提示できるため、開発者がテスト結果を確認する作業を最小限に抑えることができ、工数が削減や作業ミスの低減によるソフトウェアの品質向上が実現できる。
【図面の簡単な説明】
【0037】
【図1】本発明の実施例で用いるテスト対象ソースコードである。
【図2】本発明のシステム概要構成図である。
【図3】ソースコード解析部の処理の詳細である。
【図4】ソースコード解析部の境界値表登録処理の詳細である。
【図5】テストデータ表の例である。
【図6】境界値表の例である。
【図7】テストデータ生成部の処理の詳細である。
【図8】代表テストデータ表の例である。
【図9】テストデータの組み合わせの例である。
【図10】テストデータ表にテストデータを登録した例である。
【図11】トレース機能埋込部の処理の詳細である。
【図12】トレース機能を埋め込んだテスト対象ソースコードの例である。
【図13】テスト実行部の処理の詳細である。
【図14】テスト実行結果表の例である。
【図15】トレース情報表の例である。
【図16】テスト結果解析部の処理の詳細である。
【図17】テスト実行結果表(トレース情報表結合済み)である。
【図18】テスト実行結果表(重複削除済み)である。
【図19】テスト実行結果表示の例である。
【符号の説明】
【0038】
21:自動テスト実行部、22:自動テスト最適化部、23:テスト対象ソースコード23、24:ソースコード解析部、25:境界値表、26テストデータ生成部、27:代表テストデータ表、28:テストデータ表、29:トレース機能埋込部、210:修正済みテスト対象ソースコード、211テスト実行部、212:テスト実行結果表、213:トレース情報表、214:テスト結果分析部、215:テスト結果表示部、216:表示装置、217:トレース情報ファイル
【特許請求の範囲】
【請求項1】
テスト対象ソースコードを読み込み、そのテスト対象ソースコード中に定義されているメソッドとメソッド引数の型を解析して空のテストデータ表を作成し、同時にメソッドに定義されている条件式を解析して境界値表を作成するソースコード解析部(24)と、
代表テストデータ表及び前記境界値表を読み込み、すべてのテストデータを組み合わせて前記空のテストデータ表に登録するテストデータ生成部(26)と、
前記テスト対象ソースコードに対し、処理の流れを示すトレース情報を取得するための機能を埋め込み該テスト対象ソースコードを修正することにより、修正済みテスト対象ソースコードを作成するトレース機能埋込部(29)と、
前記テストデータを登録したテストデータ表を読み込み、各テストデータを使用して前記修正済みテスト対象ソースコードのメソッドを実行し、それぞれの実行を各テストケースとして、その返値または発生した例外をテスト実行結果表に登録すると同時にそのトレース情報をトレース情報表に登録するテスト実行部(211)と、
前記トレース情報表と前記テスト実行結果表とを結合し、結合した表中におけるトレース情報の重複したテストケースを削除するテスト結果分析部(214)と、
重複したテストケースを削除された前記テスト実行結果表を、表示装置に表示するテスト結果表示部(216)と、を備えたことを特徴とする自動テスト実行システム。
【請求項1】
テスト対象ソースコードを読み込み、そのテスト対象ソースコード中に定義されているメソッドとメソッド引数の型を解析して空のテストデータ表を作成し、同時にメソッドに定義されている条件式を解析して境界値表を作成するソースコード解析部(24)と、
代表テストデータ表及び前記境界値表を読み込み、すべてのテストデータを組み合わせて前記空のテストデータ表に登録するテストデータ生成部(26)と、
前記テスト対象ソースコードに対し、処理の流れを示すトレース情報を取得するための機能を埋め込み該テスト対象ソースコードを修正することにより、修正済みテスト対象ソースコードを作成するトレース機能埋込部(29)と、
前記テストデータを登録したテストデータ表を読み込み、各テストデータを使用して前記修正済みテスト対象ソースコードのメソッドを実行し、それぞれの実行を各テストケースとして、その返値または発生した例外をテスト実行結果表に登録すると同時にそのトレース情報をトレース情報表に登録するテスト実行部(211)と、
前記トレース情報表と前記テスト実行結果表とを結合し、結合した表中におけるトレース情報の重複したテストケースを削除するテスト結果分析部(214)と、
重複したテストケースを削除された前記テスト実行結果表を、表示装置に表示するテスト結果表示部(216)と、を備えたことを特徴とする自動テスト実行システム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【公開番号】特開2009−217664(P2009−217664A)
【公開日】平成21年9月24日(2009.9.24)
【国際特許分類】
【出願番号】特願2008−62107(P2008−62107)
【出願日】平成20年3月12日(2008.3.12)
【出願人】(000233055)日立ソフトウエアエンジニアリング株式会社 (1,610)
【Fターム(参考)】
【公開日】平成21年9月24日(2009.9.24)
【国際特許分類】
【出願日】平成20年3月12日(2008.3.12)
【出願人】(000233055)日立ソフトウエアエンジニアリング株式会社 (1,610)
【Fターム(参考)】
[ Back to top ]