(57)【要約】【課題】モジュールの変更点を解析し、自動的にテストケースおよび期待値を変更したテストを実施することにより、品質の高い製品開発を短期間で実現する。【解決手段】テスト対象ソースコードを解析して、入出力インタフェースの変更を反映することができ、入力値（テストケース）と出力値（期待値）を含む入力関係情報又は変更後入出力関係情報を作成する。その作成された該入力関係情報又は変更後入出力関係情報を用いて、テストケース又は変更後テストケースを作成する。そしてそのテストケース又は変更後テストケース、及び期待値又は変更後期待値を用いてテストを実行する。【選択図】図１
2009205239.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータを用いて、ソフトウェアプログラムのモジュールの変更に伴う検証を行うソフトウェア検証システムにおいて、
テスト対象ソースコードを解析して、入出力インタフェースの変更を反映することができ、入力値（テストケース）と出力値（期待値）を含む入力関係情報又は変更後入出力関係情報を作成するインタフェース解析部と、
該インタフェース解析部により作成された入力関係情報又は変更後入出力関係情報を記憶する第１のＤＢと、
該第１のＤＢに記憶された該入力関係情報又は変更後入出力関係情報を用いて、テストケース又は変更後テストケースを作成するテストケース生成部と、
該テストケース生成部により生成されたテストケース又は変更後テストケースを記憶する第２のＤＢと、
該第２のＤＢに記憶されたテストケース又は変更後テストケース、及び期待値又は変更後期待値を用いてテストを実行するテスト実行部と、を有することを特徴とするソフトウェア検証システム。
【請求項２】
請求項１に記載のソフトウェア検証システムにおいて、更に、
実行対象のソースコードの実行比率を示すカバレッジ情報又は変更後カバレッジ情報を算出するカバレッジ処理部と、
該カバレッジ処理部により作成されたカバレッジ情報又は変更後カバレッジ情報を記憶する第３のＤＢと、
ランダムにテストケースを生成するテストケースランダム生成部とを有し、
前記カバレッジ情報処理部は、前記変更前のカバレッジ率及び変更後のカバレッジ率と比較して、該比較の結果、変更後カバレッジ率が変更前に比べて低下した場合、該テストケースランダム生成部によってテストケースをランダムに生成し、該生成されたランダムテストケースを追加して該テスト実行部でテストを実行することを特徴とするソフトウェア検証システム。
【請求項３】
請求項１に記載のソフトウェア検証システムにおいて、前記テストケース生成部は、該変更後入出力関係情報と、変更前の該入出力関係情報を比較し、その比較結果に応じて、次の（イ）又は（ロ）又は（ハ）のいずれかの処理を行うソフトウェア検証システム。
（イ）インタフェース変更無しの場合は、テストケースを変更せずにテストを実行し、テスト結果を期待値に置き換える。
（ロ）インタフェースが増加した場合は、増加したインタフェース部分に対するテストケースを自動生成して、更に変更前のテストケースとの組み合わせによるテストケースを追加し、テスト結果を元に期待値の置き換える。
（ハ）ソフトウェアプログラムモジュールのインタフェースが減少した場合は、減少したインタフェースに関するテストケースを削除し、テストを実行する。期待値については、テスト結果を元に期待値の置き換える。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はソフトウェア検証システムに係り、特に組込みソフトウェアプログラムのモジュール変更に対応して自動的にテストケースおよび期待値を変更した単体テストを実施するソフトウェア検証システムに関する。
【背景技術】
【０００２】
ソフトウェアプログラムのモジュールに対する単体テストは、仕様書に基づいて、入力値と出力値つまり期待値を組み合わせたテストケースを複数用意し、また、テスト対象のモジュールを呼び出すテスト用ドライバとテスト対象のモジュールから呼び出されるモジュールの動作を模擬するテスト用スタブを用いて、それぞれのテストケースに対して期待通りに動作したかを確認する(非特許文献１参照)。
【０００３】
しかしながら、近年のソフトウェアプログラムは、数千、数万のモジュールの集合体であり、モジュール変更時に手作業ですべてのテストケースを再実行するには膨大な時間を要する。
【０００４】
【非特許文献１】ソフトウェアのテスト技術 ―品質保証へのアプローチ  著者：Michael S. Deutsch  訳者：島崎恭一  出版社：企画センター
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ソフトウェアプログラムのモジュール変更が発生すると、テスト用スタブ、ドライバ、テストケースおよび期待値の変更が必要となる。特にモジュールの入出力インタフェースが変更された場合は、ドライバ、テストケースおよび期待値の修正が生じるため、テスト効率が悪化する要因となる。
【０００６】
本発明の目的は、モジュールの変更を解析し、自動的にテストケースおよび期待値を変更してテストを実施することにより、品質の高い製品開発を短期間で実現することにある。
【課題を解決するための手段】
【０００７】
本発明によるソフトウェア検証システムは、好ましくは、コンピュータを用いて、ソフトウェアプログラムのモジュールの変更に伴う検証を行うソフトウェア検証システムにおいて、
テスト対象ソースコードを解析して、入出力インタフェースの変更を反映することができ、入力値（テストケース）と出力値（期待値）を含む入力関係情報又は変更後入出力関係情報を作成するインタフェース解析部と、該インタフェース解析部により作成された入力関係情報又は変更後入出力関係情報を記憶する第１のＤＢと、該第１のＤＢに記憶された該入力関係情報又は変更後入出力関係情報を用いて、テストケース又は変更後テストケースを作成するテストケース生成部と、該テストケース生成部により生成されたテストケース又は変更後テストケースを記憶する第２のＤＢと、該第２のＤＢに記憶されたテストケース又は変更後テストケース、及び期待値又は変更後期待値を用いてテストを実行するテスト実行部と、を有することを特徴とするソフトウェア検証システムとして構成される。
【０００８】
また、好ましい例では、上記ソフトウェア検証システムにおいて、更に、実行対象のソースコードの実行比率を示すカバレッジ情報又は変更後カバレッジ情報を算出するカバレッジ処理部と、該カバレッジ処理部により作成されたカバレッジ情報又は変更後カバレッジ情報を記憶する第３のＤＢと、ランダムにテストケースを生成するテストケースランダム生成部とを有し、
前記カバレッジ情報処理部は、前記変更前のカバレッジ率及び変更後のカバレッジ率と比較して、該比較の結果、変更後カバレッジ率が変更前に比べて低下した場合、該テストケースランダム生成部によってテストケースをランダムに生成し、該生成されたランダムテストケースを追加して該テスト実行部でテストを実行する。
【０００９】
更に好ましい例では、上記ソフトウェア検証システムにおいて、前記テストケース生成部は、該変更後入出力関係情報と、変更前の該入出力関係情報を比較し、その比較結果に応じて、次の（イ）又は（ロ）又は（ハ）のいずれかの処理を行うソフトウェア検証システムとして構成される。
（イ）インタフェース変更無しの場合は、テストケースを変更せずにテストを実行し、テスト結果を期待値に置き換える。
（ロ）インタフェースが増加した場合は、増加したインタフェース部分に対するテストケースを自動生成して、更に変更前のテストケースとの組み合わせによるテストケースを追加し、テスト結果を元に期待値の置き換える。
（ハ）ソフトウェアプログラムモジュールのインタフェースが減少した場合は、減少したインタフェースに関するテストケースを削除し、テストを実行する。期待値については、テスト結果を元に期待値の置き換える。
【発明の効果】
【００１０】
本発明によれば、モジュールの変更を解析し、自動的にテストケースおよび期待値を変更してテストを実施することにより、プログラム開発者は、モジュールに対する仕様の確認に時間を割くことができ、より品質の高い製品開発を短期間で実現できる。
【発明を実施するための最良の形態】
【００１１】
本実施形態は、ソフトウェアプログラムのモジュール変更に対応したテストケースおよび期待値を自動生成し、効率良くテストが実施できるシステムを実現する。即ち、ソフトウェアプログラムの各モジュールの入出力インタフェースに着目して、モジュールの変更に対して、（１）インタフェース変更無し、（２）インタフェース追加あり、（３）インタフェース削減、の３ついずれかに分類し、それぞれの場合に応じてテストケースを追加、削除する等してテストを実施するものである。
【００１２】
図１は、本発明の一実施形態によるソフトウェア検証システムの例を示す。この検証システムは、ソフトウェアの検証を行うコンピュータ１と、検証のために必要な情報を記憶するデータベース（ＤＢ）を有して構成される。
コンピュータ１は、検証のためのプログラムを実行することでそれらの機能が実現されるインタフェース解析部１０５、テストケース生成部１０６、及びテスト実行部１０７を有する。ここで、インタフェース解析部１０５は、テスト対象ソースコード１０１´を解析して、入力関係情報１０２´及び変更後入出力関係情報１０９´を作成する。テストケース生成部１０６は、入力関係情報１０２´及び変更後入出力関係情報１０９´を用いてテストケース１０３´及び変更後テストケース１１０´を作成する。テスト実行部１０７は、テストケース生成部１０６で作成されたテストケース１０３´及び変更後テストケース１１０´、及び期待値１０４´及び変更後期待値１１１´を用いてテストを実行する。
【００１３】
ＤＢに関しては、変更前のテスト環境に対して、テスト対象ソースコードＤＢ１０１、入出力関係情報ＤＢ１０２、テストケースＤＢ１０３、期待値ＤＢ１０４を有する。また、変更後の情報を保持するＤＢとして、変更後テスト対象ソースコードＤＢ１０８、変更後入出力関係情報ＤＢ１０９、変更後テストケースＤＢ１１０、変更後期待値ＤＢ１１１を有する。これらのＤＢは対応する情報をそれぞれ記憶する。
【００１４】
例えば、図２に示すように、入出力関係情報１０２´は、入力データとしてのテストケースとして、引数Ａ，Ｂ、及びグローバル変数Ｘを含み、出力データとしての期待値として、引数Ｃ、グローバル変数Ｙ、及び戻り値を含む。
一方、変更後入出力関係情報１０９´には、変更前の入出力関係情報１０２´に対して、引数Ｄが新たに追加されている。
【００１５】
斯かるシステムの構成において、入出力関係情報１０２´を新規に作成する場合、インタフェース解析部１０５はテスト対象ソースコード１０１´を解析する。
テスト対象ソースコード１０１´をテキストエディタ（図示せず）で変更して、変更後テスト対象ソースコード１０８´を作成する。インタフェース解析部１０５は、この変更後テスト対象ソースコード１０８´を解析して、変更後入出力関係情報１０９´を作成する。
【００１６】
テストケース生成部１０６は、変更後入出力関係情報１０９´と、変更前の入出力関係情報１０２´を比較し、その比較結果に従って、下記（１）〜（３）の処理を行う。
（１）入出力インタフェースに変更が無ければ、テストケース１０３´を変更しないで、テスト実行部１０７でテストを実行し、テスト結果を期待値に置き換える。
【００１７】
（２）入出力インタフェースが増加した場合、テストケース生成部１０６は、変更前テストケース１０３´にインタフェース追加分を組み合わせた変更後テストケース１１０´を作成して、テスト実行部１０７でテストを実行する。
【００１８】
ここで、図３に変更前テストケース１０３´を示し、図４に変更後テストケース１０９´を示す。
変更前テストケース１０３´（図３）は、入出力関係情報１０２´（図２）の集合であり、図４の変更後テストケース１１０´は、変更前テストケース１０３´とインタフェース追加分のテスト（図４の網掛け部）との組み合わせとなっている。
【００１９】
（３）入出力インタフェースが減少した場合、テストケース生成部１０６は、変更前テストケース１０３´より削減されたインタフェース分のテストケースおよび重複した分を削除して、図５に示すような変更後テストケース１１０´を作成する。即ち、変更前テストケース１０３´の斜線部分が削除された結果となる。
【００２０】
なお、図３〜図５に示したテストケースの例では、テストケースの値を「０」または「１」で表示している。しかし、テストケースの取り得る値は、それぞれの型の最小値から最大値まで膨大である。そこで、本検証システムでは、図６に示すように、テストケースで取り得る値を予め定義したおき、それらの値の組み合わせから適宜選択することが可能である。例えば、最小ＭＩＮ、最大ＭＡＸとして、０〜９９までの値と取るように規定しておいてもよい。
【００２１】
次に、図７を参照して、他の実施形態について説明する。
この例は、図１に示す例に比べて、コンピュータ１で実行される機能として、カバレッジ情報処理部７１３、テストケースランダム生成部７１４が追加され、更にデータベースとして、カバレッジ情報ＤＢ７１２、変更後カバレッジ情報ＤＢ７１５及びランダムテストケースＤＢ７１６が追加されたものである。
【００２２】
カバレッジ情報とは、実行対象のソースコードの行数に対して実際に何行目まで実行されたかを示す情報であり、その比率をカバレッジ率（ラインカバー率ともいう）という。例えば、実行対象のソースコードが１００行あって、実際に実行された行数が２０行、実行されなかった行数が８０行とすると、カバレッジ率は２０％となる。
【００２３】
カバレッジ情報処理部７１３は、テスト対象ソースコード１０１´とテストケース１０３´の組み合わせでテストを実行した際のカバレッジ情報を収集して、それをカバレッジ情報ＤＢ７１２に記憶する。また、変更後テスト対象ソースコード１０８´と変更後テストケース１１０´の組み合わせでテストを実行した結果、変更前と変更後における各カバレッジ率(たとえばＣＯカバレッジ)を計算する。
【００２４】
カバレッジ情報処理部７１３は、更に、算出された変更前のカバレッジ率及び変更後のカバレッジ率と比較する。その結果、カバレッジ率が変更前に比べて低下した場合、テストケースランダム生成部７１４は、ランダムにテストケース７１６´を生成し、テスト実行部１０７はその生成されたランダムテストケースを追加してテストを実行する。テストケースランダム生成部７１４によるテストケースのランダムな生成は、あらかじめ指定された範囲のデータよりランダムにテストケースを作成することにより行われる。
【００２５】
テストケースランダム生成部７１４により生成されたテストケースを用いてテストが実行され、また上記と同様にして、変更後テスト対象ソースコード１０８´と変更後テストケース１１０´の組み合わせでテストを実行した結果、変更前と変更後における各カバレッジ率がカバレッジ情報処理部７１３により計算される。
【００２６】
カバレッジ処理部７１３は、変更前後の各カバレッジ率を比較し、その結果、ランダム生成されたテストケースの実行により、カバレッジ情報が改善された場合は、変更後テストケース１１０´にテストケースを追加する。カバレッジ率が変更前テストケース１１０´のカバレッジ率を上回るか、あらかじめ指定されたランダム生成数を満たした時点でテストケースランダム生成部７１４は新たなテストケースを生成しないものとする。
【００２７】
なお、図１に示す検証システムの例において、自動生成した変更後テストケース１１０´を、システムの管理者が認識できるようにシステム外部に公開し、テストケースの変更が必要な場合、例えば自動で追加されたテストケースだけでは、テストが不十分な場合は、手作業で編集可能となる。同様にして、図７のシステムでも、自動生成した変更後テストケース１１０´およびランダムテストケース７１６´をシステム外部に公開し、テストケースの変更が必要な場合、例えば自動で追加されたテストケースだけでは、テストが不十分な場合は、手作業で編集可能となる。
【００２８】
このようにモジュールの変更点に対し、自動的にテストケースおよび期待値を変更したテストを実施することにより、プログラム開発者は、モジュールに対する仕様の確認のために時間を割くことができ、より品質の高いソフトウェアを短期間で開発することができる。
【図面の簡単な説明】
【００２９】
【図１】一実施形態によるソフトウェア検証システムを示すブロック図。
【図２】入出力関係情報のフォーマットの一例を示す図。
【図３】変更前テストケースの一例を示す図。
【図４】変更後テストケースの一例を示す図。
【図５】変更後テストケースの一例を示す図。
【図６】テストケースとして取り得る値の一例を示す図。
【図７】一実施形態によるソフトウェア検証システムを示すブロック図。
【符号の説明】
【００３０】
１０１：テスト対象ソースコードＤＢ  １０２：入出力関係情報ＤＢ  １０３：テストケースＤＢ  １０４：期待値ＤＢ  １０５：インタフェース解析部  １０６：テストケース生成部  １０７：テスト実行部  
１０８：変更後テスト対象ソースコードＤＢ  １０９：変更後入出力関係情報ＤＢ  １１０：変更後テストケースＤＢ  １１１：変更後期待値ＤＢ。
【図１】
2009205239.tif 000003
【図２】
2009205239.tif 000004
【図３】
2009205239.tif 000005
【図４】
2009205239.tif 000006
【図５】
2009205239.tif 000007
【図６】
2009205239.tif 000008
【図７】
2009205239.tif 000009