説明

プログラムによって表示される画面が仕様を満たすか判断するシステム

【課題】プログラムの処理によって順次表示される複数の画面が仕様を満たすかを、当該プログラムを実行することなく判断する。
【解決手段】本発明のシステムは、第1画面の仕様を定めた第1スキーマと、第2画面の仕様を定めた第2スキーマと、プログラムによる表示を第1から第2画面に切り替えさせるイベントとを記憶している。まず、第1スキーマに準拠した画面の表示中に発生したイベントに応じ実行される部分プログラムを、第1スキーマおよびイベントに基づきプログラムから抽出する。次に、第1スキーマに準拠する画面の集合から、当該集合に属する画面の表示中に発生したイベントに応じ表示される画面の集合を求める中間プログラムを、部分プログラムに基づき生成する。次に、第1画面が第1スキーマに準拠し、第1スキーマに中間プログラムを適用して得られる画面の集合が第2スキーマに準拠することを条件に、これらの画面が仕様を満たすと判断する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラムによって表示される画面が仕様を満たすか判断するシステムに関する。特に、本発明は、順次表示される複数の画面が予め定められた仕様を満たすかを静的に判断するシステムに関する。
【背景技術】
【0002】
近年、インターネット上で閲覧可能なウェブページなどの文書のデザインが多様になってきている。デザインのよいウェブページは見栄えがよいが、視覚障害者などの特定の利用者にとっては理解しにくい場合がある。また、ページの構造が規約に反し、ある種のウェブブラウザでは正常に閲覧できない場合もある。このため、従来、ウェブページなどの文書が予め定められた仕様を満たすかを判断し、理解のし易さを評価したり、修正すべき箇所を指摘するシステムが提案されている(非特許文献8および9を参照。)。また、HTMLやXMLなどの構造化文書の仕様を定めるための研究や、仕様を定めるためのスキーマ(Schema)などの研究が進められている(非特許文献2および非特許文献4から5を参照。)。
【0003】
非特許文献6および非特許文献7については実施の形態において参照する。
【非特許文献1】Yasuhiko Minamide: "Static approximation of dynamically generated Web pages", World Wide Web (WWW), 2005
【非特許文献2】FDR2 (Formal Systems)
【非特許文献3】Cristiano Calcagno, Philippa Gardner, Uri Zarfaty: "Context Logic and Tree Update", Principles of Programming Languages (POPL), 2005
【非特許文献4】Eugenio Di Sciascio, Francesco M. Donini, Marina Mongiello, Giacomo Piscitelli: "Web applications design and maintenance using Symbolic Model Checking", European Conference On Software Maintenance And Reengineering (CSMR), 2003
【非特許文献5】崔銀惠, 渡邊宏: "Web アプリケーションのクラス設計仕様に対するモデル化と検証", ソフトウェアテストシンポジウム, 2005
【非特許文献6】H. Comon, et al.: "Tree Automata Techniques and Applications", http://www.grappa.univ-lille3.fr/tata/, 1997
【非特許文献7】Haruo Hosoya and Benjamin Pierce: "Regular expression pattern matching for XML", Principles of programming languages (POPL), 2001
【非特許文献8】aDesigner (IBM)
【非特許文献9】Dreamweaver 8 (Macromedia)
【非特許文献10】鷲尾和則, 松下 誠, 井上 克郎:"JavaScriptを含んだHTML文書に対するデータフロー解析を用いた構文検証手法の提案", 電子情報通信学会技術研究報告, SS2002-22, Vol.102, No.370, pp.13-18, 2002
【非特許文献11】立石孝彰、斉藤新、宮下尚: "DHTMLのためのアクセシビリティ・チェックツール", http://spa.jssst.or.jp/2006/, SPA2006
【発明の開示】
【発明が解決しようとする課題】
【0004】
ウェブページによっては、静止画のみならず動画を含む場合がある。例えば、動画を生成するための規格として、Macromedia社のFlashや、DynamicHTMLなどが用いられている。動画は、ウェブページと共に提供されるプログラムによって静止画の表示を順次切り替えることにより実現される。静止画に関する技術を動画に応用しようとすると、そのプログラムを実際に実行したうえで、実行の結果として得られるそれぞれの静止画が仕様を満たすかを判断する必要がある。しかしながら、表示可能性のある全ての静止画が仕様を満たすか判断しようとすると、プログラムの実行状態の数が爆発的に増加し、現実的な時間で判断が完了しない場合があった。
【0005】
なお、プログラムを実行することなくプログラムの実行後の状態を解析する技術が提案されている(非特許文献1、3、10および11を参照。)。非特許文献1および10の技術によれば、プログラムを実行した結果として生成される文字列を、実際にそのプログラムを実行することなく解析することができる。しかしながら、これらの技術によっては、プログラムを実行した結果HTMLやXMLなどで記述された木構造のデータがどのように変更されるかを解析することはできない。また、非特許文献3には、プログラムを実行した結果として得られる木構造のデータが仕様を満たすかを判断する論理が示されている。しかしながら、この文献には、この論理に基づいて情報処理装置によってどのように仕様の充足性を判断するかについては記載されていない。また、非特許文献11においては、プログラムを実行した結果生成される文字列を解析する技術を、木構造のDOM(ドキュメント・オブジェクト・モデル)に対し応用すべきことが示唆されている。しかしながら、非特許文献1には、応用するための具体的な方法は記述されていない。
【0006】
そこで本発明は、上記の課題を解決することのできるシステム、方法およびプログラムを提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【課題を解決するための手段】
【0007】
上記課題を解決するために、本発明の1形態においては、アプリケーションプログラムによって順次表示される複数の画面が予め定められた仕様を満たすかを判断するシステムであって、第1画面の構成が満たすべき仕様を定めた第1スキーマ情報、第2画面の構成が満たすべき仕様を定めた第2スキーマ情報、および、アプリケーションプログラムによる表示を第1画面から第2画面に切り替えさせるイベントを記憶した仕様記憶部と、アプリケーションプログラムのうち、第1スキーマ情報に準拠した何れかの画面の表示中にイベントが発生したことに応じ実行される部分プログラムを、第1スキーマ情報およびイベントに基づいて抽出する抽出部と、第1スキーマ情報に準拠する画面の集合から、当該集合に属する画面の表示中にイベントが発生した場合に表示される画面の集合を求める中間プログラムを、部分プログラムに基づいて生成する生成部と、第1画面が第1スキーマ情報に準拠し、かつ、第1スキーマ情報に中間プログラムを適用して得られる画面の集合が第2スキーマ情報に準拠していることを条件として、複数の画面が予め定められた仕様を満たすと判断する判断部とを備えるシステムを提供する。また、当該システムとして情報処理装置を機能させるプログラムと、当該システムによって複数の画面が仕様を満たすかを判断する方法とを提供する。
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【発明の効果】
【0008】
本発明によれば、プログラムの処理によって順次表示される複数の画面のそれぞれが仕様を満たすことを、当該プログラムを実行することなく判断できる。
【発明を実施するための最良の形態】
【0009】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【0010】
図1は、情報処理システム10の全体構成を示す。情報処理システム10は、文書データベース20と、充足判断システム30とを備える。文書データベース20は、ウェブブラウザなどに対し複数の画面を順次表示させるための文書を記憶している。この文書は、例えば、HTML(Hyper Text Markup Language)などで記述された初期画面と、JavaScript(登録商標)などのプログラム言語で記述されたアプリケーションプログラムとを含む。この文書がウェブブラウザによって読み込まれると初期画面がウェブブラウザに表示される。表示された初期画面は、アプリケーションプログラムがウェブサーバまたはウェブブラウザにより実行されることにより順次変更される。この結果ウェブブラウザには複数の画面が順次表示される。
【0011】
充足判断システム30は、文書データベース20から文書を読み出す。そして、充足判断システム30は、読み出したこの文書に基づいて、アプリケーションプログラムによって順次表示される複数の画面が予め定められた仕様を満たすかを判断する。判断結果は利用者に出力される。
このように、本実施形態に係る情報処理システム10は、アプリケーションプログラムによって順次変更される画面のそれぞれが予め定められた仕様を満たすか否かを、実際にそのプログラムを実行することなく、それらの画面を表示させるための文書を解析することによって判断することを目的とする。
【0012】
図2は、文書データベース20に記憶されたデータの一例を示す。文書データベース20は、動画を含むウェブページなどを表示させるための文書を記憶している。この文書は、1行目から9行目に各種の設定情報を含み、10行目から49行目にヘッダ部分を含み、51行目から59行目に本体部分を含む。ヘッダ部分は、13行目から38行目までにJavaScriptで記述されたアプリケーションプログラムを含む。このアプリケーションプログラムは、ウェブページに表示を変更するための変更プログラムである。このアプリケーションプログラムは、ウェブページ上にチェックボックスを実現する。即ちこのアプリケーションプログラムは、表示したチェックボックスがマウスでクリックされるとそのチェックボックスをチェック状態に変更した画面を表示し、チェック状態のチェックボックスがマウスでクリックされるとそのチェックボックスをチェックされていない状態に変更した画面を表示する。
【0013】
詳細には、このアプリケーションプログラムは、16行目から36行目にcheckBoxEventという関数を定義する。この関数は、55行目に定義されたイベントの発生を条件に呼び出されるイベントハンドらとしての役割を果たす。この関数が呼び出されると、まず、18行目および19行目の条件判断が実行される。即ち、マウスにおいてIDが0のボタン(左ボタン)がクリックされたか、または、キーボードにおいてキーコードが32のキー(スペースキー)が押下されたかが判断される。それ以外の場合には35行目に処理を移してこの関数の処理を完了させる。
【0014】
左ボタンがクリックされるか、スペースキーが押下されると、20行目から34行目までの処理が実行される。まず、22行目において、チェックボックスがチェックされているか否かを示す属性"checked"が"true"か否かが判断される。チェックボックスがチェックされている場合には、アプリケーションプログラムは、この属性を"false"に変更することにより、チェックボックスからチェックを外す(24行目)。この場合、チェックボックスの隣に表示されていた入力欄をさらに削除してもよい(25行目)。
【0015】
一方、チェックボックスがチェックされていなかった場合には、アプリケーションプログラムは、属性"checked"を"true"に変更することにより、チェックボックスにチェックをつける(29行目)。この場合、アプリケーションプログラムは、チェックボックスの隣に入力欄を生成してもよい(31行目)。なお、説明の便宜上、以降の図3から図9までの説明は入力欄についての処理を行わないことを前提とする。入力欄についての処理を行う場合については、図10から図14において後述する。
【0016】
この文書は、アプリケーションプログラムに加えて、51行目から58行目に初期画面を含む。この初期画面はcheckという文字列と、その隣に並べたチェックボックスとを含む。54行目において属性checkedはfalseに設定されているので、このチェックボックスは初期状態においてチェックが外れた状態にある。チェックボックスに対しマウスのクリックまたはキーボード操作がされると、checkBoxEventという関数が呼び出される(55行目および56行目)。
【0017】
図3は、充足判断システム30の機能構成を示す。充足判断システム30は、仕様記憶部300と、抽出部310と、生成部320と、判断部330とを有する。仕様記憶部300は、アプリケーションプログラムによって順次表示される複数の画面のそれぞれが満たすべき仕様を定めた複数のスキーマ情報のそれぞれを記憶している。また、仕様記憶部300は、これら複数の画面のそれぞれから他のそれぞれの画面に表示を切り替えさせるイベントを記憶している。例えば、仕様記憶部300は、初期画面である第1画面の構成が満たすべき仕様を定めた第1スキーマ情報、および、第1画面の次に表示される第2画面が満たすべき仕様を定めた第2スキーマ情報を記憶している。そして、仕様記憶部300は、アプリケーションプログラムによる表示を第1画面から第2画面に切り替えさせるイベントを記憶している。図2のアプリケーションプログラムにおいて、第1画面はチェックボックスがチェックされた画面であり、第2画面はチェックボックスのチェックが外れた画面である。そして第1画面から第2画面に表示を切り替えさえるイベントはマウスの左クリックまたはスペースキーの押下である。
【0018】
図6は、仕様記憶部300に記憶された仕様の第1例を示す。チェックボックスのチェックが外れている第1画面の仕様を定めた第1スキーマ情報を図の左下に示す。また、チェックボックスがチェックされている第2画面の仕様を定めた第2スキーマ情報を図の右下に示す。第1画面から第2画面に表示を切り替えさせるイベントは左クリック(T0)またはスペースキーの押下(T2)である。第2画面から第1画面に表示を切り替えさせるイベントは左クリック(T1)またはスペースキーの押下(T3)である。
【0019】
図6に例示するスキーマ情報は、言語理論における木と正規木文法とによって表される。HTMLの文書は、開始タグと終了タグとの間に他の開始タグと終了タグとを含むツリー構造のデータである。スキーマ情報は、このようなツリー構造のデータの集合を正規木文法によって定義する。即ち、まず、<elem><child1/><child2/>…<childN/></elem>というタグを含むHTML文書を、スキーマ情報においてはelem(child1, child2, … ,childN)と表す。そして、スキーマ情報は、それぞれのタグを終端記号とし、記号Gnを非終端記号とした複数の文法規則を含む。
【0020】
具体的には、第1スキーマ情報(図中左下)は、bodyタグを含む。bodyタグの中に定義された非終端記号はG5およびG10などである。非終端記号はspanタグと、更に他の非終端記号G6~G8とを含む。G6~G8のそれぞれは属性値をcheckboxとするrole属性、属性値をfalseとするchecked属性、およびonclick属性を定義する。また、G10は他のspanタグを含む。即ち、第1スキーマ情報は、bodyタグの中に複数のspanタグを含むことを定義し、更に、最初のspanタグがrole属性、checked属性、および、onclick属性を含むことを定義している。
【0021】
同様に、第1スキーマ情報(図中右下)は、bodyタグを含む。bodyタグの中に定義された非終端記号の規則によれば、bodyタグの中のspanタグは、属性値をcheckboxとするrole属性、属性値をfalseとするchecked属性、およびonclick属性を含む。即ち、第2スキーマ情報は、bodyタグの中に複数のspanタグを含むことを定義し、更に、最初のspanタグがrole属性、checked属性、および、onclick属性を含むことを定義している。このように、動画を含むコンテンツの仕様は、各画面の仕様と、各画面間の遷移を示すイベントとを含む状態遷移図によって表される。
【0022】
図3に戻る。抽出部310は、文書データベース20から文書を読み出す。そして、抽出部310は、この文書に含まれるアプリケーションプログラムのうち、第1スキーマ情報に準拠した何れかの画面の表示中にイベントが発生したことに応じ実行される部分プログラムを、第1スキーマ情報およびそのイベントに基づいて抽出する。このようにした抽出された部分プログラムを部分プログラム50とする。図7にその一例を示す。
【0023】
図7は、部分プログラム50の第1例を示す。説明のために、文書データベース20に記憶されたアプリケーションプログラムのうち関数checkBoxEventを抜粋して図上部に示す。抽出部310は、アプリケーションプログラムに含まれるそれぞれの条件分岐命令について、第1スキーマ情報に規定されたこれらの状態およびイベントに基づいて、何れの分岐先が実行されるかを判断する。図6において説明したように、第1画面から第2画面に表示を切り替えるイベントはマウスの左クリックまたはスペースキーの押下である。このため、4・5行目の条件分岐命令の条件は満たされる。即ち抽出部310は、6行目から15行目までの命令列が実行されると判断する。
【0024】
また、第1スキーマ情報は、属性値をfalseとするchecked属性を含む。このため、8・9行目の条件分岐命令の条件は満たされない。即ち、抽出部310は、13行目から始まるelse節が実行されると判断する。抽出部310は、このようにして実行されると判断された分岐先の命令列を連続的に並べることにより、部分プログラム50を生成する。この結果、部分プログラム50は、checked属性の属性値をtrueに変更する命令を含む。
【0025】
図3に戻る。生成部320は、部分プログラム50に基づいて中間プログラム60を生成する。この中間プログラム60は、第1スキーマ情報に準拠する画面の集合から、当該集合に属する画面の表示中にイベントが発生した場合に表示される画面の集合を求めるプログラムである。中間プログラム60を図8に例示する。
図8は、中間プログラム60の第1例を示す。説明のために、図8上段には部分プログラム50を例示する。生成部320は、まず、部分プログラム50をSSA(Static Single Assignment)変換することにより、それぞれの変数の定義が唯一に定まり、部分プログラム50と同一の実行結果が得られる複数の命令を生成する。生成された命令列を図8中段に示す。
【0026】
変換の過程について説明する。SSA表現において、それぞれの変数への代入は部分プログラム50中で唯一に定まる。このため、部分プログラム50をSSA変換するためには、2度以上の代入操作によって代入先となっている変数を、2以上の中間変数に変更する必要がある。図8に例示する部分プログラム50において、変数checkboxには、オブジェクトevent.targetが代入されている。さらに、変数checkboxに含まれる属性の属性値は、関数setAttributeNSによって変更されている。このように、同一の変数checkboxの内容は複数回の操作によって複数回変更されている。このため、生成部320は、変数checkboxに関する処理を何らかの方法で変換する必要がある。
【0027】
部分プログラム50における直接的な木操作(例えば子要素の追加、属性の変更など)は、中間プログラム60において抽象コンテンツ変換関数として表現される。抽象コンテンツ変換関数は任意のスキーマ情報Gと、そのスキーマ情報Gを満たす任意のコンテンツTに対して、F(T)∈Tr(G)を満たすような、スキーマ情報からスキーマ情報への関数である。ここで、Trは抽象コンテンツ変形関数を表し、Fは木変形関数による木の変換を表す。
【0028】
例えば、JavaScriptなどのプログラム言語を用いれば、コンテンツTの中からある開始タグと終了タグとの間のデータを選択し、選択した当該データを変更する命令列を記述することができる。詳細には、JavaScriptには、HTML文書からドキュメントオブジェクトを抽出するgetElementByTagNameなどの関数が設けられている。これを用いれば、HTML文書においてある要素docを取り出し、その要素docに対応する属性attrの値をvalueに変更することができる。部分プログラム50の例において、変数checkboxには、初期画面のうちイベントを発生させたタグが選択されて格納される。そして、checkbox.setAttributeNS();のメソッドによって、checkboxに格納されたタグの属性が変更されている。
【0029】
アプリケーションプログラムにおけるこのようなツリー操作命令列を一般化すると、以下の式で表される。
v = doc.getElementByTagName("foo");
v.setAttribute.....
ここで、docはもとのHTML文書を格納するオブジェクトであり、fooは任意のタグの名称とする。getElementByTagNameは、指定された名称の開始タグから終了タグまでの間の文書をdocから取り出す関数とする。取り出された文書は変数vに代入される。変数vがその後の操作を受けると、docに格納されたもとのHTML文書も変更を受ける。即ち、ツリー操作命令列は、HTML文書からドキュメントオブジェクトを抽出する命令、および、抽出したドキュメントオブジェクトを変更する命令を含む。
【0030】
抽出部310がツリー操作命令列を部分プログラム50に含めて抽出した場合には、生成部320は、このツリー操作命令列を以下のように変換する。
$doc1 = getElementByTagName_r($doc0, $vN, "foo");
$v0 = getElementBytagName($doc0, "foo");
$v1 = setAttribute(…, $v0, …);
$vN = …;
ここで、変数$doc0は、ツリー操作命令例による操作前の画面構成を示す。一方、変数$doc1は、ツリー操作命令例による操作後の画面構成を示す。また、変数$v0は、getElementByTagName関数によって元の文書から複写されたドキュメントオブジェクトである複写データを格納する(2行目)。また、変数$vNは、変数$v0に格納された複写データが各種の操作、例えば属性の変更などを経て生成された文書を格納する(3〜4行目)。また、getElementByTagName_rは、画面中のタグfooの開始タグから終了タグまでの間の文書を、変数$vNの内容で置換える関数である。各種の操作を受けた複写データは、元の文書$doc0の一部と置換される(1行目)。
即ち生成部320は、ツリー操作命令列を、開始タグと終了タグとの間のデータを初期画面から複写した複写データを生成し、複写データを変更し、変更した当該複写データによって初期画面における複写元のデータを置換する命令列に変換する。
【0031】
図8の例において具体的には、生成部320は、変数checkboxを、2つの中間変数$checkbox1および$checkbox2に変更する。変数$checkbox1は一般例における変数$v0に相当し、変数$checkbox2は一般例における変数$vNに相当し、変数$uncheckedは、一般例における$doc1に相当する。そして、生成部320は、変数$checkbox1にオブジェクトevent.targetを代入する命令を生成する。オブジェクトevent.targetの内容は、第1スキーマ情報の定義およびイベントによって具体的に定まる。したがって、生成部320は、変数$checkbox1に、event.targetの具体的な内容を代入する命令を生成してもよい。
【0032】
次に、生成部320は、変数$checkbox2にツリー操作命令列の処理結果を代入する命令を生成する。即ち、変数$checkbox2には、変数$checkbox1に格納された画面において、checked属性の属性値をtrueに変更した画面が代入される。そして、生成部320は、変数$checkbox2の内容により元の画面を置換した画面を変数$uncheckedに代入する命令を代入する。この結果、操作後の画面を格納する変数$uncheckedには、checked属性の属性値がtrueに変更された画面が代入される。
【0033】
以上の変換によれば、部分プログラム50は、それぞれの変数に一度ずつの代入が行われるSSA形式に変換される。但し、関数setAttributeNSは、単一の画面に対する操作を行う関数であるので、このままでは第1スキーマ情報を満たす画面の集合から第2スキーマ情報を満たす画面の集合を求めることはできない。このため、生成部320は、関数setAttributeNSについて更に次の変換を行う。
【0034】
ツリー操作命令列によって得ることができるコンテンツをT´とすると、抽象コンテンツ変形関数は、少なくともT´∈Tr(G)を満たす関数Trとして定義される。木変形関数が複数の引数を採る場合には、Tをコンテンツの組とし、Gをスキーマの組とし、F(T)∈Tr(G)を満たすようなTrが抽象コンテンツ変形関数である。このような抽象コンテンツ変形関数の定義としては、トップ・ダウン・ツリー・トランスデューサなどのツリー・トランスデューサや、非特許文献8に示すXML変換言語・クエリー言語の方理論の枠組みを利用することができる。以下にツリー・トランスデューサを例示する。
【0035】
図9は、部分プログラム50を中間プログラム60に変換する処理に用いるツリー・トランスデューサの一例を示す。ツリー・トランスデューサにおいて、状態q1および状態q2の2状態を定義する。関数setAttributeNSによる操作は、状態q1から状態q2への遷移として表される。このツリー・トランスデューサにおいて、状態q1におけるそれぞれのタグは状態q2においてもそのまま維持され、checked属性の属性値のみがtrueに変更されている。
生成部320による以上の処理によって図8に例示する中間プログラム60が生成される。
【0036】
図3に戻る。続いて、判断部330は、中間プログラム60に基づいて、それぞれの画面が仕様を満たすかを判断する。具体的には、まず、判断部330は、初期画面である第1画面が第1スキーマ情報を満たすかを判断する。そして、判断部330は、第1スキーマ情報に中間プログラム60を適用して得られる画面の集合が第2スキーマ情報に準拠しているかを判断する。これらの判断には、非特許文献6などの従来公知の技術を用いることができる。そして、判断部330は、第1画面が第1スキーマ情報に準拠し、かつ、第1スキーマ情報に中間プログラム60を適用して得られる画面の集合が第2スキーマ情報に準拠していることを条件に、それぞれの画面が仕様を満たすと判断する。仕様を満たすと判断された場合には、第2画面の次に表示される第3画面が第3スキーマ情報に準拠することを抽出部310に通知して判断させる。
【0037】
図4は、それぞれの画面が仕様を満たすかを判断する処理の一例を示す。まず、判断部330は、第1画面が第1スキーマ情報に準拠するかを判断する(S400)。第1画面が第1スキーマ情報に準拠しなければ(S400:NO)、判断部330は、仕様を満たさないと判断し(S415)、判断結果を出力して処理を終了する。一方で、第1画面が第1スキーマ情報に準拠していれば(S400:YES)、抽出部310は、アプリケーションプログラムのうち、第1スキーマ情報に準拠した何れかの画面の表示中にイベントが発生したことに応じ実行される部分プログラム50を抽出する(S420)。
【0038】
次に、生成部320は、部分プログラム50に基づいて中間プログラム60を生成する(S430)。次に、判断部330は、第1スキーマ情報に中間プログラム60を適用することにより第1画面の次に表示し得る画面の集合を求める(S440)。そして、判断部330は、求められた画面の集合が第2スキーマ情報に準拠しているかを判断する(S450)。準拠していなければ(S450:NO)、判断部330は、アプリケーションプログラムによって表示され得る画面が仕様を満たさないと判断し(S415)、本図の処理を終了する。この場合、判断部330は、第1画面または第2画面がスキーマ情報とはどのように異なるのかを示す情報を生成して出力してもよい。
【0039】
一方で、準拠していれば(S450:YES)、判断部330は、仕様記憶部300に格納された全てのスキーマ情報について判断が完了したかを判断する(S460)。例えば、第2画面の次に表示される第3画面が満たすべき仕様を定めた第3スキーム情報が仕様記憶部300に記憶されている場合には、全てのスキーマ情報についてはまだ判断が完了していない。このため、充足判断システム30はS420に処理を戻す。即ち、抽出部310は、第2スキーマ情報、および、第2画面から第3画面へ表示を切り替えるイベントに基づいて部分プログラムを抽出し、その後の処理を行う。
全てのスキーマ情報について判断が完了したことに応じ(S460:YES)、判断部330は、アプリケーションプログラムによって表示される各画面が仕様を満たすと判断し(S470)、判断結果を出力して処理を終了する。
【0040】
以上、図4を参照して説明した処理によれば、抽出部310は、表示され得る複数の画面のそれぞれについて、当該画面の表示中にイベントが発生したことに応じ実行される部分プログラムを、当該画面に対応するスキーマ情報、および、当該画面の表示中に発生しうるイベントに基づいて抽出することができる。そして、生成部320は、複数のスキーマ情報のそれぞれについて、当該スキーマ情報に準拠する画面の集合から、当該集合に属する画面の表示中にイベントが発生した場合に表示される画面の集合を求める中間プログラムを、その画面の表示中に実行される部分プログラムに基づき生成することができる。そして、判断部330は、初期画面が第1スキーマ情報に準拠し、かつ、それぞれのスキーマ情報に中間プログラムを適用して得られる画面の集合が、当該スキーマ情報に準拠した画面の次に表示される画面の仕様を定めたスキーマ情報に準拠していることを条件として、それらの画面が仕様を満たすと判断できる。
【0041】
図5は、充足判断システム30による判断の概念図である。文書データベース20は、複数の画面の初期画面を記述したHTML文書と、そのHTML文書を順次変更することにより複数の画面を表示するアプリケーションプログラムとを記憶する。即ち複数の画面のそれぞれもまたHTMLで記述されたウェブページである。また、アプリケーションプログラムとは、ウェブページ中に埋め込まれ、JavaScriptなどで記述されたプログラムであってもよい。
【0042】
仕様記憶部300は、複数の画面のそれぞれが満たすべき仕様を定めた複数のスキーマ情報のそれぞれを記憶する。また、仕様記憶部300は、それぞれの画面から他のそれぞれの画面に表示を切り替えさせるイベントを記憶している。判断部330は、まず、初期画面が第1スキーマ情報に準拠するかを判断する。次に、判断部330は、第1スキーマ情報に基づき生成された中間プログラム60によって、第1スキーマ情報に準拠する画面の表示中にイベントが発生した場合に表示され得る画面の集合を求める。判断部330は、この画面の集合が第2スキーマ情報に準拠するかを判断する。同様に、判断部330は、第2スキーマ情報に基づき生成された中間プログラムによって、第2スキーマ情報に準拠する画面の表示中にイベントが発生した場合に表示され得る画面の集合を求める。また、判断部330は、この画面の集合が第3スキーマ情報に準拠するかを判断する。画面が何れかのスキーマ情報に準拠しなくなるか、または、全てのスキーマ情報について判断が完了するまで以上の処理を繰り返す。
【0043】
以上、本実施形態に係る充足判断システム30によれば、アプリケーションプログラムによって順次表示される画面のそれぞれが仕様を満たすかを、そのアプリケーションプログラムを実行せずに判断することができる。この判断の際に、ツリー操作命令列を含む部分プログラムが中間プログラムへ変換される。部分プログラムを中間プログラムに変換することよって、単一の画面でなく所定の条件を満たす画面の集合に対し処理を適用可能とすることができる。この結果、プログラムを実際に実行しなくとも、プログラムの実行によって表示し得る画面の集合が仕様を満たすことを効率的に判断することができる。
【0044】
以下、図10から図14を参照して、アプリケーションプログラムがチェックボックスに隣に入力欄を表示する場合について説明する。
図10は、仕様記憶部300に記憶された仕様の第2例を示す。チェックボックスのチェックが外れている第1画面の仕様を定めた第1スキーマ情報を図の左下に示す。また、チェックボックスがチェックされている第2画面の仕様を定めた第2スキーマ情報を図の右下に示す。第1画面から第2画面に表示を切り替えさせるイベントは左クリック(T0)またはスペースキーの押下(T2)である。第2画面から第1画面に表示を切り替えさせるイベントは左クリック(T1)またはスペースキーの押下(T3)である。
図10に示す第1スキーマ情報は図6を参照して説明した第1スキーマ情報と略同一であるから説明を省略する。第2スキーマ情報は、第1スキーマ情報に加えて、bodyタグの中のspanタグの中に非終端記号G9を含む。G9は、inputタグを含む。即ち、第2スキーマ情報は、第2画面がinputタグを含むべきことを定めている。
【0045】
図11は、部分プログラム50の第2例を示す。説明のために、文書データベース20に記憶されたアプリケーションプログラムのうち関数checkBoxEventを抜粋して図上部に示す。抽出部310は、アプリケーションプログラムに含まれるそれぞれの条件分岐命令について、第1スキーマ情報に規定されたこれらの状態およびイベントに基づいて、何れの分岐先が実行されるかを判断する。図10に示すように、第1画面から第2画面に表示を切り替えるイベントはマウスの左クリックまたはスペースキーの押下である。このため、3・4行目の条件分岐命令の条件は満たされる。即ち抽出部310は、5行目から16行目までの命令列が実行されると判断する。
【0046】
また、第1スキーマ情報は、属性値をfalseとするchecked属性を含む。このため、7行目の条件分岐命令の条件は満たされない。即ち、抽出部310は、11行目から始まるelse節が実行されると判断する。抽出部310は、このようにして実行されると判断された分岐先の命令列を連続的に並べることにより、部分プログラム50を生成する。この結果、部分プログラム50は、checked属性の属性値をtrueに変更する命令と、inputタグを生成する命令とを含む。
【0047】
図12は、中間プログラム60の第2例を示す。説明のために、図12上段には部分プログラム50を例示する。生成部320は、まず、部分プログラム50をSSA(Static Single Assignment)変換することにより、それぞれの変数の定義がプログラム中で唯一に定まり、かつ、部分プログラム50と同一の実行結果が得られる複数の命令を生成する。生成された命令列を図12中段に示す。本例の部分プログラム50は、ツリー操作命令列として、初期画面からイベントが発生した部分を取り出す命令と、属性値を変更する命令と、タグを追加する命令とを含む。したがって、変数checkboxは、3回の代入を受ける。
【0048】
このため、生成部320は、変数checkboxを、3つの中間変数$checkbox1、$checkbox2および$checkbox3に変更する。変数$checkbox1は一般例における変数$v0に相当し、変数$checkbox2は一般例における変数$v1に相当し、変数$checkbox3は一般例における変数$vNに相当し、変数$uncheckedは、一般例における$doc1に相当する。そして、生成部320は、変数$checkbox1にオブジェクトevent.targetを代入する命令を生成する。次に、生成部320は、変数$checkbox2にツリー操作命令列の第1処理結果を代入する命令を生成する。即ち、変数$checkbox2には、変数$checkbox1に格納された画面において、checked属性の属性値をtrueに変更した画面が代入される。次に、生成部320は、変数$checkbox3にツリー操作命令列の第2処理結果を代入する命令を生成する。即ち、変数$checkbox3には、変数$checkbox2に格納された画面において、タグinputを追加した画面が代入される。そして、生成部320は、変数$checkbox3の内容により元の画面を置換した画面を変数$uncheckedに代入する命令を代入する。この結果、操作後の画面を格納する変数$uncheckedには、checked属性の属性値がtrueに変更され、かつ、タグinputが追加された画面が代入される。
【0049】
以上の変換によれば、部分プログラム50は、それぞれの変数に一度ずつの代入が行われるSSA形式に変換される。但し、関数setAttributeNS、関数appendChildおよび関数removeChildは、単一の画面に対する操作を行う関数であるので、このままでは第1スキーマ情報を満たす画面の集合から第2スキーマ情報を満たす画面の集合を求めることはできない。このため、生成部320は、関数setAttributeNS、関数appendChildおよび関数removeChildのそれぞれについて、ツリー・トランスデューサを用いた変換を行う。関数setAttributeNSの変換は図9と同一であるので説明を省略する。関数applendChildの変換を図13に示し、関数removeChildの変換を図14に示す。
【0050】
図13は、部分プログラム50を中間プログラム60に変換する処理に用いるツリー・トランスデューサの一例を示す。ツリー・トランスデューサにおいて、状態q1および状態q2の2状態が定義される。関数appendChildによる操作は、状態q1から状態q2への遷移として表される。このツリー・トランスデューサにおいて、状態q1におけるそれぞれのタグは状態q2においてもそのまま維持され、タグinputのみが追加されている。但し、変数$checkbox1についてはそのままではツリー・トランスデューサによって取り扱えないため、生成部320は、これを2分木にエンコードする。詳しくは非特許文献7などにおいて従来公知であるから説明を省略する。
【0051】
図14は、部分プログラム50を中間プログラム60に変換する処理に用いるツリー・トランスデューサの一例を示す。ツリー・トランスデューサにおいて、状態q1および状態q2の2状態が定義される。関数removeChildによる操作は、状態q1から状態q2への遷移として表される。このツリー・トランスデューサにおいて、状態q1におけるそれぞれのタグは状態q2においてもそのまま維持され、タグinputのみが削除されている。なお、図14に例示したツリー・トランスデューサは、inputという名称のタグがHTML文書中にただ1つ存在することを前提とする。HTML文書中にinputという名称のタグが複数含まれる場合には、それぞれのタグを識別可能とするべく、それぞれのタグに識別可能な番号を付し、または、それぞれのタグを他の名称に変更する必要がある。また、以上に説明したようなツリー・トランスデューサでは取り扱いができないような処理については非特許文献6および非特許文献7に詳しいので説明を省略する。
【0052】
以上、図10から図14を参照して説明したように、充足判断システム30によれば、チェックボックスがチェックされたときにその隣に入力欄を表示させるアプリケーションプログラムについても、当該プログラムによって表示されるそれぞれの画面が仕様を満たすことを効率的に判断することができる。
【0053】
図15は、充足判断システム30として機能する情報処理装置500のハードウェア構成の一例を示す。情報処理装置500は、ホストコントローラ1082により相互に接続されるCPU1000、RAM1020、及びグラフィックコントローラ1075を有するCPU周辺部と、入出力コントローラ1084によりホストコントローラ1082に接続される通信インターフェイス1030、ハードディスクドライブ1040、及びCD−ROMドライブ1060を有する入出力部と、入出力コントローラ1084に接続されるROM1010、フレキシブルディスクドライブ1050、及び入出力チップ1070を有するレガシー入出力部とを備える。
【0054】
ホストコントローラ1082は、RAM1020と、高い転送レートでRAM1020をアクセスするCPU1000及びグラフィックコントローラ1075とを接続する。CPU1000は、ROM1010及びRAM1020に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ1075は、CPU1000等がRAM1020内に設けたフレームバッファ上に生成する画像データを取得し、表示装置1080上に表示させる。これに代えて、グラフィックコントローラ1075は、CPU1000等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
【0055】
入出力コントローラ1084は、ホストコントローラ1082と、比較的高速な入出力装置である通信インターフェイス1030、ハードディスクドライブ1040、及びCD−ROMドライブ1060を接続する。通信インターフェイス1030は、ネットワークを介して外部の装置と通信する。ハードディスクドライブ1040は、情報処理装置500が使用するプログラム及びデータを格納する。CD−ROMドライブ1060は、CD−ROM1095からプログラム又はデータを読み取り、RAM1020又はハードディスクドライブ1040に提供する。
【0056】
また、入出力コントローラ1084には、ROM1010と、フレキシブルディスクドライブ1050や入出力チップ1070等の比較的低速な入出力装置とが接続される。ROM1010は、情報処理装置500の起動時にCPU1000が実行するブートプログラムや、情報処理装置500のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ1050は、フレキシブルディスク1090からプログラム又はデータを読み取り、入出力チップ1070を介してRAM1020またはハードディスクドライブ1040に提供する。入出力チップ1070は、フレキシブルディスク1090や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
【0057】
情報処理装置500に提供されるプログラムは、フレキシブルディスク1090、CD−ROM1095、又はICカード等の記録媒体に格納されて利用者によって提供される。プログラムは、入出力チップ1070及び/又は入出力コントローラ1084を介して、記録媒体から読み出され情報処理装置500にインストールされて実行される。プログラムが情報処理装置500等に働きかけて行わせる動作は、図1から図14において説明した充足判断システム30における動作と同一であるから、説明を省略する。
【0058】
以上に示したプログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク1090、CD−ROM1095の他に、DVDやPD等の光学記録媒体、MD等の光磁気記録媒体、テープ媒体、ICカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はRAM等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムを情報処理装置500に提供してもよい。
【0059】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【図面の簡単な説明】
【0060】
【図1】図1は、情報処理システム10の全体構成を示す。
【図2】図2は、文書データベース20に記憶されたデータの一例を示す。
【図3】図3は、充足判断システム30の機能構成を示す。
【図4】図4は、それぞれの画面が仕様を満たすかを判断する処理の一例を示す。
【図5】図5は、充足判断システム30による判断の概念図である。
【図6】図6は、仕様記憶部300に記憶された仕様の第1例を示す。
【図7】図7は、部分プログラム50の第1例を示す。
【図8】図8は、中間プログラム60の第1例を示す。
【図9】図9は、部分プログラム50を中間プログラム60に変換する処理に用いるツリー・トランスデューサの一例を示す。
【図10】図10は、仕様記憶部300に記憶された仕様の第2例を示す。
【図11】図11は、部分プログラム50の第2例を示す。
【図12】図12は、中間プログラム60の第2例を示す。
【図13】図13は、部分プログラム50を中間プログラム60に変換する処理に用いるツリー・トランスデューサの一例を示す。
【図14】図14は、部分プログラム50を中間プログラム60に変換する処理に用いるツリー・トランスデューサの一例を示す。
【図15】図15は、充足判断システム30として機能する情報処理装置500のハードウェア構成の一例を示す。
【符号の説明】
【0061】
10 情報処理システム
20 文書データベース
30 充足判断システム
50 部分プログラム
60 中間プログラム
300 仕様記憶部
310 抽出部
320 生成部
330 判断部
500 情報処理装置


