(57)【要約】      （修正有）【課題】画面の操作を伴うテストに利用されるテストスクリプトの修正の精度を向上させる装置を提供する。【解決手段】旧アプリケーション画面（旧画面）の画面要素に対する操作命令の実行順が定義され、操作命令ごとに操作対象の画面要素の識別情報を含む、テストスクリプトを取得Ｓ１０２し、テストスクリプトの操作命令ごとに、操作対象の画面要素について、画面要素間の類似度の算出に利用される複数の指標の値を旧画面に関して取得Ｓ１０３して各値を記憶部に記憶し、テストスクリプトの操作命令のうち新アプリケーション画面（新画面）で使用されていない識別情報が操作対象の画面要素として示されている第１の操作命令について、記憶部に記憶された各値と、新画面に関して取得される各画面要素の各指標の値とに基づいて、新画面における操作対象の画面要素を特定し、第１の操作命令に対する識別情報を、特定された画面要素の識別情報に修正するＳ１０５。【選択図】図４
2018092362.tif 000002
【特許請求の範囲】
【請求項１】
第１の画面の画面要素に対する操作命令の実行順が定義されたテストスクリプトであって、前記操作命令ごとに、操作対象の画面要素の識別情報を含むテストスクリプトを取得するテストスクリプト取得部と、
前記テストスクリプトに含まれる操作命令ごとに、操作対象の画面要素について、画面要素間の類似度の算出に利用される複数の指標の値を前記第１の画面に関して取得して、取得した各値を記憶部に記憶する指標値取得部と、
前記テストスクリプトに含まれる操作命令のうち、第２の画面に関して使用されていない識別情報が操作対象の画面要素として示されている第１の操作命令について、前記記憶部に記憶された各値と、前記第２の画面に関して取得される各画面要素の各指標の値とに基づいて、前記第２の画面における操作対象の画面要素を特定する特定部と、
前記第１の操作命令に対する識別情報を、前記特定部によって特定された画面要素の識別情報に修正する第１の修正部と、
を有することを特徴とするテストスクリプト修正装置。
【請求項２】
前記特定部は、前記記憶部に記憶された各値と、前記第２の画面に関して取得される各画面要素の各指標の値とに基づいて、前記第１の画面の各画面要素と、前記第２の画面の各画面要素との類似度を算出し、算出された類似度に基づいて、前記第２の画面における操作対象の画面要素を特定する、
を有することを特徴とする請求項１記載のテストスクリプト修正装置。
【請求項３】
前記特定部は、前記指標ごとに、前記第１の画面に関する値と前記第２の画面に関する値との類似度を算出し、前記指標ごとの類似度について、前記指標ごとの重みに基づく加重平均を計算することで、前記第１の画面の各画面要素と前記第２の画面の各画面要素との類似度を算出する、
ことを特徴とする請求項２記載のテストスクリプト修正装置。
【請求項４】
複数の画面に関して、画像データが一致する画面要素間において値が異なる第１の回数を前記指標ごとにカウントし、当該画面要素間において、いずれかの前記指標の値が一致した第２の回数をカウントし、画像データが一致しない画面要素間において値が一致する第３の回数を前記指標ごとにカウントし、前記第１の回数を前記第２の回数で除した値と、前記第３の回数を、前記複数の画面における画面要素の総数で除した値とに基づいて、前記指標ごとの重みを計算する計算部、
を有することを特徴とする請求項３記載のテストスクリプト修正装置。
【請求項５】
前記テストスクリプトは、前記実行順のいずれかにおいてアサーションを含み、
前記アサーションの実行時において、前記第２の画面が前記アサーションによって期待される状態でない場合に、前記アサーションより前において前記第１の修正部によって修正されたいずれかの識別情報を修正する第２の修正部を有し、
前記第２の修正部によって修正が行われた場合に、前記テストスクリプトの最初の操作命令から実行しなおす、
ことを特徴とする請求項１乃至４いずれか一項記載のテストスクリプト修正装置。
【請求項６】
第１の画面の画面要素に対する操作命令の実行順が定義されたテストスクリプトであって、前記操作命令ごとに、操作対象の画面要素の識別情報を含むテストスクリプトを取得するテストスクリプト取得手順と、
前記テストスクリプトに含まれる操作命令ごとに、操作対象の画面要素の範囲の画像データを前記第１の画面から取得し、取得した画像データを記憶部に記憶する画像取得手順と、
前記テストスクリプトに含まれる操作命令のうち、第２の画面に関して使用されていない識別情報が操作対象の画面要素として示されている第１の操作命令について、前記記憶部に記憶されている各画像データと、前記第２の画面から取得される各画面要素の画像データとの比較に基づいて、前記第２の画面における操作対象の画面要素を特定する第１の特定手順と、
前記第１の操作命令に対する識別情報を、前記第１の特定手順によって特定された画面要素の識別情報に修正する第１の修正手順と、
をコンピュータに実行させることを特徴とするテストスクリプト修正プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テストスクリプト修正装置及びテストスクリプト修正プログラムに関する。
【背景技術】
【０００２】
画面の操作を伴うテストを自動化するための手法として、Capture & ReplayやProgrammable Testingといった手法が用いられている。これらのツールは回帰テストを効率化するために用いられる。回帰テストは、アプリケーションに修正を施した際に、既存機能に悪影響が出ていないかを確認するためのテストである。回帰テストの実行を自動化することで、手動でテストを実行した場合と比較して、テスト工数の削減を期待できる。
【０００３】
しかし、画面を出力するアプリケーション（例えば、Ｗｅｂアプリケーション等）に修正を施した際に、それに合わせてテストスクリプトにも修正が必要になる場合がある。テストスクリプトとは、画面の操作命令が記述されたデータである。すなわち、テストスクリプトに記述された操作命令が自動実行されることで、画面の操作を伴うテストが自動化される。テストスクリプトの修正作業に工数を要すると、期待した工数削減効果が得られない可能性が有る。
【０００４】
テストスクリプトの修正の７０％以上がロケータの修正であるといわれている（非特許文献３）。ロケータは、操作対象の画面要素（ボタン、フォームなどの画面中の一要素）を一意に特定するための識別子である。例えば、ｉｄ、ｎａｍｅ、ＸＰａｔｈ等がロケータとして用いられうる。アプリケーションの修正により、画面要素のｉｄ、ｎａｍｅ、ＸＰａｔｈ等が変更された場合、テストスクリプト中の該当ロケータを修正する必要がある。
【０００５】
ロケータの修正の手間を削減するための方法として、予め、ロバスト性の高いロケータを使用するようにアプリケーションを実装することで、アプリケーションのリビジョン間において、ロケータの不整合が発生しにくくすることが考えられる。ロバスト性の高いロケータとは、例えば、相対的な情報によって画面要素を識別するロケータである。第１の手法を採用しているツールとして、ＵＦＴ、Ｒａｎｏｒｅｘなどが存在している。また、第１の手法を提案している論文は複数存在する（例えば、非特許文献１等）。
【０００６】
但し、不整合が発生しにくいロケータというのは、アプリケーションの種類や場合によって異なるため、柔軟性が低い。また、人がロケータを設定する場合、何をロケータとするのかをあらかじめ検討する必要がある。更に、アプリケーションの想定外の修正でロケータに不整合が発生すると、結局、テストスクリプトに修正が必要となる。
【０００７】
そこで、ロケータの不整合が発生した際に、ロケータを正しい値に自動的に修正することが考えられる（例えば、非特許文献１、非特許文献２等）。ロケータの不整合とは、新リビジョンのアプリケーションの画面において、旧リビジョンのアプリケーションに対応したテストスクリプト内で指定されているロケータに対応する画面要素が無い状態をいう。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】Maurizio Leotta, Andrea Stocco, Filippo Ricca, Paolo Tonella、Using Multi-Locators to Increase the Robustness of Web Test Cases、International Conference on Software Testing, Verification and Validation(ICST) 2015
【非特許文献２】Shauvik Roy Choudhary, Dan Zhao, Husayn Versee, Alessandro Orso、Water: Web Application TEst Repair、Proceedings of the First International Workshop on End-to-End Test Script Engineering(ESTE) 2011
【非特許文献３】Why do Record/Replay Tests of Web Applications Break?, Mouna Hammoudi, Gregg Rothermel,Paolo Tonella, Software Testing, Verification and Validation (ICST) 2016
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、従来技術では、ロケータの修正の精度が低いという課題が有る。
【００１０】
非特許文献１では、ＸＰａｔｈに似た５つの指標（FirePath Abs,FirePath Rel,Selenium IDE(rel xpath),Montoto,ROBULA+）を用いてロケータを修正している。複数の指標を用いることで、多面的にマッチングを判定することができ、柔軟性が増す。
【００１１】
しかし、これらの指標は、全てＤＯＭ（Document Object Model ）ツリーの構造情報に基づいているところ、構造情報を用いた修正の短所として、構造の変化に弱いということが挙げられる。
【００１２】
例えば、画面レイアウトの大きな変更や、２つの画面要素の位置の入れ替え等といった修正が有った場合、画面要素間のマッチングができず、ロケータの修正に失敗する。これら５つの指標は似通った指標であるため、全て同様の短所を持つと考えられる。また、各指標は一致又は不一致で評価されており、一致していないが似ているといった評価を行うことができないため、柔軟性が低い。
【００１３】
非特許文献２では、属性、位置、Ｘｐａｔｈ等の１０種類の指標を用いてロケータを修正しているが、指標の重み付けが偏っているため、実質的にＸＰａｔｈのみを用いているに等しい。ＸＰａｔｈについては、一致又は不一致ではなく、レーベンシュタイン距離を用いて評価しており、位置の近さを考慮することができる。
【００１４】
しかし、実質的に１種類の指標（ＸＰａｔｈ）に依存しているため、多面的な評価を行うことができないという欠点がある。また、ＸＰａｔｈのみに依存するため、構造情報を用いた修正の欠点がより強く現れ、レイアウト修正を伴う多くの修正に対応することが困難である。
【００１５】
本発明は、上記の点に鑑みてなされたものであって、画面の操作を伴うテストに利用されるテストスクリプトの修正の精度を向上させることを目的とする。
【課題を解決するための手段】
【００１６】
そこで上記課題を解決するため、テストスクリプト修正装置は、第１の画面の画面要素に対する操作命令の実行順が定義されたテストスクリプトであって、前記操作命令ごとに、操作対象の画面要素の識別情報を含むテストスクリプトを取得するテストスクリプト取得部と、前記テストスクリプトに含まれる操作命令ごとに、操作対象の画面要素について、画面要素間の類似度の算出に利用される複数の指標の値を前記第１の画面に関して取得して、取得した各値を記憶部に記憶する指標値取得部と、前記テストスクリプトに含まれる操作命令のうち、第２の画面に関して使用されていない識別情報が操作対象の画面要素として示されている第１の操作命令について、前記記憶部に記憶された各値と、前記第２の画面に関して取得される各画面要素の各指標の値とに基づいて、前記第２の画面における操作対象の画面要素を特定する特定部と、前記第１の操作命令に対する識別情報を、前記特定部によって特定された画面要素の識別情報に修正する第１の修正部と、を有する。
【発明の効果】
【００１７】
画面の操作を伴うテストに利用されるテストスクリプトの修正の精度を向上させることができる。
【図面の簡単な説明】
【００１８】
【図１】本発明の実施の形態におけるシステム構成例を説明するための図である。
【図２】本発明の実施の形態におけるテスト実行装置１０のハードウェア構成例を示す図である。
【図３】本発明の実施の形態におけるテスト実行装置１０の機能構成例を示す図である。
【図４】テスト実行装置１０が実行する処理手順の一例を説明するためのフローチャートである。
【図５】旧画面の画面要素情報の取得処理の処理手順の一例を説明するためのフローチャートである。
【図６】テストスクリプトの一例を説明するための図である。
【図７】画面要素情報記憶部１２２の構成例を示す図である。
【図８】新アプリケーションのテスト処理の処理手順の一例を説明するためのフローチャートである。
【図９】対応要素候補の探索処理の処理手順の一例を説明するためのフローチャートである。
【図１０】画像データに基づく探索処理の処理手順の一例を説明するためのフローチャートである。
【図１１】指標値に基づく探索処理の処理手順の一例を説明するためのフローチャートである。
【図１２】未確定のロケータの修正処理の処理手順の一例を説明するためのフローチャートである。
【図１３】重みの計算処理の処理手順の一例を説明するためのフローチャートである。
【発明を実施するための形態】
【００１９】
以下、図面に基づいて本発明の実施の形態を説明する。図１は、本発明の実施の形態におけるシステム構成例を説明するための図である。図１において、サーバ装置２０及びテスト実行装置１０は、例えば、ＬＡＮ（Local Area Network）又はインターネット等のネットワークを介して接続される。
【００２０】
サーバ装置２０は、画面を生成するアプリケーションを有するコンピュータである。サーバ装置２０には、当該アプリケーションの旧リビジョン及新リビジョンが実装されている。例えば、Ｗｅｂサーバが、サーバ装置２０として利用されてもよい。なお、リビジョン間において、画面の構成（すなわち、画面に含まれる画面要素の構成）は、必ずしも一致しない。また、画面に含まれる画面要素が定義されたデータ（例えば、ＨＴＭＬ（HyperText Markup Language）又はＸＭＬ（eXtensible Markup Language）等。以下、「画面定義データ」という）内において、リビジョンを跨いで同じ画面要素（対応する画面要素）に対して付与されているロケータの同一性は保証されていない。同じ画面要素（対応する画面要素）とは、例えば、機能及び用途が同一であり、人から見たら同じであることが認識される画面要素の組をいう。
【００２１】
なお、画面要素とは、画面（Ｗｅｂ画面等）を構成するボタン、入力フォーム、リンクといった要素をいう。一つの画面要素は、例えば、１つのＨＴＭＬタグ又はＸＭＬタグで定義され、入れ子構造をとりうる。ロケータとは、画面定義データ内において、各画面要素に対して識別子として付与されている情報をいう。
【００２２】
テスト実行装置１０は、サーバ装置２０のアプリケーションについて、回帰テストを実行するコンピュータである。回帰テストは、旧リビジョンのアプリケーション（以下、「旧アプリケーション」という。）によって生成される画面に対して作成されたテストスクリプトを、新リビジョンのアプリケーション（以下、「新アプリケーション」という。）によって生成される画面に対して適用することで効率的に実行される。テストスクリプトとは、画面に対する操作手順が定義されたデータであり、操作命令ごとに、操作対象の画面要素のロケータ及び操作内容を示す情報等を含むデータである。なお、ＰＣ（Personal Computer）、スマートフォン、又はタブレット端末等がテスト実行装置１０として利用されてもよい。
【００２３】
図２は、本発明の実施の形態におけるテスト実行装置１０のハードウェア構成例を示す図である。図２のテスト実行装置１０は、それぞれバスＢで相互に接続されているドライブ装置１００、補助記憶装置１０２、メモリ装置１０３、ＣＰＵ１０４、インタフェース装置１０５、表示装置１０６、及び入力装置１０７等を有する。
【００２４】
テスト実行装置１０での処理を実現するプログラムは、ＣＤ−ＲＯＭ等の記録媒体１０１によって提供される。プログラムを記憶した記録媒体１０１がドライブ装置１００にセットされると、プログラムが記録媒体１０１からドライブ装置１００を介して補助記憶装置１０２にインストールされる。但し、プログラムのインストールは必ずしも記録媒体１０１より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置１０２は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【００２５】
メモリ装置１０３は、プログラムの起動指示があった場合に、補助記憶装置１０２からプログラムを読み出して格納する。ＣＰＵ１０４は、メモリ装置１０３に格納されたプログラムに従ってテスト実行装置１０に係る機能を実現する。インタフェース装置１０５は、ネットワークに接続するためのインタフェースとして用いられる。表示装置１０６はプログラムによるＧＵＩ（Graphical User Interface）等を表示する。入力装置１０７はキーボード及びマウス等で構成され、様々な操作指示を入力させるために用いられる。
【００２６】
図３は、本発明の実施の形態におけるテスト実行装置１０の機能構成例を示す図である。図３において、テスト実行装置１０は、テストスクリプト取得部１１、テスト実行部１２、画面表示制御部１３、指標値取得部１４、画像取得部１５、対応要素候補探索部１６、テストスクリプト修正部１７、テストスクリプト出力部１８及び重み計算部１９等を有する。これら各部は、テスト実行装置１０にインストールされた１以上のプログラムが、ＣＰＵ１０４に実行させる処理により実現される。
【００２７】
テスト実行装置１０は、また、テストスクリプト記憶部１２１、画面要素情報記憶部１２２、画面履歴記憶部１２３及び重み記憶部１２４等を利用する。これら各記憶部は、例えば、補助記憶装置１０２、又はテスト実行装置１０にネットワークを介して接続可能な記憶装置等を用いて実現可能である。
【００２８】
テストスクリプト取得部１１は、旧アプリケーションに対応するテストスクリプトをテストスクリプト記憶部１２１から取得する。
【００２９】
画面表示制御部１３は、旧アプリケーションの画面（以下、「旧画面」という。）及び新アプリケーションの画面（以下、「新画面」という。）のそれぞれを表示する。例えば、Ｗｅｂブラウザに基づいて画面表示制御部１３が実現されてもよい。
【００３０】
テスト実行部１２は、テストスクリプト取得部１１によって取得されたテストスクリプトを使用して、旧画面及び新画面のそれぞれについてテストを実行する。
【００３１】
指標値取得部１４は、旧画面の各画面要素について、画面要素間の類似度を評価するための複数の指標の値（指標値）を取得する。取得された指標値群は、画面要素情報記憶部１２２に記憶される。
【００３２】
画像取得部１５は、旧画面の各画面要素について、当該画面要素の表示範囲の画像データを取得する。取得された画像データは、画面要素情報記憶部１２２に記憶される。
【００３３】
対応要素候補探索部１６は、新アプリケーション（新画面）に対するテストの実行中において、テストスクリプトにおいて操作対象の画面要素を示すために指定されているいずれかのロケータが新画面に関して使用されていない場合に、新画面の画面要素の中から、当該ロケータに対応する画面要素の候補を探索する。
【００３４】
テストスクリプト修正部１７は、対応要素候補探索部１６による探索結果に基づいて、テストスクリプトを、新アプリケーション（新画面）に対応した状態へ修正する。
【００３５】
テストスクリプト出力部１８は、修正されたテストスクリプトを出力する。
【００３６】
重み計算部１９は、対応要素候補探索部１６が、旧画面の各画面要素と新画面の各画面要素との類似度を算出する際に利用する、各指標に対する重みを画面履歴記憶部１２３に記憶されている情報に基づいて統計的に計算する。計算結果（各指標の重み）は、重み記憶部１２４に記憶される。
【００３７】
画面履歴記憶部１２３には、アプリケーションの各リビジョンの画面の画面要素ごとに、画像データ及び指標値群が記憶されている。
【００３８】
なお、テスト実行装置１０が、サーバ装置２０の機能を有していてもよい。この場合、サーバ装置２０は配置されなくてもよい。
【００３９】
以下、テスト実行装置１０が実行する処理手順について説明する。図４は、テスト実行装置１０が実行する処理手順の一例を説明するためのフローチャートである。
【００４０】
ステップＳ１０１において、画面表示制御部１３は、サーバ装置２０の旧アプリケーションの画面（旧画面）を表示装置１０６に表示する。具体的には、画面表示制御部１３は、サーバ装置２０の旧アプリケーションにアクセスして、画面定義データをダウンロードし、当該画面定義データに基づいて、旧画面を表示する。
【００４１】
続いて、テストスクリプト取得部１１は、旧アプリケーションに対応するテストスクリプトを、テストスクリプト記憶部１２１から取得し、メモリ装置１０３に記憶する（Ｓ１０２）。以下において、「テストスクリプト」は、メモリ装置１０３に記憶されたテストスクリプトをいう。
【００４２】
続いて、テスト実行装置１０は、旧画面の画面要素情報の取得処理を実行する（Ｓ１０３）。ステップＳ１０３では、旧画面の各画面要素について、他の画面要素との類似度を評価するための複数の指標のそれぞれの値（指標値）や、当該画面要素の表示範囲の画像データ等が取得される。取得された指標値群及び画像データは、画面要素情報記憶部１２２に記憶される。
【００４３】
続いて、テスト実行装置１０は、新アプリケーションのテスト処理を実行する（Ｓ１０４）。当該テスト処理では、旧画面に対応するテストスクリプトが新画面に適用されて、新アプリケーションについて回帰テストが実行される。回帰テストの過程において、テストスクリプト内の操作命令の操作対象とされているロケータに対応する画面要素が新画面に存在しない場合、当該ロケータに対応する画面要素の探索が行われる。当該画面要素の探索には、画面要素情報記憶部１２２に記憶された情報等が利用される。当該画面要素が特定された場合には、テストスクリプト内の当該ロケータが、当該画面要素のロケータによって置換（修正）される。
【００４４】
続いて、テストスクリプト出力部１８は、ステップＳ１０４において修正されたテストスクリプトを出力する（Ｓ１０５）。例えば、当該テストスクリプトが、新リビジョンに対応するテストスクリプトとして、テストスクリプト記憶部１２１に記憶される。
【００４５】
続いて、ステップＳ１０３の詳細について説明する。図５は、旧画面の画面要素情報の取得処理の処理手順の一例を説明するためのフローチャートである。
【００４６】
ステップＳ２０１において、テスト実行部１２は、テストスクリプト内に次の命令ｃが有るか否かを判定する。次の命令ｃとは、未実行の命令の中で実行順が先頭の命令をいう。
【００４７】
図６は、テストスクリプトの一例を説明するための図である。図６において、画面ｇ１は、表示される画面の一例である。画面定義データｈ１は、画面ｇ１の一部（画面要素ｅ１）についての画面定義データである。テーブルＴ１は、画面ｇ１に関するテストスクリプトを表形式で表現したものである。
【００４８】
テーブルＴ１において、各行が、１つの操作に対応する。すなわち、テストスクリプトは、操作ごとに、命令、ロケータ、及び値等を含む。命令は、操作の種別を示す情報である。図６では、「ｔｙｐｅ」、「ｃｌｉｃｋ」等が例示されている。「ｔｙｐｅ」は、操作対象の画面要素への値の入力を意味する。「ｃｌｉｃｋ」は、操作対象の画面要素のクリックを意味する。ロケータは、操作対象の画面要素のロケータである。値は、操作対象の画面要素に適用される値である。このように、テストスクリプトには、操作内容（命令及び値）と操作対象（ロケータ）とが操作ごとに含まれている。また、テストスクリプトは、各操作の順番も定義されている。例えば、テーブルＴ１では、上の行から先に実行される。
【００４９】
テストスクリプトに次の命令ｃが有る場合（Ｓ２０１でＹｅｓ）、テスト実行部１２は、旧画面において、命令ｃに対応する画面要素に対して命令ｃを実行する（Ｓ２０２）。
【００５０】
続いて、指標値取得部１４は、命令ｃによって操作された画面要素（以下、「対象要素」とい。）を特定する（Ｓ２０３）。対象要素は、例えば、命令ｃに対応するロケータによって特定されてもよい。続いて、指標値取得部１４は、対象要素に関する各指標値を、旧画面の画面定義データから取得する（Ｓ２０４）。ここでは、複数の指標の指標値が取得される。
【００５１】
指標は、例えば、画面要素の属性（ｉｄ、ｔｙｐｅ、ｃｌａｓｓ、ｎａｍｅ、タグ名等）、画面要素の位置情報（ＸＰａｔｈ、ｘ座標、ｙ座標、横幅、縦幅）、画面要素に関連するテキスト（リンクテキスト、付近のテキスト、ＵＲＬ等）である。なお、リンクテキストは、画面要素がリンクである場合の指標であり、当該リンクが付与された文字列を示す。付近のテキストとは、画面要素の表示範囲の周囲（例えば、上、下、左、右等の所定の画素数の範囲内）に表示されるテキストである。画面要素の表示範囲とは、例えば、当該画面要素の最小外接矩形でもよい。なお、２０種類程度の指標のそれぞれについて、指標値が取得されてもよい。
【００５２】
続いて、指標値取得部１４は、取得された指標値群を、対象要素に関連付けて画面要素情報記憶部１２２に記憶する（Ｓ２０５）。
【００５３】
続いて、画像取得部１５は、旧画面のスクリーンショット（画像データ）を取得する（Ｓ２０６）。続いて、画像取得部１５は、当該スクリーンショットから、対象要素の表示範囲の画像データを取得する（切り出す）（Ｓ２０７）。なお、対象要素の表示範囲は、例えば、旧画面の画面定義データに含まれている、対象要素の位置情報等に基づいて特定可能である。続いて、画像取得部１５は、取得した画像データを、対象要素に関連付けて画面要素情報記憶部１２２に記憶する（Ｓ２０８）。
【００５４】
ステップＳ２０２以降が、テストスクリプトの全ての命令について実行されると（Ｓ２０１でＮｏ）、図５の処理手順は終了する。その結果、画面要素情報記憶部１２２には、旧画面の画面要素のうち、テストスクリプトによって操作された各画面要素の指標値群及び画像データが記憶される。
【００５５】
図７は、画面要素情報記憶部１２２の構成例を示す図である。図７に示されるように、画面要素情報記憶部１２２には、テストスクリプトにおいて実行された命令の順番で、操作対象とされた画面要素ごとに、指標値群及び画像データが記憶される。
【００５６】
続いて、図４のステップＳ１０４の詳細について説明する。図８は、新アプリケーションのテスト処理の処理手順の一例を説明するためのフローチャートである。
【００５７】
ステップＳ３０１において、画面表示制御部１３は、サーバ装置２０の新アプリケーションの画面（新画面）を表示装置１０６に表示する。具体的には、画面表示制御部１３は、サーバ装置２０の新アプリケーションにアクセスして、画面定義データをダウンロードし、当該画面定義データに基づいて、新画面を表示する。
【００５８】
続いて、テストスクリプトの最初の命令から順に、ステップＳ３０２以降が実行される。当該テストスクリプトは、ステップＳ１０２においてメモリ装置１０３に記憶されたテストスクリプトである。すなわち、当該テストスクリプトは、旧アプリケーションに対応するテストスクリプトである。
【００５９】
ステップＳ３０２において、テスト実行部１２は、テストスクリプト内に次の命令ｃが有るか否かを判定する。テストスクリプトに次の命令ｃが有る場合（Ｓ３０２でＹｅｓ）、テスト実行部１２は、新画面において、命令ｃに対応する画面要素に対して命令ｃを実行する（Ｓ３０３）。
【００６０】
続いて、テスト実行部１２は、命令ｃがアサーションであるか否かを判定する（Ｓ３０４）。アサーションとは、アプリケーションの状態（画面の状態）が、期待通りであることを検証するための命令である。例えば、一まとまりの命令群ごとにアサーションがテストスクリプトに含まれている。例えば、図６のテーブルＴ１において、最後の行の命令は、アサーションである。命令がアサーションである場合、値は、期待値を意味する。但し、テストスクリプトはアサーションを含まなくてもよい。
【００６１】
命令ｃがアサーションでない場合（Ｓ３０４でＮｏ）、テスト実行部１２は、命令ｃのロケータを有する画面要素が新画面に含まれているか否かを判定する（Ｓ３０５）。当該判定は、新画面の画面定義データを参照することで可能である。命令ｃのロケータを有する画面要素が新画面に含まれている場合（Ｓ３０５でＮｏ）、ステップＳ３０２以降が繰り返される。
【００６２】
命令ｃのロケータを有する画面要素が新画面に含まれていない場合（Ｓ３０５でＹｅｓ）、対応要素候補探索部１６は、当該ロケータ（以下、「元ロケータ」という。）について、対応要素候補探索処理を実行する（Ｓ３０６）。対応要素候補探索処理では、新画面の画面要素の中で、命令ｃのロケータに対応する画面要素（以下、「対応要素」という。）の候補（以下、「対応要素候補」という。）が探索される。探索において、新画面の画面要素の中で対応要素候補である可能性が認められる画面要素については、旧画面において当該ロケータを有する画面要素（以下、「元要素」という。）との間で類似度が算出される。類似度の詳細については後述される。
【００６３】
なお、命令ｃのロケータを有する画面要素が新画面に含まれていない場合、ステップＳ３０３において、命令ｃの実行に失敗する。したがって、ステップＳ３０５は、命令ｃの実行に失敗した場合に実行されてもよい。
【００６４】
続いて、テストスクリプト修正部１７は、対応要素候補の有無を判定する（Ｓ３０７）。すなわち、対応要素候補探索処理において、１以上の対応要素候補が特定（発見）されたか否かが判定される。対応要素候補が無い場合（ＳＳ３０７でＮｏ）、図５の処理手順は終了する。
【００６５】
一方、１以上の対応要素候補が特定された場合（Ｓ３０８でＹｅｓ）、テストスクリプト修正部１７は、対応要素候補の中で類似度が最大である対応要素候補のロケータによって、テストスクリプト内の命令ｃのロケータを修正する（Ｓ３０９）。すなわち、テストスクリプト内の命令ｃのロケータが、当該対応要素候補のロケータによって置換される。続いて、テスト実行部１２は、命令ｃを実行する（Ｓ３０９）。ステップＳ３０９に続いてステップＳ３０２以降が繰り返される。このように、本実施の形態では、ロケータに対応する画面要素が見つからない命令が実行された場合、その時点でロケータの修正が行われて、テストが継続される。
【００６６】
一方、命令ｃがアサーションである場合（Ｓ３０４でＹｅｓ）、テストスクリプト修正部１７は、アサーションの実行結果が合格であるか否かを判定する（Ｓ３１０）。すなわち、ステップＳ３０３において実行された命令ｃ（アサーション）において、新アプリケーション（新画面）の状態が、期待通りであったか否かが判定される。当該判定は、アサーションの実行結果に基づいて可能である。
【００６７】
アサーションの実行結果が合格である場合（Ｓ３１０でＹｅｓ）、ステップＳ３０２以降が繰り返される。アサーションの実行結果が合格でない場合（Ｓ３１０でＮｏ）、テストスクリプト修正部１７は、未確定のロケータの修正処理を実行する（Ｓ３１１）。未確定のロケータとは、合格しなかったアサーションが、Ｎ番目のアサーションであるとすると、Ｎ−１番目のアサーションからＮ番目のアサーションの間に含まれている各命令のロケータをいう。但し、Ｎ＝１の場合、Ｎ番目のアサーションより前の全ての命令のロケータが、未確定のロケータとなる。
【００６８】
すなわち、アサーションに合格した場合、当該アサーションより前の命令のロケータは確定される。アサーションに合格したということは、新アプリケーション（新画面）の状態が、期待通りであることである。したがって、それまでに実行された各命令のいずれかのロケータについて、ステップＳ３０８において修正されていたとしても、その修正は正しかったことが確定されるからである。一方、アサーションに合格しなかった場合、ステップＳ３０８における修正が誤りであった可能性が有る。そこで、この場合、ステップＳ３１１が実行される。
【００６９】
ステップＳ３１１に続いて、ステップＳ３０１以降が改めて実行される。すなわち、アサーションに合格しなかった場合、未確定のロケータの修正処理が実行された上で、再度、新画面がダウンロードされてテストスクリプトが最初から実行される。アサーションに合格しなかった場合、新アプリケーションの内部状態が命令ｃまで実行された際に本来あるべき状態でない可能性が有り、そのままテストを継続したとしても、正しいテストを行えない可能性が有るからである。
【００７０】
ステップＳ３０２において、テストスクリプト内の全ての命令が実行されたと判定されると（Ｓ３０２でＮｏ）、図８の処理手順は終了する。
【００７１】
続いて、図８のステップＳ３０６の詳細について説明する。図９は、対応要素候補の探索処理の処理手順の一例を説明するためのフローチャートである。
【００７２】
ステップＳ４０１において、対応要素候補探索部１６は、元ロケータに対応する画面要素（以下、「画面要素ｘ」という。）の画面要素情報（指標値群及び画像データ）を、画面要素情報記憶部１２２から取得する。続いて、対応要素候補探索部１６は、新画面の画面定義データから、新画面の全画面要素のそれぞれの指標値群及び画像データを取得する（Ｓ４０２）。なお、当該全画面要素の集合を、以下「画面要素集合Ｙ」という。また、新画面の画面要素の指標値群及び画像データ（当該画面要素の表示範囲の画像データ）の取得方法は、旧画面の画面要素についての取得方法と同様でよい。
【００７３】
続いて、対応要素候補探索部１６は、画像データに基づく探索処理を実行する（Ｓ４０３）。当該探索処理において対応要素候補であると判定された画面要素ｙ∈Ｙは、画面要素集合Ｙ'に追加される。なお、画像データに基づく探索処理の開始時において、画面要素集合Ｙ'は空である。
【００７４】
画像データに基づく探索処理の実行後、画面要素集合Ｙ'の要素数が複数である場合（Ｓ４０４でＹｅｓ）、対応要素候補探索部１６は、指標値に基づく探索処理を実行する（Ｓ４０５）。一方、画面要素集合Ｙ'の要素数が１以下である場合（Ｓ４０４でＮｏ）、対応要素候補探索部１６は、画面要素集合Ｙ'を、画面要素集合Ｙ"に代入する（Ｓ４０６）。なお、画面要素集合Ｙ"は、対応要素候補の集合である。すなわち、図８のステップＳ３０７及びＳ３０８では、画面要素集合Ｙ"が参照される。
【００７５】
続いて、図９のステップＳ４０３の詳細について説明する。２つの画面要素の画像（外観）が一致する場合、それらは高い確率で同じ役割を持つと考えられる。そこで、本実施の形態では、画面要素の画像データを用いて、対応要素候補の絞り込みを行うことで、精度向上と処理時間の短縮を図る。
【００７６】
図１０は、画像データに基づく探索処理の処理手順の一例を説明するためのフローチャートである。
【００７７】
まず、全ての画面要素ｙ∈Ｙについて、ステップＳ５０１〜Ｓ５０３が実行される。ステップＳ５０２において、対応要素候補探索部１６は、画面要素ｘの画像データと、画面要素ｙの画像データとを比較して、両者が一致する場合には、画面要素ｙを画面要素集合Ｙ'に追加する。なお、画像データの一致は、完全一致（全ての画素が一致する状態）に限定されなくてもよい。例えば、パターンマッチングの要領で、一方の画像データの画像を、他方の画像データの画像に対して所定画素ずつずらしながら、両者の一致又は不一致が判定されてもよい。すなわち、画像処理技術の分野において、２つの画像データが同一物を示すものであると判定可能である場合には、両者が一致すると判定されてもよい。
【００７８】
全ての画面要素ｙ∈ＹについてステップＳ５０１〜Ｓ５０３が実行されると、対応要素候補探索部１６は、画面要素集合Ｙ'に１以上の画面要素ｙが含まれているか否かを判定する（Ｓ５０４）。画面要素集合Ｙ'に１以上の画面要素が含まれている場合（Ｓ５０４でＹｅｓ）、図１０の処理手順は終了する。面要素集合Ｙ'が空である場合（Ｓ５０４でＮｏ）、対応要素候補探索部１６は、画面要素集合Ｙを、画面要素集合Ｙ'に追加する（Ｓ５０５）。
【００７９】
続いて、図９のステップＳ４０５の詳細について説明する。例えば、画面要素Ｘ（ｉｄ＝ｌｏｇｉｎ、ＸＰａｔｈ＝／／Ａ／Ｂ／Ｘ）が修正されて、画面要素Ｘ'（ｉｄ＝ｕｓｅｒ＿ｌｏｇｉｎ、ＸＰａｔｈ＝／／Ｃ／Ｄ／Ｘ）となった場合、非特許文献１及び非特許文献２に示された手法では対応すること（画面要素Ｘ'が、画面要素Ｘの対応要素候補であると判定すること）が困難である。
【００８０】
非特許文献１の手法では、相対的な構造（例：ｉｄ＝ｆｏｏを持つ画面要素の子でＸというタグを持つ画面要素）を表す指標も用いられる。しかし、この修正例の場合、修正前のＸの親がＡ、Ｂ、修正後のＸの親がＣ、Ｄと異なっているため、相対的な位置で指定していたとしても修正前後で当該指標は一致しない。
【００８１】
また、非特許文献２の手法では、ＸＰａｔｈのレーベンシュタイン距離を基に判定しており、／／Ａ／Ｂ／ＹといったＸＰａｔｈを持つ画面要素Ｙが他に存在する場合、画面要素ＸとＹの類似性の方が、画面要素Ｘと画面要素Ｘ'との類似性よりも高いと判定されてしまう。
【００８２】
上記の問題は、指標の一致又は不一致のみを評価していたり、１つの指標に依存していたりすることに起因する。
【００８３】
本実施の形態では、図１０において説明したように、画面要素の画像データに基づいて対応要素候補を判定したり、図１１について以下に説明されるように、複数の指標に対し、一致又は不一致ではなく、実数値として類似度を算出し、それを統合して１つの値としたりすることで精度向上を図る。
【００８４】
図１１は、指標値に基づく探索処理の処理手順の一例を説明するためのフローチャートである。図１１では、画面要素集合Ｙ'に含まれている全ての画面要素ｙについて、ステップＳ６０１〜Ｓ６１３が実行される。また、全ての指標ｉ∈Ｉについて、ステップＳ６０２〜Ｓ６０９が実行される。なお、Ｉは、本実施の形態における全ての指標の集合（ｉｄ、ｔｙｐｅ、ｃｌａｓｓ、ｎａｍｅ、タグ名、ＸＰａｔｈ、ｘ座標、ｙ座標、横幅、縦幅、リンクテキスト、付近のテキスト、ＵＲＬ等）である。
【００８５】
ステップＳ６０３において、対応要素候補探索部１６は、指標ｉの指標値が、選択的なものであるか否かを判定する。例えば、ｉｄの値は、任意に設定可能であるが、ｔｙｐｅの値は、予め決められた値（ｉｎｐｕｔ、ｂｕｔｔｏｎ等）の中から選択される。タグ名も同様である。ステップＳ６０３では、指標ｉがこのように予め決められた選択肢の中から指標値が選択されるものでるか否かが判定される。
【００８６】
指標ｉの指標値が選択的である場合（Ｓ６０３でＹｅｓ）、対応要素候補探索部１６は、画面要素ｘと画面要素ｙとについて、それぞれの指標ｉの指標値が一致しているか否かに基づいて、画面要素ｘと画面要素ｙとにおける指標ｉの類似度ｓｉを決定する（Ｓ６０４）。すなわち、それぞれの指標ｉの指標値が一致していれば、当該指標ｉの類似度ｓｉは１とされ、そうでなければ当該指標ｉの類似度ｓｉは０とされる。すなわち、選択的である指標ｉについての類似度ｓｉは、０又は１となる。なお、本実施の形態において、全ての指標に関して、類似度ｓは０以上１以下の値とされる。但し、他の尺度（例えば、０から１００等）によって類似度ｓが評価されてもよい。
【００８７】
指標ｉの指標値が選択的でない場合（Ｓ６０３でＮｏ）、対応要素候補探索部１６は、指標ｉの指標値が任意の文字列であるか否かを判定する（Ｓ６０５）。例えば、ｉｄ、ｃｌａｓｓ、ｎａｍｅ、ＸＰａｔｈ等は任意の文字列である。指標ｉの指標値が任意の文字列である場合（Ｓ６０５でＹｅｓ）、対応要素候補探索部１６は、画面要素ｘと画面要素ｙとについて、それぞれの指標ｉの指標値のレーベンシュタイン距離に基づいて、画面要素ｘと画面要素ｙとにおける指標ｉの類似度ｓｉを計算する（Ｓ６０６）。具体的には、
類似度ｓｉ＝１−レーベンシュタイン距離／長い方の文字列の長さ
に基づいて、画面要素ｘと画面要素ｙとにおける指標ｉの類似度ｓｉが算出される。なお、長い方の文字列の長さとは、画面要素ｘの指標ｉの指標値（文字列）と、画面要素ｙの指標ｉの指標値（文字列）とのうち長い方の文字列の文字数をいう。
【００８８】
指標ｉの指標値が任意の文字列でない場合（Ｓ６０５でＮｏ）、対応要素候補探索部１６は、指標ｉの指標値が数値であるか否かを判定する（Ｓ６０７）。例えば、ｘ座標、ｙ座標、横幅、縦幅等は、数値である。指標ｉの指標値が数値である場合（Ｓ６０７でＹｅｓ）、対応要素候補探索部１６は、画面要素ｘと画面要素ｙとについて、それぞれの指標ｉの指標値のユークリッド距離に基づいて、画面要素ｘと画面要素ｙとにおける指標ｉの類似度ｓｉを計算する（Ｓ６０８）。具体的には、
類似度ｓｉ＝１−｜２つの指標値の差／最大値｜
に基づいて、画面要素ｘと画面要素ｙとにおける指標ｉの類似度ｓｉが算出される。なお、２つの指標値の差とは、画面要素ｘの指標ｉの指標値と、画面要素ｙの指標ｉの指標値との差をいう。また、最大値とは、当該指標ｉに関して取りうる最大値をいう。例えば、指標ｉがｘ座標であれば、最大値は、画面の横幅である。
【００８９】
なお、各指標ｉの指標値が、選択的、任意の文字列及び数値のいずれに該当するのかは、対応要素候補探索部１６のアルゴリズムにおいて既知である。
【００９０】
全ての指標ｉ∈Ｉについて、ステップＳ６０２〜Ｓ６０９が実行されると、対応要素候補探索部１６は、各指標ｉに対する重みＷｉを、重み記憶部１２４から取得する（Ｓ６１０）。なお、重みＷｉは、例えば、後述されるように、重み計算部１９によって予め計算される。但し、各重みＷｉは、ユーザの任意によって設定されてもよい。
【００９１】
続いて、対応要素候補探索部１６は、画面要素ｘと画面要素ｙとの類似度Ｓｔｏｔａｌを以下の式に基づいて算出する（Ｓ６１１）。
【００９２】
Ｓｔｏｔａｌ＝Σ（ｓｉ×Ｗｉ）／ΣＷｉ
すなわち、指標ｉの指標値について重みをＷｉとする加重平均を計算することで、類似度Ｓｔｏｔａｌが算出される。
【００９３】
続いて、対応要素候補探索部１６は、類似度Ｓｔｏｔａｌが、予め設定された閾値αより大きければ、画面要素ｙを画面要素集合Ｙ"に追加する（Ｓ６１２）。
【００９４】
ステップＳ６０１〜Ｓ６１３が、全ての画面要素ｙ∈Ｙ'について実行されると、図１１の処理手順は終了する。
【００９５】
続いて、図８のステップＳ３１１の詳細について説明する。図１２は、未確定のロケータの修正処理の処理手順の一例を説明するためのフローチャートである。
【００９６】
ステップＳ７０１において、テストスクリプト修正部１７は、未確定のロケータに対応する命令群の中から、ステップＳ３０８において修正されたロケータを含む命令群Ｃを抽出する。未確定のロケータに対応する命令群とは、最後に実行されたアサーションがＮ番目のアサーションであれば、Ｎ−１番目のアサーションからＮ番目のアサーションの間に含まれている命令のロケータをいう。但し、Ｎ＝１の場合、Ｎ番目のアサーションより前の全ての命令のロケータが、未確定のロケータとなる。
【００９７】
続いて、テストスクリプト修正部１７は、命令群Ｃから、実行順が最後の命令ｃｌａｓｔを取得する（Ｓ７０２）。続いて、テストスクリプト修正部１７は、命令ｃｌａｓｔについて未試行の対応要素候補の有無を判定する（Ｓ７０３）。命令ｃｌａｓｔについて未試行の対応要素候補とは、命令ｃｌａｓｔの修正前のロケータを元ロケータとして、ステップＳ３０６において探索された対応要素候補のうち、ステップＳ３０８においてロケータの修正に利用されなかった対応要素候補をいう。
【００９８】
該当する対応要素候補が無い場合（Ｓ７０３でＮｏ）、テストスクリプト修正部１７は、命令群Ｃから、命令ｃｌａｓｔを削除して（Ｓ７０４）、ステップＳ７０２以降を繰り返す。なお、ステップＳ７０４では、テストスクリプトから命令ｃｌａｓｔが削除される。命令ｃｌａｓｔは、新アプリケーションに対して適切な命令でない可能性が高いからである。
【００９９】
一方、該当する対応要素候補が１以上有る場合（Ｓ７０３でＹｅｓ）、テストスクリプト修正部１７は、該当する対応要素候補のうち、元要素との類似度Ｓｔｏｔａｌが最大の対応要素候補のロケータによって、命令ｃｌａｓｔのロケータを置換する（Ｓ７０５）。
【０１００】
このように、本実施の形態では、新画面において使用されていないロケータを対象とする命令が実行された場合、当該ロケータに対する対応要素候補のうち、類似度Ｓｔｏｔａｌが高いものから順に試行され、テストに成功した（アサーションに合格した）対応要素候補が、正しい対応要素として特定される。
【０１０１】
続いて、重み計算部１９が実行する処理手順について説明する。当該処理手順は、上記した各処理手順とは非同期に実行されてよい。例えば、テスト対象のアプリケーションについて、新たなリビジョンが発生するたびに当該処理手順が実行されてもよい。
【０１０２】
例えば、各指標の重みをユーザの任意によって設定する場合、以下のような問題点が考えられる。
（ａ）アプリケーションによって重要な指標が異なる。
（ｂ）どの指標が重要か簡単には判別できない。
（ｃ）開発が進むにつれて、重要な指標が変化する。
【０１０３】
そこで、本実施の形態では、統計的手法を用いて、アプリケーション毎に適切な重み付けが行われる。
【０１０４】
本実施の形態において、画面要素の対応関係の判定（マッチング）は、各指標の一致の度合い（類似度ｓ）に基づいて行われる。したがって、重み付けの方法として、以下の２通りの考え方が採用される。
（１）アプリケーションの修正によって変化しやすい指標の重みを減らし、変化しにくい指標の重みを増やす。例えば、ｉｄは変わりにくいのでマッチングにおいて重視するが、ＸＰａｔｈは変わりやすいので重視しない。
（２）異なる画面要素間で同じ値を持つ確率が高い指標の重みを減らし、同じ値を持つ確率が低い指標の重みを増やす。例えば、ｉｄは画面要素間で同じ値を持たないので重みを増やすが、ｃｌａｓｓは複数の画面要素で値が重複する可能性が有るので重みを減らす。
【０１０５】
指標の重みを決定するために、同じ画面要素間における指標の変わりやすさと、異なる画面要素間における指標の一致しやすさを評価する必要がある。以下、同じ画面要素間における指標の変わりやすさを評価する指標を「変化率」という。また、異なる画面要素間における指標の一致しやすさを評価する指標を「一致率」という。なお、同じ画面要素間とは、リビジョン間で対応する画面要素（ユーザから見て同一の画面要素）の組をいう。異なる画面要素間とは、リビジョン間で対応しない画面要素（ユーザから見て異なる画面要素）の組をいう。
【０１０６】
上記の考えに基づいて、重み計算部１９は、図１３に示される処理手順によって各指標の重みを算出する。図１３は、重みの計算処理の処理手順の一例を説明するためのフローチャートである。
【０１０７】
ステップＳ８０１〜Ｓ８１３は、リビジョンｖ〜リビジョンｖ＋１までリビジョンごとに実行される。
【０１０８】
また、ステップＳ８０２〜Ｓ８１２は、リビジョンｋの画面要素集合Ａに含まれる各画面要素ａ∈Ａごとに実行される。なお、リビジョンｋの初期値は、ｖである。
【０１０９】
更に、ステップＳ８０３〜Ｓ８１０は、リビジョンｋ＋１の画面要素集合Ａ'に含まれる画面要素ａ'ごとに実行される。
【０１１０】
ステップＳ８０４において、重み計算部１９は、画面要素ａの画像データと画面要素ａ'の画像データとが一致するか否かを判定する。画像データの一致又は不一致の判定方法は、図１０のステップＳ５０２における方法と同様でよい。なお、各リビジョンの各画面の各画面要素の画像データは、画面履歴記憶部１２３に記憶されている。
【０１１１】
比較された画像データが一致する場合（Ｓ８０４でＹｅｓ）、重み計算部１９は、指標ごとに、画面要素ａの指標値と画面要素ａ'の指標値とを比較する（Ｓ８０５）。なお、各リビジョンの各画面の各画面要素の各指標の指標値は、画面履歴記憶部１２３に記憶されている。
【０１１２】
全ての指標について指標値が一致する場合（Ｓ８０５でＮｏ）、リビジョンｋ＋１の次の画面要素ａ'についてステップＳ８０４以降が実行される。一方、いずれか１以上の指標ｉについて指標値が異なる場合（Ｓ８０５でＹｅｓ）、重み計算部１９は、指標値が異なる各指標ｉに対応するカウンタｃ（ｉ）に１を加算する（Ｓ８０６）。なお、カウンタｃは、指標ごとカウンタの配列であり、同じ画面要素間で指標値が異なる回数を指標ごとにカウントするために利用される。図１３の処理手順の開始時において、カウンタｃの各要素の値は０である。
【０１１３】
続いて、重み計算部１９は、カウンタｄに１を加算する（Ｓ８０７）。カウンタｄは、同じ画面要素間で、いずれかの指標の指標値が異なる回数をカウントするために利用されるカウンタである。図１３の処理手順の開始時において、カウンタｄの値は０である。
【０１１４】
一方、ステップＳ８０４において比較された画像データが一致しない場合（Ｓ８０４でＮｏ）、重み計算部１９は、画面要素ａと画面要素ａ'との間で、指標値が一致する指標が１以上有るか否かを判定する（Ｓ８０８）。該当する指標ｉが無い場合（Ｓ８０８でＮｏ）、リビジョンｋ＋１の次の画面要素ａ'についてステップＳ８０４以降が実行される。該当する指標ｉが有る場合（Ｓ８０８でＹｅｓ）、重み計算部１９は、指標値が一致する指標ｉに対応するカウンタｅ（ｉ）に１を加算する。なお、カウンタｅは、指標ごとカウンタの配列であり、異なる画面要素間で指標値が一致する回数を指標値ごとにカウントするために利用される。図１３の処理手順の開始時において、カウンタｅの各要素の値は０である。
【０１１５】
リビジョンｋ＋１の全ての画面要素ａ'∈Ａ'について、ステップＳ８０３〜Ｓ８１０が実行されると、重み計算部１９は、カウンタｆに１を加算する（Ｓ８１１）。カウンタｆは、全リビジョンの画面要素の総数（画面要素の延べ数）をカウントするために利用されるカウンタである。例えば、リビジョンｖについて、ステップＳ８０２〜Ｓ８１２までの実行が完了した時点において、カウンタｆには、リビジョンｖの画面要素の総数が記憶される。なお、図１３の処理手順の開始時において、カウンタｆの値は０である。
【０１１６】
ステップＳ８０１〜Ｓ８１３が、リビジョンｖ〜リビジョンｖ＋ｎまで実行されると、重み計算部１９は、各指標の変化率を計算する（Ｓ８１４）。指標ｉの変化率（ｉ）は、以下の式に基づいて算出される。
変化率（ｉ）＝ｃ（ｉ）／ｄ
すなわち、変化率（ｉ）は、同じ画面要素間の各指標の比較において指標ｉが変化した回数（異なる回数）を、同じ画面要素間の各指標の比較においていずれかの指標が変化した回数（異なる回数）によって除することで算出される。
【０１１７】
続いて、重み計算部１９は、各指標の一致率を計算する（Ｓ８１５）。指標ｉの一致率（ｉ）は、以下の式に基づいて算出される。
一致率（ｉ）＝ｅ（ｉ）／ｆ
すなわち、一致率（ｉ）は、異なる画面要素間の各指標の比較において指標ｉが一致した回数を、画面要素の延べ数（総数）で除することで算出される。
【０１１８】
続いて、重み計算部１９は、各指標の重みを計算する（Ｓ８１６）。指標ｉの重みＷｉは、以下の式に基づいて算出される。
Ｗｉ＝変化率（ｉ）×（１−一致率（ｉ））×定数β
図１３の処理手順によれば、アプリケーション毎に異なる重み付けを自動で行うことができ、重み付けに最新の１０リビジョンを用いる等の工夫を行うことで、開発が進むにつれて重要な指標が変化する場合にも対応することが可能である。
【０１１９】
上述したように、本実施の形態によれば、複数の指標のそれぞれについて類似度が算出され、当該類似度に基づいて、画面要素間の類似度が算出される。すなわち、本実施の形態では、画面要素間について、単に、一致しているか否かではなく、一致している可能性（類似度）が判定される。そうすることで、旧リビジョンの或る画面要素について、新リビジョンの画面要素の中から対応する候補を複数得ることができる。その結果、対応する画面要素を正しく探し出せる可能性を高めることができ、テストスクリプト中のロケータの自動修正をより高精度で効率よく行うことができるようになる。すなわち、画面の操作を伴うテストに利用されるテストスクリプトの修正の精度を向上させることができる。
【０１２０】
従来、画面操作を伴うテストの自動化は、メンテナンスが大変であるため費用対効果の面で避けられることが多かったが、本実施の形態によれば、画面操作を伴うテストの自動化への障壁を取り去り、ソフトウェア開発を一層効率化することができる。
【０１２１】
なお、本実施の形態では、まず、画像データの比較に基づいて、画面要素間の対応関係が判定される例について説明したが、画像データに基づく探索処理（図１０）は、実行されなくてもよい。但し、画像データの比較に基づいて類似度の計算対象が絞り込まれる（フィルタリングされる）ため、画像データに基づく探索処理を実行することで、処理時間の短縮化を期待することができる。
【０１２２】
また、本実施の形態では、複数のロケータについて不整合が存在した場合でも、ロケータを修正しつつテストを継続することができるため、実行速度の向上を図ることができる。
【０１２３】
すなわち、仮に、ロケータを１つ修正するたびにテストを最初から実行する場合、１つのテストスクリプトに対し、ロケータの誤りの数＋１回のテストを実行する必要がある。画面操作を伴うテストは、ブラウザの立ち上げや画面のロード等が必要となるため、単体テストに比べてオーバーヘッドが大きく、ロケータを修正するたびにテストを最初から実行する場合、これらのオーバーヘッドにより、テスト工数が増加する。
【０１２４】
このようなテスト工数の増加を回避するため、動的プログラム書き換え等により、ロケータの誤りを無視し、様々な入力を試しながら無理やりテスト実行を続け、ロケータの修正を行うといった方法も考えられる。
【０１２５】
しかし、この場合、画面に対して何らかの操作を行った時点でプログラムの内部状態が本来あるべきでない状態になる恐れがあり、全てのロケータの修正が一度にできたとしてもテスト実行の妥当性を保つことができない可能性が有る。不整合の有る全てのロケータを無理やり修正した後、再度通してテストを実行することも考えられるが、動的要素の多いアプリケーションの場合、正しく修正を行える可能性が低く、試行回数が増える恐れがある。
【０１２６】
そこで、本実施の形態では、単純にロケータを修正しながら実行するのみではなく、プログラム内部状態の整合性を保持しながら、必要に応じて（アサーションに合格しなかった場合）プログラムの再実行が行われる。
【０１２７】
なお、本実施の形態において、テスト実行装置１０は、テストスクリプト修正装置の一例である。対応要素候補探索部１６は、特定部の一例である。テストスクリプト修正部１７は、第１の修正部及び第２の修正部の一例である。重み計算部１９は、計算部の一例である。画面要素情報記憶部は、記憶部の一例である。ロケータは、識別情報の一例である。旧画面は、第１の画面の一例である。新画面は、第２の画面の一例である。カウンタｃの値は、第１の回数の一例である。カウンタｄの値は、第２の回数の一例である。カウンタｅの値は、第３の回数の一例である。
【０１２８】
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【０１２９】
１０          テスト実行装置
１１          テストスクリプト取得部
１２          テスト実行部
１３          画面表示制御部
１４          指標値取得部
１５          画像取得部
１６          対応要素候補探索部
１７          テストスクリプト修正部
１８          テストスクリプト出力部
１９          重み計算部
２０          サーバ装置
１００        ドライブ装置
１０１        記録媒体
１０２        補助記憶装置
１０３        メモリ装置
１０４        ＣＰＵ
１０５        インタフェース装置
１０６        表示装置
１０７        入力装置
１２１        テストスクリプト記憶部
１２２        画面要素情報記憶部
１２３        画面履歴記憶部
１２４        重み記憶部
Ｂ            バス
【図１】
2018092362.tif 000003
【図２】
2018092362.tif 000004
【図３】
2018092362.tif 000005
【図４】
2018092362.tif 000006
【図５】
2018092362.tif 000007
【図６】
2018092362.tif 000008
【図７】
2018092362.tif 000009
【図８】
2018092362.tif 000010
【図９】
2018092362.tif 000011
【図１０】
2018092362.tif 000012
【図１１】
2018092362.tif 000013
【図１２】
2018092362.tif 000014
【図１３】
2018092362.tif 000015