説明

データベース解析装置及びデータベース解析プログラム

【課題】各カラムの説明情報を、そのデータベースを利用するWebアプリケーションプログラムから抽出し、提供する。
【解決手段】データベース解析装置100は、解析対象のデータベースを使用するWebアプリケーション101、Webアプリケーション101の設定に用いるWebアプリ設定データ102、Webページテンプレート103を入力するWebアプリケーション入力部110と、Webアプリケーション101によって生成されるWebページに表示される入力フォームの生成に使用される入力フォーム部品であって解析対象データベースの有するテーブルのカラムに対応する入力項目名と対応付けられた入力フォーム部品を、Webアプリケーション101と、Webアプリ設定データ102と、Webページテンプレート103とに基づき特定し、特定した入力フォーム部品に対応する入力項目名を特定する特定処理実行部1010と備えた。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、データベースを利用するWebアプリケーションを解析してデータベースのテーブル、カラムの説明情報を抽出するデータベース解析装置及びデータベース解析プログラムに関する。
【背景技術】
【0002】
一般に製品化されているデータモデリングツールでは、データベース解析機能としてテーブルやカラムの一覧を出力する機能は極めて一般的に提供されている(例えば、非特許文献1)。データベースを解析するだけでは抽出できない情報を、そのデータベースを利用するプログラムを解析することによって、得ようとする技術としては、例えば特許文献1が知られている。特許文献1では、データベースから読み込まれたデータが格納される変数のデータ型や、プログラム内で行われる定数値との比較を調べることで、データベース中の各データ項目のデータ型、上限値、下限値、あるいはループ脱出条件として使用されているかどうか、といった情報を抽出する方法を開示している。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】国際公開第WO2009/011057号公報
【非特許文献】
【0004】
【非特許文献1】IBM InfoSphere Data Architect http://www−06.ibm.com/software/jp/data/optim/data−architect/function.html
【発明の概要】
【発明が解決しようとする課題】
【0005】
例えば、資材システムのデータベースに入力された発注金額を、経理システムのデータベース上に反映させる、といった複数のデータベース間のデータ連携システムを開発するには、各データベース間で連携させなければならないテーブル、カラムを特定する作業が必要となる。しかし、従来技術では、データベース内に格納されたテーブルと各テーブル上に存在するカラムの名称(物理名)一覧と、その値域などが抽出されるのみであり、各カラムに格納されるデータの意味(用途)は,カラムやテーブルの名称をもとに仕様書を調査する必要があった。調査には時間がかかる上,仕様書の記載が不十分だったり,内容が古かったりした場合には正しい情報が得られない、といった課題があった。
【0006】
この発明は、各データベースのカラムの意味を利用者が推測することを容易にするために、各カラムの説明情報をそのデータベースを利用するWebアプリケーションプログラム(以下、Webアプリケーションという場合もある)から抽出し、提供することを目的とする。
【課題を解決するための手段】
【0007】
この発明のデータベース解析装置は、
解析対象のデータベースを使用するWebアプリケーションプログラムと、前記Webアプリケーションプログラムの設定に使用する所定のWebアプリ設定情報が記載されたWebアプリ設定ファイルと、前記WebアプリケーションプログラムがWebページを生成する際の雛型情報を示すWebページテンプレートとを入力する入力部と、
前記入力部に入力された前記Webアプリケーションプログラムによって生成されるWebページに表示される入力フォームの生成に使用される入力フォーム部品を、前記Webアプリケーションプログラムと、前記Webアプリ設定ファイルと、前記Webページテンプレートとに基づき特定し、特定した前記入力フォーム部品に対応する前記入力項目名であって前記解析対象のデータベースの有するテーブルのカラムに対応する入力項目名を、前記Webページテンプレートを解析することにより特定する特定処理実行部と、
前記特定処理実行部が特定した前記入力項目名を少なくとも含む情報を、前記Webページに表示される前記入力フォームへ入力される入力データによって更新される前記カラムの説明情報として出力する出力部と
を備えたことを特徴とする。
【発明の効果】
【0008】
この発明により、各カラムの説明情報を、そのデータベースを利用するWebアプリケーションプログラムから抽出して、利用者に提供することができる。
【図面の簡単な説明】
【0009】
【図1】実施の形態1のデータベース解析装置100の構成図。
【図2】実施の形態1のWebアプリケーションプログラム101〜Webページテンプレート103の概要を示す図。
【図3】実施の形態1のWebアプリケーション入力部110〜処理フロー解析部140の処理動作を示すフロー。
【図4】実施の形態1の処理フロー解析部140の動作を説明する図。
【図5】実施の形態1の入力項目名特定部150の動作を示すフロー。
【図6】実施の形態1の入力項目名特定部150の動作を説明する図。
【図7】図5のS204の内容を具体的に説明するフロー。
【図8】図5のS204の内容を具体的に説明するフロー。
【図9】図5のS204の内容を具体的に説明するフロー。
【図10】実施の形態1のデータベース解析装置100による入力項目名特定の方式が適用される例を示す図。
【図11】実施の形態1の出力項目名特定部160の動作を説明する図。
【図12】実施の形態1の出力項目名特定部160の動作を説明する図。
【図13】実施の形態1の説明情報記録部170によって出力される解析結果を示す図。
【図14】実施の形態2の処理フロー解析部140のフローチャート。
【図15】実施の形態2の処理フロー解析部140の別のフローチャート。
【図16】実施の形態3のデータベース解析装置300の構成図。
【図17】実施の形態4のデータベース解析装置の外観を示す図。
【図18】実施の形態4のデータベース解析装置のハードウェア構成を示す図。
【発明を実施するための形態】
【0010】
実施の形態1.
図1は、データベース解析装置100を示す装置構成図である。図1のように、データベース解析装置100は、Webアプリケーション入力部110(入力部)、ページ処理関数特定部120、DB呼び出し関数特定部130、処理フロー解析部140、入力項目名特定部150、出力項目名特定部160、説明情報記録部170、および解析結果出力部180(出力部)を備える。ページ処理関数特定部120〜出力項目名特定部160は、特定処理実行部1010を構成する。なお、以下ではデータベースを「DB」と表記する場合がある。
【0011】
Webアプリケーション入力部110は、解析対象とするWebアプリケーションプログラム101、Webアプリケーションの設定データであるWebアプリ設定データ102(Webアプリ設定ファイル)、およびWebページテンプレート103を装置内に読み込む。
【0012】
図2は、Webアプリケーションプログラム101〜Webページテンプレート103の概要を示す図である。
(1)Webアプリケーションプログラム101は、ソースコードの形態で入力される。
(2)Webアプリ設定データ102には、
(a)Webアプリケーションプログラム101が受理するURLの一覧、
(b)URLが呼び出されたときに起動される関数名(以下エントリーポイント)、
(c)およびURL処理結果として使用すべきWebページテンプレートの識別子、
が記載されている。なお、本実施の形態1では便宜上、「関数名」と述べているが、必ずしも関数名である必要は無い。例えば、Java(登録商標)で記述されたWebアプリケーションでは、URLが呼び出されたときに起動されるクラス名さえ判明すれば、呼び出される関数(メソッド)は標準で定められたものが使用される。
(3)Webページテンプレート103とは、Webアプリケーションプログラム101がWebページを生成する時の雛形データであり、JSP(登録商標)など、一般的なWebアプリケーションで用いられている技術である。Webアプリケーションプログラム101は、Webページテンプレート103を読み込み、その中のパラメータ部分を実行時に生成された値で置換えたデータをブラウザに返す。
【0013】
(1)ページ処理関数特定部120は、図2に示すように、読み込まれたWebアプリ設定データ102から、Webアプリケーションプログラム101の各ページを処理するためのエントリーポイントを特定する。
(2)DB呼び出し関数特定部130は、図2に示すように、Webアプリケーションプログラム101内に存在するデータベース呼び出し関数を特定する。
(3)処理フロー解析部140は、図2に示すように、エントリーポイントからDB呼び出し関数までの、Webアプリケーションプログラム101中の処理フローを解析し、エントリーポイントから開始される処理によって更新/参照されるデータベースのテーブル、カラムを特定すると共に、各カラムの入力/出力データに関連するプログラム内の「変数群」を特定する。
【0014】
(変数群)
ここで、入力データに関連する「変数群」とは、DB呼び出し関数上でデータベースの更新が発生する場合に、各カラムに対して格納される値に影響を与える変数群を指す。
同様に、出力データに関連する変数群とは、DB呼び出し関数上でデータベースの検索が発生する場合に、検索結果のうち、各カラムに対応する値が、影響を与える変数群を指す。
【0015】
入力項目名特定部150は、各カラムへの入力データに関連する入力データ関連変数群のうち、解析対象のWebアプリケーションプログラム101上のフォームから入力される変数を特定する。さらに、特定された各変数への入力を与えるフォーム部品が配置されているWebページテンプレート103を解析し、出力されるWebページのタイトルと、フォーム部品に対応する入力項目名を抽出し、エントリーポイントから開始される一連の処理によって更新されるテーブル上の各カラムに対する説明情報として説明情報記録部170に記録する。
【0016】
同様に、出力項目名特定部160は、各カラムからの出力データに関連する変数群のうち、Webページに出力される変数を特定する。さらに、特定された各変数が出力されるWebページテンプレートを解析し、Webページのタイトルと、出力されるデータを説明する出力項目名を抽出し、エントリーポイントから開始される一連の処理によって参照されるテーブル上の各カラムに対する説明情報として説明情報記録部170に記録する。
【0017】
解析結果出力部180は、説明情報記録部170によって記録された説明情報を、解析結果104として出力する。
【0018】
図3は、Webアプリケーション入力部110〜処理フロー解析部140の処理動作を示す。次に、図3を参照して、動作を説明する。
(1)まずWebアプリケーション入力部110は、Webアプリケーションプログラム101、Webアプリ設定データ102、Webページテンプレート103を装置内に読み込む(S11)。
(2)次に、ページ処理関数特定部120は、入力されたWebアプリ設定データ102の情報を用いて、各ページのURL、各ページのエントリーポイント、及び関数実行後に表示されるWebページテンプレートの一覧を作成する(S12)。
(3)次に、DB呼び出し関数特定部130は、Webアプリケーションプログラム内を検索し、DB呼び出し関数の出現位置を特定する(S13)。ここで、「DB呼び出し関数」とは、データベースに対してSQL文を発行するためにOSやフレームワークといったプラットフォームが提供する組み込み関数である。DB呼び出し関数は、引数としてSQL文を受け取り(後述の図4)、実行結果(検索の結果得られたデータ等)を返す関数を指す。DB呼び出し関数の関数名は、あらかじめ定義されているものとする。
【0019】
処理フロー解析部140は、ページ処理関数特定部120によって特定された各ページのエントリーポイント、およびDB呼び出し関数特定部130によって特定されたプログラム内のDB呼び出し関数一覧を入力し、Webアプリケーションプログラム内の、各ページエントリーポイントからDB呼び出し関数を呼び出す可能性があるかを判定(S14−1)する。
図4は、処理フロー解析部140の動作を説明する図である。可能性がある場合には、処理フロー解析部140は、図4に示すように、エントリーポイント内で行われる文字列操作(代入、連結、置換等)を追跡し、DB呼び出し関数に渡される引数のうち、SQL文を指定する引数に代入される文字列変数が、どのような文字列を格納するかを特定する(S14−2)。なお、変数に格納される文字列は、プログラムの分岐や、あるいは外部から入力された値によって不定となる箇所もあるため、一般には、変数が格納し得る文字列全体を表すパターンが特定される。
【0020】
(コマンド文字列の抽出)
処理フロー解析部140は、SQL文を指定する引数に代入される文字列のパターンを特定すると、あらかじめ定義されたSQL文法データと特定した文字列パターンとを比較し、SQL文法上、コマンドに相当する文字列を抽出する(S14−3)。
【0021】
(更新命令の場合)
コマンドが、INSERTやUPDATEといった、データベースの内容を更新する命令であった場合には、処理フロー解析部140は、同様にSQL文法と比較することでテーブル名、カラム名を特定し、さらに各カラムに代入される値に影響を与える変数群を特定する(S14−4)。
【0022】
なお、本実施の形態1では、処理フロー解析部140における文字列の特定、およびSQL文法との比較処理に、下記の<参考文献>で開示されている方式を利用することが可能である。詳細については割愛するが、同文献で開示された方式では、エントリーポイントの入口を起点とした制御フローグラフを生成し、制御フロー上に現れる文字列操作を、文字列が格納される変数を非終端記号とした文脈自由文法として表現することで、各文字列変数の値が満たすべき「文法」を特定する。特定された文法を調べることで、任意の文字列変数上で生成される文字列のパターンや、文字列の特定の部分に影響を与える変数群を特定することが可能である。
【0023】
<参考文献>
G.Wassermann and Z.Su.Sound and Precise Analysis of Web Applications for Injection Vulnerabilities.In Conference on Programming Language Design and Implementation(PLDI),2007.
【0024】
(参照命令の場合)
再び動作の説明に戻る。処理フロー解析部140は、コマンドがSELECTのように、データベースの内容を参照する命令であった場合には、先ほどと同様、テーブル名を求めた後、SQL検索結果を取得する関数にカラム名として渡される文字列を特定し、さらに、同関数の戻り値によって影響される変数群を特定する(S14−5)。SQL検索結果取得関数の戻り値に影響される変数群を特定するには、プログラム上で、同関数の処理が終了した箇所を起点とし、戻り値が最初に代入された変数を右辺に持つ代入文を追跡すればよい。
【0025】
処理フロー解析部140により解析した結果(入出力の変数群)は、次に入力項目名特定部150、および出力項目名特定部160によって、Webページ上の入力項目名、および出力項目名と対応付けられる。はじめに、図5、図6を参照しながら入力項目名特定部150の動作から説明する。
図5、図6は入力項目名特定部150の動作を示すフローチャート、概念図である。おもに図6を参照して説明する。
【0026】
(入力項目名特定部150の動作)
入力項目名特定部150は、まず、Webページ上のフォームから入力された値が代入される変数を特定する(ステップ201)。この特定処理は、各フォーム部品からの入力値を取得する関数をエントリーポイントからの制御グラフ上で探し、戻り値が代入される変数を特定することで容易に実施できる。また、どのフォーム部品からの入力値かも、関数名等から容易に特定可能である。例えば、Webアプリケーション開発フレームワークとして広く使用されているstrutsでは、Webページテンプレート上で“user”と名づけられたフォーム部品からの入力値は、getUser( )という関数で取得する仕組みとなっており、関数名からgetを取り除けば、対応するフォーム部品名を取得することができる。
【0027】
次に、入力項目名特定部150は、各フォーム部品からの入力値が代入される変数のうち、データベースの更新に影響を与える変数(更新影響変数ともいう)を特定する(ステップ202)。その後、入力項目名特定部150は、各変数によって影響を受けるテーブル名およびカラム名を、処理フロー解析部140の処理結果(S14−4で特定された変数群)と比較することで特定する(ステップ203)。これにより、更新に影響を与える変数に値を代入するフォーム部品が特定できるため、このフォーム部品に対応する入力項目名を、Webページテンプレート103を解析することで特定し(ステップ204)、特定結果を説明情報記録部170に蓄積する(ステップ205)。
【0028】
解析対象とするWebページテンプレート103は、現在解析対象としているエントリーポイントに対応するURLをaction属性に持つフォームを含んだWebページテンプレートが選択される。入力項目名特定部150がWebページテンプレートから入力項目名を特定する処理(ステップ204)について、図7〜図9を参照しながら、詳細に説明する。図7、図8、図9の動作主体は入力項目名特定部150である。
【0029】
はじめに、当該テンプレート内の<title>〜</title>に囲まれたテキストを、そのテンプレートによって生成されるWebページのページ名として記憶する(ステップ301)。次に当該フォーム部品がWebページテンプレートのHTML上、table要素に含まれているかを確認する(ステップ302)。もしtable要素に囲まれていないならば、そのフォーム部品を含む行の先頭にある単語を入力項目名とみなす(ステップ314)。
【0030】
table要素に囲まれていた場合、table内の各セルに記載された文字列のうち、当該フォーム部品に対応する入力項目名を見つける必要がある。本実施の形態では、次のように入力項目名の特定を実施する。
【0031】
はじめに、tableの各セル(<td>〜</td>で囲まれた範囲)のうち、rowspan属性が2以上であるセルは、行毎に分解し、各行に同じ値(テキスト、フォーム部品、Webページテンプレート上で出力される際に格納される領域(以下Webアプリケーション出力値格納領域))を含んだセルがrowspan分だけ並んでいる表へと変形する(ステップ303)。
【0032】
次に、L=1とし(ステップ304)、L=テーブル行数となるまで以下の処理を繰り返す(ステップ305)。
【0033】
まず、L行目から、フォーム部品を含まない行を連続して取れる限り取り出す(ステップ307)。これらを見出し候補行と呼ぶことにする。もし見出し候補行が存在しなければステップ353へ進む。取り出された見出し候補行(行数をNとする)の下からs行目(1≦s≦N)からm行分(1≦m≦N−s+1)と同じ構造が、それ以降の行で繰り返し現れる最大回数rを求める(ステップ309から313、320から333)。同じ構造かどうかは、次の条件をともに満たしている場合とする。
【0034】
(1)各セルのcolspan属性値が見出し候補行の対応するセルと同じ値である(colspanが無い場合はcolspan=1とみなす)(ステップ322)。
(2)一回目にマッチしたセルと同じフォーム部品(あるいはテキスト、又はWebアプリケーション出力値格納領域)が出現する(ステップ323,324)。なお、テキストは異なっていても構わないものとする。
【0035】
全てのs,mに対し、上記処理によってrを求め、mとrを積算した結果が最大となるmを見出し行数とする(ステップ328,329)。もし複数のmでm・rが同じ値になった場合には、mが最大のものを見出し行数とみなす。対応するsについては、下からs−1行分の見出し候補行は、注釈等、見出しとは無関係なテキストとみなす。もし、全てのs,mでrが0になった場合(ステップ340)はステップ351へ進む。
【0036】
最後に、繰り返し構造に含まれた各フォーム部品全てに対して、ステップ341から350に示す方法で入力項目名を与える。ステップ347で示される項目名の付与の方法は次の通りである。まず入力項目名W=空文字列とする。同一セルの先頭にテキストW0が含まれている場合には、W=W0とする。次に、見出し候補行の中から対応するセル((L−1)+k+N−(M+S)+1行、col列)のテキストW1をスラッシュ記号等、適当な区切り文字で付加する。その後、繰り返し構造に現れない見出し候補行の各テキストのうち、同じ列に属するテキストを順に付加していく。ただし、連続して同じテキストが現れる場合は、付加するのは1度だけとし、残りは単に無視されるものとする。
【0037】
以上の処理を実行後、L=L+N+R・Mとし、ループの先頭に戻る(ステップ352)。ステップ353〜358では、表中に見出し候補行が見つけられなかった場合の処理を行う。このような場合、各行は、独立した入力項目を示しているとみなす。ステップ356で示される入力項目名の付与の方法は次の通りである。まず入力項目名W=空文字列とする。同一セルの先頭にテキストW0が含まれている場合には、W=W0とする。次に、セルの左側のセルを順に走査して行き、最初に現れるテキストのみを含んだセルの内容W1をスラッシュ記号等、適当な区切り文字で付加する。その後、さらに左側のセルを走査していき、次にフォーム部品を含んだセルが現れるか、先頭列に達するまで文字列を順に付加していく。
【0038】
以上の処理を、再び全てのセルがテキストである行にあたるまで(ステップ355)、もしくは表全体の処理を終了するまで(ステップ354)繰り返し、その後L=iに更新後(ステップ358)、ループの先頭に戻る。
【0039】
ループ終了後、Webページテンプレート上の各フォーム部品に対して入力項目名が定まるため、入力項目名を特定する対象であるフォーム部品に対する入力項目名を、当該フォーム部品に対応するデータベースのテーブル名、カラム名、およびテンプレートのページ名とともに説明情報記録部に保存する(ステップ315)。
【0040】
データベース解析装置100による本方式を図10に示す入力フォームに対する入力項目名特定に適用した場合を例とすると、図10のフォーム部品401には、“発注明細/参考URL”という入力項目名が付与される。同様にフォーム部品402については、“発注明細/数量”が付与される。フォーム部品403では、“納期”が付与され、フォーム部品404では“特記事項”が付与される。
【0041】
(出力項目名特定部160の動作)
次に、図11、図12を参照して、出力項目名特定部160の動作について説明する。
図11、図12は出力項目名特定部160の動作を示すフローチャート、概念図である。
(1)まず、出力項目名特定部160は、Webページ上に出力される変数(出力変数)を特定する(S21)。この特定処理は、Webページへの出力値を設定する関数をエントリーポイントからの制御グラフ上で探し、その引数として入力される変数を特定することで容易に実施できる。また、出力されるデータがWebページテンプレート上でどのような識別名で参照されるかも、関数名等から容易に特定可能である。例えば、strutsでは、Webページテンプレート上で“price”として参照されるデータは、setPrice()という関数で取得する仕組みとなっており、関数名からsetを取り除けば、対応する出力データ名(変数)を取得することができる。
(2)次に、処理フロー解析部140の処理結果と比較することで、各Webページへ出力される出力変数のうち、データベースの検索結果の影響を受ける変数(検索影響変数ともいう)と、影響を受けるカラム名を特定する(S22)。これにより、検索結果に影響を受ける検索影響変数に対するWebアプリケーション出力値格納領域(格納領域)が特定できる(S23)。このため、出力項目名特定部160は、特定したWebアプリケーション出力値格納領域に対応する出力項目名を、Webページテンプレートを解析することで特定する(S24)。解析対象とするWebページテンプレートは、現在解析対象としているエントリーポイントの実行結果が出力されるWebページテンプレートが選択される。すなわち、入力項目名特定部150と全く同様な方法(図7〜9)で、各出力データに対応する出力項目名を特定する(S24)。ただし、入力項目名特定部150における前記説明(図7〜9)の「フォーム部品」は「Webアプリケーション出力値格納領域」に、「Webアプリケーションからの出力値格納領域」は「フォーム部品」に読み替えた方式となる。
【0042】
Webアプリケーションプログラム101の全てのエントリーポイントに対する解析が終了すると、解析結果出力部180が、説明情報記録部170に蓄えられた解析結果をユーザに出力する。
図13は、説明情報記録部170によって出力される解析結果を示す。図13に示すように、テーブル名501、カラム名502、各カラムに対する入力ページ名503、入力項目名504、出力ページ名505、及び出力項目名506である。表中、table2のカラムx2は出力ページ名、出力項目名が記載されていないが、これは同カラムのデータがWebページ上に現れなかったことを意味するものである。
【0043】
(1)以上のように、Webアプリケーション内で発生するデータベースアクセスで更新/参照されるカラムに対応するWebアプリケーションの入出力データに対し、対応する入出力項目名をWebページテンプレートを解析して特定するようにしているので、データベースの各カラムに対し、そのカラムの意味を利用者が推測するための説明情報を出力することができる。
(2)また、各入出力項目が、Webページテンプレート上でテーブルの中に現れた場合に、テーブル内の見出しに該当するセルを特定することで、表中に入出力項目が現れた場合にも正しく項目名を識別できるという効果がある。
(3)さらに、見出しの特定において、表の繰り返し構造に着目することで、複数行からなる見出しにも対応することができるという効果がある。
(4)さらに、複数行にわたり連結されているセルを、あらかじめ行毎に分解しておくことで、階層の異なる複数の見出しを含んだ表にも対応できる。
(5)さらに、見出し候補行の下の行からなるべく大きな構造の繰り返しを特定することで、実際の入出力項目を含んだ行には現れない、見出しの見出しを特定することができる。
(6)さらに、上記繰り返し構造を特定する処理において、繰り返し構造が見出せなかった場合、見出し候補行の下から順に取り除いて再び繰り返し構造の特定処理を実施することで、注意書き等、見出しとは無関係な行が挿入されている場合に対応することができる。
(7)さらに、繰り返し構造が見つけられなかった場合には、各フォーム部品に対し、左側のセルを走査していき、最初に見つかる連続したテキストセルを見出しとみなす事で、横方向に見出しを持った表に対応することができる。
(8)さらに、繰り返し構造が途切れた箇所から別途解析を再開することで、複数の構造を持った複雑な表に対しても見出しを特定することができる。
(9)さらに、複数行、又は複数列からなる見出しが特定された場合には、見出しのテキストを区切り文字で連結することで、階層化された入出力項目名とすることができる。
【0044】
本実施の形態1ではデータベースの参照/更新と関連する入出力項目を特定してから、Webページテンプレート上で、これらの項目に対する項目名を特定することとしたが、データベースへの参照/更新が発生することが判明した時点で、解析対象とすべきWebページテンプレート上の全ての項目に対し、項目名を計算しておくことももちろん可能である。
【0045】
なお、Webアプリケーション言語としてPHPが使用されている場合、各URLに対応して起動されるPHPスクリプトの先頭行から順にコードが実行されるため関数の特定は不要である。さらに、PHPでは、処理プログラムと、処理結果を表示するためのWebページテンプレートが同一ファイル上で記載される上、URLと起動されるPHPスクリプトとの対応はPHPの格納ディレクトリから判別できる。結果としてPHPにおいては、設定データに記載すべき情報は自動で抽出することも可能である。
【0046】
実施の形態2.
図14、図15を参照して実施の形態2を説明する。実施の形態2は、処理フロー解析部140に関する。図14、図15の動作主体は処理フロー解析部140である。以上の実施の形態1では、処理フロー解析部140に第1方式(図14)の静的解析技術を適用したものであるが、次に、第1方式の解析処理を高速化する場合に、SQL文の特定における不要な処理を省略する「第2方式」(図15)を説明する。
【0047】
まず、図14を参照しながら第1方式の概要について説明する。第1方式ではまず、Webアプリケーションプログラムを解析し、エントリーポイントを起点とした制御フローグラフを生成する(ステップ601)。制御フローグラフとは、プログラム中の命令の実行経路をグラフ化したものである。次に、制御フローグラフ上にある文字列操作(代入、連結、置換等)に対応し、形式言語理論で言うところの生成規則を記録していく(ステップ602〜609)。
(1)文字列操作として代入操作があった場合、代入先変数名を非終端記号とし、代入元の変数、もしくは文字列定数を右辺に持つ生成規則A→X(Xは変数名、もしくは文字列定数)を生成する(ステップ603、608)。
(2)文字列操作として連結操作があった場合、連結後の文字列が代入される変数名を非終端記号とし、連結される複数の変数、あるいは文字列定数を右辺に持つ生成規則A→XY(X,Yは変数名もしくは文字列定数)を生成する(ステップ604、607)。
(3)その他の場合、つまり第1方式の文字列に変更が行われる操作、例えば文字列置換などは、当該操作によって入力として与えた文字列の生成規則が変換されると考え、当該文字列操作の内容を反映したトランスデューサと呼ばれる有限オートマトンによって、入力変数に対して記録された第1方式の生成規則を変換した上で、生成規則A←X(Xは変換関数への入力変数、あるいは文字列定数)を生成する(ステップ605、606)。
【0048】
以上の処理を繰り返すことで、制御フローグラフ上の全ての文字列変数に対する「文法」を定義することができる。最後に、DB呼び出し関数に引数として渡される変数に対応する非終端記号を開始記号とする文法と、SQL文の文法とを比較することで、SQL文のコマンドや、カラム名、およびテーブル名に該当する文字列を特定する。さらに、コマンドがinsertやupdateといったデータベースを更新するコマンドであった場合には、データベースの各カラムに投入される値に関係している変数群を特定する(ステップ610)。
【0049】
第1方式において、前記(3)に該当する処理、すなわちトランスデューサによる文法変換処理は、計算コストが高い。そこで、本実施の形態2では、(3)の処理を必要最小限に留めることで処理の高速化を実現する。実施の形態2における第2方式の処理について、図15を参照しながら説明する。
【0050】
第2方式においても、制御フローグラフを生成し、フローグラフ上の各文字列操作に対応して生成規則を記録していく点は第1方式と同様である(ステップ701〜704、707、および708)。ただし、文字列操作が(3)に該当する場合だけ第1方式とは異なる処理を行う。第1方式は、入力として与えられた変数に対する生成規則を変換していたが、第2方式では、代わりに特殊な生成規則A←[ダミー]([ダミー]は便宜上の表記であり、識別可能な記号であれば何でも構わない)を記録する(ステップ705)。また、本来行うべき文法変換に必要な情報、すなわち、入力変数名、変換に必要なトランスデューサもあわせて記録しておく(ステップ706)。
【0051】
その後、第1方式と同様に、DB呼び出し関数に引数として渡される変数に対応する非終端記号を開始記号とする文法と、SQL文の文法とを比較する(ステップ710)が、この時に、文法上カラム名やテーブル名が指定されるべき箇所に[ダミー]が現れていないか確認する(ステップ711)。もしも現れていた場合には、当該[ダミー]に対応する入力変数名と、トランスデューサを取り出し、文法変換(正規の生成規則の復元の一例)を行った上で、再度SQL文法との比較を実施する(ステップ712)。以上の処理を繰り返し、最終的にカラム名、およびテーブル名に対応する箇所が全て取得できたら処理を終了させる。最後に、コマンドがinsertやupdateといったデータベースを更新するコマンドであった場合には、データベースの各カラムに投入される値に関係している変数群を特定するが、これは[ダミー]がXに依存しているという情報を利用すれば、投入される値に[ダミー]が含まれていたとしても第1方式と同様に特定可能である。
【0052】
以上のように、文字列変換操作に対して仮の生成規則を記録しておき、カラム名、テーブル名を抽出するために必要な部分に限って文法変換処理を実施することで、処理フロー解析部を高速化することができる。もしも、全てのテーブル名、カラム名に対して文字列変換処理が発生した場合、第2方式は第1方式と同じだけの文法変換処理を行う必要がある。しかし、一般に文字列変換処理が発生するのはデータベースに記録されるデータや、検索文字列部分であり、アクセス対象であるテーブル名、カラム名に対し文字列変換が発生することは稀である。従って、殆どの場合第2方式を適用することで第1方式よりも高速に処理を行うことが可能である。
【0053】
実施の形態3.
図16を参照して実施の形態3を説明する。以上の実施の形態1、2では、Webアプリケーション設定データをページ処理関数特定部120が解析可能である必要があるが、本実施の形態3では、フレームワーク特定部310が、対象Webアプリケーションが開発に使用したフレームワークを特定する。この特定により、ページ処理関数特定部120が解析可能な設定データを生成、入力することで、様々なWebアプリケーション設定データの形式に対応できる。以下にその形態を示す。
【0054】
図16は実施の形態3のデータベース解析装置300の構成図である。データベース解析装置300は図1に示す形態1のデータベース解析装置100に対して、さらに、フレームワーク特定部310、フレームワーク特定ルール蓄積部320、設定データ生成機能蓄積部330を付加した。
【0055】
フレームワーク特定部310は、ユーザの入力したWebアプリケーションのWebアプリ格納ディレクトリ名105−3の中のファイルを調べ、格納されているファイル名などからWebアプリケーションの開発に使用されたフレームワーク名を特定する。特定にはフレームワーク特定ルール蓄積部320に格納されたルールを使用する。フレームワークが特定されると、フレームワーク特定部310は、設定データ生成機能蓄積部330に蓄えられた設定データ生成機能331のうち、特定されたフレームワークに対応した設定データ生成機能331を呼び出す。設定データ生成機能331は、各フレームワークに固有の方式でWebアプリケーション格納ディレクトリ中のファイルから設定データに必要な情報を抽出し、ページ処理関数特定部120へ入力する。
【0056】
以上のように、フレームワーク特定部310がWebアプリケーション格納ディレクトリ内を調査してフレームワークを特定する。そして、設定データ生成機能331が、フレームワークに固有の方式に従ってWebアプリケーション格納ディレクトリ内のファイルから情報を抽出し、Webアプリケーション設定データを生成することで、様々なフレームワークに対応することができる、という効果がある。
【0057】
実施の形態4.
図17、図18を参照して実施の形態3を説明する。実施の形態3は、コンピュータであるデータベース解析装置100、300のハードウェア構成を説明する。
図17は、データベース解析装置100、300の外観の一例を示す図である。
図18は、データベース解析装置100、300のハードウェア資源の一例を示す図である。
データベース解析装置100とデータベース解析装置300とは同様であるので、データベース解析装置100を例に説明する。
【0058】
外観を示す図17において、データベース解析装置100は、システムユニット830、CRT(Cathode・Ray・Tube)やLCD(液晶)の表示画面を有する表示装置813、キーボード814(Key・Board:K/B)、マウス815、コンパクトディスク装置818(CDD:Compact Disk Drive)などのハードウェア資源を備え、これらはケーブルや信号線で接続されている。システムユニット830はネットワークに接続している。
【0059】
またハードウェア資源を示す図18において、データベース解析装置100は、プログラムを実行するCPU810(Central Processing Unit)を備えている。CPU810は、バス825を介してROM(Read Only Memory)811、RAM(Random Access Memory)812、表示装置813、キーボード814、マウス815、通信ボード816、CDD818、磁気ディスク装置820と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置820の代わりに、光ディスク装置、フラッシュメモリなどの記憶装置でもよい。
【0060】
RAM812は、揮発性メモリの一例である。ROM811、CDD818、磁気ディスク装置820等の記憶媒体は、不揮発性メモリの一例である。これらは、「記憶装置」あるいは記憶部、格納部、記録部、バッファの一例である。通信ボード816、キーボード814などは、入力部、入力装置の一例である。また、通信ボード816、表示装置813などは、出力部、出力装置の一例である。通信ボード816は、ネットワークに接続されている。
【0061】
磁気ディスク装置820には、オペレーティングシステム821(OS)、ウィンドウシステム822、プログラム群823、ファイル群824が記憶されている。プログラム群823のプログラムは、CPU810、オペレーティングシステム821、ウィンドウシステム822により実行される。
【0062】
上記プログラム群823には、以上の実施の形態の説明において「〜部」として説明した機能を実行するプログラムが記憶されている。プログラムは、CPU810により読み出され実行される。
【0063】
ファイル群824には、以上の実施の形態の説明において、「〜の判定結果」、「〜の算出結果」、「〜の抽出結果」、「〜の生成結果」、「〜の処理結果」として説明した情報や、データや信号値や変数値やパラメータなどが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してCPU810によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのCPUの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のCPUの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
【0064】
また、以上に述べた実施の形態の説明において、データや信号値は、RAM812のメモリ、CDD818のコンパクトディスク、磁気ディスク装置820の磁気ディスク、その他光ディスク、ミニディスク、DVD(Digital・Versatile・Disk)等の記録媒体に記録される。また、データや信号は、バス825や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【0065】
また、以上の実施の形態の説明において、「〜部」として説明したものは、「〜手段」、であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明したものは、ソフトウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVD等の記録媒体に記憶される。プログラムはCPU810により読み出され、CPU810により実行される。すなわち、プログラムは、以上に述べた「〜部」としてコンピュータを機能させるものである。あるいは、以上に述べた「〜部」の手順や方法をコンピュータに実行させるものである。
【0066】
以上の実施の形態では、データベース解析装置を説明したが、データベース解析装置の各「〜部」の動作を、コンピュータに実行させるためのデータベース解析プログラムとして把握することもできる。あるいは、データベース解析装置の各「〜部」の動作を、データベース解析方法として把握することもできる。
【0067】
以上の実施の形態では以下を特徴とするデータベース解析装置を説明した。
(1)データベース解析装置は、解析対象のデータベースを使用するWebアプリケーションのソースコードおよび設定ファイル、Webページテンプレートを入力とし、Webアプリケーションの各ページ上の入力フォーム部品を特定し、同フォーム部品に対応する入力項目名を特定して、同入力データによって更新されるデータベースカラムの説明情報として出力する。
(2)データベース解析装置は、さらに、データベースのあるカラムから得られたデータが出力されるWebページ上の出力項目を特定し、同項目に対応する出力項目名を特定して、当該カラムの説明情報として出力する。
(3)データベース解析装置は、入力/出力項目名の特定を行うにあたり、入力/出力項目がテーブルに含まれていた場合には、テーブルの各項目に対する見出しに相当する部分を、テーブル内の繰り返し構造から特定し、特定された見出しを入力/出力項目名とする。さらにデータベース解析装置は、以下の(a)〜(e)を特徴とする。
(a)データベース解析装置は、複数行にわたり連結されているセルを、あらかじめ行毎に分解しておくことで、階層の異なる複数の見出しを含んだ表にも対応できる。
(b)データベース解析装置は、見出し候補行の下の行からなるべく大きな構造の繰り返しを特定することで、実際の入出力項目を含んだ行には現れない、見出しの見出しを特定することができる。
(c)データベース解析装置は、繰り返し構造を特定する処理において、繰り返し構造が見出せなかった場合、見出し候補行の下から順に取り除いて再び繰り返し構造の特定処理を実施することで、注意書き等、見出しとは無関係な行が挿入されている場合に対応する。
(d)データベース解析装置は、繰り返し構造が現れなかった行に対しては左側のセルを走査していき、最初に見つかる連続したテキストセルを見出しとみなす。
(e)データベース解析装置は、繰り返し構造が途切れた箇所から別途解析を再開することで、複数の構造を持った複雑な表に対しても見出しを特定することができる。
(f)データベース解析装置は、複数行、又は複数列からなる見出しが特定された場合には、見出しのテキストを区切り文字で連結することで、階層化された入出力項目名とする。
(4)データベース解析装置は、Webアプリケーションプログラム内の文字列操作を静的解析で追跡し、DB呼び出し関数に渡されるSQL文を特定する際に、解析に時間のかかる文字列変換に対する追跡処理は省略し、テーブル名、カラム名を特定するために最低限必要な箇所のみ上記追跡処理を実施する。
(5)データベース解析装置は、Webアプリケーションが使用している開発フレームワークを特定することで、Webアプリケーション格納ディレクトリから、解析に必要なWebアプリケーション設定データを抽出する。
【符号の説明】
【0068】
100,300 データベース解析装置、101 Webアプリケーションプログラム、102 Webアプリ設定データ、103 Webページテンプレート、104 解析結果、105−3 Webアプリ格納ディレクトリ名、110 Webアプリケーション入力部、120 ページ処理関数特定部、130 DB呼び出し関数特定部、140 処理フロー解析部、150 入力項目名特定部、160 出力項目名特定部、170 説明情報記録部、180 解析結果出力部、1010 特定処理実行部、310 フレームワーク特定部、320 フレームワーク特定ルール蓄積部、330 設定データ生成機能蓄積部、331 設定データ生成機能。