【特許請求の範囲】
【請求項1】
アプリケーションプログラムによって順次表示される複数の画面が予め定められた仕様を満たすかを判断するシステムであって、
第1画面の構成が満たすべき仕様を定めた第1スキーマ情報、第2画面の構成が満たすべき仕様を定めた第2スキーマ情報、および、前記アプリケーションプログラムによる表示を前記第1画面から前記第2画面に切り替えさせるイベントを記憶した仕様記憶部と、
前記アプリケーションプログラムのうち、前記第1スキーマ情報に準拠した何れかの画面の表示中に前記イベントが発生したことに応じ実行される部分プログラムを、前記第1スキーマ情報および前記イベントに基づいて抽出する抽出部と、
前記第1スキーマ情報に準拠する画面の集合から、当該集合に属する画面の表示中に前記イベントが発生した場合に表示される画面の集合を求める中間プログラムを、前記部分プログラムに基づいて生成する生成部と、
前記第1画面が前記第1スキーマ情報に準拠し、かつ、前記第1スキーマ情報に前記中間プログラムを適用して得られる画面の集合が前記第2スキーマ情報に準拠していることを条件として、前記複数の画面が予め定められた仕様を満たすと判断する判断部と
を備えるシステム。
【請求項2】
前記抽出部は、前記アプリケーションプログラムに含まれるそれぞれの条件分岐命令について、前記第1スキーマ情報に規定された画面の状態および前記イベントに基づいて、何れの分岐先が実行されるかを判断し、実行されると判断した分岐先の命令列を前記部分プログラムに含めて抽出する
請求項1に記載のシステム。
【請求項3】
前記生成部は、前記部分プログラムをSSA(Static Single Assignment)変換することにより、それぞれの変数への代入が前記部分プログラム中で唯一に定まり、かつ、前記部分プログラムと同一の実行結果が得られる複数の命令を前記中間プログラムとして生成する
請求項1に記載のシステム。
【請求項4】
前記複数の画面のそれぞれは、開始タグと終了タグとの間に他の開始タグと終了タグとを含むツリー構造のデータであり、
前記抽出部は、ある開始タグと終了タグとの間のデータを前記第1画面から選択し、選択した当該データを変更する命令列であるツリー操作命令列を、前記部分プログラムに含めて抽出し、
前記生成部は、前記ツリー操作命令列を、当該開始タグと終了タグとの間のデータを前記第1画面から複写した複写データを生成し、前記複写データを変更し、変更した当該複写データによって前記第1画面における複写元のデータを置換する命令列に変換する
請求項3に記載のシステム。
【請求項5】
前記複数の画面のそれぞれは、HTML(Hyper Text Markup Language)で記述されたウェブページであり、
前記アプリケーションプログラムは、JavaScriptで記述され、当該ウェブページの表示を変更する変更プログラムであり、
前記抽出部は、前記変更プログラムの中から、HTML文書からドキュメントオブジェクトを抽出する命令、および、抽出した前記ドキュメントオブジェクトを変更する命令を、前記ツリー操作命令列として抽出し、
前記生成部は、前記ツリー操作命令列を、HTML文書から抽出したドキュメントオブジェクトを複写して前記複写データを生成し、前記複写データを変更し、変更した当該複写データによってHTML文書のドキュメントオブジェクトを置換する命令列に変換する
請求項4に記載のシステム。
【請求項6】
前記仕様記憶部は、前記複数の画面のそれぞれが満たすべき仕様を定めた複数のスキーマ情報のそれぞれと、前記複数の画面のそれぞれから他のそれぞれの画面に表示を切り替えさせるイベントとを記憶しており、
前記抽出部は、前記複数の画面のそれぞれについて、当該画面の表示中にイベントが発生したことに応じ実行される部分プログラムを、当該画面に対応するスキーマ情報、および、当該画面の表示中に発生しうるイベントに基づいて抽出し、
前記生成部は、前記複数のスキーマ情報のそれぞれについて、当該スキーマ情報に準拠する画面の集合から、当該集合に属する画面の表示中に前記イベントが発生した場合に表示される画面の集合を求める中間プログラムを、当該画面の表示中に実行される前記部分プログラムに基づいて生成し、
前記判断部は、初期画面である前記第1画面が前記第1スキーマ情報に準拠し、かつ、それぞれの前記スキーマ情報に前記中間プログラムを適用して得られる画面の集合が、当該スキーマ情報に準拠した画面の次に表示される画面の仕様を定めたスキーマ情報に準拠していることを条件として、前記複数の画面が予め定められた仕様を満たすと判断する
請求項1に記載のシステム。
【請求項7】
アプリケーションプログラムによって順次表示される複数の画面が予め定められた仕様を満たすかを情報処理装置によって判断する方法であって、
前記情報処理装置は、第1画面の構成が満たすべき仕様を定めた第1スキーマ情報、第2画面の構成が満たすべき仕様を定めた第2スキーマ情報、および、前記アプリケーションプログラムによる表示を前記第1画面から前記第2画面に切り替えさせるイベントを記憶した仕様記憶部を有し、
前記アプリケーションプログラムのうち、前記第1スキーマ情報に準拠した何れかの画面の表示中に前記イベントが発生したことに応じ実行される部分プログラムを、前記第1スキーマ情報および前記イベントに基づいて抽出するステップと、
前記第1スキーマ情報に準拠する画面の集合から、当該集合に属する画面の表示中に前記イベントが発生した場合に表示される画面の集合を求める中間プログラムを、前記部分プログラムに基づいて生成するステップと、
前記第1画面が前記第1スキーマ情報に準拠し、かつ、前記第1スキーマ情報に前記中間プログラムを適用して得られる画面の集合が前記第2スキーマ情報に準拠していることを条件として、前記複数の画面が予め定められた仕様を満たすと判断するステップと
を備える方法。
【請求項8】
アプリケーションプログラムによって順次表示される複数の画面が予め定められた仕様を満たすかを判断するシステムとして、情報処理装置を機能させるプログラムであって、
前記情報処理装置を、
第1画面の構成が満たすべき仕様を定めた第1スキーマ情報、第2画面の構成が満たすべき仕様を定めた第2スキーマ情報、および、前記アプリケーションプログラムによる表示を前記第1画面から前記第2画面に切り替えさせるイベントを記憶した仕様記憶部と、
前記アプリケーションプログラムのうち、前記第1スキーマ情報に準拠した何れかの画面の表示中に前記イベントが発生したことに応じ実行される部分プログラムを、前記第1スキーマ情報および前記イベントに基づいて抽出する抽出部と、
前記第1スキーマ情報に準拠する画面の集合から、当該集合に属する画面の表示中に前記イベントが発生した場合に表示される画面の集合を求める中間プログラムを、前記部分プログラムに基づいて生成する生成部と、
前記第1画面が前記第1スキーマ情報に準拠し、かつ、前記第1スキーマ情報に前記中間プログラムを適用して得られる画面の集合が前記第2スキーマ情報に準拠していることを条件として、前記複数の画面が予め定められた仕様を満たすと判断する判断部と
して機能させるプログラム。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate


【公開番号】特開2007−279795(P2007−279795A)
【公開日】平成19年10月25日(2007.10.25)
【国際特許分類】
【出願番号】特願2006−101584(P2006−101584)
【出願日】平成18年4月3日(2006.4.3)
【国等の委託研究の成果に係る記載事項】(出願人による申告)平成17年度、独立行政法人情報通信機構「視覚障害者向けマルチメディアブラウジング技術の研究開発」委託研究
【出願人】(592073101)日本アイ・ビー・エム株式会社 (42)
【復代理人】
【識別番号】100104156
【弁理士】
【氏名又は名称】龍華 明裕
【Fターム(参考)】