情報処理装置
【課題】構造化文書の自動テストの効率化を支援する。
【解決手段】動作検証装置100は、画面の表示内容を定めた構造化文書を取得し(S302)、その構造化文書に記述された要素のうち、画面の表示内容を変化させる処理の契機となる要素を抽出し(S304)、抽出した要素への操作をユーザに記述させるための操作記述文書を出力する(S306)。画面の表示内容を確認するためのテスト・プログラムを実行させる検証装置において定められた関数と、操作記述文書に記述される要素への操作との対応関係にしたがって、操作記述文書に記述された要素への操作に対応した関数を呼び出すプログラムコードを設定したテスト・プログラムを生成する(S312)。
【解決手段】動作検証装置100は、画面の表示内容を定めた構造化文書を取得し(S302)、その構造化文書に記述された要素のうち、画面の表示内容を変化させる処理の契機となる要素を抽出し(S304)、抽出した要素への操作をユーザに記述させるための操作記述文書を出力する(S306)。画面の表示内容を確認するためのテスト・プログラムを実行させる検証装置において定められた関数と、操作記述文書に記述される要素への操作との対応関係にしたがって、操作記述文書に記述された要素への操作に対応した関数を呼び出すプログラムコードを設定したテスト・プログラムを生成する(S312)。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はデータ処理技術に関し、特に、構造化文書のテストを支援する情報処理装置に関する。
【背景技術】
【0002】
近年、ウェブページ等のテストを自動化するテストツールが提供されてきている。本出願人は、ウェブページ等の自動テストを効率的に実現する動作検証装置を以下の特許文献1にて提案している。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2010−237841号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
上記特許文献1の動作検証装置では、ウェブページ等の試験対象物に対して一度はユーザが操作を実行してその操作を記録しておき、その後、ユーザは記録された操作の内容を解釈した上で適宜編集し、テストの実行コードを作成する必要があった。すなわちユーザは、動作検証装置において操作がどのように記録されるか、またどのように編集すれば所望のテストを実施できるかを理解している必要があり、言い換えれば動作検証装置の規則を理解している必要があった。本発明者は、構造化文書の自動テストをユーザが一層容易に実施できるよう改善の余地があると考えた。
【0005】
本発明はこうした課題に鑑みてなされたものであり、その主な目的は、構造化文書の自動テストの効率化を支援する技術を提供することにある。
【課題を解決するための手段】
【0006】
上記課題を解決するために、本発明のある態様の情報処理装置は、画面の表示内容を定めた構造化文書を取得する取得部と、取得された構造化文書に記述された要素のうち、画面の表示内容を変化させる処理の契機となる要素を表示変更要素として抽出する抽出部と、抽出された表示変更要素への操作をユーザに記述させるための文書を操作記述文書として出力する出力部と、画面の表示内容を確認するためのテスト・プログラムを実行させる検証装置において予め定められた要素を操作するための関数と、操作記述文書に記述される表示変更要素への操作との対応関係を保持する対応関係保持部と、対応関係にしたがって、操作記述文書に記述された表示変更要素への操作に対応した検証装置が定める関数を呼び出すプログラムコードを設定することによりテスト・プログラムを生成するプログラム生成部と、を備える。
【0007】
本発明の別の態様もまた、情報処理装置である。この装置は、画面の表示内容を定めた構造化文書を取得する取得部と、取得された構造化文書に記述された要素のうち、ユーザからデータ入力を受け付ける要素を入力要素として抽出する抽出部と、抽出された入力要素への操作をユーザに記述させるための文書を操作記述文書として出力する出力部と、画面の表示内容を確認するためのテスト・プログラムを実行させる検証装置において予め定められた要素を操作するための関数と、操作記述文書に記述される入力要素への操作との対応関係を保持する対応関係保持部と、対応関係にしたがって、操作記述文書に記述された入力要素への操作に対応した検証装置が定める関数を呼び出すプログラムコードを設定することによりテスト・プログラムを生成するプログラム生成部と、を備える。
【0008】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、システム、プログラム、プログラムを格納した記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【0009】
本発明によれば、構造化文書の自動テストの効率化を支援することができる。
【図面の簡単な説明】
【0010】
【図1(a)】ポータルサイト第1画面の画面図である。
【図1(b)】ポータルサイト第2画面の画面図である。
【図2】辞書テストを実行したときのログを示す図である。
【図3】辞書テストを実行するためのプログラムを示す図である。
【図4】動作検証装置の機能ブロック図である。
【図5】ログを取得して動作テストを実行するまでの概要図である。
【図6】ログ画面の画面図である。
【図7】関数設定画面の画面図である。
【図8】プログラム画面の画面図である。
【図9】入力設定画面の画面図である。
【図10】ケース設定画面の画面図である。
【図11】参考技術1の動作検証装置と参考技術2の動作検証装置とのそれぞれにおける構成の概要を示す図である。
【図12】参考技術1の動作検証装置と参考技術2の動作検証装置とのそれぞれにおける動作の概要を示す図である。
【図13】参考技術2の動作検証装置の機能構成を示すブロック図である。
【図14】参考技術2において、ユーザのデータ入力操作を検出して動作テストを実行するまでの概要図である。
【図15】参考技術2における関数設定画面の画面図である。
【図16】参考技術2における関数設定画面の画面図である。
【図17】参考技術2における入力設定画面の画面図である。
【図18】参考技術2におけるケース設定画面の画面図である。
【図19】動作テストの対象のウェブページを示す図である。
【図20】図19のウェブページに対する操作が記録された操作内容ファイルを示す図である。
【図21】操作記述文書を示す図である。
【図22】動作検証装置のIF部の詳細を示すブロック図である。
【図23】動作検証装置のデータ保持部の詳細を示すブロック図である。
【図24】動作検証装置のデータ処理部の詳細を示すブロック図である。
【図25】構造化文書に記載された入力要素の例を示す図である。
【図26】構造化文書に記載された表示変更要素の例を示す図である。
【図27】操作情報変換部による変換例を模式的に示す図である。
【図28】動作検証装置の動作を示すフローチャートである。
【発明を実施するための形態】
【0011】
本実施の形態の動作検証システムについて説明する前に、その前提となる動作検証装置に係る参考技術1および2について説明する。
【0012】
(参考技術1)
図1(a)は、ポータルサイト第1画面300の画面図である。
参考技術1においては、ポータル・サイト「XYZ!」を対象とした動作テストについて説明する。ポータルサイト第1画面300は、エディットボックス302と検索リンク304を含む。検索リンク304は、「ウェブ」、「ブログ」、「画像」、「辞書」という4つのリンクを含む。ユーザがエディットボックス302に文字列を入力し、検索リンク304のうちのいずれかをマウス・クリックすると、入力文字列の検索が開始される。たとえば、エディットボックス302に文字列「液晶」と入力し、リンク「ウェブ」をマウス・クリックした場合、文字列「液晶」を含むウェブサイトが検索対象となる。エディットボックス302に文字列「液晶」と入力し、リンク「ブログ」をマウス・クリックした場合には、このポータル・サイトに開設されているブログ(Weblog)のうち、文字列「液晶」を含むブログページが検索対象となる。
ここでは、エディットボックス302に文字列「テスト」が入力され、リンク「辞書」がマウス・クリックされたとする。
【0013】
図1(b)は、ポータルサイト第2画面310の画面図である。
ポータルサイト第1画面300にて、「テスト」を入力し、「辞書」をマウス・クリックすると、図1(b)に示すポータルサイト第2画面310が表示される。検索結果欄306には、このポータル・サイトが提供している「辞書」サービスにより、文字列「テスト」に関連する項目が羅列される。
ここで、検索結果欄306の1番上にあるリンク「テスト(test)」がマウス・クリックされたとする。
【0014】
上記過程においては、以下に示す3つの操作がなされている。
A1.ポータルサイト第1画面300のエディットボックス302に文字列「テスト」を入力する操作。
A2.ポータルサイト第1画面300の検索リンク304のうち、リンク「辞書」をマウス・クリックする操作。
A3.ポータルサイト第2画面310の検索結果欄306のうち、リンク「テスト(test)」をマウス・クリックする操作。
以下においては、上記A1〜A3の操作により実現される動作過程のことを、「辞書テスト」とよぶ。
【0015】
図2は、辞書テストを実行したときのログ320を示す図である。
HP社のQTPが導入されているクライアント端末を操作して、上記ポータル・サイトにアクセスし、A1〜A3の操作を実行した場合、QTPは図2に示すログ320を生成する。ログ320には、操作A1〜A3が所定フォーマットの符合文として記録される。
たとえば、操作A1は、
Browser("XYZ!").Page("XYZ!").WebEdit("p").Set"テスト"
という符号文にて表現される。これは、"XYZ!"というウェブ・サイト、"XYZ!"という名前のウェブページ、pという名前のエディットボックス(図1(a)、図1(b)に示すエディットボックス302に相当する)に対して、文字列「テスト」が入力されたことを意味している。
同様にして、操作A2は、
Browser("XYZ!").Page("XYZ!").Link("辞書").Click
操作A3は、
Browser("XYZ!").Page("XYZ!-すべての辞書-テスト").Link("テスト(test)").Click
という符号文にて表示される。参考技術1においては、QTPの文法に基づいて説明するが、符合文のフォーマットはこれに限られるものではない。
【0016】
QTPは、ログ320の符合文を解釈しながら、符合文により表現される操作を再現実行できる。このため、いったんログ320を生成すれば、同一内容の辞書テストを何度でも繰り返し実行できる。また、ログ320の一部を書き換えれば、手動操作時とは異なる内容にて辞書テストを実行できる。たとえば、
Browser("XYZ!").Page("XYZ!").WebEdit("p").Set"テスト"
に含まれる文字列「テスト」を別の文字列「テイスト」に変更し、
Browser("XYZ!").Page("XYZ!").WebEdit("p").Set"テイスト"
と書き換えてQTPに入力すれば、エディットボックス302への入力文字列だけ変更した同内容の辞書テストを自動実行できる。
しかし、ログ320を書き換えながら動作テストを実行するには、ログ320の文法に関してある程度の知識が必要である。また、ログ320の書き換えに際し、人為的なミスが発生する可能性がある。
【0017】
図3は、辞書テストを実行するためのプログラム330を示す図である。
ログ320により動作テストを実行する代わりに、ログ320と同等の内容をVB(Visual Basic)スクリプト等で記述することにより、テスト・プログラムを作成してもよい。図3に示すプログラム330は、図2のログ320を参照しつつ作成されたテスト・プログラムである。
たとえば、操作A1は、
WebEditSet(Browser("XYZ!").Page("XYZ!").WebEdit("p"),DataTable("p1,dtGlobalSheet")
というVB関数により表現される。WebEditSet関数の具体的なロジックは、同図中段に記述されている通りである。
【0018】
プログラム330、文字列「テスト」のような入力データをプログラム330中に含まない点においてログ320と異なる。代わりに、WebEditSet関数は、dtGlobalSheetとして表現されるファイル(以下、「入力データファイル」とよぶ)から入力データを受け取る。すなわち、ロジックと入力データが分離されることになる。入力データファイルの書き換えや取り替えにより、さまざまな入力データに基づいて同一ロジックの辞書テストを実行できる。手動による動作テストやログ320による動作テストに比べて、プログラム330による動作テストは、入力データのバリエーションを増やしやすいというメリットがある。
【0019】
ただし、プログラム330による動作テストには、以下の問題点がある。
d1.プログラムを作成する手間が新たに発生する。
d2.プログラム作成者によって、プログラムの内容が変化する。たとえば、プログラマP1が操作A1に対応して作成するWebEditSet関数と、プログラマP2が操作A1に対応して作成するWebEditSet関数は、関数名は同じでもロジックが同一になるとは限らない。また、プログラム自体にバグが混入する可能性がある。このため、プログラム330自体の信頼性を担保するための取り組みが必要となる。また、プログラム330には、例外処理等、動作テストとは直接関係しないロジックも必要であるが、全てのプログラマが例外処理まで考慮したロジックを実装するとは限らない。たとえば、図3に示すWebEditSet関数の場合、入力データが空文字の場合にも対応できるようにロジックが組まれているが、別のプログラマがWebEditSet関数を実装する場合には、こういった配慮が欠如するかもしれない。
結果として、プログラマのスキルが動作テストの内容・結果に影響を及ぼしやすくなってしまう。
【0020】
図4は、動作検証装置100の機能ブロック図である。
本明細書のブロック図が示す各機能ブロックは、ハードウェア的には、コンピュータのCPUをはじめとする素子や機械装置で実現でき、ソフトウェア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックはハードウェア、ソフトウェアの組み合わせによっていろいろなかたちで実現できることは、当業者には理解されるところである。例えば、各機能ブロックは、コンピュータプログラムとして記録媒体に格納され、情報処理装置のハードディスクにインストールされ、適宜メインメモリに読み出されてプロセッサにより実行されてもよい。
動作検証装置100は、専用ハードウェアとして形成されてもよいし、ウェブブラウザなどのユーザインタフェースと連携するソフトウェア・モジュールとして形成されてもよい。
参考技術1の動作検証装置100とは、QTPのアドオンとして形成されるソフトウェア・モジュールであるとして説明する。
【0021】
動作検証装置100は、IF(インタフェース)部110、データ処理部130およびデータ保持部140を含む。
IF部110は、ユーザやQTPとのインタフェースを担当する。データ処理部130は、IF部110やデータ保持部140から取得されたデータを元にして各種のデータ処理を実行する。データ処理部130は、IF部110とデータ保持部140との間のインタフェースの役割も果たす。データ保持部140は、各種データを保持するための記憶領域である。
【0022】
IF部110:
IF部110は、入力部112と出力部118を含む。入力部112はユーザやQTPからの入力処理を担当し、出力部118はユーザやQTPに対する出力処理を担当する。入力部112は、ログ取得部114と入力データ取得部116を含む。ログ取得部114は、QTPからログを取得する。入力データ取得部116は、入力データファイルを取得し、入力データファイルからプログラムに提供する入力データを取得する。入力データファイルの詳細については、図5や図9に関連して詳述する。
【0023】
出力部118は、関数設定画面表示部120、入力設定画面表示部122、プログラム画面表示部124およびケース設定画面表示部126を含む。関数設定画面表示部120は、図7に示す関数設定画面210を表示させる。入力設定画面表示部122は、図9に示す入力設定画面230を表示させる。プログラム画面表示部124は、図8に示すプログラム画面220を表示させる。ケース設定画面表示部126は、図10に示すケース設定画面240を表示させる。
【0024】
データ処理部130:
データ処理部130は、プログラム生成部132、プログラム実行部134およびテストケース登録部136を含む。プログラム生成部132は、動作テスト用のプログラムを自動的に生成する。プログラム実行部134は、生成されたプログラムを実行させる。参考技術1においては、QTPにプログラムを実行させる。テストケース登録部136は、実行セットをケースファイルに登録する。実行セットおよびケースファイルについては図10に関連して詳述する。
【0025】
データ保持部140:
データ保持部140は、ログ保持部142、プログラム保持部144、入力データファイル保持部146、ケースファイル保持部148、関数保持部150および結果保持部152を含む。ログ保持部142は、ログを保持する。プログラム保持部144は、プログラムを保持する。入力データファイル保持部146は、入力データファイルを保持する。ケースファイル保持部148は、ケースファイルを保持する。関数保持部150は、動作テスト用のプログラムに登録される関数について、関数ライブラリを保持する。結果保持部152は、動作テストの結果を保持する。
【0026】
図5は、参考技術1において、ログを取得して動作テストを実行するまでの概要図である。
まず、動作テストの対象となる機器を手動操作する。参考技術1においては、クライアント端末のウェブブラウザを操作して、ポータル・サイト「XYZ!」にアクセスする。QTPはログを生成し、ログ取得部114はQTPからログを取得する。各種符合文にはあらかじめ関数が対応づけられている。関数設定画面表示部120は、関数保持部150の関数ライブラリを読み出し、ログに含まれる各符号文に対応する関数を一覧表示させる(S1)。関数設定画面表示部120において、ユーザは、適宜、関数を追加・変更・削除できる。こうして、プログラムに含まれるべき関数が特定される。S1については、図7に関連して後に詳述する。
【0027】
次に、このプログラムに供給すべき入力データを設定する(S2)。設定内容は、入力データファイルとして登録される。S2については、図9に関連して後に詳述する。S1で設定された関数群からプログラムを自動生成する(S3)。S3については、図8に関連して後に詳述する。
【0028】
次に、複数種類のプログラムおよび複数種類の入力データファイルから、プログラムと入力データファイルの組合せを「実行セット」として登録する。実行セットは複数個登録することもできる(S4)。設定内容は、ケースファイルとして登録される。たとえば、プログラムP1を入力データファイルF2に基づいて実行したあと、プログラムP2を入力データファイルF6に基づいて実行させたい場合、
実行セット1:プログラムP1+入力データファイルF2
実行セット2:プログラムP2+入力データファイルF6
としてケースファイルに登録される。S4については、図10に関連して詳述する。
最後に、ケースファイルにしたがって、プログラムを実行する(S5)。上記例の場合には、プログラム実行部134は、実行セット1と実行セット2を連続実行させる。プログラム実行部134は、プログラムの実行結果、いいかえれば、テスト結果を結果保持部152に登録する。
【0029】
図6は、ログ画面200の画面図である。
ログ取得部114がログを取得すると、出力部118はログ画面200におけるログ表示領域202にログを画面表示させる。ユーザは、QTPのログをログ表示領域202にコピー&ペーストしてもよい。あるいは、出力部118は、ログ画面200の表示時において、QTPが生成したログ(ファイル)を取得し、ログ表示領域202に画面表示させてもよい。ユーザが実行ボタン204をマウス・クリックすると、次の図7に示す関数設定画面210が表示される。
【0030】
図7は、関数設定画面210の画面図である。
プログラム生成部132は、ログに含まれる符号文について関数を特定し、関数設定画面210の関数欄214に特定した関数を一覧表示させる。番号欄212は実行順序、説明欄216は関数の概要説明、オブジェクト欄218は操作対象オブジェクト、パラメータ欄219はパラメータ名、入力値欄217は入力データを示す。
先述の操作A1を示す符合文、
Browser("XYZ!").Page("XYZ!").WebEdit("p").Set"テスト"
には、あらかじめ、WebEditSet関数が関数ライブラリにおいて対応づけられている。プログラム生成部132はログ320の1番目の符合文を読み出すと、関数保持部150の関数ライブラリを参照し、WebEditSet関数を特定する。操作A1が操作対象とするオブジェクトは、「Browser("XYZ!").Page("XYZ!")」のページであるため、オブジェクト欄218には、「Browser("XYZ!").Page("XYZ!")」が設定される。WebEditSet関数は、エディットボックスp(エディットボックス302)に設定される入力データを引数とする関数である。入力値欄217において、エディットボックスpに設定すべき入力データを設定することもできるが、関数設定画面210では入力データを登録しないものとして説明する。エディットボックスpに設定すべき入力データは、図9に関連して詳述する入力設定画面230にて設定される。
【0031】
ログ320には操作A1〜A3に対応して3つの符合文が含まれているため、プログラム生成部132は3つの関数を特定する。ユーザは、関数設定画面210にて、関数を追加・削除・変更してもよい。図7における4番目のTextCheck関数と5番目のWebScreenCapture関数は、ユーザが追加選択した関数である。
【0032】
TextCheck関数は、表示中のウェブページにおいて、変数qに代入される文字列が含まれているかを判定する関数である。WebScreenCapture関数は、表示中のウェブページを画面キャプチャする関数である。動作テストの結果を証跡管理する上で、WebScreenCapture関数は便利な関数である。このように、関数ライブラリには、WebEditSet関数のようにユーザの操作に対応した関数だけでなく、TestCheck関数のように動作テストを補助・支援するための関数も用意されている。ユーザは、関数ライブラリから所望の関数を選択するだけで、動作テストに含めたいロジックを設定できる。
【0033】
テストケース設定ボタン215がクリックされると、図10のケース設定画面240が表示される。入力データファイル作成ボタン213がクリックされると、図9の入力設定画面230が表示される。プログラム作成ボタン211がクリックされると、図8のプログラム画面220が表示される。
【0034】
参考技術1の動作検証装置100には、以下のメリットがある。
m1.GUI(Graphical User Interface)ベースで関数を選択するだけで、プログラムに含めたいロジックを選択できる。プログラムを作成するための手間がほとんどかからない。
m2.プログラムに含まれる関数は、関数ライブラリとして登録済みの関数であるため、作成者によってプログラムの品質がばらつきにくい。例外処理等の必要なロジックも、あらかじめ各関数に組み込まれている。
【0035】
図8は、プログラム画面220の画面図である。
関数設定画面210において、プログラム作成ボタン211がマウス・クリックされると、プログラム生成部132がプログラムを生成し、プログラム画面表示部124はプログラム画面220におけるプログラム表示領域222にそのソースコードを表示させる。プログラムは、プログラム保持部144に保持される。
【0036】
図9は、入力設定画面230の画面図である。
関数設定画面210において、入力データファイル作成ボタン213がマウス・クリックされると、入力設定画面表示部122は入力設定画面230を表示させる。関数設定画面210においては、パラメータpとqが定義されている。番号欄232は入力順序、変数欄234はパラメータpへの入力データ、変数欄236はパラメータqへの入力データを示す。入力設定画面230では、このパラメータpとqに代入する入力データを設定する。各入力データは、入力データファイルとして入力データファイル保持部146に保持される。
【0037】
たとえば、プログラム330に、図9に示す形式の入力データファイルを与えると、
1.文字列「テスト」をエディットボックス302に入力して辞書を検索し、実行結果を示す画面に文字列「試験」が含まれているかを判定するテスト
2.文字列「test」をエディットボックス302に入力して辞書を検索し、実行結果を示す画面に文字列「試験」が含まれているかを判定するテスト
3.文字列「テストケース」をエディットボックス302に入力して辞書を検索し、実行結果を示す画面に文字列「試験」が含まれているかを判定するテスト
・・・のように、異なる入力データに基づく複数の辞書テストを連続実行できる。
【0038】
図10は、ケース設定画面240の画面図である。
関数設定画面210において、テストケース設定ボタン215がマウス・クリックされると、ケース設定画面表示部126はケース設定画面240を表示させる。番号欄244は実行順序、実行セット欄245は実行セットの概要、プログラム欄246は実行対象となるプログラム、入力データファイル欄247は入力データの抽出対象となる入力データファイルを示す。
ここでは、インターネット証券のウェブ・サイトを動作テストの対象として説明する。
【0039】
同図においては、1.ログイン、2.ニュースチェック、3.株売り、4.債券売り、5.住所変更、6.ログアウトという6つの実行セットが登録されている。まず、QTPは、プログラム「login.vbs」から「login」プロジェクトを生成する。ここでいう「プロジェクト」とは、QTPの実行形式ファイル群を含むディレクトリである。QTPは「login」プロジェクトを入力として、login.vbsとlogin.xlsに定義された処理を実行する。ユーザが実行ボタン248をマウス・クリックすると、最初に、実行セット「ログイン」の「login」プロジェクトが実行される。1番目の実行セット「ログイン」が完了すると、実行セット「ニュースチェック」として、「ncheck」プロジェクトが実行される。
【0040】
このように、実行ボタン248がマウス・クリックされると、1.ログイン、2.ニュースチェック、3.株売り、4.債券売り、5.住所変更、6.ログアウトという6つの実行セットが連続実行される。これにより、「ログインして、ニュースをチェックした後、手持ち株と手持ち債券の売りを指示し、住所変更をした上で、ログアウトする」というテスト・シナリオに基づく動作テストを自動化できる。
【0041】
ユーザは、ケース設定画面240において自由にテスト・シナリオを作ることができる。たとえば、実行セット「株売り」の代わりに実行セット「株買い」を登録してもよいし、実行セット「株売り」の入力データファイルとして「stock1.xls」ではなく別の入力データファイルを登録してもよい。ケース設定画面240において登録されたテスト・シナリオはケースファイルとして記録され、ケースファイル保持部148に保持される。
テスト・シナリオの構成や入力データファイル等を少しずつ変化させることにより、動作テストのバリエーションを広げやすくなる。
【0042】
以上、参考技術1の動作検証装置100を説明した。
動作検証装置100によれば、プログラムと入力データ、すなわち、処理とパラメータを分離できる。そして、そのためのプログラムをGUIベースの設定に基づき自動生成できる。これにより、プログラムに含めるロジックの多様性を確保しつつも、安定した品質のプログラムを簡易に生成できる。また、入力データファイルの内容を変更するだけで、動作テストの内容を変更できるため、動作テストのバリエーションを広げやすくなる。
【0043】
更に、実行セットをケースファイルに登録してテスト・シナリオを作ることにより、既存のプログラムを組合せながら、さまざまな状況における動作テストを実現できる。また、WebEditSet関数のようなテスト対象機器を操作するための関数だけでなく、WebScreenCapture関数のような動作テストを支援するための関数を用意しておくことにより、動作テストの効率や信頼性をいっそう向上させやすくなる。
【0044】
(参考技術2)
参考技術2では、上記の参考技術1を改良した動作検証装置100を提案する。
まず、参考技術1における動作検証装置100と、参考技術2の動作検証装置100とを比較しつつ、参考技術2の動作検証装置100についてその概要を説明する。
【0045】
図11は、参考技術1の動作検証装置100と参考技術2の動作検証装置100とのそれぞれにおける構成の概要を示す。図11(a)が示すように、参考技術1の動作検証装置100は、動作テストの実行エンジンであるQTPモジュール102と、QTPモジュール102を使用したウェブサーバ400の動作テストを効率化するためのラッパーモジュール104とを備えた。このラッパーモジュール104には、図4で示した各機能ブロックが含まれる。
【0046】
図11(a)において、ユーザは、QTPモジュール102を介して、動作確認の対象装置であるウェブサーバ400を操作する(S100)。ラッパーモジュール104は、その操作内容が記録されたログをQTPモジュール102から取得して、関数設定画面210をユーザに提供した(S102)。ユーザは、動作テスト実行の際、QTPモジュールが読み込み可能な動作テスト用プログラムをラッパーモジュール104において生成させ、QTPモジュール102にそのプログラムを実行させた(S104)。
【0047】
これに対して、図11(b)が示すように、参考技術2の動作検証装置100は、動作テストの実行エンジンの機能とラッパーモジュール104の機能とが統合された統合検証モジュール106を備える。ユーザが統合検証モジュール106を介してウェブサーバ400を操作すると(S200)、統合検証モジュール106はその操作内容を逐次検出して関数設定画面210のデータを設定し、関数設定画面210をユーザに提供する(S202)。ユーザは、動作テスト実行の際、統合検証モジュール106において動作テスト用プログラムを生成させて実行させる(S204)。
【0048】
図12は、参考技術1の動作検証装置100と参考技術2の動作検証装置100とのそれぞれにおける動作の概要を示す。図12(a)は、参考技術1の動作検証装置100における動作の概要を示している。ユーザはウェブサーバ400に対するデータ入力操作を実行し(S110)、QTPモジュール102はその操作内容が記録されたログを出力する(S112)。ユーザはそのログのデータをQTPモジュール102の所定の入力エリアにコピーする(S114)。ラッパーモジュール104は所定の入力エリアに設定されたログのデータに基づいて関数設定画面を設定して表示させ(S116)、ユーザはその関数設定画面を介して追加・変更すべき関数・入力データを設定する(S118)。
【0049】
ラッパーモジュール104は、関数設定画面のデータに基づいて、動作テストのためのQTP用プログラムを生成する(S120)。ユーザは、QTP用プログラムをQTPモジュール102の所定の入力エリアにコピーする(S122)。ユーザは、ケース設定画面において、QTP用プログラムと入力データファイルとをセットとして指定した動作テストのシナリオを設定する(S124)。ラッパーモジュール104は、そのシナリオに基づいて、QTP用プログラムと入力データファイルのセットをQTPモジュール102に渡して、セット毎に動作テストを実行させる(S126)。
【0050】
図12(b)は、参考技術2の動作検証装置100における動作の概要を示している。ユーザは、ウェブサーバ400に対するデータ入力操作を実行する(S210)。統合検証モジュール106は、そのデータ入力操作を逐次検出して、データ入力操作に対応する関数を操作内容ファイルに記録し、その操作内容ファイルの記録データを関数設定画面において表示する(S212)。ユーザは、その関数設定画面を介して追加・変更すべき関数・入力データを操作内容ファイルに設定する(S214)。そしてユーザは、ケース設定画面において、操作内容ファイルと入力データファイルとをセットとして指定した動作テストのシナリオを設定する(S216)。統合検証モジュール106は、そのシナリオに基づいて、シナリオ内の1以上のセットを集約した動作テスト用プログラムを生成して実行する(S218)。
【0051】
このように、参考技術1の動作検証装置100では、QTPモジュール102とラッパーモジュール104とが分離していた。したがって、両モジュールを連係させるために、ユーザ自身が仲介作業を実行する必要があった。また、ラッパーモジュール104はシナリオ内のセット毎にQTPモジュール102をコールして、テスト用プログラムをセット毎に実行させる必要があった。
【0052】
これに対して、参考技術2の動作検証装置100では、動作テストの実行エンジンと、その効率的な利用を実現するラッパーとが分離されることなく、シームレスに統合されている。したがって、参考技術1の動作検証装置100と比較すると、分離したモジュールを連係させるために必要であったユーザの作業が不要になり、動作テストのためのユーザの作業量が低減する。また、シナリオ内の複数のセットが集約された動作テスト用プログラムが生成され、そのプログラムの実行により一連のシナリオが実行されるため、迅速な動作テストが実現される。
【0053】
図13は、参考技術2の動作検証装置100の機能構成を示すブロック図である。同図の機能ブロックは、図11(b)で示した統合検証モジュール106に含まれる。参考技術2の機能ブロックのうち、参考技術1の機能ブロックに対応する機能ブロックには、同じ符号を付している。参考技術1の機能ブロックと同じ符号を付した機能ブロックについてはその機能が参考技術1に既述した内容と異なる場合に記載しており、同様の機能についてはその記載を省略する。
【0054】
データ保持部140は、操作内容ファイル保持部143と、プログラム保持部144と、入力データファイル保持部146と、ケースファイル保持部148と、関数保持部150とを有する。操作内容ファイル保持部143は、動作テスト用プログラムに設定すべき関数が記録される操作内容ファイルを記憶する。プログラム保持部144は、操作内容ファイルにしたがって生成された動作テスト用プログラムを記憶する。
【0055】
IF部110の入力部112は、操作検出部115とユーザ設定受付部117とを有する。操作検出部115は、ウェブサーバ400に対するユーザのデータ入力操作を逐次検出する。ユーザ設定受付部117は、関数設定画面210、入力設定画面230、ケース設定画面240に対するユーザによる設定情報を検出する。
【0056】
IF部110の出力部118は、関数設定画面表示部120と入力設定画面表示部122とケース設定画面表示部126とを有する。関数設定画面表示部120は、操作内容ファイル保持部143に記録された操作内容ファイルの内容を表示する関数設定画面210を所定の表示装置に表示させる。
【0057】
データ処理部130は、プログラム生成部132と、プログラム実行部134と、テストケース登録部136と、操作記録部137と、入力データ記録部138とを有する。操作記録部137は、関数保持部150を参照して、操作検出部115において検出されたデータ入力操作に対応する関数を特定し、その関数を操作内容ファイルに記録する。また操作記録部137は、関数設定画面210に対するユーザの設定情報を操作内容ファイルに記録する。入力データ記録部138は、入力設定画面230を介してユーザが入力した入力データを入力データファイルに記録する。プログラム生成部132は、操作内容ファイルに記録された関数に応じて動作テスト用プログラムを生成する。プログラム実行部134は、動作テストの実行エンジンとして、動作テスト用プログラムを実行し、その結果を結果保持部152に記録する。
【0058】
図14は、参考技術2において、ユーザのデータ入力操作を検出して動作テストを実行するまでの概要図である。まず、ユーザはクライアント端末のウェブブラウザを操作してウェブサーバ400にアクセスし、ウェブサーバ400に対する各種操作、典型的にはウェブサーバ400が提供するウェブページに対するデータ入力操作を実行する。操作検出部115はユーザによるデータ入力操作を逐次検出し、操作記録部137は関数保持部150の関数ライブラリを読み出し、そのデータ入力操作に対応する関数を操作内容ファイルに逐次記録する(S220)。
【0059】
次に、関数設定画面表示部120は、操作内容ファイル保持部143の操作内容ファイルを読み出し、ユーザによる操作に対応する関数を一覧表示する関数設定画面を表示させる。関数設定画面において、ユーザは、適宜、関数を追加・変更・削除でき、また、動作テスト用プログラムに静的に設定すべき入力データを設定できる。こうして、動作テスト用プログラムに含まれるべき関数が特定される。関数設定画面については、図15および図16に関連して後述する。
【0060】
次に、入力設定画面表示部122は、入力設定画面230を表示させる。ユーザは、入力設定画面230を介して、動作テストの実行時に動作テスト用プログラムに対して動的に供給されるべき入力データを設定する。ユーザにより設定された入力データは、入力データファイルに記録される(S222)。入力設定画面230については、図17に関連して後述する。
【0061】
次に、ケース設定画面表示部126は、ケース設定画面240を表示させる。ユーザは、複数種類の操作内容ファイルおよび複数種類の入力データファイルから、操作内容ファイルと入力データファイルとの組み合わせを実行セットとして登録する。テストケース登録部136は、1以上の実行セットをケースファイルに記録する(S224)。例えば、テストケース1において、操作内容ファイルF01の設定内容を入力データファイルF12に基づいて実行させた後、操作内容ファイルF02の設定内容を入力データファイルF16に基づいて実行させる場合、
テストケース1:
実行セット1:操作内容ファイルF01+入力データファイルF12
実行セット2:操作内容ファイルF02+入力データファイルF16
としてケースファイルに登録される。ケース設定画面240については、図18に関連して後述する。
【0062】
次に、プログラム生成部132は、ケースファイルおよび操作内容ファイルに基づいて動作テスト用プログラムを生成する(S226)。具体的には、実行セットに設定された操作内容ファイルに順次記録された関数を、動作テスト用プログラムのプログラムコードに順次設定してもよい。また、プログラム生成部132は、1つのテストケースに複数の実行セットが設定されている場合、各実行セットの操作内容ファイルに記録された関数を1つの動作テスト用プログラムに集約して設定する。
【0063】
また、プログラム生成部132は、操作内容ファイルの関数に対して入力データそのものが設定されていた場合には、その入力データを動作テスト用プログラムに静的に設定する。例えば、動作テスト用プログラムの生成の際に、そのプログラムコードにおける関数の引数として入力データをあらかじめ設定する。また、操作内容ファイルの関数に対して入力データファイルが指定されていた場合には、その入力データファイルのデータをプログラム実行時に読み込むように設定する。
【0064】
最後に、プログラム実行部134は、動作テスト用プログラムを実行して、ウェブサーバ400に対してユーザにより実行された一連の操作を再現する(S228)。入力データファイルのデータを必要とする関数に対しては、動作テスト用プログラムの実行の際に読み込んだ入力データファイルのデータを引数として渡す。すなわち、入力データファイルから動的に取得した入力データに基づいて関数を実行する。
【0065】
図15は、関数設定画面210の画面図である。同図は、図18で後述する「検索記入.xls」を表示する関数設定画面210を示している。データファイルカラム名欄250は、パラメータに設定する入力データを記録した入力データファイルのカラム名が指定される領域である。ユーザは、入力値欄217に入力データそのものを記述してもよく、その代わりに、データファイルカラム名欄250に入力データファイルのカラム名を指定してもよい。データファイルカラム名欄250に入力データファイルのカラム名が指定された場合、動作テスト用プログラムの実行時に、その入力データファイルのカラムに設定された1以上の入力データが読み込まれて関数に渡される。
【0066】
図16は、参考技術2における関数設定画面210の画面図である。同図の「検索部署名」パラメータの入力値欄217においては、入力データの候補がドロップダウンリスト252で一覧表示されている。ドロップダウンリスト252において表示される入力データの候補は、ウェブページに対するユーザによるデータ入力の際に、そのウェブページのドロップダウンリストにおいて表示された入力データの候補である。ユーザはドロップダウンリスト252から入力データを選択することができ、入力データの設定におけるユーザの負担が軽減される。
【0067】
ドロップダウンリスト252を設定するために、操作検出部115は、ウェブページに対するユーザによるデータ入力操作の際に、そのウェブページのドロップダウンリストにおいて表示された入力データの候補を取得する。例えば、ウェブサーバ400から取得されたウェブページのデータ、例えばHTMLデータからドロップダウンリストにおける入力データの候補を取得する。操作記録部137は、その入力データの候補を操作内容ファイルの入力値欄217に記録する。関数設定画面表示部120は、入力値欄217が入力される際に、操作内容ファイルに記録された入力データの候補をドロップダウンリストの形式で一覧表示させる。
【0068】
図17は、参考技術2における入力設定画面230の画面図である。図17(a)は、図15および図16の関数設定画面210においてカラム名が指定された入力データファイル「検索記入データ.xls」を表示する入力設定画面230を示している。なお、図15および図16では、図17(a)の「氏名漢字」カラムと「氏名カナ」カラムとが指定されている。図17(b)は、別の入力データファイル「ログインデータ2.xls」を表示する入力設定画面230を示している。同図の入力データファイルについては、図18に関連して後述する。
【0069】
図18は、参考技術2におけるケース設定画面240の画面図である。実行番号欄253には各実行セットの基本的な実行順序、テストケースID欄254にはテストケースの識別情報が設定される。グループID欄256には実行セットの繰り返し処理のグループを示す識別情報、行番号欄258には動作テストにおける入力データファイルの参照範囲が設定される。操作内容ファイル欄260は各実行セットにおける操作内容ファイル、入力データファイル欄262は各実行セットの入力データファイルが設定される。ケース設定画面240における設定内容は、ケースファイル保持部148においてケースファイルとして記憶される。
【0070】
ケース設定画面240においてテスト実行ボタン264が押下されると、プログラム生成部132は、ケースファイルおよび操作内容ファイルにしたがって動作テスト用プログラムを生成する。具体的には、ケースファイルにおいて同一のテストケースIDが設定された1以上の操作内容ファイルに基づいて、各操作内容ファイルに記録された関数がプログラムコードに設定された1つの動作テスト用プログラムを生成する。例えば、プログラム生成部132は、図18のケース設定画面240の内容が記録されたケースファイルにしたがって、登録ケースを実行するための1つの動作テスト用プログラムと、検索ケースを実行するための1つの動作テスト用プログラムとを生成する。なお、「1つの動作テスト用プログラム」は、1つの実行単位として実行されるプログラム、言い換えれば1つの実行契機で実行されるプログラムを意味し、物理的なプログラム数は問わない。
【0071】
プログラム実行部134は、各操作内容ファイルに記録された1つの関数を実行する際、その操作内容ファイルと対応づけられた入力データファイルのデータのうち、操作内容ファイルにおいてその関数と対応づけられたカラムのデータをその関数に渡す。
【0072】
また、プログラム実行部134は、同一のテストケースにおいて同一のグループIDが付与された複数の実行セットを、同一の繰り返し処理を実行すべき同一のグループとして取り扱う。具体的には、同一のグループIDが付与された複数の実行セットそれぞれの実行を繰り返し、繰り返しのたびに、各実行セットの操作内容ファイルに記録された関数に対して、入力データファイルに記録された所定数のレコードを渡す。参考技術2では、繰り返しのたびに入力データファイルに記録された1レコードを関数に渡すこととする。なお、上述の処理を実行するための繰り返し命令がプログラムコードに設定された動作テスト用プログラムを、プログラム生成部132おいて生成してもよい。
【0073】
また、プログラム実行部134は、行番号が指定された実行セットについては、その操作内容ファイルに記録された関数に対して、入力データファイルにおいてその行番号で特定される入力データを渡す。したがって、グループIDによる繰り返し処理が指定され、さらに行番号が指定された場合には、行番号の指定数だけその繰り返しを実行することになる。例えば、図18の登録ケースでは、実行セットをまたがったグループの設定はなく、各実行セットでは入力データ1個分の処理が実行される。これに対し、図18の検索ケースでは、各実行セットにおける入力データ1個分の処理が3回繰り返される。
【0074】
具体的には、1回目の繰り返しでは、ログイン2.xlsに記録された関数に対してログインデータ2.xlsの35行目のデータ「t_yamada」が渡される。そして、検索記入.xlsに記録された関数、具体的には図15のNo1の関数に対しては検索記入データ.xlsの1行目・氏名漢字のデータ「山田太郎」が渡される。また、図15のNo2の関数に対しては検索記入データ.xlsの1行目・氏名カナのデータ「ヤマダタロウ」が渡される。
2回目の繰り返しでは、ログイン2.xlsに記録された関数に対してログインデータ2.xlsの36行目のデータ「h_yamada」が渡される。そして、検索記入.xlsに記録された図15のNo1の関数に対して検索記入データ.xlsの2行目・氏名漢字のデータ「山田花子」が渡される。また、図15のNo2の関数に対して検索記入データ.xlsの2行目・氏名カナのデータ「ヤマダハナコ」が渡される。
3回目の繰り返しにおいても同様に、インクリメントされた行番号における入力データが各関数に渡されることになる。
【0075】
参考技術2の動作検証装置100においても、参考技術1で既述した効果を奏する。具体的には、処理とパラメータの分離、および、GUIベースの設定が実現されるため、動作テスト用プログラムに含めるロジックの多様性を確保しつつも、安定した品質のプログラムを簡易に生成できる。また、入力データファイルの設定によって、動作テストのバリエーションを広げやすくなる。さらに、ケースファイルの設定によって、様々なシナリオにおける動作テストを実現できる。
【0076】
参考技術2の動作検証装置100においては、さらに、動作テスト用プログラムを実行する実行エンジン機能と、実行エンジンの効率的な利用を実現するラッパー機能とがシームレスに、ユーザによる仲介を要することなく連係する。これにより、動作テストを実行するためのユーザの負担を軽減できる。また、参考技術1の動作検証装置100の場合と異なり、ユーザは、QTPのプロジェクト等、プログラム実行のための環境を意識する必要がない。すなわち、ユーザにとって理解・操作が容易な形式の操作内容ファイルと入力データファイルとを設定すればよい。これにより、ユーザは動作テストを容易に実施できるようになる。
【0077】
参考技術2の動作検証装置100においては、さらにまた、同一テストケースの複数の実行セットが集約された1つの動作テスト用プログラムが生成され、その1つの動作テスト用プログラムが実行される。参考技術1の動作検証装置100における実行セット毎、すなわち実行セットに基づき生成されたQTPのプロジェクト毎の実行と比較して、1つのテストケースにおける一連の動作テストを実行する際のオーバーヘッドが低減され、迅速な動作テストを実現できる。
【0078】
参考技術2の動作検証装置100においては、さらにまた、複数の実行セットに亘る繰り返しのグループを設定できる。これにより、実行セットを柔軟に分割でき、また、動作テストのシナリオを柔軟に設定できる。さらにまた、入力データファイルの参照範囲を設定できる。これにより、入力データファイルが同一であっても、シナリオに応じて柔軟に参照範囲を変更でき、様々なバリエーションの動作テストを容易に実現できる。
【0079】
上述した参考技術2においては、関数設定画面210における値設定を支援する例としてドロップダウンリスト252を示した。変形例においては、ウェブページにおけるラジオボタン、チェックボックス、リストボックス等で選択可能に表示された入力データの候補が、ドロップダウンリスト252またはその他の形式で関数設定画面210において選択可能に表示されてもよい。すなわち、動作確認対象の機器に対するデータ入力操作の際にユーザに対して様々な形式で選択可能に表示された入力データの候補が、関数設定画面210における値設定の際に選択可能に表示されてもよい。
【0080】
上述した参考技術1においては、ウェブサーバ400に対するユーザの操作をQTPが受け付け、ログを生成したことを条件として、動作検証装置100が動作テスト用プログラムを作成している。また、上述した参考技術2においては、ウェブサーバ400に対するユーザの操作を動作検証装置100が検出して、動作テスト用プログラムを作成している。変形例として、動作検証装置100においてウェブサーバ400からHTMLファイルを取得した時点で、動作テスト用プログラムを生成してもよい。この場合、動作検証装置100は、HTMLファイルに含まれるフォームタグを検索し、HTMLファイルにどのような入力インタフェースが含まれているかを特定する。そして、各入力インタフェースにデータを入力するための関数を選択し、これらの関数をさまざまな順序で並べれば、ユーザによる明示的なウェブ操作がなくても、動作テスト用のプログラムを生成できる。
【0081】
(実施の形態)
まず本発明の概要について説明する。図19は、動作テストの対象のウェブページを示す。このウェブページは、保険会社のウェブサイトが提供するウェブページであり、契約済みの自動車保険の中から、継続対象の自動車保険契約をユーザに選択させるウェブページである。このウェブページには、本ウェブページのタイトル「abc0100」を示すページタイトル500と、ラジオボタン502で総称されるラジオボタン502aおよびラジオボタン502bが含まれる。またウェブブラウザでの表示対象を契約者メニュー一覧のウェブページへ遷移させるための第1遷移ボタン504と、ラジオボタン502を選択した上で次のウェブページへ遷移させるための第2遷移ボタン506とがさらに含まれる。以下、ウェブページに含まれるオブジェクトであり、構造化文書においてタグ付けされたラジオボタン・リンク・送信ボタン・テキストボックス等を「要素」と呼ぶ。
【0082】
図19のウェブページに対する典型的なテストケースとして3つのケースを挙げる。
1:証券番号「37001」のラジオボタン502aを選択し、第2遷移ボタン506をクリックする、
2:証券番号「38002」のラジオボタン502bを選択し、第2遷移ボタン506をクリックする。
3:第1遷移ボタン504をクリックする。
実際には、保険会社のウェブサイトへログインしたユーザごとに上記テストケースを試行する必要があり、また異常系として、ラジオボタン502を未選択のまま第2遷移ボタン506をクリックする場合等、その他様々なテストケースが想定される。
【0083】
図20は、図19のウェブページに対する操作が記録された操作内容ファイルを示し、図7や図15で示した関数設定画面の内容に対応する。図20の操作内容ファイルは、上記のテストケース1の操作が記録されたものであり、操作関数510は証券番号「37001」のラジオボタン502aを選択する操作に対応し、操作関数512は第2遷移ボタン506をクリックする操作に対応する。
【0084】
参考技術に記載した動作検証装置を使用してウェブページの自動テストを行う場合、テストの担当者(以下、「ユーザ」と呼ぶ。)は複数のテストケースのそれぞれに対応する操作内容ファイルを作成する必要がある。例えば上記の3つのテストケースの場合、ユーザが1つのテストケースについてウェブブラウザを操作して実行し、そこで作成された操作内容ファイルを編集して残り2つのテストケース用の操作内容ファイルを作成する必要があった。
【0085】
そのため、ユーザには、動作検証装置においてあらかじめ定められた関数(言い換えればAPI)であり、ウェブブラウザを操作してウェブページを編集する関数の理解が求められた。例えば、ラジオボタンを操作する関数の名称は「clickRadiobuttonByValue」であること、その引数として設定すべきオブジェクトは「dom=document.contentsform.要素名」であること、送信ボタンをクリックする関数の名称は「clickAnchor」であること、その引数として設定すべきオブジェクトは「dom=document.getElementByTagName('A')[要素位置]」であること等をユーザは理解しておく必要があった。本発明者は、この状況を鑑みて、動作検証装置によるウェブページの自動テストをいっそう効率化できる余地があると考えた。
【0086】
そこで実施の形態の動作検証装置(以下、特に断らない場合、単に「動作検証装置100」と呼ぶ。)は、ウェブページでの表示内容を定めた構造化文書に記述された要素のうち、ユーザによる操作の対象となる要素(以下、「操作対象要素」とも呼ぶ。)を抽出する。
【0087】
実施の形態の操作対象要素は、ユーザからデータを受け付けるための要素であり、言い換えれば、ユーザによるデータ入力の対象となる要素(以下、「入力要素」とも呼ぶ。)を含む。入力要素は、HTMLで規定された様々なフォームタグ、例えばラジオボタン・テキストボックス等を含む。また操作対象要素は、ウェブページの表示内容を変化させる処理の契機となる要素(以下、「表示変更要素」とも呼ぶ。)をさらに含む。表示変更要素は、ウェブブラウザでの表示対象をあるウェブページから別のウェブページへ遷移させる契機となる要素、例えばリンクタグ・送信ボタンタグ等を含む。また表示変更要素は、表示対象のウェブページを切り替える契機となる要素以外も含む。具体的には、ウェブブラウザでの表示内容を更新(リロード)させる契機となる要素、例えば汎用ボタンタグやクリアボタンタグを含む。またウェブページ内部の処理コード(例えばJAVAスクリプト(登録商標)で記述されたプログラムコード)を実行させる契機となる要素、例えば汎用ボタンタグを含む。
【0088】
なお実施の形態の構造化文書はHTML文書であることとする。しかし、他の種類の構造化文書、例えばXMLやJSP文書にも適用可能であることは当業者には理解されるところである。例えば、XML文書の場合、DTDやスタイルシートを参照してXML文書から操作対象要素を抽出してもよい。JSP文書の場合、JSP文書に記述されたHTMLタグにしたがって操作対象要素を抽出してもよい。
【0089】
動作検証装置100は、構造化文書から抽出した操作対象要素に対する操作をユーザに記述させるための文書(以下、「操作記述文書」とも呼ぶ。)を出力する。図21は、操作記述文書を示す。操作記述文書は、入力要素および表示変更要素に関する情報、例えば各要素の意味を示す情報を動作検証装置100が自動で設定する要素情報設定欄520と、入力要素および表示変更要素に対する操作をユーザが記述すべき操作情報設定欄530を含む。
【0090】
要素情報設定欄520において入力要素には、構造化文書における名称を示す第1入力要素情報欄522と、要素の意味を示す第2入力要素情報欄524とが対応づけて示される。また表示変更要素には、変更先の画面内容(例えば遷移先の画面を提供するファイル名)を示す第1表示変更要素情報欄526と、要素の意味を示す第2表示変更要素情報欄528とが対応づけて示される。
【0091】
図21の操作情報設定欄530では、上記の3つのテストケースが記述されている。例えば、同図のNo1のレコードは、ラジオボタン「radRenNum」の選択肢のうち「value=0」を選択して、「次へ」ボタンをクリックすることを示しており、上記のテストケース1に対応する。No2のレコードは、ラジオボタン「radRenNum」の選択肢のうち「value=1」を選択して、「次へ」ボタンをクリックすることを示しており、上記のテストケース2に対応する。
【0092】
動作検証装置100は、操作対象要素に対する操作がユーザにより記述された操作記述文書を読み込んで、操作記述文書の各レコード(例えば図21のNO1〜3)に対応する複数の操作内容ファイルを自動設定する。なお、No3のレコードが示すように表示変更要素のみの操作がテストケースとして設定される場合もある。また、JAVAスクリプトのコードを含む構造化文書であり、入力要素へのデータ入力に伴いウェブブラウザが自動的にスクリプトコードを実行して表示内容を変化させる構造化文書のテストでは入力要素のみの操作がテストケースとして設定される場合もある。
【0093】
実施の形態の動作検証装置100によれば、ユーザは、テスト対象の構造化文書の内容(例えば、操作対象要素の名称やvalue属性の値)を把握していれば操作記述文書に対して操作を記述することができる。言い換えれば、動作検証装置100は、動作検証装置100が定める関数の理解をユーザに強いることなく、効率的な構造化文書の自動テストの実現を支援する。また動作検証装置100は、構造化文書に記述された操作対象要素の名称や、その意味を示す情報を操作記述文書へ転記するため、操作記述文書に対する操作の記述を一層容易なものにすることができる。またユーザは操作対象要素への複数種類の操作内容を1つの操作記述文書に集約して記述すれば、各操作内容に対応した複数の操作内容ファイルが作成されるため、ユーザの負担を低減して効率的なテストを実現できる。
【0094】
以下、図22〜図24に亘り実施の形態の動作検証装置100の機能構成を詳述する。図22〜図24は図13のブロック図に対応する。なお、参考技術に記載した機能ブロックと同一もしくは対応する機能ブロックには同じ符号を付しており、参考技術に記載した説明と重複する説明は省略する。以降説明する各機能ブロックは、参考技術の動作検証装置にアドインされるプログラムモジュールとして実装されてもよい。
【0095】
図22は、動作検証装置100のIF部110の詳細を示すブロック図である。IF部110の入力部112は文書受付部540をさらに含み、出力部118は操作記述文書出力部542をさらに含む。
【0096】
文書受付部540は、構造化文書を指定した操作記述文書の作成要求をユーザが動作検証装置100へ入力した場合、その要求を受け付ける。そして、その要求で指定された構造化文書のデータを読み込む。例えば、操作記述文書の作成要求においてウェブサーバ400が提供するウェブページのURL、すなわち構造化文書のURLが指定された場合、文書受付部540はそのURLを指定してウェブサーバ400から構造化文書を取得し、メモリに格納してもよい。
【0097】
また文書受付部540は、操作記述文書を指定した操作内容ファイルの作成要求をユーザが動作検証装置100へ入力した場合、その要求を受け付ける。そして、その要求で指定された操作記述文書のデータを読み込む。例えば、操作内容ファイルの作成要求において動作検証装置100における操作記述文書のパス名が指定された場合、文書受付部540はそのパス名で特定される操作記述文書を取得し、メモリに格納してもよい。
【0098】
操作記述文書出力部542は、後述の操作記述文書設定部550により設定された操作記述文書のデータを所定の記憶領域へ格納する。例えば、操作記述文書の作成要求において当該文書の出力ディレクトリが指定された場合、操作記述文書出力部542はそのディレクトリに操作記述文書を保存してもよい。
【0099】
図23は、動作検証装置100のデータ保持部140の詳細を示すブロック図である。データ保持部140は、要素情報保持部544と対応関係保持部546をさらに含む。要素情報保持部544は、操作記述文書に設定された要素に関する属性情報を保持する記憶領域である。例えば、図21の入力要素「radRenNum」と対応づけてラジオボタンであることを示す情報や、要素名が「radRenNum」であることを示す情報を保持する。図21の表示変更要素「次へ」と対応づけて送信ボタンであることを示す情報や、構造化文書内でのアンカー位置が「7」であること示す情報を保持する。このアンカー位置は、例えば、文書内の先頭アンカーの位置を「0」として、以降のアンカーの記述の都度インクリメントした数値であってもよい。
【0100】
対応関係保持部546は、動作検証装置100において予め定められて関数保持部150に保持された関数であり、構造化文書の要素を操作するための関数と、操作記述文書に記述される操作対象要素への操作との対応関係を保持する記憶領域である。例えば、操作記述文書におけるラジオボタンへの操作を示す情報と対応づけて、関数「clickRadiobuttonByValue」と、その引数となるオブジェクトの雛形「dom=document.contentsform.要素名称」を保持する。また、操作記述文書における送信ボタンのクリック操作を示す情報と対応づけて、関数「clickAnchor」と、その引数となるオブジェクトの雛形「dom=document.getElementByTagName('A')[要素位置]」を保持する。対応関係保持部546に保持される対応関係は図27においても後述する。
【0101】
図24は、動作検証装置100のデータ処理部130の詳細を示すブロック図である。データ処理部130は、要素抽出部548と操作記述文書設定部550と操作情報変換部552をさらに含む。
【0102】
要素抽出部548は、操作記述文書の作成要求に応じて文書受付部540により構造化文書が読み込まれた場合、その構造化文書のデータから操作対象要素を抽出する。具体的には、構造化文書に記述された要素のうち、入力要素に関するデータおよび表示変更要素に対するデータを識別して、それらのデータをメモリへ格納する。
【0103】
図25は、構造化文書に記載された入力要素の例を示す。ラジオボタン560は、図19のラジオボタン502に対応する。要素抽出部548は、ラジオボタン560の記述を検出すると、「input type="radio"」を入力要素「ラジオボタン」として識別する。またname="radRenNum"を要素名称として識別する。また当該ラジオボタンを囲むラベル「証券番号」を要素意味として識別する。また要素抽出部548は、テキストボックス562の記述を検出すると、「input type="text"」を入力要素「テキストボックス」として識別する。またname="uid"を要素名称として識別する。また当該テキストボックスと対応づけられたラベル「ユーザID」を要素意味として識別する。
【0104】
また要素抽出部548は、チェックボックス564の記述を検出すると、「input type="checkbox"」を入力要素「チェックボックス」として識別する。またname="rank"を要素名称として識別する。また当該チェックボックスと対応づけられたラベル「グリーン免許」・「普通免許」・「ゴールド免許」のうち少なくとも1つを要素意味として識別する。また要素抽出部548は、プルダウンメニュー566の記述を検出すると、「select」を入力要素「プルダウンメニュー」として識別する。またname="age"を要素名称として識別する。また当該プルダウンメニューと対応づけられたラベル「年齢」を要素意味として識別する。
【0105】
図26は、構造化文書に記載された表示変更要素の例を示す。要素抽出部548は、リンク570の記述を検出すると、「a href」を表示変更要素として識別する。また「help.html」を変更先名称として識別する。また「alt="ヘルプ画面"」を変更先説明として識別する。なおアンカータグにより囲まれた文字列「ヘルプ画面へ」を変更先説明として識別してもよい。
【0106】
また図26の送信ボタン572は図19の第1遷移ボタン504に対応する。要素抽出部548は、送信ボタン572の記述を検出すると、「form〜input type="submit"」を表示変更要素として識別する。また「submit.cgi」を変更先名称として識別する。またvalue値の「契約者メニューへ」を変更先説明として識別する。また要素抽出部548は、汎用ボタン574の記述を検出すると、「button」を表示変更要素として識別する。また「location.reload()」を変更先名称として識別する。またボタンタグにより囲まれた文字列「ページを更新」を変更先説明として識別する。
【0107】
操作記述文書設定部550は、1つの構造化文書から要素抽出部548が抽出した操作対象要素の情報を同一の操作記述文書のデータとしてまとめて設定することにより操作記述文書を生成する。具体的には、入力要素の要素名称の文字列を第1入力要素情報欄522へ転記し、要素意味の文字列を第2入力要素情報欄524へ転記する。また表示変更要素の変更先名称の文字列を第1表示変更要素情報欄526へ転記し、変更先説明の文字列を第2表示変更要素情報欄528へ転記する。
【0108】
また操作記述文書設定部550は、操作対象要素の情報を操作記述文書へ設定する際、その操作対象要素の情報を要素情報保持部544へも格納する。例えば、操作記述文書における操作対象要素の記載位置(例えば何カラム目かを示す情報)と、その操作対象要素の種類(ラジオボタン・テキストボックス・送信ボタン等)を示す情報を対応づけて記録する。表示変更要素の場合にはそのアンカー位置を示す情報をさらに記録する。
【0109】
操作情報変換部552は、文書受付部540により読み込まれた操作記述文書に記述された操作対象要素への操作内容を、対応関係保持部546に保持された対応関係にしたがって動作検証装置100において予め定められた関数へ変換、言い換えればマッピングする。これにより、参考技術で説明した操作内容ファイルを作成する。また操作情報変換部552は、1つの操作記述文書に操作対象要素に対する複数種類の操作が記述されている場合、各操作に対応した複数の操作内容ファイルを作成する。例えば、図21で示した操作記述文書の3つのレコードに対応する3つの操作内容ファイル(そのうちの1つは図20の操作内容ファイル)のデータを設定する。
【0110】
操作情報変換部552は、操作記述文書の1レコード内に入力要素への操作と、表示変更要素への操作の両方が記述されている場合、入力要素への操作に対応する関数の呼び出し順序を、表示変更要素への操作に対応する関数の呼び出し順序より先になるよう設定する。具体的には、操作内容ファイルにおいて、入力要素への操作に対応する関数を、表示変更要素への操作に対応する関数より実行順序の上位に記録する。操作情報変換部552は、操作記述文書にもとづいて作成した操作内容ファイルを操作内容ファイル保持部143へ格納する。
【0111】
図27は、操作情報変換部552による変換例を模式的に示す。図27のNo1は、図25のラジオボタン560について37001(value=0)が選択された場合を示している。対応関係保持部546においてラジオボタンへの入力操作は関数「clickRadiobuttonByValue」とオブジェクトの雛形「dom=document.contentsform.要素名」と対応づけられている。操作情報変換部552は、操作記述文書に記述された操作対象要素の属性情報を要素情報保持部544から取得し、その操作対象要素がラジオボタンである場合、操作内容ファイルの関数欄に「clickRadiobuttonByValue」を設定する。また要素名「radRenNum」を設定した「dom=document.contentsform.radRenNum」をオブジェクト欄に設定する。そして、操作記述文書にユーザが記述した「value=0」をパラメータ値欄に設定する。なお、この設定内容は、図20の操作関数510に対応する。
【0112】
また図27のNo2は、図25のテキストボックス562に対して文字列「user123」が入力された場合を示している。対応関係保持部546においてテキストボックスへの入力操作は関数「typeText」とオブジェクトの雛形「dom=document.contentsform.elements['contentsform:要素名']」と対応づけられている。操作情報変換部552は、操作記述文書に記述された操作対象要素の属性情報を要素情報保持部544から取得し、その操作対象要素がテキストボックスである場合、操作内容ファイルの関数欄に「typeText」を設定する。また要素名「uid」を設定した「dom=document.contentsform.elements['contentsform:uid']」をオブジェクト欄に設定する。そして、操作記述文書にユーザが記述した「user123」をパラメータ値欄に設定する。
【0113】
また図27のNo3は、図25のチェックボックス564についてグリーン免許(value=green)が選択された場合を示している。対応関係保持部546においてチェックボックスへの入力操作は関数「clickCheckboxByValue」とオブジェクトの雛形「dom=document.contentsform.要素名」と対応づけられている。操作情報変換部552は、操作記述文書に記述された操作対象要素の属性情報を要素情報保持部544から取得し、その操作対象要素がチェックボックスである場合、操作内容ファイルの関数欄に「clickCheckboxByValue」を設定する。また要素名「rank」を設定した「dom=document.contentsform.rank」をオブジェクト欄に設定する。そして、操作記述文書にユーザが記述した「value=green」をパラメータ値欄に設定する。
【0114】
また図27のNo4は、図25のプルダウンメニュー566について20代(value=20)が選択された場合を示している。対応関係保持部546においてプルダウンメニューへの入力操作は関数「select」とオブジェクトの雛形「dom=document.contentsform.elements['contentsform:要素名']」と対応づけられている。操作情報変換部552は、操作記述文書に記述された操作対象要素の属性情報を要素情報保持部544から取得し、その操作対象要素がプルダウンメニューである場合、操作内容ファイルの関数欄に「select」を設定する。また要素名「age」を設定した「dom=document.contentsform.elements['contentsform:age']」をオブジェクト欄に設定する。そして、操作記述文書にユーザが記述した「value=20」をパラメータ値欄に設定する。
【0115】
また図27のNo5は、図26のリンク570のクリック操作が指定された場合を示している。対応関係保持部546においてハイパーリンクのクリック操作は関数「clickAnchor」とオブジェクトの雛形「dom=document.getElementByTagName('A')[要素位置]」と対応づけられている。操作情報変換部552は、操作記述文書に記述された操作対象要素の属性情報を要素情報保持部544から取得し、その操作対象要素がリンクである場合、操作内容ファイルの関数欄に「clickAnchor」を設定する。また要素情報保持部544に保持されたアンカー位置(ここでは「7」とする)を設定した「dom=document.getElementByTagName('A')[7]」をオブジェクト欄に設定する。
【0116】
また図27のNo6は、図26の送信ボタン572のクリック操作が指定された場合を示している。対応関係保持部546において送信ボタンのクリック操作は関数「clickAnchor」とオブジェクトの雛形「dom=document.getElementByTagName('A')[要素位置]」と対応づけられている。操作情報変換部552は、操作記述文書に記述された操作対象要素の属性情報を要素情報保持部544から取得し、その操作対象要素が送信ボタンである場合、操作内容ファイルの関数欄に「clickAnchor」を設定する。また要素情報保持部544に保持されたアンカー位置(ここでは「5」とする)を設定した「dom=document.getElementByTagName('A')[5]」をオブジェクト欄に設定する。なお、図26の汎用ボタン574のクリック操作が指定された場合もオブジェクト欄に設定するアンカー位置が異なる以外は同様の設定内容になる。
【0117】
以上の構成による動作を以下説明する。
図28は、動作検証装置100の動作を示すフローチャートである。文書受付部540はテスト対象の構造化文書を指定した操作記述文書の作成要求をユーザから受け付けると(S300のY)、その構造化文書を読み込む(S302)。要素抽出部548は、読み込まれた構造化文書に記述された操作対象要素に関する情報を抽出する(S304)。操作記述文書設定部550は操作対象要素に関する情報を設定した文書であり、ユーザに操作対象要素への操作内容を記述させるための操作記述文書のデータを設定し、操作記述文書出力部542は操作記述文書をユーザが指定したディレクトリへ出力する(S306)。操作記述文書の作成要求を受け付けなければ(S300のN)、S302からS306をスキップする。
【0118】
文書受付部540は操作記述文書を指定した操作内容ファイルの作成要求をユーザから受け付けると(S308のY)、その操作記述文書を読み込む(S310)。操作情報変換部552は、動作検証装置100において予め定められた関数であり、操作記述文書に記述された操作対象要素への操作に対応する関数を呼び出すことを定めた操作内容ファイルを作成して操作内容ファイル保持部143へ格納する(S312)。操作情報変換部552は、操作記述文書にユーザが記述した操作内容を示すレコード(行)ごとにS312の処理を実行し、各レコードに対応した操作内容ファイルを作成する。操作内容ファイルの作成要求が受け付けられなければ(S308のN)、S310およびS312をスキップする。
【0119】
テスト対象の構造化文書に対するテストの実行要求が受け付けられると(S314のY)、プログラム生成部132は、操作内容ファイル保持部143に保持された操作内容ファイルに記述された関数について、オブジェクト欄およびパラメータ値欄の値を引数として各関数を呼び出すステップを組み合わせたテスト・プログラムを生成する(S316)。プログラム実行部134は、テスト・プログラムに記述された関数を順次呼び出すことにより構造化文書を表示したウェブブラウザを介してウェブページに対する操作をユーザに代わり実行する(S318)。テストの実行要求が受け付けられなければ(S314のN)、S316およびS318をスキップする。
【0120】
以上、本発明を実施の形態をもとに説明した。この実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【0121】
上記実施の形態では言及していないが、操作情報変換部552は、操作記述文書に記述された操作に対応する関数を操作内容ファイルへ設定する都度、ウェブページの表示内容を証左物として記録するための関数を操作内容ファイルへ自動で付加してもよい。例えば、図21の操作記述文書のNO1のレコードにもとづいて図20の操作内容ファイルを設定する場合、操作関数510の前・操作関数510の次・操作関数512の次のそれぞれにスクリーンショット操作に対応する関数を付加してもよい。
【0122】
請求項に記載の各構成要件が果たすべき機能は、実施の形態および変形例において示された各構成要素の単体もしくはそれらの連携によって実現されることも当業者には理解されるところである。例えば、請求項に記載のプログラム生成部は、操作情報変換部552とプログラム生成部132との連携により実現されてもよい。また、操作内容ファイルの内容は実質的にテスト実行コードであると言えるため、請求項に記載のプログラム生成部は、操作情報変換部552により実現されると言えることも当業者には理解されるところである。
【符号の説明】
【0123】
100 動作検証装置、 132 プログラム生成部、 540 文書受付部、 542 操作記述文書出力部、 544 要素情報保持部、 546 対応関係保持部、 548 要素抽出部、 550 操作記述文書設定部、 552 操作情報変換部。
【技術分野】
【0001】
本発明はデータ処理技術に関し、特に、構造化文書のテストを支援する情報処理装置に関する。
【背景技術】
【0002】
近年、ウェブページ等のテストを自動化するテストツールが提供されてきている。本出願人は、ウェブページ等の自動テストを効率的に実現する動作検証装置を以下の特許文献1にて提案している。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2010−237841号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
上記特許文献1の動作検証装置では、ウェブページ等の試験対象物に対して一度はユーザが操作を実行してその操作を記録しておき、その後、ユーザは記録された操作の内容を解釈した上で適宜編集し、テストの実行コードを作成する必要があった。すなわちユーザは、動作検証装置において操作がどのように記録されるか、またどのように編集すれば所望のテストを実施できるかを理解している必要があり、言い換えれば動作検証装置の規則を理解している必要があった。本発明者は、構造化文書の自動テストをユーザが一層容易に実施できるよう改善の余地があると考えた。
【0005】
本発明はこうした課題に鑑みてなされたものであり、その主な目的は、構造化文書の自動テストの効率化を支援する技術を提供することにある。
【課題を解決するための手段】
【0006】
上記課題を解決するために、本発明のある態様の情報処理装置は、画面の表示内容を定めた構造化文書を取得する取得部と、取得された構造化文書に記述された要素のうち、画面の表示内容を変化させる処理の契機となる要素を表示変更要素として抽出する抽出部と、抽出された表示変更要素への操作をユーザに記述させるための文書を操作記述文書として出力する出力部と、画面の表示内容を確認するためのテスト・プログラムを実行させる検証装置において予め定められた要素を操作するための関数と、操作記述文書に記述される表示変更要素への操作との対応関係を保持する対応関係保持部と、対応関係にしたがって、操作記述文書に記述された表示変更要素への操作に対応した検証装置が定める関数を呼び出すプログラムコードを設定することによりテスト・プログラムを生成するプログラム生成部と、を備える。
【0007】
本発明の別の態様もまた、情報処理装置である。この装置は、画面の表示内容を定めた構造化文書を取得する取得部と、取得された構造化文書に記述された要素のうち、ユーザからデータ入力を受け付ける要素を入力要素として抽出する抽出部と、抽出された入力要素への操作をユーザに記述させるための文書を操作記述文書として出力する出力部と、画面の表示内容を確認するためのテスト・プログラムを実行させる検証装置において予め定められた要素を操作するための関数と、操作記述文書に記述される入力要素への操作との対応関係を保持する対応関係保持部と、対応関係にしたがって、操作記述文書に記述された入力要素への操作に対応した検証装置が定める関数を呼び出すプログラムコードを設定することによりテスト・プログラムを生成するプログラム生成部と、を備える。
【0008】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、システム、プログラム、プログラムを格納した記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【0009】
本発明によれば、構造化文書の自動テストの効率化を支援することができる。
【図面の簡単な説明】
【0010】
【図1(a)】ポータルサイト第1画面の画面図である。
【図1(b)】ポータルサイト第2画面の画面図である。
【図2】辞書テストを実行したときのログを示す図である。
【図3】辞書テストを実行するためのプログラムを示す図である。
【図4】動作検証装置の機能ブロック図である。
【図5】ログを取得して動作テストを実行するまでの概要図である。
【図6】ログ画面の画面図である。
【図7】関数設定画面の画面図である。
【図8】プログラム画面の画面図である。
【図9】入力設定画面の画面図である。
【図10】ケース設定画面の画面図である。
【図11】参考技術1の動作検証装置と参考技術2の動作検証装置とのそれぞれにおける構成の概要を示す図である。
【図12】参考技術1の動作検証装置と参考技術2の動作検証装置とのそれぞれにおける動作の概要を示す図である。
【図13】参考技術2の動作検証装置の機能構成を示すブロック図である。
【図14】参考技術2において、ユーザのデータ入力操作を検出して動作テストを実行するまでの概要図である。
【図15】参考技術2における関数設定画面の画面図である。
【図16】参考技術2における関数設定画面の画面図である。
【図17】参考技術2における入力設定画面の画面図である。
【図18】参考技術2におけるケース設定画面の画面図である。
【図19】動作テストの対象のウェブページを示す図である。
【図20】図19のウェブページに対する操作が記録された操作内容ファイルを示す図である。
【図21】操作記述文書を示す図である。
【図22】動作検証装置のIF部の詳細を示すブロック図である。
【図23】動作検証装置のデータ保持部の詳細を示すブロック図である。
【図24】動作検証装置のデータ処理部の詳細を示すブロック図である。
【図25】構造化文書に記載された入力要素の例を示す図である。
【図26】構造化文書に記載された表示変更要素の例を示す図である。
【図27】操作情報変換部による変換例を模式的に示す図である。
【図28】動作検証装置の動作を示すフローチャートである。
【発明を実施するための形態】
【0011】
本実施の形態の動作検証システムについて説明する前に、その前提となる動作検証装置に係る参考技術1および2について説明する。
【0012】
(参考技術1)
図1(a)は、ポータルサイト第1画面300の画面図である。
参考技術1においては、ポータル・サイト「XYZ!」を対象とした動作テストについて説明する。ポータルサイト第1画面300は、エディットボックス302と検索リンク304を含む。検索リンク304は、「ウェブ」、「ブログ」、「画像」、「辞書」という4つのリンクを含む。ユーザがエディットボックス302に文字列を入力し、検索リンク304のうちのいずれかをマウス・クリックすると、入力文字列の検索が開始される。たとえば、エディットボックス302に文字列「液晶」と入力し、リンク「ウェブ」をマウス・クリックした場合、文字列「液晶」を含むウェブサイトが検索対象となる。エディットボックス302に文字列「液晶」と入力し、リンク「ブログ」をマウス・クリックした場合には、このポータル・サイトに開設されているブログ(Weblog)のうち、文字列「液晶」を含むブログページが検索対象となる。
ここでは、エディットボックス302に文字列「テスト」が入力され、リンク「辞書」がマウス・クリックされたとする。
【0013】
図1(b)は、ポータルサイト第2画面310の画面図である。
ポータルサイト第1画面300にて、「テスト」を入力し、「辞書」をマウス・クリックすると、図1(b)に示すポータルサイト第2画面310が表示される。検索結果欄306には、このポータル・サイトが提供している「辞書」サービスにより、文字列「テスト」に関連する項目が羅列される。
ここで、検索結果欄306の1番上にあるリンク「テスト(test)」がマウス・クリックされたとする。
【0014】
上記過程においては、以下に示す3つの操作がなされている。
A1.ポータルサイト第1画面300のエディットボックス302に文字列「テスト」を入力する操作。
A2.ポータルサイト第1画面300の検索リンク304のうち、リンク「辞書」をマウス・クリックする操作。
A3.ポータルサイト第2画面310の検索結果欄306のうち、リンク「テスト(test)」をマウス・クリックする操作。
以下においては、上記A1〜A3の操作により実現される動作過程のことを、「辞書テスト」とよぶ。
【0015】
図2は、辞書テストを実行したときのログ320を示す図である。
HP社のQTPが導入されているクライアント端末を操作して、上記ポータル・サイトにアクセスし、A1〜A3の操作を実行した場合、QTPは図2に示すログ320を生成する。ログ320には、操作A1〜A3が所定フォーマットの符合文として記録される。
たとえば、操作A1は、
Browser("XYZ!").Page("XYZ!").WebEdit("p").Set"テスト"
という符号文にて表現される。これは、"XYZ!"というウェブ・サイト、"XYZ!"という名前のウェブページ、pという名前のエディットボックス(図1(a)、図1(b)に示すエディットボックス302に相当する)に対して、文字列「テスト」が入力されたことを意味している。
同様にして、操作A2は、
Browser("XYZ!").Page("XYZ!").Link("辞書").Click
操作A3は、
Browser("XYZ!").Page("XYZ!-すべての辞書-テスト").Link("テスト(test)").Click
という符号文にて表示される。参考技術1においては、QTPの文法に基づいて説明するが、符合文のフォーマットはこれに限られるものではない。
【0016】
QTPは、ログ320の符合文を解釈しながら、符合文により表現される操作を再現実行できる。このため、いったんログ320を生成すれば、同一内容の辞書テストを何度でも繰り返し実行できる。また、ログ320の一部を書き換えれば、手動操作時とは異なる内容にて辞書テストを実行できる。たとえば、
Browser("XYZ!").Page("XYZ!").WebEdit("p").Set"テスト"
に含まれる文字列「テスト」を別の文字列「テイスト」に変更し、
Browser("XYZ!").Page("XYZ!").WebEdit("p").Set"テイスト"
と書き換えてQTPに入力すれば、エディットボックス302への入力文字列だけ変更した同内容の辞書テストを自動実行できる。
しかし、ログ320を書き換えながら動作テストを実行するには、ログ320の文法に関してある程度の知識が必要である。また、ログ320の書き換えに際し、人為的なミスが発生する可能性がある。
【0017】
図3は、辞書テストを実行するためのプログラム330を示す図である。
ログ320により動作テストを実行する代わりに、ログ320と同等の内容をVB(Visual Basic)スクリプト等で記述することにより、テスト・プログラムを作成してもよい。図3に示すプログラム330は、図2のログ320を参照しつつ作成されたテスト・プログラムである。
たとえば、操作A1は、
WebEditSet(Browser("XYZ!").Page("XYZ!").WebEdit("p"),DataTable("p1,dtGlobalSheet")
というVB関数により表現される。WebEditSet関数の具体的なロジックは、同図中段に記述されている通りである。
【0018】
プログラム330、文字列「テスト」のような入力データをプログラム330中に含まない点においてログ320と異なる。代わりに、WebEditSet関数は、dtGlobalSheetとして表現されるファイル(以下、「入力データファイル」とよぶ)から入力データを受け取る。すなわち、ロジックと入力データが分離されることになる。入力データファイルの書き換えや取り替えにより、さまざまな入力データに基づいて同一ロジックの辞書テストを実行できる。手動による動作テストやログ320による動作テストに比べて、プログラム330による動作テストは、入力データのバリエーションを増やしやすいというメリットがある。
【0019】
ただし、プログラム330による動作テストには、以下の問題点がある。
d1.プログラムを作成する手間が新たに発生する。
d2.プログラム作成者によって、プログラムの内容が変化する。たとえば、プログラマP1が操作A1に対応して作成するWebEditSet関数と、プログラマP2が操作A1に対応して作成するWebEditSet関数は、関数名は同じでもロジックが同一になるとは限らない。また、プログラム自体にバグが混入する可能性がある。このため、プログラム330自体の信頼性を担保するための取り組みが必要となる。また、プログラム330には、例外処理等、動作テストとは直接関係しないロジックも必要であるが、全てのプログラマが例外処理まで考慮したロジックを実装するとは限らない。たとえば、図3に示すWebEditSet関数の場合、入力データが空文字の場合にも対応できるようにロジックが組まれているが、別のプログラマがWebEditSet関数を実装する場合には、こういった配慮が欠如するかもしれない。
結果として、プログラマのスキルが動作テストの内容・結果に影響を及ぼしやすくなってしまう。
【0020】
図4は、動作検証装置100の機能ブロック図である。
本明細書のブロック図が示す各機能ブロックは、ハードウェア的には、コンピュータのCPUをはじめとする素子や機械装置で実現でき、ソフトウェア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックはハードウェア、ソフトウェアの組み合わせによっていろいろなかたちで実現できることは、当業者には理解されるところである。例えば、各機能ブロックは、コンピュータプログラムとして記録媒体に格納され、情報処理装置のハードディスクにインストールされ、適宜メインメモリに読み出されてプロセッサにより実行されてもよい。
動作検証装置100は、専用ハードウェアとして形成されてもよいし、ウェブブラウザなどのユーザインタフェースと連携するソフトウェア・モジュールとして形成されてもよい。
参考技術1の動作検証装置100とは、QTPのアドオンとして形成されるソフトウェア・モジュールであるとして説明する。
【0021】
動作検証装置100は、IF(インタフェース)部110、データ処理部130およびデータ保持部140を含む。
IF部110は、ユーザやQTPとのインタフェースを担当する。データ処理部130は、IF部110やデータ保持部140から取得されたデータを元にして各種のデータ処理を実行する。データ処理部130は、IF部110とデータ保持部140との間のインタフェースの役割も果たす。データ保持部140は、各種データを保持するための記憶領域である。
【0022】
IF部110:
IF部110は、入力部112と出力部118を含む。入力部112はユーザやQTPからの入力処理を担当し、出力部118はユーザやQTPに対する出力処理を担当する。入力部112は、ログ取得部114と入力データ取得部116を含む。ログ取得部114は、QTPからログを取得する。入力データ取得部116は、入力データファイルを取得し、入力データファイルからプログラムに提供する入力データを取得する。入力データファイルの詳細については、図5や図9に関連して詳述する。
【0023】
出力部118は、関数設定画面表示部120、入力設定画面表示部122、プログラム画面表示部124およびケース設定画面表示部126を含む。関数設定画面表示部120は、図7に示す関数設定画面210を表示させる。入力設定画面表示部122は、図9に示す入力設定画面230を表示させる。プログラム画面表示部124は、図8に示すプログラム画面220を表示させる。ケース設定画面表示部126は、図10に示すケース設定画面240を表示させる。
【0024】
データ処理部130:
データ処理部130は、プログラム生成部132、プログラム実行部134およびテストケース登録部136を含む。プログラム生成部132は、動作テスト用のプログラムを自動的に生成する。プログラム実行部134は、生成されたプログラムを実行させる。参考技術1においては、QTPにプログラムを実行させる。テストケース登録部136は、実行セットをケースファイルに登録する。実行セットおよびケースファイルについては図10に関連して詳述する。
【0025】
データ保持部140:
データ保持部140は、ログ保持部142、プログラム保持部144、入力データファイル保持部146、ケースファイル保持部148、関数保持部150および結果保持部152を含む。ログ保持部142は、ログを保持する。プログラム保持部144は、プログラムを保持する。入力データファイル保持部146は、入力データファイルを保持する。ケースファイル保持部148は、ケースファイルを保持する。関数保持部150は、動作テスト用のプログラムに登録される関数について、関数ライブラリを保持する。結果保持部152は、動作テストの結果を保持する。
【0026】
図5は、参考技術1において、ログを取得して動作テストを実行するまでの概要図である。
まず、動作テストの対象となる機器を手動操作する。参考技術1においては、クライアント端末のウェブブラウザを操作して、ポータル・サイト「XYZ!」にアクセスする。QTPはログを生成し、ログ取得部114はQTPからログを取得する。各種符合文にはあらかじめ関数が対応づけられている。関数設定画面表示部120は、関数保持部150の関数ライブラリを読み出し、ログに含まれる各符号文に対応する関数を一覧表示させる(S1)。関数設定画面表示部120において、ユーザは、適宜、関数を追加・変更・削除できる。こうして、プログラムに含まれるべき関数が特定される。S1については、図7に関連して後に詳述する。
【0027】
次に、このプログラムに供給すべき入力データを設定する(S2)。設定内容は、入力データファイルとして登録される。S2については、図9に関連して後に詳述する。S1で設定された関数群からプログラムを自動生成する(S3)。S3については、図8に関連して後に詳述する。
【0028】
次に、複数種類のプログラムおよび複数種類の入力データファイルから、プログラムと入力データファイルの組合せを「実行セット」として登録する。実行セットは複数個登録することもできる(S4)。設定内容は、ケースファイルとして登録される。たとえば、プログラムP1を入力データファイルF2に基づいて実行したあと、プログラムP2を入力データファイルF6に基づいて実行させたい場合、
実行セット1:プログラムP1+入力データファイルF2
実行セット2:プログラムP2+入力データファイルF6
としてケースファイルに登録される。S4については、図10に関連して詳述する。
最後に、ケースファイルにしたがって、プログラムを実行する(S5)。上記例の場合には、プログラム実行部134は、実行セット1と実行セット2を連続実行させる。プログラム実行部134は、プログラムの実行結果、いいかえれば、テスト結果を結果保持部152に登録する。
【0029】
図6は、ログ画面200の画面図である。
ログ取得部114がログを取得すると、出力部118はログ画面200におけるログ表示領域202にログを画面表示させる。ユーザは、QTPのログをログ表示領域202にコピー&ペーストしてもよい。あるいは、出力部118は、ログ画面200の表示時において、QTPが生成したログ(ファイル)を取得し、ログ表示領域202に画面表示させてもよい。ユーザが実行ボタン204をマウス・クリックすると、次の図7に示す関数設定画面210が表示される。
【0030】
図7は、関数設定画面210の画面図である。
プログラム生成部132は、ログに含まれる符号文について関数を特定し、関数設定画面210の関数欄214に特定した関数を一覧表示させる。番号欄212は実行順序、説明欄216は関数の概要説明、オブジェクト欄218は操作対象オブジェクト、パラメータ欄219はパラメータ名、入力値欄217は入力データを示す。
先述の操作A1を示す符合文、
Browser("XYZ!").Page("XYZ!").WebEdit("p").Set"テスト"
には、あらかじめ、WebEditSet関数が関数ライブラリにおいて対応づけられている。プログラム生成部132はログ320の1番目の符合文を読み出すと、関数保持部150の関数ライブラリを参照し、WebEditSet関数を特定する。操作A1が操作対象とするオブジェクトは、「Browser("XYZ!").Page("XYZ!")」のページであるため、オブジェクト欄218には、「Browser("XYZ!").Page("XYZ!")」が設定される。WebEditSet関数は、エディットボックスp(エディットボックス302)に設定される入力データを引数とする関数である。入力値欄217において、エディットボックスpに設定すべき入力データを設定することもできるが、関数設定画面210では入力データを登録しないものとして説明する。エディットボックスpに設定すべき入力データは、図9に関連して詳述する入力設定画面230にて設定される。
【0031】
ログ320には操作A1〜A3に対応して3つの符合文が含まれているため、プログラム生成部132は3つの関数を特定する。ユーザは、関数設定画面210にて、関数を追加・削除・変更してもよい。図7における4番目のTextCheck関数と5番目のWebScreenCapture関数は、ユーザが追加選択した関数である。
【0032】
TextCheck関数は、表示中のウェブページにおいて、変数qに代入される文字列が含まれているかを判定する関数である。WebScreenCapture関数は、表示中のウェブページを画面キャプチャする関数である。動作テストの結果を証跡管理する上で、WebScreenCapture関数は便利な関数である。このように、関数ライブラリには、WebEditSet関数のようにユーザの操作に対応した関数だけでなく、TestCheck関数のように動作テストを補助・支援するための関数も用意されている。ユーザは、関数ライブラリから所望の関数を選択するだけで、動作テストに含めたいロジックを設定できる。
【0033】
テストケース設定ボタン215がクリックされると、図10のケース設定画面240が表示される。入力データファイル作成ボタン213がクリックされると、図9の入力設定画面230が表示される。プログラム作成ボタン211がクリックされると、図8のプログラム画面220が表示される。
【0034】
参考技術1の動作検証装置100には、以下のメリットがある。
m1.GUI(Graphical User Interface)ベースで関数を選択するだけで、プログラムに含めたいロジックを選択できる。プログラムを作成するための手間がほとんどかからない。
m2.プログラムに含まれる関数は、関数ライブラリとして登録済みの関数であるため、作成者によってプログラムの品質がばらつきにくい。例外処理等の必要なロジックも、あらかじめ各関数に組み込まれている。
【0035】
図8は、プログラム画面220の画面図である。
関数設定画面210において、プログラム作成ボタン211がマウス・クリックされると、プログラム生成部132がプログラムを生成し、プログラム画面表示部124はプログラム画面220におけるプログラム表示領域222にそのソースコードを表示させる。プログラムは、プログラム保持部144に保持される。
【0036】
図9は、入力設定画面230の画面図である。
関数設定画面210において、入力データファイル作成ボタン213がマウス・クリックされると、入力設定画面表示部122は入力設定画面230を表示させる。関数設定画面210においては、パラメータpとqが定義されている。番号欄232は入力順序、変数欄234はパラメータpへの入力データ、変数欄236はパラメータqへの入力データを示す。入力設定画面230では、このパラメータpとqに代入する入力データを設定する。各入力データは、入力データファイルとして入力データファイル保持部146に保持される。
【0037】
たとえば、プログラム330に、図9に示す形式の入力データファイルを与えると、
1.文字列「テスト」をエディットボックス302に入力して辞書を検索し、実行結果を示す画面に文字列「試験」が含まれているかを判定するテスト
2.文字列「test」をエディットボックス302に入力して辞書を検索し、実行結果を示す画面に文字列「試験」が含まれているかを判定するテスト
3.文字列「テストケース」をエディットボックス302に入力して辞書を検索し、実行結果を示す画面に文字列「試験」が含まれているかを判定するテスト
・・・のように、異なる入力データに基づく複数の辞書テストを連続実行できる。
【0038】
図10は、ケース設定画面240の画面図である。
関数設定画面210において、テストケース設定ボタン215がマウス・クリックされると、ケース設定画面表示部126はケース設定画面240を表示させる。番号欄244は実行順序、実行セット欄245は実行セットの概要、プログラム欄246は実行対象となるプログラム、入力データファイル欄247は入力データの抽出対象となる入力データファイルを示す。
ここでは、インターネット証券のウェブ・サイトを動作テストの対象として説明する。
【0039】
同図においては、1.ログイン、2.ニュースチェック、3.株売り、4.債券売り、5.住所変更、6.ログアウトという6つの実行セットが登録されている。まず、QTPは、プログラム「login.vbs」から「login」プロジェクトを生成する。ここでいう「プロジェクト」とは、QTPの実行形式ファイル群を含むディレクトリである。QTPは「login」プロジェクトを入力として、login.vbsとlogin.xlsに定義された処理を実行する。ユーザが実行ボタン248をマウス・クリックすると、最初に、実行セット「ログイン」の「login」プロジェクトが実行される。1番目の実行セット「ログイン」が完了すると、実行セット「ニュースチェック」として、「ncheck」プロジェクトが実行される。
【0040】
このように、実行ボタン248がマウス・クリックされると、1.ログイン、2.ニュースチェック、3.株売り、4.債券売り、5.住所変更、6.ログアウトという6つの実行セットが連続実行される。これにより、「ログインして、ニュースをチェックした後、手持ち株と手持ち債券の売りを指示し、住所変更をした上で、ログアウトする」というテスト・シナリオに基づく動作テストを自動化できる。
【0041】
ユーザは、ケース設定画面240において自由にテスト・シナリオを作ることができる。たとえば、実行セット「株売り」の代わりに実行セット「株買い」を登録してもよいし、実行セット「株売り」の入力データファイルとして「stock1.xls」ではなく別の入力データファイルを登録してもよい。ケース設定画面240において登録されたテスト・シナリオはケースファイルとして記録され、ケースファイル保持部148に保持される。
テスト・シナリオの構成や入力データファイル等を少しずつ変化させることにより、動作テストのバリエーションを広げやすくなる。
【0042】
以上、参考技術1の動作検証装置100を説明した。
動作検証装置100によれば、プログラムと入力データ、すなわち、処理とパラメータを分離できる。そして、そのためのプログラムをGUIベースの設定に基づき自動生成できる。これにより、プログラムに含めるロジックの多様性を確保しつつも、安定した品質のプログラムを簡易に生成できる。また、入力データファイルの内容を変更するだけで、動作テストの内容を変更できるため、動作テストのバリエーションを広げやすくなる。
【0043】
更に、実行セットをケースファイルに登録してテスト・シナリオを作ることにより、既存のプログラムを組合せながら、さまざまな状況における動作テストを実現できる。また、WebEditSet関数のようなテスト対象機器を操作するための関数だけでなく、WebScreenCapture関数のような動作テストを支援するための関数を用意しておくことにより、動作テストの効率や信頼性をいっそう向上させやすくなる。
【0044】
(参考技術2)
参考技術2では、上記の参考技術1を改良した動作検証装置100を提案する。
まず、参考技術1における動作検証装置100と、参考技術2の動作検証装置100とを比較しつつ、参考技術2の動作検証装置100についてその概要を説明する。
【0045】
図11は、参考技術1の動作検証装置100と参考技術2の動作検証装置100とのそれぞれにおける構成の概要を示す。図11(a)が示すように、参考技術1の動作検証装置100は、動作テストの実行エンジンであるQTPモジュール102と、QTPモジュール102を使用したウェブサーバ400の動作テストを効率化するためのラッパーモジュール104とを備えた。このラッパーモジュール104には、図4で示した各機能ブロックが含まれる。
【0046】
図11(a)において、ユーザは、QTPモジュール102を介して、動作確認の対象装置であるウェブサーバ400を操作する(S100)。ラッパーモジュール104は、その操作内容が記録されたログをQTPモジュール102から取得して、関数設定画面210をユーザに提供した(S102)。ユーザは、動作テスト実行の際、QTPモジュールが読み込み可能な動作テスト用プログラムをラッパーモジュール104において生成させ、QTPモジュール102にそのプログラムを実行させた(S104)。
【0047】
これに対して、図11(b)が示すように、参考技術2の動作検証装置100は、動作テストの実行エンジンの機能とラッパーモジュール104の機能とが統合された統合検証モジュール106を備える。ユーザが統合検証モジュール106を介してウェブサーバ400を操作すると(S200)、統合検証モジュール106はその操作内容を逐次検出して関数設定画面210のデータを設定し、関数設定画面210をユーザに提供する(S202)。ユーザは、動作テスト実行の際、統合検証モジュール106において動作テスト用プログラムを生成させて実行させる(S204)。
【0048】
図12は、参考技術1の動作検証装置100と参考技術2の動作検証装置100とのそれぞれにおける動作の概要を示す。図12(a)は、参考技術1の動作検証装置100における動作の概要を示している。ユーザはウェブサーバ400に対するデータ入力操作を実行し(S110)、QTPモジュール102はその操作内容が記録されたログを出力する(S112)。ユーザはそのログのデータをQTPモジュール102の所定の入力エリアにコピーする(S114)。ラッパーモジュール104は所定の入力エリアに設定されたログのデータに基づいて関数設定画面を設定して表示させ(S116)、ユーザはその関数設定画面を介して追加・変更すべき関数・入力データを設定する(S118)。
【0049】
ラッパーモジュール104は、関数設定画面のデータに基づいて、動作テストのためのQTP用プログラムを生成する(S120)。ユーザは、QTP用プログラムをQTPモジュール102の所定の入力エリアにコピーする(S122)。ユーザは、ケース設定画面において、QTP用プログラムと入力データファイルとをセットとして指定した動作テストのシナリオを設定する(S124)。ラッパーモジュール104は、そのシナリオに基づいて、QTP用プログラムと入力データファイルのセットをQTPモジュール102に渡して、セット毎に動作テストを実行させる(S126)。
【0050】
図12(b)は、参考技術2の動作検証装置100における動作の概要を示している。ユーザは、ウェブサーバ400に対するデータ入力操作を実行する(S210)。統合検証モジュール106は、そのデータ入力操作を逐次検出して、データ入力操作に対応する関数を操作内容ファイルに記録し、その操作内容ファイルの記録データを関数設定画面において表示する(S212)。ユーザは、その関数設定画面を介して追加・変更すべき関数・入力データを操作内容ファイルに設定する(S214)。そしてユーザは、ケース設定画面において、操作内容ファイルと入力データファイルとをセットとして指定した動作テストのシナリオを設定する(S216)。統合検証モジュール106は、そのシナリオに基づいて、シナリオ内の1以上のセットを集約した動作テスト用プログラムを生成して実行する(S218)。
【0051】
このように、参考技術1の動作検証装置100では、QTPモジュール102とラッパーモジュール104とが分離していた。したがって、両モジュールを連係させるために、ユーザ自身が仲介作業を実行する必要があった。また、ラッパーモジュール104はシナリオ内のセット毎にQTPモジュール102をコールして、テスト用プログラムをセット毎に実行させる必要があった。
【0052】
これに対して、参考技術2の動作検証装置100では、動作テストの実行エンジンと、その効率的な利用を実現するラッパーとが分離されることなく、シームレスに統合されている。したがって、参考技術1の動作検証装置100と比較すると、分離したモジュールを連係させるために必要であったユーザの作業が不要になり、動作テストのためのユーザの作業量が低減する。また、シナリオ内の複数のセットが集約された動作テスト用プログラムが生成され、そのプログラムの実行により一連のシナリオが実行されるため、迅速な動作テストが実現される。
【0053】
図13は、参考技術2の動作検証装置100の機能構成を示すブロック図である。同図の機能ブロックは、図11(b)で示した統合検証モジュール106に含まれる。参考技術2の機能ブロックのうち、参考技術1の機能ブロックに対応する機能ブロックには、同じ符号を付している。参考技術1の機能ブロックと同じ符号を付した機能ブロックについてはその機能が参考技術1に既述した内容と異なる場合に記載しており、同様の機能についてはその記載を省略する。
【0054】
データ保持部140は、操作内容ファイル保持部143と、プログラム保持部144と、入力データファイル保持部146と、ケースファイル保持部148と、関数保持部150とを有する。操作内容ファイル保持部143は、動作テスト用プログラムに設定すべき関数が記録される操作内容ファイルを記憶する。プログラム保持部144は、操作内容ファイルにしたがって生成された動作テスト用プログラムを記憶する。
【0055】
IF部110の入力部112は、操作検出部115とユーザ設定受付部117とを有する。操作検出部115は、ウェブサーバ400に対するユーザのデータ入力操作を逐次検出する。ユーザ設定受付部117は、関数設定画面210、入力設定画面230、ケース設定画面240に対するユーザによる設定情報を検出する。
【0056】
IF部110の出力部118は、関数設定画面表示部120と入力設定画面表示部122とケース設定画面表示部126とを有する。関数設定画面表示部120は、操作内容ファイル保持部143に記録された操作内容ファイルの内容を表示する関数設定画面210を所定の表示装置に表示させる。
【0057】
データ処理部130は、プログラム生成部132と、プログラム実行部134と、テストケース登録部136と、操作記録部137と、入力データ記録部138とを有する。操作記録部137は、関数保持部150を参照して、操作検出部115において検出されたデータ入力操作に対応する関数を特定し、その関数を操作内容ファイルに記録する。また操作記録部137は、関数設定画面210に対するユーザの設定情報を操作内容ファイルに記録する。入力データ記録部138は、入力設定画面230を介してユーザが入力した入力データを入力データファイルに記録する。プログラム生成部132は、操作内容ファイルに記録された関数に応じて動作テスト用プログラムを生成する。プログラム実行部134は、動作テストの実行エンジンとして、動作テスト用プログラムを実行し、その結果を結果保持部152に記録する。
【0058】
図14は、参考技術2において、ユーザのデータ入力操作を検出して動作テストを実行するまでの概要図である。まず、ユーザはクライアント端末のウェブブラウザを操作してウェブサーバ400にアクセスし、ウェブサーバ400に対する各種操作、典型的にはウェブサーバ400が提供するウェブページに対するデータ入力操作を実行する。操作検出部115はユーザによるデータ入力操作を逐次検出し、操作記録部137は関数保持部150の関数ライブラリを読み出し、そのデータ入力操作に対応する関数を操作内容ファイルに逐次記録する(S220)。
【0059】
次に、関数設定画面表示部120は、操作内容ファイル保持部143の操作内容ファイルを読み出し、ユーザによる操作に対応する関数を一覧表示する関数設定画面を表示させる。関数設定画面において、ユーザは、適宜、関数を追加・変更・削除でき、また、動作テスト用プログラムに静的に設定すべき入力データを設定できる。こうして、動作テスト用プログラムに含まれるべき関数が特定される。関数設定画面については、図15および図16に関連して後述する。
【0060】
次に、入力設定画面表示部122は、入力設定画面230を表示させる。ユーザは、入力設定画面230を介して、動作テストの実行時に動作テスト用プログラムに対して動的に供給されるべき入力データを設定する。ユーザにより設定された入力データは、入力データファイルに記録される(S222)。入力設定画面230については、図17に関連して後述する。
【0061】
次に、ケース設定画面表示部126は、ケース設定画面240を表示させる。ユーザは、複数種類の操作内容ファイルおよび複数種類の入力データファイルから、操作内容ファイルと入力データファイルとの組み合わせを実行セットとして登録する。テストケース登録部136は、1以上の実行セットをケースファイルに記録する(S224)。例えば、テストケース1において、操作内容ファイルF01の設定内容を入力データファイルF12に基づいて実行させた後、操作内容ファイルF02の設定内容を入力データファイルF16に基づいて実行させる場合、
テストケース1:
実行セット1:操作内容ファイルF01+入力データファイルF12
実行セット2:操作内容ファイルF02+入力データファイルF16
としてケースファイルに登録される。ケース設定画面240については、図18に関連して後述する。
【0062】
次に、プログラム生成部132は、ケースファイルおよび操作内容ファイルに基づいて動作テスト用プログラムを生成する(S226)。具体的には、実行セットに設定された操作内容ファイルに順次記録された関数を、動作テスト用プログラムのプログラムコードに順次設定してもよい。また、プログラム生成部132は、1つのテストケースに複数の実行セットが設定されている場合、各実行セットの操作内容ファイルに記録された関数を1つの動作テスト用プログラムに集約して設定する。
【0063】
また、プログラム生成部132は、操作内容ファイルの関数に対して入力データそのものが設定されていた場合には、その入力データを動作テスト用プログラムに静的に設定する。例えば、動作テスト用プログラムの生成の際に、そのプログラムコードにおける関数の引数として入力データをあらかじめ設定する。また、操作内容ファイルの関数に対して入力データファイルが指定されていた場合には、その入力データファイルのデータをプログラム実行時に読み込むように設定する。
【0064】
最後に、プログラム実行部134は、動作テスト用プログラムを実行して、ウェブサーバ400に対してユーザにより実行された一連の操作を再現する(S228)。入力データファイルのデータを必要とする関数に対しては、動作テスト用プログラムの実行の際に読み込んだ入力データファイルのデータを引数として渡す。すなわち、入力データファイルから動的に取得した入力データに基づいて関数を実行する。
【0065】
図15は、関数設定画面210の画面図である。同図は、図18で後述する「検索記入.xls」を表示する関数設定画面210を示している。データファイルカラム名欄250は、パラメータに設定する入力データを記録した入力データファイルのカラム名が指定される領域である。ユーザは、入力値欄217に入力データそのものを記述してもよく、その代わりに、データファイルカラム名欄250に入力データファイルのカラム名を指定してもよい。データファイルカラム名欄250に入力データファイルのカラム名が指定された場合、動作テスト用プログラムの実行時に、その入力データファイルのカラムに設定された1以上の入力データが読み込まれて関数に渡される。
【0066】
図16は、参考技術2における関数設定画面210の画面図である。同図の「検索部署名」パラメータの入力値欄217においては、入力データの候補がドロップダウンリスト252で一覧表示されている。ドロップダウンリスト252において表示される入力データの候補は、ウェブページに対するユーザによるデータ入力の際に、そのウェブページのドロップダウンリストにおいて表示された入力データの候補である。ユーザはドロップダウンリスト252から入力データを選択することができ、入力データの設定におけるユーザの負担が軽減される。
【0067】
ドロップダウンリスト252を設定するために、操作検出部115は、ウェブページに対するユーザによるデータ入力操作の際に、そのウェブページのドロップダウンリストにおいて表示された入力データの候補を取得する。例えば、ウェブサーバ400から取得されたウェブページのデータ、例えばHTMLデータからドロップダウンリストにおける入力データの候補を取得する。操作記録部137は、その入力データの候補を操作内容ファイルの入力値欄217に記録する。関数設定画面表示部120は、入力値欄217が入力される際に、操作内容ファイルに記録された入力データの候補をドロップダウンリストの形式で一覧表示させる。
【0068】
図17は、参考技術2における入力設定画面230の画面図である。図17(a)は、図15および図16の関数設定画面210においてカラム名が指定された入力データファイル「検索記入データ.xls」を表示する入力設定画面230を示している。なお、図15および図16では、図17(a)の「氏名漢字」カラムと「氏名カナ」カラムとが指定されている。図17(b)は、別の入力データファイル「ログインデータ2.xls」を表示する入力設定画面230を示している。同図の入力データファイルについては、図18に関連して後述する。
【0069】
図18は、参考技術2におけるケース設定画面240の画面図である。実行番号欄253には各実行セットの基本的な実行順序、テストケースID欄254にはテストケースの識別情報が設定される。グループID欄256には実行セットの繰り返し処理のグループを示す識別情報、行番号欄258には動作テストにおける入力データファイルの参照範囲が設定される。操作内容ファイル欄260は各実行セットにおける操作内容ファイル、入力データファイル欄262は各実行セットの入力データファイルが設定される。ケース設定画面240における設定内容は、ケースファイル保持部148においてケースファイルとして記憶される。
【0070】
ケース設定画面240においてテスト実行ボタン264が押下されると、プログラム生成部132は、ケースファイルおよび操作内容ファイルにしたがって動作テスト用プログラムを生成する。具体的には、ケースファイルにおいて同一のテストケースIDが設定された1以上の操作内容ファイルに基づいて、各操作内容ファイルに記録された関数がプログラムコードに設定された1つの動作テスト用プログラムを生成する。例えば、プログラム生成部132は、図18のケース設定画面240の内容が記録されたケースファイルにしたがって、登録ケースを実行するための1つの動作テスト用プログラムと、検索ケースを実行するための1つの動作テスト用プログラムとを生成する。なお、「1つの動作テスト用プログラム」は、1つの実行単位として実行されるプログラム、言い換えれば1つの実行契機で実行されるプログラムを意味し、物理的なプログラム数は問わない。
【0071】
プログラム実行部134は、各操作内容ファイルに記録された1つの関数を実行する際、その操作内容ファイルと対応づけられた入力データファイルのデータのうち、操作内容ファイルにおいてその関数と対応づけられたカラムのデータをその関数に渡す。
【0072】
また、プログラム実行部134は、同一のテストケースにおいて同一のグループIDが付与された複数の実行セットを、同一の繰り返し処理を実行すべき同一のグループとして取り扱う。具体的には、同一のグループIDが付与された複数の実行セットそれぞれの実行を繰り返し、繰り返しのたびに、各実行セットの操作内容ファイルに記録された関数に対して、入力データファイルに記録された所定数のレコードを渡す。参考技術2では、繰り返しのたびに入力データファイルに記録された1レコードを関数に渡すこととする。なお、上述の処理を実行するための繰り返し命令がプログラムコードに設定された動作テスト用プログラムを、プログラム生成部132おいて生成してもよい。
【0073】
また、プログラム実行部134は、行番号が指定された実行セットについては、その操作内容ファイルに記録された関数に対して、入力データファイルにおいてその行番号で特定される入力データを渡す。したがって、グループIDによる繰り返し処理が指定され、さらに行番号が指定された場合には、行番号の指定数だけその繰り返しを実行することになる。例えば、図18の登録ケースでは、実行セットをまたがったグループの設定はなく、各実行セットでは入力データ1個分の処理が実行される。これに対し、図18の検索ケースでは、各実行セットにおける入力データ1個分の処理が3回繰り返される。
【0074】
具体的には、1回目の繰り返しでは、ログイン2.xlsに記録された関数に対してログインデータ2.xlsの35行目のデータ「t_yamada」が渡される。そして、検索記入.xlsに記録された関数、具体的には図15のNo1の関数に対しては検索記入データ.xlsの1行目・氏名漢字のデータ「山田太郎」が渡される。また、図15のNo2の関数に対しては検索記入データ.xlsの1行目・氏名カナのデータ「ヤマダタロウ」が渡される。
2回目の繰り返しでは、ログイン2.xlsに記録された関数に対してログインデータ2.xlsの36行目のデータ「h_yamada」が渡される。そして、検索記入.xlsに記録された図15のNo1の関数に対して検索記入データ.xlsの2行目・氏名漢字のデータ「山田花子」が渡される。また、図15のNo2の関数に対して検索記入データ.xlsの2行目・氏名カナのデータ「ヤマダハナコ」が渡される。
3回目の繰り返しにおいても同様に、インクリメントされた行番号における入力データが各関数に渡されることになる。
【0075】
参考技術2の動作検証装置100においても、参考技術1で既述した効果を奏する。具体的には、処理とパラメータの分離、および、GUIベースの設定が実現されるため、動作テスト用プログラムに含めるロジックの多様性を確保しつつも、安定した品質のプログラムを簡易に生成できる。また、入力データファイルの設定によって、動作テストのバリエーションを広げやすくなる。さらに、ケースファイルの設定によって、様々なシナリオにおける動作テストを実現できる。
【0076】
参考技術2の動作検証装置100においては、さらに、動作テスト用プログラムを実行する実行エンジン機能と、実行エンジンの効率的な利用を実現するラッパー機能とがシームレスに、ユーザによる仲介を要することなく連係する。これにより、動作テストを実行するためのユーザの負担を軽減できる。また、参考技術1の動作検証装置100の場合と異なり、ユーザは、QTPのプロジェクト等、プログラム実行のための環境を意識する必要がない。すなわち、ユーザにとって理解・操作が容易な形式の操作内容ファイルと入力データファイルとを設定すればよい。これにより、ユーザは動作テストを容易に実施できるようになる。
【0077】
参考技術2の動作検証装置100においては、さらにまた、同一テストケースの複数の実行セットが集約された1つの動作テスト用プログラムが生成され、その1つの動作テスト用プログラムが実行される。参考技術1の動作検証装置100における実行セット毎、すなわち実行セットに基づき生成されたQTPのプロジェクト毎の実行と比較して、1つのテストケースにおける一連の動作テストを実行する際のオーバーヘッドが低減され、迅速な動作テストを実現できる。
【0078】
参考技術2の動作検証装置100においては、さらにまた、複数の実行セットに亘る繰り返しのグループを設定できる。これにより、実行セットを柔軟に分割でき、また、動作テストのシナリオを柔軟に設定できる。さらにまた、入力データファイルの参照範囲を設定できる。これにより、入力データファイルが同一であっても、シナリオに応じて柔軟に参照範囲を変更でき、様々なバリエーションの動作テストを容易に実現できる。
【0079】
上述した参考技術2においては、関数設定画面210における値設定を支援する例としてドロップダウンリスト252を示した。変形例においては、ウェブページにおけるラジオボタン、チェックボックス、リストボックス等で選択可能に表示された入力データの候補が、ドロップダウンリスト252またはその他の形式で関数設定画面210において選択可能に表示されてもよい。すなわち、動作確認対象の機器に対するデータ入力操作の際にユーザに対して様々な形式で選択可能に表示された入力データの候補が、関数設定画面210における値設定の際に選択可能に表示されてもよい。
【0080】
上述した参考技術1においては、ウェブサーバ400に対するユーザの操作をQTPが受け付け、ログを生成したことを条件として、動作検証装置100が動作テスト用プログラムを作成している。また、上述した参考技術2においては、ウェブサーバ400に対するユーザの操作を動作検証装置100が検出して、動作テスト用プログラムを作成している。変形例として、動作検証装置100においてウェブサーバ400からHTMLファイルを取得した時点で、動作テスト用プログラムを生成してもよい。この場合、動作検証装置100は、HTMLファイルに含まれるフォームタグを検索し、HTMLファイルにどのような入力インタフェースが含まれているかを特定する。そして、各入力インタフェースにデータを入力するための関数を選択し、これらの関数をさまざまな順序で並べれば、ユーザによる明示的なウェブ操作がなくても、動作テスト用のプログラムを生成できる。
【0081】
(実施の形態)
まず本発明の概要について説明する。図19は、動作テストの対象のウェブページを示す。このウェブページは、保険会社のウェブサイトが提供するウェブページであり、契約済みの自動車保険の中から、継続対象の自動車保険契約をユーザに選択させるウェブページである。このウェブページには、本ウェブページのタイトル「abc0100」を示すページタイトル500と、ラジオボタン502で総称されるラジオボタン502aおよびラジオボタン502bが含まれる。またウェブブラウザでの表示対象を契約者メニュー一覧のウェブページへ遷移させるための第1遷移ボタン504と、ラジオボタン502を選択した上で次のウェブページへ遷移させるための第2遷移ボタン506とがさらに含まれる。以下、ウェブページに含まれるオブジェクトであり、構造化文書においてタグ付けされたラジオボタン・リンク・送信ボタン・テキストボックス等を「要素」と呼ぶ。
【0082】
図19のウェブページに対する典型的なテストケースとして3つのケースを挙げる。
1:証券番号「37001」のラジオボタン502aを選択し、第2遷移ボタン506をクリックする、
2:証券番号「38002」のラジオボタン502bを選択し、第2遷移ボタン506をクリックする。
3:第1遷移ボタン504をクリックする。
実際には、保険会社のウェブサイトへログインしたユーザごとに上記テストケースを試行する必要があり、また異常系として、ラジオボタン502を未選択のまま第2遷移ボタン506をクリックする場合等、その他様々なテストケースが想定される。
【0083】
図20は、図19のウェブページに対する操作が記録された操作内容ファイルを示し、図7や図15で示した関数設定画面の内容に対応する。図20の操作内容ファイルは、上記のテストケース1の操作が記録されたものであり、操作関数510は証券番号「37001」のラジオボタン502aを選択する操作に対応し、操作関数512は第2遷移ボタン506をクリックする操作に対応する。
【0084】
参考技術に記載した動作検証装置を使用してウェブページの自動テストを行う場合、テストの担当者(以下、「ユーザ」と呼ぶ。)は複数のテストケースのそれぞれに対応する操作内容ファイルを作成する必要がある。例えば上記の3つのテストケースの場合、ユーザが1つのテストケースについてウェブブラウザを操作して実行し、そこで作成された操作内容ファイルを編集して残り2つのテストケース用の操作内容ファイルを作成する必要があった。
【0085】
そのため、ユーザには、動作検証装置においてあらかじめ定められた関数(言い換えればAPI)であり、ウェブブラウザを操作してウェブページを編集する関数の理解が求められた。例えば、ラジオボタンを操作する関数の名称は「clickRadiobuttonByValue」であること、その引数として設定すべきオブジェクトは「dom=document.contentsform.要素名」であること、送信ボタンをクリックする関数の名称は「clickAnchor」であること、その引数として設定すべきオブジェクトは「dom=document.getElementByTagName('A')[要素位置]」であること等をユーザは理解しておく必要があった。本発明者は、この状況を鑑みて、動作検証装置によるウェブページの自動テストをいっそう効率化できる余地があると考えた。
【0086】
そこで実施の形態の動作検証装置(以下、特に断らない場合、単に「動作検証装置100」と呼ぶ。)は、ウェブページでの表示内容を定めた構造化文書に記述された要素のうち、ユーザによる操作の対象となる要素(以下、「操作対象要素」とも呼ぶ。)を抽出する。
【0087】
実施の形態の操作対象要素は、ユーザからデータを受け付けるための要素であり、言い換えれば、ユーザによるデータ入力の対象となる要素(以下、「入力要素」とも呼ぶ。)を含む。入力要素は、HTMLで規定された様々なフォームタグ、例えばラジオボタン・テキストボックス等を含む。また操作対象要素は、ウェブページの表示内容を変化させる処理の契機となる要素(以下、「表示変更要素」とも呼ぶ。)をさらに含む。表示変更要素は、ウェブブラウザでの表示対象をあるウェブページから別のウェブページへ遷移させる契機となる要素、例えばリンクタグ・送信ボタンタグ等を含む。また表示変更要素は、表示対象のウェブページを切り替える契機となる要素以外も含む。具体的には、ウェブブラウザでの表示内容を更新(リロード)させる契機となる要素、例えば汎用ボタンタグやクリアボタンタグを含む。またウェブページ内部の処理コード(例えばJAVAスクリプト(登録商標)で記述されたプログラムコード)を実行させる契機となる要素、例えば汎用ボタンタグを含む。
【0088】
なお実施の形態の構造化文書はHTML文書であることとする。しかし、他の種類の構造化文書、例えばXMLやJSP文書にも適用可能であることは当業者には理解されるところである。例えば、XML文書の場合、DTDやスタイルシートを参照してXML文書から操作対象要素を抽出してもよい。JSP文書の場合、JSP文書に記述されたHTMLタグにしたがって操作対象要素を抽出してもよい。
【0089】
動作検証装置100は、構造化文書から抽出した操作対象要素に対する操作をユーザに記述させるための文書(以下、「操作記述文書」とも呼ぶ。)を出力する。図21は、操作記述文書を示す。操作記述文書は、入力要素および表示変更要素に関する情報、例えば各要素の意味を示す情報を動作検証装置100が自動で設定する要素情報設定欄520と、入力要素および表示変更要素に対する操作をユーザが記述すべき操作情報設定欄530を含む。
【0090】
要素情報設定欄520において入力要素には、構造化文書における名称を示す第1入力要素情報欄522と、要素の意味を示す第2入力要素情報欄524とが対応づけて示される。また表示変更要素には、変更先の画面内容(例えば遷移先の画面を提供するファイル名)を示す第1表示変更要素情報欄526と、要素の意味を示す第2表示変更要素情報欄528とが対応づけて示される。
【0091】
図21の操作情報設定欄530では、上記の3つのテストケースが記述されている。例えば、同図のNo1のレコードは、ラジオボタン「radRenNum」の選択肢のうち「value=0」を選択して、「次へ」ボタンをクリックすることを示しており、上記のテストケース1に対応する。No2のレコードは、ラジオボタン「radRenNum」の選択肢のうち「value=1」を選択して、「次へ」ボタンをクリックすることを示しており、上記のテストケース2に対応する。
【0092】
動作検証装置100は、操作対象要素に対する操作がユーザにより記述された操作記述文書を読み込んで、操作記述文書の各レコード(例えば図21のNO1〜3)に対応する複数の操作内容ファイルを自動設定する。なお、No3のレコードが示すように表示変更要素のみの操作がテストケースとして設定される場合もある。また、JAVAスクリプトのコードを含む構造化文書であり、入力要素へのデータ入力に伴いウェブブラウザが自動的にスクリプトコードを実行して表示内容を変化させる構造化文書のテストでは入力要素のみの操作がテストケースとして設定される場合もある。
【0093】
実施の形態の動作検証装置100によれば、ユーザは、テスト対象の構造化文書の内容(例えば、操作対象要素の名称やvalue属性の値)を把握していれば操作記述文書に対して操作を記述することができる。言い換えれば、動作検証装置100は、動作検証装置100が定める関数の理解をユーザに強いることなく、効率的な構造化文書の自動テストの実現を支援する。また動作検証装置100は、構造化文書に記述された操作対象要素の名称や、その意味を示す情報を操作記述文書へ転記するため、操作記述文書に対する操作の記述を一層容易なものにすることができる。またユーザは操作対象要素への複数種類の操作内容を1つの操作記述文書に集約して記述すれば、各操作内容に対応した複数の操作内容ファイルが作成されるため、ユーザの負担を低減して効率的なテストを実現できる。
【0094】
以下、図22〜図24に亘り実施の形態の動作検証装置100の機能構成を詳述する。図22〜図24は図13のブロック図に対応する。なお、参考技術に記載した機能ブロックと同一もしくは対応する機能ブロックには同じ符号を付しており、参考技術に記載した説明と重複する説明は省略する。以降説明する各機能ブロックは、参考技術の動作検証装置にアドインされるプログラムモジュールとして実装されてもよい。
【0095】
図22は、動作検証装置100のIF部110の詳細を示すブロック図である。IF部110の入力部112は文書受付部540をさらに含み、出力部118は操作記述文書出力部542をさらに含む。
【0096】
文書受付部540は、構造化文書を指定した操作記述文書の作成要求をユーザが動作検証装置100へ入力した場合、その要求を受け付ける。そして、その要求で指定された構造化文書のデータを読み込む。例えば、操作記述文書の作成要求においてウェブサーバ400が提供するウェブページのURL、すなわち構造化文書のURLが指定された場合、文書受付部540はそのURLを指定してウェブサーバ400から構造化文書を取得し、メモリに格納してもよい。
【0097】
また文書受付部540は、操作記述文書を指定した操作内容ファイルの作成要求をユーザが動作検証装置100へ入力した場合、その要求を受け付ける。そして、その要求で指定された操作記述文書のデータを読み込む。例えば、操作内容ファイルの作成要求において動作検証装置100における操作記述文書のパス名が指定された場合、文書受付部540はそのパス名で特定される操作記述文書を取得し、メモリに格納してもよい。
【0098】
操作記述文書出力部542は、後述の操作記述文書設定部550により設定された操作記述文書のデータを所定の記憶領域へ格納する。例えば、操作記述文書の作成要求において当該文書の出力ディレクトリが指定された場合、操作記述文書出力部542はそのディレクトリに操作記述文書を保存してもよい。
【0099】
図23は、動作検証装置100のデータ保持部140の詳細を示すブロック図である。データ保持部140は、要素情報保持部544と対応関係保持部546をさらに含む。要素情報保持部544は、操作記述文書に設定された要素に関する属性情報を保持する記憶領域である。例えば、図21の入力要素「radRenNum」と対応づけてラジオボタンであることを示す情報や、要素名が「radRenNum」であることを示す情報を保持する。図21の表示変更要素「次へ」と対応づけて送信ボタンであることを示す情報や、構造化文書内でのアンカー位置が「7」であること示す情報を保持する。このアンカー位置は、例えば、文書内の先頭アンカーの位置を「0」として、以降のアンカーの記述の都度インクリメントした数値であってもよい。
【0100】
対応関係保持部546は、動作検証装置100において予め定められて関数保持部150に保持された関数であり、構造化文書の要素を操作するための関数と、操作記述文書に記述される操作対象要素への操作との対応関係を保持する記憶領域である。例えば、操作記述文書におけるラジオボタンへの操作を示す情報と対応づけて、関数「clickRadiobuttonByValue」と、その引数となるオブジェクトの雛形「dom=document.contentsform.要素名称」を保持する。また、操作記述文書における送信ボタンのクリック操作を示す情報と対応づけて、関数「clickAnchor」と、その引数となるオブジェクトの雛形「dom=document.getElementByTagName('A')[要素位置]」を保持する。対応関係保持部546に保持される対応関係は図27においても後述する。
【0101】
図24は、動作検証装置100のデータ処理部130の詳細を示すブロック図である。データ処理部130は、要素抽出部548と操作記述文書設定部550と操作情報変換部552をさらに含む。
【0102】
要素抽出部548は、操作記述文書の作成要求に応じて文書受付部540により構造化文書が読み込まれた場合、その構造化文書のデータから操作対象要素を抽出する。具体的には、構造化文書に記述された要素のうち、入力要素に関するデータおよび表示変更要素に対するデータを識別して、それらのデータをメモリへ格納する。
【0103】
図25は、構造化文書に記載された入力要素の例を示す。ラジオボタン560は、図19のラジオボタン502に対応する。要素抽出部548は、ラジオボタン560の記述を検出すると、「input type="radio"」を入力要素「ラジオボタン」として識別する。またname="radRenNum"を要素名称として識別する。また当該ラジオボタンを囲むラベル「証券番号」を要素意味として識別する。また要素抽出部548は、テキストボックス562の記述を検出すると、「input type="text"」を入力要素「テキストボックス」として識別する。またname="uid"を要素名称として識別する。また当該テキストボックスと対応づけられたラベル「ユーザID」を要素意味として識別する。
【0104】
また要素抽出部548は、チェックボックス564の記述を検出すると、「input type="checkbox"」を入力要素「チェックボックス」として識別する。またname="rank"を要素名称として識別する。また当該チェックボックスと対応づけられたラベル「グリーン免許」・「普通免許」・「ゴールド免許」のうち少なくとも1つを要素意味として識別する。また要素抽出部548は、プルダウンメニュー566の記述を検出すると、「select」を入力要素「プルダウンメニュー」として識別する。またname="age"を要素名称として識別する。また当該プルダウンメニューと対応づけられたラベル「年齢」を要素意味として識別する。
【0105】
図26は、構造化文書に記載された表示変更要素の例を示す。要素抽出部548は、リンク570の記述を検出すると、「a href」を表示変更要素として識別する。また「help.html」を変更先名称として識別する。また「alt="ヘルプ画面"」を変更先説明として識別する。なおアンカータグにより囲まれた文字列「ヘルプ画面へ」を変更先説明として識別してもよい。
【0106】
また図26の送信ボタン572は図19の第1遷移ボタン504に対応する。要素抽出部548は、送信ボタン572の記述を検出すると、「form〜input type="submit"」を表示変更要素として識別する。また「submit.cgi」を変更先名称として識別する。またvalue値の「契約者メニューへ」を変更先説明として識別する。また要素抽出部548は、汎用ボタン574の記述を検出すると、「button」を表示変更要素として識別する。また「location.reload()」を変更先名称として識別する。またボタンタグにより囲まれた文字列「ページを更新」を変更先説明として識別する。
【0107】
操作記述文書設定部550は、1つの構造化文書から要素抽出部548が抽出した操作対象要素の情報を同一の操作記述文書のデータとしてまとめて設定することにより操作記述文書を生成する。具体的には、入力要素の要素名称の文字列を第1入力要素情報欄522へ転記し、要素意味の文字列を第2入力要素情報欄524へ転記する。また表示変更要素の変更先名称の文字列を第1表示変更要素情報欄526へ転記し、変更先説明の文字列を第2表示変更要素情報欄528へ転記する。
【0108】
また操作記述文書設定部550は、操作対象要素の情報を操作記述文書へ設定する際、その操作対象要素の情報を要素情報保持部544へも格納する。例えば、操作記述文書における操作対象要素の記載位置(例えば何カラム目かを示す情報)と、その操作対象要素の種類(ラジオボタン・テキストボックス・送信ボタン等)を示す情報を対応づけて記録する。表示変更要素の場合にはそのアンカー位置を示す情報をさらに記録する。
【0109】
操作情報変換部552は、文書受付部540により読み込まれた操作記述文書に記述された操作対象要素への操作内容を、対応関係保持部546に保持された対応関係にしたがって動作検証装置100において予め定められた関数へ変換、言い換えればマッピングする。これにより、参考技術で説明した操作内容ファイルを作成する。また操作情報変換部552は、1つの操作記述文書に操作対象要素に対する複数種類の操作が記述されている場合、各操作に対応した複数の操作内容ファイルを作成する。例えば、図21で示した操作記述文書の3つのレコードに対応する3つの操作内容ファイル(そのうちの1つは図20の操作内容ファイル)のデータを設定する。
【0110】
操作情報変換部552は、操作記述文書の1レコード内に入力要素への操作と、表示変更要素への操作の両方が記述されている場合、入力要素への操作に対応する関数の呼び出し順序を、表示変更要素への操作に対応する関数の呼び出し順序より先になるよう設定する。具体的には、操作内容ファイルにおいて、入力要素への操作に対応する関数を、表示変更要素への操作に対応する関数より実行順序の上位に記録する。操作情報変換部552は、操作記述文書にもとづいて作成した操作内容ファイルを操作内容ファイル保持部143へ格納する。
【0111】
図27は、操作情報変換部552による変換例を模式的に示す。図27のNo1は、図25のラジオボタン560について37001(value=0)が選択された場合を示している。対応関係保持部546においてラジオボタンへの入力操作は関数「clickRadiobuttonByValue」とオブジェクトの雛形「dom=document.contentsform.要素名」と対応づけられている。操作情報変換部552は、操作記述文書に記述された操作対象要素の属性情報を要素情報保持部544から取得し、その操作対象要素がラジオボタンである場合、操作内容ファイルの関数欄に「clickRadiobuttonByValue」を設定する。また要素名「radRenNum」を設定した「dom=document.contentsform.radRenNum」をオブジェクト欄に設定する。そして、操作記述文書にユーザが記述した「value=0」をパラメータ値欄に設定する。なお、この設定内容は、図20の操作関数510に対応する。
【0112】
また図27のNo2は、図25のテキストボックス562に対して文字列「user123」が入力された場合を示している。対応関係保持部546においてテキストボックスへの入力操作は関数「typeText」とオブジェクトの雛形「dom=document.contentsform.elements['contentsform:要素名']」と対応づけられている。操作情報変換部552は、操作記述文書に記述された操作対象要素の属性情報を要素情報保持部544から取得し、その操作対象要素がテキストボックスである場合、操作内容ファイルの関数欄に「typeText」を設定する。また要素名「uid」を設定した「dom=document.contentsform.elements['contentsform:uid']」をオブジェクト欄に設定する。そして、操作記述文書にユーザが記述した「user123」をパラメータ値欄に設定する。
【0113】
また図27のNo3は、図25のチェックボックス564についてグリーン免許(value=green)が選択された場合を示している。対応関係保持部546においてチェックボックスへの入力操作は関数「clickCheckboxByValue」とオブジェクトの雛形「dom=document.contentsform.要素名」と対応づけられている。操作情報変換部552は、操作記述文書に記述された操作対象要素の属性情報を要素情報保持部544から取得し、その操作対象要素がチェックボックスである場合、操作内容ファイルの関数欄に「clickCheckboxByValue」を設定する。また要素名「rank」を設定した「dom=document.contentsform.rank」をオブジェクト欄に設定する。そして、操作記述文書にユーザが記述した「value=green」をパラメータ値欄に設定する。
【0114】
また図27のNo4は、図25のプルダウンメニュー566について20代(value=20)が選択された場合を示している。対応関係保持部546においてプルダウンメニューへの入力操作は関数「select」とオブジェクトの雛形「dom=document.contentsform.elements['contentsform:要素名']」と対応づけられている。操作情報変換部552は、操作記述文書に記述された操作対象要素の属性情報を要素情報保持部544から取得し、その操作対象要素がプルダウンメニューである場合、操作内容ファイルの関数欄に「select」を設定する。また要素名「age」を設定した「dom=document.contentsform.elements['contentsform:age']」をオブジェクト欄に設定する。そして、操作記述文書にユーザが記述した「value=20」をパラメータ値欄に設定する。
【0115】
また図27のNo5は、図26のリンク570のクリック操作が指定された場合を示している。対応関係保持部546においてハイパーリンクのクリック操作は関数「clickAnchor」とオブジェクトの雛形「dom=document.getElementByTagName('A')[要素位置]」と対応づけられている。操作情報変換部552は、操作記述文書に記述された操作対象要素の属性情報を要素情報保持部544から取得し、その操作対象要素がリンクである場合、操作内容ファイルの関数欄に「clickAnchor」を設定する。また要素情報保持部544に保持されたアンカー位置(ここでは「7」とする)を設定した「dom=document.getElementByTagName('A')[7]」をオブジェクト欄に設定する。
【0116】
また図27のNo6は、図26の送信ボタン572のクリック操作が指定された場合を示している。対応関係保持部546において送信ボタンのクリック操作は関数「clickAnchor」とオブジェクトの雛形「dom=document.getElementByTagName('A')[要素位置]」と対応づけられている。操作情報変換部552は、操作記述文書に記述された操作対象要素の属性情報を要素情報保持部544から取得し、その操作対象要素が送信ボタンである場合、操作内容ファイルの関数欄に「clickAnchor」を設定する。また要素情報保持部544に保持されたアンカー位置(ここでは「5」とする)を設定した「dom=document.getElementByTagName('A')[5]」をオブジェクト欄に設定する。なお、図26の汎用ボタン574のクリック操作が指定された場合もオブジェクト欄に設定するアンカー位置が異なる以外は同様の設定内容になる。
【0117】
以上の構成による動作を以下説明する。
図28は、動作検証装置100の動作を示すフローチャートである。文書受付部540はテスト対象の構造化文書を指定した操作記述文書の作成要求をユーザから受け付けると(S300のY)、その構造化文書を読み込む(S302)。要素抽出部548は、読み込まれた構造化文書に記述された操作対象要素に関する情報を抽出する(S304)。操作記述文書設定部550は操作対象要素に関する情報を設定した文書であり、ユーザに操作対象要素への操作内容を記述させるための操作記述文書のデータを設定し、操作記述文書出力部542は操作記述文書をユーザが指定したディレクトリへ出力する(S306)。操作記述文書の作成要求を受け付けなければ(S300のN)、S302からS306をスキップする。
【0118】
文書受付部540は操作記述文書を指定した操作内容ファイルの作成要求をユーザから受け付けると(S308のY)、その操作記述文書を読み込む(S310)。操作情報変換部552は、動作検証装置100において予め定められた関数であり、操作記述文書に記述された操作対象要素への操作に対応する関数を呼び出すことを定めた操作内容ファイルを作成して操作内容ファイル保持部143へ格納する(S312)。操作情報変換部552は、操作記述文書にユーザが記述した操作内容を示すレコード(行)ごとにS312の処理を実行し、各レコードに対応した操作内容ファイルを作成する。操作内容ファイルの作成要求が受け付けられなければ(S308のN)、S310およびS312をスキップする。
【0119】
テスト対象の構造化文書に対するテストの実行要求が受け付けられると(S314のY)、プログラム生成部132は、操作内容ファイル保持部143に保持された操作内容ファイルに記述された関数について、オブジェクト欄およびパラメータ値欄の値を引数として各関数を呼び出すステップを組み合わせたテスト・プログラムを生成する(S316)。プログラム実行部134は、テスト・プログラムに記述された関数を順次呼び出すことにより構造化文書を表示したウェブブラウザを介してウェブページに対する操作をユーザに代わり実行する(S318)。テストの実行要求が受け付けられなければ(S314のN)、S316およびS318をスキップする。
【0120】
以上、本発明を実施の形態をもとに説明した。この実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【0121】
上記実施の形態では言及していないが、操作情報変換部552は、操作記述文書に記述された操作に対応する関数を操作内容ファイルへ設定する都度、ウェブページの表示内容を証左物として記録するための関数を操作内容ファイルへ自動で付加してもよい。例えば、図21の操作記述文書のNO1のレコードにもとづいて図20の操作内容ファイルを設定する場合、操作関数510の前・操作関数510の次・操作関数512の次のそれぞれにスクリーンショット操作に対応する関数を付加してもよい。
【0122】
請求項に記載の各構成要件が果たすべき機能は、実施の形態および変形例において示された各構成要素の単体もしくはそれらの連携によって実現されることも当業者には理解されるところである。例えば、請求項に記載のプログラム生成部は、操作情報変換部552とプログラム生成部132との連携により実現されてもよい。また、操作内容ファイルの内容は実質的にテスト実行コードであると言えるため、請求項に記載のプログラム生成部は、操作情報変換部552により実現されると言えることも当業者には理解されるところである。
【符号の説明】
【0123】
100 動作検証装置、 132 プログラム生成部、 540 文書受付部、 542 操作記述文書出力部、 544 要素情報保持部、 546 対応関係保持部、 548 要素抽出部、 550 操作記述文書設定部、 552 操作情報変換部。
【特許請求の範囲】
【請求項1】
画面の表示内容を定めた構造化文書を取得する取得部と、
取得された構造化文書に記述された要素のうち、前記画面の表示内容を変化させる処理の契機となる要素を表示変更要素として抽出する抽出部と、
抽出された表示変更要素への操作をユーザに記述させるための文書を操作記述文書として出力する出力部と、
前記画面の表示内容を確認するためのテスト・プログラムを実行させる検証装置において予め定められた前記要素を操作するための関数と、前記操作記述文書に記述される前記表示変更要素への操作との対応関係を保持する対応関係保持部と、
前記対応関係にしたがって、前記操作記述文書に記述された前記表示変更要素への操作に対応した前記検証装置が定める関数を呼び出すプログラムコードを設定することにより前記テスト・プログラムを生成するプログラム生成部と、
を備えることを特徴とする情報処理装置。
【請求項2】
前記出力部は、前記構造化文書において前記表示変更要素と対応づけられ、前記表示変更要素の意味を示すための文字列を前記操作記述文書へ転記することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記プログラム生成部は、前記表示変更要素に対する複数種類の操作が前記操作記述文書に記述された場合、前記複数種類の操作に対応した複数のテスト・プログラムを生成することを特徴とする請求項1または2に記載の情報処理装置。
【請求項4】
前記抽出部は、前記構造化文書に記述された要素のうち、ユーザからデータ入力を受け付ける要素を入力要素としてさらに抽出し、
前記出力部は、前記操作記述文書として、前記表示変更要素への操作に加えて前記入力要素への操作をユーザに記述させるための文書を出力し、
前記対応関係保持部は、前記検証装置において予め定められた前記要素を操作するための関数と、前記操作記述文書に記述される前記入力要素への操作との対応関係をさらに保持し、
前記プログラム生成部は、前記操作記述文書に記述された前記表示変更要素への操作に対応した前記検証装置が定める関数を呼び出すプログラムコードと、前記操作記述文書に記述された前記入力要素への操作に対応した前記検証装置が定める関数を呼び出すプログラムコードとを組み合わせて前記テスト・プログラムを生成することを特徴とする請求項1から3のいずれかに記載の情報処理装置。
【請求項5】
画面の表示内容を定めた構造化文書を取得する取得部と、
取得された構造化文書に記述された要素のうち、ユーザからデータ入力を受け付ける要素を入力要素として抽出する抽出部と、
抽出された入力要素への操作をユーザに記述させるための文書を操作記述文書として出力する出力部と、
前記画面の表示内容を確認するためのテスト・プログラムを実行させる検証装置において予め定められた前記要素を操作するための関数と、前記操作記述文書に記述される前記入力要素への操作との対応関係を保持する対応関係保持部と、
前記対応関係にしたがって、前記操作記述文書に記述された前記入力要素への操作に対応した前記検証装置が定める関数を呼び出すプログラムコードを設定することにより前記テスト・プログラムを生成するプログラム生成部と、
を備えることを特徴とする情報処理装置。
【請求項6】
画面の表示内容を定めた構造化文書を取得する機能と、
取得された構造化文書に記述された要素のうち、前記画面の表示内容を変化させる処理の契機となる要素を表示変更要素として抽出する機能と、
抽出された表示変更要素への操作をユーザに記述させるための文書を操作記述文書として出力する機能と、
前記画面の表示内容を確認するためのテスト・プログラムを実行させる検証装置において予め定められた前記要素を操作するための関数と、前記操作記述文書に記述される前記表示変更要素への操作との対応関係を保持する機能と、
前記対応関係にしたがって、前記操作記述文書に記述された前記表示変更要素への操作に対応した前記検証装置が定める関数を呼び出すプログラムコードを設定することにより前記テスト・プログラムを生成する機能と、
をコンピュータに実現させるためのコンピュータプログラム。
【請求項1】
画面の表示内容を定めた構造化文書を取得する取得部と、
取得された構造化文書に記述された要素のうち、前記画面の表示内容を変化させる処理の契機となる要素を表示変更要素として抽出する抽出部と、
抽出された表示変更要素への操作をユーザに記述させるための文書を操作記述文書として出力する出力部と、
前記画面の表示内容を確認するためのテスト・プログラムを実行させる検証装置において予め定められた前記要素を操作するための関数と、前記操作記述文書に記述される前記表示変更要素への操作との対応関係を保持する対応関係保持部と、
前記対応関係にしたがって、前記操作記述文書に記述された前記表示変更要素への操作に対応した前記検証装置が定める関数を呼び出すプログラムコードを設定することにより前記テスト・プログラムを生成するプログラム生成部と、
を備えることを特徴とする情報処理装置。
【請求項2】
前記出力部は、前記構造化文書において前記表示変更要素と対応づけられ、前記表示変更要素の意味を示すための文字列を前記操作記述文書へ転記することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記プログラム生成部は、前記表示変更要素に対する複数種類の操作が前記操作記述文書に記述された場合、前記複数種類の操作に対応した複数のテスト・プログラムを生成することを特徴とする請求項1または2に記載の情報処理装置。
【請求項4】
前記抽出部は、前記構造化文書に記述された要素のうち、ユーザからデータ入力を受け付ける要素を入力要素としてさらに抽出し、
前記出力部は、前記操作記述文書として、前記表示変更要素への操作に加えて前記入力要素への操作をユーザに記述させるための文書を出力し、
前記対応関係保持部は、前記検証装置において予め定められた前記要素を操作するための関数と、前記操作記述文書に記述される前記入力要素への操作との対応関係をさらに保持し、
前記プログラム生成部は、前記操作記述文書に記述された前記表示変更要素への操作に対応した前記検証装置が定める関数を呼び出すプログラムコードと、前記操作記述文書に記述された前記入力要素への操作に対応した前記検証装置が定める関数を呼び出すプログラムコードとを組み合わせて前記テスト・プログラムを生成することを特徴とする請求項1から3のいずれかに記載の情報処理装置。
【請求項5】
画面の表示内容を定めた構造化文書を取得する取得部と、
取得された構造化文書に記述された要素のうち、ユーザからデータ入力を受け付ける要素を入力要素として抽出する抽出部と、
抽出された入力要素への操作をユーザに記述させるための文書を操作記述文書として出力する出力部と、
前記画面の表示内容を確認するためのテスト・プログラムを実行させる検証装置において予め定められた前記要素を操作するための関数と、前記操作記述文書に記述される前記入力要素への操作との対応関係を保持する対応関係保持部と、
前記対応関係にしたがって、前記操作記述文書に記述された前記入力要素への操作に対応した前記検証装置が定める関数を呼び出すプログラムコードを設定することにより前記テスト・プログラムを生成するプログラム生成部と、
を備えることを特徴とする情報処理装置。
【請求項6】
画面の表示内容を定めた構造化文書を取得する機能と、
取得された構造化文書に記述された要素のうち、前記画面の表示内容を変化させる処理の契機となる要素を表示変更要素として抽出する機能と、
抽出された表示変更要素への操作をユーザに記述させるための文書を操作記述文書として出力する機能と、
前記画面の表示内容を確認するためのテスト・プログラムを実行させる検証装置において予め定められた前記要素を操作するための関数と、前記操作記述文書に記述される前記表示変更要素への操作との対応関係を保持する機能と、
前記対応関係にしたがって、前記操作記述文書に記述された前記表示変更要素への操作に対応した前記検証装置が定める関数を呼び出すプログラムコードを設定することにより前記テスト・プログラムを生成する機能と、
をコンピュータに実現させるためのコンピュータプログラム。
【図1(a)】
【図1(b)】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図1(b)】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【公開番号】特開2013−37580(P2013−37580A)
【公開日】平成25年2月21日(2013.2.21)
【国際特許分類】
【出願番号】特願2011−174092(P2011−174092)
【出願日】平成23年8月9日(2011.8.9)
【出願人】(000155469)株式会社野村総合研究所 (1,067)
【Fターム(参考)】
【公開日】平成25年2月21日(2013.2.21)
【国際特許分類】
【出願日】平成23年8月9日(2011.8.9)
【出願人】(000155469)株式会社野村総合研究所 (1,067)
【Fターム(参考)】
[ Back to top ]