(57)【要約】【課題】業務システムにおける関数を介したデータ伝搬を把握する。【解決手段】実施形態の分析装置は、取得部と、分析部と、出力部とを有する。取得部は、入力パラメータまたはデータを格納するテーブルの所定のカラムにかかるアクセス記録を含む動作ログを取得する。分析部は、取得した動作ログに基づいて、予め設定された、入力に対する出力を定義する関数ごとに、動作ログに含まれる入力パラメータの値または第１のカラムの値を関数の入力とし、動作ログに含まれる第２のカラムの値を関数の出力とする関係を満たす入力パラメータまたは第１のカラムと、第２のカラムとの組み合わせを抽出する。出力部は、抽出された入力パラメータまたは第１のカラムと、第２のカラムとの組み合わせを出力する。【選択図】図２
2018060292.tif 000002
【特許請求の範囲】
【請求項１】
入力パラメータまたはデータを格納するテーブルの所定のカラムにかかるアクセス記録を含む動作ログを取得する取得部と、
取得した前記動作ログに基づいて、予め設定された、入力に対する出力を定義する関数ごとに、前記動作ログに含まれる入力パラメータの値または第１のカラムの値を前記関数の入力とし、前記動作ログに含まれる第２のカラムの値を前記関数の出力とする関係を満たす前記入力パラメータまたは前記第１のカラムと、前記第２のカラムとの組み合わせを抽出する分析部と、
抽出された前記入力パラメータまたは前記第１のカラムと、前記第２のカラムとの組み合わせを出力する出力部と、
を有することを特徴とする分析装置。
【請求項２】
前記取得部は、一つの入力をきっかけとして発生する複数の前記動作ログを単位ログとし、
前記分析部は、前記単位ログごとに、前記関係を満たす組み合わせを抽出する、
ことを特徴とする請求項１に記載の分析装置。
【請求項３】
前記分析部は、前記関数がキーとするキー値を有する場合、互いに一致する前記キー値の候補となる値を含み、かつ、前記関係を満たす前記入力パラメータまたは前記第１のカラムと、前記第２のカラムとの組み合わせを抽出する、
ことを特徴とする請求項１または２に記載の分析装置。
【請求項４】
入力パラメータまたはデータを格納するテーブルの所定のカラムにかかるアクセス記録を含む動作ログを取得し、
取得した前記動作ログに基づいて、予め設定された、入力に対する出力を定義する関数ごとに、前記動作ログに含まれる入力パラメータの値または第１のカラムの値を前記関数の入力とし、前記動作ログに含まれる第２のカラムの値を前記関数の出力とする関係を満たす前記入力パラメータまたは前記第１のカラムと、前記第２のカラムとの組み合わせを抽出し、
抽出された前記入力パラメータまたは前記第１のカラムと、前記第２のカラムとの組み合わせを出力する、
処理をコンピュータが実行することを特徴とする分析方法。
【請求項５】
入力パラメータまたはデータを格納するテーブルの所定のカラムにかかるアクセス記録を含む動作ログを取得し、
取得した前記動作ログに基づいて、予め設定された、入力に対する出力を定義する関数ごとに、前記動作ログに含まれる入力パラメータの値または第１のカラムの値を前記関数の入力とし、前記動作ログに含まれる第２のカラムの値を前記関数の出力とする関係を満たす前記入力パラメータまたは前記第１のカラムと、前記第２のカラムとの組み合わせを抽出し、
抽出された前記入力パラメータまたは前記第１のカラムと、前記第２のカラムとの組み合わせを出力する、
処理をコンピュータに実行させることを特徴とする分析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、分析装置、分析方法および分析プログラムに関する。
【背景技術】
【０００２】
従来、リレーショナル・データベース（ＲＤＢ）などのデータベース（以下、ＤＢと表記する）を用いる業務システムでは、既存の業務アプリケーションに対して新機能の追加などの保守開発を行う時に、新機能の追加などによる変更の影響がどこまで波及するかを分析することが求められる。この影響が及ぶ範囲の分析では、ＤＢに対するデータの書き込みや読み込みによってデータがどのように伝搬していくかを分析する。
【０００３】
例えば、ＤＢがＲＤＢであり、書き込みを行う業務アプリケーションがＪａｖａ（登録商標）で記述されている場合、書き込みはＳＱＬのＩＮＳＥＲＴやＵＰＤＡＴＥ命令に、読み込みはＳＥＬＥＣＴ命令にそれぞれ相当する。ＤＢのテーブル／カラムに書き込んだ値は、業務アプリケーションの既存機能や新たに追加された機能から上記の命令により読み出され、必要に応じて演算が施され変形した値として、別のテーブル／カラムに書き込まれることにより、値がそのままの値か変形された値として伝搬する。
【０００４】
業務システムが特定の値や値域を想定した構成になっている場合、業務アプリケーションに新たに追加された機能によって想定値域外の値が書き込まれ、それが伝搬することで新たなバグが発生する可能性がある。よって、保守開発では、データがどのように伝搬していくかを分析する。
【０００５】
データ伝搬の分析では、ＳＱＬとＪａｖａソースコードの両方を分析するのが望ましいが、ソースコードを正しく分析するのは手間を要する。より簡易にデータ伝搬を分析するための従来技術としては、ＳＱＬの実行履歴(動作ログ)を用いた分析が知られている。このデータ伝搬を分析する従来技術では、動作ログよりＳＱＬの入出力値で同じ値になっている関係を検出することで、データ伝搬を調べる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第２０１０／１３４３２５号
【特許文献２】特開２０１１−１６５０５１号公報
【特許文献３】特開２０１５−２１０７３５号公報
【非特許文献】
【０００７】
【非特許文献１】Cleve,  Hainaut,  “Dynamic  Analysis  of  SQL  Statements  for  Data-Intensive  Applications  Reverse  Engineering”,  2008.
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記の従来技術では、所定の計算式（関数）を介した間接的なデータ伝搬関係を分析することが困難であるという問題がある。
【０００９】
例えば、業務アプリケーションにおける関数には、所得税計算や通話料金計算を行うものがある。所得税計算では、課税所得金額に応じて税率と控除額が異なる。また、通話料金計算では、料金プランや通話時間に応じて時間あたりの通話料金が異なる。そして、これらの関数について、入出力に用いられるデータの組み合わせは未知であり、関数を介したデータ伝搬関係を把握することは容易なことではない。
【００１０】
１つの側面では、業務システムにおける関数を介したデータ伝搬を把握することができる分析装置、分析方法および分析プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
第１の案では、分析装置は、取得部と、分析部と、出力部とを有する。取得部は、入力パラメータまたはデータを格納するテーブルの所定のカラムにかかるアクセス記録を含む動作ログを取得する。分析部は、取得した動作ログに基づいて、予め設定された、入力に対する出力を定義する関数ごとに、動作ログに含まれる入力パラメータの値または第１のカラムの値を関数の入力とし、動作ログに含まれる第２のカラムの値を関数の出力とする関係を満たす入力パラメータまたは第１のカラムと、第２のカラムとの組み合わせを抽出する。出力部は、抽出された入力パラメータまたは第１のカラムと、第２のカラムとの組み合わせを出力する。
【発明の効果】
【００１２】
本発明の１実施態様によれば、業務システムにおける関数を介したデータ伝搬を把握することができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施形態にかかる分析装置の機能構成例を示すブロック図である。
【図２】図２は、実施形態にかかる分析装置の動作例を示すフローチャートである。
【図３】図３は、第１のサブ処理を例示するフローチャートである。
【図４−１】図４−１は、第２のサブ処理を例示するフローチャートである。
【図４−２】図４−２は、第２のサブ処理を例示するフローチャートである。
【図５】図５は、動作ログの一例を説明する説明図である。
【図６】図６は、データテーブルの一例を説明する説明図である。
【図７】図７は、外部定義関数の一例を説明する説明図である。
【図８】図８は、伝搬登録領域の内容の一例を説明する説明図である。
【図９】図９は、データ伝搬の一例を説明する説明図である。
【図１０】図１０は、動作ログの一例を説明する説明図である。
【図１１】図１１は、データテーブルの一例を説明する説明図である。
【図１２】図１２は、外部定義関数の一例を説明する説明図である。
【図１３】図１３は、ファイルデータの一例を説明する説明図である。
【図１４】図１４は、伝搬登録領域の内容の一例を説明する説明図である。
【図１５】図１５は、データ伝搬の一例を説明する説明図である。
【図１６】図１６は、分析プログラムを実行するコンピュータの一例を説明する説明図である。
【発明を実施するための形態】
【００１４】
以下、図面を参照して、実施形態にかかる分析装置、分析方法および分析プログラムを説明する。実施形態において同一の機能を有する構成には同一の符号を付し、重複する説明は省略する。なお、以下の実施形態で説明する分析装置、分析方法および分析プログラムは、一例を示すに過ぎず、実施形態を限定するものではない。また、以下の各実施形態は、矛盾しない範囲内で適宜組みあわせてもよい。
【００１５】
図１は、実施形態にかかる分析装置の機能構成例を示すブロック図である。図１に示すように、分析装置１は、ＰＣ（Personal  Computer）やワークステーション等の情報処理装置であり、記憶部１０、動作ログ取得部１１、分析部１２および出力部１３を有する。分析装置１は、クライアント３からの業務システム２へのアクセスによる業務システム２の動作ログ２０を取得し、取得した動作ログ２０の分析を行う。
【００１６】
業務システム２は、一例として、Ｗｅｂサーバ２１、業務サーバ２２および業務用ＤＢ２３を有する。Ｗｅｂサーバ２１は、クライアント３のブラウザからのアクセスを受け付けて、業務処理のサービスをクライアント３のブラウザに提供する。具体的には、Ｗｅｂサーバ２１は、クライアント３からのＨＴＴＰデータ２０ａ（HTTP:HyperText  Transfer  Protocol）を介した処理要求を業務サーバ２２へ通知し、業務サーバ２２の処理結果をクライアント３のブラウザに返す。
【００１７】
業務サーバ２２は、Ｗｅｂサーバ２１からの処理要求をもとに、業務用の各種情報を格納するＲＤＢである業務用ＤＢ２３へのアクセスを行って業務処理を実行し、処理結果をＷｅｂサーバ２１へ返す。
【００１８】
業務システム２では、業務処理のサービスを提供するＷｅｂサーバ２１へのクライアント３からの要求により、業務サーバ２２が業務用ＤＢ２３にアクセスして業務処理を実行した際の動作ログ２０をログファイル（図示しない）などに格納する。例えば、業務システム２では、クライアント３からのＨＴＴＰデータ２０ａ、バッチ処理における起動パラメータ２０ｂおよび業務用ＤＢ２３へのアクセスにかかるＤＢアクセスデータ２０ｃを動作ログ２０として時刻情報付きでログファイルに格納する。この動作ログ２０は、一例として、実行したＳＱＬおよびパラメータや、ＳＥＬＥＣＴ命令の場合は検索結果がある。
【００１９】
なお、本実施形態では、Ｗｅｂサーバ２１を介したクライアント３からの要求によるオンライン実行の動作ログ２０の分析を例示する。具体的には、動作ログ２０には、ブラウザ上の画面から入力した値を用いて、業務サーバ２２が業務用ＤＢ２３へアクセスして業務処理を実行した際の履歴が記述されている。なお、分析する動作ログ２０の内容については、上記の例に限定しない。例えば、業務サーバ２２がバッチ処理により業務用ＤＢ２３にアクセスして業務処理を実行する場合の動作ログ２０の分析にも適用可能である。
【００２０】
また、本実施形態では、ＤＢアクセスデータ２０ｃにおいて、業務用ＤＢ２３へのアクセスにかかるＳＱＬ文は、バインド変数を用いて記述されていることを前提とする。このＳＱＬ文については、変数値が埋め込まれているものからバインド変数に相当する部分を抽出し、ＳＱＬとバインド変数、バインド変数値に変換することは可能である。
【００２１】
記憶部１０は、ＨＤＤ２７０（図１６参照）などであり伝搬登録領域１０ａ、外部定義関数１０ｂを有する。伝搬登録領域１０ａは、分析部１２が分析したデータ伝搬関係の情報を記憶する領域である。外部定義関数１０ｂは、業務システム２で用いられると考えられる計算式を予め定義した関数である。外部定義関数１０ｂでは、入力に対する出力が所定の計算式により定義されている。この外部定義関数１０ｂは、業務システム２のバッチ処理などで用いられるファイル２４をコピーした内容などをもとに、業務システム２で用いられると考えられる計算式ごとに記憶部１０に設定される。
【００２２】
一例として、外部定義関数１０ｂは、所得税の計算式、通話料金の計算式などがある。記憶部１０は、必ずしも業務システム２における実際の実装と同じである必要はなく、仕様（例えば所得税の計算式）を満たしていればよい。なお、本実施形態では、外部定義関数１０ｂにおいて、計算に用いる入力および計算結果の出力の値は数値として説明するが、入出力の値は文字列の演算などにおける非数値であってもよい。
【００２３】
例えば、外部定義関数１０ｂは、入力パラメータとして、１個以上の数値入力を有する。また、外部定義関数１０ｂは、入力パラメータとして、時刻情報またはキー値を有してもよい。また、外部定義関数１０ｂは、出力パラメータとして、１個の数値を有する。ただし、外部定義関数１０ｂは、入力パラメータの値では計算できない場合はＮＵＬＬ値を返してもよい。
【００２４】
時刻情報は、動作ログ２０に記録された時刻を用いる。例えば、時刻情報は、外部定義関数１０ｂで外部から与えるファイルを用いて出力値を計算する場合に、そのファイルを時刻で特定することを意図している。
【００２５】
キー値は、例えばユーザＩＤなどのキーとなる識別子である。キー値は、外部から与えるファイルなどを用いて、ファイルからキー値に対応する特定の値を選択して外部定義関数１０ｂで計算を行うときに用いる。例えば、ユーザＩＤによる特定の利用者の通話料金を計算する場合、期待するカラムの組み合わせを選択していれば、外部定義関数１０ｂ内でキー値を用いてファイルデータの列から利用者を特定する。そして、特定した利用者の行に対応する通話量を選択するのにキー値を用いることができる。
【００２６】
動作ログ取得部１１は、分析対象の業務システム２における所定のログファイルへアクセスするなどして、業務システム２の動作ログ２０を取得する。具体的には、動作ログ取得部１１は、業務システム２の動作ログ２０として、クライアント３の画面で入力し、業務サーバ２２に入力されるＨＴＴＰデータ２０ａ（画面パラメータ）と、その入力による業務用ＤＢ２３の所定のカラムへのアクセス内容と、これらの実行順を判断可能な情報（処理時刻など）を取得する。業務用ＤＢ２３の所定のカラムへのアクセス内容には、クライアント３の画面からの入力による画面パラメータがきっかけで実行される一連のＳＱＬログ（ＳＱＬ文、入力パラメータ（バインド変数値）、ＳＥＬＥＣＴ文の場合は加えて検索結果）がある。
【００２７】
なお、クライアント３の一画面からの入力がきっかけで発生した業務処理における動作ログ２０一式（画面パラメータとＳＱＬログ）を以下では画面単位ログとも呼ぶこととする。例えば、動作ログ取得部１１は、一画面からの入力のログをきっかけとして実行される、ＳＱＬの種類が同一である動作ログ２０を画面単位ログとして取得する。
【００２８】
分析部１２は、動作ログ取得部１１が取得した動作ログ２０の内容をもとに、画面パラメータ内の変数値や業務用ＤＢ２３のあるカラムから読み出された値について、業務用ＤＢ２３の所定のカラムへ伝搬するデータ伝搬があるか否かを分析する。分析部１２は、分析結果を伝搬登録領域１０ａに格納する。出力部１３は、分析部１２の分析結果をディスプレイへの表示や、プリンターによる印字により出力する。
【００２９】
分析部１２は、所定のカラムについての動作ログ２０をもとに、画面パラメータ内の変数値や業務用ＤＢ２３のあるカラムから読み出された値などの入力変数値と、所定のカラムへ書込む出力変数値とが一致するか否かを判定する。分析部１２は、この判定結果をもとに、所定のカラムへの直接的なデータ伝搬があるか否かを分析する。例えば、分析部１２は、入力変数値と、出力変数値とが一致する場合、入力変数値にかかる画面パラメータまたはカラムから出力変数値にかかるカラムへの直接的なデータ伝搬があるものと分析する。分析部１２は、直接的なデータ伝搬があるものと分析された入力側の画面パラメータまたはカラムと、出力側のカラムとの組み合わせを抽出し、分析結果として出力する。
【００３０】
また、分析部１２は、動作ログ２０に含まれる画面パラメータの値または所定のカラムの値を外部定義関数１０ｂの入力として計算した結果（外部定義関数１０ｂの出力）が別のカラムに格納されたと仮定し、この入出力の関係を満たす組み合わせが存在するか否かを動作ログ２０より分析する。そして、分析部１２は、入出力の関係を満たす組み合わせを外部定義関数１０ｂを介した間接的なデータ伝搬が存在したものと推定する。
【００３１】
具体的には、分析部１２は、動作ログ２０に基づいて、予め設定された外部定義関数１０ｂごとに、動作ログ２０に含まれる画面パラメータの値または所定のカラムの値を外部定義関数１０ｂの入力として外部定義関数１０ｂを計算する。次いで、分析部１２は、動作ログ２０に含まれる入力とは別のカラムの値が外部定義関数１０ｂの計算値と一致するか否かを判定する。次いで、分析部１２は、入出力の関係を満たす（計算値が一致する）組み合わせ、すなわち、入力側の画面パラメータまたはカラムと、出力側のカラムとの組み合わせを抽出する。次いで、分析部１２は、抽出した組み合わせを外部定義関数１０ｂを介した間接的なデータ伝搬がある分析結果として出力する。
【００３２】
また、分析部１２は、画面パラメータまたはカラムに加えて、ファイルに格納された値（例えばユーザＩＤ）などをキー値として外部定義関数１０ｂに用いる場合、ファイルの各列をテーブルのカラムと同様に見なす。次いで、分析部１２は、ファイル内を特定するキー値を画面パラメータまたはカラムとともに外部定義関数１０ｂの入力値に加える。次いで、分析部１２は、キー値とともにファイルの特定の（例えば数値で構成される）列と０個以上のカラムが外部定義関数１０ｂを介して別のカラムに伝搬するか否かを推定する。
【００３３】
（１）外部定義関数１０ｂがキー値を用いない場合
分析部１２は、ある外部定義関数１０ｂの数値入力数と同じ、動作ログ２０におけるＨＴＴＰパラメータないしテーブルのカラム名と、出力先候補であるカラム名の組み合わせを生成する。ただし、分析部１２は、ＨＴＴＰパラメータ名ないしカラム名は、その値が数値であるものを用いるものとする。
【００３４】
次いで、分析部１２は、動作ログ２０から入力値（ＨＴＴＰパラメータ値ないしカラム値）を取得し、取得した入力値を外部定義関数１０ｂに与えて計算を行う。次いで、分析部１２は、計算により得られた値が出力先候補のカラム値と常に一致するか否かを判断する。
【００３５】
常に一致する組み合わせが存在する場合、分析部１２は、入力（ＨＴＴＰパラメータ名ないしテーブルのカラム名）と出力（カラム名）は外部定義関数１０ｂを介してデータ伝搬関係にあると推定する。
【００３６】
なお、出力先は画面単位ログに含まれるＩＮＳＥＲＴないしＵＰＤＡＴＥで更新されるカラムであり、入力はそのＩＮＳＥＲＴ／ＵＰＤＡＴＥに先立ち実行されたＳＥＬＥＣＴ文で取得されたカラムないしＨＴＴＰパラメータである。キー値を用いない場合は、外部定義関数１０ｂ内でファイル参照は行わないものとする。
【００３７】
（２）外部定義関数１０ｂがキー値を用いる場合
分析部１２は、ある外部定義関数１０ｂの数値入力数と同じ、ＨＴＴＰパラメータ名ないしテーブルのカラム名と、出力先候補であるカラム名の組み合わせを生成する。ただしＨＴＴＰパラメータ名ないしカラム名は、その値が数値であるものを用いるものとする。
【００３８】
次いで、分析部１２は、数値入力があるＨＴＴＰパラメータないしテーブルから任意のカラムを１個選択し、キー候補とする。次いで、分析部１２は、入力カラムが複数のテーブルに存在する場合、それぞれに同じ値を持つカラムがある組み合わせを生成する。同様に、分析部１２は、出力先候補カラムを持つテーブルから任意のカラムを１個選択し、出力先のキーカラムとする。
【００３９】
次いで、分析部１２は、動作ログ２０から入力キー値と出力キー値が一致する場合、入力値（ＨＴＴＰパラメータ値ないしカラム値）を取得して外部定義関数１０ｂに与えて計算を行う。ついで、分析部１２は、計算により得られた値が出力先カラム値と常に一致するか否かを判断する。
【００４０】
常に一致する組み合わせが存在する場合、分析部１２は、入力（ＨＴＴＰパラメータ名ないしテーブルのカラム名）と出力（カラム名）は外部定義関数１０ｂを介してデータ伝搬関係にあると推定する。
【００４１】
なお、分析部１２は、外部定義関数１０ｂがファイルの値を用いて計算する場合は、動作ログ２０を取得するときに時刻情報付きでファイルを保存する。次いで、分析部１２は、動作ログ２０より取得した時刻情報を参照して、外部定義関数１０ｂで用いるファイルを特定する。例えば料金計算で１ヶ月分の料金を計算するために利用者ごとの１月分の使用量が記録されたファイルを参照する場合、外部定義関数１０ｂに動作ログ２０の時刻情報も併せて与える。分析部１２は、引数として渡された時刻情報を用いて、計算に使用するファイルを選択し、外部定義関数１０ｂを計算する。
【００４２】
図２は、実施形態にかかる分析装置１の動作例を示すフローチャートである。図２に示すように、処理が開始されると、動作ログ取得部１１は、分析対象の業務システム２からログファイルを参照して動作ログ２０を取得する（Ｓ１）。取得する動作ログ２０には、画面パラメータ（ＨＴＴＰパラメータ）、ＳＱＬステートメント、ＳＱＬパラメータ、ＳＱＬがＳＥＬＥＣＴの場合は検索結果、とそれぞれを実行した時刻（実行順を判別可能な精度）がある。なお、動作ログ取得部１１は、ＨＴＴＰパラメータからは、ＧＥＴないしＰＯＳＴメソッド要求で送信される、ＵＲＬないしメッセージボディに記述されたクエリ文字列（パラメータ名と値の対）を抽出する。
【００４３】
次いで、動作ログ取得部１１は、画面パラメータをもとに、取得した動作ログ２０を画面単位の画面単位ログに分割する（Ｓ２）。例えば、動作ログ取得部１１は、同一の画面を表示するＵＲＬへのアクセスごとに動作ログ２０を分割する。そして、動作ログ取得部１１は、分割した画面単位ログからＳＱＬ列を抽出する。
【００４４】
次いで、動作ログ取得部１１は、画面単位ログごとに抽出されたＳＱＬ列をもとに、実行されたＳＱＬ文の組み合わせが同一の画面単位の動作ログの集合を作る（Ｓ３）。このとき、同一のＳＱＬ文（ＳＱＬパラメータは異なる）の実行回数の違いは考慮しないものとする。
【００４５】
次いで、分析部１２は、作成した画面単位の動作ログの集合ごとに、Ｓ４〜Ｓ１１の第１ループ処理を実行する。第１ループ処理が開始されると、分析部１２は、公知の方法を用いて、ＩＮＳＥＲＴするテーブルのカラムと、それ以前に実行したＳＥＬＥＣＴ結果で得られたカラムとを関係づける。具体的には、分析部１２は、あるカラムからＳＥＬＥＣＴ文で読み出された値（ｙ１）と、別のカラムにＩＮＳＥＲＴ文で書き込む値（ｚ１）とが常にｙ１＝ｚ１を満たす場合に、あるカラムから別のカラムへの直接的なデータ伝搬があるものと推定する。
【００４６】
次いで、分析部１２は、記憶部１０の外部定義関数１０ｂごとに、Ｓ５〜Ｓ１０の第２ループ処理を実行する。第２ループ処理が開始されると、分析部１２は、記憶部１０における記録領域に伝搬登録領域１０ａを用意（確保）する（Ｓ６）。
【００４７】
伝搬登録領域１０ａは、例えば、入力先の候補とする画面パラメータまたはカラムと、出力先の候補とするカラムとの組み合わせごとに、データの伝搬関係があるか否かを記録する配列形式の記憶領域である。例えば、伝搬登録領域１０ａは、関数のパラメータに設定したカラム名と、対応するキーカラム名ないし画面パラメータ名と、キー画面パラメータ名と、関数値の出力先カラム名と、キーカラム名との組み合わせでデータ伝搬関係にあるか否か（ＴＲＵＥ／ＦＡＬＳＥ）を記録する。
【００４８】
次いで、分析部１２は、外部定義関数１０ｂでキー値を用いるか否かを判定する（Ｓ７）。具体的には、分析部１２は、ユーザＩＤ等の所定の識別子をキー値として用いているか否かを判定する。キー値を用いない場合（Ｓ７：ＮＯ）、分析部１２は、第１のサブ処理を実行する（Ｓ８）。また、キー値を用いる場合（Ｓ７：ＹＥＳ）、分析部１２は、第２のサブ処理を実行する（Ｓ９）。
【００４９】
図３は、第１のサブ処理を例示するフローチャートである。図３に示すように、第１のサブ処理が開始されると、分析部１２は、外部定義関数１０ｂから、計算に使用するカラムないし画面パラメータの数（計算パラメータ数）を取得する（Ｓ２０）。
【００５０】
次いで、分析部１２は、動作ログ２０ごとに、Ｓ２１〜Ｓ３４の第１ループ処理を実行する。第１ループ処理が開始されると、分析部１２は、画面単位ログに含まれるＩＮＳＥＲＴ文ないしＵＰＤＡＴＥ文を抽出する（Ｓ２２）。
【００５１】
次いで、分析部１２は、上記のＩＮＳＥＲＴないしＵＰＤＡＴＥ文で書き込むカラムのうち数値であるものを１個ずつ選択し、書き込むカラムが数値のものごとに、Ｓ２３〜Ｓ３３の第２ループ処理を実行する。第２ループ処理が開始されると、分析部１２は、ＩＮＳＥＲＴ文ないしＵＰＤＡＴＥ文より以前に実行したＳＥＬＥＣＴ文を抽出する（Ｓ２４）。
【００５２】
次いで、分析部１２は、画面パラメータの値と上記ＳＥＬＥＣＴ文で取得したカラム値から、計算パラメータ数の長さの順列を生成する（Ｓ２５）。次いで、分析部１２は、生成した順列ごとにＳ２６〜Ｓ３２の第３ループ処理を実行する。
【００５３】
第３ループ処理が開始されると、分析部１２は、順列で選択された数値に対応するカラム名ないし画面パラメータ名とＩＮＳＥＲＴないしＵＰＤＡＴＥで書き込むカラム名の組が伝搬登録領域１０ａに既に登録されていて、かつデータ伝搬関係があるか否か（ＴＲＵＥ／ＦＡＬＳＥ）を判定する（Ｓ２７）。
【００５４】
伝搬登録領域１０ａに既に登録されていて、かつデータ伝搬関係でない（ＦＡＬＳＥ）場合（Ｓ２７：ＮＯ）、分析部１２は、Ｓ２６に処理を戻し、関数値の計算をせずに次の順列の処理に移る。
【００５５】
伝搬登録領域１０ａに既に登録されていない場合、または、データ伝搬関係がある（ＴＲＵＥ）場合（Ｓ２７：ＹＥＳ）、分析部１２は、順列の数値の順番で外部定義関数１０ｂのパラメータに値を設定し、関数値を計算する（Ｓ２８）。
【００５６】
次いで、分析部１２は、計算した関数値がＩＮＳＥＲＴないしＵＰＤＡＴＥで書き込んだ値（出力先候補のカラム値）と一致するか否かを判定する（Ｓ２９）。
【００５７】
関数値がＩＮＳＥＲＴないしＵＰＤＡＴＥで書き込んだ値と一致する場合（Ｓ２９：ＹＥＳ）、分析部１２は、書き込んだカラム名がパラメータに設定したカラム名ないし画面パラメータ名の組とデータ伝搬関係にあること（ＴＲＵＥ）を伝搬登録領域１０ａに記録する（Ｓ３０）。ただし、伝搬登録領域１０ａにおいてキーカラム名はｎｕｌｌを設定する。
【００５８】
一方、上記の組で計算した関数値がＩＮＳＥＲＴないしＵＰＤＡＴＥで書き込んだ値と一致せず、かつ伝搬登録領域１０ａに上記の組でデータ伝搬関係であると記録されている場合（Ｓ２９：ＮＯ）、分析部１２は、伝搬登録領域１０ａの上記の組がデータ伝搬関係ではない（ＦＡＬＳＥ）と更新する（Ｓ３１）。
【００５９】
分析部１２は、上記の第１、第２および第３ループ処理によりすべての画面単位ログで上記を実行した結果、伝搬登録領域１０ａでデータ伝搬関係にあると判断された組（ＴＲＵＥの組）を、外部定義関数１０ｂを介してデータ伝搬関係にあるものと推定する。
【００６０】
図４−１および図４−２は、第２のサブ処理を例示するフローチャートである。図４−１および図４−２に示すように、第２のサブ処理が開始されると、分析部１２は、外部定義関数１０ｂから、計算に使用するカラムないし画面パラメータの数（計算パラメータ数；キーと日付パラメータを除いた数）を取得する（Ｓ４０）。
【００６１】
次いで、分析部１２は、動作ログ２０ごとに、Ｓ４１〜Ｓ５９の第１ループ処理を実行する。第１ループ処理が開始されると、分析部１２は、画面単位ログに含まれるＩＮＳＥＲＴ文ないしＵＰＤＡＴＥ文を抽出する（Ｓ４２）。
【００６２】
次いで、分析部１２は、上記のＩＮＳＥＲＴないしＵＰＤＡＴＥ文で書き込むカラムのうち数値であるものを１個ずつ選択し、書き込むカラムが数値のものごとに、Ｓ４３〜Ｓ５８の第２ループ処理を実行する。
【００６３】
第２ループ処理が開始されると、分析部１２は、上記のＳＱＬで、ＩＮＳＥＲＴの場合は書き込むカラムから１個ずつ、ＵＰＤＡＴＥの場合はＷＨＥＲＥ句に出現するカラムから１個ずつ選択し、データ伝搬先のキーカラム名と仮定する（Ｓ４４）。次いで、分析部１２は、仮定したキーカラム名ごとにＳ４４〜Ｓ５７の第３ループ処理を実行する。
【００６４】
第３ループ処理が開始されると、分析部１２は、当該ＩＮＳＥＲＴ文ないしＵＰＤＡＴＥ文より以前に実行したＳＥＬＥＣＴ文を抽出する（Ｓ４５）。
【００６５】
次いで、分析部１２は、画面パラメータと上記ＳＥＬＥＣＴ文で取得したカラム値から、計算パラメータ数の個数の画面パラメータないしカラムを選択し、順列を作成する（Ｓ４６）。
【００６６】
次いで、分析部１２は、生成した順列ごとにＳ４７〜Ｓ５６の第４ループ処理を実行する。具体的には、カラムに対応するＳＥＬＥＣＴ文からカラム（キーカラム）名ごと、画面パラメータのレコード相当から画面パラメータ（キー）名ごとに第４ループ処理が行われる。
【００６７】
なお、分析部１２は、画面パラメータの場合、同一パラメータ名が複数回出現するか、画面パラメータ名の前半が共通で後半が数値で異なっているものがある場合、それらをグループとして扱う。また、分析部１２は、さらに画面パラメータ名の個数が同じグループをまとめてレコードと同様に扱う。
【００６８】
次いで、分析部１２は、順列に含まれるカラムに対応するＳＥＬＥＣＴ文から任意のカラムを選択し、伝搬元のキーカラム名と仮定する。次いで、分析部１２は、同様に順列に含まれる画面パラメータのレコード相当から任意の画面パラメータ名を選択し、伝搬元のキー名と仮定する。
【００６９】
次いで、分析部１２は、上記で選択したＳＥＬＥＣＴ文の検索結果レコードのうち、選択したデータ伝搬元のキーカラム値がデータ伝搬先のキーカラム値と１レコードだけ一致するか、または、選択した画面パラメータのデータ伝搬元のキー値がデータ伝搬先のキーカラム値と１レコードだけ一致するか、を判断する（Ｓ４８）。該当レコードがない場合（Ｓ４８：ＮＯ）、分析部１２は、Ｓ４７へ処理を戻し、次の順列の処理を行う。
【００７０】
該当レコードがある場合（Ｓ４８：ＹＥＳ）、分析部１２は、順列で選択された数値に対応するカラム名と、キーカラム名ないし画面パラメータ名と、キー名と、ＩＮＳＥＲＴないしＵＰＤＡＴＥで書き込むカラム名と、キーカラム名の組が伝搬登録領域１０ａに登録されていて、かつデータ伝搬関係があるか否か（ＴＲＵＥ／ＦＡＬＳＥ）を判定する（Ｓ４９）。
【００７１】
伝搬登録領域１０ａに既に登録されていて、かつデータ伝搬関係でない（ＦＡＬＳＥ）場合（Ｓ４９：ＮＯ）、分析部１２は、Ｓ４７に処理を戻し、関数値の計算をせずに次の順列の処理に移る。
【００７２】
伝搬登録領域１０ａに既に登録されていない場合、または、データ伝搬関係がある（ＴＲＵＥ）場合（Ｓ４９：ＹＥＳ）、分析部１２は、順列の数値の順番で外部定義関数１０ｂのパラメータに値を設定し、関数値を計算する（Ｓ５０）。ただし、外部定義関数１０ｂのパラメータに日付がある場合は、当該ＩＮＳＥＲＴないしＵＰＤＡＴＥの実行時刻を動作ログ２０から取得したものを設定する（Ｓ５１）。また、外部定義関数１０ｂのキーパラメータにはキー値を設定し関数を実行する（Ｓ５２）。
【００７３】
次いで、分析部１２は、計算した関数値がＩＮＳＥＲＴないしＵＰＤＡＴＥで書き込んだ値（出力先候補のカラム値）と一致するか否かを判定する（Ｓ５３）。
【００７４】
関数値がＩＮＳＥＲＴないしＵＰＤＡＴＥで書き込んだ値と一致する場合（Ｓ５３：ＹＥＳ）、分析部１２は、書き込んだカラム名と、キーカラム名がパラメータに設定したカラム名と、キーカラム名ないし画面パラメータ名と、キー名の組とデータ伝搬関係にあること（ＴＲＵＥ）を伝搬登録領域１０ａに記録する（Ｓ５４）。
【００７５】
一方、上記の組で計算した関数値がＩＮＳＥＲＴないしＵＰＤＡＴＥで書き込んだ値と一致せず、かつ伝搬登録領域１０ａに上記の組でデータ伝搬関係であると記録されている場合（Ｓ５３：ＮＯ）、分析部１２は、伝搬登録領域１０ａの上記の組がデータ伝搬関係ではない（ＦＡＬＳＥ）と更新する（Ｓ５５）。
【００７６】
分析部１２は、上記の第１、第２、第３および第４ループ処理によりすべての画面単位ログで上記を実行した結果、伝搬登録領域１０ａでデータ伝搬関係にあると判断された組（キー値を含むＴＲＵＥの組）を、外部定義関数１０ｂを介してデータ伝搬関係にあるものと推定する。
【００７７】
図２に戻り、第１、第２ループ処理が終了したところで、出力部１３は、伝搬登録領域１０ａをもとに、第１、第２ループ処理による分析部１２の分析結果をディスプレイへの表示や、プリンターによる印字により出力する（Ｓ１２）。具体的には、出力部１３は、伝搬登録領域１０ａでデータ伝搬関係である組を推定結果とし、業務用ＤＢ２３の所定のカラムと、このカラムへのデータ伝搬があるものと分析された画面パラメータ内の変数値や業務用ＤＢのカラムとの対応関係を出力する。
【００７８】
一例として、出力部１３は、業務用ＤＢ２３のカラムおよび画面パラメータ内の変数値を列挙したテーブルについて、対応関係のあるカラムや変数値同士を線で結びつけた画像を表示する。なお、直接的なデータ伝搬があるものと分析されたカラムや変数値同士の対応関係を示す画像の出力態様と、外部定義関数１０ｂによる間接的なデータ伝搬があるものと分析されたカラムや変数値同士の対応関係を示す画像の出力態様とは互いに異なるものであってもよい。例えば、出力部１３は、対応関係のあるカラムや変数値同士を線で結びつけた画像として表示する場合、直接的なデータ伝搬があるものと分析されたカラムや変数値同士は実線で表示し、間接的なデータ伝搬があるものと分析されたカラムや変数値同士は破線で表示してもよい。このように、直接的なデータ伝搬があるものと分析された分析結果と、間接的なデータ伝搬があるものと分析された分析結果との出力態様を互いに異なるようにすることで、分析結果をより見やすくすることができる。
【００７９】
ここで、実際の動作ログ２０を用いた具体例（外部定義関数１０ｂがキー値を用いない場合／キー値を用いる場合）を説明する。まず、キー値を用いない場合の具体例を説明する。
【００８０】
（キー値を用いない場合の具体例）
図５は、動作ログの一例を説明する説明図である。図５に示すように、業務システム２からは、動作ログＤ１１、Ｄ１２が得られるものとする。
【００８１】
動作ログＤ１１と動作ログＤ１２は、値が異なるもののそれぞれＳＱＬ１とＳＱＬ４、ＳＱＬ２とＳＱＬ５、ＳＱＬ３とＳＱＬ６、が同じＳＱＬである。また、ＵＲＬも値が異なるものの同様の構造（アドレス、クエリパラメータ名が同じ）になっているため、動作ログＤ１１と動作ログＤ１２は同じ画面単位ログに属する。またＵＲＬのクエリパラメータ値からｖｉｓｉｔｏｒｓには数値が設定され、ｗｅａｔｈｅｒには文字列が設定されると推定される。
【００８２】
図６は、データテーブルの一例を説明する説明図である。図６に示すように、業務システム２におけるテーブルスキーマは、データテーブルＴ１１、Ｔ１２のとおりである。履歴テーブル（データテーブルＴ１１）のうち、日付カラムと天候カラムは文字列データが格納され、来場者数カラムは数値が格納されるとする。金額テーブル（データテーブルＴ１２）の累計円カラムと累計ドルカラムは数値が格納されるとする。これらはテーブルスキーマ情報から得られる。またＳＱＬで読み書きされる値から推定することもできる。
【００８３】
図７は、外部定義関数１０ｂの一例を説明する説明図である。図７では、外部定義関数１０ｂをＪａｖａ言語で記述した例を示す。図７に例示する外部定義関数１０ｂは、来場者数とそれまでのドル換算の累計入場料を入力とし、来場者数から求めた入場料（円）をドル換算して累計した値を計算する（出力）ものである。明示していない関数ｄｏｕｂｌｅ  ｇｅｔＲａｔｅ（）はあらかじめ設定した１ドルあたりの円の値（本例では１１０）を返すものとする。同様にｄｏｕｂｌｅ  ｒｏｕｎｄ（ｄｏｕｂｌｅ）は引数のｄｏｕｂｌｅ値を小数点以下２桁で丸めた値を返すものとする。また、ここには明示しない手段で本関数ではキーを用いないことが判断できるとする。例えばキーを用いる場合は関数のパラメータにＳｔｒｉｎｇ型を用いるなどの規則を導入することで、本関数ではキーを用いないと判断できる。
【００８４】
図８は、伝搬登録領域１０ａの内容の一例を説明する説明図である。図８に示すように、入力パラメータ列には伝搬登録領域１０ａの計算パラメータ数分のカラム名とキー名の並びを格納することとする。例えば計算パラメータ数が２個で、第１のパラメータに対応するカラムが「金額．累計円」、キーがなし、第２のパラメータに対応する画面パラメータが「ｖｉｓｉｔｏｒｓ」、キーがなしとする。また、外部計算結果を格納するカラムが「金額．累計円」、キーがなしとする。この時、キーがないときに「ｎｕｌｌ」を設定し、並びを連結する文字として「＃」を用いることにすると、入力パラメータ列の値として「金額．累計円＃ｎｕｌｌ＃ｖｉｓｉｔｏｒｓ＃ｎｕｌｌ」を、出力カラム名・キー名の値として「金額．累計円＃ｎｕｌｌ」をそれぞれ登録する。また、有効カラムには入力パラメータ列と出力カラム名・キー名の関係が検出された場合にＴＲＵＥを、正しくないと判断された場合にＦＡＬＳＥを記録する。
【００８５】
上記のように図８に示した外部定義関数１０ｂはキー値を用いないと判明しているため、分析部１２は、第１のサブ処理を実行する。なお、外部定義関数１０ｂのパラメータはＤｏｕｂｌｅが２個なので、計算パラメータ数は２である。
【００８６】
分析部１２は、最初に動作ログＤ１１を用いて処理を行う（第１ループ処理）。動作ログＤ１１に含まれるＩＮＳＥＲＴないしＵＰＤＡＴＥは、図５のＳＱＬ１、ＳＱＬ３が該当する。図６に示したテーブルスキーマを参照して各ＳＱＬで書き込む数値のカラムはＳＱＬ１では「履歴．来場者数」、ＳＱＬ３では「金額．累計円」と「金額．累計ドル」の２種類である。
【００８７】
分析部１２は、まず、「履歴．来場者数」を選択する（第２ループ処理）。動作ログＤ１１においてＳＱＬ１より以前に実行したＳＥＬＥＣＴ文は存在しない。画面パラメータ値ではｖｉｓｉｔｏｒｓが数値を持つ。
【００８８】
計算パラメータ数（２）の長さの順列が生成できないため、分析部１２は、ＳＱＬ１を対象とする外部定義関数１０ｂの計算を行わない。次に、分析部１２は、「金額．累計円」（値は５７９０００）を選択する（第２ループ処理）。
【００８９】
動作ログＤ１１においてＳＱＬ３より以前に実行したＳＥＬＥＣＴ文はＳＱＬ２があり、「金額．累計円」と「金額．累計ドル」が取得される。また画面パラメータ値ではｖｉｓｉｔｏｒｓが数値を持つ。そのため長さ２の順列として、（金額．累計円，金額．累計ドル），（金額．累計円，ｖｉｓｉｔｏｒｓ），（金額．累計ドル，金額．累計円），（金額．累計ドル，ｖｉｓｉｔｏｒｓ），（ｖｉｓｉｔｏｒｓ，金額．累計円），（ｖｉｓｉｔｏｒｓ，金額．累計ドル）の６通りが生成される。対応する値は、それぞれ（４５６０００，４１４５．４６），（４５６０００，１２３），（４１４５．４６，４５６０００），（４１４５．４６，１２３），（１２３，４５６０００），（１２３，４１４５．４６）である。
【００９０】
まず（４５６０００，４１４５．４６）に対応する（金額．累計円，金額．累計ドル）は伝搬登録領域１０ａに登録されていない（図８参照）。分析部１２は、外部定義関数１０ｂを計算すると、４１４９６００．０１となり、「金額．累計円」の値５７９０００と一致しないため、伝搬登録領域１０ａにデータ伝搬関係ではないと登録する。具体的には図８の最初の行に示すように、入力パラメータ列として「金額．累計円＃ｎｕｌｌ＃金額．累計ドル＃ｎｕｌｌ」を、出力カラム名・キー名として「金額．累計円＃ｎｕｌｌ」を、有効にＦＡＬＳＥを登録する。同様に分析部１２は他の順列を用いて計算し、伝搬登録領域１０ａを更新する。
【００９１】
次に、分析部１２は、「金額．累計ドル」（値は５２６３．６４）を選択し（第２ループ処理）、同様に計算する。この場合、（１２３，４１４５．４６）に対応する（ｖｉｓｉｔｏｒｓ，金額．累計ドル）の時に外部定義関数１０ｂの値が一致する。
【００９２】
次に、分析部１２は、動作ログＤ１２を用いて処理を行う（第１ループ処理）。動作ログＤ１２に含まれるＩＮＳＥＲＴないしＵＰＤＡＴＥは図５のＳＱＬ４、ＳＱＬ６が該当する。図６に示したテーブルスキーマを参照して各ＳＱＬで書き込む数値のカラムはＳＱＬ４では「履歴．来場者数」、ＳＱＬ６では「金額．累計円」と「金額．累計ドル」の２種類である。
【００９３】
まず、分析部１２は、「履歴．来場者数」を選択する（第２ループ処理）。動作ログＤ１２においてＳＱＬ４より以前に実行したＳＥＬＥＣＴ文は存在しない。画面パラメータ値ではｖｉｓｉｔｏｒｓが数値を持つ。計算パラメータ数（２）の長さの順列が生成できないため、分析部１２は、ＳＱＬ４を対象とする外部定義関数１０ｂの計算は行わない。
【００９４】
次に、分析部１２は、「金額．累計円」（値は６０６０００）を選択する（第２ループ処理）。動作ログＤ１２においてＳＱＬ６より以前に実行したＳＥＬＥＣＴ文はＳＱＬ５があり、「金額．累計円」と「金額．累計ドル」が取得される。また画面パラメータ値ではｖｉｓｉｔｏｒｓが数値を持つ。そのため長さ２の順列として、（金額．累計円，金額．累計ドル），（金額．累計円，ｖｉｓｉｔｏｒｓ），（金額．累計ドル，金額．累計円），（金額．累計ドル，ｖｉｓｉｔｏｒｓ），（ｖｉｓｉｔｏｒｓ，金額．累計円），（ｖｉｓｉｔｏｒｓ，金額．累計ドル）、の６通りが生成される。対応する値はそれぞれ（５７９０００，５２６３．６４），（５７９０００，２７），（５２６３．６４，５７９０００），（５２６３．６４，２７），（２７，５７９０００），（２７，５２６３．６４）である。
【００９５】
まず、（５７９０００，５２６３．６４）に対応する（金額．累計円，金額．累計ドル）は図８に示す伝搬登録領域１０ａに登録されている（入力パラメータ列が「金額．累計円＃ｎｕｌｌ＃金額．累計ドル＃ｎｕｌｌ」で出力カラム名・キー名が「金額．累計円＃ｎｕｌｌ」）。このとき「有効」カラムの値はＦＡＬＳＥのため、この関係はデータ伝搬関係でないと分析部１２は判断し、次の関係に移る。同様に分析部１２は、他の順列を用いて計算する。
【００９６】
次に、分析部１２は、「金額．累計ドル」（値は５５０９．０９）を選択する（第２ループ処理）。「有効」カラムがＦＡＬＳＥのものは処理せず、「有効」カラムがＴＲＵＥである（ｖｉｓｉｔｏｒｓ，金額．累計ドル）の組（値は（２７，５２６３．６４））に対して外部定義関数１０ｂを計算すると５５０９．０９となり値が一致し、「有効」カラムはＴＲＵＥのままである。
【００９７】
以上より、図５に示した動作ログＤ１１、Ｄ１２からは、図７に示した外部定義関数１０ｂを用いて、ＵＲＬのｖｉｓｉｔｏｒｓと金額テーブルの累計ドルカラムから、金額テーブルの累計ドルカラムへの間接的なデータ伝搬が発生したと推定される（図８参照）。出力部１３は、この分析結果をディスプレイなどに表示する。
【００９８】
図９は、データ伝搬の一例を説明する説明図である。図９に示すように、分析装置１では、動作ログＤ２１、Ｄ２２をもとに、データテーブルＴ１０、Ｔ１１、Ｔ１２におけるデータ伝搬の分析結果をディスプレイなどに出力する。具体的には、分析装置１は、データテーブルＴ１０からデータテーブルＴ１１への直接的なデータ伝搬を実線で示して出力する。また、分析装置１は、データテーブルＴ１０のＵＲＬのｖｉｓｉｔｏｒｓと金額テーブルの累計ドルカラムから、データテーブルＴ１２の累計ドルカラムへの、外部定義関数１０ｂを介した間接的なデータ伝搬を点線で示して出力する。これにより、ユーザは、業務システム２における外部定義関数１０ｂを介したデータ伝搬を容易に把握することができる。
【００９９】
（キー値を用いる場合の具体例）
図１０は、動作ログの一例を説明する説明図である。図１０に示すように、業務システム２からは、動作ログＤ３１、Ｄ３２が得られるものとする。
【０１００】
動作ログＤ３１と動作ログＤ３２では値や実行されたＳＱＬの個数が異なるが同様のものを実行しており、同じ画面単位ログに属する。なおＵＲＬは省略している。
【０１０１】
図１１は、データテーブルの一例を説明する説明図である。図１１に示すように、業務システム２におけるテーブルスキーマは、データテーブルＴ１３、Ｔ１４のとおりである。利用者テーブル（データテーブルＴ１３）のうち、クーポンカラムには数値が、その他のカラムには文字列が格納されるとする。また、課金テーブル（データテーブルＴ１４）の請求額カラムには数値が、その他のカラムには文字列が格納されるものとする。これらはテーブルスキーマ情報から得られる。またＳＱＬで読み書きされる値から推定することも出来る。
【０１０２】
図１２は、外部定義関数１０ｂの一例を説明する説明図である。図１２では、外部定義関数１０ｂを擬似的なＪａｖａ言語で記述した例を示す。図１２に例示する外部定義関数１０ｂは、クーポン額（ｘ）、利用者ＩＤ（ｕｓｅｒ）、実行日（ｔ）を入力とする。また、外部定義関数１０ｂは、月単位の利用ログファイルに書かれている利用者ごとの日ごとの利用回数を用い、利用者ごとの月単位の利用料金を計算する。利用料金はクーポン額の値引きを行う。
【０１０３】
キー値を用いない場合の具体例と同様、キーを用いる場合は関数のパラメータにＳｔｒｉｎｇ型を用いるなどの規則を用いているものとする。また、本関数ではｕｓｅｒをキーとして扱い、利用者ごとの利用料金を計算する際に、ｕｓｅｒの値に合致する値を持つ行を選択するのに用いる。Ｄｏｕｂｌｅは１個なので、計算パラメータ数は１である。なお本例の外部定義関数１０ｂは翌月の１日に実行すると仮定する。これは動作ログＤ３１、Ｄ３２でＩＮＳＥＲＴの実行時刻がそのようになっていることからも確認できる。
【０１０４】
図１３は、ファイルデータの一例を説明する説明図である。図１３に示すように、動作ログＤ４１、Ｄ４２、Ｄ４３は、利用ログファイルで、年月がファイル名に付いているＣＳＶファイルである。動作ログＤ４１、Ｄ４２、Ｄ４３では、ファイルの行ごとにＵｓｅｒＩｄ、利用日、回数が記録されている。
【０１０５】
図１４は、伝搬登録領域１０ａの内容の一例を説明する説明図である。図１４に示すように、入力パラメータ列には、キー値を用いない場合の具体例と同様、伝搬登録領域１０ａの計算パラメータ数分のカラム名とキー名の並びを格納することとする。
【０１０６】
上記のように図１２に示した外部定義関数１０ｂはキー値を用いると判明しているため、分析部１２は、第２のサブ処理を実行する。なお、外部定義関数１０ｂの計算パラメータ数は、上述のように１である。
【０１０７】
分析部１２は、最初に動作ログＤ３１を用いて処理を行う（第１ループ処理）。動作ログＤ３１に含まれるＩＮＳＥＲＴないしＵＰＤＡＴＥはＳＱＬ８、ＳＱＬ９、ＳＱＬ１０が該当する。
【０１０８】
まず、分析部１２は、ＳＱＬ８を選択する。次いで、分析部１２は、図１１に示したテーブルスキーマを参照して、ＳＱＬ８で書き込む数値のカラムは「課金．請求額」であるため、書き込むカラムとして「課金．請求額」を用いて以下の処理を行う（第２ループ処理）。
【０１０９】
キーカラムの候補は「課金．ＵｓｅｒＩｄ」、「課金．課金開始日」、「課金．課金終了日」の３種類存在する。まず、分析部１２は、「課金．ＵｓｅｒＩｄ」をキーカラム名として選択し、以下の処理を行う（第３ループ処理）。
【０１１０】
数値パラメータ数が０個ではないため、分析部１２は、ＳＱＬ８より以前に実行したＳＥＬＥＣＴ文（ＳＱＬ７）を抽出する。ＳＱＬ７に含まれる計算パラメータは１個（「利用者．クーポン」）なので、順列は「利用者．クーポン」である。
【０１１１】
ＳＥＬＥＣＴ文でキーカラムの候補は「利用者．ＵｓｅｒＩｄ」なので、分析部１２はこれを選択し以下の処理を行う（第４ループ処理）。
【０１１２】
伝搬先（ＳＱＬ８）のキーカラム値（「課金．ＵｓｅｒＩｄ」の値である‘Ｕｓｅｒ１’）に一致するＳＥＬＥＣＴ文の検索結果レコードのカラム（「利用者．ＵｓｅｒＩｄ」）の値は１個存在する。
【０１１３】
このとき、伝搬元として計算パラメータが「利用者．クーポン」、キーが「利用者．ＵｓｅｒＩｄ」、伝搬先として「課金．請求額」、キーが「課金．ＵｓｅｒＩｄ」を分析部１２は選択している。伝搬登録領域１０ａにおいて、入力パラメータ列が「利用者．クーポン＃利用者．ＵｓｅｒＩｄ」、出力カラム名・キー名が「課金．請求額＃課金．ＵｓｅｒＩｄ」、有効が「ＴＲＵＥ」の行を検索すると存在しない。
【０１１４】
次いで、分析部１２は、外部定義関数１０ｂの引数の第１引数に「利用者．クーポン」の値５００を、第２引数に「利用者．ＵｓｅｒＩｄ」の値‘Ｕｓｅｒ１’を、第３引数に外部定義関数１０ｂを実行したときの時刻（例えば２０１５年１１月１日）を設定し、外部定義関数１０ｂを計算する。
【０１１５】
外部定義関数１０ｂでは第３引数から、直前の日付を持つ利用ログ（図１３に示す「利用ログ＿２０１５−１０．ｃｓｖ」の動作ログＤ４２）を分析部１２が選択し、それを読み込む。次にログの行ごとに、ログの１番目の値が第２引数（‘Ｕｓｅｒ１’）に一致する場合は合計回数に加算する。「利用ログ＿２０１５−１０．ｃｓｖ」では２行該当し、合計回数は２０＋３＝２３である。合計回数と第１引数（ｃｏｕｐｏｎ）から２３＊１００−５００＝１８００が外部定義関数１０ｂの値となる。この値はＳＱＬ８で「課金．請求額」に設定する値と一致するため、分析部１２は、外部定義関数１０ｂの有効に「ＴＲＵＥ」を登録する（図１４参照）。
【０１１６】
次に、分析部１２は、第３ループ処理でキーカラム候補として「課金．課金開始日」を選択する。ＳＥＬＥＣＴ文と順列、キーカラムは前述と同様である。分析部１２は、第４ループ処理において、伝搬先（ＳＱＬ８）のキーカラム値（「課金．課金開始日」の値である‘２０１５−１０−０１’）に一致するＳＥＬＥＣＴ文の検索結果レコードのカラム（「利用者．ＵｓｅｒＩｄ」）の値が存在しない。よって、分析部１２は、第４ループ処理を抜ける。
【０１１７】
同様に、第３ループ処理でキーカラム候補として「課金．課金終了日」を選択した場合も第４ループ処理で「課金．課金終了日」の値である‘２０１５−１０−３１’に一致するＳＥＬＥＣＴ文の検索結果レコードのカラムは存在しない。
【０１１８】
次に、分析部１２は、第２ループ処理でＳＱＬ９を選択する。キーカラムとして上述のように「課金．ＵｓｅｒＩｄ」（値は‘Ｕｓｅｒ２’））を選択しているとき、第４ループ処理の直後の判断で、伝搬元として計算パラメータが「利用者．クーポン」、キーが「利用者．ＵｓｅｒＩｄ」、伝搬先として「課金．請求額」、キーが「課金．ＵｓｅｒＩｄ」を分析部１２は選択している。よって、分析部１２は、伝搬登録領域１０ａにおいて入力パラメータ列が「利用者．クーポン＃利用者．ＵｓｅｒＩｄ」、出力カラム名・キー名が「課金．請求額＃課金．ＵｓｅｒＩｄ」、有効が「ＴＲＵＥ」の行を検索すると存在することがわかる。
【０１１９】
次に、分析部１２は、外部定義関数１０ｂの引数の第１引数に「利用者．クーポン」の値２００を、第２引数に「利用者．ＵｓｅｒＩｄ」の値‘Ｕｓｅｒ２’を、第３引数に外部定義関数を実行したときの時刻（例えば２０１５年１１月１日）を設定し、外部定義関数１０ｂを計算する。この場合、「利用ログ＿２０１５−１０．ｃｓｖ」には２行該当し（２０＋３０）＊１００−２００＝４８００となり、この値はＳＱＬ９で「課金．請求額」に設定する値と一致する。よって、分析部１２は、伝搬登録領域１０ａの有効に「ＴＲＵＥ」を登録する（すでに同じ値の行が存在するので変化無し）。
【０１２０】
一方、キーカラムとして「課金．ＵｓｅｒＩｄ」以外を選択するとＳＱＬ８の場合と同様に一致するキーが存在しない。第２ループ処理でＳＱＬ１０を選択した場合も、ＳＱＬ８、ＳＱＬ９の場合と同様である。
【０１２１】
次に、分析部１２は、第１ループ処理で動作ログＤ３２を選択する。動作ログＤ３２に含まれるＩＮＳＥＲＴないしＵＰＤＡＴＥはＳＱＬ１２、ＳＱＬ１３が該当する。
【０１２２】
まず、分析部１２は、ＳＱＬ１２を選択し（第２ループ処理）、キーカラム名として「課金．ＵｓｅｒＩｄ」を選択する（第３ループ処理）。
【０１２３】
上述と同様に、伝搬元として計算パラメータが「利用者．クーポン」、キーが「利用者．ＵｓｅｒＩｄ」、伝搬先として「課金．請求額」、キーが「課金．ＵｓｅｒＩｄ」を分析部１２は選択している。また、伝搬登録領域１０ａにおいて入力パラメータ列が「利用者．クーポン＃利用者．ＵｓｅｒＩｄ」、出力カラム名・キー名が「課金．請求額＃課金．ＵｓｅｒＩｄ」、有効が「ＴＲＵＥ」の行が存在する。
【０１２４】
次いで、分析部１２は、外部定義関数１０ｂの引数の第１引数に「利用者．クーポン」の値２００を、第２引数に「利用者．ＵｓｅｒＩｄ」の値‘Ｕｓｅｒ２’を、第３引数に外部定義関数１０ｂを実行したときの時刻（例えば２０１５年１２月１日）を設定し、外部定義関数１０ｂを計算する。
【０１２５】
次いで、分析部１２は、外部定義関数１０ｂでは第３引数から、直前の日付を持つ利用ログに示す「利用ログ＿２０１５−１１．ｃｓｖ」を選択し、それを読み込む。次に、分析部１２は、ログの行ごとに、ログの１番目の値が第２引数（‘Ｕｓｅｒ２’）に一致する場合は合計回数に加算する。「利用ログ＿２０１５−１１．ｃｓｖ」では１行該当し、合計回数は８である。合計回数と第１引数（ｃｏｕｐｏｎ）から８＊１００−２００＝６００が外部定義関数１０ｂの値となる。この値はＳＱＬ１２で「課金．請求額」に設定する値と一致するため、分析部１２は、伝搬登録領域１０ａの有効に「ＴＲＵＥ」を登録する（すでに同じ値の行が存在するので変化無し）。
【０１２６】
第２ループ処理でＳＱＬ１３を選択した場合も同様である。以上より、図１０に示した動作ログＤ３１、Ｄ３２および図１３に示した動作ログＤ４１、Ｄ４２、Ｄ４３からは、図１２に示した外部定義関数１０ｂを用いて、利用者のデータテーブルＴ１３のクーポンカラムから課金のデータテーブルＴ１４の請求額カラムへの間接的なデータ伝搬が発生し、そのときのキーカラムはそれぞれＵｓｅｒＩｄカラムであると推定される。出力部１３は、この分析結果をディスプレイなどに表示する。
【０１２７】
図１５は、データ伝搬の一例を説明する説明図である。図１５に示すように、分析装置１では、動作ログＤ５１および動作ログＤ４２をもとに、データテーブルＴ１０、Ｔ１３、Ｔ１４におけるデータ伝搬の分析結果をディスプレイなどに出力する。具体的には、分析装置１は、データテーブルＴ１３のクーポンカラムから課金のデータテーブルＴ１４の請求額カラムへの外部定義関数１０ｂを介した間接的なデータ伝搬が発生し、そのときのキーカラムはそれぞれ動作ログＤ４２のＵｓｅｒＩｄカラムであることを点線で示して出力する。これにより、ユーザは、業務システム２における外部定義関数１０ｂを介したキー値を含むデータ伝搬を容易に把握することができる。
【０１２８】
以上のように、分析装置１は、入力パラメータまたはデータを格納するテーブルの所定のカラムにかかるアクセス記録を含む動作ログ２０を業務システム２より取得する。また、分析装置１は、取得した動作ログ２０に基づいて、予め設定された、入力に対する出力を定義する外部定義関数１０ｂごとに、動作ログ２０に含まれる入力パラメータの値または第１のカラムの値を外部定義関数１０ｂの入力として計算する。次いで、分析装置１は、動作ログ２０に含まれる第２のカラムの値を外部定義関数１０ｂの出力とし、計算結果を満たす入力パラメータまたは第１のカラムと、第２のカラムとの組み合わせを抽出する。次いで、分析装置１は、外部定義関数１０ｂを介した間接的なデータ伝搬が推定される分析結果として、抽出された入力パラメータまたは第１のカラムと、第２のカラムとの組み合わせを出力する。したがって、ユーザは、業務システム２における外部定義関数１０ｂを介したデータ伝搬を容易に把握することができる。
【０１２９】
また、図示した各装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、記憶部１０、動作ログ取得部１１、分析部１２または出力部１３を分析装置１の外部装置としてネットワークで接続するようにしてもよい。また、記憶部１０、動作ログ取得部１１、分析部１２または出力部１３を別の装置がそれぞれ有し、ネットワーク接続されて協働することで、上記の分析装置１の機能を実現するようにしてもよい。
【０１３０】
また、上記の実施形態で説明した各種の処理は、予め用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、図１６を用いて、上記の実施形態と同様の機能を有する分析支援プログラムを実行するコンピュータの一例について説明する。
【０１３１】
図１６は、分析プログラムを実行するコンピュータの一例を説明する説明図である。図１６に示すように、コンピュータ２００は、操作部２１０ａと、スピーカ２１０ｂと、カメラ２１０ｃと、ディスプレイ２２０と、通信部２３０とを有する。さらに、このコンピュータ２００は、ＣＰＵ２５０と、ＲＯＭ２６０と、ＨＤＤ２７０と、ＲＡＭ２８０とを有する。これら２１０〜２８０の各部はバス２４０を介して接続される。
【０１３２】
ＨＤＤ２７０は、上記の実施形態で示した記憶部１０として機能する。また、ＨＤＤ２７０には、上記の実施形態で示した動作ログ取得部１１、分析部１２および出力部１３と同様の機能を発揮する分析プログラム２７０ａが予め記憶される。この分析プログラム２７０ａについては、動作ログ取得部１１、分析部１２および出力部１３の各構成要素と同様、適宜統合または分離してもよい。例えば、ＨＤＤ２７０に格納されるデータは、常に全てのデータがＨＤＤ２７０に格納される必要はなく、処理に必要なデータがＨＤＤ２７０に格納されればよい。
【０１３３】
コンピュータ２００では、ＣＰＵ２５０が分析プログラム２７０ａをＨＤＤ２７０から読み出してＲＡＭ２８０に展開する。これによって、分析プログラム２７０ａは、分析プロセス２８０ａとして機能する。この分析プロセス２８０ａは、ＨＤＤ２７０から読み出した各種データを適宜ＲＡＭ２８０上の自身に割り当てられた領域に展開し、この展開した各種データに基づいて各種処理を実行する。なお、分析プロセス２８０ａは、動作ログ取得部１１、分析部１２および出力部１３にて実行される処理を含む。また、ＣＰＵ２５０上で仮想的に実現される各処理部は、常に全ての処理部がＣＰＵ２５０上で動作する必要はなく、処理に必要な処理部のみが仮想的に実現されればよい。
【０１３４】
なお、上記の分析プログラム２７０ａについては、必ずしも最初からＨＤＤ２７０やＲＯＭ２６０に記憶させておく必要はない。例えば、コンピュータ２００に挿入されるフレキシブルディスク、いわゆるＦＤ、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に各プログラムを記憶させる。そして、コンピュータ２００がこれらの可搬用の物理媒体から各プログラムを取得して実行するようにしてもよい。また、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ２００に接続される他のコンピュータまたはサーバ装置などに各プログラムを記憶させておき、コンピュータ２００がこれらから各プログラムを取得して実行するようにしてもよい。
【符号の説明】
【０１３５】
１…分析装置
２…業務システム
３…クライアント
１０…記憶部
１０ａ…伝搬登録領域
１０ｂ…外部定義関数
１１…動作ログ取得部
１２…分析部
１３…出力部
２０…動作ログ
２０ａ…ＨＴＴＰデータ
２０ｂ…起動パラメータ
２０ｃ…ＤＢアクセスデータ
２１…Ｗｅｂサーバ
２２…業務サーバ
２３…業務用ＤＢ
２４…ファイル
２００…コンピュータ
２１０ａ…操作部
２１０ｂ…スピーカ
２１０ｃ…カメラ
２２０…ディスプレイ
２３０…通信部
２４０…バス
２５０…ＣＰＵ
２６０…ＲＯＭ
２７０…ＨＤＤ
２７０ａ…分析プログラム
２８０…ＲＡＭ
２８０ａ…分析プロセス
Ｄ１１〜Ｄ５１…動作ログ
Ｔ１０〜Ｔ１４…データテーブル
【図１】
2018060292.tif 000003
【図２】
2018060292.tif 000004
【図３】
2018060292.tif 000005
【図４−１】
2018060292.tif 000006
【図４−２】
2018060292.tif 000007
【図５】
2018060292.tif 000008
【図６】
2018060292.tif 000009
【図７】
2018060292.tif 000010
【図８】
2018060292.tif 000011
【図９】
2018060292.tif 000012
【図１０】
2018060292.tif 000013
【図１１】
2018060292.tif 000014
【図１２】
2018060292.tif 000015
【図１３】
2018060292.tif 000016
【図１４】
2018060292.tif 000017
【図１５】
2018060292.tif 000018
【図１６】
2018060292.tif 000019