(57)【要約】【課題】ソフトウェアプログラムのモジュールに対する単体テスト用のテストケース生成は、入力値に対して、その型が取りえる最小値、最大値、0やソースコードを解析して利用している数値を抽出しこれらの値をランダムに組み合わせてテストケースを生成する方式がある。これは、モジュール内部の処理とは関係なく値をランダムに組み合わせるため、数値の異なる複数のテストケースを作成できるが、テスト条件が重複するものを無駄に作ってしまい、効率良くテストすることが出来ない。【解決手段】モジュールの出力値が決定する部分を基点として、その出力値に関係する代入文や条件分岐文に利用の数値や変数を抽出し、入力値の取り得る範囲を求めることにより、効率の良い生成処理で、無駄のないテストケースとしての「入力値」と「期待値（出力値）」を生成し、効率の良いテスト実施を可能とする。【選択図】図１
2009032133.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアプログラムのモジュールの自動的な単体テストを可能とするために、ソースコードの出力部分を基準に代入文および条件判定文に利用の変数や値から、そのモジュールをテストするためのテストケース入力値並びに出力値を求めることを特徴とするシステム。
【請求項２】
請求項１の入力値に対して、入力値の取りえる値の正常範囲や異常範囲や最小値や最大値を入力とするテストケースを生成することを特徴とするシステム。
【請求項３】
請求項２の入力値の範囲に最小値または最大値を入力値とする場合に対して、最小値または最大値を利用したことを記録しておき、後で人手による変更を可能とすることを特徴とするシステム。
【請求項４】
請求項２の入力値の範囲に最小値または最大値を入力値とする場合に対して、出力値がアンダーフローまたはオーバーフローするときに警告を報告することを特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアプログラムのモジュールに対する単体テストを実施するときに、そのモジュールの構造を解析し、モジュールを検証するテストケースの生成に関するものである。
【背景技術】
【０００２】
ソフトウェアプログラムのモジュールに対する単体テストは、仕様書に基づいて、入力値と出力値つまり期待値を組み合せたテストケースを複数用意し、また、テスト対象のモジュールを呼び出すテスト用ドライバとテスト対象のモジュールから呼び出されるモジュールの動作を模擬するテスト用スタブを用いて、それぞれのテストケースに対して期待通りに動作したかを確認する(非特許文献１参照)。
【０００３】
このテストケースの組み合わせは、入力の型の取り得る範囲を入力の個数分乗じたすべての組み合わせを実行するのが理想であるが、これは天文学的個数となり現実的ではなく、また、近年のソフトウェアプログラムは、数千、数万のモジュールの集合体であり、全モジュールに対して、全組み合わせのテストケースの期待値を確認するには膨大な時間が必要となる。
【０００４】
【非特許文献１】ソフトウェアのテスト技術 ―品質保証へのアプローチ  著者：Michael S.Deutsch  訳者：島崎恭一  出版社：企画センター
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ソフトウェアプログラムモジュールへの入力値に対して、その型が取りえる最小値、最大値、0やソースコードを解析して利用している数値を抽出しこれらの値をランダムに組み合わせてテストケースを生成する方式がある。
【０００６】
これは、モジュール内部の処理とは関係なく値をランダムに組み合わせるため、数値の異なる複数のテストケースを作成できるが、テスト条件が重複するものを無駄に作ってしまい、効率良くテストすることが出来ない。
【課題を解決するための手段】
【０００７】
モジュールの出力値は、そのモジュールへの入力値を加工したものである。
【０００８】
このため、出力値が決定する部分を基点として、その出力値に関係する代入文や条件分岐文に利用の数値や変数を抽出し、入力値の取り得る範囲を求めることにより、効率の良い生成処理で、無駄のないテストケースとしての「入力値」と「期待値（出力値）」を生成し、効率の良いテスト実施を可能とする。
【発明の効果】
【０００９】
モジュールに対する効率のよいテストケースの生成により、プログラム開発者は、モジュールに対する仕様の確認に専念でき、より品質の高い製品開発を短期間で実現できる。
【発明を実施するための最良の形態】
【００１０】
モジュールの出力値に関する入力値を求めることで、効率の良いテストケースを生成することを実現した。
【実施例１】
【００１１】
図１は、本発明の実施形態の例を表すブロック図である。
【００１２】
本実施形態では、テスト対象ソースコード１０１を入力とし、出力と入力の関係抽出１０２により、入出力関係図１０３を作成する。
【００１３】
入出力関係解析１０４は、入出力関係図１０３から、入出力関係情報１０５および入出力関係テーブル１０７を作成する。
【００１４】
テストケース生成１０６は、入出力関係テーブル１０７から、テストケース１０８を作成する。
【００１５】
図２は、本発明を適用する一例を表すテスト対象プログラムモジュールのソースコード１０１のＰＡＤである。
【００１６】
図３は、図２のＰＡＤの出力（＝戻り値）と入力（＝引数）の関係を表す入出力関係図１０３の例であり、図２のＰＡＤから３つの関係図３０１、３０２、３０２を作成したものである。
【００１７】
図４は、入出力関係図１０３から抽出した入出力関係テーブル１０７の例であり、関係図３０１、３０２、３０２をそれぞれ、テーブルＴ１、Ｔ２、Ｔ３として作成したものである。
【００１８】
また、テストケース１０８の内容は入出力関係テーブル１０７の各テーブルをまとめてテストケースとして作成したものである。
【００１９】
図５は、入出力関係図１０３から抽出した入出力関係情報１０５の例であり、テーブルＴ１、Ｔ２、Ｔ３の各値の範囲をまとめてテーブルＴ４として作成したものである。
【００２０】
図６は、テスト対象プログラムモジュールをテストする場合に一般的に利用するテスト用ドライバとテスト用スタブとテストケースの関係を示したブロック図であり、図２のＰＡＤは、図６のテスト用スタブ６０３を利用しない例であるが、テスト用スタブ６０３を利用した場合については後述する。
【００２１】
本発明は、まず、出力と入力の関係抽出１０２の処理で、テスト対象プログラムモジュールのソースコード１０１から、出力つまり戻り値２０８を基点として、プログラムモジュールの入力値（＝引数）との関係を以下の例で抽出する。
【００２２】
テスト対象プログラムモジュールのソースコード１０１の戻り値rc２０８は、代入文２０５、２０６および２０７で値が代入される。
【００２３】
代入文２０５から戻り値rc２０８は引数ａと引数ｂに関連することが判り、また、代入文２０５は、条件判定文２０４の真判定３０４および条件判定文２０３の真判定３０５により処理されているため、入出力関係図１０３の一部として関係図３０１のように表される。
【００２４】
代入文２０６も同様に、戻り値rc２０８は引数ａと引数ｂに関連することが判り、また、代入文２０６は、条件判定文２０４の偽判定３０６および条件判定文２０３の真判定３０７により処理されているため、入出力関係図１０３の一部として関係図３０２のように表される。
【００２５】
代入文２０７も同様に、戻り値rc２０８は引数ａに関連することが判り、また、代入文２０７は、条件判定文２０３の偽判定３０８により処理されているため、入出力関係図１０３の一部として関係図３０３のように表される。
【００２６】
入出力関係解析１０４の処理は、入出力関係図１０３の関係図３０１の条件判定文２０３の真判定３０５、条件判定文２０４の真判定３０４と代入文２０５から、引数ａ、ｂに利用する値と戻り値rc２０８の期待値を抽出し、入出力関係テーブル１０７の一部としてテーブルＴ１の関係を作成する。
【００２７】
関係図３０２も同様に条件判定文２０３の真判定３０７、条件判定文２０４の偽判定３０６（＝境界値を越えた値）と代入文２０６から、引数ａ、ｂに利用する値と戻り値rc２０８の期待値を抽出し、入出力関係テーブル１０７の一部としてテーブルＴ２の関係を作成する。
【００２８】
なお、引数ｂについて、値の取り得る範囲は５０以下または１００以上となり、最小値側および最大値側の関係を導き出すことができないため、最小値ＭＩＮおよび最大値ＭＡＸを利用する。
【００２９】
これは、ｉｎｔ型を３２ｂｉｔ符号有り整数とする処理系では、最小値ＭＩＮ＝−２１４７４８３６４８、最大値ＭＡＸ＝２１４７４８３６４７となる。
【００３０】
また、これら最小値または最大値を利用した場合は、入出力関係テーブル１０７の補助情報４０３に適用したことを記録しておき、後でテスト実施者がテスト対象プログラムモジュールの仕様に従った最小値または最大値の変更を可能とする。
【００３１】
このとき、テーブルＴ２の戻り値rc２０８の取り得る値４０１や４０２は、ＭＡＸに対する加算であり、オーバーフローを引き起こす。
【００３２】
このＭＡＸに対する加算のオーバーフローやＭＩＮに対する減算のアンダーフローのような不良は、入出力関係テーブル１０７の補助情報４０３に記録され、テスト実施者に警告として通知することにより、テスト対象プログラムが、仕様通りに作られているか？仕様に誤りがないか？の確認契機となり、より高い品質確保が可能となる。
【００３３】
関係図３０３も同様に条件判定文２０３の偽判定３０８、代入文２０７から、引数ａに利用する値と戻り値rc２０８の期待値を抽出し、入出力関係テーブル１０７の一部としてテーブルＴ３の関係を作成する。
【００３４】
なお、引数ａについても引数ｂと同様に最小値ＭＩＮおよび最大値ＭＡＸを利用し、補助情報４０４を記録する。
【００３５】
また、関係図３０３のときの戻り値rc２０８は、引数ａについてのみ関連があり、引数ｂとは関係がないため、引数ｂは任意の値（ランダム値）を利用し、また引数ｂとは関係がないことを補助情報４０４に記録する。
【００３６】
この任意の値（ランダム値）は、入出力関係テーブル１０７作成時に値を決定しても良く、また、任意の値（ランダム値）を利用することをテストケース１０８に記録しておき、テストケース１０８を利用する段階で値を決定しても良く、本発明ではこれを限定しない。
【００３７】
入出力関係解析１０４の処理は、入出力関係テーブル１０７の各テーブルＴ１、Ｔ２、Ｔ３の範囲を集計した入出力関係情報１０５としてテーブルＴ４を出力する。
【００３８】
ソフトウェアプログラム開発者は、この入出力関係情報１０５を元にテスト対象プログラムモジュールが仕様通りに作成できているか？の確認を行うことで、テスト開始前に不良の早期摘出が可能となる。
【００３９】
テストケース生成１０６の処理は、入出力関係テーブル１０７の各テーブルＴ１、Ｔ２、Ｔ３を元に、入力値ａ、ｂ、出力値（期待値）ｒｃをテストケース１０８として出力する。
【００４０】
この、テストケース１０８をテスト用ドライバ６０１に利用することで、テスト対象プログラムモジュールのテストを無駄なく効率よく行うことが可能となる。
【００４１】
この実施例は簡単なソフトウェアモジュールに対しての例であるが、本発明は、ロジックが複雑になっても適用することは可能である。
【００４２】
例として、テスト対象モジュールが子モジュールを呼び出す場合を以下に記述する。
【００４３】
テスト対象モジュール６０２が呼び出す子モジュールは単体テスト時に、子モジュールを模擬するテスト用スタブ６０３を用意し、テストを実施する。
【００４４】
テスト対象モジュール６０２の引数（入力）はテスト用ドライバ６０１の出力であり、
テスト対象モジュール６０２の戻り値（出力）はテスト用ドライバ６０１の入力である。
【００４５】
同様にテスト用スタブ６０３への引数（入力）は、テスト対象モジュール６０２の出力であり、また、テスト用スタブ６０３の戻り値（出力）はテスト対象モジュール６０２の入力である。
【００４６】
テスト用スタブ６０３の引数（入力）や戻り値（出力）は、テスト対象モジュール６０２から見れば、上記の図２のＰＡＤの引数（入力）ａ、ｂ２０１、戻り値（出力）ｒｃ２０８と同じ扱いであり、これらと同様に、テストケース１０８や入出力関係情報１０５を作成することが可能である。
【００４７】
このテストケース１０８をテスト用ドライバ６０１およびテスト用スタブ６０３で利用することで、テスト対象モジュール６０２を駆動し効率よくテストすることが可能となる。
【００４８】
また、入出力関係情報１０５を参照することで、子モジュールの引数（入力）と戻り値（出力）を認識することができ、テスト用スタブ６０３の作成に利用することが可能となる。
【００４９】
この場合、テスト対象モジュールから子モジュールが仕様通りに利用されるか？の確認による品質向上や、集計された値を利用することによるテスト用スタブの作成時間の短縮が可能となる。
【産業上の利用可能性】
【００５０】
ソフトウェアプログラムは、数千、数万のモジュールの集合体であり、各モジュールの品質を高めるための検証テストを効率よく行うことを可能とする。
【図面の簡単な説明】
【００５１】
【図１】本発明の一実施形態を表すブロック図である。
【図２】本発明を適用する一例を表すテスト対象プログラムモジュールのソースコードのＰＡＤである。
【図３】入出力関係図の例である。
【図４】入出力関係テーブルの例である。
【図５】入出力関係情報の例である。
【図６】一般的なテスト対象プログラムモジュールとテスト用ドライバとテスト用スタブとテストケースの関係を示したブロック図である。
【符号の説明】
【００５２】
１０１…テスト対象ソースコード、１０２…出力と入力の関係抽出処理、１０３…入出力関係図、１０４…入出力関係解析処理、１０５…入出力関係情報、１０６…テストケース生成処理、１０７…入出力関係テーブル、１０８…テストケース。
【図１】
2009032133.tif 000003
【図２】
2009032133.tif 000004
【図３】
2009032133.tif 000005
【図４】
2009032133.tif 000006
【図５】
2009032133.tif 000007
【図６】
2009032133.tif 000008