(57)【要約】      （修正有）【課題】アプリケーション・プログラムの画面遷移の設計において、実装前にサーバオブジェクトに対する不整合を効果的に検出する。【解決手段】アプリケーション・プログラムの制御フローグラフを作成し（Ｓ４００）、制御フローグラフに基づいて、前記アプリケーション・プログラムで発生するデータフロー問題の解を算出し（Ｓ５００）、算出した解に基づいて、前記アプリケーション・プログラムの不整合を検出し（Ｓ６００）、検出した不整合に関する情報と修正内容を表示する（Ｓ７００）。【選択図】図２
2006185324.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーション・プログラムの画面遷移の設計について、整合性を検出する情報処理装置であって、
前記アプリケーション・プログラムの制御フローグラフを作成する制御フローグラフ作成部と、
前記制御フローグラフに基づいて、前記アプリケーション・プログラムで発生するデータフロー問題の解を算出するデータフロー解析部と、
前記算出した解に基づいて、前記アプリケーション・プログラムの不整合を検出する不整合検出部と、
前記検出した不整合に関する情報を表示する出力部と、
を備えることを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置であって、
前記不整合検出部は、前記アプリケーション・プログラムのサーバ・オブジェクトに対する不整合を検出する情報処理装置。
【請求項３】
請求項１に記載の情報処理装置であって、
前記不整合に関する情報に基づいて、この不整合を修正する情報を提示する修正部を備えることを特徴とする情報処理装置。
【請求項４】
請求項３に記載の情報処理装置であって、
前記修正部は、ユーザからの修正に関する入力を受けつけ、この入力された修正内容に応答して、前記不整合を修正することを特徴とする情報処理装置。
【請求項５】
請求項２に記載の情報処理装置であって、
前記不整合検出部は、存在しないサーバ・オブジェクトへの参照を検出する情報処理装置。
【請求項６】
請求項２に記載の情報処理装置であって、
前記不整合検出部は、サーバ・オブジェクトの種類が異なることを検出する情報処理装置。
【請求項７】
請求項２に記載の情報処理装置であって、
前記不整合検出部は、余分なサーバ・オブジェクトの生成があることを検出する情報処理装置。
【請求項８】
請求項２に記載の情報処理装置であって、
前記不整合検出部は、どこからも参照されないサーバ・オブジェクトが存在することを検出する情報処理装置。
【請求項９】
請求項１に記載の情報処理装置であって、
前記制御フローグラフ作成部は、前記画面遷移の画面の情報となるページのノードと、次の画面に遷移するかを選択させるアクションのノードと、このアクションの結果となるアクション・リザルトのノードと、から構成される制御フローグラフを形成することを特徴とする情報処理装置。
【請求項１０】
請求項１に記載の情報処理装置であって、
前記データフロー解析部は、前記データフロー問題として、到達する定義の問題の解を算出する情報処理装置。
【請求項１１】
請求項１に記載の情報処理装置であって、
前記データフロー解析部は、前記データフロー問題として、使用可能なサーバ・オブジェクトを算出する情報処理装置。
【請求項１２】
請求項１に記載の情報処理装置であって、
前記データフロー解析部は、前記データフロー問題として、参照される可能性があるサーバ・オブジェクトを算出する情報処理装置。
【請求項１３】
アプリケーション・プログラムの画面遷移の設計について、整合性を検出する方法であって、
前記アプリケーション・プログラムの制御フローグラフを作成する制御フローグラフ作成段階と、
前記制御フローグラフに基づいて、前記アプリケーション・プログラムで発生するデータフロー問題の解を算出するデータフロー解析段階と、
前記算出した解に基づいて、前記アプリケーション・プログラムの不整合を検出する不整合検出段階と、
検出した不整合に関する情報を表示する表示段階と、
を備えることを特徴とする方法。
【請求項１４】
請求項１３に記載の方法であって、
前記不整合検出段階では、前記アプリケーション・プログラムのサーバ・オブジェクトに対する不整合を検出する方法。
【請求項１５】
請求項１３に記載の方法であって、
前記不整合に関する情報に基づいて、この不整合を修正する情報を提示する修正段階を備えることを特徴とする方法。
【請求項１６】
請求項１５に記載の方法であって、
前記修正段階は、ユーザからの修正に関する入力を受けつけ、この入力された修正内容に応答して、前記不整合を修正することを特徴とする方法。
【請求項１７】
請求項１４に記載の方法であって、
前記不整合検出段階では、存在しないサーバ・オブジェクトへの参照を検出する方法。
【請求項１８】
請求項１４に記載の方法であって、
前記不整合検出段階では、サーバ・オブジェクトの種類が異なることを検出する方法。
【請求項１９】
請求項１４に記載の方法であって、
前記不整合検出段階では、余分なサーバ・オブジェクトの生成があることを検出する方法。
【請求項２０】
請求項１４に記載の方法であって、
前記不整合検出段階では、どこからも参照されないサーバ・オブジェクトが存在することを検出する方法。
【請求項２１】
請求項１３に記載の方法であって、
前記制御フローグラフ作成段階では、前記画面遷移の画面の情報となるページのノードと、次の画面に遷移するかを選択させるアクションのノードと、このアクションの結果となるアクション・リザルトのノードと、から構成される制御フローグラフを形成することを特徴とする方法。
【請求項２２】
請求項１３に記載の方法であって、
前記データフロー解析段階では、前記データフロー問題として、到達する定義の問題の解を算出する方法。
【請求項２３】
請求項１３に記載の方法であって、
前記データフロー解析段階では、前記データフロー問題として、使用可能なサーバ・オブジェクトを算出する方法。
【請求項２４】
請求項１３に記載の方法であって、
前記データフロー解析段階では、前記データフロー問題として、参照される可能性があるサーバ・オブジェクトを算出する方法。
【請求項２５】
アプリケーション・プログラムの画面遷移の設計について、整合性を検出するコンピュータ・プログラムであって、
前記アプリケーション・プログラムの制御フローグラフを作成する制御フローグラフ作成機能と、
前記制御フローグラフに基づいて、前記アプリケーション・プログラムで発生するデータフロー問題の解を算出するデータフロー解析機能と、
前記算出した解に基づいて、前記アプリケーション・プログラムの不整合を検出する不整合検出機能と、
検出した不整合に関する情報を表示する表示機能と、
を備えることを特徴とするコンピュータ・プログラム。
【請求項２６】
請求項２５に記載のコンピュータ・プログラムであって、
前記不整合検出機能では、前記アプリケーション・プログラムのサーバ・オブジェクトに対する不整合を検出するコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーション・プログラムの開発を支援する方法、情報処理装置、プログラムに関する。さらに具体的には、アプリケーション・プログラムの画面遷移の設計について、整合性を検出する方法、情報処理装置、プログラムに関する。
【背景技術】
【０００２】
従来より、アプリケーション・プログラムの開発を支援する方法が知られている。特に、Webアプリケーションでは、サーバサイドJava（登録商標）の技術を用いたシステムが普及してきており、特に、サーブレットを利用したシステム開発が主流になりつつある。サーブレットとは、クライアント（Webブラウザ）から送信されるリクエストをサーバ上で処理し結果を返送するサーバサイドのアプリケーション・プログラムである。
【０００３】
一般的なサーブレットを利用したシステムにおいては、Webブラウザから送信したリクエストに応じてサーブレットが起動され、そのサーブレットでデータベースへのアクセスを行う、または、そのアクセス結果を受けてデータ加工などの処理を行う。また、Webブラウザからのリクエストの内容に応じて分岐して処理したり、他のサーブレットを呼び出すなどを行い、結果をWebブラウザに返送する。
【０００４】
サーブレットに代わって、JSP（Java  Server  Pages）を利用する場合もある。JSPとはJava言語を用いて実現される、画面に表示するページであり、例えば、HTML(HyperText  Markup  Language)ファイル中にJava言語のコードを記述して、動的にページを生成することができる技術であり、サーブレットとJSPとを組み合わせて利用することもできる。
【０００５】
これらのサーブレットやJSPは、主にサーバに格納されるアプリケーション・オブジェクト（以下「サーバ・オブジェクト」）（例えば、Bean）を介して、データをやり取りする。これらのWebアプリケーション・プログラムについては、複雑な画面遷移（複数のページの遷移関係）や、プログラムが要求するサーバ・オブジェクトの依存性を考慮しなければならず、開発者は、誤りを発生しやすい。
【０００６】
このようなサーブレットやJSPを用いて、Webアプリケーションの開発を支援する方法としては、サーブレット、JSP、Beanをコンポーネント化して、これらの間の対応を明確にし、これらのコードを自動生成する方法が知られている（例えば、特許文献１）。この方法によれば、各コンポーネント間の対応が明確になり、対応するコードも自動作成されることにより、開発者を支援する。
【特許文献１】特開２００１−３４４１０５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１の方法は、このWebアプリケーションを実際に動作させた場合の、エラーを検出することはできない。すなわち、この方法では、Webアプリケーションを設計し、作成することについては、開発者を支援するが、実際に、このWebアプリケーションを動作させた場合に発生するエラーを事前に開発者に認識させることはできない。
【０００８】
すなわち、Webアプリケーションの内部設計に不整合を残したまま実装を進めると、実装が終わった各コンポーネントを組み合わせた時点で原因の見つけ難いバグが発生してしまい、内部設計から見直す必要が生じる。一般に、Webアプリケーションの開発は、内部設計を行った後に各コンポーネントの実装を多数の開発者が分担して行うことも多い。内部設計には、画面遷移や各画面(JSP)、サーバーロジック(Servlet等)などの各コンポーネントの設計情報が含まれ、コンポーネントごとに開発が分担され、各コンポーネント間の不整合を見落としやすい。したがって、実装前に内部設計に不整合がないことを充分に確認しなければならないが、そのためには複雑な画面遷移やデータ依存を考慮しなければならず、不整合を検出するのは容易ではない。
【０００９】
そこで、本発明の目的は、アプリケーション・プログラムの実装前に、このアプリケーション・プログラムの不整合を効果的に検出する方法、情報処理装置、プログラムを提供することである。
【課題を解決するための手段】
【００１０】
本発明によれば、アプリケーション・プログラムの画面遷移の設計について、整合性を検出する方法において、アプリケーション・プログラムの制御フローグラフを作成する制御フローグラフ作成段階と、制御フローグラフに基づいて、前記アプリケーション・プログラムで発生する複数のデータフロー問題の解を算出するデータフロー解析段階と、算出した解に基づいて、前記アプリケーション・プログラムの不整合を検出する不整合検出段階と、検出した不整合に関する情報を表示する表示段階と、を備えることを特徴とする方法を提供する。
【００１１】
本発明では、アプリケーション・プログラムの画面遷移を制御フローグラフ、サーバ・オブジェクトを変数として捉え、アプリケーションの振る舞いの解析を幾つかのデータフロー問題に対応付ける。その上で、各データフロー問題の解を利用して、アプリケーション・プログラムのサーバ・オブジェクトへのアクセスに関する内部設計の妥当性検査とその結果のユーザへの提示方法を提案する。また、アプリケーションの動作を把握するために有用な情報提供の手段および方法を提案する。
【発明の効果】
【００１２】
したがって、アプリケーション・プログラムの実装前に、このアプリケーション・プログラムの不整合を効果的に検出することができる。すなわち、結果として、アプリケーション・プログラム開発における性質の悪いバグ、原因の発見や修正が難しいバグの発生頻度を低下させることが可能になり、その結果開発コストを低減することが可能となる。
【発明を実施するための最良の形態】
【００１３】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、又実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１４】
図１は、本発明の実施形態に係る情報処理装置１０の機能ブロック図を示す。情報処理装置１０は、情報処理を行う装置であり、コンピュータであってよい。また、情報処理装置１０が、本発明のプログラムが実行されることで、本発明の効果を実現してもよい。情報処理装置１０は、情報を演算する制御部３００と、アプリケーションやサーバ・オブジェクトが記憶される記憶部５００と、演算結果を表示する出力部２００とから構成され、ユーザからの入力を受け付ける入力部１００を備えていてもよい。
【００１５】
情報処理装置１０は、Webアプリケーションの内部設計に相当するモデル情報を編集する機能を提供し、各内部設計コンポーネントに対応する成果物（JSPやJavaクラス等）のエディタとも連動するものとする。
【００１６】
制御部３００は、情報処理装置１０にて動作するアプリケーションやサーバ・オブジェクト等の演算、制御を行う中央処理装置であり、ＣＰＵ（Central  Processing  Unit）であってよい。制御部１０は、制御フローグラフ作成部３１０と、データフロー解析部３２０と、不整合検出部３３０とから構成される。
【００１７】
制御フローグラフ作成部３１０は、Webアプリケーションの画面遷移情報、内部設計情報、ソースコードに基づいて、制御フローグラフを作成する。データフロー解析部３２０は、この制御フローグラフに基づいて、Webアプリケーションで発生する複数のデータフロー問題の解を算出する。不整合検出部３３０は、この算出した解に基づいて、Webアプリケーションの不整合を検出する。修正部３４０は、検出した不整合に対して、この不整合を解消する修正内容を提示し、修正内容の選択について、ユーザからの入力を受ける。これとは異なる態様として、修正部３４０は、修正部３４０が表示した修正内容とは異なる修正内容を、ユーザが入力することを受け付けてもよい。
【００１８】
記憶部５００は、情報処理装置１０のＯＳ、ミドルウェア、アプリケーション、サーバ・オブジェクト、サーバ・オブジェクトの参照等を記憶する。すなわち、記憶部５００は、情報処理装置１０で取り扱うプログラムやデータ等を記憶する。例えば、記憶部５００は、コンピュータのメモリやハードディスク等であってよい。
【００１９】
出力部２００は、情報処理装置１０の演算結果を表示する。出力部２００は、例えば、Webアプリケーションの不整合を検出した結果を表示する。出力部２００は、例えば、ＣＲＴディスプレイや液晶ディスプレイ等であってよい。
【００２０】
入力部１００は、ユーザからの入力を受けつけて、制御部３００に入力された情報を伝える。入力部１００は、Webアプリケーションの不整合を検出した後に、この不整合を修正するためにユーザからの入力を受け付ける。入力部１００は、例えば、キーボード、マウス等の入力装置であってよい。
【００２１】
本発明によるWebアプリケーションの設計情報の不整合検出の手順について、図２に基づいて説明する。最初に、Webアプリケーションの設計情報を情報処理装置１０に入力するため、入力部１０を介して、内部設計、画面遷移情報などを元にモデル情報を入力する（Ｓ３００）。モデル情報とは、このツールで保持するWebアプリケーションの内部設計情報で、編集の対象となる情報である。編集の対象となる情報とは、例えば、ページ、アクション、アクション・リザルトである。ここで、アクションとは、ブラウザもしくは他のアクションからの要求によってサーバ側で実行されるロジックの単位を指し、アクション・リザルトは、アクションの実行結果を表すコードもしくは文字列を指す。ユーザがモデルを直接に入力しない場合でも、Webアプリケーションのソースコードから当該Webアプリケーションを逆解析させる（Ｓ２００）。これにより、制御フローグラフのノードとなる情報と、これらのノード間の関連（画面の遷移やサーバ・オブジェクトの参照の関係等）に関する情報とを抽出する。
【００２２】
次に、抽出したノード等の情報から制御フローグラフを作成する（Ｓ４００）。図３にて、制御フローグラフ３０の一例を示した。制御フローグラフ３０は、データフロー解析技術を適用するための有向グラフの一種である。データフロー解析技術（[文献１]Aho  A.  V.,  Sethi  R.,  and  Ullman  J.D.:  Compilers.  Principles,  Techniques  and  Tools.  Addison-Wesley.  1986.[文献２]  Hanz  Zima  and  Barbara  Chapman:  Supercompilers  for  parallel  and  vector  computers.  Addison-Wesley  1990.）は、有効グラフとして表されたプログラムのコード等のモデルに対して、多種のデータフロー問題を解くための一般的な方法である。
【００２３】
データフロー解析技術において代表的なデータフロー問題として、以下が挙げられる。
１．到達する定義の問題（Reaching  Definition）
２．使える式の問題(Available  Expression)
３．生きている変数の問題(Live  Variable)
これらの各データフロー問題については、本発明のデータフロー問題を用いて、具体的に後述する。
【００２４】
次に、制御フローグラフ３０を用いて、データフロー問題の解を算出するデータフロー解析（Ｓ５００）を行う。データフロー解析では、サーバ・オブジェクトがどのように定義されているか、存在するサーバ・オブジェクトはWebアプリケーションにとって有効なオブジェクトであるか、といったデータフロー問題を算出する。
【００２５】
これらのデータフロー問題の解に基づいて、不整合を検出する（Ｓ６００）。Webアプリケーションの不整合とは、例えば、存在しないサーバ・オブジェクトが参照されていること、サーバ・オブジェクトが無駄に生成されていること、サーバ・オブジェクトが無駄に存在して放置されていること等である。不整合を検出した場合には、この不整合の情報と、この不整合を解消するための修正内容とを提示する（Ｓ７００）。この後に、ユーザからの修正があった場合（Ｓ８００）には、修正の実行を行う（Ｓ９００）。
【００２６】
次に、制御フローグラフ３０について、図３を用いて詳細に説明する。上述のように、最初に、Webアプリケーションの内部設計や画面遷移情報、もしくはWebアプリケーションのソースコード等から、図３に示すような制御フローグラフ３０を構築する。制御フローグラフ３０には、３つのページ（Page）のノード(logonPage,  menuPage,  errorPage)と、２つのアクション（Action）のノード(doLogon,  doLogoff)、及び各アクションのノードから繋がっている３つのアクション・リザルト(ActionResult)のノード(OK,  NG,  DONE)が含まれる。
【００２７】
制御フローグラフ３０を例として説明する。制御フローグラフ３０は、ユーザがWebアプリケーションを用いて、ログインする際の処理を表す。最初にWebアプリケーションは、ログインするページ（logonPage）を表示するページのノード３１から始まる。この表示に対して、ユーザからのログインを受け付けて、ログインが可能であるか不可能であるかを判断する（dologon）アクションのノード３２に到達する。このアクションのページからさらに、ログインがＯＫであるか、ＮＧであるかのアクション・リザルトのノード（３３、３４）に分岐する。ログオンがＯＫである場合には、さらに次のページ(menu)を表示するノード（３７）に到達し、次に、ログオフするアクションのノード３７に到達する。このログオフするアクションが行われた場合には、アクション・リザルト(Done)のノード３８に到達し、再度、ログオンするページのノード３１に戻る。
【００２８】
これらの３種類のノードのうち３つのノード(menuPage,  OK,  DONE)には、データフロー情報α４０、４１、４２がそれぞれ一つずつ付加されている。α４０、４１、４２は、画面遷移がノードを通過する時にどのようなサーバ・オブジェクトへのアクセスが発生するのかを表している。
【００２９】
ここでサーバ・オブジェクトは、名前(name)とスコープ(scope)の対により識別されるサーバ内のオブジェクトである、さらに具体的には、ServletAPIで定義されるServletRequestオブジェクト(requestスコープ)、HttpSessionオブジェクト(sessionスコープ)、ServletContextオブジェクト(applicationスコープ)に格納されるオブジェクトをサーバ・オブジェクトとする。
【００３０】
制御フローグラフ作成部３１０で作成される制御フローグラフ３０は以下のような特徴を持つ。
【００３１】
１）ノードはPage,  Action,  ActionResultの3種類である。
PageはJSP等ページ生成コンポーネント、Actionはサーバロジック、ActionResultはサーバロジックの実行結果（成功  or  失敗など）に応じたページフローの選択肢を表す。また、ActionResultにはActionからのみつながる。
２）ActionResultノードは、redirectか否かを示す情報（真偽値）を持つ。
redirectが真であるActionResultノードでは、scopeがREQUESTであるサーバ・オブジェクトの定義は消滅する。
３）サーバ・オブジェクト（bean）を<name,  scope,  classname>の三つ組みで表現する。ただし、scope={REQUEST,SESSION,APPLICATION}とする。各値は、ServletAPIで定義されるものと同じ意味を持つ。サーバ・オブジェクトはnameとscopeの組で識別される。
４）サーバ・オブジェクトに対する操作αを、(op,  bean)の組で表現する。各ノードには０個以上のαを付加することができる。ただし、op={CREATE,READ,UPDATE,DELETE,  MAY_CREATE,MAY_READ,MAY_UPDATE,MAY_DELETE}とする。それぞれ、次のような意味を持つ。
＊  CREATE:  beanの作成
＊  READ:  beanの参照（読み込み）
＊  UPDATE:  beanの更新
＊  DELETE:  beanの削除
＊  MAY_*:  「かもしれない」(何も作用しない)
【００３２】
このように定義された制御フローグラフ３０に対して、データフロー問題の解を算出する。
【００３３】
データフロー問題は、例えば、プログラム中のある地点における変数Ａの参照に対して、どの地点の変数Ａへの代入文によって代入された値を参照する可能性があるかといった問題や、これとは逆に、プログラム中の変数Ａへの代入文で代入された値が、どの地点において参照される可能性があるかといった問題などである。特に、単調データフローシステム（ＭＤＳ）は、データフロー問題を解くための一般化されたシステムである。本発明では、ＭＤＳをWebアプリケーションの各コンポーネントにおける、サーバ・オブジェクトを介したデータフローの解析に適用する。
【００３４】
以下のアルゴリズムは、上述の文献２から引用したＭＤＳに対する一般繰返しアルゴリズムである。
【表１】
2006185324.tif 000003
【００３５】
このアルゴリズムによって、各ノードnに関するデータフロー情報ＩＮＦ（n）を求めることができる。束ＩＮＦ（n）∈Ｌはノードnに関するデータフロー情報を指し、関数ｆn：Ｌ→Ｌはノードnを通る時のデータフロー情報の変換（伝播）を表し、Ｌ上のmeet演算＾は、データフロー情報の合成を表す。図４に、関数ｆ及びmeet演算＾の概念図を示す。実際にデータフロー問題を解くためには、各問題に応じて、束Ｌすなわちデータフロー情報と、Ｌ上のmeet演算＾の定義、関数ｆの定義、先行ノードを定義する関数predの定義を行う必要がある。
【００３６】
上述の制御フローグラフ３０を用いて、データフロー問題を解くことについて説明する。上述のデータフロー解析技術において代表的なデータフロー問題を応用して、次のデータフロー問題について検討する。
１）RD  (Reaching  Definition):  到達するサーバ・オブジェクト定義の問題
２）AB  (Available  Bean):  使えるサーバ・オブジェクトの問題
３）LB  (Live  Bean):  生きているサーバ・オブジェクトの問題
【００３７】
これらのデータフロー問題は、ＭＤＳをWebアプリケーションの各コンポーネントのサーバ・オブジェクトを介したデータフローの解析に適用することにより求められる。上記ABとLBはサーバ・オブジェクト(bean)の集合として求められ、RDはサーバ・オブジェクトの定義点（つまりoperationがCREATEもしくはUPDATEである）αの集合として求められる。これらの解は、制御フローグラフ３０のノード毎に求められる。以下、ノードnに関するデータフロー問題の解を、RD[n],AB[n],LB[n]と表記する。RD[n]はノードnにおいて存在する可能性のあるサーバ・オブジェクトがどのノードで定義されたものであるかを教えるものである。AB[n]は、ノードnにおいて「必ず」存在するサーバ・オブジェクトを教えるものである。LB[n]は、ノードnにおいてそれ以降参照(READ,UPDATE,もしくはDELETE)される可能性があるサーバ・オブジェクトを教えるものである。
【００３８】
このようにデータフロー問題の解、RD[n],AB[n],LB[n]を得て、この解を利用して、以下のようなサーバ・オブジェクトのアクセスに関する不整合を検出する。
１）  存在しないサーバ・オブジェクトへの参照があることによる不整合
２）  サーバ・オブジェクトの型違いがあることによる不整合
３）  冗長なサーバ・オブジェクトの生成があることによる不整合
４）  不要なサーバ・オブジェクトの放置されていることによる不整合
【００３９】
以下、各不整合について説明する。
１）存在しないサーバ・オブジェクトへの参照があることによる不整合
この不整合は、Webアプリケーション（Servlet）やページ（JSP）が、あるサーバ・オブジェクトの存在を前提に記述されているのにも関わらず、そのサーバ・オブジェクトが作られずにそのWebアプリケーション（Servlet）やページJSPに到達してしまうような経路がある場合に発生する。このような経路が存在する画面遷移は実行時エラーを引き起こすため、間違った画面遷移であると言える。この問題は、制御フローグラフの各ノードnおいて、そこでREADアクセスすると宣言されているサーバ・オブジェクトがAB[n]に含まれていない場合に、不整合として検出すればよい。以下に、不整合検出部３３０が、この不整合を検出するアルゴリズムの一例を示す。
【表２】
2006185324.tif 000004
【００４０】
２）サーバ・オブジェクトの型違いがあることによる不整合
この不整合は、Webアプリケーション（Servlet）やページ（JSP）が期待している型とは違う型のサーバ・オブジェクトが格納されている場合で、Webアプリケーション（Servlet）やページ（JSP）の実行時にClassCastExceptionという形で表面化する。この問題は、制御フローグラフの各ノードnにおいて、そこでサーバ・オブジェクトに関するものについて、このclassnameがαのclassnameと異なる場合に、不整合として検出すればよい。以下に、不整合検出部３３０が、この不整合を検出するアルゴリズムの一例を示す。
【表３】
2006185324.tif 000005
【００４１】
３）冗長なサーバ・オブジェクトの生成
この不整合は、一度も参照されないサーバ・オブジェクトの生成があることの不整合である。このような不整合は、Webアプリケーションにとって致命的な問題ではないが、パフォーマンス上の不利益をもたらすため、内部設計から排除すべき間違いである。この問題は、制御フローグラフの各ノードnにおいて、そこでCREATEもしくはUPDATEでアクセスすると宣言されているサーバ・オブジェクトα.beanに関して、α.beanがLB[n]に含まれていない場合に、不整合として検出すればよい。以下に、不整合検出部３３０が、この不整合を検出するアルゴリズムの一例を示す。
【表４】
2006185324.tif 000006
【００４２】
４）不要なサーバ・オブジェクトの放置されていることによる不整合
この不整合は、どこからも参照される可能性の無いサーバ・オブジェクトが消されずに残っている場合である。このような不整合は、Webアプリケーションにとって、致命的な問題ではないが、パフォーマンス上の不利益をもたらすため、内部設計から排除すべき間違いである。この問題は、制御フローグラフの各ノードnにおいて、AB[n]に含まれるがLB[n]には含まれないサーバ・オブジェクトの中で、nでDELETEされないものがあった場合に、不整合として検出すればよい。以下に、不整合検出部３３０が、この不整合を検出するアルゴリズムの一例を示す。
【表５】
2006185324.tif 000007
【００４３】
不整合検出手段３３０が、不整合を検出することを、具体的に図５を用いて説明する。図５の制御フローグラフ５０に対して、ノードn3のRD,  ABは次のように求まる。
【数１】
2006185324.tif 000008
【００４４】
ここで、ノードn3において、α２に関する整合性チェックを行うには、不整合検出手段３３０は、α２が参照(READ)しているサーバ・オブジェクト(この例では”userInfo”)がAB(n3)に含まれているかどうかを調べる。一方、α２の参照がMAY_READの場合には、不整合検出手段３３０は、RD(n3)に”userInfo”を定義(CREATE,UPDATE,MAY_CREATE,orMAY_UPDATE)しているエントリがあるかどうかを調べる。この例ではα２(READ)に対して、AB(n3)が空であるため、不整合検出手段３３０は、α２はエラーとして、不整合が発生していると判断する。
【００４５】
不整合を検出した場合に、これを表示する実施例について、図６に基づいて説明する。Webアプリケーション・モデル表示ビュー６０は、情報処理装置１０の出力部２００に表示される画面イメージである。Webアプリケーション・モデル表示ビュー６０は、各コンポーネントと、各コンポーネント間の関係とがアイコンと矢印で示されている。図６の中で、Webブラウザの画面の四角のアイコンはページ（JSP）５１、５３を表し、歯車はアクション（サーバロジック）５２、５４を表し、コーヒー豆のアイコンはサーバ・オブジェクト５８を表している。ページ（JSP）やアクションのアイコンの間の接続線は、Webアプリケーションにおける画面遷移を表し、ページ（JSP）及びアクションのアイコンと、サーバ・オブジェクトのアイコンの間の接続線は、サーバ・オブジェクトの参照を表す。
【００４６】
不整合を検出した場合の表示の一例として、Webアプリケーション・モデル表示ビュー６０は、画面遷移エディタ６１と問題リストビュー６２の二つから構成される。不整合であることを検出した場合には、問題リストビュー６２にエラー（赤色背景の”×”）もしくはワーニング（黄色背景の”！”）として表示される。同時に、画面遷移エディタ６１上にも、不整合であるコンポーネントを強調する表示が行われてもよい。また、問題リストビュー６２に表示された具体的な問題６６、６７のいずれかを選択した際には、その問題の原因を画面遷移エディタ６１にも表示してもよい。
【００４７】
図７は、上述の「存在しないサーバ・オブジェクトへの参照があることによる不整合」が検出された場合の画面遷移エディタ６１での表示例である。図に示されるように、エラー７０に対して、この不整合の内容を示す説明７１が画面遷移エディタ６１に示されてもよい。さらに、この不整合を発生させる該当パス７２が、強調表示されてもよい。
【００４８】
図８は、「サーバ・オブジェクトの型違いがあることによる不整合」が検出された場合の画面遷移エディタ６１での表示例である。図に示されるように、エラー８１に対して、この不整合の内容を示す説明８２が画面遷移エディタ６１に示されてもよい。さらに、この不整合を発生させるアクション８０が、強調表示されてもよい。
【００４９】
図９は、「冗長なサーバ・オブジェクトの生成があることによる不整合」が検出された場合の画面遷移エディタ６１での表示例である。図に示されるように、ワーニング９０に対して、この不整合の内容を示す説明９１が画面遷移エディタ６１に示されてもよい。
【００５０】
図１０は、「不要なサーバ・オブジェクトの放置されていることによる不整合」が検出された場合の画面遷移エディタ６１での表示例である。図に示されるように、ワーニング１０１に対して、この不整合の内容を示す説明１０２が画面遷移エディタ６１に示されてもよい。
【００５１】
ここで、エラー７０、８１という表示は、Webアプリケーションのバグの原因となると判断されるため、エラーを表すアイコン（赤い矩形に白の×）で不整合を表している。また、ワーニング９０、１０１とは、必ずしもバグとは判断されないが、修正すべきであるため、警告を表すアイコン（黄色い三角形に！マーク）で不整合を表している。
【００５２】
図１１を用いて、画面遷移情報を整理してユーザに提示し、不整合を検出し、修正内容を表示し、受け付ける実施例について説明する。画面イメージ１１０は、コンポーネントを列挙したアウトラインビュー１１１と、画面遷移エディタ１１２と、問題リストビュー１１３と、ソースコードエディタ１１４とから構成される。ソースコードディタ１１４は、エラー１１５に関連したアクション１１２についてのソースコードを表示し、このソースコードのユーザからの入力を受けつけ、編集を可能にする。画面遷移エディタ１１２には、画面遷移情報がグラフィカルに表示される、各コンポーネントの選択、移動、各コンポーネント間の接続なども、ユーザからの入力を可能としている。問題リストビュー１１３には、本発明の手法で検出された問題を含め、コンパイルエラーなど全ての問題が表示される。
【００５３】
例えば、不整合検出ボタン１１６をクリックすることにより、不整合検出機能を実行すると、現在編集中の画面遷移情報(モデル)に対してデータフロー解析を行い、不整合の検出を開始する。その結果検出された不整合は、画面遷移エディタ１１２上の対応するアイコンの上にエラーアイコン１１５として表示されるとともに、問題リストビュー１１３にもエラーとして表示される。図１１の例では、”menu.jsp”で参照しているサーバ・オブジェクト”user”が必ずしも存在しない場合があることが不整合として検出されている。
【００５４】
図１２に示すように、エラーアイコン１１５上で右クリックすると、修正部３４０はユーザに修正候補１２０を提示してもよい。ここでは、修正内容５８０を選択したとする。その場合、”doSomething”アクションのソースコードに該当する修正コード１３１が挿入される(図１３参照)。挿入されるコードの断片は、サーバ・オブジェクト”user”を新たに生成するものである。また、同時に画面遷移エディタ１１２上でも修正に対応するモデル情報の変更が行われ、”doSomething”が”user”を作成(Create)１１３するというアクション・リザルトが表示される。この修正により、画面遷移情報の不整合が無くなり、問題リストビュー１１３からも不整合を示すエントリが無くなる。
【００５５】
以下では、ＭＤＳをＷｅｂアプリケーションの各コンポーネントのサーバ・オブジェクトを介したデータフローの解析に適用する方法を述べる。上述のように、実際にデータフロー問題を解くためには、各問題に応じて、束Ｌすなわちデータフロー情報と、Ｌ上のmeet演算＾の定義、関数ｆの定義、先行ノードを定義する関数predの定義を行う必要がある。
【００５６】
すなわち、上述のように、３つのデータフロー問題(RD,AB,LB)を解くためには、データフロー情報集合Ｌ、Ｌ上のミート演算＾、伝達関数ｆn（Ｘ）、有向グラフ上の先行ノード決定関数pred(n)を、例えば、それぞれ以下のように定義し、表１に示した、一般繰り返しアルゴリズムを用いることにより、データフロー問題の解が求まる。
【数２】
2006185324.tif 000009
【数３】
2006185324.tif 000010
【数４】
2006185324.tif 000011
【００５７】
ただし、ＢＥＡＮＳは制御フローグラフに現れる全てのサーバ・オブジェクトbeanの集合、ＢＥＡＮＳＰＥＣＳ制御フローグラフに現れる全てのサーバ・オブジェクトへのアクセス宣言αの集合である。PSはべき集合である。
【００５８】
定義中に現れる各種関数は以下のように定義する。
【数５】
2006185324.tif 000012
【００５９】
beanの集合の上の演算∪と∩及び、αの集合の上の演算∪と∩は、次のように定義する。
【数６】
2006185324.tif 000013
【数７】
2006185324.tif 000014
【００６０】
上記定義中に現れる関数union,  intersectionは、次のようなアルゴリズムで算出されるものとする。
【表６】
2006185324.tif 000015
【００６１】
なおクラスOpは、
op={CREATE,READ,UPDATE,DELETE,MAY_CREATE,MAY_READ,MAY_UPDATE,MAY_DELETE}のPower  Setを表すためのクラスとして下記のように定義する。
【表７】
2006185324.tif 000016
【００６２】
クラスInfoは、αを表すオブジェクトのクラスとして下記のように定義する。
Class  Info  {
Op  op;
ObjInfo  bean;
List  list;
}
【００６３】
クラスObjInfoは、サーバ・オブジェクトに関する情報を表すクラスとして、下記のように定義する。
【表８】
2006185324.tif 000017
【００６４】
情報処理装置１０に提供され実行されるプログラムは、機能構成として、デバイスドライバ、処理内容の読み出しモジュール、実行モジュール、及びＯＳ処理モジュールを備えてもよい。また、情報処理装置１０に提供されるプログラムは、フレキシブルディスク、ＣＤ−ＲＯＭ，またはＩＣメモリーカード等のプログラム記録媒体に格納されて利用者によって提供される。プログラムは、プログラム記録媒体に読み出され、情報処理装置１０においてインストールされ実行される。
【００６５】
以上、本発明を、実施形態を用いて説明したが、本発明の技術的範囲は上記実施形態に記載の範囲には限定されない。上記実施形態に、多様な変更または改良を加えることができる。そのよう変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【図面の簡単な説明】
【００６６】
【図１】本発明の情報処理装置の構成を示したブロック図である。
【図２】本発明の作用を示すフローチャート図である。
【図３】本発明の実施例である制御フローグラフを示す図である。
【図４】フローグラフと単調データフローシステムを示す図である。
【図５】本発明の実施例である制御フローグラフを示す図である。
【図６】本発明の実施例であるWebアプリケーション・モデル表示ビューを示す図である。
【図７】不整合を検出した場合の表示例を示す図である。
【図８】不整合を検出した場合の表示例を示す図である。
【図９】不整合を検出した場合の表示例を示す図である。
【図１０】不整合を検出した場合の表示例を示す図である。
【図１１】ユーザに画面遷移を表示し、修正内容を提示する表示例を示す図である。
【図１２】修正内容の提示例である。
【図１３】修正した後の画面イメージを示す図である。
【符号の説明】
【００６７】
１０  情報処理装置
１００    入力部
２００    出力部
３００    制御部
３１０    制御フローグラフ作成部
３２０    データフロー解析部
３３０    不整合検出部
３４０    修正部
５００    記憶部
【図１】
2006185324.tif 000018
【図２】
2006185324.tif 000019
【図３】
2006185324.tif 000020
【図４】
2006185324.tif 000021
【図５】
2006185324.tif 000022
【図６】
2006185324.tif 000023
【図７】
2006185324.tif 000024
【図８】
2006185324.tif 000025
【図９】
2006185324.tif 000026
【図１０】
2006185324.tif 000027
【図１１】
2006185324.tif 000028
【図１２】
2006185324.tif 000029
【図１３】
2006185324.tif 000030