(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024147158
(43)【公開日】2024-10-16
(54)【発明の名称】テストケース生成装置、及びテストケース生成方法
(51)【国際特許分類】
G06F 11/36 20060101AFI20241008BHJP
【FI】
G06F11/36 184
【審査請求】未請求
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2023059995
(22)【出願日】2023-04-03
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110000176
【氏名又は名称】弁理士法人一色国際特許事務所
(72)【発明者】
【氏名】鈴木 康文
(72)【発明者】
【氏名】川上 真澄
【テーマコード(参考)】
5B042
【Fターム(参考)】
5B042HH11
5B042HH17
5B042HH49
(57)【要約】 (修正有)
【課題】配列型の因子を含むソフトウェアに対しても、仕様を広くカバーするテストケースを自動的に生成するテストケース生成装置及びテストケース生成方法を提供する。
【解決手段】テストケース生成装置は、ソフトウェアテストの因子及びその水準を生成する第1生成部(因子水準生成部300)と、生成した因子及びその水準から因子を選択し、選択した各因子が持つ各水準の組み合わせについてのテストケースを生成する第2生成部(Pairwise生成部500)と、を備える。第1生成部は、所定の要素数を有する配列型の因子について、各要素の因子及びその水準を生成することで、それぞれの配列要素数に応じた因子水準情報400を生成する。第2生成部は、因子水準情報400に基づき、Pairwise法により、生成パラメータ設定情報12に設定された網羅度nのn因子網羅のテストケース800を生成する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
プロセッサ及びメモリを有し、
ソフトウェアテストの因子及びその水準を生成する第1生成部と、
前記生成された因子及びその水準から因子を選択し、選択した各因子が持つ各水準の組み合わせについてのテストケースを生成する第2生成部と、
を備え、
前記第1生成部は、所定の要素数を有する配列型の因子について、各要素の因子及びその水準を生成する、
テストケース生成装置。
【請求項2】
前記第1生成部は、前記配列型の因子以外の因子及びその水準を表す配列外因子水準情報、及び、前記配列型の因子の要素の因子及びその水準を表す配列内因子水準情報を生成し、
前記第2生成部は、前記配列外因子水準情報に基づく外部テストケース、及び、前記配列内因子水準情報に基づく内部テストケースを生成し、前記外部テストケースに前記内部テストケースを合成したテストケースを生成する、
請求項1に記載のテストケース生成装置。
【請求項3】
前記第1生成部は、前記配列型の因子を、水準として配列の要素数の値を持つ因子に置き換えた前記配列外因子水準情報を生成し、
前記第2生成部は、前記外部テストケースにおける配列の要素数を表す値を、その要素数の前記内部テストケースを要素に持つ配列に置き換えることにより、前記外部テストケースに前記内部テストケースを合成する、
請求項2に記載のテストケース生成装置。
【請求項4】
前記第2生成部は、配列の要素数を表す値を持つ全ての前記外部テストケースに対して、前記内部テストケースを合成する、
請求項3に記載のテストケース生成装置。
【請求項5】
前記第2生成部は、全ての前記内部テストケースを前記合成に使用して、前記テストケースを生成する、
請求項2に記載のテストケース生成装置。
【請求項6】
前記第2生成部は、合成に使用されていない前記内部テストケースを、合成に使用された前記内部テストケースよりも優先して、前記外部テストケースに合成する、
請求項2に記載のテストケース生成装置。
【請求項7】
情報処理装置が、
ソフトウェアテストの因子及びその水準を生成する第1生成処理と、
前記生成された因子及びその水準から因子を選択し、選択した各因子が持つ各水準の組み合わせについてのテストケースを生成する第2生成処理とを実行し、
前記第1生成処理において、所定の要素数を有する配列型の因子について、各要素の因子及びその水準を生成する、
テストケース生成方法。
【請求項8】
前記情報処理装置が、
前記第1生成処理において、前記配列型の因子以外の因子及びその水準を表す配列外因子水準情報、及び、前記配列型の因子の要素の因子及びその水準を表す配列内因子水準情報を生成し、
前記第2生成処理において、前記配列外因子水準情報に基づく外部テストケース、及び、前記配列内因子水準情報に基づく内部テストケースを生成し、前記外部テストケースに前記内部テストケースを合成したテストケースを生成する、
請求項7に記載のテストケース生成方法。
【請求項9】
前記情報処理装置が、
前記第1生成処理において、前記配列型の因子を、水準として配列の要素数の値を持つ因子及びその水準に置き換えた前記配列外因子水準情報を生成し、
前記第2生成処理において、前記外部テストケースにおける配列の要素数を表す値を、その要素数の前記内部テストケースを要素に持つ配列に置き換えることにより、前記外部テストケースに前記内部テストケースを合成する、
請求項8に記載のテストケース生成方法。
【請求項10】
前記情報処理装置が、
前記第2生成処理において、配列の要素数を表す値を持つ全ての前記外部テストケースに対して、前記内部テストケースを合成する、
請求項9に記載のテストケース生成方法。
【請求項11】
前記情報処理装置が、
前記第2生成処理において、全ての前記内部テストケースを前記合成に使用して、前記テストケースを生成する、
請求項8記載のテストケース生成方法。
【請求項12】
前記情報処理装置が、
前記第2生成処理において、合成に使用されていない前記内部テストケースを、合成に使用された前記内部テストケースよりも優先して、前記外部テストケースに合成する、
請求項8に記載のテストケース生成方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、テストケース生成装置、及びテストケース生成方法に関する。
【背景技術】
【0002】
ソフトウェアの不具合を発見し、品質を向上させるためには、ソフトウェアに対してテストを実施することによりソフトウェアを検証する必要がある。ソフトウェアのテストケースの数が増大すると、テストを実施するためにかかる時間や必要な計算資源が増えるため、少ないケース数で不具合を効率的に発見するテストケースを準備することが望ましい。しかし、テストケースを構成する因子が複数ある場合に、それらの因子が取り得る水準値の組合せのすべてを網羅するようなテストケースを生成すると、テストケース数が指数関数的に増大するという課題がある。
【0003】
そのような課題を解決するために、不具合を効率的に発見するようなテストケースを生成する技術としてPairwise法(All-Pair法)が知られている。Pairwise法によりテストケースを生成するための方法は、特許文献1に開示されている。
【0004】
Pairwise法は、指定された網羅度nに対してn因子網羅のテストケースを生成する手法である。n因子網羅とは、生成されるテストケース群により、検証対象の因子の任意のn因子の組合せに含まれるn因子の各々が持つ水準について、少なくとも1回テストが実行されることを意味する。
【0005】
Pairwise法により生成されたテストケースを用いてテストを実施することにより、全ての因子の組合せを網羅するようなテストケースを生成する場合と比べてテストケースを削減することができ、かつ、複数の因子を組合せた場合にのみ発生するような不具合についても発見することが可能である。
【0006】
非特許文献1では、API(Application Programming Interface)の仕様記述言語の一つであるOpenAPIを用いて記述されたインタフェース仕様からPairwise法(非特許文献1においてはCovering Arrayと記載されている)を用いて自動的にテストケースを生成する技術が開示されている。非特許文献1では、Pairwise法を用いることによりインタフェース仕様に定義されたWebAPIのパラメータの組合せを効率的に網羅したテストケースの生成することが開示されている。
【先行技術文献】
【特許文献】
【0007】
【非特許文献】
【0008】
【非特許文献1】Huayao Wu,Lixin Xu,Changhai Nie,“Combinatorial testing of RESTful APIs”, Proceedings of 44th International Conference on Software Engineering, May 2022, pp.426-437.
【発明の概要】
【発明が解決しようとする課題】
【0009】
特許文献1に開示されているPairwise法による生成手法では、各因子が持つデータ型が数値型、文字列型、又は列挙型などのプリミティブ型であることを前提としており、任意の要素数を持つ配列型の因子を扱うことができないという課題がある。
【0010】
非特許文献1に開示されている技術では、OpenAPIで記述されたインタフェース仕様からPairwise法で用いる因子を抽出している。OpenAPIでは、配列型を指定することが可能である。非特許文献1に開示されている方法では、配列型として指定された因子についても、プリミティブ型として指定された場合と同様の方法にてPairwise法を適用し、要素数が1の配列としてテストケースを生成している。そのため、非特許文献1に開示される方法でテストケースを生成した場合には、配列が複数の要素を持つときにのみ発生するような不具合を発見することができないという課題がある。
【0011】
本発明は、このような事情に鑑みてなされたものであり、その目的は、配列型の因子を含むソフトウェアに対しても、仕様を広くカバーするテストケースを自動的に生成することが可能なテストケース生成装置、及びテストケース生成方法を提供することを目的とする。
【課題を解決するための手段】
【0012】
上記課題を解決するための本発明の一つは、プロセッサ及びメモリを有し、ソフトウェアテストの因子及びその水準を生成する第1生成部と、前記生成された因子及びその水準から因子を選択し、選択した各因子が持つ各水準の組み合わせについてのテストケースを生成する第2生成部と、を備え、前記第1生成部は、所定の要素数を有する配列型の因子について、各要素の因子及びその水準を生成する、テストケース生成装置である。
【発明の効果】
【0013】
本発明によれば、可変個の要素を持つ因子を含むソフトウェアに対しても、仕様を広くカバーするテストケースを自動的に生成することができる。
上記した以外の構成及び効果等は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【0014】
【
図1】本発明の第1の実施形態におけるテストケース生成装置の構成例を示す図である。
【
図2】ソフトウェア仕様情報の一例を示す図である。
【
図3】生成パラメータ設定情報の一例を示す図である。
【
図4】本発明の第1の実施形態におけるテストケース生成装置で行われる処理の流れを説明する図である。
【
図5】本発明の第1の実施形態における因子水準情報を生成する方法を説明する図である。
【
図6】本発明の第1の実施形態におけるテストケース生成装置が生成するテストケースの一例を示す図である。
【
図7】本発明の第2の実施形態におけるテストケース生成装置の構成例を示す図である。
【
図8】本発明の第2の実施形態におけるテストケース生成装置で行われる処理の流れを説明する図である。
【
図9】本発明の第2の実施形態における配列外因子水準情報及び配列内因子水準情報を生成する方法を説明する図である。
【
図10】配列外因子水準生成部が実行する配列外因子水準生成処理の一例を説明するフローチャートである。
【
図11】配列内因子水準生成部が実行する配列内因子水準生成処理の一例を説明するフローチャートである。
【
図12】テストケース合成部が実行するテストケース合成処理の一例を説明するフローチャートである。
【
図13】外部テストケースに内部テストケースを合成する方法を説明する図である。
【
図14】第1の実施形態に開示する第1の方法と、第2の実施形態に開示する第2の方法のそれぞれを用いて生成したテストケース数を比較するグラフである。
【発明を実施するための形態】
【0015】
以下、図面を参照して、本発明の実施形態について詳細に説明する。以下の記載および図面は、本発明を説明するための例示であって、説明の明確化のため、適宜、省略および簡略化がなされている。本発明は、他の種々の形態でも実施する事が可能である。特に限定しない限り、各構成要素は単数でも複数でも構わない。
図面において示す各構成要素の位置、大きさ、形状、範囲などは、発明の理解を容易にするため、実際の位置、大きさ、形状、範囲などを表していない場合がある。このため、本発明は、必ずしも、図面に開示された位置、大きさ、形状、範囲などに限定されない。
以下の説明では、「テーブル」、「リスト」、「キュー」等の表現にて各種情報を説明することがあるが、各種情報は、これら以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「XXテーブル」、「XXリスト」等を「XX情報」と呼ぶことがある。識別情報について説明する際に、「識別情報」、「識別子」、「名」、「ID」、「番号」等の表現を用いるが、これらについてはお互いに置換が可能である。
同一あるいは同様な機能を有する構成要素が複数ある場合には、同一の符号に異なる添字を付して説明する場合がある。ただし、これらの複数の構成要素を区別する必要がない場合には、添字を省略して説明する場合がある。
また、以下の説明では、プログラムを実行して行う処理を説明する場合があるが、プログラムは、プロセッサ(例えばCPU、GPU)によって実行されることで、定められた処理を、適宜に記憶資源(例えばメモリ)および/またはインタフェースデバイス(例えば通信ポート)等を用いながら行うため、処理の主体がプロセッサとされてもよい。同様に、プログラムを実行して行う処理の主体が、プロセッサを有するコントローラ、装置、システム、計算機、ノードであってもよい。プログラムを実行して行う処理の主体は、演算部であれば良く、特定の処理を行う専用回路(例えばFPGAやASIC)を含んでいてもよい。
プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記憶メディアであってもよい。プログラムソースがプログラム配布サーバの場合、プログラム配布サーバはプロセッサと配布対象のプログラムを記憶する記憶資源を含み、プログラム配布サーバのプロセッサが配布対象のプログラムを他の計算機に配布してもよい。また、以下の説明において、2以上のプログラムが1つのプログラムとして実現されてもよいし、1つのプログラムが2以上のプログラムとして実現されてもよい。
【0016】
[第1の実施形態]
まず、本発明の第1の実施形態におけるテストケース生成装置及びテストケース生成方法について説明する。
【0017】
図1は、本発明の第1の実施形態におけるテストケース生成装置100の構成例を示す図である。
テストケース生成装置100は、テストによる検証の対象のソフトウェア(以下、「対象ソフトウェア」とする。)のテスト環境に配置された情報処理装置である。テストケース生成装置100は、対象ソフトウェアのテストに必要な効率的なテストケースを自動的に生成する。テストケース生成装置100は、1又は複数のコンピュータにより構成され
る情報処理装置により実現される。テストケース生成装置100は、自装置にユーザインタフェースを備えてもよいし、適宜なネットワークを介して接続するユーザ端末をユーザインタフェースとして利用してもよい。この場合、ユーザ端末は、ソフトウェアの開発者又はテスタなどのユーザが操作する端末装置である。このユーザ端末は、具体的には、パーソナルコンピュータ、スマートフォン、又はタブレット端末などである。
【0018】
図示するように、テストケース生成装置100は、記憶装置200、演算装置250、メモリ260、及び入出力装置270を備える。記憶装置200、演算装置250、メモリ260、及び入出力装置270は、バスを介して相互に通信接続する。
【0019】
演算装置250は、記憶装置200に保持されるプログラム210をメモリ260に読み出すなどして実行し装置自体の統括制御を行なうとともに各種判定、演算及び制御処理を行なうCPU(Central Processing Unit)である。
また、メモリ260は、RAM(Random Access Memory)、またはROM(Read Only Memory)などの揮発性記憶素子で構成される。
【0020】
また、入出力装置270は、ユーザからのキー入力や音声入力を受け付け、また、処理データの出力を行う装置である。例えば、入出力装置270は、キーボード、マウス、タッチパネル、マイクなどの入力装置と、液晶ディスプレイ(LCD: Liquid Crystal Display)或いは有機EL(Electro―Luminescence)ディスプレイ等の表示装置又はプリンタ等の印字出力装置とからなる。或いは、入出力装置270は、適宜なネットワークと接続してユーザ端末との通信処理を担うネットワークインタフェースカードを含んでいてもよい。
【0021】
また、記憶装置200は、SSD(Solid State Drive)やハードディスクドライブなど適宜な不揮発性記憶素子で構成される。記憶装置200内には、本実施例のテストケース生成装置100として必要な各機能を実現する為のプログラム210に加えて、テストケースの生成に関する中間データである因子水準情報400、及び出力データであるテストケース800が記憶されている。因子水準情報400、及びテストケース800の詳細については後述する。
【0022】
テストケース生成装置100への入力には、対象ソフトウェアのソフトウェア仕様情報11、及び生成パラメータ設定情報12が含まれる。
【0023】
ソフトウェア仕様情報11は、対象ソフトウェアのテストに用いる因子及び水準を生成するために必要な情報が含まれた仕様情報である。因子とは、ソフトウェアのテスト対象となるパラメータ及び要素の種類である。また、水準とは、その因子に入力が許される値又は値の代表値である。例えば、ソフトウェア仕様情報11として、因子及び水準が直接記述された情報の他、ウェブサービスであればOpenAPI仕様記述に基づく仕様記述を用いることができる。
【0024】
図2は、ソフトウェア仕様情報11の一例を示す図である。図に例示するソフトウェア仕様情報11には、vehicle_deliveries型の構造体が定義されている。vehicle_deliveries型は、vehicle、vehicle_size、及びweatherという、列挙型の要素(以下、構造体の要素(メンバ)を「プロパティ」と称す。)を持つ。vehicleは、2種類(EV, Diesel)の水準値を持ち、vehicle_sizeは、3種類(Small, Medium, Large)の水準値を持ち、weatherは、3種類(Sunny, Clouded, Rainy)の水準値を持つ。さらに、vehic
le_deliveries型は、deliveriesという配列型のプロパティを持つ。deliveriesプロパティはdelivery型の配列をとる。delive
ry型は、time、weightという列挙型のプロパティを持つ。timeは、4種類(AM, PM1, PM2, Night)の水準値を持ち、weightは、6種類(5, 10, 15, 20, 25, 30)の水準値を持つ。
【0025】
生成パラメータ設定情報12は、Pairwise法によるテストケースの生成に関する各パラメータの設定値の情報である。生成パラメータ設定情報12には、Pairwise法における網羅度の設定値を含めることができる。また、ソフトウェア仕様情報11に配列型の因子が含まれる場合には、生成パラメータ設定情報12は、その配列の要素数の最小値および最大値に関する設定を含んでもよい。なお、生成パラメータ設定情報12に設定される情報は、ソフトウェア仕様情報11に含まれていてもよい。
【0026】
図3は、生成パラメータ設定情報12の一例を示す図である。図に例示する生成パラメータ設定情報12には、網羅度「2」、及び、配列要素数「0-3」(配列の要素数の最小値「0」及び最大値「3」)が設定されている。
【0027】
続いて、
図1に示すように、プログラム210は、因子水準生成部300(第1生成部)、及びPairwise生成部500(第2生成部)のそれぞれを実現するプログラムを含む。
【0028】
因子水準生成部300は、ソフトウェア仕様情報11からソフトウェアテストに用いる因子水準情報400を生成する。このとき、因子水準生成部300は、所定の要素数を有する配列型の因子について、各要素の因子及び水準を生成する第1生成処理を実行する。OpenAPI仕様記述から因子と水準を生成するための手法については非特許文献1に開示されている手法を用いることができる。
【0029】
Pairwise生成部500は、因子水準生成部300が生成した因子水準情報400に基づき、生成された因子及びその水準から因子を選択し、選択した各因子が持つ各水準の組み合わせについてのテストケースを生成する。具体的には、Pairwise生成部500は、Pairwise法により、網羅度nに対してn因子網羅のテストケース800を生成する第2生成処理を実行する。n因子網羅とは、生成されるテストケース群により、検証対象の因子の任意のn因子の組合せに含まれるn因子が持つ各水準について、少なくとも1回テストが実行されることを意味する。例えば、1因子網羅とは、実行するテストケース群によって、テスト対象の各因子が持つ水準について、少なくとも1回テストが実行されるとことを意味する。同様に、2因子網羅とは、実行するテストケース群により、検証対象の因子の2因子の組合せに含まれる2因子のそれぞれが持つ各水準について、少なくとも1回テストが実行されることを意味する。Pairwise法を用いたテストケース生成の方法としては特許文献1に開示された方法などを用いることができる。例えば、Pairwise生成部500は、因子間の各関係に対してテストケースを列挙し、異なる関係に対するテストケースを結合して、単一のテストケースとする手法などによりテストケースを生成する。
【0030】
テストケース生成装置100は、予め記憶装置200に記憶されるプログラム210を演算装置250がメモリ260にロードして実行することにより、因子水準生成部300、及びPairwise生成部500のそれぞれの各機能を実現する。
【0031】
テストケース生成装置100は、構成する各機能を単一の情報処理装置内に配置する構成例の他、ネットワークを介して接続する複数の情報処理装置、または、クラウド上の計算資源にその機能を分散して配置してもよい。
【0032】
図4は、本発明の第1の実施形態におけるテストケース生成装置100で行われる処理
の流れを説明する図である。図示するように、まず、因子水準生成部300は、ソフトウェア仕様情報11及び生成パラメータ設定情報12に基づき、ソフトウェアテストに用いる因子及びその水準を生成し、因子水準情報400を生成する(S11)。なお、この処理は、例えば、テストケース生成装置100にユーザから所定の入力がされた場合、又は所定のタイミング(例えば、所定の時刻、所定の時間間隔)等に開始される。例えば、因子水準生成部300は、ユーザが対象ソフトウェアのソフトウェア仕様情報11及び生成パラメータ設定情報12を指定してテストケース生成装置100に読み込ませたときにこの処理を開始してもよい。
【0033】
図5は、本発明の第1の実施形態における因子水準情報400を生成する方法を説明する図である。本図を参照して、ソフトウェア仕様情報11に配列型のパラメータ又は変数が含まれる場合における因子水準情報400の生成方法を具体的に説明する。以下、因子水準生成部300が、vehicle_deliveries型についてテストケースを生成する場合を例に具体的に説明する。
【0034】
まず、上記したように、生成パラメータ設定情報12において、配列要素数は0から3と指定されている。そこで、因子水準生成部300は、0,1,2,3の配列要素数それぞれに対応する因子及びその水準を生成する。
【0035】
具体的には、因子水準生成部300は、配列要素数が0の場合には、deliveriesは空配列しか取ることができないので、deliveries以外のプロパティを用いて、テストケースに用いる因子及び各因子が持つ水準を生成する(符号1000参照)。また、因子水準生成部300は、配列要素数が1の場合には、唯一の配列要素に対応するdeliveries[0].time因子及びdeliveries[0].weight因子を生成する(符号1001参照)。
【0036】
また、因子水準生成部300は、配列要素数が2の場合には、deliveries[0]及びdeliveries[1]のそれぞれの配列要素に対応する因子を生成する(符号1002参照)。因子水準生成部300は、配列要素数3の場合にも同様に因子及び水準を生成することで、
図5に示すように、それぞれの配列要素数に応じた因子水準情報400を生成する(符号1003参照)。
【0037】
続いて、Pairwise生成部500が、因子水準情報400に基づき、Pairwise法により、生成パラメータ設定情報12に設定された網羅度nのn因子網羅のテストケース800を生成する(S12)。
【0038】
図6は、本発明の第1の実施形態におけるテストケース生成装置100が生成するテストケース800の一例を示す図である。上記の方法により、配列要素数が0の場合には3因子、配列要素数が1の場合には5因子、配列要素数が2の場合には7因子、配列要素数が3の場合には9因子のPairwise法によるテストケースの生成と同様な方法でテストケース800を生成することが可能となる。
【0039】
以上説明したように、本実施形態のテストケース生成装置100は、ソフトウェアテストの因子及びその水準を生成する因子水準生成部300と、生成された因子及びその水準から因子を選択し、選択した各因子が持つ各水準の組み合わせについてのテストケースを生成するPairwise生成部500と、を備え、因子水準生成部300は、所定の要素数を有する配列型の因子について、各要素の因子及びその水準を生成する。
【0040】
すなわち、本実施形態のテストケース生成装置100は、所定の要素数を持つ配列型の因子の各要素について因子網羅のテストケースを生成することができる。これにより、任
意の要素数を持つ配列型の因子に対するテストを実施することができる。よって、配列が複数の要素を持つときにのみ発生するような不具合を発見することができる。
【0041】
[第2の実施形態]
続いて、本発明の第2の実施形態におけるテストケース生成装置及びテストケース生成方法について説明する。
【0042】
第1の実施形態において開示した第1の方法により、配列型を持つソフトウェアに対しても、仕様を広くカバーするテストケースの生成が実現される。しかし、配列の要素数が多い場合には、生成される因子の数が増大し、それにより生成するテストケースの数も膨大となる、という課題がある。そこで、本実施形態では、配列の要素数が多い場合であっても、生成されるテストケース数が膨大になることを防ぎつつ、仕様を広くカバーするテストケースを生成する方法について開示する。
【0043】
ここで、パラメータに配列型を用いる理由として、可変個の集合としてソフトウェアにデータを渡したいケースがある。そのようなケースでは、配列内における要素の順番は重要ではないことが多い。また、配列内に設定されたデータでなく、要素数にのみ依存する不具合も多く存在する。このような性質の不具合を効率的に発見するために、本実施形態では、配列の要素数と、当該配列以外の因子(以下、「配列外の因子」とする。)との網羅を取ること、及び、配列外の因子と配列内に含まれる因子(以下、「配列内の因子」とする。)については、配列内の任意の要素位置において網羅が取れればよいとすることにより、第1の実施形態で示した方法と比較して網羅性を緩和することによって、より少ないテストケースで仕様を広くカバーする。
【0044】
図7は、本発明の第2の実施形態におけるテストケース生成装置100Aの構成例を示す図である。本図において、
図1に示す第1の実施形態のテストケース生成装置100と同様の構成には同一の符号を付し、その説明を省略する。
【0045】
本実施形態におけるテストケース生成装置100Aの記憶装置200は、配列外因子水準生成部310、配列内因子水準生成部320、Pairwise生成部500、及びテストケース合成部700のそれぞれを実現するプログラム210Aを記憶している。配列外因子水準生成部310、及び配列内因子水準生成部320が、第1生成部に相当し、Pairwise生成部500、及びテストケース合成部700が、第2生成部に相当する。
【0046】
配列外因子水準生成部310は、ソフトウェア仕様情報11に基づいて、可変個の要素を持つ配列型の因子及びその水準を表す配列外因子水準情報410を生成する。
【0047】
配列内因子水準生成部320は、ソフトウェア仕様情報11に基づいて、可変個の要素を持つ配列型の因子の要素の因子及びその水準を表す配列内因子水準情報420を生成する。
【0048】
Pairwise生成部500は、生成パラメータ設定情報12に定義された網羅度nを用いて、配列外因子水準情報410に基づき、Pairwise法によりn因子網羅の後述する外部テストケース610を生成する。また、Pairwise生成部500は、生成パラメータ設定情報12に定義された網羅度nを用いて、配列内因子水準情報420に基づき、Pairwise法によりn因子網羅の後述する内部テストケース620を生成する。
【0049】
テストケース合成部700は、外部テストケース610と内部テストケース620とを
合成し、テストに用いるためのテストケース800を出力する。
【0050】
また、記憶装置200内には、テストケース生成に関する中間データである配列外因子水準情報410、配列内因子水準情報420、外部テストケース610、内部テストケース620、及び出力データであるテストケース800が記憶されている。配列外因子水準情報410、配列内因子水準情報420、外部テストケース610、及び内部テストケース620の詳細については後述する。
【0051】
図8は、本発明の第2の実施形態におけるテストケース生成装置100Aで行われる処理の流れを説明する図である。図示するように、まず、配列外因子水準生成部310は、ソフトウェア仕様情報11に基づき、配列外因子水準情報410を生成する(S310)。配列外因子水準情報410を生成する処理の詳細については後述する。なお、この処理は、例えば、テストケース生成装置100にユーザから所定の入力がされた場合、又は所定のタイミング(例えば、所定の時刻、所定の時間間隔)等に開始される。例えば、因子水準生成部300は、ユーザが対象ソフトウェアのソフトウェア仕様情報11及び生成パラメータ設定情報12を指定してテストケース生成装置100に読み込ませたときにこの処理を開始してもよい。
【0052】
一方、配列内因子水準生成部320は、ソフトウェア仕様情報11に基づき、配列内因子水準情報420を生成する(S320)。配列内因子水準情報420を生成する処理の詳細については後述する。
【0053】
Pairwise生成部500は、生成パラメータ設定情報12に定義された網羅度nを用いて、配列外因子水準情報410に基づき、Pairwise法によりn因子網羅の外部テストケース610を生成する(S500)。また、Pairwise生成部500は、生成パラメータ設定情報12に定義された網羅度nを用いて、配列内因子水準情報420に基づき、Pairwise法によりn因子網羅の内部テストケース620を生成する。
【0054】
テストケース合成部700は、外部テストケース610と内部テストケース620とを合成し、テストに用いるためのテストケース800を出力する(S700)。外部テストケース610と内部テストケース620とを合成する処理の詳細については後述する。
【0055】
次に、テストケース生成装置100Aが実行する各処理の詳細について説明する。
【0056】
図9は、本発明の第2の実施形態における配列外因子水準情報410及び配列内因子水準情報420を生成する方法を説明する図である。以下、本図に示す例を用いて具体的に、配列外因子水準情報410を生成する配列外因子水準生成処理、及び配列内因子水準情報420を生成する配列内因子水準生成処理について説明する。
【0057】
<配列外因子水準生成処理>
図10は、配列外因子水準生成部310が実行する配列外因子水準生成処理S310の一例を説明するフローチャートである。
【0058】
まず、配列外因子水準生成部310は、ソフトウェア仕様情報11から、生成するテストケースのデータ構造を読み出し、第1の実施形態と同様の手法により因子及び水準を生成する(S311)。
【0059】
続いて、配列外因子水準生成部310は、生成した因子に配列型を持つ因子が含まれるか否かを判定する(S312)。
【0060】
配列外因子水準生成部310は、配列型を持つ因子が含まれない場合(S312:No)には、ステップS315の処理に進み、S311で生成した因子及び水準をそのまま配列外因子水準情報410として出力する。
【0061】
一方、配列外因子水準生成部310は、配列型を持つ因子が含まれる場合(S312:Yes)には、その中から一つを選択する(S313)。
【0062】
そして、配列外因子水準生成部310は、選択した因子を、その因子の配列要素数を表す(水準として配列要素数の値を持つ)因子に置き換える(S314)。また、配列外因子水準生成部310は、生成パラメータ設定情報12を参照して、置き換えた因子の水準として、配列要素数として取り得る値を設定する。
【0063】
図9に示した例では、配列外因子水準生成部310は、配列型を持つdeliveries因子を、その配列要素数を表すdeliveries_length因子に置換している(符号2000参照)。また、配列外因子水準生成部310は、生成パラメータ設定情報12において配列要素数が0から3の間と定義されているため、deliveries_length因子の水準として0、1、2、3の4種類の水準を設定している(符号2001参照)。
【0064】
配列外因子水準生成部310は、S314の処理の後、S312の処理に戻る。すなわち、配列外因子水準生成部310は、すべての配列型の因子に対してS314の処理を行うことにより、最終的に配列型の因子を含まない(配列型の因子を、配列要素数を表す因子に置き換えた)配列外因子水準情報410を生成する。配列外因子水準生成部310は、すべての配列型の因子に対してS314の処理を実行すると(S312:No)、生成した配列外因子水準情報410を出力する(S315)。その後、配列外因子水準生成部310は、本配列外因子水準生成処理S310の処理を終了する。
【0065】
<配列内因子水準生成処理>
図11は、配列内因子水準生成部320が実行する配列内因子水準生成処理S320の一例を説明するフローチャートである。
【0066】
まず、配列内因子水準生成部320は、ソフトウェア仕様情報11から、生成するテストケースのデータ構造を読み出し、第1の実施形態と同様の手法により因子及び水準を生成する(S332)。
【0067】
続いて、配列内因子水準生成部320は、生成した因子に配列型を持つ因子が含まれるか否かを判定する(S322)。
【0068】
配列内因子水準生成部320は、配列型を持つ因子が含まれない場合(S322:No)には、配列内因子水準情報420を生成せずに、本配列内因子水準生成処理を終了する。
【0069】
一方、配列内因子水準生成部320は、配列型を持つ因子が含まれる場合(S322:Yes)には、その中から一つを選択する(S323)。
【0070】
そして、配列内因子水準生成部320は、選択した因子に対し、その配列の要素の型について因子及び水準の情報を配列内因子水準情報420として出力する(S324)。
【0071】
図9に示した例では、配列内因子水準生成部320は、配列型を持つdeliveri
es因子に対して、その要素の型の因子である因子time及び因子weightについて、それぞれの水準とともに配列内因子水準情報420とする。
【0072】
配列内因子水準生成部320は、S324の処理の後、S322の処理に戻る。すなわち、配列内因子水準生成部320は、すべての配列型の因子に対してS324の処理を行うことにより、最終的に配列型の因子の数と同じ数だけの配列内因子水準情報420を出力する。
図9に示した例では、配列型を持つのはdeliveries因子の1つであるため、配列内因子水準生成部320は、配列内因子水準情報420を1つ出力する。
【0073】
<テストケース合成処理>
図12は、テストケース合成部700が実行するテストケース合成処理S700の一例を説明するフローチャートである。
【0074】
テストケース合成部700は、複数の外部テストケース610それぞれに対して内部テストケース620を合成してテストケースを生成する。テストケース合成部700は、外部テストケース610の全てに対して合成が終わるまで後述するS701~S704の処理を繰り返す。
【0075】
まず、テストケース合成部700は、全ての外部テストケース610を内部テストケース620と合成したか否かを判定する(S701)。
【0076】
テストケース合成部700は、全ての外部テストケース610を合成していない場合(S701:No)には、未だ内部テストケース620を合成していない外部テストケース610を一つ選択する(S702)。
【0077】
続いて、テストケース合成部700は、選択された外部テストケース610に配列要素数を表す因子が設定されている否かを判定する(S703)。テストケース合成部700は、選択された外部テストケース610に配列要素数を表す因子が設定されていない場合(S703:No)、S701の処理に戻る。
【0078】
一方、テストケース合成部700は、選択された外部テストケース610に配列要素数を表す因子が設定されている場合(S703:Yes)、その因子が表す配列要素数の値(水準値)の数だけ、内部テストケース620から要素値を選択し、配列の要素として置き換える(S704)。この際、テストケース合成部700は、置き換える要素値を、内部テストケース620から可能な限り重複しないように選択する。すなわち、テストケース合成部700は、合成に使用されていない内部テストケース620を、合成に使用された内部テストケース620よりも優先して、外部テストケース610に合成する。ただし、テストケース合成部700は、全ての内部テストケース620がすでに1回以上使われている場合には、重複して使用してもよい。
【0079】
その後、テストケース合成部700は、S703の処理に戻る。すなわち、テストケース合成部700は、外部テストケース610に含まれる、配列要素数を表す因子全てに対し、S704の処理を実行する。換言すると、テストケース合成部700は、外部テストケース610が配列要素数を表す因子を複数持っている場合には、配列要素数を表す因子それぞれに対し、S704の要素値の置き換えを実施する。その際、テストケース合成部700は、異なる配列間の要素の組合せについて、すでに合成したテストケース800では実現できていない組合せとなるように置き換える要素を選択することにより網羅性を高めることができる。
【0080】
テストケース合成部700は、全ての外部テストケース610中の全ての配列要素数を
表す因子の値の置き換えを完了すると(S701:Yes)、内部テストケース620中の配列の要素の値が全て置き換えに使用されたか否かを判定する(S705,S706)。すなわち、テストケース合成部700は、合成されたテストケース800の中で、全ての内部テストケース620が使用されたか否かを判定する。
【0081】
テストケース合成部700は、置き換えに使用されていない値が内部テストケース620にある場合(S706:No)には、外部テストケース610を追加し、追加した外部テストケース610の置き換えに、使用されていない値を使うことで内部テストケース620の全ての値を置き換えに使用する(S707)。テストケース合成部700は、追加する外部テストケース610として、既存の外部テストケース610の一部を再利用してもよい。または、テストケース合成部700は、網羅度を上げることによりPairwise生成部500で他の外部テストケース610を新たに生成してもよい。
【0082】
テストケース合成部700は、内部テストケース620の全ての値が置き換えに使用されている場合(S706:Yes)には、本テストケース合成処理を終了する。
【0083】
図13は、外部テストケース610に内部テストケース620を合成する方法を説明する図である。以下、本図に示す例を用いて具体的に、外部テストケース610と内部テストケース620とを合成するテストケース合成処理について説明する。
【0084】
本図には、
図9に例示する配列内因子水準情報420を用いて生成された内部テストケース620と、配列外因子水準情報410を用いて生成された外部テストケース611の一部(外部テストケース611~613)を例示している。本例では、Pairwise生成部500は、4種類の水準を持つ因子timeと6種類の水準を持つ因子weightとの組合せにより、24個の内部テストケース620を生成している。
【0085】
例えば、テストケース合成部700は、外部テストケース611については、配列要素数を表すdeliveries_lengthの値が0であるため、deliveries_lengthを空配列deliveries[]に置き換えたテストケース811を生成する。
【0086】
また、テストケース合成部700は、外部テストケース612については、deliveries_lengthの値が1であるため、内部テストケース620から1個の配列の要素の値{time:AM,weight:5}を選択する。そして、テストケース合成部700は、deliveries_lengthを、{time:AM,weight:5}を要素に持つ配列deliveries[{time:AM,weight:5}]に置き換えたテストケース812を生成する。
【0087】
また、テストケース合成部700は、外部テストケース613については、deliveries_lengthの値が2であるため、内部テストケース620から2個の配列の要素の値{time:AM,weight:10},{time:PM1,weight:5}を選択する。そして、テストケース合成部700は、deliveries_lengthを、{time:AM,weight:10},{time:PM1,weight:5}を要素に持つ配列要素数が2の配列deliveries[{time:AM,weight:10},{time:PM1,weight:5}]に置き換えたテストケース813を生成する。テストケース合成部700は、同様の処理をすべての外部テストケース610に対して実行することによりテストケース800の集合を生成する。
【0088】
なお、本例では、テストケース合成部700は、24個の内部テストケース620が全て配列の要素として使われる(外部テストケース610に合成される)ため、追加の外部
テストケース610の生成は行わない。
【0089】
ここまで、配列型の要素の型は配列型を持たない例を説明したが、実際には、配列の要素の中に配列型を持つような場合も存在する。そのような場合には、内部テストケースの生成の際に本実施形態の手順を再帰的に実施することにより、配列の中に配列を含むような場合においてもテストケースの生成が可能となる。
【0090】
本実施形態に開示する第2の方法を用いることにより、第1の実施形態に開示する第1の方法と比べて少ないテストケース数で、配列を含む仕様に対する網羅的なテストケースの生成が可能となる。
【0091】
図14は、第1の実施形態に開示する第1の方法と、第2の実施形態に開示する第2の方法のそれぞれを用いて生成したテストケース数を比較するグラフである。本図に示すグラフの横軸は、配列要素数の最大値(上限値)を示し、縦軸は、生成されたテストケース数を示す対数軸である。本図に示すグラフでは、網羅度を2と設定して、
図2に例示するソフトウェア仕様情報11からテストケースを生成した場合に生成されるテストケース数を比較している。例えば、配列要素数の最大値を50とした場合には、第1の実施形態に開示する第1の方法では4129個のテストケースが生成されるのに対して、第2の実施形態に開示する第2の方法では153個のテストケースに抑えることが可能となる。図示するように、配列要素数が大きくなるほど、テストケースの削減効果が大きくなる。
【0092】
以上説明したように、本実施形態のテストケース生成装置100Aは、配列型の因子以外の因子及びその水準を表す配列外因子水準情報、及び、配列型の因子の要素の因子及びその水準を表す配列内因子水準情報を生成し、配列外因子水準情報に基づく外部テストケース、及び、配列内因子水準情報に基づく内部テストケースを生成し、外部テストケースに内部テストケースを合成したテストケースを生成する。
【0093】
すなわち、本実施形態のテストケース生成装置100Aは、配列型の因子以外の因子と、配列型の因子の要素数の組合せについて、因子網羅のテストケースを生成することができる。これにより、第1の実施形態に開示した第1の方法に比べて、少ないテストケース数で、配列の要素数にのみ依存する不具合を効率よく検出することができる。すなわち、より少ないテストケースの数で仕様を広くカバーすることができる。
【0094】
また、本実施形態のテストケース生成装置100Aは、配列型の因子を、水準として配列の要素数の値を持つ因子に置き換えた配列外因子水準情報を生成し、外部テストケースにおける配列の要素数を表す値を、その要素数の内部テストケースを要素に持つ配列に置き換える。
【0095】
このような構成により、配列の要素数の内部テストケースが外部テストケースの配列の要素に挿入される。これにより、外部テストケース及び内部テストケースを効率的に合成することができる。
【0096】
また、本実施形態のテストケース生成装置100Aは、配列の要素数を表す値を持つ全ての外部テストケースに対して、内部テストケースを合成する。
【0097】
このような構成により、全ての外部テストケースを使用したテストケースを生成することができるため、配列型の因子以外について、因子網羅テストのテストケースを生成することができる。よって、仕様を広くカバーしたテストケースを生成することができる。
【0098】
また、本実施形態のテストケース生成装置100Aは、全ての内部テストケースを合成
に使用して、テストケースを生成する。
【0099】
このような構成により、配列型の因子の要素の各因子が持つ各水準についてテストケースを生成することができる。よって、配列内の因子の組合せについて、取り得る値の組合せを効率よく網羅したテストケースを生成することができる。
【0100】
また、本実施形態のテストケース生成装置100Aは、合成に使用されていない内部テストケースを、合成に使用された内部テストケースよりも優先して、外部テストケースに合成する。
【0101】
このような構成により、テストケース間における内部テストケースの重複を抑制することができる。これにより、より少ないテストケース数で、仕様を広くカバーしたテストケースを効率的に生成することができる。
【0102】
本発明は、上記実施形態に限定されるものではなく、その要旨を逸脱しない範囲内で、任意の構成要素を用いて実施可能である。以上説明した実施形態や変形例はあくまで一例であり、発明の特徴が損なわれない限り、本発明はこれらの内容に限定されるものではない。また、上記では種々の実施形態や変形例を説明したが、本発明はこれらの内容に限定されるものではない。本発明の技術的思想の範囲内で考えられるその他の態様も本発明の範囲内に含まれる。
【0103】
例えば、本実施形態の各装置が備えるハードウェアの一部は、他の装置に設けてもよい。
【0104】
また、テストケース生成装置の各プログラムは他の装置に設けてもよいし、あるプログラムを複数のプログラムからなるものとしてもよいし、複数のプログラムを一つのプログラムに統合してもよい。
【0105】
また、上述した実施形態では、因子水準生成部300及び配列外因子水準生成部310は、生成パラメータ設定情報12から配列要素数を読み出しているが、これに限らず、ソフトウェア仕様情報11に配列要素数が定義されている場合には、ソフトウェア仕様情報11から配列要素数を読み出してもよい。
【符号の説明】
【0106】
11 ソフトウェア仕様情報
12 生成パラメータ設定情報
100,100A テストケース生成装置
200 記憶装置
210,210A プログラム
250 演算装置
260 メモリ
270 入出力装置
300 因子水準生成部
310 配列外因子水準生成部
320 配列内因子水準生成部
400 因子水準情報
410 配列外因子水準情報
420 配列内因子水準情報
500 Pairwise生成部
610 外部テストケース
620 内部テストケース
700 テストケース合成部
800 テストケース