(57)【要約】      （修正有）【課題】解析対象のユーザ記述クラスを指定することにより、テストケースを効率的に生成する装置を提供する。【解決手段】テストケース生成装置１００は、ＶＣシナリオ生成部１０１と、テストシナリオ生成部１０３と、テストデータ生成部１０５とを有する。ＶＣシナリオ生成部１０１は、ＭＶＣ（Ｍｏｄｅｌ  Ｖｉｅｗ  Ｃｏｎｔｒｏｌｌｅｒ）に従って設計されたアプリケーションのプログラムをテスト対象としたときに、ソースコード内のＣｏｎｔｒｏｌｌｅｒの情報を用いてＶｉｅｗの遷移図を生成する。テストシナリオ生成部１０３は、生成されたＶＣシナリオにＶｉｅｗ操作情報及び初期テストデータを追加した初期テストケースを生成する。テストデータ生成部１０５は、Ｃｏｎｃｏｌｉｃ  ＴｅｓｔｉｎｇやＳＢＳＴのようなテストデータ生成手法を用いて、指定されたユーザ記述クラスを解析対象としてテストケースを生成する。【選択図】図２
2017194892.tif 000002
【特許請求の範囲】
【請求項１】
少なくともView及びControllerで構成されたプログラムに対して、テストシナリオ及びテストデータの組み合わせであるテストケースを生成するテストケース生成プログラムであって、コンピュータに、
Controllerの情報を用いてViewの遷移図を生成し、当該Viewの遷移図から状態遷移図に対する所定のカバレッジ基準に基づいてView及びControllerの繋がりを表すVCシナリオを生成するVCシナリオ生成機能と、
前記生成されたVCシナリオにView操作情報を追加したテストシナリオを生成するテストシナリオ生成機能と、
指定されたユーザ記述クラスを解析対象としてテストデータを生成するテストデータ生成機能と、
を実現させるためのテストケース生成プログラム。
【請求項２】
前記テストシナリオ生成機能は、前記生成されたVCシナリオと同じ遷移をするView操作情報及び初期テストデータを取得し、当該VCシナリオに当該View操作情報及び初期テストデータを追加した初期テストケースを生成する、請求項１に記載のテストケース生成プログラム。
【請求項３】
前記テストデータ生成機能は、解析対象のユーザ記述クラスに対してプログラムの分岐を解析するためのコードを挿入することにより、テストデータを生成する、請求項１又は２に記載のテストケース生成プログラム。
【請求項４】
前記テストデータ生成機能は、解析対象のユーザ記述クラス内における入力値に対する演算が施される箇所及び分岐の箇所に、入力値を記号に置き換えるためのコードを挿入し、入力値を記号に置き換えて得られた制約式を解析することにより、テストデータを生成する、請求項３に記載のテストケース生成プログラム。
【請求項５】
前記テストデータ生成機能は、解析対象のユーザ記述クラス内における分岐の箇所に、分岐の判定を定量的に評価するための評価値を出力するコードを挿入し、出力された評価値を解析することにより、テストデータを生成する、請求項３に記載のテストケース生成プログラム。
【請求項６】
少なくともView及びControllerで構成されたプログラムに対して、テストシナリオ及びテストデータの組み合わせであるテストケースを生成するテストケース生成装置におけるテストケース生成方法であって、
前記テストケース生成装置が、Controllerの情報を用いてViewの遷移図を生成し、当該Viewの遷移図から状態遷移図に対する所定のカバレッジ基準に基づいてView及びControllerの繋がりを表すVCシナリオを生成するステップと、
前記テストケース生成装置が、前記生成されたVCシナリオにView操作情報を追加したテストシナリオを生成するステップと、
前記テストケース生成装置が、指定されたユーザ記述クラスを解析対象としてテストデータを生成するステップと、
を有するテストケース生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テストケース生成プログラム及びテストケース生成方法に関し、特に、ユーザ記述クラスに対して網羅性の高いテストケースを生成する技術に関する。
【背景技術】
【０００２】
ソフトウェア開発工程におけるテストでは、プログラムが設計通りに実行するか否かを確認するため、テストケースが必要となる。人手に代わり、自動でテストケースを準備できれば、開発コスト改善につながる。
【０００３】
テストケースはテストの手順を表すテストシナリオと、テストシナリオを実現するための具体的なデータであるテストデータから構成されている。
【０００４】
テストケースを生成するために、プログラムの設計に基づきテストシナリオやテストデータを自動的に生成する手法が検討されている。
【０００５】
非特許文献１では、入力値定義及び処理フロー図を入力とし、テストシナリオとテストデータ（整数型、文字列型）を生成することが提案されている。
【０００６】
また、非特許文献２では、SBST（Search-Based Software Testing）の探索アルゴリズムとして遺伝的アルゴリズムを用いて、オブジェクト指向プログラムにおけるテストデータを自動生成することが提案されている。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】張暁晶，星野隆，"設計モデルを用いたテスト項目抽出とテストデータ生成手法"，信学技報，第109巻，SS2009-7，pp.37-42，2009年
【非特許文献２】"Automated Test Data Generation for Coupling Based Integration Testing of Object Oriented Programs using Evolutionary Approaches"，2013 10th International Conference on Information Technology: New Generations，pp.369-374，2013年
【発明の概要】
【発明が解決しようとする課題】
【０００８】
プログラムが設計通りに実行するか否かを確認するためには、どのような手順でテストを実行するかというテストシナリオと、テストシナリオで用いられる具体的な入力値であるテストデータとの双方が必要となる。従って、テストシナリオ及びテストデータの組み合わせを効率的に生成することが求められる。
【０００９】
非特許文献１の技術によれば、入力値定義や処理フロー図を人手で作成する必要があるため、テストシナリオ及びテストデータを効率的に生成することは困難である。
【００１０】
また、非特許文献２の技術によれば、テストシナリオの抽出はできないため、ソースコード上のどの経路をテストするのかを人手で指定する必要がある。更に、ソースコードの規模が大きい場合には、SBSTの探索アルゴリズムは計算爆発を起こす。
【００１１】
本発明は、解析対象のユーザ記述クラスを指定することにより、テストシナリオ及びテストデータの組み合わせであるテストケースを効率的に生成することを目的とする。
【課題を解決するための手段】
【００１２】
本発明の一形態に係るテストケース生成プログラムは、
少なくともView及びControllerで構成されたプログラムに対して、テストシナリオ及びテストデータの組み合わせであるテストケースを生成するテストケース生成プログラムであって、コンピュータに、
Controllerの情報を用いてViewの遷移図を生成し、当該Viewの遷移図から状態遷移図に対する所定のカバレッジ基準に基づいてView及びControllerの繋がりを表すVCシナリオを生成するVCシナリオ生成機能と、
前記生成されたVCシナリオにView操作情報を追加したテストシナリオを生成するテストシナリオ生成機能と、
指定されたユーザ記述クラスを解析対象としてテストデータを生成するテストデータ生成機能と、
を実現させることを特徴とする。
【００１３】
また、本発明の一形態に係るテストケース生成方法は、
少なくともView及びControllerで構成されたプログラムに対して、テストシナリオ及びテストデータの組み合わせであるテストケースを生成するテストケース生成装置におけるテストケース生成方法であって、
前記テストケース生成装置が、Controllerの情報を用いてViewの遷移図を生成し、当該Viewの遷移図から状態遷移図に対する所定のカバレッジ基準に基づいてView及びControllerの繋がりを表すVCシナリオを生成するステップと、
前記テストケース生成装置が、前記生成されたVCシナリオにView操作情報を追加したテストシナリオを生成するステップと、
前記テストケース生成装置が、指定されたユーザ記述クラスを解析対象としてテストデータを生成するステップと、
を有することを特徴とする。
【発明の効果】
【００１４】
本発明によれば、解析対象のユーザ記述クラスを指定することにより、テストシナリオ及びテストデータの組み合わせであるテストケースを効率的に生成することが可能になる。
【図面の簡単な説明】
【００１５】
【図１】分岐網羅率と条件網羅率との関係を示す図
【図２】本発明の実施例に係るテストケース生成装置の機能ブロック図
【図３】Viewの遷移図とVCシナリオの例を示す図
【図４】状態遷移図に対する所定のカバレッジ基準を示す図
【図５】本発明の実施例に係るテストケース生成方法のフローチャート
【図６】図５のステップＳ００１の詳細フローチャート
【図７】図５のステップＳ００２の詳細フローチャート
【図８】図５のステップＳ００３の詳細フローチャート
【図９】図５のステップＳ００５の詳細フローチャート
【図１０】図５のステップＳ００７の詳細フローチャート
【発明を実施するための形態】
【００１６】
以下、図面を参照して本発明の実施例について説明する。
【００１７】
本発明の実施例では、プログラムのテストシナリオ及びテストデータの組み合わせであるテストケースを生成するテストケース生成プログラム及びテストケース生成方法について説明する。なお、テストケース生成プログラムに関する説明の便宜上、プログラムの各機能をコンピュータ上に実現したテストケース生成装置を例に挙げて説明する。
【００１８】
テストケース生成装置は、Webアプリケーションのようなユーザインタフェースをもつアプリケーションのプログラムをテスト対象として、テストシナリオを生成する。このようなアプリケーションは、MVC（Model View Controller）に従って設計され、少なくともView及びControllerで構成される。Modelは、アプリケーションが扱うデータ及びロジックを表現するための要素であり、Viewは、入出力や表示を行うための要素であり、Controllerは、Viewからの入力に応じて必要なロジックの実行をModelに依頼し、その結果表示をViewに依頼するための要素である。MVCに従って設計されたプログラムでは、Controllerの情報を用いてView間の繋がりが抽出できる。テストケース生成装置は、View間の繋がりを表すViewの遷移図から状態遷移図に対する所定のカバレッジ基準に基づいてView及びControllerの繋がりを表すVCシナリオを生成する。
【００１９】
テストケース生成装置は、生成されたVCシナリオを満たすようなテストデータを、テスト対象のプログラムを動かしながら生成する。一方、ViewとControllerの名前の羅列から構成されるVCシナリオの情報だけでは、どういった操作を行えば良いかわからない。そこで、テストケース生成装置は、クローラやユーザ操作等によってVCシナリオにView操作情報を加えることで、テストシナリオを生成する。
【００２０】
更に、テストケース生成装置は、Concolic TestingやSBSTのようなテストデータ生成手法を用いて、テストデータを自動生成する。これらのテストデータ生成手法では、以下のように、プログラムの分岐を解析するためのコードを挿入することにより、テストデータを生成する。
【００２１】
Concolic Testingとは、入力値を記号に置き換えて得られた制約式を解析することによりテストデータを生成するテストデータ生成手法である。例えば、入力値>0という分岐に対して具体的な数値を用いる代わりに、数値を記号xに置き換えてx>0という制約式を解析することにより、分岐条件を満たすテストデータを生成する。
【００２２】
SBSTとは、分岐の判定を定量的に評価するための評価値を解析することによりテストデータを生成するテストデータ生成手法である。例えば、入力値>0という分岐に対して(0-入力値)という評価関数を設計し、評価関数の評価値を解析することで、分岐条件を満たすテストデータを生成する。
【００２３】
ただし、結合テスト対象となる規模のソースコードに対し、Concolic TestingやSBSTを行うと計算爆発が起きるため、指定されたユーザ記述クラスを解析対象としてテストデータを生成する。すなわち、フレームワークやライブラリ等のユーザが記述していない箇所に対しては、カバレッジを向上させるようなテストケースを生成しないことで、計算爆発を回避する。
【００２４】
最後に、テストケース生成装置は、テストシナリオ及びテストデータの組み合わせであるテストケースを出力する。
【００２５】
＜用語の説明＞
まず、本発明の実施例において用いられる用語について説明する。
【００２６】
テストスイートとは、複数のテストケースと、それぞれのテストケースを実行したときの分岐結果から構成される。本発明の実施例における最終的な出力となるテストケースとそのテストケースの分岐結果から構成されるテストスイートを出力テストスイートと呼び、SBSTを実行するために用いられるテストスイートを素材テストスイートと呼ぶ。例えば、テストスイートは、[テストケース1,分岐結果1],[テストケース2,分岐結果2],…として定義される。
【００２７】
テストケースとは、プログラムのテストを実行するために必要な情報を所持しているものであり、１つのテストシナリオと１つのテストデータから構成される。
【００２８】
テストシナリオとは、テストを実行するための手順を表し、VCシナリオとView操作情報であるステップの集合から構成される。例えば、テストシナリオは、[VCシナリオ],[ステップ1,ステップ2,…]として定義される。
【００２９】
テストデータとは、テストシナリオを実現するための具体的な値の集合である。SBSTにおいて、この具体的な値を求めるために遺伝的アルゴリズムが用いられる場合、テストデータは、遺伝子の集合と考えられる。便宜上、Concolic Testing等が用いられる場合であっても、テストデータを遺伝子の集合として定義する。例えば、テストデータは、遺伝子1,遺伝子2, …として定義される。
【００３０】
Viewの遷移図とは、View間の繋がりを表した遷移図である。MVCに従って設計されたプログラムでは、ControllerはViewからの入力をModelに伝え、Modelの実行結果をViewに伝えるため、Controllerの情報を用いてView間の繋がりであるViewの遷移図が生成できる。
【００３１】
VCシナリオとは、Viewの遷移図から生成されるView名及びController名の羅列である。VCシナリオは、View名で始まり、View名で終わる。例えば、VCシナリオは、View名→Controller名→View名→…→View名として定義される。
【００３２】
ステップとは、テストを実行するための手順であるテストシナリオの最小単位を表し、Webアプリケーションである場合には、htmlにおけるフォームやボタンに付与されるidと、動作を示すprocから構成される。
【００３３】
遺伝子とは、テストデータの各要素を表し、Webアプリケーションである場合には、htmlにおけるフォームのidと、具体的な値であるvalueから構成される。
【００３４】
例えば、View1においてIDとPWを入力して、transmitというidが付与されている「ログイン」ボタンを押下するWebアプリケーションをテストする例を考える。この例では、１つのテストケースは、以下のテストシナリオとテストデータの組み合わせで構成される。
【００３５】
テストシナリオ：
VCシナリオ：View1→Controller1→…
ステップ1：id="ID", proc="入力"
ステップ2：id="PW", proc="入力"
ステップ3：id＝"transmit", proc="押下"
…
テストデータ：
遺伝子1：id="ID", value="aaaa"
遺伝子2：id="PW", value="1234"
…
すなわち、このテストケースは、（１）View1においてid="ID"となっているフォームに"aaaa"を入力し、（２）id="PW"となっているフォームに"1234"を入力し、（３）id="transmit"となっているボタンを押下することを意味する。
【００３６】
分岐結果は、テストケースを実行したときのコード上の各分岐の結果である分岐結果要素から構成される。例えば、分岐結果は、分岐結果要素1,分岐結果要素2,…として定義される。
【００３７】
分岐結果要素は、判定分岐、判定順番、判定結果、及び評価値から構成される。判定分岐は、判定対象の分岐を示し、すなわち、どの分岐を判定したかを表す。判定順番は、判定分岐がプログラムの中の全分岐の中で何番目に判定されたかを表す。判定結果は、判定分岐の判定結果（True/False）を表す。評価値は、分岐の判定を定量的に表す値を表す。
【００３８】
評価値について更に具体的に説明する。評価値は、分岐条件を満たしている度合い又は分岐条件を満たしていない度合いを表し、判定分岐に対して設定された評価関数によって取得できる。例えば、if(x>0)という分岐がある場合、x=1の場合とx=100の場合では同じTrueを返すが、x=100の時の方がx=1の時と比べて0より大きいため、より分岐条件を満たしている度合いは強いと評価することができる。分岐条件を満たしている場合には評価値は負の値を持ち、満たしていない場合には正の値を持つ。評価関数は、分岐に対して設定され、例えば、分岐条件がa==bである場合、評価関数はabs(a-b)として定義されてもよく、分岐条件がa!=bである場合、評価関数は-abs(a-b)として定義されてもよく、分岐条件がa<b又はa<=bである場合、評価関数はa-bとして定義されてもよく、分岐条件がa>b又はa>=bである場合、評価関数はb-aとして定義されてもよい。
【００３９】
カバレッジとは、プログラムのソースコードがテストされた割合を示す。単位は%である。カバレッジの基準は複数存在し、例えば、分岐網羅率及び条件網羅率が存在するが、特に明記しない限り、本発明の実施例では分岐網羅率をカバレッジと呼ぶ。カバレッジの高いテストデータの集合のことを網羅的なテストデータ又は網羅性の高いテストデータと呼ぶ。
【００４０】
図１に、分岐網羅率と条件網羅率との関係を示す。分岐網羅率は、C1カバレッジとも呼ばれ、プログラム内の分岐がテストされた割合を示す。例えば、図１のような２つの分岐A及び分岐Bが存在するプログラムにおいてC1カバレッジを100%とするためには、分岐A=False且つ分岐B=Trueの場合と、分岐A=True且つ分岐B=Falseの場合の２つをテストする必要がある。
【００４１】
また、条件網羅率は、C2カバレッジとも呼ばれ、プログラム内の条件がテストされた割合を示す。例えば、図１のような２つの分岐A及び分岐Bが存在するプログラムにおいてC2カバレッジを100%とするためには、分岐A=False且つ分岐B=Trueの場合と、分岐A=True且つ分岐B=Falseの場合と、分岐A=True且つ分岐B=Trueの場合と、分岐A=False且つ分岐B=Falseの場合の４つをテストする必要がある。
【００４２】
＜テストケース生成装置の構成＞
次に、本発明の実施例に係るテストケース生成装置の構成について説明する。図２は、本発明の実施例に係るテストケース生成装置１００の機能ブロック図である。
【００４３】
テストケース生成装置１００は、CPU（Central Processing Unit）等のプロセッサ、RAM（Random Access Memory）やROM（Read Only Memory）等のメモリ装置、ハードディスク等の記憶装置等から構成されたコンピュータでもよい。例えば、テストケース生成装置の機能及び処理は、記憶装置又はメモリ装置に格納されているデータやプログラムをプロセッサが実行することによって実現されてもよい。
【００４４】
テストケース生成装置１００は、ソースコードを入力とし、テストシナリオ及びテストデータの組み合わせであるテストケースを出力する。
【００４５】
テストケース生成装置１００は、VCシナリオ生成部１０１と、テストシナリオ生成部１０３と、テストデータ生成部１０５とを有する。
【００４６】
VCシナリオ生成部１０１は、MVCに従って設計されたアプリケーションのプログラムをテスト対象としたときに、ソースコード内のControllerの情報を用いてViewの遷移図を生成する。図３の左側にViewの遷移図の例を示す。遷移図は、状態と、状態同士の関連性を表す線である遷移で構成される。ソースコードにおけるViewは１つの状態と考えられ、Controllerも１つの状態と考えられる。ControllerはViewからの入力をModelに伝え、Modelの実行結果をViewに伝えるため、Controllerの情報を用いてView間の繋がりであるViewの遷移図が抽出できる。更に、VCシナリオ生成部１０１は、Viewの遷移図から状態遷移図に対する所定のカバレッジ基準に基づいてView及びControllerの繋がりを表すVCシナリオを生成する。図３の左側に示すように、Controller1、Controller2、Controller3によってView1、View2、View3の繋がりであるViewの遷移図が生成できると、図３の右側に示すように、１つのView名から始まり１つのView名で終わる複数のVCシナリオが生成できる。VCシナリオの数は状態の数によって膨大な数となるため、状態遷移図に対する所定のカバレッジ基準に基づいてVCシナリオを生成する。
【００４７】
図４は、状態遷移図に対するカバレッジ基準を示す図である。例えば、状態遷移図に対する所定のカバレッジ基準として、All-states、All-transitions、All-transition-pairs、All-loop-free-paths、All-one-loop-paths、All-paths等が存在する。All-statesとは、全状態がどこかのシナリオに含まれるという基準である。例えば、図４に示す状態遷移図を例に挙げると、状態A→状態B→状態D→状態E→状態B→状態Cのシナリオは、All-statesを満たす。All-transitionsとは、全ての長さが1以下のシナリオ（１遷移）がカバーされるという基準である。例えば、図４に示す状態遷移図を例に挙げると、状態A→状態B、状態B→状態C、状態B→状態D、状態D→状態E、状態E→状態Bのシナリオは、All-transitionsを満たす。All-transition-pairsとは、全ての長さが2以下のパス（遷移ペア）がカバーされるという基準である。例えば、図４に示す状態遷移図を例に挙げると、All-transitionsを満たすシナリオに加えて、状態A→状態B→状態C、状態A→状態B→状態D、状態B→状態D→状態E、状態D→状態E→状態B、状態E→状態B→状態D、状態E→状態B→状態Cのシナリオは、All-transition-pairsを満たす。All-loop-free-pathsとは、同じ状態が2回以上現れず、且つ、他のシナリオに部分的に含まれないようなシナリオ（prime pathと呼ばれる）が全てカバーされるという基準である。なお、All-loop-free-pathsはAll-transitionsを保証するものではない。例えば、図４に示す状態遷移図を例に挙げると、状態A→状態B→状態C、状態A→状態B→状態D→状態Eのシナリオは、All-loop-free-pathsを満たす。All-one-loop-pathsとは、All-loop-free-pathsに加えて、ループ1つのみを1回だけ回るシナリオがカバーされるという基準である。例えば、図４に示す状態遷移図を例に挙げると、状態A→状態B→状態C、状態A→状態B→状態D→状態E→状態B→状態Cのシナリオは、All-one-loop-pathsを満たす。All-pathsとは、全てのシナリオがカバーされるという基準である。なお、通常はループが存在するため、All-pathsを満たすシナリオは無限通り存在するため、有用ではない。
【００４８】
テストシナリオ生成部１０３は、生成されたVCシナリオにView操作情報を追加する。例えば、クローラやユーザ操作等によって、生成されたVCシナリオを満たすようなView操作情報を追加する。View操作情報は、ステップの集合で表される。具体的には、クローラやユーザ操作等によってテスト対象のプログラムを動かすことで、テストシナリオ生成部１０３は、生成されたVCシナリオと同じ遷移をするView操作情報を取得すると共に、View操作情報を取得したときのテストデータである初期テストデータを取得する。テストシナリオ生成部１０３は、VCシナリオにView操作情報及び初期テストデータを追加した初期テストケースを生成する。
【００４９】
テストデータ生成部１０５は、例えば、Concolic TestingやSBSTのようなテストデータ生成手法を用いて、指定されたユーザ記述クラスを解析対象としてテストデータを生成する。解析対象のユーザ記述クラスに対しては、プログラムの分岐を解析するためのコードを挿入するが、フレームワークやライブラリ等のユーザが記述していない箇所は解析対象外とし、プログラムの分岐を解析するためのコードを挿入しない。例えば、テストデータ生成部１０５は、Concolic Testingに従って、解析対象のユーザ記述クラス内における入力値に対する演算が施される箇所及び分岐の箇所に、入力値を記号に置き換えるためのコードを挿入し、入力値を記号に置き換えて得られた制約式を解析することにより、テストデータを生成してもよい。また、テストデータ生成部１０５は、SBSTに従って、解析対象のユーザ記述クラス内における分岐の箇所に、分岐の判定を定量的に評価するための評価値を出力するコードを挿入し、出力された評価値を解析することにより、テストデータを生成してもよい。SBSTの場合、分岐結果を出力するコードが挿入されてもよい。
【００５０】
＜テストケース生成方法の手順＞
次に、本発明の実施例に係るテストケース生成方法について説明する。図５は、本発明の実施例に係るテストケース生成方法のフローチャートである。
【００５１】
まず、ステップＳ００１において、VCシナリオ生成部１０１は、テスト対象のプログラムのソースコードを入力として受け取り、ソースコード内のControllerの情報を用いて、View間の繋がりを表すViewの遷移図を生成する。
【００５２】
ステップＳ００１について図６を参照して更に説明する。
【００５３】
ステップＳ１０１において、VCシナリオ生成部１０１は、テスト対象のプログラムのソースコードを入力として受け取り、ソースコード内のViewを抽出する。
【００５４】
ステップＳ１０２において、VCシナリオ生成部１０１は、テスト対象のプログラムのソースコードを入力として受け取り、Controllerの情報を用いてView間の繋がりを検出する。具体的には、VCシナリオ生成部１０１は、抽出されたViewの１つを対象Viewとして選択し、対象View名で指定されたViewの遷移先のControllerを取得する。そして、取得した遷移先のControllerの遷移先のViewを対象Viewの遷移先のViewとする。ステップＳ１０１で抽出した各Viewに上記の処理を繰り返すことで、各対象Viewの全ての遷移先のView名と、これらの間に存在するController名が出力される。
【００５５】
ステップＳ１０３において、VCシナリオ生成部１０１は、各対象Viewの全ての遷移先のView名と、これらの間に存在するController名を入力として受け取り、Viewの遷移図を作成する。Viewの遷移図には、View名だけでなく、Controller名も記録される。Viewの遷移図が生成された場合、図５のステップＳ００２に戻る。
【００５６】
次に、図５のステップＳ００２において、VCシナリオ生成部１０１は、Viewの遷移図を入力として受け取り、Viewの遷移図に対して、状態遷移図に対する所定のカバレッジ基準に基づいてVCシナリオを生成する。
【００５７】
ステップＳ００２について図７を参照して更に説明する。
【００５８】
ステップＳ１０４において、VCシナリオ生成部１０１は、Viewの遷移図を状態遷移図として扱い、All-states等の状態遷移図に対する所定のカバレッジ基準に基づいて、複数のVCシナリオを作成する。VCシナリオが生成された場合、図５のステップＳ００３に戻る。
【００５９】
次に、図５のステップＳ００３において、テストシナリオ生成部１０３は、VCシナリオを入力として受け取り、各VCシナリオに対してVCシナリオを満たすテストケースを、クローラ等の技術を用いて生成する。そして、VCシナリオを実現するテストシナリオ及びテストデータを１件のテストケース（初期テストケース）として出力する。
【００６０】
ステップＳ００３について図８を参照して更に説明する。
【００６１】
ステップＳ１０５において、テストシナリオ生成部１０３は、テスト対象のプログラムとVCシナリオを入力として受け取り、クローラ等によってテスト対象のプログラムを実際に操作し、VCシナリオの先頭のViewが表すhtmlファイルにアクセスするURLに移動する。なお、テスト対象のプログラムの操作は、クローラ等の他にユーザによる操作でも代用可能である。
【００６２】
ステップＳ１０６において、テストシナリオ生成部１０３は、空のテストケースTC0を作成する。空のテストケースTC0には、テストシナリオであるVCシナリオとステップの集合の具体的な値は入っておらず、テストデータも入っていない。
【００６３】
ステップＳ１０７において、テストシナリオ生成部１０３は、テスト対象のプログラムとテストケースTC0を入力として受け取り、クローラ等によってテスト対象のプログラムを実際に操作し、テスト対象のプログラムを操作したときに入力したフォームのidやその値をテストケースTC0のテストデータに追加し、入力したフォームのidや押下したボタンのid等をテストケースTC0のテストシナリオに追加する。なお、テスト対象のプログラムの操作は、クローラ等の他にユーザによる操作でも代用可能である。また、操作中のViewやControllerの遷移も取得し、テストケースTC0のテストシナリオに追加する。新しいViewに遷移したところで次のステップＳ１０８に移行する。
【００６４】
ステップＳ１０８において、テストシナリオ生成部１０３は、テストケースTC0とVCシナリオを入力として受け取り、VCシナリオのView及びControllerの遷移と、テストケースTC0が途中又は最後まで同じ遷移をしているか否かを判断する。同じ遷移をしていない場合、ステップＳ１０９に移行し、同じ遷移をしている場合、ステップＳ１１０に移行する。
【００６５】
ステップＳ１０９において、テストシナリオ生成部１０３は、テストケースTC0を入力として受け取り、VCシナリオの遷移とテストケースTC0の遷移が異なる場合、テストケースTC0はVCシナリオを満たさないため、テストケースTC0を破棄し、ステップＳ１０５に移行する。
【００６６】
ステップＳ１１０において、テストシナリオ生成部１０３は、テストケースTC0とVCシナリオを入力として受け取り、VCシナリオのView及びControllerの遷移と、テストケースTC0が最後まで同じ遷移をしているか否かを判断する。最後まで同じ遷移をしていない場合、すなわち、途中までは同じ遷移をしているが、最後まで同じ遷移をしていない場合には、更にテスト対象のプログラムを操作する必要があるため、ステップＳ１０７に移行する。同じ遷移をしている場合、ステップＳ１１１に移行する。
【００６７】
ステップＳ１１１において、テストシナリオ生成部１０３は、テストケースTC0を入力として受け取り、テストケースTC0を初期テストケースとして出力する。初期テストケースが出力された場合、図５のステップＳ００５に戻る。
【００６８】
次に、図５のステップＳ００５において、テストデータ生成部１０５は、テスト対象のプログラムのバイトコードと、解析対象のユーザ記述クラス名を入力として受け取る。なお、バイトコードの代わりにソースコードを受け取ってもよい。また、テストデータ生成部１０５は、解析対象外のユーザ記述クラス名を入力として受け取ってもよい。解析対象のユーザ記述クラス名及び解析対象外のユーザ記述クラス名は、ネームスペースで指定されてもよい。テストデータ生成部１０５は、解析対象のユーザ記述クラス内のメソッド上のバイトコードに対して、テストデータ生成に必要な情報を取得するためのコードを挿入する。例えば、Concolic Testingでは、入力値を記号に置き換えて得られた制約式を解析する必要があるため、入力値を記号に置き換えるためのコードを挿入する。例えば、SBSTでは、分岐の評価値を解析する必要があるため、分岐に対する評価関数の値を出力するためのコードを挿入する。テストデータ生成部１０５は、解析対象のユーザ記述クラスにコード挿入されたバイトコードを出力する。
【００６９】
ステップＳ００５について図９を参照して更に説明する。
【００７０】
ステップＳ１１２において、テストデータ生成部１０５は、ユーザにより入力された解析対象のユーザ記述クラス名を入力として受け取る。また、テストデータ生成部１０５は、ユーザにより入力された解析対象外のユーザ記述クラス名を入力として受け取ってもよい。ユーザ記述クラス名がネームスペースで指定された場合、テストデータ生成部１０５は、指定されたネームスペースを持つクラスの名前をバイトコードを調べて取得する。ただし、解析対象外のユーザクラス名が存在する場合、テストデータ生成部１０５は、解析対象外のユーザクラス名を持つユーザ記述クラスを除外する。
【００７１】
ステップＳ１１３において、テストデータ生成部１０５は、解析対象のユーザ記述クラス内のメソッド上のバイトコードの各行を調べ、テストデータ生成に必要な情報を取得するためのコードを挿入する。例えば、テストデータ生成部１０５は、Concolic Testingで必要な情報を取得するために、解析対象のユーザ記述クラス内における入力値に対する演算が施される行及び分岐の行に、入力値を記号に置き換えるためのコードを挿入する。例えば、テストデータ生成部１０５は、SBSTで必要な情報を取得するために、解析対象のユーザ記述クラス内における分岐の箇所に、分岐の判定を定量的に評価するための評価値を出力するコードを挿入する。ユーザ記述クラス内のメソッド上でコードを挿入する必要がない行に対しては何も実施しない。コードが挿入された場合、図５のステップＳ００６に戻る。
【００７２】
次に、初期テストケースの中から１つのテストケースを指定し、以下のようにテストデータを生成する。
【００７３】
図５のステップＳ００６において、テストデータ生成部１０５は、空の出力テストスイートを作成する。空の出力テストスイートには、テストシナリオであるVCシナリオとステップの集合の具体的な値は入っておらず、テストデータも分岐結果も入っていない。
【００７４】
次に、図５のステップＳ００７において、テストデータ生成部１０５は、コード挿入されたバイトコードと、初期テストケースと、出力テストスイートを入力として受け取り、初期テストケースに基づき、Concolic TestingやSBSTのようなテストデータ自動生成技術に従って網羅的なテストデータを生成し、得られたテストケースを出力テストスイートに追加する。
【００７５】
ステップＳ００７について図１０を参照して更に説明する。
【００７６】
ステップＳ１１４において、テストデータ生成部１０５は、初期テストケースを入力として受け取り、初期テストケースを複製してテストケースTCNと定義する。
【００７７】
ステップＳ１１５において、テストデータ生成部１０５は、テストケースTCN及びコード挿入されたバイトコードを入力として受け取り、Concolic TestingやSBSTのようなテストデータ自動生成技術に従って新しいテストデータを生成する。予めテストデータ生成に必要な情報を取得するためのコードが挿入されているため、テストデータ生成部１０５は、得られた情報を解析することにより、新しいテストデータを生成することができる。例えば、Concolic Testingの場合には、入力値を記号に置き換えて得られた制約式を解析することにより、新しいテストデータが生成される。また、SBSTの場合には、分岐結果の評価値を解析することにより、新しいテストデータが生成される。
【００７８】
ステップＳ１１６において、テストデータ生成部１０５は、生成したテストデータと初期テストケースを入力として受け取り、生成したテストデータを初期テストケースの中のテストデータと置き換えて、新しいテストケースTCNを出力する。
【００７９】
ステップＳ１１８において、テストデータ生成部１０５は、テストケースTCNと出力テストスイートを入力として受け取り、テストケースTCNを出力テストスイートに加えることでカバレッジが向上するか否かを判断する。カバレッジが向上する場合、ステップＳ１１９に移行し、カバレッジが向上しない場合、ステップＳ１２０に移行する。
【００８０】
ステップＳ１１９において、テストデータ生成部１０５は、テストケースTCNと出力テストケースを入力として受け取り、テストケースTCNを出力テストスイートに追加する。
【００８１】
ステップＳ１２０において、テストデータ生成部１０５は、解析が終わっていない場合、ステップＳ１１５に移行し、テストデータの生成を繰り返す。解析が終わった場合、図５のステップＳ００９に戻る。
【００８２】
次に、図５のステップＳ００９において、テストデータ生成部１０５は、出力テストスイートの中の全てのテストケースをファイル等に出力する。
【００８３】
以上の手順により、テストケース生成装置１００は、テストシナリオ及びテストデータの組み合わせであるテストケースを出力することができる。
【００８４】
＜本発明の実施例の効果＞
本発明の実施例によれば、解析対象のユーザ記述クラスを指定することにより、テストシナリオ及びテストデータの組み合わせであるテストケースを効率的に生成することが可能になる。
【００８５】
特に、Webアプリケーションにおける画面遷移に対する網羅性の高いテストケースが自動生成できる。WebアプリケーションにおけるViewは画面に非常に近い粒度を持つため、Viewの遷移図に対して状態遷移図に対する所定のカバレッジ基準を用いてテストシナリオを抽出することで、画面遷移の粒度に近く、また、画面遷移に対する網羅性の高いテストシナリオを自動生成できる。
【００８６】
更に、自動生成したテストシナリオを実現するためのテストデータを、Concolic TestingやSBSTのようなテストデータ生成手法を用いて自動生成できる。このとき、フレームワークやライブラリ等のユーザが記述していない箇所に対して分岐を解析しないことで、計算爆発を回避することができ、従って、結合テストレベルのテストケースも生成できる。フレームワークやライブラリ等のユーザが記述していない箇所に対してカバレッジを向上させるようなテストケースを生成せず、その代わりに、解析対象のユーザ記述クラスに対するカバレッジの高いテストケース生成に計算リソースを割り当てることができる。
【００８７】
説明の便宜上、本発明の実施例に係るテストケース生成装置は機能的なブロック図を用いて説明しているが、本発明の実施例に係るテストケース生成装置は、ハードウェア、ソフトウェア又はそれらの組み合わせで実現されてもよい。例えば、本発明の実施例は、コンピュータに対して本発明の実施例に係るテストケース生成装置の各機能を実現させるプログラム、コンピュータに対して本発明の実施例に係るテストケース生成方法の各手順を実行させるプログラム等により、実現されてもよい。また、各機能部が必要に応じて組み合わせて使用されてもよい。また、本発明の実施例に係るテストケース生成方法は、実施例に示す順序と異なる順序で実施されてもよい。
【００８８】
以上、解析対象のユーザ記述クラスを指定することにより、テストシナリオ及びテストデータの組み合わせであるテストケースを効率的に生成するための手法について説明したが、本発明は、上記の実施例に限定されることなく、特許請求の範囲内において、種々の変更・応用が可能である。
【符号の説明】
【００８９】
１００  テストケース生成装置
１０１  VCシナリオ生成部
１０３  テストシナリオ生成部
１０５  テストデータ生成部
【図１】
2017194892.tif 000003
【図２】
2017194892.tif 000004
【図３】
2017194892.tif 000005
【図４】
2017194892.tif 000006
【図５】
2017194892.tif 000007
【図６】
2017194892.tif 000008
【図７】
2017194892.tif 000009
【図８】
2017194892.tif 000010
【図９】
2017194892.tif 000011
【図１０】
2017194892.tif 000012