(57)【特許請求の範囲】
【請求項１】
ＣＰＵと、記憶部と、表示部を有し、前記記憶部に格納されたプログラムを実行することにより機能を実現するテスト支援装置であって、
前記記憶部は、外部仕様と、分析済みパラメータ情報と、テストケース生成情報と、テストケースを記憶し、
前記外部仕様と前記分析済みパラメータ情報とは、テスト対象のソフトウェアプログラムで記述されるパラメータのパラメータ情報と、そのパラメータのパラメータ間の関係を表す制約条件とを保持し、
前記外部仕様と前記分析済みパラメータ情報のパラメータ情報は、そのパラメータの型情報と、パラメータ名が取り得るパターン情報とを含み、
前記テストケース生成情報は、テスト対象のソフトウェアプログラムで記述されるパラメータのパラメータ情報と、そのパラメータのパラメータ間の関係を表す制約条件とを保持し、
前記テストケース生成情報のパラメータ情報は、そのパラメータの型情報と、パラメータ名が取り得る候補値とを含み、
前記テストケースは、テスト対象のソフトウェアプログラムで記述されるパラメータのパラメータ値を定めた組合せを、一つ以上保持し、
前記外部仕様のパラメータ情報の前記パラメータの型情報、前記パターン情報、前記制約条件から、前記パラメータのクラス分割をおこない、前記分析済みパラメータ情報を生成し、
前記分析済みパラメータ情報のパラメータ情報の前記パラメータの型情報、前記パターン情報、前記制約条件から、前記パラメータのクラス分割をおこない、前記テストケース生成情報を生成し、
前記テストケース生成情報のパラメータ情報の前記パラメータの型情報と、前記制約条件と、前記パラメータ情報の候補値とから、前記パラメータ値を定めた組合せを生成し、前記テストケースを生成することを特徴とするテスト支援装置。
【請求項２】
前記外部仕様から、前記分析済みパラメータ情報を生成する際に、
前記外部仕様に記述されたパラメータの不足情報を抽出し、前記表示部に、パラメータごとにパラメータの不足情報を強調表示する画面を表示し、前記分析済みパラメータ情報の補完入力を受け付けることを特徴とする請求項１記載のテスト支援装置。
【請求項３】
前記分析済みパラメータ情報から、前記テストケース生成情報を生成する際に、
前記分析済みパラメータ情報のパラメータ制約条件に基づいて、前記分析済みパラメータ情報に記載されたパラメータを変換して、前記テストケース生成情報に記載されるパラメータを生成することを特徴とする請求項１記載のテスト支援装置。
【請求項４】
前記外部仕様のパラメータ情報と前記分析済みパラメータ情報におけるパラメータのクラス分割とは、前記パターン情報に記載されたパラメータに対して、パラメータの型情報ごとに定められたクラス分割処理をおこなうことを特徴とする請求項１記載のテスト支援装置。
【請求項５】
前記分析済みパラメータ情報に記載されたパラメータを変換して、前記テストケース生成情報に記載されるパラメータを生成する処理は、
前記分析済みパラメータ情報に記載されたパラメータに親子間の関係がある場合に、親パラメータが値を持たないときに、子パラメータに値を持たないことを示すパターン情報、または、子パラメータに値を持つときに、親パラメータが値を持つことを示すパターン情報を追加する処理と、
前記分析済みパラメータ情報に記載されたパラメータが複数の項目からなる配列であった場合に、与えられた配列の項目数に応じたパラメータを生成する処理と、
前記パラメータの親子関係、および、配列の長さに応じて生じるパラメータ間の制約条件を、前記テストケース生成情報に記載される制約条件に追加する処理を含むことを特徴とする請求項３記載のテスト支援装置。
【請求項６】
前記外部仕様に記述されたパラメータの不足情報を抽出し、前記表示部に、パラメータごとにパラメータの不足情報を強調表示する画面を表示し、前記分析済みパラメータ情報の補完入力を受け付ける処理は、
前記外部仕様に記述されたパラメータが複数の項目からなる配列であり、配列のデータが可変である場合に、配列の長さを入力するためのパラメータを追加する処理と、
前記外部仕様に記述されたパラメータのパターン情報に、テスト実行に必要な情報が不足しているパターン情報を抽出する処理を含むことを特徴とする請求項２記載のテスト支援装置。
【請求項７】
前記記憶部は、さらに、前記テストケースに記載された前記パラメータ値を定めた組合せに基づいて、生成されるテスト実行可能な具体値を格納したテスト実行のためのテストデータと、前記テストデータによるテスト実行結果を記憶し、
前記テストケースからテストデータを生成し、
前記テストデータを用いてテスト実行を行い、その実行結果を収集することを特徴とする請求項１記載のテスト支援装置。
【請求項８】
ＣＰＵと、記憶部と、表示部を有し、前記記憶部に格納されたプログラムを実行することにより機能を実現するテスト支援装置のテスト支援方法であって、
前記記憶部は、外部仕様と、分析済みパラメータ情報と、テストケース生成情報と、テストケースを記憶し、
前記外部仕様と前記分析済みパラメータ情報とは、テスト対象のソフトウェアプログラムで記述されるパラメータのパラメータ情報と、そのパラメータのパラメータ間の関係を表す制約条件とを保持し、
前記外部仕様と前記分析済みパラメータ情報のパラメータ情報は、そのパラメータの型情報と、パラメータ名が取り得るパターン情報とを含み、
前記テストケース生成情報は、テスト対象のソフトウェアプログラムで記述されるパラメータのパラメータ情報と、そのパラメータのパラメータ間の関係を表す制約条件とを保持し、
前記テストケース生成情報のパラメータ情報は、そのパラメータの型情報と、パラメータ名が取り得る候補値とを含み、
前記テストケースは、テスト対象のソフトウェアプログラムで記述されるパラメータのパラメータ値を定めた組合せを、一つ以上保持し、
前記外部仕様のパラメータ情報の前記パラメータの型情報、前記パターン情報、前記制約条件から、前記パラメータのクラス分割をおこない、前記分析済みパラメータ情報を生成するステップと、
前記分析済みパラメータ情報のパラメータ情報の前記パラメータの型情報、前記パターン情報、前記制約条件から、前記パラメータのクラス分割をおこない、前記テストケース生成情報を生成するステップと、
前記テストケース生成情報のパラメータ情報の前記パラメータの型情報と、前記制約条件と、前記パラメータ情報の候補値とから、前記パラメータ値を定めた組合せを生成し、前記テストケースを生成するステップとを有することを特徴とするテスト支援方法。
【請求項９】
前記外部仕様から、前記分析済みパラメータ情報を生成するステップにおいて、
前記外部仕様に記述されたパラメータの不足情報を抽出し、前記表示部に、パラメータごとにパラメータの不足情報を強調表示する画面を表示し、前記分析済みパラメータ情報の補完入力を受け付けることを特徴とする請求項８記載のテスト支援方法。
【請求項１０】
前記分析済みパラメータ情報から、前記テストケース生成情報を生成するステップにおいて、
前記分析済みパラメータ情報のパラメータ制約条件に基づいて、前記分析済みパラメータ情報に記載されたパラメータを変換して、前記テストケース生成情報に記載されるパラメータを生成することを特徴とする請求項８記載のテスト支援方法。
【請求項１１】
前記外部仕様のパラメータ情報と前記分析済みパラメータ情報におけるパラメータのクラス分割とは、前記パターン情報に記載されたパラメータに対して、パラメータの型情報ごとに定められたクラス分割処理をおこなうことを特徴とする請求項８記載のテスト支援方法。
【請求項１２】
前記分析済みパラメータ情報に記載されたパラメータを変換して、前記テストケース生成情報に記載されるパラメータを生成するステップは、
前記分析済みパラメータ情報に記載されたパラメータに親子間の関係がある場合に、親パラメータが値を持たないときに、子パラメータに値を持たないことを示すパターン情報、または、子パラメータに値を持つときに、親パラメータが値を持つことを示すパターン情報を追加する処理と、
前記分析済みパラメータ情報に記載されたパラメータが複数の項目からなる配列であった場合に、与えられた配列の項目数に応じたパラメータを生成する処理と、
前記パラメータの親子関係、および、配列の長さに応じて生じるパラメータ間の制約条件を、前記テストケース生成情報に記載される制約条件に追加する処理を含むことを特徴とする請求項１０記載のテスト支援方法。
【請求項１３】
前記外部仕様に記述されたパラメータの不足情報を抽出し、前記表示部に、パラメータごとにパラメータの不足情報を強調表示する画面を表示し、前記分析済みパラメータ情報の補完入力を受け付ける処理は、
前記外部仕様に記述されたパラメータが複数の項目からなる配列であり、配列のデータが可変である場合に、配列の長さを入力するためのパラメータを追加する処理と、
前記外部仕様に記述されたパラメータのパターン情報に、テスト実行に必要な情報が不足しているパターン情報を抽出する処理を含むことを特徴とする請求項９記載のテスト支援方法。
【請求項１４】
前記記憶部は、さらに、前記テストケースに記載された前記パラメータ値を定めた組合せに基づいて、生成されるテスト実行可能な具体値を格納したテスト実行のためのテストデータと、前記テストデータによるテスト実行結果を記憶し、
前記テストケースからテストデータを生成するステップと、
前記テストデータを用いてテスト実行を行い、その実行結果を収集するステップとを有することを特徴とする請求項８記載のテスト支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テスト支援装置、および、テスト支援方法に係り、特に、外部仕様からテストケースを生成して、ソフトウェアのテストにおける労力を軽減するのに好適なテスト支援装置、および、テスト支援方法に関する。
【背景技術】
【０００２】
ソフトウェア開発において、開発したソフトウェアが期待通り動作するかを確認するためのテストは、ソフトウェアの品質を確保するために重要な意義を有する。テストを実施する際には、ソフトウェアの設計段階に作成された仕様書を分析し、テストを実施するための具体的な入力データや対応する期待結果を作成するテスト設計をおこなうのが一般的である。このようなテスト設計においては、テスト設計における設計仕様を分析し、関連する入力情報を漏れなく抽出して、テストをする際のテストケースを生成することが必要である。
【０００３】
そこで、例えば、特許文献１には、テストケースを生成する際に、設計仕様書とテスト仕様書に記載する項目と、設計仕様書とテスト仕様書の項目間の対応関係を予め定めておくことにより、テスト設計段階における設計仕様書からの抽出漏れを防ぐ方法が開示されている。
【０００４】
また、特許文献２にはソフトウェアの仕様から、仕様上出力する値を網羅する値を出力するため、仕様上出力する値が、入力の結果、出力が期待される期待出力値に含まれるか否かを確認して、仕様上出力する値とそれに対応するテスト入力値をテストケースとして生成する技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−７７１７３号公報
【特許文献２】特開２０１４−１８６４０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
テスト実施時には、ソフトウェア開発者は、一般に、テスト対象となるソフトウェアそのもの、あるいは、構成モジュール、関数にかかわる入力情報(パラメータ)を分析し、テストデータを作成するが、テスト対象が取り得る全てのテストデータの組合せをテストすることは困難である。そのため、各パラメータが取り得るパターンの分析や、パラメータ間の関係性を考慮した上で、適切なクラス分けをおこなう必要がある。また、設計仕様書には、必ずしもテスト実施時に必要な全ての情報が、記述されるとは限らない。しかしながら、特許文献１や特許文献２では、テスト設計段階での追加入力の必要性にどのような対処するか、あるいは、どのようにパラメータの分析をおこなうかについては、開示されていない。
【０００７】
本発明は、上記問題点を解決するためになされたもので、設計仕様書を分析し、テスト設計段階で必要となる情報を抽出するとともに設計仕様書から得られるテスト対象の入力情報から、入力パターンを分析して、テスト実行に必要なテストケースを生成して、テスト実施者の労力を軽減することを可能とするテスト支援装置、および、テスト支援方法を提供することにある。
【課題を解決するための手段】
【０００８】
上記問題点を解決するために、本発明に係るテスト支援装置は、ＣＰＵと、記憶部と、表示部を有し、記憶部に格納されたプログラムを実行することにより機能を実現するテスト支援装置であって、記憶部は、外部仕様と、分析済みパラメータ情報と、テストケース生成情報と、テストケースを記憶し、外部仕様と分析済みパラメータ情報とは、テスト対象のソフトウェアプログラムで記述されるパラメータのパラメータ情報と、そのパラメータのパラメータ間の関係を表す制約条件とを保持し、外部仕様と分析済みパラメータ情報のパラメータ情報は、そのパラメータの型情報と、パラメータ名が取り得るパターン情報とを含み、テストケース生成情報は、テスト対象のソフトウェアプログラムで記述されるパラメータのパラメータ情報と、そのパラメータのパラメータ間の関係を表す制約条件とを保持し、テストケース生成情報のパラメータ情報は、そのパラメータの型情報と、パラメータ名が取り得る候補値とを含み、テストケースは、テスト対象のソフトウェアプログラムで記述されるパラメータのパラメータ値を定めた組合せを、一つ以上保持する。そして、外部仕様のパラメータ情報のパラメータの型情報、パターン情報、制約条件から、パラメータのクラス分割をおこない、分析済みパラメータ情報を生成し、分析済みパラメータ情報のパラメータ情報のパラメータの型情報、パターン情報、制約条件から、パラメータのクラス分割をおこない、テストケース生成情報を生成し、テストケース生成情報のパラメータ情報のパラメータの型情報と、制約条件と、パラメータ情報の候補値とから、パラメータ値を定めた組合せを生成し、テストケースを生成する。
【発明の効果】
【０００９】
本発明によれば、設計仕様書を分析し、テスト設計段階で必要となる情報を抽出するとともに設計仕様書から得られるテスト対象の入力情報から、入力パターンを分析して、テスト実行に必要なテストケースを生成して、テスト実施者の労力を軽減することを可能とするテスト支援装置、および、テスト支援方法を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】テスト支援装置の機能構成とデータフローを示す図である。
【図２】テスト支援装置のハードウェア構成図である。
【図３】被テストプログラムのモデルを示す模式図である。
【図４】テスト支援装置１００による外部仕様の入力からテストケース生成までの処理を示すフローチャートである。
【図５】外部仕様の一例を示す図である。
【図６】分析済みパラメータ情報の一例を示す図である。
【図７】分析済みパラメータ情報の補完入力画面を示す図である。
【図８】テストケース生成情報の一例を示す図である。
【図９】テストケースの一例を示す図である。
【図１０】外部仕様分析処理Ｓ３０２の詳細な処理を示すフローチャートである。
【図１１】テストケース生成情報生成処理Ｓ３０４の詳細な処理を示すフローチャートである。
【図１２】分析済みパラメータ情報からテストケース生成情報を生成する例を示す図である。
【図１３】テストケース生成情報生成処理Ｓ３０５の詳細な処理を示すフローチャートである。
【図１４】外部仕様４００、分析済みパラメータ情報５００、テストケース生成情報６００のデータ構造の概略をＵＭＬ（Unified  Modeling  Language）のクラス図ライクに記述した図である。
【図１５】テストケース生成処理に必要となる定義情報として、基本型情報定義と個別型情報定義を示した図である。
【図１６】生成したテストケースから、テスト実行までの処理を説明するフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明の一実施形態に係るテスト支援装置について、図１ないし図１６を用いて説明する。
【００１２】
先ず、図１および図２を用いてテスト支援装置の構成について説明する。  
図１は、テスト支援装置の機能構成とデータフローを示す図である。  
図２は、テスト支援装置のハードウェア構成図である。
【００１３】
テスト支援装置１００は、図１に示されるように、各々のデータを格納する外部仕様格納部１０１、分析済みパラメータ情報格納部１０２、テストケース生成情報格納部１０３、テストケース格納部１０４、型情報定義格納部１０５、テストデータ格納部１０６、実行結果格納部１０７の格納部と、解析部１１１、変換部１１２、テストケース生成部１１３、テストデータ生成部１１４、テスト実行部１１５、および、ユーザからの情報を入力したり、各格納部の格納情報を表示する入出力部１１０から構成される。  
なお、各格納部で格納される情報の詳細は、後に説明する。
【００１４】
解析部１１１は、型情報定義格納部１０５に格納されている型情報の定義と外部仕様格納部１０１に格納されている外部仕様を解析して、分析済みパラメータ情報を生成する機能部である。変換部１１２は、型情報定義を参照し、分析済みパラメータ情報を変換して、テストケース生成情報を生成する機能部である。テストケース生成部１１３は、型情報定義を参照し、テストケースを生成する機能部である。テストデータ生成部１１４は、テストケースとテストケース生成情報より、テストデータを生成する機能部である。テスト実行部１１５は、テストデータを入力し、被テスト対象のプログラムを実行することにより、実行結果のデータを生成し、実行結果格納部１０７に格納する機能部である。
【００１５】
テスト支援装置１００は、図２に示されるように、一般的なコンピュータ（電子計算機）の構造で実現することができる。テスト支援装置１００は、ＣＰＵ（Central Processing Unit）２０１、主メモリ２０２、表示Ｉ／Ｆ（Interface）２０３、入出力Ｉ／Ｆ２０４、補助記憶Ｉ／Ｆ２０５がバスにより接続された構成である。
【００１６】
ＣＰＵ２０１は、コンピュータの各部の制御や演算処理をするプロセッサであり、外部記憶装置であるＨＤＤ２１０から各種プログラムを主メモリ２０２にロードし、所定のプログラムを実行することにより上述の各処理部を実現する。主メモリ２０２は、半導体記憶装置からなる記憶装置であり、実行されるプログラムやワークデータを記憶する。表示Ｉ／Ｆ２０３は、ＬＣＤ（Liquid Crystal Display）などの表示装置２４０を接続する部分である。入出力Ｉ／Ｆ２０４は、キーボード２４１やマウス２４２、プリンタなどを接続し、インタフェース処理をおこなう部分である。補助記憶Ｉ／Ｆ２０５は、ＨＤＤ（Hard Disk Drive）２１０やＳＤＤ（Solid State Drive）などの外部記憶装置を接続し、インタフェース処理をおこなう部分である。
【００１７】
ＨＤＤ２１０には、テスト支援プログラム２２０とテスト支援ＤＢ（Data Base）２３０が格納されている。
【００１８】
テスト支援プログラム２２０は、入出力プログラム２２１、解析プログラム２２２、変換プログラム２２３、テストケース生成プログラム２２４、テストデータ生成プログラム２２５、テスト実行プログラム２２６からなり、各々、図１で説明した入出力部１１０、解析部１１１、変換部１１２、テストケース生成部１１３、テストデータ生成部１１４、テスト実行部１１５に対応している。
【００１９】
また、テスト支援ＤＢには、外部仕様４００、型情報定義（基本型情報定義１３００、個別型情報定義１３１０：後述）、分析済みパラメータ情報５００、データケース生成情報６００、テストケース８００、テストデータ９００、実行結果１０００が格納されている。
【００２０】
ＣＰＵ２０１は、主メモリ２０２にロードされたプログラムを実行することにより、入出力部１１０、解析部１１１、変換部１１２、テストケース生成部１１３、テストデータ生成部１１４、テスト実行部１１５の各処理部をプロセスとして具現化する。
【００２１】
上記所定のプログラムは、予めＨＤＤ２１０などの外部記憶装置に格納されていてもよいし、コンピュータが利用可能な可搬性を有する外部記憶媒体から読取装置を介して必要に応じて読み出されてもよい。あるいは、コンピュータが利用可能なネットワークまたはネットワーク上の通信装置を介して、接続された他のコンピュータから必要に応じてダウンロードされて外部記憶装置に格納されるものであってもよい。
【００２２】
次に、具体的なテスト支援装置の処理について説明する前に、図３を用いて被テストプログラムのモデルについて簡単に説明する。  
図３は、被テストプログラムのモデルを示す模式図である。
【００２３】
被テストプログラムは、鉄道進路制御の設備制御をイメージしたモデルであり、鉄道の運行制御で列車の出発可否を、現在の在線位置や信号機の状態などの状況に応じて判断するプログラムである。１Ｒは制御対象の信号機であり、２Ｒ、３Ｒは、それぞれ１Ｒに競合する信号機を表している。また、ＳＴ、１Ｔ、…、４Ｔは、在線上の位置を表す軌道回路である。図３で「閉そく」とされている２Ｔ、３Ｔ、４Ｔは、信号機１Ｒが侵入を許可した場合に列車が進入可能な範囲を示している。
【００２４】
実際の設備制御では、より細かな条件のもとで、関数の処理設計、実装がおこなわれる。以下の説明では、本実施形態では、簡易的な例を用いて説明するが、具体的に実装された関数や処理設計に対して適用してもよい。
【００２５】
また、上記の設備制御に限らず、例えば金融や銀行の業務システムの構成モジュールであってもよいし、あるいは、システムの動作環境の組合せ(例えば、ＯＳ（Operation System）やブラウザ）などの設定情報であってもよい。
【００２６】
次に、図４を用いてテスト支援装置１００による外部仕様の入力からテストケース生成までの処理について説明する。  
図４は、テスト支援装置１００による外部仕様の入力からテストケース生成までの処理を示すフローチャートである。
【００２７】
テスト支援装置１００は、先ず、ユーザ入力３１１を受け取り、外部仕様として外部仕様を外部仕様格納部１０１に格納する（Ｓ３０１）。なお、外部仕様の入力は、例えば、専用の設計ツールを用いてＳ３０１でおこなってもよいし、外部で作成された設計書を、例えば、ファイル入力等で取り込んでもよい。
【００２８】
次に、テスト支援装置１００の解析部１１１は、外部仕様分析処理をおこない（Ｓ３０２）、分析済みパラメータ情報補完画面（後述）に、解析された分析済みパラメータ情報を提示して、ユーザ入力３１２を受取る。それにより、補完された分析済みパラメータ情報を分析済みパラメータ情報格納部１０２に格納する（Ｓ３０３）。
【００２９】
それに基づいて、テスト支援装置１００の変換部１１２は、テストケース生成情報を生成する（Ｓ３０４）。テストケース生成情報は、テストケース生成情報格納部１０３に格納される。
【００３０】
次に、テスト支援装置１００のテストケース生成部１１３は、テストケース生成情報よりテストケースを生成する（Ｓ３０５）。生成されたテストケースは、テストケース格納部１０４に格納される。
【００３１】
次に、図５ないし図９を用いてテスト支援装置で扱うデータ構造について説明する。  
図５は、外部仕様の一例を示す図である。  
図６は、分析済みパラメータ情報の一例を示す図である。  
図７は、分析済みパラメータ情報の補完入力画面を示す図である。  
図８は、テストケース生成情報の一例を示す図である。  
図９は、テストケースの一例を示す図である。
【００３２】
外部仕様４００は、ソフトウェアの外部仕様をパラメータとそれに関する制約条件で表したデータであり、図５に示されるように、外部仕様（パラメータ情報）４０１と、外部仕様（制約条件）４１０から構成される。
【００３３】
外部仕様（パラメータ情報）４０１は、設計対象となるソフトウェアの構成モジュールや関数にかかわるパラメータの情報を記述するためのテーブルであり、ＩＤ欄４０２、パラメータ名欄４０３、型欄４０４、ＩＯ欄４０５、配列欄４０６、パターン欄４０７から構成される。
【００３４】
ＩＤ欄４０１は、パラメータの識別子を示す欄である。パラメータ名欄４０３は、パラメータの名称を記載する欄である。型欄４０４は、パラメータの型（タイプ）情報を記載する欄である。ＩＯ欄４０５は、パラメータが入力、出力の何れか、あるいは、その双方で利用されるかを表す欄である。配列欄４０６は、そのパラメータが配列構造か、否かを示す欄である。パターン欄４０７は、パラメータが取り得るバリエーションを記載する欄である。
【００３５】
さらに、外部仕様（制約条件）４１０は、複数パラメータにまたがる制約条件を記載するためのテーブルであり、図５に示されるように、ＩＤ欄４１１、制約条件制約条件欄４１２から構成される。
【００３６】
ＩＤ欄４１１は、制約条件を識別するための識別子を示す欄である。制約条件欄４１２は、制約条件本体を記載するための欄である。
【００３７】
制約条件本体の記述には、簡易的な文法が定められている。条件による実行を定める文は、ｉｆ（条件）ｔｈｅｎ（実行）とする。ここで、ｉｆ，ｔｈｅｎは、予約語である。パラメータの値は、＄｛パラメータ名｝で表す。また、条件の部分には、＝，ｏｒ，ａｎｄなどの予約語により論理演算が可能になっている。
【００３８】
また、図５のパラメータ名欄４０１では、パラメータ欄にインデントされた項目があるが、これは、パラメータ間の親子関係を表している。例えば、“閉そく”、“競合信号機”は、“監視対象”より、一段下げた列に記載されている。これは、“閉そく”、“競合信号機”が、“監視対象”の子パラメータであることを示している。このような、パラメータ間の親子関係は、例えば、プログラム実装上では、構造体やクラスのメンバ変数として実装すればよい。
【００３９】
型欄４０４は、各パラメータが持つ型の種別を示している。型情報には、上記パラメータがどのような値を取り得るかを示し、整数や実数、時刻や、ソフトウェアごとに定められた固有の型情報を入力する。型情報の定義については、図１４、図１５を用いて、後述する。なお、本実施形態では、型情報に“監視対象”、“在線状態”などの名称を用いているが、Ｃ言語やＪＡＶＡ（登録商標）言語等のプログラミング言語で用いられる型“ｉｎｔ”，“ｃｈａｒ”などを用いてもよい。
【００４０】
ＩＯ欄４０５には、パラメータが設計対象に対し、入力情報として作用するか、出力情報として作用するか、あるいは、その双方かを記載する。図５では、“Ｉ”（Ｉｎｐｕｔ：入力）、“Ｏ”（Ｏｕｔｐｕｔ：出力）を表しており、入出力双方で利用する場合には、例えば、“Ｉ/Ｏ”と記載すればよい。
【００４１】
また、パラメータの格納先や参照先など、ＩＯ以外の情報を付与する場合には、単に“Ｉ”、“Ｏ”などと記載するだけでなく、付与したい情報に応じた識別子を設定してもよい。たとえば、実装された関数を対象とする場合、関数のパラメータとして渡す情報、関数内で参照する外部（グローバル変数）を区別したい場合には、例えば“（Ｐ）Ｉ”、“（Ｇ）Ｉ”などと記載し、ＩＯ情報欄に参照先の種別情報がわかるように記載してもよい。
【００４２】
配列欄４０５は、パラメータが配列型か否かを示すために用いる情報であり、“○”が記載された項目は、そのパラメータが配列であることを示している。なお、固定長配列など、予め配列の長さが決められている場合には、配列欄４０５にその値を記載してもよい。
【００４３】
パターン欄４０７は、各パラメータがとりうる値のバリエーションを“、”区切りで記載する。例えば、“閉そく”という名称のパラメータには、パターン欄４０７に、“未在線、｛進入中、収容中｝”が記載されている。これは、“閉そく”の取りうる候補値のパターンとして、“未在線”と“｛進入中、収容中｝”のいずれかの場合があり得ることを示している。なお、“｛進入中、収容中｝”は、“｛｝”内に記載された候補値（この場合は“進入中”と“収容中”）のうち、一つの値をとることを示している。すなわち、“閉そく”は、入力パターンとして、“未在線”、“進入中”、“収容中”のいずれかの値をとり、外部仕様４００では、“未在線”、“｛進入中、収容中｝”の二つのクラスに分割されることを示しているここで、「クラス」というのは、ソフトウェア開発の概念で使われる「同値クラス」であり、ソフトウェア動作として出力が同じようになるとみなせるパラメータのまとまりである。すなわち、“進入中”、“収容中”は、いずれの値をとってもテスト時の出力には影響しないことを意味する。
【００４４】
“競合信号機”や“列番”に記載された“＠Ａｎｏｔｈｅｒ”、“＠Ｖａｌｉｄ”や“＠Ｉｎｖａｌｉｄ”は、それぞれ、“その他の値”、“有効な値”、“無効な値”を表す予約語であり、外部仕様の設計段階では決定できない場合に、テストにおけるパターンを記述するために用いる。
【００４５】
その他、パターン欄４０７には、プログラム実装上のＮＵＬＬ値を表す“＠Ｎｕｌｌ”や配列の長さのバリエーションを表するための“＠Ｌｅｎｇｔｈ”、あるいは、任意の値をとることを示す“＠Ａｎｙ”など、事前に予約語を定めることで、所定の情報を記載できるようにしてもよい。
【００４６】
先ず、ＩＤ欄３のパラメータ名４０３が“競合信号機”のパターン欄４０７の表記の“ａｌｌ  ＄ｘ  ａｒｅ  Ｒ”は、配列である競合信号機４０３の全ての要素の値が、Ｒ（赤信号）であることを意味している。
【００４７】
また、ＩＤ欄８のパラメータ名４０３が“在線時間”のパターン欄４０７のように、等号、不等号によりとり得る範囲を表すことも可能である。
【００４８】
さらに、ＩＤ欄８のパラメータ名４０３が“出力”のパターン欄４０７のＴｒｕｅ，Ｆａｌｓｅは、真偽を表す予約語である。
【００４９】
外部仕様（制約条件）４１０内の制約条件欄４１２欄には、パラメータ間の制約関係を記載する。図５の例（ＩＤ欄４１１が“１”の場合）では、対象列車の在線位置の長さが“１”でないとき、対象列車の在線時間は“０”であることを示している。
【００５０】
なお、”.”は、パラメータ名欄４０３の説明のときに言及したパラメータ間の親子関係を示しており、例えば、“対象列車．在線位置．＠Ｌｅｎｇｔｈ”は、“対象列車”の子パラメータである“在線位置”の“長さ”であることを示している。
【００５１】
次に、図６に示される分析済みパラメータ情報５００は、外部仕様４００を解析した結果得られる情報であり、分析済みパラメータ情報（パラメータ情報）５０１と、分析済みパラメータ情報（制約条件）５１０から構成される。
【００５２】
分析済みパラメータ情報（パラメータ情報）５０１は、外部仕様（パラメータ情報）４０１と同様に、ＩＤ欄５０２、パラメータ名欄５０３、型欄５０４、ＩＯ欄５０５、配列欄５０６、パターン欄５０７から構成される。
【００５３】
分析済みパラメータ情報５００は、外部仕様４００と同様のデータ構造を有するが、テスト支援装置は、図４の外部仕様分析処理Ｓ３０３の処理結果として、外部仕様４００からテストケース生成時に必要な情報の抽出し、クラス分割が不十分なパラメータのクラス分割がおこなわれた結果を、図７に示されたパラメータ情報補完画面を表示して、ユーザにパラメータ情報の補完入力を求める。パラメータ情報補完画面では、表形式でパラメータ情報を表示し、ユーザに補完を求める欄に太枠を表示したり、あるいは、セルの背景色を変える、セルを点滅表示させるなどにより、ユーザに入力を促す。
【００５４】
なお、図６に示された分析済みパラメータ情報５００では、パラメータ情報の補完入力を求める部分は、太枠で表示している。
【００５５】
例えば、図６の分析済みパラメータ情報５００では、図５の外部仕様４００に対し、ＩＤ欄５０２の“３ａ”、“６ａ”のパラメータ名“＠Ｌｅｎｇｔｈ”のレコードが追加されている。これは、対応する親要素の“競合信号機”、“在線位置”が配列情報であるため、テスト実行時には、配列の長さを特定し、具体的なデータを割り当てる必要があるため、ユーザに入力が促されるものである。
【００５６】
また、ＩＤ欄５０２が“１１”の“現在時刻”がパラメータ名に追加されているが、これらは、外部仕様（制約条件）４１０より、パラメータ名欄４０７に存在しないパラメータの記述が＄｛現在時刻｝として制約条件に記載されているためである（ＩＤ欄４１１が“２”の制約条件４１２を参照）。
【００５７】
また、例えば“＠Ａｎｏｔｈｅｒ”（“競合信号機”のパラメータ欄）等の抽象的なパターンが記述された場合や空欄（“在線位置”等）の場合に、パターン入力、あるいは、具体的な候補値の割当てが必要であることを示しており、入力された値は、｛｝の部分に反映される。
【００５８】
そして、テスト支援装置１００は、ユーザが具体値、あるいは、データパターンの入力を行った結果に対し、テストケース生成情報生成処理（Ｓ３０４）を実行する。
【００５９】
また、図６の分析済みパラメータ情報（パラメータ情報）５０１のパラメータが“在線時間”のレコードのパターン欄５０７は、図４の外部仕様４００の“在線時間”のレコードのパターン欄４０７の記述が異なっている。これは、外部仕様４００のパラメータのクラス分割が不十分である場合に、外部仕様分析処理Ｓ３０２によって、クラス分けが補充された結果である。
【００６０】
以上の説明では、分析済みパラメータ情報５００が生成された段階（Ｓ３０２の後）で具体値の入力を促しているが、具体値の入力は必須ではない。この場合、Ｓ３０４のテストケース生成処理までは抽象的なパターン名（＠Ｖａｌｉｄ）が用いられる。そのため、テスト実行前（テストケース生成後）に、実行可能な具体値の割り当てをおこなえばよい。
【００６１】
次に、図８に示されるテストケース生成情報６００は、ユーザにより情報を補完された分析済みパラメータ情報５００を変換して得られる情報であり、テストケース生成情報（パラメータ情報）６０１と、テストケース生成情報（制約条件）６１０から構成される。テストケース生成情報６００は、次の工程であるテストケース８００を生成するための元データとなる情報である。
【００６２】
テストケース生成情報６０１（パラメータ情報）は、ＩＤ欄６０２、パラメータ名欄６０３、型欄６０４、ＩＯ欄６０５、候補値欄６０６から構成される。
【００６３】
ＩＤ欄６０２、パラメータ名欄６０３、型欄６０４、ＩＯ欄６０５は、それぞれ分析済みパラメータ情報（パラメータ情報）５０１のＩＤ欄５０２、パラメータ名欄５０３、型欄５０４、ＩＯ欄５０５、配列欄５０６、パターン欄５０７に対応する。候補値欄６０６は、分析済みパラメータ情報５００に基づいて、パラメータが取り得る候補値を格納する欄である。
【００６４】
また、テストケース生成情報（制約条件）６１０は、ＩＤ欄６１１、制約条件欄６１２から構成される。
【００６５】
ＩＤ欄６１１は、制約条件の識別情報を一意に特定する識別子を示す欄である。制約条件欄６１２は、テストケース生成時に用いるパラメータ間の制約条件を記載する欄である。
【００６６】
上記のごとく、図８に示したテストケース生成情報６００は、外部仕様４００、および、分析済みパラメータ情報５００と同様の書式を有している。しかしながら、テストケース生成情報６００では、パラメータ名欄６０３は、外部仕様４００、分析済みパラメータ情報５００とは異なり、階層化されておらず、代わりに、“．”を用いて、パラメータ間の親子関係（クラスのメンバ変数など）を表している。
【００６７】
また、例えば、ＩＤ欄６０２が“６−１”“６−２”のパラメータ名が“在線位置”というパラメータが配列であるために、配列の要素ごとに値を割り振って、配列の長さ分のパラメータを生成している。この例では、“在線位置”に対し、二つ分のパラメータを生成しているが、これは、ユーザ入力３１１による分析済みパラメータ情報の入力（Ｓ３０４）により、“＠Ｌｅｎｇｈｔｈ”として最大で“２”を持つパターンが入力された場合を示している。
【００６８】
以上のテストケース生成情報への変換は、テストケース生成処理Ｓ３０５において、各パラメータを階層化していない情報として扱うことに対応するため、また、配列データに対し、配列の要素ごとに具体的なデータ割当てをおこなうための処理である。なお、“競合信号機”というパラメータ名のパラメータも配列であるが、型情報の違い（集合型であるため）により、本例では長さ分のデータを生成しない。
【００６９】
また、テストケース生成情報（制約条件）６１０には、ＩＤ（ＩＤ欄６１１）が“３”の制約条件等が追加されている。これらは、パラメータの親子関係や、配列の長さを考慮した適切なテストケース生成をおこなうための制約条件である。例えば、親子関係を有するパラメータに対し、親パラメータがＮＵＬＬ値の場合に、子パラメータが値を持たないようにする、あるいは同様に、配列の長さ情報にバリエーションがある場合に、長さ以上の配列の要素に値を持たせないようにする（例えば、配列の長さが“１”，“２”の二つの値をとる場合に、長さ“１”の場合に２番目の配列データに値を割りあてないようにする）、などの無効なテストケースが生成されないようにするためである。
【００７０】
次に、図９に示されるテストケース８００は、テストケース生成処理Ｓ３０５の結果得られるデータであり、実際のソフトウェアテストの元データとなるものである。テストケース生成処理Ｓ３０５では、テストケース生成情報６００から入力パラメータの候補値の組合せを生成することにより、テストケースの生成をおこなう。
【００７１】
テストケース８００は、図９に示されるように、ＩＤ欄８０１、パラメータ名欄８０２、型欄８０３、ＩＯ欄８０４、テストケース欄８０５から構成される。
【００７２】
ＩＤ欄８０１は、パラメータの識別子を示す欄である。パラメータ名欄８０２は、パラメータの名称を記載する欄である。型欄８０３は、パラメータの型情報を記載する欄である。ＩＯ欄８０４は、パラメータが入力か出力かをあらわす欄である。テストケース欄８０５は、各々のテストケース（パラメタ毎にとる値を定めたもの）を記載する欄である。
【００７３】
例えば、テストケース欄８０５のサブ１欄には、パラメータ名“競合信号機”のパラメータの値が、＠Ｎｏｔｎｕｌｌであり、パラメータ名“監視対象．閉そく”のパラメータの値が、未在線であり、…ということを意味する。
【００７４】
次に、図１０を用いて外部仕様分析処理Ｓ３０２の詳細について説明する。  
図１０は、外部仕様分析処理Ｓ３０２の詳細な処理を示すフローチャートである。
【００７５】
外部仕様分析処理Ｓ３０２は、前述の通り、解析部１１１において実行される処理であった。
【００７６】
先ず、まず、外部仕様（パラメータ情報）４０１を対象に、全てのパラメータを順次分析し、パラメータ単位の分析処理（Ｓ９０２）、パラメータ単位のクラス分割処理（Ｓ９０３）、パターン情報の分析処理（Ｓ９０４）をおこなう（Ｓ９０１〜Ｓ９０５）。
【００７７】
ここで、パラメータ単位の分析処理（Ｓ９０２）では、配列欄５０６に“○”が記載されている場合（可変長配列である場合）に、配列の長さ情報を表す“＠Ｌｅｎｇｔｈ”をパラメータ情報に追加する。また、ＩＯ欄４０５にＩ／Ｏ（入力と出力双方で用いるパラメータ）の場合に、当該パラメータを“Ｉ”（入力）と“Ｏ”（出力）の二つのパラメータに分割する。
【００７８】
また、パラメータ単位のクラス分割処理（Ｓ９０３）では、パターン欄４０７に記載されたパターンのクラス分割が不十分である場合に、型欄４０４に記載された型情報に基づき、クラス分割処理をおこなう。
【００７９】
さらに、パターン情報の分析処理（Ｓ９０４）は、パターン欄４０７内に、例えば“＠Ｖａｌｉｄ”、“＠Ｉｎｖａｌｉｄ”などの抽象的なパターンが記述されているか否かの分析をおこなう。
【００８０】
次に、外部仕様（制約条件）４１０を分析し、制約条件欄４１２を順次読込み、外部仕様（パラメータ情報）４０１に記載されていないパラメータが記述されている場合には、その項目の抽出をおこなう（Ｓ９０７）（Ｓ９０６〜Ｓ９０８）。
【００８１】
最後に、Ｓ９０８までの処理結果から、分析済みパラメータ情報５００として整形し、生成する(Ｓ９０９)。その際には、Ｓ９０４で抽出されたパラメータのパターン欄５０７、Ｓ９０７で追加されたパラメータ、および、パターン欄５０７に記述がない欄を、補完を要するデータとして認識し、テスト支援装置１００は、図７に示したパラメータ情報補完画面を表示するときには、強調表示をおこなう。
【００８２】
次に、図１１および図１２を用いてテストケース生成情報生成処理Ｓ３０４の詳細について説明する。  
図１１は、テストケース生成情報生成処理Ｓ３０４の詳細な処理を示すフローチャートである。  
図１２は、分析済みパラメータ情報からテストケース生成情報を生成する例を示す図である。
【００８３】
テストケース生成情報生成処理Ｓ３０４は、テスト支援装置１００の変換部１１２で実行される処理であり、分析済みパラメータ情報５００から、テストケース生成情報６００を生成する処理であった。
【００８４】
先ず、テストケース生成情報生成処理Ｓ３０４では、全てのパラメータを順次読込み、パラメータ情報の変換（Ｓ１００２)、配列データの生成（Ｓ１００３）、パラメータ単位のクラス分割処理（Ｓ１００４）、および、制約条件の追加（Ｓ１００５）をおこなう（Ｓ１００１〜Ｓ１００６）。
【００８５】
パラメータ情報の変換（Ｓ１００２）では、パラメータの親子間の関係から、パラメータ名の変換をおこなう。すなわち、親パラメータから当該パラメータまでを“．”でつなぐことよりテストケース生成情報６００のパラメータ名に変換する。
【００８６】
次に、親子間の関係からパターンに候補値の追加をおこなう。具体的には、子パラメータが何らかの値を持つことが明らかな場合に、ＮＵＬＬ値でないことをあらわす“＠ＮｏｔＮｕｌｌ”を追加する。また、親パラメータが“＠Ｎｕｌｌ”などの値を持たないパターンが含まれている場合、当該パラメータが値を持たないことを示す“＠Ｖａｉｎ”を追加する。次に、配列データの生成（Ｓ１００３）では、パラメータが配列データである場合に、パターン欄５０７に与えられた長さの最大値分、パラメータを生成する。
【００８７】
パラメータ単位のクラス分割処理（Ｓ１００４）は、外部仕様分析処理Ｓ３０２における、パラメータ単位のクラス分割処理（Ｓ９０３）と同じである。このテストケース生成情報生成処理においてもクラス分割処理がおこなわれるのは、ユーザ入力３１１による分析済みパラメータ情報への入力（Ｓ３０４）のときに、パターン欄５０７に追加入力されたパターンに対し、クラス分割処理をおこなうためである。
【００８８】
制約条件の追加（Ｓ１００５）では、親パラメータが“＠Ｎｕｌｌ”などの値を持たない場合に、子パラメータが値を持たないことを表す“＠Ｖａｉｎ”を取ること、配列の長さ以上の配列要素に対し、当該パラメータが“＠Ｖａｉｎ”となることを、制約条件に追加する。
【００８９】
図８に示されるテストケース生成情報（制約条件）６１０の例では、ＩＤ欄６１１が３のレコードに対して、“在線位置”の長さが“１”のときに、在線位置の２番目の配列要素“対象列車．在線位置［１］”が“＠Ｖａｉｎ”となる制約条件を追加した例を示している。
【００９０】
次のＳ１００７からＳ１００９の処理では、前記Ｓ１００１からＳ１００６までの処理結果に合わせ、制約条件の変換をおこなう。本処理では、配列データに対して制約条件が記述されている場合に、配列データ分の制約条件の複製などをおこなう。
【００９１】
次に、パラメータ間のクラス分割処理をおこなう（Ｓ１０１０）（詳細は、後述）。
【００９２】
最後に、分析済みパラメータ情報５００から変換の結果、得られた情報をテストケース生成情報６００として出力する（Ｓ１０１１）。
【００９３】
Ｓ１０１０のパラメータ間のクラス分割処理では、分析済みパラメータ情報５００のパターン５０７に基づいて、テストケース生成情報(パラメータ情報)６０１の候補値欄６０６の候補値が生成できるようにパラメータの置き換えをおこなう。以下、その具体例を、図１２のケースを例にとり説明する。
【００９４】
図１２に示される例におけるパラメータ間のクラス分割処理（Ｓ１０１０）では、分析済みパラメータ情報７００のパラメータＰ０の子パラメータであるＰ０１、Ｐ０２、Ｐ０３、Ｐ０４に対し、分析済みパラメータ情報(制約条件)７０２に記載された情報に基づいて、テストケース生成情報７１０を生成する例を示している。
【００９５】
図１２に示されるように、分析済みパラメータ情報(制約条件)７０２のパターン欄に値が定義されていない。この場合、分析済みパラメータ情報(制約条件)７０２を分析し、関連する制約条件を抽出し、制約条件からテストケース生成用に擬似パラメータ（図１２のＡ，Ｂ，Ｃ）を生成し、分析済みパラメータ情報(制約条件)７０２から得られるパターン、および、パラメータ間の制約関係を、それぞれテストケース生成情報（パラメータ情報）７１１の擬似パラメータの候補値欄と、テストケース生成情報（制約条件）７１２の制約条件欄に追加する。
【００９６】
図１２に示される例では、分析済みパラメータ情報(制約条件)７０２の最初に、＄｛Ｐ１｝＋＄｛Ｐ３｝＜１０という条件式が存在するが、パラメータ名Ｐ０のレコードのパターン欄、パラメータ名Ｐ３のレコードのパターン欄には値が定義されていない。そこで、テストケース生成情報（制約条件）７１２のＩＤ欄が２のレコードに示されるように、新しいパラメータとして、Ａ＝Ｐ０．Ｐ１＋Ｐ０．Ｐ３を生成する。これにより、問題としている条件式に等価な条件式は、Ａ＜１０となり、Ａに対するテストケース生成情報における候補値としては、＜１０の場合、≧１０の場合が生成される（テストケース生成情報（パラメータ情報）７１１のＩＤ欄が１のレコード）。同様に、Ｂ＝Ｐ０．Ｐ１＋Ｐ０．Ｐ２、Ｃ＝Ｐ０．Ｐ２＋Ｐ０．Ｐ３が導入され、条件式にあったように、テストケース生成情報における候補値が生成される。
【００９７】
なお、上記のように、テストケース生成情報の生成時にパラメータに具体値が設定されていない場合には、テストケース生成前に、警告メッセージを出力する等、事前にユーザにテストケース生成の実施要否をたずねるなどしてもよい。また、上記の処理でも、候補値が未定となるパラメータが存在する場合には、エラーメッセージを表示し、処理を中止する、あるいは、警告メッセージを表示したうえで、生成可能な範囲でテストケースの生成を行ってもよい。
【００９８】
次に、図１３を用いてテストケース生成処理Ｓ３０５の詳細について説明する。
図１３は、テストケース生成情報生成処理Ｓ３０５の詳細な処理を示すフローチャートである。
【００９９】
テストケース生成処理Ｓ３０５は、テスト支援装置１００のテストケース生成部１１３において実行される処理であった。
【０１００】
テストケース生成処理３０５では、テストケース生成情報（パラメータ情報）６０１より、ＩＯ欄６０５が入力（“Ｉ”）であるパラメータごとに候補値を選び、パラメータの候補値の組合せを生成する（Ｓ１１０１）。次に、選んだパラメータの候補値の組合せが、テストケース生成情報（制約条件）６１０の制約条件を満たすか否かをチェックする（Ｓ１１０２）。制約条件を満たす場合（Ｓ１１０３：満たす）、Ｓ１１０１で生成したパラメータの候補値の組合せをテストケースとして登録し、テストケースの生成基準に準拠するか否かのチェックをおこなう（Ｓ１１０４）。
【０１０１】
生成されたテストケース群がテストケース基準を満たす場合（Ｓ１１０５：満たす）には、テストケース８００を生成する（Ｓ１１０６）。
【０１０２】
制約条件を満たさない場合（Ｓ１１０３：満たさない）、生成されたテストケース群がテストケース基準を満たさない場合（Ｓ１１０５：満たさない）には、Ｓ１１０１に戻り、再度、パラメータの候補値の組合せを生成する。
【０１０３】
ここで、制約条件のチェックは、例えば、ＳＡＴ（SATisfiability problem）  ＳｏｌｖｅｒやＳＭＴ（Satisfiability Modulo Theories）  Ｓｏｌｖｅｒなどを用いて制約条件を満たすかのチェックが可能である。
【０１０４】
テストケースの生成基準は、生成されたテストケースの数や、パラメータの候補値の組合せの網羅率など、テストの設計基準に応じて予め設定しておけばよい。なお、パラメータの候補値の組合せを考慮したテストケース基準として、ｎ−ｗｉｓｅカバレッジが知られている。ｎ−ｗｉｓｅカバレッジを満たすテストケース生成方法をｎ−ｗｉｓｅ法と呼び、様々なテストケース生成方法が知られている。図１３に示したテストケース生成処理Ｓ３０５は、これらｎ−ｗｉｓｅ法のテストケース生成方法を用いてもよい。また、ｎ−ｗｉｓｅ法には、パラメータに優先度を考慮してテストケースを生成する方法や、パラメータをグループ化し、グループごとに網羅率を設定するなどの応用方式が知られている。分析済みパラメータ情報(パラメータ情報)５０１にパラメータの優先度やグループ分けの情報を追加する欄を設けることにより、これらの応用方式を用いてもよい。さらに、上記のテストケース生成処理Ｓ３０５の説明や、一般的なｎ−ｗｉｓｅ法では、出力パラメータを考慮していないが、例えば、出力パラメータを考慮した方式（特許文献２など）を用いてもよい。
【０１０５】
次に、図１４、図１５を用いて、本実施形態の説明に採用した外部仕様４００、分析済みパラメータ情報５００、テストケース生成情報６００のデータ構造の詳細を説明する。
図１４は、外部仕様４００、分析済みパラメータ情報５００、テストケース生成情報６００のデータ構造の概略をＵＭＬ（Unified Modeling Language）のクラス図ライクに記述した図である。
図１５は、テストケース生成処理に必要となる定義情報として、基本型情報定義と個別型情報定義を示した図である。
【０１０６】
図１４に示される本実施形態のデータは、パラメータ構造１２００、型情報１２１０、制約条件１２２１から構成されている。
【０１０７】
パラメータ構造１２００は、パラメータ間の関係を表している。型情報１２１０は、パラメータのとりうる型の関係を示す情報である。制約条件１２２１は、パラメータの制約条件を記述する情報である。
【０１０８】
パラメータ構造１２００は、パラメータ１２０１、親パラメータを格納するため複合パラメータ１２０２、および、具体的なデータ割当が必要となる単純パラメータ１２０３から構成される。ここで、パラメータ構造１２００のボックスに記述した上半分が、ＵＭＬのクラス図のクラスにあたるものであり、下半分が属性にあたるものである。例えば、パラメータ１２０１の構成要素である"長さ"は、当該パラメータが配列データである場合に、その配列の長さを格納するための属性である。
【０１０９】
また、複合パラメータ１２０２は、構造体やクラスなど、親パラメータの情報を格納するためのデータであり、型名称は構造体やクラスの型名称を表す。また、パターンは、複合パラメータ１２０２自体が、ＮＵＬＬ値、あるいは、値を持たないこと等を示すために用いる（図５、図６、図８の“＠Ｎｕｌｌ”や“＠Ｖａｉｎ”等に対応）。
【０１１０】
さらに、単純パラメータ１２０３は、候補値となるパラメータのパターンを格納するための“パターン”から構成され、型情報１２１０との関係によって、そのパラメータがどの型情報に属するかの情報を格納する。
【０１１１】
型情報１２１０は、パラメータの型情報（外部仕様４００、分析済みパラメータ情報５００、テストケース生成情報６００の型欄に相当）を格納するためのデータである。
図１４に示したように、型情報１２１０は、基本となる基底型１２１１をベースとして、グループ型１２１２、列挙型１２１３、集合型１２１４、比較可能グループ型１２１５から構成されている。
【０１１２】
ここで、グループ型１２１２、比較可能グループ型１２１５は、数学でいう所の演算が定義された群など、算術演算が可能なパラメータに対する型の総称であり、比較可能グループ１２１５は、整数、実数など、パラメータ間の大小の比較が可能なパラメータに対する型の総称である。列挙型１２１３は、曜日や性別など、パラメータの取り得る値が決められたパラメータに対する型の総称であり、集合型１２１４はパラメータを集合として扱う必要がある場合に用い、例えば、図５の外部仕様４００の“競合信号機”のように、複数の項目からなるが、“全ての○○が□□である”（図５のＩＤ欄が３のレコードのパターン欄４０７に記載された予約語ａｌｌ）、“少なくとも○○の一つが”（図示しなかったが予約語ｓｏｍｅ）など、パラメータ内の項目をまとめて一つの集合として扱う必要があるものを示している。
【０１１３】
次に、制約条件１２２１は、外部仕様（制約条件）４１０、分析済みパラメータ情報（制約条件）５１０、テストケース生成情報（制約条件）６１０で記述されたデータを表している。
【０１１４】
なお、図１４は、外部仕様４００、分析済みパラメータ情報５００、テストケース生成情報６００の構造の概略図であり、上記以外の構成要素を含んでもよい。また、型情報１２１０も、図１４に示した型情報以外の型を含んでもよい。
【０１１５】
次に、図１５を用いてテストケース生成処理に必要となる定義情報について説明する。
図１５に示したように定義情報は、基本型情報定義１３００と個別型情報定義１３１０から構成される。基本型情報定義１３００は、ＩＤ欄１３０１、型種別欄１３０２、制約条件記述欄１３０３、制約条件分析チェック１３０４から構成される。
【０１１６】
ＩＤ欄１３０１は、型情報の識別子を示す欄である。型種別欄１３０２は、型の社別を示す欄である。制約条件記述欄１３０３は、その型種別に対して、制約条件の記述方法を記載する欄である。制約条件分析チェック１３０４は、図１３に示した制約条件チェック処理Ｓ１１０２で用いる制約条件記述欄１３０３に対応した記法を記載する欄である。特に、制約条件記述欄１３０３は、ＳＡＴ  ＳｏｌｖｅｒやＳＭＴ  Ｓｏｌｖｅｒなどのようなテストツールで使用されることを意図している。
【０１１７】
また、個別型情報定義１３１０には、実際の外部仕様４００、分析済みパラメータ情報５００、テストケース生成情報６００内で用いる型情報と、記法や関連情報を格納する。個別型情報定義１３１０は、図１５に示されるように、ＩＤ欄１３１１、型名称欄１３１２、型種別欄１３１３、書式欄１３１４、補足情報欄１３１５から構成される。
【０１１８】
ＩＤ欄１３１１は、定義情報の識別子を示す欄である。型名称欄１３１２は、型の名称を示す欄である。型種別欄１３１３は、基底となる型情報を示す欄である。書式欄１３１４は、パターン欄への記述方法を定める欄である。補足情報欄１３１５は、最小値や最大値、ビット幅などの型情報ごとの補足情報を格納する欄である。  
上記で定義した型情報に基づき、パラメータごと、および、パラメータ単位のクラス分割をおこなう（図１０のＳ９０３、図１１のＳ１００４）。
【０１１９】
以下、各型に対するクラス分割処理の概要を説明する。
【０１２０】
グループ型、および、列挙型の場合には、パラメータが取り得る値のバリエーションからクラス分割をおこなう。例えば、“ｅ１，ｅ２，ｅ３，ｅ４，ｅ５，ｅ６”の６個の値を取り得る列挙型のパラメータがあり、パターン欄として“｛ｅ１，ｅ２，ｅ３｝”、“ｅ４”、“＠Ａｎｏｔｈｅｒ”、“ｅ１”の４つのバリエーションがあると記載されている場合には、与えられたバリエーションを順次読込み、以下のように処理をおこなう。なお“＠Ａｎｏｔｈｅｒ”は、“その他”を表し、与えられたバリエーションの中から残った値のいずれかの値を取ることを示す。
【０１２１】
先ず、“｛ｅ１，ｅ２，ｅ３｝”というパターンより、“ｅ１，ｅ２，ｅ３，ｅ４，ｅ５，ｅ６”を、“｛ｅ１，ｅ２，ｅ３｝”と“｛ｅ４，ｅ５，ｅ６｝”の二つのクラスに分割する。次に、“ｅ４”というパターンより、“｛ｅ４，ｅ５，ｅ６｝”を“ｅ４”と“｛ｅ５，ｅ６｝”に分割する。“＠Ａｎｏｔｈｅｒ”に対しては、上記分割の内、パターンに割当されていない “｛ｅ５，ｅ６｝”を割当てる。最後に、“ｅ１”に対し、“｛ｅ１，ｅ２，ｅ３｝”を“ｅ１”と“｛ｅ２，ｅ３｝”に分割し、最終的に以下の分割結果として、“ｅ１，｛ｅ２，ｅ３｝，ｅ４，｛ｅ５，ｅ６｝”を得る。
【０１２２】
一方、比較可能グループ型の場合には、与えられたパターン内の数値でデータの大小関係、比較演算子からクラス分割をおこなう。例えば、整数型のパラメータのパターンが“＞＝０”，“＞１０”，“３＜ｘ＜５"の場合には、以下のように処理をおこなう。
【０１２３】
先ず、与えられたバリエーション内の数値データを昇順（または、降順）に並べる。昇順に並べら得た結果（“＞＝０”、“３＜”、“＜５”、“＞１０”）に対し、比較演算子の特性を意識して、以下のようにクラス分割をおこなう。
【０１２４】
先ず、“＞＝０”、“３＜”より、０から３を超える数値の間にあるクラスを補間するため、“３＜”の記述から、“＜＝３”を補間し、“０＜＝ｘ＜＝３”の分割を得る。次に“３＜”、“＜５”の記述から、“３＜ｘ＜５”を生成する。“＜５”、“＞１０”の記述から、最初の分割処理と同様、５以上、１０未満の値を表すクラスを補間するため、“＜５”より、“５＜＝”を補間し、“５＜＝ｘ＜１０”を生成する。最後に、“０＜”の記述から、“＞１０”より、“＞＝１０”のクラスを補間する。以上の分析結果より、“０＜＝ｘ＜＝３”、３＜ｘ＜５”、５＜＝ｘ＜１０”、“＞＝１０”を得る。以上の分割は、数値直線上に各分割領域をマッピングすることで、容易に実装可能である。
【０１２５】
なお、上記では、与えられたバリエーションのみから、クラス分割をおこなったが、指定以外の領域をクラス分割結果に含めてもよい。上記の例では、“＞＝０”に対し、“＜０”をクラス分割に加えてもよい。
【０１２６】
最後に、集合型はパターン欄に記述された各パターンをバリエーションとしてそのまま用いればよい。上記の型情報ごとのクラス分割は、クラス分割方法の一例であり、上記とは異なる形で実施してもよい。
【０１２７】
以上の処理により、外部仕様４００から、分析済みパラメータ情報５００、テストケース生成情報６００の生成、および、テストケース８００の生成が実現される。
【０１２８】
なお、本実施形態では、外部仕様４００から、分析済みパラメータ情報５００、テストケース生成情報６００を表形式の形式で表現し、さらに制約条件には、事前条件など入力パラメータのみの制約条件と、入出力パラメータ間を表す制約条件を混在して記述したが、事前条件と事後条件など、制約条件の内容に応じて分割して書いてもよい。
【０１２９】
また、上記の制約条件の記述やテストケース生成情報生成処理Ｓ３０４の制約条件の生成処理において、関連する仕様書から制約条件を補完してもよい。例えば、ＵＭＬにおけるクラス図や、ＤＢ設計に用いられるＥＲ（Entity Relationship）図等から、パラメータ間の多重度やパラメータ間の関係を抽出することで制約条件を追加してもよい。
【０１３０】
次に、図１６を用いて生成したテストケースから、テスト実行までの処理を説明する。
図１６は、生成したテストケースから、テスト実行までの処理を説明するフローチャートである。
【０１３１】
以上のように、外部仕様からテストケースが生成され、実際にテストをおこなう際には、テスト対象となるソフトウェアの構成モジュール、あるいは、関数に対し、生成されたテストケースを用いてテスト実行を行い、その結果の確認をおこなう。
【０１３２】
なお、テスト実行は具体的なテストデータを用いて、テスト対象のソフトウェア構成モジュールや関数等を動作させ、その結果を取得する処理をおこなうが、テスト対象を動作させる処理は、必ずしもテスト支援装置１００で実行する必要は無い。例えば、テスト対象のソフトウェア構成モジュールがネットワークで接続されている場合には、ネットワーク経由で実行してもよい。
図１６に示したように、外部仕様格納（Ｓ１５０１）から、テストケース生成（Ｓ５０５）までの処理の流れは、図４の処理の流れと同様である。
【０１３３】
図１６の処理では、図４のテストケース生成（Ｓ１５０５）に、生成されたテストケースの修正（Ｓ１５０６）、テストデータ生成処理(Ｓ１５０７)、テストデータの修正（Ｓ１５０８）、テスト実行（Ｓ１５０９）、テスト実行結果の確認(Ｓ１５１０)の手順が追加されている。
【０１３４】
先ず、生成された生成されたテストケースに対して、テストケースの修正をおこなう(Ｓ１５０６)。例えば、パラメータの候補値として、“＠Ｖａｌｉｄ”などの抽象的な候補値が設定されていた場合に、テスト実行可能な具体値の割当てをおこなう、あるいは、個別実行したいテストケースの追加をおこなう。
【０１３５】
次に、テストデータ生成をおこなう（Ｓ１５０７）。例えばテストケース内に抽象的なパターン(例えば、“＠Ｖａｌｉｄ”や、“０＜ｘ＜１００”など)である場合に、実際にテスト実行可能な具体値を生成する、あるいは、テストデータ入力を促すための強調表示をおこない、ユーザ入力１５２３でのテストデータ９００の入力を促す。なお、具体値の生成では、与えられた条件を満たすランダムな具体値を設定してもよいし、あるいは、“０＜ｘ＜１００”のような特定の範囲が割当てられている場合には、テスト基準に従い、境界値や中間値を割当てるようにしてもよい。
【０１３６】
次に、上記生成されたテストデータ９００に対し、具体的なデータの割当て、テスト実行者が、修正が必要と判断した場合には、さらに、テストデータ９００の修正をおこない（Ｓ１５０８）、その後に、テスト実行をおこなう（Ｓ１５０９）。
【０１３７】
テスト実行の結果、全てのテストケースに対応するテスト結果が得られた、あるいは、全て（あるいは規定件数以上）のテストの実行結果１０００が期待結果どおりだった、等、テストの合格基準に達した場合には（Ｓ１５０１１：満たす）、テストを終了し、そうでない場合には（Ｓ１５０１１：満たさない）、その結果に応じて、Ｓ１５０１、Ｓ１５０３、Ｓ１５０６、Ｓ１５０８の各入力手順に戻る（Ｓ１５１１）。
【０１３８】
例えば、テスト結果から制約条件に記述漏れがあり、無効な入力値を入れてしまったなど、外部仕様４００の記述が足りなかった場合には、外部仕様４００の作成(Ｓ１５０１)に戻り、外部仕様４００の記述の見直しをすればよい。
【０１３９】
また、テスト実行結果として、テスト件数や、実行時のカバレッジ（実行ステップカバレッジや分岐ステップカバレッジなどのブラックボックステストのカバレッジ基準など）が不足している場合には、テストケースの修正(Ｓ１５０６)に戻り、テストケースの追加をおこなえばよい。このとき、例えば、テスト実行中の実行パスを記録し、各入力データがどの実行パスに対応するかをテスト実行結果に含めてもよい。これによって、テストケースの修正(Ｓ１５０６)を実施する際、選ばれていない(異なるパスを通りそうな)パターンの組合せをテストケースの生成に加えるなど、テストケースの修正(Ｓ１５０６)の参考にすることが可能となる。
【０１４０】
また、前記テストの実行結果に、実行パスとの対応を含める場合において、全ての組合せパターンに対して、テスト実行をしたにもかかわらず、実行ステップカバレッジや分岐ステップカバレッジのカバレッジ率が合格基準を満たさない、あるいは、意図したパスと異なる経路を通る場合には、外部仕様４００、あるいは、テスト対象のソースコードを見直すなど、生成されたテストケースと実行パスの対応を参考にしてもよい。
【０１４１】
これらは、テスト実行結果を元にユーザが目視で確認してもよいし、テスト実行時にテスト実行パスを取得し、テストケースとの対応関係をテストケース上で管理することで、テストの合格基準の判断（Ｓ１５１１）を自動的に判定できるようにしてもよい。
【０１４２】
さらに、テストケース生成（Ｓ１５０５）において、実行結果１０００の特定ができない(入力パラメータの組合せのみを生成する)場合には、各テストケースの初回実行時の実行結果１０００から、その実行結果が期待通りか否かを確認した後、テストケースの修正(Ｓ１５０６)、あるいは、テストデータの修正(Ｓ１５０８)に反映することによって、期待結果として用いるようにしてもよい。これによって、ソフトウェア改修時のリグレッションテスト時の結果確認を含めたテスト自動実行が容易となる。
【符号の説明】
【０１４３】
１００…テスト支援装置、１０１…外部仕様格納部、１０２…分析済みパラメータ情報格納部、１０３…テストケース生成情報格納部、１０４…テストケース格納部、１０５…型情報定義格納部、１０６…テストデータ格納部、１０７…実行結果格納部、１１０…入出力部、１１１…解析部、１１２…変換部、１１３…テストケース生成部、１１４…テストデータ生成部、１１５…テスト実行部
【図１】
0006568017.tif 000002
【図２】
0006568017.tif 000003
【図３】
0006568017.tif 000004
【図４】
0006568017.tif 000005
【図５】
0006568017.tif 000006
【図６】
0006568017.tif 000007
【図７】
0006568017.tif 000008
【図８】
0006568017.tif 000009
【図９】
0006568017.tif 000010
【図１０】
0006568017.tif 000011
【図１１】
0006568017.tif 000012
【図１２】
0006568017.tif 000013
【図１３】
0006568017.tif 000014
【図１４】
0006568017.tif 000015
【図１５】
0006568017.tif 000016
【図１６】
0006568017.tif 000017