(57)【特許請求の範囲】
【請求項１】
テスト対象ソースコードを読み込み、そのテスト対象ソースコード中に定義されているメソッドとメソッド引数の型を解析して空のテストデータ表を作成し、同時にメソッドに定義されている条件式を解析して境界値表を作成するソースコード解析部(24)と、
代表テストデータ表及び前記境界値表を読み込み、すべてのテストデータを組み合わせて前記空のテストデータ表に登録するテストデータ生成部(26)と、
前記テスト対象ソースコードに対し、処理の流れを示すトレース情報を取得するための機能を埋め込み該テスト対象ソースコードを修正することにより、修正済みテスト対象ソースコードを作成するトレース機能埋込部(29)と、
前記テストデータを登録したテストデータ表を読み込み、各テストデータを使用して前記修正済みテスト対象ソースコードのメソッドを実行し、それぞれの実行を各テストケースとして、その返値または発生した例外をテスト実行結果表に登録すると同時にそのトレース情報をトレース情報表に登録するテスト実行部(211)と、
前記トレース情報表と前記テスト実行結果表とを結合し、結合した表中におけるトレース情報の重複したテストケースを削除するテスト結果分析部(214)と、
重複したテストケースを削除された前記テスト実行結果表を、表示装置に表示するテスト結果表示部(216)と、を備えたことを特徴とする自動テスト実行システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テスト対象のソースコードを解析し、プログラムに対して様々な値を投入して対象のプログラムをテストするシステムに関するものである。
【背景技術】
【０００２】
ソフトウェアの品質を確保するためには、対象のソフトウェアを十分にテストすることが重要である。そのためのテスト手法のひとつとして、ソフトウェアを構成するモジュール単位でテストを行う単体テストがある。単体テストは、まずプログラムの開発者がテストデータを作成し、そのテストデータを対象のプログラムに投入してテストを行う、という手順が一般的である。
【０００３】
しかし、従来のテスト方法には、開発者が想定したテストデータの範囲内でしかテストが行われないという問題がある。
例えば、図１に示すソースコードにおいて、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型である以上、マイナスの値や、極端に大きな値が引数として与えられた場合の挙動についてもテストしておいたほうがよいかもしれない。このようにソフトウェアのテストにおいて、投入されるテストデータは開発者のスキルや考え方に大いに依存しており、未熟な開発者がテストを行った場合、テストケースに漏れが発生してしまう可能性がある。
【０００４】
この問題を解決するために、想定されるあらゆるテストデータをプログラムに投入してテストを行う、自動テスト実行システムがある。自動テスト実行システムは、まずテスト対象のソースコードを解析し、メソッド引数の個数や型の情報を取得する。図１の例では「divideメソッドはint型の引数を2つもつ」という情報を得られる。次に取得した引数の情報をもとに、ありとあらゆるテストデータを生成する。引数がint型の場合は、int型の最小値、最大値、ゼロなど、あらゆるint型の値をテストデータとして生成する。次に生成したテストデータを次々とテスト対象プログラムに投入し、その返値などをテスト結果として記録する。開発者はこの記録を目視で確認し、プログラムが想定どおりに動作しているかどうかを判断する。この自動テスト実行システムによって、開発者が思いもつかなかったようなテストデータを用いたテストを実施できるようになる。これにより、テストケースの漏れを防ぐことができるため、より品質の高いソフトウェアを開発することが可能となる。
【０００５】
特許文献１には、ソースコードの分岐行を検索し、各分岐行毎に分岐条件を抽出し、分岐条件の正否両条件を取り出し、プログラム入力変数のみで表した式に分解してテスト項目を抽出し出力するテスト項目作成装置が開示されている。
【特許文献１】特開平５−２１０５３７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来の自動テスト実行システムには、開発者が目視でテスト結果を確認する必要があるため確認作業に多大な作業量を必要とする、という問題がある。さらに自動テスト実行システムは、ありとあらゆるテストデータを投入するため、同じような内容のテストを行っている場合がある。たとえば自動テスト実行システムが以下のようなテストデータを生成したとする。
(1) x = 4, y = 2
(2) x = 10, y = 5
この場合、どちらのテストデータを用いたとしても、divideメソッドの2行目、6行目、10行目及び11行目が実行される。処理の流れはいずれのテストデータを用いても同一であり、10行目で行っている処理が4÷2か、10÷5か、の違いしかない。これは実質的には重複したテストを行っていることになる。
【０００７】
このような重複したテストデータがあった場合、(1)か(2)のいずれかのテストのみ実施しても問題ないはずである。しかし自動テスト実行システムは、重複したいずれのテストについても実施する。これにより本来実施する必要のなかったテストまで実施していることになり、その結果、テスト結果の確認作業の無駄な工数が増大し、また大量のテスト結果を目視で確認するため、人為的なミスも発生しやすくなるという問題がある。
【０００８】
本発明の目的は、自動テスト実行システムが実行した自動テスト結果において重複を生じさせず、必要最小限のテスト結果のみを確認するようにし、より効率的にテストを実施するための方法を提供することにある。
【課題を解決するための手段】
【０００９】
上記目的を達成するために本発明の自動テスト実行システムは、テスト対象ソースコードを読み込み、そのテスト対象ソースコード中に定義されているメソッドとメソッド引数の型を解析して空のテストデータ表を作成し、同時にメソッドに定義されている条件式を解析して境界値表を作成するソースコード解析部と、代表テストデータ表及び前記境界値表を読み込み、すべてのテストデータを組み合わせて前記空のテストデータ表に登録するテストデータ生成部と、前記テスト対象ソースコードに対し、処理の流れを示すトレース情報を取得するための機能を埋め込み該テスト対象ソースコードを修正することにより、修正済みテスト対象ソースコードを作成するトレース機能埋込部と、前記テストデータを登録したテストデータ表を読み込み、各テストデータを使用して前記修正済みテスト対象ソースコードのメソッドを実行し、それぞれの実行を各テストケースとして、その返値または発生した例外をテスト実行結果表に登録すると同時にそのトレース情報をトレース情報表に登録するテスト実行部と、前記トレース情報表と前記テスト実行結果表とを結合し、結合した表中におけるトレース情報の重複したテストケースを削除するテスト結果分析部と、重複したテストケースを削除された前記テスト実行結果表を、表示装置に表示するテスト結果表示部と、を備えたことを特徴とする。
【発明の効果】
【００１０】
本発明の自動テスト実行システムによれば、次のような効果がある。
（１）重複したテストケースがテスト実行結果から除去されるため、開発者がテスト結果を確認する作業を最小限に抑えることができ、その分の工数が削減できる。
（２）開発者がテスト結果を目視で確認する作業を最小限に抑えることができるため、人  為的な確認作業ミスが発生しにくく、ソフトウェアの品質向上につながる。
よって、本発明により、効率的な自動テスト実行システムが実現された。
【発明を実施するための最良の形態】
【００１１】
以下、実施例を示した図面を参照して本発明の実施の形態を説明する。
図２は、本発明の自動テスト実行システムの一実施例を示すシステム概要構成図である。本システムは、自動テスト実行の基本処理を行うための自動テスト実行部２１と、自動テスト実行の効率化処理を行うための自動テスト最適化部２２とから構成される。
【００１２】
自動テスト実行部２１では、まずテスト対象ソースコード２３を読み取り、ソースコード解析部２４に与える。ソースコード解析部２４は、境界値表２５を生成する。次にテストデータ生成部２６が、境界値表２５と、あらかじめ用意してある代表テストデータ表２７を読み込み、テストデータ表２８を生成する。自動テスト最適化部２２では、テスト対象ソースコード２３をトレース機能埋込部２９に与える。トレース機能埋込部２９は、修正済みテスト対象ソースコード２１０を生成する。そしてテスト実行部２１１はテストデータ表２８と修正済みテスト対象ソースコード２１０を読み込み、テスト対象メソッドを実行し、テスト実行結果表２１２とトレース情報ファイル２１７を出力する。さらに出力したトレース情報ファイル２１７の内容をトレース情報表２１３に登録する。ここでテスト結果分析部２１４が、トレース情報表２１３を読み込み、分析した結果を元にテスト実行結果表２１２を書き換える。最後にテスト結果表示部２１５がテスト実行結果表２１２を読み込み、その内容を表示装置２１６に表示する。
【００１３】
次に各構成要素の詳細を、手順を追って説明する。
ここでは、例として図１のソースコードを自動テストする場合について考える。このソースコードには除算を行うdivideメソッドが定義されている。このメソッドを自動テストするには、まずソースコードを、図２のソースコード解析部２４に与える。
【００１４】
図３はソースコード解析部の処理の流れを示したものである。
ステップ３１：まず、ソースコード解析部は、境界値表とテストデータ表を初期化する。境界値表とはテスト対象のメソッド内の条件分岐処理の境界値を登録するための表である。またテストデータ表とは、自動テストを実行する際のテストデータとなる値を登録するための表である。ここでは、これらの各表を保存する計算機上のメモリ領域を計算機のメモリ上に確保している。
【００１５】
ステップ３２：次に、テスト対象のソースコードを読み込む。ソースコードには１つ以上のメソッドの定義が記述されている。
ステップ３３：次に、ソースコード解析部はソースコードを一行ずつ読み込み、各メソッドの定義内容を１つずつ取得する。ここで「メソッド定義」とは、図１の符号１１の範囲の文字列のことを示す。なお、メソッド定義は「<型> <メソッド名>(<メソッド引数のリスト>){ <メソッド本体> }」という構文で記述されているものとする。
ステップ３４：次に、取得したメソッド定義を解析し、メソッド引数の定義を１つずつ取得する。なお、メソッド引数のリストは、「<型名> <一時変数名>, <型名> <一時変数名>, ．．」という形式で列挙されており、「<型名> <一時変数名>」の各々がメソッド引数の定義である。
【００１６】
ステップ３５：この時点で、メソッド名、メソッド引数の型名、メソッド引数の一時変数名がわかっているので、これらの情報を境界値表、テストデータ表に登録する。テストデータ表の形式は、図５に示すとおりである。符号５１、５２、５３の箇所にそれぞれ、メソッド名、メソッド引数の一時変数名、メソッド引数の型名、を埋め込むことで登録を行う。また、境界値表の形式は、図６に示すとおりであり、こちらも同様に図６の符号６１、６２、６３の箇所にそれぞれ、メソッド名、メソッド引数の一時変数名、メソッド引数の型名、を埋め込むことで登録を行う。
【００１７】
ステップ３６：次にステップ３４で取得したメソッド引数の定義について、このメソッド引数の一時変数がメソッド定義の中で参照されている箇所を探し、その箇所を１つずつ取得する。たとえば、図１のソースコードにおいて、メソッド引数x（符号１２）は、2行目、4行目、１０行目で参照されているので、これらの行をひとつずつ取得する。
【００１８】
ステップ３７：次にステップ３６で取得した参照箇所行と、ステップ３４で取得したメソッド引数の一時変数名を、境界表登録処理に与え、実行する。境界表登録処理の詳細は図４で説明する。
【００１９】
以上の処理を繰り返し、すべてのテスト対象メソッドについて、境界値表とテストデータ表の各項目を埋める。この時点でテストデータ表は、図５のように、空のテストデータ表となっている。
【００２０】
次に図４について説明する。境界値登録処理は、メソッド引数の一時変数名と、その変数が参照されている箇所の文字列を与えて実行する。図４は境界値登録処理の詳細について示したものである。
ステップ４１：まずメソッド引数の参照箇所が比較式であるかどうかを判定する。比較式とはif文やswitch文などのことである。なお、厳密に境界値の解析を行う場合は、比較式だけではなくwhileなどの制御文についても判定する必要があるが、本実施例では説明を簡潔にするためif文のみに限定する。
ステップ４２：参照箇所が比較式であった場合、比較している値が単純なint型の値であるかどうかを判定する。例えば、図１の２行目は「if(100 < x)」という条件文が記述されているが、ここで比較値は”100”であり、これは単純なint型の値である。なお、厳密に境界値の解析を行う場合は、比較値が単純なint値の場合だけでなく、たとえばdouble, float, String型であった場合や、比較値が変数の参照である場合についても考慮する必要がある。しかし本実施例では説明を簡潔にするためint値のみに限定する。
ステップ４３、４４、４５：比較値がint値であった場合、その比較値、比較値から1を引いた値、比較値に1を加えた値、を境界値表に登録する。たとえば図１の２行目を解析する場合、比較値は100であるため、図６の符号６４の箇所に100を、符号６５の箇所に99を、符号６６の箇所に101を、それぞれ登録する。
【００２１】
図３及び図４の処理をすべてのメソッドに対して実行すると、最終的に図６に示すような境界値表が完成する。
【００２２】
ここで、代表テストデータ表について説明する。代表テストデータ表とは、自動テスト実行システムが保持するテストデータの集合であり、よく使用されるテストデータを、代表テストデータとして保持しているものである。図８は代表テストデータ表の例を示したものである。代表テストデータ表は、型列８１とテストデータ列８２で構成されたデータの集合である。図８ではたとえば、int型のテストデータの代表値として、0, -1 , 1, Integer.MAX_VALUE(int型の最大値)、Integer.MIN_VALUE(int型の最小値)、など、int型の引数をもつメソッドをテストするときに、頻繁に使用されるテストデータが登録されている。int型のテストデータの他にも、double, float, String型、さらにユーザが独自に定義した型の代表テストデータも登録されている。代表テストデータ表自体は、自動テスト実行システムが提供するデータ表であり、このデータ表の作成方法等については周知であり、本発明の範囲外となるため、ここでは言及しない。
【００２３】
次に図７について説明する。図７は、図２のテストデータ生成部２６の詳細な処理について示したものである。テストデータ生成部２６は、境界値表２５と代表テストデータ表２７を読み込み、テストデータ表２８を生成する。
【００２４】
ステップ７１：まず、テストデータ生成部は、代表テストデータ表、境界値表を読み込む。
ステップ７２：次に、境界値表からメソッド行をひとつずつ取得する。ここで「境界値のメソッド行」とは図６の符号６７に示す範囲のデータのことである。符号６７の範囲には、図1のソースコードのdivideメソッドについての境界値情報が格納されている。
ステップ７３：次に、ステップ７２で取得した行の境界値情報と、代表テストデータ表のテストデータをすべて組み合わせて、テストデータ表に書き込む。組み合わせ処理はメソッド引数ごとに行う。例えば、図６及び図８において、divideメソッドの引数xに対するテストデータの組み合わせを行う際は、まず、図６の境界値表から引数xの境界値（符号６４、６５、６６）をすべて取得する。また、引数xはint型の値なので、図８の代表テストデータ表の型列からint型の行を取り出し、そのテストデータ列の値（符号８３の範囲）を全て取得する。同様に、引数yについても、境界値表と代表テストデータ表からテストデータを全て取得する。そして、図９に示すように引数x、yに関するテストデータについて全ての組み合わせを求める。図９では144通りの組み合わせが求められる。これらのテストデータの組み合わせを、図５の空のテストデータ表に登録すると、図１０に示すようなテストデータ表が完成する。図１０はテストデータ表の一部を示したものである。
すべてのメソッドについて上記処理を繰り返すことにより、テストデータ表が完成する。
【００２５】
図１１は、図２のトレース機能埋込部２９の詳細な処理の流れを示したものである。
ステップ１１１：トレース機能埋込部は、まずテスト対象ソースコードを一行ずつ読み込む。
ステップ１１２：次に読み込んだ行がトレース対象行かどうかを判定する。トレース対象行とは、例えばJava(登録商標)言語によって記述されたソースコードであれば、ifやwhileなどの制御文や、代入処理やメソッド呼び出しなどの式が記述されている行を示す。空白行やコメント行、中括弧だけの行、クラス、メソッドの定義行などはトレース対象行としない。例えば図１では、２、３、４、６、７、８、１０、１１行目がトレース対象行に該当する。
ステップ１１３：ステップ１１２で読み込んだ行がトレース対象行であった場合、その行番号を取得する。
ステップ１１４：読み込んだ行の行末に”trace(<行番号>);”というメソッド呼び出し処理を埋め込む。traceメソッドは、引数として与えられた数値を、図２のトレース情報ファイル２１７に書き込む機能をもつメソッドである。トレース情報ファイルは単純なテキストファイルである。traceメソッドは、図２の自動テスト最適化部２２が提供している。
ステップ１１５：読み込んだすべての行に対して上記処理が完了したら、トレース情報出力処理が埋め込まれたソースコードを、修正済みテスト対象ソースコードとして保存する。
【００２６】
この時点で、図１のソースコードは、図１２に示すように修正され、修正済みテスト対象ソースコードとして保存されている。これにより、メソッドの各行が実行されるごとにtraceメソッドが呼び出されトレース情報ファイルに行番号が出力されるようになる。このトレース情報ファイルに書き込まれた行番号の羅列を見れば、このメソッドがどのような処理の流れで実行されたかが追跡可能となる。
【００２７】
図１３は、図２のテスト実行部２１１の処理の詳細を示したものである。
ステップ１３１：テスト実行部は修正済みテスト対象ソースコードをコンパイルし、実行可能な形式に変換する。
ステップ１３２：図１０のテストデータ表を読み込み、メソッド行をひとつずつ取得する。ここで取得するのは図１０の符号１０１に示すような範囲のデータである。
ステップ１３３：テスト実行結果表、トレース情報表を初期化する。図１４、図１５はそれぞれテスト実行結果表、トレース情報表の例であり、このようなデータを格納するためのメモリ領域を確保する。なおこれらの表はテスト対象メソッドの数だけ生成することになる。
ステップ１３４：テスト実行結果表に、ステップ１３２で取得したメソッド名とメソッド引数の情報を書き込む。例えば図１４の符号１４１に示す範囲にメソッド名とメソッド引数の情報を書き込む。
ステップ１３５：ステップ１３２で読み込んだメソッド行からテストデータを一件ずつ取得する。符号１０２は、1件目のテストデータ（テストケース名：テスト１、x=0、y=0）を指している。ここで、１件のテストデータを使用した１つのメソッドの実行を、１つのテストケースとし、固有のテストケース名を付ける。
ステップ１３６：ステップ１３２で取得したテストデータのテストケース名を、テスト実行結果表、トレース情報表に登録する。例えば、符号１０３に示す列がテストケース名となるため、符号１０２のテストデータの場合、「テスト１」がテストケース名となる。この「テスト１」を、符号１４３と、符号１５２の箇所に書き込む。
【００２８】
ステップ１３７：以上でテスト実行の準備が完了し、いよいよテスト対象のメソッドを実行する。メソッドの実行時には、ステップ１３５で読み込んだテストデータをメソッド引数として実行する。例えば、符号１０２に示すテストデータを使用する場合は、x=0、y=0をdivideメソッドに対して与えて実行する。
ステップ１３８：テスト対象メソッドの実行が完了したら、そのメソッドが返値を返したかどうかを判定する。
ステップ１３９：テスト対象メソッドが返値を返した場合、その返値の型を登録するための新たな行をテスト実行結果表に挿入する。図１４ではテスト２（符号１４４）でint型の返値を返しているので、int型の返値を登録するための行（符号１４５）を新たに追加している。
ステップ１３１０：次にテスト対象メソッドの返値をテスト実行結果表に登録する。図１４では、符号１４６の箇所にテスト２（符号１４４）の返値の値である0を登録している。
【００２９】
ステップ１３１１：ステップ１３８の判定によって、テスト対象メソッドが返値を返さない場合、次にテスト対象メソッド実行時に例外がスローされたかどうかを判定する。
ステップ１３１２：例外が発生した場合、その型の例外を登録するための新たな行をテスト実行結果表に挿入する。図１４ではテスト１（符号１４３）でArithmeticExceptionをスローしているので、ArithmeticExceptionが発生したことを登録するための行（符号１４７）を新たに追加している。
ステップ１３１３：次に例外が発生したことを実行結果表に○を付けて登録する。図１４では、符号１４８の箇所にテスト１でArithmeticExceptionが発生したことを登録している。
ステップ１３１４：最後にメソッドの実行により出力されたトレース情報ファイルの内容を、トレース情報表に登録する。例えば図１０のテスト１（符号１０２）のテストを実行すると、トレース情報ファイルには、「２  ６  １０」という数値の羅列が出力される。これらの数値をトレース情報表に、図１５の符号１５３に示すように書き込む。
【００３０】
上記処理をすべてのテスト対象メソッドに対して実行すると、テスト対象メソッドごとにテスト実行結果表とトレース情報表が生成される。
【００３１】
図１６は、図２のテスト結果分析部２１４の処理の詳細を示したものである。
ステップ１６１：まずテスト結果分析部２１４は、テスト実行結果表とトレース情報表とを結合する。いずれの表も列数は同一なので、テストケース名で単純に結合可能である。図１７は、図１４のテスト実行結果表と、図１５のトレース情報表を結合したものである。図１７に示すとおり、テスト実行結果表の部分（符号１７１）とトレース情報表の部分（符号１７２）が結合していることがわかる。
ステップ１６２：次に、ステップ１６１で結合した表から、テスト実行結果をひとつずつ取得する。
ステップ１６３：次に、ステップ１６２で取得したテスト実行結果以降のテスト実行結果を、ひとつずつ取得する。例えば、ステップ１６２において符号１７３のテスト実行結果を取得した場合は、ステップ１６３では、符号１７４、符号１７５．．．のテスト実行結果を１つずつ取得する。
【００３２】
ステップ１６４：次に、ステップ１６２及び１６３で取得したテスト実行結果を比較し、トレース情報が同一かどうかを判定する。例えば、符号１７３と符号１７４のテスト実行結果を取得した場合は、それぞれの符号１７２０と符号１７２１の部分を比較する。この場合は、[２，６，１０]と[２，６，１０，１１]であり、異なっていることがわかる。しかし、符号１７３と符号１７８のテスト実行結果を取得した場合、符号１７２０と符号１７２２を比較すると、いずれも[２，６，１０]であり、同一であることがわかる。
【００３３】
ステップ１６５：ステップ１６４で同一であると判定した場合、ステップ１６３で取得したテスト実行結果を、テスト実行結果表から削除する。先ほどの例では、符号１７３と符号１７８のトレース情報が同一であったため、符号１７８のテスト実行結果をテスト実行結果表から削除する。
【００３４】
以上の処理を繰り返すと、重複したテスト実行結果が取り除かれたテスト実行結果表が完成する。図１８は、テスト結果分析部によって図１７から重複が取り除かれたものである。図１８では、削除したテスト実行結果（テスト４〜７、１０）を網掛けで表している。
【００３５】
最後に、テスト結果表示部２１５によって、テスト実行結果表の内容が、表示装置２１６に表示される。例えば、テスト結果表示部によって図１８のテスト実行結果表は表示装置で図１９のように表示される。開発者は、この表示を見ることで、以下のテストケースと、その実行結果を確認することができる。
（テスト１）y=0の場合（例外が発生）
（テスト２）x,y ともに100以下の場合
（テスト３）xが100以下、yが100より大きい場合
（テスト８）xが100より大きい、yが100以下の場合
（テスト９）x,yともに100より大きい場合
【００３６】
このように、本発明の自動テスト実行システムを用いることで、自動テスト実行部が実行した自動テスト結果に含まれる重複を、自動テスト最適化部が省き、必要最小限のテスト結果のみを開発者に提示できるため、開発者がテスト結果を確認する作業を最小限に抑えることができ、工数が削減や作業ミスの低減によるソフトウェアの品質向上が実現できる。
【図面の簡単な説明】
【００３７】
【図１】本発明の実施例で用いるテスト対象ソースコードである。
【図２】本発明のシステム概要構成図である。
【図３】ソースコード解析部の処理の詳細である。
【図４】ソースコード解析部の境界値表登録処理の詳細である。
【図５】テストデータ表の例である。
【図６】境界値表の例である。
【図７】テストデータ生成部の処理の詳細である。
【図８】代表テストデータ表の例である。
【図９】テストデータの組み合わせの例である。
【図１０】テストデータ表にテストデータを登録した例である。
【図１１】トレース機能埋込部の処理の詳細である。
【図１２】トレース機能を埋め込んだテスト対象ソースコードの例である。
【図１３】テスト実行部の処理の詳細である。
【図１４】テスト実行結果表の例である。
【図１５】トレース情報表の例である。
【図１６】テスト結果解析部の処理の詳細である。
【図１７】テスト実行結果表（トレース情報表結合済み）である。
【図１８】テスト実行結果表（重複削除済み）である。
【図１９】テスト実行結果表示の例である。
【符号の説明】
【００３８】
２１：自動テスト実行部、２２：自動テスト最適化部、２３：テスト対象ソースコード２３、２４：ソースコード解析部、２５：境界値表、２６テストデータ生成部、２７：代表テストデータ表、２８：テストデータ表、２９：トレース機能埋込部、２１０：修正済みテスト対象ソースコード、２１１テスト実行部、２１２：テスト実行結果表、２１３：トレース情報表、２１４：テスト結果分析部、２１５：テスト結果表示部、２１６：表示装置、２１７：トレース情報ファイル
【図１】
0004874277.tif 000002
【図２】
0004874277.tif 000003
【図３】
0004874277.tif 000004
【図４】
0004874277.tif 000005
【図５】
0004874277.tif 000006
【図６】
0004874277.tif 000007
【図７】
0004874277.tif 000008
【図８】
0004874277.tif 000009
【図９】
0004874277.tif 000010
【図１０】
0004874277.tif 000011
【図１１】
0004874277.tif 000012
【図１２】
0004874277.tif 000013
【図１３】
0004874277.tif 000014
【図１４】
0004874277.tif 000015
【図１５】
0004874277.tif 000016
【図１６】
0004874277.tif 000017
【図１７】
0004874277.tif 000018
【図１８】
0004874277.tif 000019
【図１９】
0004874277.tif 000020