(57)【要約】【課題】アプリケーション画面の検証において、少数かつ適切な検証対象を特定する。【解決手段】複数のコールバック関数の呼出順序毎の画面の各々を示す階層化文書の各々に含まれ、かつコールバック関数により更新される要素の各々に、階層化文書を同値性に基づいて分類するための分類基準を規定するフラグであって、同一階層かつ同一種別の要素間の比較の際に、要素が持つ複数の子要素の順序の同値性を比較するか否かを示す順序同値性フラグ、及び要素の内包文字列の同値性を比較するか否かを示す文字列同値性フラグを設定し、フラグの設定の組み合わせ毎に、複数の分類基準を作成し、複数の分類基準の各々にしたがって、複数のコールバック関数の呼出順序毎の階層化文書の各々を分類した場合の分類数が、複数のコールバック関数の呼出順序に制約がないとした場合の基準分類数以上、かつ基準分類数に近くなる分類基準を特定する。【選択図】図１
2017027108.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
複数のコールバック関数が並列に実行されて生成されるウェブアプリケーションの画面について、前記複数のコールバック関数の呼出順序毎の画面の各々を示す階層化文書の各々に含まれ、かつ前記複数のコールバック関数の少なくとも１つにより更新される可能性がある予め定めた要素の各々に、前記階層化文書を同値性に基づいて分類するための分類基準を規定するフラグであって、同一階層かつ同一種別の要素間の比較の際に、該要素が持つ複数の子要素の順序の同値性を比較するか否かを示す順序同値性フラグ、及び該要素の内包文字列の同値性を比較するか否かを示す文字列同値性フラグを設定し、
前記順序同値性フラグ及び前記文字列同値性フラグの設定の組み合わせ毎に、複数の分類基準を作成し、
前記複数の分類基準の各々にしたがって、前記複数のコールバック関数の呼出順序毎の階層化文書の各々を分類した場合の分類数が、前記複数のコールバック関数の呼出順序に制約がないとした場合の基準分類数以上、かつ該基準分類数に近くなる分類基準を特定する、
処理を実行させる画面検証支援プログラム。
【請求項２】
前記複数の分類基準の各々の中で、前記特定した分類基準を強調して表示することをさらに含む処理を前記コンピュータに実行させる請求項１記載の画面検証支援プログラム。
【請求項３】
前記階層化文書の各々が示す画面を生成するために実行されたコールバック関数集合毎に、該コールバック関数集合に含まれるコールバック関数の呼出順序毎の前記階層化文書の各々を前記特定した分類基準で分類した分類結果を表示すると共に、各コールバック関数集合の前記分類結果の表示を、前記コールバック関数集合の包含関係を表すように表示することをさらに含む処理を前記コンピュータに実行させる請求項１又は請求項２記載の画面検証支援プログラム。
【請求項４】
前記コールバック関数集合に含まれるコールバック関数の数が少ないほど、かつ前記分類結果が表す分類数が２に近いほど、前記分類結果の表示の強調の度合いを強くする請求項３記載の画面検証支援プログラム。
【請求項５】
前記コールバック関数集合毎に、該コールバック関数集合に含まれるコールバック関数の呼出順序毎の前記階層化文書の各々を前記特定した分類基準で分類した場合に、同値とならない階層化文書において、要素が持つ複数の子要素の順序が同値でないか、又は要素の内包文字列が同値でない要素を特定して、該コールバック関数集合の分類結果に紐付けて表示することをさらに含む処理を前記コンピュータに実行させる請求項３又は請求項４記載の画面検証支援プログラム。
【請求項６】
前記コールバック関数集合毎の前記分類結果が選択された場合に、該分類結果に含まれる階層化文書を表示することをさらに含む処理を前記コンピュータに実行させる請求項３〜請求項５のいずれか１項記載の画面検証支援プログラム。
【請求項７】
前記複数のコールバック関数の少なくとも１つにより更新される可能性がある予め定めた要素を、ＨＴＭＬにおいてＩＤ属性が付与された要素、及びユーザにより指定された要素の少なくとも一方とする請求項１〜請求項６のいずれか１項記載の画面検証支援プログラム。
【請求項８】
複数のコールバック関数が並列に実行されて生成されるウェブアプリケーションの画面について、前記複数のコールバック関数の呼出順序毎の画面の各々を示す階層化文書の各々に含まれ、かつ前記複数のコールバック関数の少なくとも１つにより更新される可能性がある予め定めた要素の各々に、前記階層化文書を同値性に基づいて分類するための分類基準を規定するフラグであって、同一階層かつ同一種別の要素間の比較の際に、該要素が持つ複数の子要素の順序の同値性を比較するか否かを示す順序同値性フラグ、及び該要素の内包文字列の同値性を比較するか否かを示す文字列同値性フラグを設定し、前記順序同値性フラグ及び前記文字列同値性フラグの設定の組み合わせ毎に、複数の分類基準を作成する作成部と、
前記複数の分類基準の各々にしたがって、前記複数のコールバック関数の呼出順序毎の階層化文書の各々を分類した場合の分類数が、前記複数のコールバック関数の呼出順序に制約がないとした場合の基準分類数以上、かつ該基準分類数に近くなる分類基準を特定する特定部と、
を含む画面検証支援装置。
【請求項９】
コンピュータに、
複数のコールバック関数が並列に実行されて生成されるウェブアプリケーションの画面について、前記複数のコールバック関数の呼出順序毎の画面の各々を示す階層化文書の各々に含まれ、かつ前記複数のコールバック関数の少なくとも１つにより更新される可能性がある予め定めた要素の各々に、前記階層化文書を同値性に基づいて分類するための分類基準を規定するフラグであって、同一階層かつ同一種別の要素間の比較の際に、該要素が持つ複数の子要素の順序の同値性を比較するか否かを示す順序同値性フラグ、及び該要素の内包文字列の同値性を比較するか否かを示す文字列同値性フラグを設定し、
前記順序同値性フラグ及び前記文字列同値性フラグの設定の組み合わせ毎に、複数の分類基準を作成し、
前記複数の分類基準の各々にしたがって、前記複数のコールバック関数の呼出順序毎の階層化文書の各々を分類した場合の分類数が、前記複数のコールバック関数の呼出順序に制約がないとした場合の基準分類数以上、かつ該基準分類数に近くなる分類基準を特定する
処理を実行させる画面検証支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画面検証支援プログラム、画面検証支援装置、及び画面検証支援方法に関する。
【背景技術】
【０００２】
ウェブアプリケーションの画面（ウェブページ）を更新する場合に、ＨＴＭＬをウェブサーバから再読み込みするのではなく、表示中のウェブページをウェブクライアント側で書き換えるＳＰＡ（Single-Page Application）という方式が存在する。すなわち、ＳＰＡ型のウェブアプリケーションでは、動的に画面更新が行われる。具体的には、画面更新のために新たに必要となるデータは、ＡＰＩ（Application Programming Interface）サーバから取得する。より具体的には、ＡＰＩサーバが提供するデータ取得用のＷｅｂＡＰＩを、ウェブクライアント側から呼び出す。そして、ＷｅｂＡＰＩを呼び出した後にＡＰＩサーバからレスポンスが返ってきたときに、ウェブクライアントは、呼び出したＷｅｂＡＰＩに対応付けられたコールバック関数を呼び出して実行することにより、画面を更新する。
【０００３】
また、画面更新の高速化のために、ウェブクライアントは、複数のＷｅｂＡＰＩを非同期に並列で呼び出す。複数のＷｅｂＡＰＩが非同期に呼び出された場合、ウェブクライアント側で観測される各コールバック関数の呼出順序は不定になる。つまり、アプリケーションの実行毎に、コールバック関数が異なる順序で呼び出される可能性がある。
【０００４】
そのため、複数のＷｅｂＡＰＩを非同期に呼び出して画面が更新されるウェブアプリケーションでは、コールバック関数の呼出順序に関わらず、画面更新結果が仕様に違反しないことを検証する必要がある。画面更新結果が仕様に違反しているか否かは、コールバック関数をあらゆる呼出順序で実行した場合における画面更新処理前後の画面スナップショットや画面変更点などの各画面更新結果を、検証作業者の目視確認により判断することになる。画面更新結果が仕様に違反しているか否かを機械的に判断することが困難なアプリケーションの仕様が存在するために、人間が目視で判断せざるを得ない場合が生じ得るからである。
【０００５】
また、アプリケーションの仕様の検証に関する技術として、オブジェクト指向プログラムにおけるあるクラスのオブジェクトの振る舞いを可視化する技術が提案されている。この技術では、注目するクラスのオブジェクト群をそれらの振る舞いに基づいて同値分割し、そのクラスの代表的な振る舞いのみを可視化している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特表２０００−５１０６５９号公報
【特許文献２】特開平５−１９７５３５号公報
【特許文献３】特開２００９−１９９３９９号公報
【特許文献４】特開２００２−２４５０６８号公報
【非特許文献】
【０００７】
【非特許文献１】宗像 聡、「クラス動作シナリオ可視化手法のプログラム理解作業に対する有効性評価」、情報処理学会研究報告  Vol.2010-SE-167 No.10、２０１０
【発明の概要】
【発明が解決しようとする課題】
【０００８】
実用的なウェブアプリケーションでは、画面更新結果は大量に生成されるため、全ての画面更新結果を逐一人間が目視で確認することは現実的ではない。そこで、大量の画面更新結果を逐一目視確認する労力を回避するために、上記のオブジェクトを同値分割する技術を利用して、画面更新結果を同値分割することも考えられる。例えば、更新処理後の画面の各々を示すＨＴＭＬの文字列の類似度に基づいて、画面更新結果の各々の同値性を判断し、画面更新結果の各々を同値性に基づいて分類する。そして、分類されたグループの中の代表的な画面更新結果を検証することが考えられる。
【０００９】
しかし、同値性の判断を厳密にした場合には、画面更新結果が多数のグループに分類されることになり、目視で検証すべき画面更新結果の数の削減効果が少ない。一方、同値性の判断を緩和することも考えられる。しかし、ＨＴＭＬの要素の中には、画面更新結果間で厳密に同値性を判断すべき要素もあれば、画面更新結果間で異なっていても、アプリケーションの仕様違反になるとは限らない要素もある。そのため、例えば、ＨＴＭＬの文字列の類似度の基準を単純に低くするなどして、同値性の判断を緩和した場合には、上記のような要素の特性を考慮することができず、画面更新結果の各々を同値性に基づいて適切に分類することができない場合が生じ得る。
【００１０】
本発明は、一つの側面として、アプリケーション画面の検証において、少数かつ適切な検証対象を特定することを目的とする。
【課題を解決するための手段】
【００１１】
本発明は、一つの態様として、複数のコールバック関数が並列に実行されて生成されるウェブアプリケーションの画面について、前記複数のコールバック関数の呼出順序毎の画面の各々を示す階層化文書の各々に含まれる要素の各々にフラグを設定する。フラグを設定する要素は、前記複数のコールバック関数の少なくとも１つにより更新される可能性がある予め定めた要素の各々である。フラグは、前記階層化文書を同値性に基づいて分類するための分類基準を規定するフラグである。また、フラグは、同一階層かつ同一種別の要素間の比較の際に、該要素が持つ複数の子要素の順序の同値性を比較するか否かを示す順序同値性フラグを含む。また、フラグは、同一階層かつ同一種別の要素間の比較の際に、該要素の内包文字列の同値性を比較するか否かを示す文字列同値性フラグを含む。そして、前記順序同値性フラグ及び前記文字列同値性フラグの設定の組み合わせ毎に、複数の分類基準を作成する。そして、前記複数の分類基準の各々にしたがって、前記複数のコールバック関数の呼出順序毎の階層化文書の各々を分類する。その場合の分類数が、前記複数のコールバック関数の呼出順序に制約がないとした場合の基準分類数以上、かつ該基準分類数に近くなる分類基準を特定する。
【発明の効果】
【００１２】
一つの側面として、アプリケーション画面の検証において、少数かつ適切な検証対象を特定することができる、という効果を有する。
【図面の簡単な説明】
【００１３】
【図１】本実施形態に係る画面検証支援装置の概略構成を示す機能ブロック図である。
【図２】ＳＰＡ型のウェブアプリケーションを説明するための図である。
【図３】ＨＴＭＬとＤＯＭとの関係を示す図である。
【図４】コールバック関数の一例を示す図である。
【図５】コールバック関数の呼出順序と画面更新結果との対応の一例を示す図である。
【図６】ＤＯＭの文字列表現の同値性に基づく同値分類の一例を示す図である。
【図７】子要素の並び順の相違、及び内包文字列の相違を説明するための図である。
【図８】内包文字列の相違を比較対象とした同値分類の一例を示す図である。
【図９】分類基準を緩和した同値分類の一例を示す図である。
【図１０】分類基準データベース（ＤＢ）の一例を示す図である。
【図１１】実行設定ＤＢの一例を示す図である。
【図１２】画面更新結果ＤＢの一例を示す図である。
【図１３】同値集合ＩＤを記録した画面更新結果ＤＢの一例を示す図である。
【図１４】分類理由ＤＢ２４の一例を示す図である。
【図１５】同値集合数と強調度１との関係の一例を示す図である。
【図１６】コールバック関数の数と同値集合数と強調度２との関係の一例を示す図である。
【図１７】検証画面の一例を示す図である。
【図１８】本実施形態に係る画面検証支援装置として機能するコンピュータの概略構成を示すブロック図である。
【図１９】画像検証支援処理の一例を示すフローチャートである。
【図２０】実行設定登録画面の一例を示す図である。
【図２１】フラグ設定対象登録画面の一例を示す図である。
【図２２】フラグの設定及びＨＴＭＬの更新を説明するための図である。
【図２３】フラグが設定されたＨＴＭＬとＤＯＭとの関係を示す図である。
【図２４】同値分類処理の一例を示すフローチャートである。
【図２５】要素比較処理の一例を示すフローチャートである。
【図２６】要素間の比較を説明するための図である。
【図２７】画面表示処理の一例を示すフローチャートである。
【図２８】分類基準毎の強調度１の一例を示す図である。
【図２９】コールバック関数集合毎の強調度２の一例を示す図である。
【図３０】ＤＯＭの構造比較画面を検証画面上に重畳した一例を示す図である。
【発明を実施するための形態】
【００１４】
まず、実施形態の詳細を説明する前に、以下の実施形態で適用しているＳＰＡ（Single-Page Application）型のウェブアプリケーションにおける画面更新、及び画面検証における問題点について説明する。
【００１５】
図２に示すように、ＳＰＡ型のウェブアプリケーションでは、まず、ウェブクライアント（ウェブブラウザ）１０１が、初期画面（更新される前の画面）のウェブページを、ウェブサーバ１０２に要求する（図２中の（１））。ウェブサーバ１０２は、ウェブクライアント１０１からの要求を処理するリクエスト処理部１０３と、複数のウェブページの各々を示すＨＴＭＬ（HyperText Markup Language）が格納されたページデータベース（ＤＢ）１０４とが含まれる。リクエスト処理部１０３は、要求されたウェブページを示すＨＴＭＬをページＤＢ１０４から取得して、ウェブクライアント１０１に返信する（図２中の（２））。ウェブクライアント１０１では、返信されたＨＴＭＬ１０５に基づいて初期画面を表示する。
【００１６】
図２中のＡに示すように、ＳＰＡ型のウェブアプリケーションの初期画面のＨＴＭＬ１０１には、ＡＰＩサーバが提供する情報を取得するためのＷｅｂＡＰＩ呼出が含まれる。ウェブクライアント１０１は、ＷｅｂＡＰＩを呼び出して、ＡＰＩサーバ１０６から情報を取得する。具体的には、図２の例では、初期画面のＨＴＭＬ１０５に、ＡＰＩサーバ１０６から「お店情報」を取得するためのＷｅｂＡＰＩ呼出と、「お店人気情報」を取得するためのＷｅｂＡＰＩ呼出とが含まれている。ウェブクライアント１０１は、ＡＰＩサーバ１０６に、「お店情報」の要求（図２中の（３））と、「お店人気情報」の要求（図２中の（５））とを行う。
【００１７】
ＡＰＩサーバ１０６は、ウェブクライアント１０１からの要求を処理するリクエスト処理部１０７と、ウェブクライアント１０１へのレスポンスを生成するレスポンス生成部１０８と、提供情報ＤＢ１０９とが含まれる。提供情報ＤＢ１０９には、ウェブクライアント１０１に提供される各種情報１１０が格納されている。リクエスト処理部１０７は、ウェブクライアント１０１からの要求をレスポンス生成部１０８へ受け渡す。レスポンス生成部１０８は、要求された情報を提供情報ＤＢ１０９から取得して、リクエスト処理部１０７へ返し、リクエスト処理部１０３からウェブクライアント１０１に返信する。図２の例では、（４）が「お店情報」の返信、（６）が「お店人気情報」の返信を示す。
【００１８】
また、図２中のＢに示すように、初期画面のＨＴＭＬ１０１には、複数のＷｅｂＡＰＩ呼出の各々に対応するコールバック関数呼出が含まれている。コールバック関数は、ＷｅｂＡＰＩ呼出に対してレスポンスが返ってきたタイミングで呼び出されて、実行される関数である。図２では、お店情報が取得されたタイミングで、お店情報を描画するコールバック関数（Ｆ５）を呼び出し（図２中の（７））、お店人気情報が取得されたタイミングで、お店情報を並び替えるコールバック関数（Ｆ４）を呼び出す（図２中の（８））例を示している。
【００１９】
呼び出されたコールバック関数が実行されることにより、ＨＴＭＬが更新され（図２中の更新後の画面のＨＴＭＬ１１１）、表示中の画面が更新される。初期画面のＨＴＭＬ１０５が複数のＷｅｂＡＰＩ呼出を含む場合、すなわち複数のコールバック関数が実行される場合には、１つのウェブページが何度も更新されることになる。コールバック関数が実行されて更新された画面の情報を、以下では「画面更新結果」といい、ここでは、ＨＴＭＬをウェブアプリケーションから利用するためのＡＰＩであるＤＯＭ（Document Object Model）を用いる場合について説明する。図３に示すように、ＤＯＭ１１２は、ＨＴＭＬ１１１の各要素のデータ構造を順序木で表した階層化文書である。ＨＴＭＬ１１１とＤＯＭ１１２とは等価であり、相互に変換できる。なお、ＨＴＭＬ１１１の要素（ＤＯＭ１１２の要素でもある）のうち、アプリケーションから更新される可能性のある要素にはＩＤ属性が付与されている。
【００２０】
ここで、複数のＷｅｂＡＰＩ呼出の各々に対するレスポンスのタイミングは、ウェブクライアント１０１、ウェブクライアント１０１とＡＰＩサーバ１０６間のネットワーク、ＡＰＩサーバ１０６の負荷状況などに依存して、順序不定である。上述したように、コールバック関数は、ＷｅｂＡＰＩ呼出に対するレスポンスが返ってきたタイミングで呼び出されるものであるため、コールバック関数の実行順序も不定となる。例えば、図２の例では、ＡＰＩサーバ１０６への情報の要求が、（３）お店情報の要求、（４）お店人気情報の要求の順で行われたとしても、レスポンスは、（６）お店人気情報の返信、（５）お店情報の返信の順になる場合もある。このように、ＷｅｂＡＰＩ呼出を複数含むウェブアプリケーションでは、ＷｅｂＡＰＩ呼出の各々に対応するコールバック関数の各々がどのような順番で呼び出されても、アプリケーションの画面の仕様に違反しないことが必要である。
【００２１】
上記のようなＳＰＡ型のウェブアプリケーションの画面の仕様違反を検証する方法として、コールバック関数の呼出順序の全てのパターンについて、画面更新結果を取得し、検証作業者が各画面更新結果を目視で確認することが考えられる。
【００２２】
具体的に、画面更新結果の全てを検証する場合について説明する。例えば、３つのＷｅｂＡＰＩ呼出を含むウェブアプリケーションで、ＷｅｂＡＰＩ呼出の各々に対応して、図４に示すような、関数ＩＤがＦ４、Ｆ５、及びＦ６の各々である３つのコールバック関数が呼び出されるとする。以下では、関数ＩＤがＦｉのコールバック関数を「コールバック関数Ｆｉ」又は単に「Ｆｉ」と表記する。この場合、コールバック関数の呼出順序は、全部で１５件である。この１５件の呼出順序の各々について、コールバック関数の呼出順序だけを変えながらアプリケーションを複数回実行することで、コールバック関数の呼出順序と画面更新結果との対応を、各コールバック関数が実行された直後の途中状態も含め、網羅的に記録する。図５に、コールバック関数の呼出順序と画面更新結果との対応の一例を示す。図５の「順序ＩＤ」は、コールバック関数の呼出順序の各々を識別するための識別情報であり、呼び出すコールバック関数の関数ＩＤの数字部分を、「Ｒ」の後に呼出順に並べて表している。また、図５の「画面更新結果」は、コールバック関数の呼出順序毎の画面更新結果（ＤＯＭをＨＴＭＬ形式で表示）である。
【００２３】
この例では、１５件の画面更新結果の各々を目視確認することにより、アプリケーション仕様に違反する画面更新結果を引き起こすコールバック関数の呼出順序を絞り込むことができる。この例では、コールバック関数の呼出順序「Ｆ４⇒Ｆ５」、及び「Ｆ６⇒Ｆ４」が、アプリケーションの仕様に違反する画面更新結果を引き起こす、最小単位のコールバック関数の呼出順序である。すなわち、コールバック関数Ｆ４（ｄｒａｗＲａｎｋｉｎｇ）は、コールバック関数Ｆ５（ｄｒａｗＳｔｏｒｅｓ）の後に呼び出されなければならず、コールバック関数Ｆ６（ｄｒａｗＭａｐ）は、コールバック関数Ｆ４（ｄｒａｗＲａｎｋｉｎｇ）の後に呼び出されなければならない。また、コールバック関数の呼出順序「Ｆ５⇒Ｆ４⇒Ｆ６」だけが正常な画面更新結果を生成する。このような検証結果を、１５件の画面更新結果の目視確認により得ることになる。
【００２４】
しかし、実用的なウェブアプリケーションでは，画面更新結果が大量に生成されるため、全ての画面更新結果を目視確認することは現実的ではない。例えば、ＷｅｂＡＰＩ呼出数がｎのアプリケーションでは、全てのコールバック関数が呼び出された後の最終状態の画面に限っても、ｎ！件の画面更新結果が作成されることになる。例えば、ｎ＝７の場合、５，０４０件（＝７！通り）の画面更新結果が作成されることになり、１件の確認に５秒しかかからなかったとしても、画面更新結果の全ての検証に約７時間もかかってしまう。さらに、各コールバック関数が呼出された直後の途中状態の画面更新結果も含めると、下記（１）式に示す件数の画面更新結果が作成されることになる。
【００２５】
【数１】
2017027108.tif 000003
【００２６】
途中状態の画面更新結果も含めると、例えば、ｎ＝７の場合、１３６，９９件の画面更新結果が作成されるため、１件の確認に５秒しかかからなかったとしても、画面更新結果の全ての検証に約１９時間もかかってしまう。
【００２７】
そこで、複数の画面更新結果を、より少数の集合に分類し、各集合の中から代表の画面更新結果を目視確認することにより、検証対象の画面更新結果を削減することが考えられる。例えば、図６に示すように、３つのＷｅｂＡＰＩ呼出に対するコールバック関数の全呼出順序についての１５件の画面更新結果を、ＤＯＭの文字列表現の同値性（一致度合い）に基づいて、同値となる画面更新結果に同一の同値集合ＩＤを付与する。同値集合ＩＤが同一の画面更新結果の集合が同値集合であり、図６の例では、１５件の画面更新結果が１０個の同値集合に分類できた場合を示している。この場合、一度目視確認した画面更新結果と同値である他の画面更新結果は、目視確認しなくてよいため、検証対象の画面更新結果の数は、約３３％（＝５／１５）削減される。なお、以下では、同値集合ＩＤがＳｉの同値集合を「同値集合Ｓｉ」と表記する。
【００２８】
検証の一例としては、同値集合から、それぞれ１つだけ画面更新結果を選択する。そして、選択した画面更新結果を目視確認した結果、アプリケーションの仕様に違反していた場合、その画面更新結果が含まれる同値集合に含まれる全ての画面更新結果がアプリケーションの仕様に違反していると判定する。また、アプリケーションの仕様に違反している同値集合に含まれる各画面更新結果と対応するコールバック関数の呼出順序は、全て、アプリケーションの仕様に違反する画面更新結果を引き起こす呼出順序であると判定する。
【００２９】
ここで、ＳＰＡ型のウェブアプリケーションでは、コールバック関数の呼出順序の違いが、下記のような画面表示内容の違いとして表れる傾向がある。
（１）同じ要素への更新処理の衝突に由来する子要素の並び順の相違
（２）ＷｅｂＡＰＩ呼出処理の非決定性に由来する要素の内包文字列の相違
【００３０】
上記（１）は、例えば、図７の上段に示すように、複数の子要素を含む要素の「描画処理」と「並替処理」との呼出順序が入れ替わった場合などである。上記（２）は、例えば、図７の下段に示すように、「現在時刻を取得して表示する処理」と「他の処理」との呼出順序が入れ替わったことにより、内包文字列（時刻の表示）が相違する場合などである。なお、ＷｅｂＡＰＩ呼出処理の非決定性とは、同じ入力を与えたとしても異なる出力が得られる処理の特性を意味する。
【００３１】
しかし、上記（１）や（２）のような相違が画面上に生じているからといって、必ずしもアプリケーションの仕様に違反しているとは限らない。例えば、リストに表示される各情報の表示順は問わない場合には、上記（１）の相違は問題にならない。また、現在時刻の表示は毎回違ってもよい場合には、上記（２）の相違は問題にならない。
【００３２】
そのため、上記のように、単純に、ＤＯＭの文字列表現の同値性に基づいて画面更新結果を分類する場合には、上記の（１）や（２）の相違を考慮する、又は考慮しない等の細かな判断に基づく分類を行うことができない。
【００３３】
例えば、図８に示すように、関数Ｆ４（ｄｒａｗＲａｎｋｉｎｇ）が実行されることにより描画される「お店人気情報の取得時刻」が、コールバック関数の呼出順序毎に全て異なるとする。この場合において、ＤＯＭの文字列表現が完全に一致する画面更新結果を同値として分類すると、コールバック関数の呼出順序の数と同じ数（図８の例では、１５件）だけ同値集合が作られてしまい、検証対象の画面更新結果の数の削減効果がない。
【００３４】
そこで、同値集合数を減らすために、画面更新結果の同値性の判断基準を緩和して、画面更新結果を分類することが考えられる。理想的には、アプリケーションの仕様を理解している検証作業者自身が、「適切な同値性基準」を定義することが望ましい。「適切な同値性基準」とは、目視確認結果が本来異なる画面更新結果が、同じ同値集合に分類されず、かつ高々少数個の同値集合に分類されるような基準である。つまり、同値性基準は、（Ａ）同値集合の個数と、（Ｂ）目視確認結果が本来異なる画面更新結果が同じ同値集合に含まれる危険性との間のトレードオフを決めるパラメータである。
【００３５】
しかし、「適切な同値性基準を定義する」ことは、「目視確認を自動化する」ことに等しく、検証作業前に検証作業者自身の机上検討により導き出すことは困難である。例えば、図８に示す画面更新結果に含まれる全ての要素について、上記（１）及び（２）の画面表示内容の相違を無視する同値性の判断基準を適用する。この場合、図９に示すように、１５個の画面更新結果が、わずか２つの同値集合に分類される。図９の例では、同値集合Ｓ１には、１１個の画面更新結果が含まれ、同値集合Ｓ２には、４個の画面更新結果が含まれる。同値集合Ｓ１には、実際には、「目視確認結果が本来異なる画面更新結果」であるアプリケーションの仕様違反になる画像更新結果と、仕様違反にならない画像更新結果とが混在する。したがって、各同値集合から１つの画面更新結果を選択して確認するだけでは、アプリケーションの仕様違反を引き起こすコールバック関数の呼出順序を絞り込むことはできない。
【００３６】
そこで、以下で詳述する実施形態では、ウェブアプリケーションの画面の仕様違反の検証対象数を削減するために、画面更新結果を同値分類する際の分類基準として適切な分類基準を特定する。適切な分類基準とは、ＳＰＡ型のウェブアプリケーションで表れ易い上記（１）及び（２）の相違に対応した分類基準である。さらに、以下の実施形態では、仕様違反となる画面更新結果を引き起こすコールバック関数の呼出順序を特定する。そして、特定した分類基準及び仕様違反を引き起こすコールバック関数の呼出順序をユーザに提示することにより、ユーザによるアプリケーションの画面検証を支援する。
【００３７】
以下、図面を参照して、本発明に関する実施形態の一例を詳細に説明する。なお、上記のＳＰＡ型のウェブアプリケーションにおける画面更新、及び画面検証における問題点で説明した部分と同様の部分については、詳細な説明を省略する。
【００３８】
図１に示すように、本実施形態に係る画面検証支援装置１０は、ユーザ対話制御部１１と、分類基準作成部１２と、アプリ実行部１３と、コールバック関数呼出制御部１４と、画面更新結果記録部１５と、画面更新結果分類部１６と、検証画面出力部１７とを含む。また、画面検証支援装置１０の所定の記憶領域には、分類基準データベース（ＤＢ）２１と、アプリ実行設定ＤＢ２２と、画面更新結果ＤＢ２３と、分類理由ＤＢ２４とが記憶される。なお、分類基準作成部１２は、本発明の作成部の一例であり、画面更新結果分類部１６及び検証画面出力部１７は、本発明の特定部の一例である。
【００３９】
ユーザ対話制御部１１は、ユーザからの各種入力を受け付けるための画面及び検証画面の生成と表示とを制御する。また、ユーザ対話制御部１１は、ユーザから入力された各種情報を受け付け、受け付けた情報を所定の機能部へ受け渡す。
【００４０】
分類基準作成部１２は、画面更新結果を同値性に基づいて分類する際の分類基準として、複数の分類基準を作成する。作成された複数の分類基準から、後述する検証画面出力部１７により、適切な分類基準が特定される。複数の分類基準の各々は、画面の検証を行うウェブアプリケーションの初期画面のＨＴＭＬに含まれる各要素のうち、ＷｅｂＡＰＩ呼出により更新される可能性がある各要素に対するフラグ（検証アノテーション）の設定の有無により規定される。更新される可能性がある要素は、ＩＤ属性が付与された要素としてもよいし、ユーザ対話制御部１１を介して、ユーザにより指定された要素としてもよい。
【００４１】
フラグは、各要素について、上記（１）及び（２）の識別有無を指定するものである。具体的には、分類基準作成部１２は、上記（１）の識別有無を指定するフラグとして、ＤＯＭの構造一致判定で、ある要素の子要素の並び順の同値性を比較対象とすることを示す「Ｓｅｑフラグ」を設定する。また、分類基準作成部１２は、上記（２）の識別有無を指定するフラグとして、ＤＯＭの構造一致判定で、ある要素の内包文字列の同値性を比較対象としないことを示す「Ｔｅｍｐフラグ」を設定する。
【００４２】
分類基準作成部１２は、ＨＴＭＬに含まれる各要素に対するＳｅｑフラグ及びＴｅｍｐフラグの設定のあらゆる組合せの各々を、分類基準として作成する。例えば、ＨＴＭＬに３つの要素（Ｐ＃ｄａｔｅ、ＵＬ＃ｒａｎｋｉｎｇ、ＳＶＧ＃ｍａｐ）の各々にＳｅｑフラグ及びＴｅｍｐフラグを設定する場合、２７通りの分類基準が作成される。分類基準作成部１２は、作成した複数の分類基準を、分類基準ＤＢ２１に記録する。
【００４３】
図１０に、分類基準ＤＢ２１の一例を示す。図１０の例では、各行が１つの分類基準に相当し、各分類基準に基準ＩＤが付与されている。以下では、基準ＩＤがｉの分類基準を「分類基準ｉ」と表記する。また、分類基準ＤＢ２１の各列はフラグの設定対象である各要素が対応付けられており、各分類基準の各列に対応するセルは、その列に対応する要素に対するＳｅｑフラグ及びＴｅｍｐフラグの設定状況を示す。なお、ブランクのセルは、Ｓｅｑフラグ及びＴｅｍｐフラグのいずれも設定されていない要素を表す。また、本実施形態では、ＳｅｑフラグとＴｅｍｐフラグとは排他的な関係にあるため、１つの要素に対して、Ｓｅｑフラグ及びＴｅｍｐフラグの両方が設定される場合はない。
【００４４】
アプリ実行部１３は、ユーザ対話制御部１１を介して入力された、画面の検証を行うウェブアプリケーションの実行設定に、実行設定を一意に識別可能な実行設定ＩＤを付与して、実行設定ＤＢ２２に記録する。図１１に実行設定ＤＢ２２の一例を示す。図１１の例では、各行が１つの実行設定に相当し、「ＵＲＬ」は、ウェブアプリケーションを実行する際に指定される実行パスである。アプリ実行部１３は、実行設定ＤＢ２２に記録された実行設定から、所望の実行設定ＩＤに対応付けられたＵＲＬに対して、ＨＴＴＰリクエストを送信する。ＨＴＴＰリクエストの１回の送信につき、ウェブアプリケーションが１回実行される。
【００４５】
コールバック関数呼出制御部１４は、ウェブアプリケーションの実行中に呼び出されるコールバック関数の呼出順序を制御する。本実施形態では、アプリ実行部１３及びコールバック関数呼出制御部１４の機能により、分類基準作成部１２により作成された分類基準毎に、コールバック関数のあらゆる呼出順序で網羅的にウェブアプリケーションが実行される。コールバック関数呼出制御部１４は、各コールバック関数の呼出が完了すると、そのコールバック関数の呼出順序を画面更新結果記録部１５に通知する。
【００４６】
画面更新結果記録部１５は、コールバック関数呼出制御部１４からの通知を受けると、各コールバック関数の実行が完了した段階のＨＴＭＬを取得し、取得したＨＴＭＬをＤＯＭに変換する。そして、画面更新結果記録部１５は、ＤＯＭを画面更新結果として、通知されたコールバック関数の呼出順序と対応付けて、画面更新結果ＤＢ２３に記録する。画面更新結果ＤＢ２３には、分類基準毎に、コールバック関数の呼出順序と画面更新結果とが対応付けて記録される。図１２に、画面更新結果ＤＢ２３の一例を示す。図１２の例では、「基準ＩＤ」欄の基準ＩＤで特定される分類基準毎に、「順序ＩＤ」及び「コールバック関数の呼出順序」と、「画面更新結果」とが対応付けられている。また、後段の処理で使用される「同値集合ＩＤ」欄も設けられている。「同値集合ＩＤ」欄は、画面更新結果ＤＢ２３に画像更新結果が記録される段階では空欄である。
【００４７】
画面更新結果分類部１６は、分類基準毎の画面更新結果について、ＤＯＭ構造が同一の画面更新結果に同一の同値集合ＩＤを付与して、図１３に示すように、画面更新結果ＤＢ２３の「同値集合ＩＤ」欄に記録する。画面更新結果分類部１６は、ＤＯＭ構造が同一か否かを、ＤＯＭの同一階層における同一タグ名の要素同士の同値性に基づいて判断する。この際、各分類基準に応じた、各要素に対するＳｅｑフラグ及びＴｅｍｐフラグの設定に基づいて、要素同士の同値性を判断する。
【００４８】
具体的には、画面更新結果分類部１６は、複数の子要素を持つ要素にＳｅｑフラグが設定されている場合は、子要素同士が１対１で対応しており、かつ子要素の並び順も一致している場合に、その要素同士は同値であると判断する。一方、複数の子要素を持つ要素にＳｅｑフラグが設定されていない場合、画面更新結果分類部１６は、子要素同士が１対１で対応していれば、子要素の並び順が一致していなくても、その要素同士は同値であると判断する。また、画面更新結果分類部１６は、Ｔｅｍｐフラグが設定されている要素については、要素間の階層及びタグ名が一致していれば、その要素の内包文字列が異なっていても、同値であると判断する。ただし、Ｔｅｍｐフラグが設定されている要素間の比較において、一方の要素の内容文字列が更新されており、他方の要素の内包文字列が更新されていない場合（例えば、Ｎｕｌｌの場合）は、画面更新結果分類部１６は、その要素同士は同値ではないと判断する。Ｔｅｍｐフラグが設定されていない要素間の比較では、画面更新結果分類部１６は、要素の階層及びタグ名と共に、内包文字が一致している場合に同値であると判断し、内包文字列が異なっている場合には、同値ではないと判断する。
【００４９】
また、画面更新結果分類部１６は、画面更新結果が同値ではないと判断した場合、すなわち、比較した画面更新結果の各々に異なる同値集合ＩＤを付与した場合、その理由を分類理由ＤＢ２４に記録する。図１４に、分類理由ＤＢ２４の一例を示す。分類理由ＤＢ２４は、分類基準毎に作成される。図１４の例では、分類理由ＤＢ２４の行及び列は、それぞれ同値集合ＩＤに対応している。各セルには、そのセルの行及び列に対応する２つの同値集合ＩＤが付与された画面更新結果同士が、同じ同値集合として分類されなかった理由が、対象の要素と共に記録されている。
【００５０】
検証画面出力部１７は、分類基準毎の画面更新結果の同値分類の結果に基づいて、ウェブアプリケーションの画面の仕様検証のために適切な分類基準を特定する。
【００５１】
ここで、各コールバック関数で行われる画面更新処理は各々異なるが、コールバック関数の呼出順序に制約が全く無い場合に、全く同じ実行環境でウェブアプリケーションを網羅的に実行して、画面更新結果を得るとする。この場合の全画面更新結果をＤＯＭの文字列表現の完全一致で分類した場合の同値集合数を、理想的な同値集合数（ＩＣＮ）とすると、ＩＣＮは、下記（２）式で表すことができる。なお、ｎはウェブアプリケーションの実行において呼び出されるコールバック関数の数である。
【００５２】
【数２】
2017027108.tif 000004
【００５３】
ウェブアプリケーションの仕様違反を引き起こすコールバック関数の呼出順序が存在しない場合、ＳＰＡ型のウェブアプリケーションに見られる上記（１）の子要素の順序の相違、及び上記（２）の内包文字列の相違を、仕様違反にならない範囲で無視する。この場合、分類した同値集合数はＩＣＮに等しくなる。そのため、分類した同値集合数がＩＣＮに等しくなる分類基準は、よりウェブアプリケーションの仕様と適合している可能性が高いといえる。
【００５４】
また、ウェブアプリケーションの仕様違反を引き起こすコールバック関数の呼出順序が存在する場合、コールバック関数の呼出順序の違いから画面更新結果にも違いが生じる。そのため、上記（１）及び（２）を仕様違反にならない範囲で無視する場合、分類した同値集合数はＩＣＮよりも大きくなる。したがって、ウェブアプリケーションの仕様と適合している分類基準であるほど、分類した同値集合数がＩＣＮよりも少し大きくなる。なお、分類した同値集合数がＩＣＮよりも小さくなる場合、そもそも、各コールバック関数で行われる画面更新処理前後の画面の違いを識別できていない。そのため、同値集合数がＩＣＮよりも小さい場合は、画面更新結果の違いから、仕様違反を引き起こすコールバック関数の呼出順序を発見するという目的には適さない。
【００５５】
そこで、検証画面出力部１７は、ウェブアプリケーションの仕様違反を引き起こすコールバック関数の呼出順序の絞り込みに適している分類基準ほど大きくなる値を、各分類基準の強調度１として算出する。強調度１は、同値集合数が、理想的な同値集合数（ＩＣＮ）と等しくなく、かつＩＣＮに近いほど大きくなり、同値集合数が０に近いほど小さくなる値とする。検証画面出力部１７は、例えば、下記（３）式により、分類基準毎の強調度１を算出することができる。なお、ＣＮは、該当の分類基準における同値集合数である。また、図１５に、（３）式で示す強調度１と同値集合数との関係について、ＩＣＮ＝７の場合の例を示す。
【００５６】
【数３】
2017027108.tif 000005
【００５７】
また、検証画面出力部１７は、ユーザに指定された分類基準において、コールバック関数の呼出順序の各々に含まれるコールバック関数が同じものの集合である各コールバック関数集合について、検証の際に注目すべき度合いを示す強調度２を算出する。コールバック関数集合の強調度２は、例えば、コールバック関数集合に属するコールバック関数の呼出順序に対応する画面更新結果の同値集合の個数が２に近く、かつ、そのコールバック関数集合に含まれるコールバック関数の個数が少ないほど大きな値とする。仕様違反を引き起こす根本的な原因、すなわち最小単位のコールバック関数の呼出順序を絞り易くなるためである。
【００５８】
検証画面出力部１７は、例えば、下記（４）式により、指定された分類基準の強調度２を算出することができる。なお、ユーザにより分類基準が指定されていない場合には、検証画面出力部１７は、強調度１が最大となる分類基準が指定されているものとして、その分類基準の強調度２を算出する。
【００５９】
【数４】
2017027108.tif 000006
【００６０】
ただし、ＦＮは、各コールバック関数集合に含まれるコールバック関数の数である。また、分子の第１項は、ＣＮ＝１の場合に強調度２を０にするための定数である。さらに、図１６に、（４）式で示す強調度２とＦＮとＣＮとの関係の一例を示す。
【００６１】
検証画面出力部１７は、強調度１に基づいて、適切な分類基準をユーザに提示すると共に、強調度２に基づいて、適切な分類基準又は指定された分類基準におけるコールバック関数の呼出順序に関する分類結果をユーザに提示する検証画面の画面情報を生成する。
【００６２】
図１７に、検証画面３０の一例を示す。検証画面３０は、複数の分類基準からいずれかの分類基準を選択するための分類基準選択スライドバー３１を含む。分類基準選択スライドバー３１は、横軸の各位置が同値集合数に対応したバー３１Ａと、バー３１Ａ上の位置を指定するためのつまみ３１Ｂとを含む。また、バー３１Ａに沿って、各分類基準の分類基準名（例えば、「“基準”＋基準ＩＤ」）が、その分類基準における同値集合数に対応する位置に配置される。分類基準名は、各分類基準の強調度１が大きい程、文字サイズを大きくする。図１７では、分類基準２３の強調度１が最も大きかった例であり、分類基準名「基準２３」が最も大きな文字サイズで表示されている（図１７中の破線の楕円部分）。
【００６３】
また、検証画面３０は、分類基準選択スライドバー３１で選択された分類基準、すなわち、バー３１Ａ上のつまみ３１Ｂの位置に対応する分類基準についての分類結果が表示される分類結果表示領域３２を含む。分類結果表示領域３２には、選択された分類基準について、各コールバック関数集合に対応するノード３３が、コールバック関数集合の包含関係に基づいて、エッジで接続されて配置される。各ノード３３内には、コールバック関数集合名（例えば、含まれるコールバック関数名を連結したもの）、及びそのコールバック関数集合に属するコールバック呼出順序についての画面更新結果に付与された同値集合ＩＤが表示される。また、同値集合ＩＤ毎に、その同値集合ＩＤが付与された画面更新結果を生成したコールバック関数の呼出順序も表示される。ノード３３内の文字サイズは、そのノード３３に対応するコールバック関数集合について算出された強調度２が大きい程、大きくする。
【００６４】
なお、分類基準名及びノード３３内の文字の文字サイズを変更する以外にも、強調度１及び強調度２の各々に応じて、文字の色、背景色、枠のサイズ、枠線の種類等を変更するようにしてもよい。
【００６５】
さらに、検証画面３０には、同値集合数が２以上であるコールバック関数集合に対応するノード３３に紐付けて、ノード３３内に含まれる同値集合ＩＤが示す同値集合同士が同値とならなかった理由を表記した理由一覧３４が表示される。
【００６６】
検証画面出力部１７は、生成した検証画面３０の画面情報を、ユーザ対話制御部１１へ受け渡す。
【００６７】
画面検証支援装置１０は、例えば、図１８に示すコンピュータ４０で実現することができる。コンピュータ４０はＣＰＵ４１、一時記憶領域としてのメモリ４２、及び不揮発性の記憶部４３を備える。また、コンピュータ４０は、表示装置及び入力装置等の入出力装置４８が接続される入出力インターフェース（Ｉ／Ｆ）４４を備える。また、コンピュータ４０は、記録媒体４９に対するデータの読み込みと書き込みとを制御するｒｅａｄ／ｗｒｉｔｅ（Ｒ／Ｗ）部４５、及びインターネット等のネットワークに接続されるネットワークＩ／Ｆ４６を備える。ＣＰＵ４１、メモリ４２、記憶部４３、入出力Ｉ／Ｆ４４、Ｒ／Ｗ部４５、及びネットワークＩ／Ｆ４６は、バス４７を介して互いに接続される。
【００６８】
記憶部４３は、ＨＤＤ（Hard Disk Drive）、ＳＳＤ（solid state drive）、フラッシュメモリ等によって実現できる。記憶媒体としての記憶部４３には、コンピュータ４０を画面検証支援装置１０として機能させるための画面検証支援プログラム５０が記憶される。また、記憶部４３は、分類基準ＤＢ２１、アプリ実行設定ＤＢ２２、画面更新結果ＤＢ２３、及び分類理由ＤＢ２４の各々を構成する情報が記憶される情報記憶領域６０を有する。
【００６９】
ＣＰＵ４１は、画面検証支援プログラム５０を記憶部４３から読み出してメモリ４２に展開し、画面検証支援プログラム５０が有するプロセスを順次実行する。また、ＣＰＵ４１は、情報記憶領域６０から各種情報を読み出し、分類基準ＤＢ２１、アプリ実行設定ＤＢ２２、画面更新結果ＤＢ２３、及び分類理由ＤＢ２４の各々をメモリ４２に展開する。
【００７０】
画面検証支援プログラム５０は、ユーザ対話制御プロセス５１と、分類基準作成プロセス５２と、アプリ実行プロセス５３と、コールバック関数呼出制御プロセス５４と、画面更新結果記録プロセス５５と、画面更新結果分類プロセス５６とを有する。さらに、画面検証支援プログラム５０は、検証画面出力プロセス５７を有する。
【００７１】
ＣＰＵ４１は、ユーザ対話制御プロセス５１を実行することで、図１に示すユーザ対話制御部１１として動作する。また、ＣＰＵ４１は、分類基準作成プロセス５２を実行することで、図１に示す分類基準作成部１２として動作する。また、ＣＰＵ４１は、アプリ実行プロセス５３を実行することで、図１に示すアプリ実行部１３として動作する。また、ＣＰＵ４１は、コールバック関数呼出制御プロセス５４を実行することで、図１に示すコールバック関数呼出制御部１４として動作する。また、ＣＰＵ４１は、画面更新結果記録プロセス５５を実行することで、図１に示す、画面更新結果記録部１５として動作する。また、ＣＰＵ４１は、画面更新結果分類プロセス５６を実行することで、図１に示す画面更新結果分類部１６として動作する。また、ＣＰＵ４１は、検証画面出力プロセス５７を実行することで、図１に示す検証画面出力部１７として動作する。これにより、画面検証支援プログラム５０を実行したコンピュータ４０が、画面検証支援装置１０として機能することになる。
【００７２】
なお、画面検証支援プログラム５０により実現される機能は、例えば半導体集積回路、より詳しくはＡＳＩＣ（Application Specific Integrated Circuit）等で実現することも可能である。
【００７３】
次に、本実施形態に係る画面検証支援装置１０の作用について説明する。ユーザ対話制御部１１を介して、ユーザからウェブアプリケーションの実行設定が要求されると、画面検証支援装置１０において、図１９に示す画像検証支援処理が実行される。なお、以下においても、上記と同様に、実行されるウェブアプリケーションに、図４に示す３つのコールバック関数の呼び出しが含まれる例について説明する。
【００７４】
ステップＳ１０で、ユーザ対話制御部１１が、例えば、図２０に示すような、実行設定登録画面７１を生成して表示装置に表示し、ユーザからの実行設定の登録を受け付ける。ユーザは、実行設定登録画面７１のテキストボックス７１Ａに、実行設定するウェブアプリケーションのＵＲＬを入力し、登録ボタン７１Ｂを選択する。登録ボタン７１Ｂが選択されると、ユーザ対話制御部１１は、テキストボックス７１Ａに入力されたＵＲＬを読み取り、アプリ実行部１３へ受け渡す。アプリ実行部１３は、受け渡されたＵＲＬに、実行設定ＩＤを付与して、実行設定ＤＢ２２に記録する。アプリ実行部１３は、実行設定ＤＢ２２に記録されたＵＲＬに対して、ＨＴＴＰリクエストを送信する。そして、ユーザ対話制御部１１は、ウェブサーバから返信されたＨＴＭＬを受信する。
【００７５】
なお、ステップＳ１０において、実行設定登録画面７１から取消ボタン７１Ｃが選択された場合には、画面検証支援処理を終了するようにすればよい。
【００７６】
次に、ステップＳ２０で、ユーザ対話制御部１１が、例えば、図２１に示すような、フラグ設定対象登録画面７２を生成して表示装置に表示し、ユーザから、Ｓｅｑフラグ及びＴｅｍｐフラグを設定する対象となるＨＴＭＬの要素の指定を受け付ける。なお、ユーザからの指定を受け付けることなく、又はユーザからの指定とあわせて、ＨＴＭＬにおけるＩＤ属性が付与された要素を自動で指定するようにしてもよい。ユーザ対話制御部１１は、フラグ設定対象登録画面７２の更新前ＨＴＭＬ表示領域７２Ａに、上記ステップＳ１０で受け付けたＨＴＭＬを表示する。ユーザは、フラグ設定対象登録画面７２に表示されたＨＴＭＬを参照して、テキストボックス７２Ｂに、例えば、「｛タグ名｝＃｛ＩＤ｝」の書式で、フラグの設定を指定する要素を入力し、登録ボタン７２Ｃを選択する。登録ボタン７２Ｃが選択されると、ユーザ対話制御部１１は、テキストボックス７２Ｂに入力された要素を読み取り、分類基準作成部１２へ受け渡す。
【００７７】
なお、ステップＳ２０において、フラグ設定対象登録画面７２から取消ボタン７２Ｄが選択された場合には、画面検証支援処理を終了するようにすればよい。
【００７８】
分類基準作成部１２は、分類基準作成部１２は、指定されたＨＴＭＬの各要素に対するＳｅｑフラグ及びＴｅｍｐフラグの設定のあらゆる組合せの各々を、分類基準として作成し、分類基準ＤＢ２１に記録する。ここでは、図１０に示す分類基準ＤＢ２１が作成されたものとする。
【００７９】
次に、ステップＳ３０で、アプリ実行部１３及びコールバック関数呼出制御部１４が、分類基準作成部１２により作成された分類基準毎に、コールバック関数のあらゆる呼出順序で網羅的にウェブアプリケーションを実行する。例えば、図１０に示す分類基準ＤＢ２１における分類基準２３を適用する場合、図２２の上図に示すように、更新前のＨＴＭＬ８１の所定の要素に、分類基準２３に従ったＴｅｍｐフラグ８５Ａ及びＳｅｑ８５Ｂフラグが設定される。コールバック関数呼出制御部１４が、コールバック関数の呼出順序を、順序ＩＤ＝Ｒ５４６が示す順序（Ｆ５⇒Ｆ４⇒Ｆ６）となるように制御した結果、図２２の下図に示すように、ＨＴＭＬ８２が更新されたとする。更新前のＨＴＭＬ８１に設定されたフラグは、更新されたＨＴＭＬ８２においても、そのまま設定されている。画面更新結果記録部１５は、図２３に示すように、このＨＴＭＬ８２をＤＯＭ８３に変換し、分類基準２３及び順序ＩＤ＝Ｒ５４６と対応付けて、画面更新結果ＤＢ２３に記録する。ＨＴＭＬ８２に設定されたフラグは、ＤＯＭ８３においても、そのまま設定されている。
【００８０】
なお、画面更新結果記録部１５は、順序ＩＤ＝Ｒ５４６のコールバック関数呼出順序でのウェブアプリケーションを実行している途中で、コールバック関数Ｆ５が実行された後の画面更新結果、及びコールバック関数Ｆ４が実行された後の画面更新結果も取得する。したがって、分類基準２３が適用され、かつ順序ＩＤ＝Ｒ５４６のコールバック関数呼出順序でのウェブアプリケーションの実行が完了した段階では、以下の画面更新結果が得られることになる。
・分類基準２３及び順序ＩＤ＝Ｒ５に対応する画面更新結果
・分類基準２３及び順序ＩＤ＝Ｒ５４に対応する画面更新結果
・分類基準２３及び順序ＩＤ＝Ｒ５４６に対応する画面更新結果
【００８１】
分類基準の全てについて、コールバック関数の呼出順序の全てに対応する画面更新結果が得られたら、処理はステップＳ４０へ移行し、図２４に詳細を示す同値分類処理が実行される。
【００８２】
図２４に示す同値分類処理のステップＳ４１のループ処理で、画面更新結果分類部１６が、分類基準ＤＢ２１から、分類基準を１つずつ選択して分類基準ａに設定し、分類基準ａについて、ステップＳ４２以降の処理を実行する。
【００８３】
ステップＳ４２のループ処理では、画面更新結果分類部１６が、画面更新結果ＤＢ２３を参照して、分類基準ａの画面更新結果から同値集合ＩＤが未決定のものを１つずつ選択して、画面更新結果Ｒｂに設定する。そして、画面更新結果分類部１６が、画面更新結果Ｒｂについて、ステップＳ４３以降の処理を実行する。
【００８４】
ステップＳ４３で、画面更新結果分類部１６が、分類基準ａの画面更新結果ＤＢ２３に、同値集合ＩＤが記録されている画面更新結果が存在するか否かを判定する。同値集合ＩＤが記録されている画面更新結果が存在する場合には、処理はステップＳ４４へ移行し、存在しない場合には、処理はステップＳ６８へ移行する。
【００８５】
ステップＳ４４のループ処理では、画面更新結果分類部１６が、上記ステップＳ４３で存在すると判定した、分類基準ａの画面更新結果ＤＢ２３に記録されている同値集合ＩＤを１つずつ選択してＳｃに設定する。また、画面更新結果分類部１６は、同値集合ＩＤとしてＳｃが付与された画面更新結果のいずれかをＲｃに設定する。そして、同値集合ＩＤ＝Ｓｃについて、ステップＳ４５以降の処理を実行する。
【００８６】
ステップＳ４５で、画面更新結果分類部１６が、後段の処理で使用される一時記憶領域である理由記憶領域を初期化する。次に、ステップＳ５０で、図２５に詳細を示す要素比較処理が実行される。
【００８７】
図２５に示す要素比較処理のステップＳ５１のループ処理で、画面更新結果分類部１６が、順序木であるＤＯＭ構造で表された画面更新結果Ｒｂから、ルートノードに相当する要素（ＨＴＭＬ）の次の階層から、順序木の順序性に従った順番で要素を１つずつ選択して要素ｄに設定する。そして、画面更新結果分類部１６は、要素ｄについて、ステップＳ５２〜Ｓ６３の処理を実行する。
【００８８】
ステップＳ５２では、画面更新結果分類部１６が、画面更新結果Ｒｃから、画面更新結果Ｒｂの要素ｄと同一階層で、かつ順序木の順序性に従った順番が同一の要素を選択し、要素ｄ’に設定する。そして、画面更新結果分類部１６は、要素ｄのタグ名と要素ｄ’のタグ名とが等しいか否かを判定し、等しい場合には、処理はステップＳ５３へ移行し、異なる場合には、処理はステップＳ６３へ移行する。
【００８９】
一例として、図２６に、分類基準ａが分類基準２３、Ｒｂが、順序ＩＤ＝Ｒ５４６についての画面更新結果、Ｒｃが、順序ＩＤ＝Ｒ５６４についての画面更新結果の場合における、ＤＯＭの構文木構造の比較例を示す。ＲｂのＤＯＭ８３Ｂのタグ名「Ｐ」の要素が要素ｄに設定されている場合、ＲｃのＤＯＭ８３Ｃにおいて、要素ｄと同じく、ルートノードの次の階層における２番目の要素であるタグ名「Ｐ」の要素が要素ｄ’に設定される（図２６中の「比較（１）」）。この場合、要素ｄのタグ名及び要素ｄ’のタグ名は、共に「Ｐ」で等しいため、処理はステップＳ５３へ移行する。
【００９０】
ステップＳ５３では、画面更新結果分類部１６が、要素ｄにＴｅｍｐフラグが設定されているか否かを判定する。要素ｄにＴｅｍｐフラグが設定されている場合には、処理はステップＳ５４へ移行し、設定されていない場合には、処理はステップＳ５８へ移行する。例えば、上記の図２６中の「比較（１）」の例の場合、要素ｄには、Ｔｅｍｐフラグが設定されているため、処理はステップＳ５４へ移行する。
【００９１】
ステップＳ５４では、要素ｄの内包文字列及び要素ｄ’の内包文字列の一方が初期状態（更新されていない状態、例えば、Ｎｕｌｌ）か否かを判定する。Ｔｅｍｐフラグが設定されている場合には、要素間の同値性の判断において、内包文字列の相違を無視することを示す。ただし、一方の要素の内包文字列が更新された状態で、他方の要素の内包文字列が初期状態であることにより、要素間の内包文字列が相違する場合には、両要素は相違するものとして扱う。要素ｄの内包文字列及び要素ｄ’の内包文字列の一方が初期状態の場合には、処理はステップＳ５５へ移行する。
【００９２】
ステップＳ５５では、画面更新結果分類部１６が、画面更新結果Ｒｂが画面更新結果Ｒｃと同値にならない理由として、要素ｄと要素ｄ’の内包文字列が不一致である旨を、理由記憶領域に記録して、処理はステップＳ５６へ移行する。上記ステップＳ５４が否定判定の場合には、処理はステップＳ５５をスキップして、ステップＳ５６へ移行する。なお、要素ｄ及び要素ｄ’のいずれもが、内包文字列を持たない場合も、ステップＳ５４は否定判定される。
【００９３】
ステップＳ５６では、画面更新結果分類部１６が、要素ｄの子要素と、要素ｄ’の子要素とが、１対１で対応しているか否かを判定する。子要素が１対１で対応しているとは、要素ｄ及び要素ｄ’の各々が、同じ数の子要素を持ち、その子要素の各々の内包文字列が同一であることを意味し、子要素の並び順は問わない。要素ｄの子要素と、要素ｄ’の子要素とが、１対１で対応していない場合には、処理はステップＳ５７へ移行する。
【００９４】
ステップＳ５７では、画面更新結果分類部１６が、画面更新結果Ｒｂが画面更新結果Ｒｃと同値にならない理由として、要素ｄと要素ｄ’とで、子要素が１対１で対応していない旨を、理由記憶領域に記録する。要素ｄと要素ｄ’とで、子要素が１対１で対応している場合には、ステップＳ５７の処理はスキップされる。なお、要素ｄ及び要素ｄ’のいずれもが、子要素を持たない場合も、要素ｄと要素ｄ’との子要素は１対１で対応すると判定する。そして、画面更新結果Ｒｂから次の要素を選択して、ステップＳ５１のループ処理を繰り返す。
【００９５】
上記ステップＳ５３で、要素ｄにＴｅｍｐフラグが設定されていないと判定されて、処理がステップＳ５８へ移行した場合には、画面更新結果分類部１６が、要素ｄの内包文字列と要素ｄ’の内包文字列とが一致するか否かを判定する。一致しない場合には、処理はステップＳ５９へ移行する。ステップＳ５９では、画面更新結果分類部１６が、画面更新結果Ｒｂが画面更新結果Ｒｃと同値にならない理由として、要素ｄと要素ｄ’の内包文字列が不一致である旨を、理由記憶領域に記録して、処理はステップＳ６０へ移行する。要素ｄの内包文字列と要素ｄ’の内包文字列とが一致する場合には、処理はステップＳ５９をスキップして、ステップＳ６０へ移行する。
【００９６】
ステップＳ６０では、画面更新結果分類部１６が、要素ｄにＳｅｑフラグが設定されているか否かを判定する。要素ｄにＳｅｑフラグが設定されている場合には、処理はステップＳ６１へ移行する。例えば、図２６中の「比較（２）」又は「比較（３）」の場合、要素ｄには、Ｓｅｑフラグが設定されているため、処理はステップＳ５４へ移行する。
【００９７】
ステップＳ６１では、画面更新結果分類部１６が、要素ｄの子要素と、要素ｄ’の子要素とが一致しているか否かを判定する。子要素が一致しているとは、要素ｄ及び要素ｄ’の各々が、同じ数の子要素を持ち、その子要素の各々の内包文字列が同一であり、かつ子要素の並び順も一致している場合である。要素ｄと要素ｄ’との子要素が一致していない場合には、処理はステップＳ６２へ移行する。
【００９８】
ステップＳ６２では、画面更新結果分類部１６が、画面更新結果Ｒｂが画面更新結果Ｒｃと同値にならない理由として、要素ｄと要素ｄ’とで、子要素が一致していない旨を、理由記憶領域に記録する。要素ｄと要素ｄ’との子要素が一致している場合には、ステップＳ６２の処理はスキップされる。なお、要素ｄ及び要素ｄ’のいずれもが、子要素を持たない場合も、要素ｄと要素ｄ’との子要素は一致すると判定する。そして、画面更新結果Ｒｂから次の要素を選択して、ステップＳ５１のループ処理を繰り返す。
【００９９】
上記ステップＳ６０で、要素ｄにＳｅｑフラグが設定されていないと判定された場合には、要素ｄと要素ｄ’との子要素の並び順まで含めて一致しているか否かを判定する必要はない。したがって、処理はステップＳ５６へ移行し、要素ｄと要素ｄ’との子要素が１対１で対応しているか否かを判定する。
【０１００】
上記ステップＳ５２で、要素ｄのタグ名と要素ｄ’のタグ名とが異なると判定された場合には、処理はステップＳ６３へ移行する。ステップＳ６３では、画面更新結果分類部１６が、画面更新結果Ｒｂが画面更新結果Ｒｃと同値とならない理由として、画面更新結果Ｒｂと画面更新結果Ｒｃとの構文木構造が、要素ｄにおいて相違する旨を、理由記憶領域に記録する。そして、画面更新結果Ｒｂから次の要素を選択して、ステップＳ５１のループ処理を繰り返す。
【０１０１】
画面更新結果Ｒｂの要素で、要素ｄに未設定の要素が存在しなくなった場合には、ステップＳ５１のループ処理を抜けて、同値分類処理（図２４）に戻る。なお、要素ｄの子要素として、上記ステップＳ５６で、１対１で対応するか否かを判定された要素、又は上記ステップＳ６１で、一致するか否かを判定された要素については、要素ｄに設定する対象から除外する。
【０１０２】
図２６の例で、上記の要素比較処理を具体的に説明する。なお、図２６中の「比較（１）」、「比較（２）」、及び「比較（３）」のいずれの場合も、要素ｄと要素ｄ’のタグ名は等しいため、ステップＳ５３以降の処理について説明する。
【０１０３】
「比較（１）」で示す要素の比較では、要素“Ｐ＃ｄａｔｅ”にＴｅｍｐフラグが設定されており、いずれの要素も内包文字列（時刻）が更新されており、いずれの要素も子要素を持たない。したがって、処理はステップＳ５３→Ｓ５４→Ｓ５６と移行し、要素“Ｐ＃ｄａｔｅ”に関しては、理由記憶領域に同値とならない理由は記録されない。すなわち、Ｒｂ（ＤＯＭ８３Ｂ）の要素“Ｐ＃ｄａｔｅ”と、Ｒｃ（ＤＯＭ８３Ｃ）の要素“Ｐ＃ｄａｔｅ”とは同値であると判定される。
【０１０４】
「比較（２）」で示す要素の比較では、要素“ＵＬ＃ｒａｎｋｉｎｇ”にＳｅｑフラグが設定されており、いずれの要素も内包文字列を持たず、いずれの要素も子要素を持つ。また、その子要素である要素“ＬＩ”の各々は、並び順まで含め一致している。したがって、処理はステップＳ５３→Ｓ５８→Ｓ６０→Ｓ６１と移行し、要素“ＵＬ＃ｒａｎｋｉｎｇ”に関しては、理由記憶領域に同値とならない理由は記録されない。すなわち、Ｒｂ（ＤＯＭ８３Ｂ）の要素“ＵＬ＃ｒａｎｋｉｎｇ”と、Ｒｃ（ＤＯＭ８３Ｃ）の要素“ＵＬ＃ｒａｎｋｉｎｇ”とは同値であると判定される。
【０１０５】
「比較（３）」で示す要素の比較では、要素“ＳＶＧ＃ｍａｐ”にＳｅｑフラグが設定されており、いずれの要素も内包文字列を持たず、いずれの要素も子要素を持つ。また、その子要素である要素“ＣＩＲＣＬＥ”の各々は、１対１で対応はしているが、並び順は一致していない。したがって、処理はステップＳ５３→Ｓ５８→Ｓ６０→Ｓ６１→Ｓ６２と移行し、要素“ＵＬ＃ｒａｎｋｉｎｇ”に関して、理由記憶領域に同値とならない理由（子要素の不一致）が記録される。すなわち、Ｒｂ（ＤＯＭ８３Ｂ）の要素“ＳＶＧ＃ｍａｐ”と、Ｒｃ（ＤＯＭ８３Ｃ）の要素“ＳＶＧ＃ｍａｐ”とは同値ではないと判定される。
【０１０６】
次に、図２４に示す同値分類処理のステップＳ６５で、画面更新結果分類部１６が、理由記憶領域に、１つでも理由が記録されているか否かを判定する。理由が記録されている場合には、処理はステップＳ６６へ移行し、理由が記録されていない場合には、処理はステップＳ６７へ移行する。
【０１０７】
ステップＳ６７では、画面更新結果分類部１６が、理由記憶領域に理由が記録されていないことを受けて、画面更新結果Ｒｂは、画面更新結果Ｒｃと同値であると判定する。そして、画面更新結果分類部１６は、画面更新結果Ｒｂの同値集合ＩＤとして、画面更新結果Ｒｃの同値集合ＩＤと同じＳｃを設定して、画面更新結果ＤＢ２３に記録し、処理はステップＳ４４のループ処理を抜ける。そして、分類基準ａの画面更新結果ＤＢ２３から、同値集合ＩＤが未決定の次の画面更新結果Ｒｂを選択して、ステップＳ４２のループ処理を繰り返す。
【０１０８】
一方、ステップＳ６６では、分類基準ａの画面更新結果ＤＢ２３に記録されている同値集合ＩＤのうち、Ｓｃに未設定の同値集合ＩＤが残っているか否かを判定する。Ｓｃに未設定の同値集合ＩＤが残っている場合には、次の同値集合ＩＤを選択してＳｃに設定し、ステップＳ４４のループ処理を繰り返す。分類基準ａの画面更新結果ＤＢ２３に記録されている全ての同値集合ＩＤをＳｃに設定済みとなった場合には、処理はステップＳ６８へ移行する。
【０１０９】
ステップＳ６８では、上記ステップＳ６５における、理由記憶領域に理由が記録されているとの判定結果を受けて、画面更新結果分類部１６が、画面更新結果Ｒｂは、画面更新結果Ｒｃと同値ではないと判定する。そして、画面更新結果分類部１６は、画面更新結果Ｒｂの同値集合ＩＤとして、ユニークな値（Ｓｂ）を設定して、画面更新結果ＤＢ２３に記録する。
【０１１０】
次に、ステップＳ６９で、画面更新結果分類部１６が、分類基準ａについての分類理由ＤＢ２４の行がＳｂ、列がＳｃ（又は、行がＳｃ、列がＳｂ）に対応するセルに、理由記憶領域に記録されている理由を記録する。複数の理由が記録されている場合には、全ての理由を、同一セルに記録する。そして、処理はステップＳ４４のループ処理を抜け、分類基準ａの画面更新結果ＤＢ２３から、同値集合ＩＤが未決定の次の画面更新結果Ｒｂを選択して、ステップＳ４２のループ処理を繰り返す。
【０１１１】
分類基準ａの画面更新結果の全てについて、同値集合ＩＤが決定済みとなった場合には、ステップＳ４２のループ処理を抜ける。そして、全ての分類基準について分類基準ａに設定済みとなった場合には、ステップＳ４１のループ処理を抜け、画面検証支援処理（図１９）に戻る。
【０１１２】
次に、図１９に示す画面検証支援処理のステップＳ７０で、図２７に詳細を示す画面表示処理が実行される。
【０１１３】
図２７に示す画面表示処理のステップＳ７１で、検証画面出力部１７が、分類基準毎に、同値集合数が、理想的な同値集合数（ＩＣＮ）と等しくなく、かつＩＣＮに近いほど大きくなり、同値集合数が０に近いほど小さくなる強調度１を算出する。検証画面出力部１７は、例えば（３）式により分類基準毎の強調度１を算出する。図２８に、ＩＣＮ＝７とした場合における分類基準毎の同値集合数（ＣＮ）及び強調度１の一例を示す。
【０１１４】
次に、ステップＳ７２で、検証画面出力部１７が、例えば図１７に示す検証画面３０の分類基準選択スライドバー３１を、ユーザ対話制御部１１を介して、表示装置に表示する。具体的には、検証画面出力部１７は、所定長さのバー３１Ａを作成し、バー３１Ａの一端を同値集合数の最小値（図２８の例では、「２」）、他端を同値集合数の最大値（図２８の例では、「１５」）とし、バー３１Ａの各位置に同値集合数を対応させる。そして、検証画面出力部１７は、バー３１Ａに沿って、各分類基準の分類基準名（例えば、「“基準”＋基準ＩＤ」）を、その分類基準における同値集合数に対応する位置に配置する。この際、検証画面出力部１７は、上記ステップＳ７１で算出した分類基準毎の強調度１が大きい程、分類基準名の文字サイズを大きくする。また、検証画面出力部１７は、初期設定として、つまみ３１Ｂを、強調度１が最大値となる分類基準の位置に配置する。図２８の例では、強調度１が最大値となる分類基準は、分類基準２２及び２３である。強調度１が最大値となる分類基準が複数存在する場合には、いずれかを選択すればよい（図１７の例では分類基準２３）。
【０１１５】
次に、ステップＳ７３で、検証画面出力部１７が、つまみ３１Ｂの位置に対応する分類基準について、コールバック関数集合毎に、検証の際に注目すべき度合いが高いほど大きい値となる強調度２を、例えば（４）式により算出する。図２９に、分類基準２３におけるコールバック関数集合毎の強調度２の一例を示す。あわせて、そのコールバック関数集合に含まれるコールバック関数の数（ＦＮ）、そのコールバック関数集合に属するコールバック呼出順序における画面更新結果に付与された同値集合ＩＤ、及び同値集合数（ＣＮ）を示す。ＦＮ、同値集合ＩＤ、及びＣＮは、該当の分類基準における画面更新結果ＤＢ２３から得られる。
【０１１６】
次に、ステップＳ７４で、検証画面出力部１７が、検証画面３０の分類結果表示領域３２に、分類基準選択スライドバー３１で選択された分類基準（ここでは、分類基準２３）についての分類結果を表示する。具体的には、検証画面出力部１７は、各コールバック関数集合に対応するノード３３を、コールバック関数集合の包含関係に基づいて、エッジで接続して配置する。また、検証画面出力部１７は、各ノード３３内に、コールバック関数集合名（例えば、含まれるコールバック関数名を連結したもの）を表示する。さらに、検証画面出力部１７は、画面更新結果ＤＢ２３を参照して、各ノード３３内に、そのコールバック関数集合に属するコールバック呼出順序と、対応する同値集合ＩＤとを表示する。検証画面出力部１７は、ノード３３に対応するコールバック関数集合について算出された強調度２が大きい程、ノード３３内の文字サイズを大きくする。
【０１１７】
次に、ステップＳ７５で、検証画面出力部１７が、同値集合数が２以上であるコールバック関数集合に対応するノード３３に紐付けて、ノード３３内に含まれる同値集合ＩＤが示す同値集合同士が同値とならなかった理由を理由一覧３４として表示する。具体的には、検証画面出力部１７は、該当の分類基準（ここでは、分類基準２３）についての分類理由ＤＢ２４の行及び列の組み合わせが、ノード３３内に表示されている同値集合ＩＤとなる部分を抜き出す。例えば、図１７の検証画面３０の例では、コールバック関数集合：Ｆ４×Ｆ５に対応するノード３３内には、同値集合ＩＤとして、Ｓ２及びＳ６が表示されている。したがって、検証画面出力部１７は、例えば、図１４に示す分類基準２３の分類理由ＤＢ２４のうち、行がＳ６、列がＳ２の部分を抜き出して、理由一覧３４として表示する。そして、検証画面出力部１７は、ノード３３と理由一覧３４とをエッジで接続する。そして、画面表示処理を終了して、画面検証支援処理（図１９）に戻り、画面検証支援処理自体も終了する。
【０１１８】
なお、ユーザにより、分類基準選択スライドバー３１のつまみ３１Ｂがバー３１Ａ上でスライドされ、分類基準の選択が変更された場合には、検証画面出力部１７は、選択された分類基準について、上記ステップＳ７３〜Ｓ７５の処理を実行する。分類基準を選択する際に、強調度１の大きさに応じた文字サイズで表示されている分類基準名から選択することができるため、選択する分類基準のチューニングを容易に行うことができる。
【０１１９】
また、検証画面出力部１７は、ユーザにより、検証画面３０上からいずれかのノード３３がクリックされるなどして選択された場合に、図３０に示すように、ＤＯＭの構造比較画面３５を、検証画面３０上に重畳して表示するようにしてもよい。この場合、検証画面出力部１７は、分類基準選択スライドバー３１で選択されている分類基準についての画面更新結果ＤＢ２３から、選択されたノード３３内に表示されている同値集合ＩＤが付与された画面更新結果を取得して、表示すればよい。また、検証画面出力部１７は、構造比較画面３５で表示しているＤＯＭの要素のうち、選択されたノード３３に紐付いている理由一覧３４に記載されている要素、すなわち、画面更新結果が同値とならなかった原因となる要素を強調表示するようにしてもよい。
【０１２０】
上記のような検証画面３０を表示することにより、ユーザは、分類基準選択スライドバー３１上で強調表示された分類基準名から、少数かつ適切な分類基準を選択することができる。
【０１２１】
また、同値集合ＩＤが１つのみ表示されているノード３３に対応するコールバック関数集合（図１７の例では、Ｆ４×Ｆ６、及びＦ５×Ｆ６）では、コールバック関数をいずれの順序で呼び出しても、同値な画面更新結果が得られることを読み取ることができる。一方で、２以上の同値集合ＩＤが表示されているノード３３からは、以下の情報が読み取れる。例えば、図１７の例で、コールバック関数集合Ｆ４×Ｆ５、及びＦ４×Ｆ５×Ｆ６の各々は、呼び出したコールバック関数がそれぞれ同じなのにも関わらず、その呼出順序の違いによって、異なる画面更新結果になることが読み取れる。
【０１２２】
これは、２以上の同値集合ＩＤが表示されているノード３３から、仕様違反を引き起こすコールバック関数の呼出順序の候補を把握することができることを意味する。例えば、コールバック関数集合：Ｆ４×Ｆ５のノード３３から、コールバック関数の呼出順序Ｆ４⇒Ｆ５又はＦ５⇒Ｆ４が、仕様違反を引き起こすコールバック関数の呼出順序であることが読み取れる。また、そのノード３３に紐付いた理由一覧３４は、どの要素がどのような仕様違反となっているかを直感的に把握できる表現とすることができる。そのため、理由一覧３４も参照することにより、コールバック関数の呼出順序の相違により、画面更新結果のどの要素が仕様違反となっているかを読み取ることができる。さらに、構造比較画面３５を表示させてＤＯＭを確認することで、仕様違反を引き起こすコールバック関数の呼出順序の候補のうち、いずれのコールバック関数の呼出順序が仕様違反を引き起こすものであるかを特定することができる。
【０１２３】
また、ノード及びエッジを用いたグラフで、コールバック関数集合の包含関係を表し、強調度２を用いてノード３３を強調表示することにより、仕様違反を引き起こす、より根本的な原因から特定することができるため、効率よく検証を行うことができる。
【０１２４】
具体的には、図１７及び図３０の例で、ユーザは、最も強調表示されたコールバック関数集合：Ｆ４×Ｆ５に注目し、構造比較画面３５を表示させて、同値集合Ｓ２及びＳ６の各々に対応するＤＯＭを目視確認する。そして、ユーザは、同値集合Ｓ２が、ＵＬ＃ｒａｎｋｉｎｇ要素の子要素の並び順が不一致であることにより、仕様違反を引き起こしていること、及び同値集合Ｓ６は仕様違反ではないことを特定する。すなわち、コールバック関数の呼出順序Ｆ４⇒Ｆ５が、ＵＬ＃ｒａｎｋｉｎｇ要素の仕様違反を引き起こすことを特定することができる。
【０１２５】
次に、ユーザは、コールバック関数集合：Ｆ４×Ｆ５と包含関係があり、かつ強調表示されている他の関数集合として、コールバック関数集合：Ｆ４×Ｆ５×Ｆ６に注目する。ユーザは、既に判明した仕様違反の理由「ＵＬ＃ｒａｎｋｉｎｇ要素の子要素不一致」以外の理由で同値分類されていない同値集合Ｓ７及びＳ９の各々に対応するＤＯＭを目視確認する。そして、ユーザは、同値集合Ｓ９が、ＳＶＧ＃ｍａｐ要素の子要素の並び順が不一致であることにより、仕様違反を引き起こしていること、及び同値集合Ｓ７は仕様違反ではないことを特定する。同値集合Ｓ６を生成するコールバック関数呼出順序Ｆ５⇒Ｆ４は、仕様違反を引き起こさないことが既に判明している。したがって、コールバック関数の呼出順序Ｆ６⇒Ｆ４が、ＳＶＧ＃ｍａｐ要素の仕様違反を引き起こすことを特定することができる。
【０１２６】
このように、図１７及び図３０の例では、以下の根本原因を効率良く絞りこむことができる。
・ＵＬ＃ｒａｎｋｉｎｇ要素の仕様違反が、コールバック関数の呼出順序Ｆ５⇒Ｆ４で引き起こされること
・ＳＶＧ＃ｍａｐ要素の仕様違反が、コールバック関数の呼出順序Ｆ６⇒Ｆ４で引き起こされること
【０１２７】
以上説明したように、本実施形態に係る画面検証支援装置によれば、複数のＷｅｂＡＰＩが並列に呼び出されるウェブアプリケーションの画面の仕様違反を検証するために、ＷｅｂＡＰＩの返信に応じたコールバック関数の呼出順序毎の画面更新結果を取得する。そして、検証対象の削減を図るため、取得した画面更新結果を同値の画面更新結果毎に分類する。この同値分類を行うための分類基準を規定するフラグを、コールバック関数の実行により更新される可能性のあるＨＴＭＬの要素に付与しておく。フラグでは、画面更新結果の同値性を判断する際に、子要素の並び順を比較対象とするか否か、及び内包文字列の同値性を比較対象とするか否かを設定することができる。このようなフラグを設定することにより、単純な文字列の一致度により画面更新結果を分類する場合に比べ、人が目視により検証する際に考慮するような、柔軟な分類基準を適用することができる。そして、フラグの設定のあらゆる組み合わせにより複数の分類基準を作成し、その中から、画面更新結果の同値集合数が、理想的な同値集合数より大きく、かつ理想的な同値集合数に近い分類数となる適切な分類基準を特定する。したがって、特定された分類基準にしたがって画面更新結果を分類し、同値の画面更新結果から１つを検証対象として選択すればよいため、アプリケーション画面の検証において、少数かつ適切な検証対象を特定することができる。
【０１２８】
また、コールバック関数集合の包含関係を表すグラフを表示し、仕様違反を含むコールバック関数集合のうち、検証の際に注目すべき度合い包含関係の上位階層ほど強調して表示するため、仕様違反を引き起こす根本原因を効率よく絞り込むことができる。
【０１２９】
さらに、コールバック関数の呼出順序の相違により、画面更新結果が同値とならなかった理由や、同値とならなかった画面更新結果の構造（ＤＯＭ）を表示することにより、より効率よく仕様違反の検証を行うことができる。
【０１３０】
なお、上記実施形態では、要素が持つ子要素の並び順を同値性の比較対象とする場合にＳｅｑフラグを設定し、要素の内包文字列の同値性を比較対象としない場合にＴｅｍｐフラグを設定する場合について説明したが、これに限定されない。Ｔｅｍｐフラグについても、要素の内包文字列の同値性を比較対象とする場合に設定するようにしてもよい。また、Ｓｅｑフラグについても、要素が持つ子要素の並び順を同値性の比較対象としない場合に設定するようにしてもよい。ただし、上記実施形態のようにフラグを設定することで、ＴｅｍｐフラグとＳｅｑフラグとが排他的な関係となるため、Ｔｅｍｐフラグ及びＳｅｑフラグの設定のあらゆる組合せから分類基準を作成する際に、フラグの組み合わせ数を少なくすることができる。これにより、分類基準の作成、及び分類基準毎の各種処理の計算コストを削減することができる。
【０１３１】
また、上記では、画面検証支援プログラム５０が記憶部４３に予め記憶（インストール）されている態様を説明したが、これに限定されない。開示の技術に係るプログラムは、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ＵＳＢメモリ等の記録媒体に記録された形態で提供することも可能である。
【０１３２】
以上の実施形態に関し、更に以下の付記を開示する。
【０１３３】
（付記１）
コンピュータに、
複数のコールバック関数が並列に実行されて生成されるウェブアプリケーションの画面について、前記複数のコールバック関数の呼出順序毎の画面の各々を示す階層化文書の各々に含まれ、かつ前記複数のコールバック関数の少なくとも１つにより更新される可能性がある予め定めた要素の各々に、前記階層化文書を同値性に基づいて分類するための分類基準を規定するフラグであって、同一階層かつ同一種別の要素間の比較の際に、該要素が持つ複数の子要素の順序の同値性を比較するか否かを示す順序同値性フラグ、及び該要素の内包文字列の同値性を比較するか否かを示す文字列同値性フラグを設定し、
前記順序同値性フラグ及び前記文字列同値性フラグの設定の組み合わせ毎に、複数の分類基準を作成し、
前記複数の分類基準の各々にしたがって、前記複数のコールバック関数の呼出順序毎の階層化文書の各々を分類した場合の分類数が、前記複数のコールバック関数の呼出順序に制約がないとした場合の基準分類数以上、かつ該基準分類数に近くなる分類基準を特定する、
処理を実行させる画面検証支援プログラム。
【０１３４】
（付記２）
前記複数の分類基準の各々の中で、前記特定した分類基準を強調して表示することをさらに含む処理を前記コンピュータに実行させる付記１記載の画面検証支援プログラム。
【０１３５】
（付記３）
前記階層化文書の各々が示す画面を生成するために実行されたコールバック関数集合毎に、該コールバック関数集合に含まれるコールバック関数の呼出順序毎の前記階層化文書の各々を前記特定した分類基準で分類した分類結果を表示すると共に、各コールバック関数集合の前記分類結果の表示を、前記コールバック関数集合の包含関係を表すように表示することをさらに含む処理を前記コンピュータに実行させる付記１又は付記２記載の画面検証支援プログラム。
【０１３６】
（付記４）
前記コールバック関数集合に含まれるコールバック関数の数が少ないほど、かつ前記分類結果が表す分類数が２に近いほど、前記分類結果の表示の強調の度合いを強くする付記３記載の画面検証支援プログラム。
【０１３７】
（付記５）
前記コールバック関数集合毎に、該コールバック関数集合に含まれるコールバック関数の呼出順序毎の前記階層化文書の各々を前記特定した分類基準で分類した場合に、同値とならない階層化文書において、要素が持つ複数の子要素の順序が同値でないか、又は要素の内包文字列が同値でない要素を特定して、該コールバック関数集合の分類結果に紐付けて表示することをさらに含む処理を前記コンピュータに実行させる付記３又は付記４記載の画面検証支援プログラム。
【０１３８】
（付記６）
前記コールバック関数集合毎の前記分類結果が選択された場合に、該分類結果に含まれる階層化文書を表示することをさらに含む処理を前記コンピュータに実行させる付記３〜付記５のいずれか１項記載の画面検証支援プログラム。
【０１３９】
（付記７）
前記複数のコールバック関数の少なくとも１つにより更新される可能性がある予め定めた要素を、ＨＴＭＬにおいてＩＤ属性が付与された要素、及びユーザにより指定された要素の少なくとも一方とする付記１〜付記６のいずれか１項記載の画面検証支援プログラム。
【０１４０】
（付記８）
複数のコールバック関数が並列に実行されて生成されるウェブアプリケーションの画面について、前記複数のコールバック関数の呼出順序毎の画面の各々を示す階層化文書の各々に含まれ、かつ前記複数のコールバック関数の少なくとも１つにより更新される可能性がある予め定めた要素の各々に、前記階層化文書を同値性に基づいて分類するための分類基準を規定するフラグであって、同一階層かつ同一種別の要素間の比較の際に、該要素が持つ複数の子要素の順序の同値性を比較するか否かを示す順序同値性フラグ、及び該要素の内包文字列の同値性を比較するか否かを示す文字列同値性フラグを設定し、前記順序同値性フラグ及び前記文字列同値性フラグの設定の組み合わせ毎に、複数の分類基準を作成する作成部と、
前記複数の分類基準の各々にしたがって、前記複数のコールバック関数の呼出順序毎の階層化文書の各々を分類した場合の分類数が、前記複数のコールバック関数の呼出順序に制約がないとした場合の基準分類数以上、かつ該基準分類数に近くなる分類基準を特定する特定部と、
を含む画面検証支援装置。
【０１４１】
（付記９）
前記特定部は、前記複数の分類基準の各々の中で、前記特定した分類基準を強調して表示する付記８記載の画面検証支援装置。
【０１４２】
（付記１０）
前記特定部は、前記階層化文書の各々が示す画面を生成するために実行されたコールバック関数集合毎に、該コールバック関数集合に含まれるコールバック関数の呼出順序毎の前記階層化文書の各々を前記特定した分類基準で分類した分類結果を表示すると共に、各コールバック関数集合の前記分類結果の表示を、前記コールバック関数集合の包含関係を表すように表示する付記８又は付記９記載の画面検証支援装置。
【０１４３】
（付記１１）
前記特定部は、前記コールバック関数集合に含まれるコールバック関数の数が少ないほど、かつ前記分類結果が表す分類数が２に近いほど、前記分類結果の表示の強調の度合いを強くする付記１０記載の画面検証支援装置。
【０１４４】
（付記１２）
前記特定部は、前記コールバック関数集合毎に、該コールバック関数集合に含まれるコールバック関数の呼出順序毎の前記階層化文書の各々を前記特定した分類基準で分類した場合に、同値とならない階層化文書において、要素が持つ複数の子要素の順序が同値でないか、又は要素の内包文字列が同値でない要素を特定して、該コールバック関数集合の分類結果に紐付けて表示する付記１０又は付記１１記載の画面検証支援装置。
【０１４５】
（付記１３）
前記特定部は、前記コールバック関数集合毎の前記分類結果が選択された場合に、該分類結果に含まれる階層化文書を表示する付記１０〜付記１２のいずれか１項記載の画面検証支援装置。
【０１４６】
（付記１４）
前記複数のコールバック関数の少なくとも１つにより更新される可能性がある予め定めた要素を、ＨＴＭＬにおいてＩＤ属性が付与された要素、及びユーザにより指定された要素の少なくとも一方とする付記８〜付記１３のいずれか１項記載の画面検証支援装置。
【０１４７】
（付記１５）
コンピュータに、
複数のコールバック関数が並列に実行されて生成されるウェブアプリケーションの画面について、前記複数のコールバック関数の呼出順序毎の画面の各々を示す階層化文書の各々に含まれ、かつ前記複数のコールバック関数の少なくとも１つにより更新される可能性がある予め定めた要素の各々に、前記階層化文書を同値性に基づいて分類するための分類基準を規定するフラグであって、同一階層かつ同一種別の要素間の比較の際に、該要素が持つ複数の子要素の順序の同値性を比較するか否かを示す順序同値性フラグ、及び該要素の内包文字列の同値性を比較するか否かを示す文字列同値性フラグを設定し、
前記順序同値性フラグ及び前記文字列同値性フラグの設定の組み合わせ毎に、複数の分類基準を作成し、
前記複数の分類基準の各々にしたがって、前記複数のコールバック関数の呼出順序毎の階層化文書の各々を分類した場合の分類数が、前記複数のコールバック関数の呼出順序に制約がないとした場合の基準分類数以上、かつ該基準分類数に近くなる分類基準を特定する、
処理を実行させる画面検証支援方法。
【０１４８】
（付記１６）
前記複数の分類基準の各々の中で、前記特定した分類基準を強調して表示することをさらに含む処理を前記コンピュータに実行させる付記１５記載の画面検証支援方法。
【０１４９】
（付記１７）
前記階層化文書の各々が示す画面を生成するために実行されたコールバック関数集合毎に、該コールバック関数集合に含まれるコールバック関数の呼出順序毎の前記階層化文書の各々を前記特定した分類基準で分類した分類結果を表示すると共に、各コールバック関数集合の前記分類結果の表示を、前記コールバック関数集合の包含関係を表すように表示することをさらに含む処理を前記コンピュータに実行させる付記１５又は付記１６記載の画面検証支援方法。
【０１５０】
（付記１８）
前記コールバック関数集合に含まれるコールバック関数の数が少ないほど、かつ前記分類結果が表す分類数が２に近いほど、前記分類結果の表示の強調の度合いを強くする付記１７記載の画面検証支援方法。
【０１５１】
（付記１９）
前記コールバック関数集合毎に、該コールバック関数集合に含まれるコールバック関数の呼出順序毎の前記階層化文書の各々を前記特定した分類基準で分類した場合に、同値とならない階層化文書において、要素が持つ複数の子要素の順序が同値でないか、又は要素の内包文字列が同値でない要素を特定して、該コールバック関数集合の分類結果に紐付けて表示することをさらに含む処理を前記コンピュータに実行させる付記１７又は付記１８記載の画面検証支援方法。
【０１５２】
（付記２０）
前記コールバック関数集合毎の前記分類結果が選択された場合に、該分類結果に含まれる階層化文書を表示することをさらに含む処理を前記コンピュータに実行させる付記１７〜付記１９のいずれか１項記載の画面検証支援方法。
【０１５３】
（付記２１）
前記複数のコールバック関数の少なくとも１つにより更新される可能性がある予め定めた要素を、ＨＴＭＬにおいてＩＤ属性が付与された要素、及びユーザにより指定された要素の少なくとも一方とする付記１５〜付記２０のいずれか１項記載の画面検証支援方法。
【０１５４】
（付記２２）
コンピュータに、
複数のコールバック関数が並列に実行されて生成されるウェブアプリケーションの画面について、前記複数のコールバック関数の呼出順序毎の画面の各々を示す階層化文書の各々に含まれ、かつ前記複数のコールバック関数の少なくとも１つにより更新される可能性がある予め定めた要素の各々に、前記階層化文書を同値性に基づいて分類するための分類基準を規定するフラグであって、同一階層かつ同一種別の要素間の比較の際に、該要素が持つ複数の子要素の順序の同値性を比較するか否かを示す順序同値性フラグ、及び該要素の内包文字列の同値性を比較するか否かを示す文字列同値性フラグを設定し、前記順序同値性フラグ及び前記文字列同値性フラグの設定の組み合わせ毎に、複数の分類基準を作成し、
前記複数の分類基準の各々にしたがって、前記複数のコールバック関数の呼出順序毎の階層化文書の各々を分類した場合の分類数が、前記複数のコールバック関数の呼出順序に制約がないとした場合の基準分類数以上、かつ該基準分類数に近くなる分類基準を特定する
ことを含む処理を実行させる画面検証支援プログラムを記憶した記憶媒体。
【符号の説明】
【０１５５】
１０   画面検証支援装置
１１   ユーザ対話制御部
１２   分類基準作成部
１３   アプリ実行部
１４   コールバック関数呼出制御部
１５   画面更新結果記録部
１６   画面更新結果分類部
１７   検証画面出力部
２１   分類基準データベース（ＤＢ）
２２   アプリ実行設定ＤＢ
２３   画面更新結果ＤＢ
２４   分類理由ＤＢ
３０   検証画面
３１   分類基準選択スライドバー
３２   分類結果表示領域
３３   ノード
３４   理由一覧
３５   構造比較画面
４０   コンピュータ
４１   ＣＰＵ
４２   メモリ
４３   記憶部
５０   画面検証支援プログラム
６０   情報記憶領域
７１   実行設定登録画面
７２   フラグ設定対象登録画面
【図１】
2017027108.tif 000007
【図２】
2017027108.tif 000008
【図３】
2017027108.tif 000009
【図４】
2017027108.tif 000010
【図５】
2017027108.tif 000011
【図６】
2017027108.tif 000012
【図７】
2017027108.tif 000013
【図８】
2017027108.tif 000014
【図９】
2017027108.tif 000015
【図１０】
2017027108.tif 000016
【図１１】
2017027108.tif 000017
【図１２】
2017027108.tif 000018
【図１３】
2017027108.tif 000019
【図１４】
2017027108.tif 000020
【図１８】
2017027108.tif 000021
【図１９】
2017027108.tif 000022
【図２０】
2017027108.tif 000023
【図２１】
2017027108.tif 000024
【図２２】
2017027108.tif 000025
【図２３】
2017027108.tif 000026
【図２４】
2017027108.tif 000027
【図２５】
2017027108.tif 000028
【図２６】
2017027108.tif 000029
【図２７】
2017027108.tif 000030
【図２８】
2017027108.tif 000031
【図２９】
2017027108.tif 000032
【図３０】
2017027108.tif 000033
【図１５】
2017027108.tif 000034
【図１６】
2017027108.tif 000035
【図１７】
2017027108.tif 000036