(57)【要約】      （修正有）【課題】Ｗｅｂアプリケーションのテスト工数を削減することのできるテストデータ生成装置、テストデータ生成方法及びプログラムを提供する。【解決手段】Ｗｅｂアプリケーションが提供する画面遷移に関するテストのテストデータを生成するテストデータ生成装置であって、画面遷移のうち、１以上の画面遷移の選択を受け付ける選択受付手段と、Ｗｅｂアプリケーションのフレームワークで規定又は定義されている制約の記述仕様を用いて、Ｗｅｂアプリケーションのソースコードを解析し、該ソースコードから制約を抽出する抽出手段と、選択された画面遷移の遷移元の画面に含まれる入力フォームの前記制約を用いて、同値分割及び境界値分析のテスト観点を満たす複数のテストデータを生成する生成手段と、を有する。【選択図】図５
2020067859.tif 000002
【特許請求の範囲】
【請求項１】
Ｗｅｂアプリケーションが提供する画面遷移に関するテストのテストデータを生成するテストデータ生成装置であって、
前記画面遷移のうち、１以上の画面遷移の選択を受け付ける選択受付手段と、
前記Ｗｅｂアプリケーションのフレームワークで規定又は定義されている制約の記述仕様を用いて、前記Ｗｅｂアプリケーションのソースコードを解析し、該ソースコードから制約を抽出する抽出手段と、
前記選択された画面遷移の遷移元の画面に含まれる入力フォームの前記制約を用いて、同値分割及び境界値分析のテスト観点を満たす複数のテストデータを生成する生成手段と、
を有することを特徴とするテストデータ生成装置。
【請求項２】
前記制約は、線形な制約、非線形な制約又は正規表現を用いた制約のいずれかであり、
前記生成手段は、
前記制約が線形な制約である場合、前記同値分割及び境界値分析のテスト観点を満たす複数のテストデータを生成し、
前記制約が非線形な制約又は正規表現を用いた制約である場合、予め与えられたテストデータ候補集合の中から前記同値分割及び境界値分析のテスト観点を満たす１以上のテストデータを取得し、
前記同値分割及び境界値分析のテスト観点を満たす１以上のテストデータが取得できなかった場合、ユーザに対してテストデータの入力又は指定を依頼するための情報を出力する、ことを特徴とする請求項１に記載のテストデータ生成装置。
【請求項３】
前記画面遷移に関するテストを実行するテストスクリプトに対して、前記生成手段により生成された複数のテストデータをそれぞれ設定して、該複数のテストデータのそれぞれが設定された複数のテストスクリプトを生成するスクリプト生成手段を有することを特徴とする請求項１又は２に記載のテストデータ生成装置。
【請求項４】
前記抽出手段は、
前記Ｗｅｂアプリケーションの開発元が独自に規定又は定義した制約の記述仕様を用いて、前記Ｗｅｂアプリケーションのソースコードを解析し、該ソースコードから制約を抽出する、ことを特徴とする請求項１乃至３の何れか一項に記載のテストデータ生成装置。
【請求項５】
Ｗｅｂアプリケーションが提供する画面遷移に関するテストのテストデータを生成するテストデータ生成装置が、
前記画面遷移のうち、１以上の画面遷移の選択を受け付ける選択受付手順と、
前記Ｗｅｂアプリケーションのフレームワークで規定又は定義されている制約の記述仕様を用いて、前記Ｗｅｂアプリケーションのソースコードを解析し、該ソースコードから制約を抽出する抽出手順と、
前記選択された画面遷移の遷移元の画面に含まれる入力フォームの前記制約を用いて、同値分割及び境界値分析のテスト観点を満たす複数のテストデータを生成する生成手順と、
を実行することを特徴とするテストデータ生成方法。
【請求項６】
コンピュータを、請求項１乃至４の何れか一項に記載のテストデータ生成装置における各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テストデータ生成装置、テストデータ生成方法及びプログラムに関する。
【背景技術】
【０００２】
Ｗｅｂアプリケーション等のソフトウェアテストを支援する手法として、テストケース（つまり、テストに用いる入力値）を自動的に生成する手法が従来から知られている。
【０００３】
例えば、テストケースを自動的に生成する手法として、シンボリック実行（Symbolic Execution）や動的シンボリック実行（Dynamic Symbolic Execution）が知られている（非特許文献１）。シンボリック実行とは、入力を記号化してプログラムを疑似的に実行することで、任意のパスを通るための入力値の条件を導出する手法である。一方で、動的シンボリック実行とは、具体的な値を用いたプログラムの実行と、シンボリック実行とを組み合わせた手法である。シンボリック実行や動的シンボリック実行では、パスを網羅するようなテストの入力値を生成することができる。
【０００４】
また、例えば、アプリケーションの振る舞いをモデル化し、モデルからテストの入力値を網羅的に生成する手法も知られている（非特許文献２）。この手法では、モデルを人手で記述する必要があるものの、アプリケーションがモデルに従っているか否かを正確にテストすることができる。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Koushik Sen, Darko Marinov, and Gul Agha. 2005. CUTE: a concolic unit testing engine for C. In Proceedings of the 10th European software engineering conference held jointly with 13th ACM SIGSOFT international symposium on Foundations of software engineering (ESEC/FSE-13). ACM, New York, NY, USA, 263-272. DOI=http://dx.doi.org/10.1145/1081706.1081750
【非特許文献２】丹野 治門, 張 暁晶: "ドメインテスト技法に基づく網羅的なテストデータ自動生成手法の提案", 情報処理学会 研究報告ソフトウェア工学 , vol. 2014-SE-186, no. 6, pp.1-8, 2014年11月
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記の非特許文献１や非特許文献２に記載されている手法では、一般的な入力値に関する制約を自動的に取得することが困難であった。なお、制約とは、入力値が単独で満たすべき条件や複数の入力値間で満たすべき条件等のことである。
【０００７】
例えば、シンボリック実行や動的シンボリック実行では、Ｗｅｂアプリケーションではデータのやり取りが複数のプログラミング言語やＤＢ（データベース）に跨って行われることが一般的であるため、アプリケーション全体にわたる解析が困難である。また、例えば、ＧＵＩテスト等ではユーザのユースケースに沿ったテストが行われることが一般的であるが、シンボリック実行や動的シンボリック実行では入力値がパスを網羅するように生成されるため、テスト観点として不適切なテストケースが生成されてしまう場合がある。
【０００８】
また、例えば、アプリケーションの振る舞いをモデル化する手法では、制約を人手でモデルに記述する必要があるため、手間が掛かかると共に、制約の数が多い場合に記述自体が困難になる。
【０００９】
このため、制約を解いて、テストケースとして与えるべき入力値を生成することが困難であった。これに対して、自動的に制約を取得し、これらの制約から、テストケースとして与えるべき入力値を生成することができれば、テスト工数を削減することができると考えられる。
【００１０】
本発明は、上記の点に鑑みてなされたもので、Ｗｅｂアプリケーションのテスト工数を削減することを目的とする。
【課題を解決するための手段】
【００１１】
上記目的を達成するため、本発明の実施の形態は、Ｗｅｂアプリケーションが提供する画面遷移に関するテストのテストデータを生成するテストデータ生成装置であって、前記画面遷移のうち、１以上の画面遷移の選択を受け付ける選択受付手段と、前記Ｗｅｂアプリケーションのフレームワークで規定又は定義されている制約の記述仕様を用いて、前記Ｗｅｂアプリケーションのソースコードを解析し、該ソースコードから制約を抽出する抽出手段と、前記選択された画面遷移の遷移元の画面に含まれる入力フォームの前記制約を用いて、同値分割及び境界値分析のテスト観点を満たす複数のテストデータを生成する生成手段と、を有することを特徴とする。
【発明の効果】
【００１２】
Ｗｅｂアプリケーションのテスト工数を削減することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施の形態におけるシステムの全体構成の一例を示す図である。
【図２】テストスクリプトのバリエーション生成の概略を説明するための図である。
【図３】本発明の実施の形態におけるクライアント装置のハードウェア構成の一例を示す図である。
【図４】本発明の実施の形態におけるクライアント装置の機能構成の一例を示す図である。
【図５】対象遷移に対応するテストスクリプトのバリエーション生成処理の一例を示すフローチャートである。
【図６】画面遷移の一例を示す図である。
【図７】制約の抽出処理の一例を示すフローチャートである。
【図８】入力値の生成処理の一例を示すフローチャートである。
【図９】入力フォームの一例を示す図である。
【図１０】対象遷移に対応するテストスクリプト群の生成処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。本発明の実施の形態では、一般に、Ｗｅｂアプリケーションのテストにおける重要なテスト観点である同値分割及び境界値分析をテストするテストスクリプトについて、そのバリエーション（つまり、テストスクリプトの実行によってテストされる入力値のバリエーション）を自動的に生成する手法について説明する。ここで、テストスクリプトとは、或るテストケースをテストするスクリプトのことであり、例えば、画面への操作命令と、この画面に含まれる入力フォームに入力又は設定される入力値とが記述されたデータのことである。なお、本発明の実施の形態では、Ｗｅｂアプリケーションが提供する画面間の遷移をテストする画面遷移テストを想定する。
【００１５】
テストスクリプトに記述された操作命令が自動実行されることで、画面操作を伴うテストが自動化される。なお、本発明の実施の形態における入力値は、Ｗｅｂアプリケーションのテストにおいて、入力として用いられるデータのことであるから、テストデータ等と称されても良い。
【００１６】
従来では、同値分割及び境界値分析のテストケースは、例えば、Ｗｅｂアプリケーションの仕様を把握したユーザが時間を掛けて設計する場合が多かった。本発明の実施の形態で説明する手法を用いることで、同値分割や境界値分析をテストするテストスクリプトのバリエーションを生成することができるため、テスト（例えば、回帰テスト等）に要する工数を削減することができる。
【００１７】
＜全体構成＞
まず、本発明の実施の形態におけるシステムの全体構成について、図１を参照しながら説明する。図１は、本発明の実施の形態におけるシステムの全体構成の一例を示す図である。
【００１８】
図１に示すように、本発明の実施の形態におけるシステムには、クライアント装置１０と、サーバ装置２０とが含まれる。また、クライアント装置１０とサーバ装置２０とは、例えば、ＬＡＮ（Local Area Network）やインターネット等のネットワークＮを介して通信可能に接続される。
【００１９】
サーバ装置２０は、Ｗｅｂアプリケーションを提供するコンピュータ又はコンピュータシステムである。サーバ装置２０が提供するＷｅｂアプリケーションが、テスト対象となるソフトウェア（アプリケーション）である。
【００２０】
クライアント装置１０は、サーバ装置２０が提供するＷｅｂアプリケーションのテストを支援する装置である。すなわち、クライアント装置１０は、同値分割及び境界値分析をテストするテストスクリプトのバリエーションを生成する装置である。なお、クライアント装置１０としてはＰＣ（パーソナルコンピュータ）等が用いられるが、これに限られず、例えば、スマートフォンやタブレット端末等が用いられても良い。
【００２１】
なお、図１に示すシステムの全体構成は一例であって、他の構成であっても良い。例えば、本発明の実施の形態におけるシステムには、複数台のクライアント装置１０や複数台のサーバ装置２０が含まれていても良い。
【００２２】
＜テストスクリプトのバリエーション生成の概略＞
次に、クライアント装置１０がテストスクリプトのバリエーションを生成する場合の概略について、図２を参照しながら説明する。図２は、テストスクリプトのバリエーション生成の概略を説明するための図である。
【００２３】
まず、クライアント装置１０は、Ｗｅｂアプリケーションのソースコードを入力として、静的解析及び動的解析を行うことで、各画面間の遷移関係を表す画面遷移図と、各画面遷移にそれぞれ対応するテストスクリプトの集合であるテストスクリプト群とを生成する。これらの画面遷移図及びテストスクリプト群は、例えば、特開２０１８−１１６４９６号公報に記載されている技術により生成することができる。本発明の実施の形態では、特開２０１８−１１６４９６号公報に記載されている技術により、上記の画面遷移図及びテストスクリプト群が生成されていることを前提として説明する。
【００２４】
クライアント装置１０のユーザは、テストスクリプトのバリエーションを生成したい画面遷移（以降、「対象遷移」とも表す。）を、画面遷移図上の画面遷移の中から選択又は指定する。これにより、テストスクリプト群の中から、対象遷移に対応するテストスクリプト（以降、「対象テストスクリプト」とも表す。）が特定されると共に、対象遷移に対応する入力フォーム群が特定される。なお、対象遷移に対応する入力フォーム群とは、遷移元の画面に含まれる入力フォームの集合のことである。また、クライアント装置１０は、Ｗｅｂアプリケーションのソースコードから、入力値に関する制約を抽出して制約情報を作成する。
【００２５】
次に、クライアント装置１０は、制約情報や入力値候補を用いて、入力フォーム群に対する入力値セットの集合である入力値セット群を生成する。ここで、入力値候補とは、予め準備された入力値の集合のことである。
【００２６】
このとき、入力値を生成することができなかった制約については、クライアント装置１０のユーザに対して、入力値の生成に関して補助を求める情報を出力する。これに対して、ユーザが入力値の入力等を行うことで、入力値セットを補完する。
【００２７】
そして、対象テストスクリプトに対して、入力値セット群に含まれる各入力値セットを設定することで、各入力値セットにそれぞれ対応する対象テストスクリプトを生成する。これにより、対象テストスクリプトのバリエーションとして、これらの対象テストスクリプトで構成されるテストスクリプト群（以降、「対象テストスクリプト群」とも表す。）が生成される。
【００２８】
＜クライアント装置１０のハードウェア構成＞
次に、本発明の実施の形態におけるクライアント装置１０のハードウェア構成について、図３を参照しながら説明する。図３は、本発明の実施の形態におけるクライアント装置１０のハードウェア構成の一例を示す図である。
【００２９】
図３に示すように、本発明の実施の形態におけるクライアント装置１０は、ハードウェアとして、入力装置１１と、表示装置１２と、ＲＡＭ（Random Access Memory）１３と、ＲＯＭ（Read Only Memory）１４と、プロセッサ１５と、外部Ｉ／Ｆ１６と、通信Ｉ／Ｆ１７と、補助記憶装置１８とを有する。これら各ハードウェアは、それぞれがバス１９を介して通信可能に接続されている。
【００３０】
入力装置１１は、例えばキーボードやマウス、タッチパネル等であり、ユーザが各種操作を入力するのに用いられる。表示装置１２は、例えばディスプレイ等であり、ユーザに対して各種処理結果等を表示するのに用いられる。
【００３１】
ＲＡＭ１３は、プログラムやデータを一時保持する揮発性の半導体メモリである。ＲＯＭ１４は、電源を切ってもプログラムやデータを保持することができる不揮発性の半導体メモリである。プロセッサ１５は、例えばＣＰＵ（Central Processing Unit）等であり、ＲＯＭ１４や補助記憶装置１８等からプログラムやデータをＲＡＭ１３上に読み出して処理を実行する演算装置である。
【００３２】
外部Ｉ／Ｆ１６は、外部装置とのインタフェースである。外部装置には、記録媒体１６ａ等がある。記録媒体１６ａとしては、例えば、ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disk）、ＳＤメモリカード（Secure Digital memory card）、ＵＳＢ（Universal Serial Bus）メモリカード等が挙げられる。記録媒体１６ａには、クライアント装置１０が有する各機能を実現する１以上のプログラム等が記録されていても良い。
【００３３】
通信Ｉ／Ｆ１７は、クライアント装置１０をネットワークＮに接続するためのインタフェースである。クライアント装置１０は、通信Ｉ／Ｆ１７を介して、サーバ装置２０との間でデータ通信を行うことができる。
【００３４】
補助記憶装置１８は、例えばＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）等の不揮発性の記憶装置である。補助記憶装置１８には、クライアント装置１０が有する各機能を実現する１以上のプログラム等が記憶されている。
【００３５】
本発明の実施の形態におけるクライアント装置１０は、図３に示すハードウェア構成を有することにより、後述する各種処理を実現することができる。なお、図３では、本発明の実施の形態におけるクライアント装置１０が１台の情報処理装置（コンピュータ）で実現されている場合を示したが、これに限られない。本発明の実施の形態におけるクライアント装置１０は、複数台の情報処理装置（コンピュータ）で実現されていても良い。
【００３６】
＜クライアント装置１０の機能構成＞
次に、本発明の実施の形態におけるクライアント装置１０の機能構成について、図４を参照しながら説明する。図４は、本発明の実施の形態におけるクライアント装置１０の機能構成の一例を示す図である。
【００３７】
図４に示すように、本発明の実施の形態におけるクライアント装置１０は、機能部として、対象遷移選択部１０１と、制約抽出部１０２と、入力値生成部１０３と、対象テストスクリプト群生成部１０４とを有する。これら各機能部は、クライアント装置１０にインストールされた１以上のプログラムがプロセッサ１５に実行させる処理により実現される。
【００３８】
対象遷移選択部１０１は、画面遷移図上の画面遷移の中から対象遷移の選択又は指定を受け付ける。なお、対象遷移選択部１０１は、複数の対象遷移が選択又は指定された場合には、これら複数の対象遷移の選択又は指定を受け付ける。また、対象遷移が選択又は指定されることで、遷移元の画面に含まれる入力フォーム群（つまり、遷移先の画面に遷移するトリガーとなるボタンやリンク等が含まれるｆｏｒｍタグ中の入力フォーム群）が特定される。
【００３９】
制約抽出部１０２は、Ｗｅｂアプリケーションのソースコードから制約を抽出して、これら抽出した制約が含まれる制約情報を作成する。なお、制約には、大きく分けて、単項目制約と相関項目制約とが存在する。単項目制約とは１つの入力値が単独で満たすべき条件を表す制約であり、相関項目制約とは複数の入力値間で満たすべき条件を表す制約のことである。単項目制約としては、例えば、「フリガナ入力欄には全角カタカナのみを入力しなければならない」といったもの等が挙げられる。また、複数項目制約としては、例えば、「開始日入力欄の日付は、終了日入力欄の日付よりも前でなければならない」といったもの等が挙げられる。
【００４０】
ここで、制約はソースコード中に自由に記述することができるため、一般的な入力値に関する制約を自動的に取得（抽出）すること困難である。このため、本発明の実施の形態では、Ｗｅｂアプリケーション開発に用いられるフレームワーク（例えば、Spring Framework、Apache Struts等）に着目する。Ｗｅｂアプリケーションのフレームワークでは、推奨される制約の書き方を想定し、仕組み又は機能（バリデータ（validator））として提供している場合が多い。例えば、Spring FrameworkではBean Validation APIが提供されており、Apache Strutsではvalidation.xmlが提供されている。
【００４１】
そこで、制約抽出部１０２は、ソースコードをパース（解析）して、上記の仕組み又は機能（バリデータ）を利用するための記述を制約として抽出する。
【００４２】
例えば、Bean Validation APIでは、制約はアノテーションを付与することで定義される。具体的には、例えば、「文字列nameの最小の長さが１で最大の長さが２０、かつ、空文字にならない」との制約は、以下のように定義される。
【００４３】
@NotNull
@Size(min = 1, max = 20)
Private String name;
上記の例では、「@NotNull」と「@Size(min = 1, max = 20)」とがアノテーションであり、これらのアノテーションが「name」に付与されることで上記の制約が定義されている。
【００４４】
このように、制約抽出部１０２は、ソースコードをパース（解析）して、Ｗｅｂアプリケーションのフレームワークが提供するバリデータで規定又は定義されている記述仕様から制約を抽出する。すなわち、制約抽出部１０２は、ソースコードから制約を抽出又は取得するパーサとして機能する。したがって、Ｗｅｂアプリケーションのフレームワークがバリデータを提供している場合には、制約抽出部１０２は、このフレームワークに対応するパーサとして実装すれば、どのようなフレームワークを用いて開発等されたソースコードからでも制約を抽出することができる。
【００４５】
なお、フレームワークがバリデータを提供していない場合等には、開発者が独自に制約を実装することがある。この場合、制約抽出部１０２は、基本的に、独自に実装した制約を抽出することはできないが、例えば、独自に実装した制約も解析可能なモジュール又はプラグイン等を追加導入することで、このような独自に実装した制約も抽出することができるようになる。
【００４６】
入力値生成部１０３は、制約情報や入力値候補を用いて、入力フォーム群に対する入力値セットの集合である入力値セット群を生成する。なお、入力値候補は、ユーザ等によって予め与えられる。
【００４７】
ここで、入力値生成部１０３は、同値分割の観点及び境界値分析の観点に基づいて、入力値セットに含まれる各入力値を生成する。
【００４８】
同値分割とは、出力結果が同一となる入力値群を１つの同値クラスとすることで、その同値クラス内から１つの代表値を入力値としてテストすれば、その同値クラス内の全ての入力値はテストしたものと見做すテスト手法である。同値分割を用いることで、無限の入力値空間を有限にし、テストケース数を削減することができる。一般的にＷｅｂアプリケーションのフレームワークが提供するバリデータでは、「制約を満たす」又は「制約を満たさない」の２つのクラスに分割することができる。このとき、制約を満たす値を「ＩＮポイント」（又は、「有効同値」）、制約を満たさない値を「ＯＵＴポイント」（又は、「無効同値」）と呼ぶ。
【００４９】
境界値分析とは、同値クラス間の境界付近の入力値を用いてテストするテスト手法である。これは境界値付近にバグが潜んでいる可能性が高いという経験則に基づいて手法である。境界値上の値を「ＯＮポイント」、境界値の近傍の値を「ＯＦＦポイント」と呼ぶ。
【００５０】
そこで、本発明の実施の形態では、全ての同値クラスをテストした上で、全ての境界値のＯＮポイント及びＯＦＦポイント（境界値の前後の近傍）のテストも行うような入力値を生成するものとする。
【００５１】
例えば、「１＜ｘかつｘ≦１０」という制約Ａがあり、ｘが制約Ａを満たす場合は画面Ｐに遷移し、ｘが制約Ａを満たさない場合は画面Ｑに遷移するものとする。この場合、同値クラスは、画面Ｐに遷移するクラスと画面Ｑに遷移するクラスとの２つである。また、境界値は｛０，１，２，９，１０，１１｝となる。ここでは、これら６つの値を全てテストすればテスト観点として十分である。
【００５２】
なお、上記の６つの値を同値分割の観点及び境界値分析の観点で整理した表を以下に示す。
【００５３】
【表１】
2020067859.tif 000003
このように、入力値生成部１０３は、制約情報に含まれる各制約うち、入力フォームに対応する制約を参照して、同値分割の観点及び境界値分析の観点を満たす入力値（つまり、全ての同値クラスをテストした上で、全ての境界値のＯＮポイント及びＯＦＦポイントもテストするための入力値）を生成する。
【００５４】
ここで、制約には、上記の「１＜ｘかつｘ≦１０」（つまり、線形な数値の大小関係）等のような線形な制約だけでなく、非線形な制約や正規表現を用いた制約（つまり、機械的に解くことが困難な制約）等も存在する。入力フォームに対応する制約が非線形な制約や正規表現を用いた制約である場合には、上述のように機械的に入力値を生成することは困難である。そこで、本発明の実施の形態では、入力値生成部１０３は、以下の３段階に分けて、入力値を生成する。
【００５５】
（１）機械的に入力値を生成できる制約（例えば、上記の「１＜ｘかつｘ≦１０」等のような線形な制約）である場合、入力値生成部１０３は、同値分割の観点及び境界値分析の観点を満たす入力値を生成する。すなわち。入力値生成部１０３は、例えば、各同値クラスにそれぞれ含まれる入力値を１つずつ生成すると共に、これら各同値クラスの境界値のＯＮポイント及びＯＦＦポイントとを生成する。
【００５６】
（２）上記の（１）のように機械的に入力値を生成することができない制約である場合、入力値生成部１０３は、入力値候補に含まれる入力値のうち、同値分割の観点及び境界値分析の観点の少なくとも一方を満たす入力値を特定し、この入力値を取得（抽出）する。
【００５７】
例えば、或る入力フォームの制約が「Ｅ−ｍａｉｌ形式、かつ、ｍａｘ＝３０」である場合、同値分割及び境界値分析の観点を満たす入力としては、「Ｅ−ｍａｉｌ形式、かつ、２９文字」、「Ｅ−ｍａｉｌ形式、かつ、３０文字」、「Ｅ−ｍａｉｌ形式、かつ、３１文字」の３つの入力値（文字列）が必要である。そこで、入力値生成部１０３は、これらの入力値が入力値候補に存在する場合は、これらの入力値を入力値候補から取得（抽出）する。
【００５８】
（３）上記の（２）で入力値が得られなかった観点が存在する場合（すなわち、或る制約について、同値分割の観点及び境界値分析の観点の少なくとも一方の観点で入力値が得られなかった場合）、入力値生成部１０３は、当該制約と、当該制約で入力値が得られなかった観点とに関してユーザに補助を求める情報を出力する。
【００５９】
例えば、或る制約Ｂで、ＩＮポイントが得られなかった場合、制約ＢのＩＮポイントについてユーザに補助を求める情報を出力する。これにより、当該制約の当該観点について、ユーザによって直接入力値が入力又は指定等される。
【００６０】
以上の（１）〜（３）により、あらゆる制約について入力値を用意することが可能となる。すなわち、入力フォーム群に含まれる各入力フォームに対して入力値セットが生成され、入力値セット群が得られる。
【００６１】
対象テストスクリプト群生成部１０４は、対象テストスクリプトに対して、入力値セット群に含まれる各入力値セットを設定する（つまり、対象テストスクリプトの該当の記述に対して、入力値セットに含まれる入力値を設定する（又は埋め込む））ことで、各入力値セットにそれぞれ対応する対象テストスクリプトを生成する。これにより、対象テストスクリプト群が生成される。
【００６２】
なお、図４では図示を省略しているが、クライアント装置１０は、Ｗｅｂアプリケーションのソースコードを入力して、静的解析及び動的解析を行うことで、画面遷移図及びテストスクリプト群を生成する機能部も有している。ただし、クライアント装置１０は、当該機能部を有していなくても良い。この場合、クライアント装置１０は、他の装置（例えば、クライアント装置１０とネットワークを介して接続された装置）で生成された画面遷移図及びテストスクリプト群を取得及び入力すれば良い。
【００６３】
＜対象遷移に対応するテストスクリプトのバリエーション生成処理＞
以降では、対象遷移に対応するテストスクリプトのバリエーション（つまり、対象テストスクリプト群）を生成する処理について、図５を参照しながら説明する。図５は、対象遷移に対応するテストスクリプトのバリエーション生成処理の一例を示すフローチャートである。
【００６４】
まず、対象遷移選択部１０１は、画面遷移図上の画面遷移の中から対象遷移の選択又は指定を受け付ける（ステップＳ１０１）。ここで、画面遷移図とは、各画面間の遷移関係を表す図である。例えば、図６に示す画面遷移図は、画面Ａと、画面Ｂと、画面Ｃとの間の遷移関係を表している。図６に示す例では、画面Ａから画面Ｂへの画面遷移を「画面遷移ＡＢ」、画面Ａから画面Ｃへの画面遷移を「画面遷移ＡＣ」、画面Ｃから画面Ｂへの画面遷移を「画面遷移ＣＢ」で表している。
【００６５】
ユーザは、画面遷移上の画面遷移の中から１以上の所望の画面遷移（つまり、対象遷移）を選択又は指定する。これにより、ユーザにより選択又は指定された対象遷移が対象遷移選択部１０１により受け付けられる。
【００６６】
次に、制約抽出部１０２は、Ｗｅｂアプリケーションのソースコードから制約を抽出して、これら抽出した制約が含まれる制約情報を作成する（ステップＳ１０２）。このステップＳ１０２の処理（制約の抽出処理）の詳細については後述する。
【００６７】
次に、入力値生成部１０３は、制約情報や入力値候補を用いて、入力フォーム群に対する入力値セットの集合である入力値セット群を生成する（ステップＳ１０３）。このステップＳ１０３の処理（入力値の生成処理）の詳細については後述する。
【００６８】
次に、対象テストスクリプト群生成部１０４は、対象テストスクリプトに対して、入力値セット群に含まれる各入力値セットを設定することで、対象テストスクリプト群を生成する（ステップＳ１０４）。このステップＳ１０４の処理（対象遷移に対応するテストスクリプト群の生成処理）の詳細については後述する。
【００６９】
以上により、ユーザが選択した画面遷移に対応するテストスクリプトについて、複数の入力値セットをそれぞれ設定した対象テストスクリプト群が得られる。したがって、ユーザは、対象テストスクリプト群を用いることで、同値分割の観点及び境界値分析の観点を満たす様々なバリエーションのテストを実施することができるようになる。
【００７０】
＜制約の抽出処理＞
以降では、図５のステップＳ１０２の処理（制約の抽出処理）の詳細について、図７を参照しながら説明する。図７は、制約の抽出処理の一例を示すフローチャートである。
【００７１】
制約抽出部１０２は、Ｗｅｂアプリケーションのソースコードを読み込む（ステップＳ２０１）。次に、制約抽出部１０２は、Ｗｅｂアプリケーションのフレームワークが対象フレームワークであるか否かを判定する（ステップＳ２０２）。ここで、対象フレームワークとは、パーサとして機能する制約抽出部１０２で制約を抽出可能なフレームワークのことである。なお、対象フレームワークであるか否かは、例えば、ソースコード中の記述（例えば、「package文」等）から判定することができる。
【００７２】
対象フレームワークと判定された場合（ステップＳ２０２でＹＥＳ）、制約抽出部１０２は、ソースコードをパース（解析）して、対象遷移に関する制約（つまり、対象遷移を行う際の判定又は検証される制約）のうち、サーバサイドの制約を抽出する（ステップＳ２０３）。なお、サーバサイドの制約とは、サーバサイドで条件を満たしているか否かが判定（又は検証）される制約のことである。
【００７３】
次に、制約抽出部１０２は、レンダリングされたＨＴＭＬ（HyperText Markup Language）を読み込む（ステップＳ２０４）。なお、レンダリングされるＨＴＭＬは、例えば、ＪＳＰ（Java（登録商標） Server Pages）やＰＨＰ等が含まれ、ＨＴＭＬタグで記述されたソースコードや、サーブレットから出力されたＨＴＭＬ等である。
【００７４】
次に、制約抽出部１０２は、ソースコードをパース（解析）して、対象遷移に関する制約のうち、クライアントサイドの制約を抽出する（ステップＳ２０５）。
【００７５】
そして、制約抽出部１０２は、上記のステップＳ２０３及びステップＳ２０５で抽出された制約が含まれる制約情報を作成する（ステップＳ２０６）。
【００７６】
一方で、対象フレームワークと判定されなかった場合（ステップＳ２０２でＮＯ）、クライアント装置１０は、対象遷移に対応するテストスクリプトのバリエーション生成処理を終了する（ステップＳ２０７）。この場合、ソースコードから自動的に制約を抽出することができないためである。
【００７７】
＜入力値の生成処理＞
以降では、図５のステップＳ１０３の処理（入力値の生成処理）の詳細について、図８を参照しながら説明する。図８は、入力値の生成処理の一例を示すフローチャートである。
【００７８】
入力値生成部１０３は、上記のステップＳ２０４でレンダリングされたＨＴＭＬに定義されたｆｏｒｍタグ中の各入力フォーム（つまり、入力フォーム群に含まれる各入力フォーム）に対して、ステップＳ３０１〜ステップＳ３０８の処理を実行する。ここで、上記のステップＳ２０４でレンダリングされたＨＴＭＬ（つまり、画面）が図９に示すようなものである場合、ｆｏｒｍタグ中の入力フォームは、「入力フォーム１」、「入力フォーム２」、「入力フォーム３」となる。したがって、この場合、「入力フォーム１」、「入力フォーム２」及び「入力フォーム３」に対して、ステップＳ３０１〜ステップＳ３０８の処理がそれぞれ実行される。以降では、簡単のため、或る１つの入力フォームを固定して、ステップＳ３０１〜ステップＳ３０８の処理を説明する。
【００７９】
入力値生成部１０３は、制約情報に含まれる制約のうち、該当の入力フォームの制約を参照し（ステップＳ３０２）、当該制約が線形な数値の大小関係であるか否かを判定する（ステップＳ３０３）。
【００８０】
当該制約が線形な数値の大小関係である場合（ステップＳ３０３でＹＥＳ）、入力値生成部１０３は、同値分割の観点及び境界値分析の観点を満たす入力値を生成する（ステップＳ３０４）。これにより、当該入力フォームの制約について、同値分割の観点及び境界値分析の観点を満たす複数の入力値が生成される。
【００８１】
一方で、当該制約が線形な数値の大小関係でない場合（ステップＳ３０３でＮＯ）、入力値生成部１０３は、同値分割の観点及び境界値分析の観点の少なくとも一方を満たす１以上の入力値を入力値候補から特定する（ステップＳ３０５）。なお、この場合、当該制約は、例えば、非線形な制約や正規表現を用いた制約である。
【００８２】
次に、入力値生成部１０３は、上記のステップＳ３０５で入力値が特定されたか否かを判定する（ステップＳ３０６）。
【００８３】
上記のステップＳ３０５で入力値が特定された場合（ステップＳ３０６でＹＥＳ）、入力値生成部１０３は、特定された１以上の入力値を入力値候補から取得（抽出）する（ステップＳ３０７）。これにより、当該入力フォームの制約について、当該１以上の入力値が、上記のステップＳ３０５で満たすと特定された観点の入力値となる。
【００８４】
一方で、上記のステップＳ３０５で入力値が特定されなかった場合（ステップＳ３０６でＮＯ）、クライアント装置１０は、ステップＳ３０８に進む。この場合、当該入力フォームの制約については、ユーザによって入力又は指定等されることによってのみ入力値が得られる。
【００８５】
入力値生成部１０３は、入力値が得られなかった観点に関して補助を求める情報をユーザに対して出力する（ステップＳ３０９）。ここで、当該情報としては、例えば、入力値が得られなかった観点が存在する入力フォーム及びその制約と、当該観点とが含まれる情報とすれば良い。なお、当該情報の出力先としては、例えば、表示装置１２等とすれば良い。
【００８６】
次に、入力値生成部１０３は、上記のステップＳ３０９で出力した情報に応じて当該ユーザが入力等された１以上の入力値の入力を受け付ける（ステップＳ３１０）。これにより、一部又は全ての観点について入力値が得られなかった制約についてもユーザ入力により入力値が補完される。すなわち、これにより、入力フォーム群に含まれる各入力フォームに対して入力値セットが生成され、これらの入力値セットの集合である入力値セット群が得られる。ここで、入力値セットは、入力フォーム群に含まれる各入力フォームのそれぞれに対する入力値の集合である。したがって、入力値セット群は、入力値セットのバリエーションである。
【００８７】
なお、上記のステップＳ３０１〜ステップＳ３０８の処理において、全ての入力フォームの制約について、同値分割及び境界値分析の全ての観点で入力値が得られた場合、上記のステップＳ３０９〜ステップＳ３１０の処理は実行されなくても良い。
【００８８】
＜対象遷移に対応するテストスクリプト群の生成処理＞
以降では、図５のステップＳ１０４の処理（対象遷移に対応するテストスクリプト群の生成処理）の詳細について、図１０を参照しながら説明する。図１０は、対象遷移に対応するテストスクリプト群の生成処理の一例を示すフローチャートである。
【００８９】
対象テストスクリプト群生成部１０４は、テストスクリプト群のうち、対象遷移に対応するテストスクリプト（つまり、対象テストスクリプト）を取得する（ステップＳ４０１）。なお、上述したように、特開２０１８−１１６４９６号公報に記載されている技術により生成された画面遷移図及びテストスクリプト群では画面遷移図上の各画面遷移とテストスクリプト群に含まれる各テストスクリプトとが対応しているため、対象遷移が選択又は指定されることで、当該対象遷移に対応するテストスクリプト（つまり、対象テストスクリプト）を特定及び取得することができる。
【００９０】
対象テストスクリプト群生成部１０４は、図８の入力値の生成処理で生成された入力値セット群に含まれる各入力値セットに対して、ステップＳ４０２〜ステップＳ４０６の処理を実行する。以降では、簡単のため、或る１つの入力値セットを固定して、ステップＳ４０２〜ステップＳ４０５の処理を説明する。
【００９１】
対象テストスクリプト群生成部１０４は、図７のステップＳ２０４でレンダリングされたＨＴＭＬのｆｏｒｍタグ中の入力フォームのうち、対象遷移に関わるｆｏｒｍタグ中の入力フォームを特定する（ステップＳ４０３）。
【００９２】
次に、対象テストスクリプト群生成部１０４は、上記のステップＳ４０３で特定した入力フォームのそれぞれに対する入力値を、入力値セット群に含まれる入力値のうちの該当の入力値とした対象テストスクリプトを生成する（ステップＳ４０４）。これにより、１つの対象テストスクリプトが生成される。したがって、全ての入力値セットに対してステップＳ４０２〜ステップＳ４０５の処理が実行されることで、対象テストスクリプト群が生成される。
【００９３】
＜まとめ＞
以上のように、本発明の実施の形態におけるクライアント装置１０では、Ｗｅｂアプリケーションのテストにおける重要なテスト観点である同値分割及び境界値分析それぞれの観点を満たす入力値のバリエーションを自動的に生成する。また、このとき、本発明の実施の形態におけるクライアント装置１０は、入力フォームの制約が線形な制約である場合には自動的に入力値を生成し、非線形な制約や正規表現を用いた制約である場合には入力値候補からの入力値の取得を試みる。そして、或る入力フォームについて入力値が得られなかった観点が存在する場合に、ユーザに対して、当該入力フォームに対する入力値の入力を依頼する。これにより、本発明の実施の形態によれば、ユーザが入力値を作成等する工数を大幅に削減させつつ、同値分割及び境界値分析の観点を満たす入力値のバリエーションを得ることができる。
【００９４】
また、本発明の実施の形態におけるクライアント装置１０では、上記のように得られた入力値のバリエーションを用いて、テストスクリプトのバリエーションを作成する。これにより、バリエーションとして得られたテストスクリプトを実行することで、Ｗｅｂアプリケーションのバリエーションテストを容易に実行することができるようになる。
【００９５】
本発明は、具体的に開示された上記の実施形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【符号の説明】
【００９６】
１０        クライアント装置
２０        サーバ装置
１０１      対象遷移選択部
１０２      制約抽出部
１０３      入力値生成部
１０４      対象テストスクリプト群生成部
【図１】
2020067859.tif 000004
【図２】
2020067859.tif 000005
【図３】
2020067859.tif 000006
【図４】
2020067859.tif 000007
【図５】
2020067859.tif 000008
【図６】
2020067859.tif 000009
【図７】
2020067859.tif 000010
【図８】
2020067859.tif 000011
【図９】
2020067859.tif 000012
【図１０】
2020067859.tif 000013