【特許請求の範囲】
【請求項1】
解析対象のデータベースを使用するWebアプリケーションプログラムと、前記Webアプリケーションプログラムの設定に使用する所定のWebアプリ設定情報が記載されたWebアプリ設定ファイルと、前記WebアプリケーションプログラムがWebページを生成する際の雛型情報を示すWebページテンプレートとを入力する入力部と、
前記入力部に入力された前記Webアプリケーションプログラムによって生成されるWebページに表示される入力フォームの生成に使用される入力フォーム部品を、前記Webアプリケーションプログラムと、前記Webアプリ設定ファイルと、前記Webページテンプレートとに基づき特定し、特定した前記入力フォーム部品に対応する前記入力項目名であって前記解析対象のデータベースの有するテーブルのカラムに対応する入力項目名を、前記Webページテンプレートを解析することにより特定する特定処理実行部と、
前記特定処理実行部が特定した前記入力項目名を少なくとも含む情報を、前記Webページに表示される前記入力フォームへ入力される入力データによって更新される前記カラムの説明情報として出力する出力部と
を備えたことを特徴とするデータベース解析装置。
【請求項2】
前記特定処理実行部は、
前記データベースの保有する前記テーブルのカラムから得られるデータが出力される前記Webページにおける出力項目の格納領域を、前記Webアプリケーションプログラムと、前記Webアプリ設定ファイルと、前記Webページテンプレートとに基づき特定し、特定した前記格納領域に対応する出力項目名であって前記データが得られる前記カラムと対応付けられた格納領域の出力項目名を、前記Webページテンプレートを解析することにより特定し、
前記出力部は、
前記特定処理実行部が特定した前記出力項目名を少なくとも含む情報を、前記データの取得元となる前記カラムの説明情報として出力することを特徴とする請求項1記載のデータベース解析装置。
【請求項3】
前記特定処理実行部は、
入力項目が前記テーブルに含まれる場合には、前記テーブルの入力項目に対する見出しに相当する候補である見出し候補を複数抽出し、抽出した複数の前記見出し候補を対象として繰り返し構造が出現するがどうかを判定し、前記繰り返し構造が出現すると判定すると、前記複数の見出し候補の中から前記テーブルの前記入力項目に対する見出しを前記繰り返し構造に基づいて特定し、特定された前記見出しを、前記入力項目名として採用することを特徴とする請求項2記載のデータベース解析装置。
【請求項4】
前記特定処理実行部は、
出力項目が前記テーブルに含まれる場合には、前記テーブルの出力項目に対する見出しに相当する候補である見出し候補を複数抽出し、抽出した複数の前記見出し候補を対象として繰り返し構造が出現するがどうかを判定し、前記繰り返し構造が出現すると判定すると、前記複数の見出し候補の中から前記テーブルの前記出力項目に対する見出しを前記繰り返し構造に基づいて特定し、特定された前記見出しを、前記出力項目名として採用することを特徴とする請求項3記載のデータベース解析装置。
【請求項5】
前記特定処理実行部は、
判定の結果、前記繰り返し構造が出現しないと判定すると、所定の基準に基づいて前記複数の見出し候補の中から少なくとも一つの見出し候補を取り除く取り除き処理を実行し、取り除き処理後の見出し候補を対象として繰り返し構造が出現するがどうかを判定することを特徴とする請求項3または4のいずれかに記載のデータベース解析装置。
【請求項6】
前記特定処理実行部は、
前記Webアプリケーションプログラム内の文字列操作を静的解析で追跡してデータベース呼び出し関数に渡されるSQL文を特定するSQL文特定処理を実行すると共に、前記SQL文特定処理のときに文字列操作として代入操作と連結操作とのいずれにも該当しない文字列操作がなされたと判定すると、文字列操作に対する正規の生成規則とは異なる仮の生成規則であって前記正規の生成規則に復元可能な仮の生成規則を記録し、前記SQL文に基づいてテーブル名、カラム名を特定するに際して前記正規の生成規則が必要な場合にのみ、前記仮の生成規則を前記正規の生成規則に復元することを特徴とする請求項1〜5のいずれかに記載のデータベース解析装置。
【請求項7】
前記入力部は、
Webアプリケーションプログラムの格納ディレクトリの情報を示す格納ディレクトリ情報を入力し、
前記データベース解析装置は、さらに、
前記入力部が入力した前記格納ディレクトリ情報を参照することで、前記Webアプリケーションプログラムが使用するフレームワークを特定し、かつ、前記Webアプリケーションプログラムの格納ディレクトリから前記Webアプリ設定情報を抽出するフレームワーク特定部を備えたことを特徴とする請求項1〜6のいずれかに記載のデータベース解析装置。
【請求項8】
解析対象のデータベースを使用するWebアプリケーションプログラムと、前記Webアプリケーションプログラムの設定に使用する所定のWebアプリ設定情報が記載されたWebアプリ設定ファイルと、前記WebアプリケーションプログラムがWebページを生成する際の雛型情報を示すWebページテンプレートとを入力する処理と、
入力された前記Webアプリケーションプログラムによって生成されるWebページに表示される入力フォームの生成に使用される入力フォーム部品を、前記Webアプリケーションプログラムと、前記Webアプリ設定ファイルと、前記Webページテンプレートとに基づき特定し、特定した前記入力フォーム部品に対応する前記入力項目名であって前記解析対象のデータベースの有するテーブルのカラムに対応する入力項目名を、前記Webページテンプレートを解析することにより特定する処理と、
特定した前記入力項目名を少なくとも含む情報を、前記Webページに表示される前記入力フォームへ入力される入力データによって更新される前記カラムの説明情報として出力する処理と
をコンピュータに実行させるためのデータベース解析プログラム。

【図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

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate


【公開番号】特開2012−173745(P2012−173745A)
【公開日】平成24年9月10日(2012.9.10)
【国際特許分類】
【出願番号】特願2011−31645(P2011−31645)
【出願日】平成23年2月17日(2011.2.17)
【出願人】(000006013)三菱電機株式会社 (33,312)
【Fターム(参考)】