以下、図面を参照して、実施形態にかかる分析支援方法、分析支援プログラムおよび分析支援装置を説明する。実施形態において同一の機能を有する構成には同一の符号を付し、重複する説明は省略する。なお、以下の実施形態で説明する分析支援方法、分析支援プログラムおよび分析支援装置は、一例を示すに過ぎず、実施形態を限定するものではない。また、以下の各実施形態は、矛盾しない範囲内で適宜組みあわせてもよい。
図1は、実施形態にかかる分析支援装置1の構成を例示するブロック図である。図1に示すように、分析支援装置1は、PC(Personal Computer)やワークステーション等の情報処理装置であり、DBアクセスデータ20に格納された業務システム2の動作ログを取得し、取得した動作ログの分析を行う。分析支援装置1は、動作ログ取得部10、分析部11、記憶部12および出力部13を有する。
業務システム2では、業務処理のサービスを提供するWebサーバへの端末装置からの要求により、業務サーバが業務用DBにアクセスして業務処理を実行した際の動作ログをDBアクセスデータ20としてログファイルなどに格納する。なお、本実施形態では、Webサーバを介した端末装置からの要求によるオンライン実行の動作ログの分析を例示する。具体的には、動作ログには、ブラウザ上の画面から入力した値を用いて、業務サーバが業務用DBへアクセスして業務処理を実行した際の履歴が記述されている。なお、分析する動作ログの内容については、上記の例に限定しない。例えば、業務サーバがバッチ処理により業務用DBにアクセスして業務処理を実行する場合の動作ログの分析にも適用可能である。
また、本実施形態では、DBアクセスデータ20において、業務用DBへのアクセスにかかるSQL文は、バインド変数を用いて記述されていることを前提とする。このSQL文については、変数値が埋め込まれているものからバインド変数に相当する部分を抽出し、SQLとバインド変数、バインド変数値に変換することは可能である。
動作ログ取得部10は、分析対象の業務システム2における所定のログファイルへアクセスするなどして、業務システム2の動作ログを取得する。具体的には、動作ログ取得部10は、業務システム2の動作ログとして、端末装置の画面で入力し、業務サーバに入力されるHTTPパラメータ(画面パラメータ)と、その入力による業務用DBの所定のカラムへのアクセス内容と、これらの実行順を判断可能な情報(処理時刻など)を取得する。業務用DBの所定のカラムへのアクセス内容には、端末装置の画面からの入力による画面パラメータがきっかけで実行される一連のSQLログ(SQL文、入力パラメータ(バインド変数値)、SELECT文の場合は加えて検索結果)がある。
なお、端末装置の一画面からの入力がきっかけで発生した業務処理における動作ログ一式(画面パラメータとSQLログ)を以下では画面単位ログとも呼ぶこととする。
分析部11は、動作ログ取得部10が取得した動作ログの内容をもとに、画面パラメータ内の変数値や業務用DBのあるカラムから読み出された値が業務用DBの所定のカラムへ伝搬するデータ伝搬があるか否かを分析する。記憶部12は、分析部11が分析する処理を行う際の作業用データ(動作ログ取得部10が取得した動作ログなど)を記憶する。出力部13は、分析部11の分析結果をディスプレイへの表示や、プリンターによる印字により出力する。
分析部11は、所定のカラムについての動作ログをもとに、画面パラメータ内の変数値や業務用DBのあるカラムから読み出された値などの入力変数値と、所定のカラムへ書込む出力変数値とが一致するか否かを判定し、所定のカラムへの直接的なデータ伝搬があるか否かを分析する。また、分析部11は、所定のカラムについての複数の動作ログをもとに、業務用DBより読み出した値を演算し、演算後の値を別のカラムに書き込むような間接的なデータ伝搬の有無を分析する。具体的には、分析部11は、所定のカラムについての複数の動作ログにおいて、入力変数値と、出力変数値とを組み合わせて所定の演算を行った演算結果が一定である場合に、所定のカラムへ間接的なデータ伝搬があるものと分析する。
なお、間接的なデータ伝搬については、任意の演算を対象としてデータ伝搬の有無を分析することは困難である。したがって、本実施形態では、業務処理で発生しがちな予め定められた演算を対象とする。具体的には、定数倍演算(例:消費税計算)、積和演算(例:単価と数量からの合計額計算)、固定値の加算を対象としている。
ここで、間接的なデータ伝搬の有無の分析について詳細に説明する。まず、所定のカラムへの書込みは、SQLのINSERT文で値を挿入する場合と、SQLのUPDATE文で値を更新する場合とがある。
(INSERTの場合)
分析部11は、画面単位ログごとに、INSERT文より以前に実行した1個以上の同一SELECT文(ただしパラメータは異なる)を抽出する。同一SELECT文が存在するとき、分析部11は、その検索結果ないし画面パラメータの1個ないし2個から次の値を計算する。
・カラムないし画面パラメータが1個:α・C+β
・カラムないし画面パラメータが2個:αΣC・D+β
ただし、α、βは定数、C、DはそれぞれSELECT文で得られたテーブルのあるカラムの値ないし画面パラメータの値である。
分析部11は、計算された値がINSERT文で挿入する値と常に一致する場合には、検索結果のカラムないし画面パラメータがINSERT対象のカラムに伝搬すると分析する。なお、定数α、βの計算は次のように行う。
(カラムないし画面パラメータが1個の場合)
分析部11は、ある画面単位ログ2回分(ただし画面パラメータは異なる)より、あるSELCETで1個得られた検索結果の特定のカラムCの値(ここではC1、C2とする)と、SELECTより後で実行したINSERTでカラム(X)に挿入した値(ここではX1、X2)とを得る。
次いで、分析部11は、α=(X1−X2)/(C1−C2)の値を求め、求めた値が動作ログの組み合わせによらず常に一定であるか否かを、複数の動作ログを用いて計算する。αの値が常に一定の場合には、β=X1−αC1なる関係がある。このことから、分析部11は、複数の動作ログにおいてαの値が常に一定の場合、SELECTで取得したカラムCの値がαC+βなる変形(演算)を施されてカラムXにINSERTされ伝搬したものと分析する。
(画面パラメータ1個とINSERT値の関係推定)
分析部11は、ある画面単位ログ2回分(ただし画面パラメータは異なる)より、画面パラメータのうちの特定のパラメータCの値(ここではC1、C2とする)と、INSERTでカラム(X)に挿入した値(ここではX1、X2とする)とを得る。
次いで、分析部11は、α=(X1−X2)/(C1−C2)の値を求め、求めた値が動作ログの組み合わせによらず常に一定であるか否かを、複数の動作ログを用いて計算する。αの値が常に一定の場合には、β=X1−αC1なる関係がある。このことから、分析部11は、複数の動作ログにおいてαの値が常に一定の場合、画面パラメータCの値がαC+βなる変形(演算)を施されてカラムXにINSERTされ伝搬したものと分析する。
(カラムないし画面パラメータが2個の場合)
カラムないし画面パラメータが2個の場合も、分析部11は、画面単位ログ2回分を用い、調査対象のINSERTより以前に実行されたSELECT結果ないし画面パラメータとの関係を、次の4つの場合で分析する。
(画面パラメータが持つ複数の繰り返しパラメータとINSERT値の関係推定)
画面パラメータで同種のパラメータ値が複数繰り返される場合、ある動作ログから得られた繰り返されるパラメータの2種類(CとDとする)の値とINSERTでカラムXに挿入した値(X1とする)、同じ画面の別の動作ログから得られたパラメータ値が得られるものとする。なお、繰り返されるパラメータの2種類の値は、それぞれC1iとD1i(i=1..m、ただしmはパラメータの繰り返し数)とする。また、同じ画面の別の動作ログから得られたパラメータ値は、それぞれC2iとD2i(i=1..n、ただしnはパラメータの繰り返し数)とする。
このとき、分析部11は、α=(X1−X2)/(ΣC1i・D1i−ΣC2j・D2j)の値が動作ログの組み合わせによらず常に一定かを、複数の動作ログの組み合わせで計算する。分析部11は、αが一定のとき、β=X1−αΣC1i・D1iであり、画面パラメータCとDの値がαΣC・D+βなる変形を施されてカラムXにINSERTされ伝搬したものと分析する。
なお、パラメータ値が複数繰り返されるというのは、例えばあるURLのパラメータ名のうち「abc-*、def-*、ghi-*、…(*は任意の文字列)」などの文字列が組となって繰り返されていることが容易に検出されたものを言う。一例としてURLが「http://aaa.bbb/exec?xyz=001&abc-1=123&def-1=234&ghi-1=345&abc-2=111&def-2=222&ghi-2=333&zzz=999」の場合、パラメータ名の最後の数値を無視すると同一の文字列が同じ順で繰り返し出現している。例示したURLでは、「abc-*」に対応するパラメータ値は順に(123、111)、「def-*」に対応するパラメータ値は順に(234、222)である。
(SELECT結果の2つのカラムとINSERT値の関係推定)
画面単位ログで、SELECT(1つのSELECTで1個以上の検索結果が得られた場合ないし、パラメータの異なる同一のSELECTを1個以上実行し、1個以上の検索結果が得られた場合)の後にINSERTが実行されたものとする。また、検索結果の2つのカラムC、Dの値(それぞれC1iとD1i、i=1..m、ただしmは検索結果数、とする)と、INSERTでカラムXに設定した値(X1とする)が得られ、別の動作ログで同様にC、D、Xの値(C2j、D2j、j=1..n、ただしnは検索結果数、X2)が得られたものとする。
このとき、分析部11は、α=(X1−X2)/(ΣC1i・D1i−ΣC2j・D2j)の値が動作ログの組み合わせによらず常に一定かを、複数の動作ログの組み合わせで計算する。分析部11は、αが常に一定のとき、β=X1−αΣC1i・D1iであり、カラムCとDの値が、αΣC・D+βなる変形を施されてカラムXにINSERTされ、伝搬したものと分析する。
(キー値を介して関係付く2種類のSELECT結果のカラムとINSERT値の関係推定)
画面単位ログで、2つの異なるSELECTの検索結果(ただしそれぞれの検索結果数が同一である組み合わせを選択する)それぞれで得られた特定のカラムC、Dの値(それぞれC1iとD1i、i=1..m、ただしmは検索結果数、とする)と、その後に実行したINSERTでカラムXに挿入した値(X1とする)が得られたものとする。また、同様にもう一つの動作ログ1回分から同一のカラムC、D、Xの値(C2j、D2j、j=1..n、ただしnは検索結果数、X2)が得られたものとする。
このとき、分析部11は、α=(X1−X2)/(ΣC1i・D1i−ΣC2j・D2j)の値が動作ログの組み合わせによらず常に一定かを、複数の動作ログを用いて計算する。ただし、カラムC1i、D1iが含まれるレコード間を対応づけるキーとなるカラムがそれぞれのレコードに存在し、キー値で対応づくレコードからC1i、D1iを得る。C2j、D2jも同様である。分析部11は、αが常に一定の場合、β=X1−αΣC1i・D1iであり、カラムCとDの値がαΣC・D+βなる変形を施されてカラムXに伝搬したものと分析する。
(キー値を介して関係付く画面パラメータとSELECT結果のカラムとINSERT値の関係推定)
画面単位ログで、画面パラメータで同種のパラメータ値が2種類以上繰り返される場合、その繰り返し回数と、検索結果数が同じSELECTがあり、画面パラメータの1つと検索結果のカラムが同じでキー関係になっているものとする。また、SELECT結果の特定のカラムCと、キーではない画面パラメータD(それぞれC1iとD1i、i=1..m、ただしmは検索結果数、とする)と、その後に実行したINSERTでカラムXに挿入した値(X1とする)とが得られるものとする。また、同様にもう一つの動作ログ1回分から同一のカラムC、D、Xの値(C2j、D2j、j=1..n、ただしnは検索結果数、X2)が得られるものとする。
このとき、分析部11は、α=(X1−X2)/(ΣC1i・D1i−ΣC2j・D2j)の値が動作ログの組み合わせによらず常に一定かを、複数の動作ログを用いて計算する。分析部11は、αが常に一定の場合、β=X1−αΣC1i・D1iであり、画面パラメータCとSELECT結果Dの値がαΣC・D+βなる変形を施されてカラムXにINSERTされ伝搬したものと推定する。
(UPDATEの場合)
分析部11は、値をUPDATEで設定するとき、次の処理でデータ伝搬を分析する。画面単位ログで、UPDATEより以前に実行した1個以上の同一SELECT文(ただしパラメータは異なる)が存在するものとする。このとき、分析部11は、検索結果ないし画面パラメータの1個ないし2個から計算される次の値がUPDATEで更新する値と常に一致する場合、そのカラムないし画面パラメータがUPDATE対象のカラムに伝搬したものと分析する。
・カラムないし画面パラメータが1個:α・C+β
・カラムないし画面パラメータが2個:αΣC・D+β
ただしα、βの計算方法は前述と同様である。
また、UPDATEより以前に実行した1個以上の同一SELECT文(ただしパラメータは異なる)が存在するとき、その検索結果ないし画面パラメータの1個ないし2個から計算される次の値がUPDATEで更新する増分値(新たに設定する値と直前のSELECT結果との差分)と常に一致する場合、そのカラムないし画面パラメータがUPDATE対象のカラムに伝搬すると分析する。
以上の説明では、ある画面をきっかけで実行したときの画面単位ログに含まれるSQL列は常に同じということを前提としている。しかしながら、画面から入力する値に応じて実行されるSQL列が異なる場合もある。この場合は、実行されたSQL群が同じである実行を同一画面と見なして、上記の処理を行う。
図2は、実施形態にかかる分析支援装置1の動作例を示すフローチャートであり、上述したINSERTの場合の処理の一例である。図2に示すように、処理が開始されると、動作ログ取得部10は、分析対象の業務システム2からDBアクセスデータ20を参照して動作ログを取得する(S1)。取得する動作ログには、画面パラメータ(HTTPパラメータ)、SQLステートメント、SQLパラメータ、SQLがSELECTの場合は検索結果、とそれぞれを実行した時刻(実行順を判別可能な精度)がある。なお、動作ログ取得部10は、HTTPパラメータからは、GETないしPOSTメソッド要求で送信される、URLないしメッセージボディに記述されたクエリ文字列(パラメータ名と値の対)を抽出する。
次いで、分析部11は、画面パラメータをもとに、動作ログ取得部10が取得した動作ログを画面単位の画面単位ログに分割する。例えば、分析部11は、同一の画面を表示するURLへのアクセスごとに動作ログを分割する。そして、分析部11は、分割した画面単位ログからSQL列を抽出する(S2)。
次いで、分析部11は、画面単位ログごとに抽出されたSQL列をもとに、実行されたSQL文の組み合わせが同一の画面単位の動作ログの集合を作る(S3)。このとき、同一のSQL文(SQLパラメータは異なる)の実行回数の違いは考慮しないものとする。
次いで、分析部11は、作成した画面単位の動作ログの集合ごとに、S4〜S14の第1ループ処理を実行する。第1ループ処理が開始されると、分析部11は、公知の方法を用いて、INSERTするテーブルのカラムと、それ以前に実行したSELECT結果で得られたカラムとを関係づける(S5)。具体的には、分析部11は、あるカラムからSELECT文で読み出された値(y1)と、別のカラムにINSERT文で書き込む値(z1)とが常にy1=z1を満たす場合に、あるカラムから別のカラムへの直接的なデータ伝搬があるものと分析する。
次いで、分析部11は、S5において直接的なデータ伝搬があるものと分析されず、関係付かなかったカラム(X)に対して、S6〜S13の第2ループ処理を実行する。
第2ループ処理では、分析部11は、「カラム1個との対応付け」の処理(S7)、「画面パラメータ1個との対応付け」の処理(S8)を実行する。また、分析部11は、「画面パラメータが持つ複数の繰り返しパラメータとINSERT値の関係推定」の処理(S9)、「SELECT結果の2つのカラムとINSERT値の関係推定」の処理(S10)を実行する。また、分析部11は、「キー値を介して関係付く2種類のSELECT結果のカラムとINSERT値の関係推定」の処理(S11)、「キー値を介して関係付く画面パラメータとSELECT結果のカラムとINSERT値の関係推定」の処理(S12)を実行する。
第1、第2のループ処理が終了したところで、出力部13は、第1、第2のループ処理による分析部11の分析結果をディスプレイへの表示や、プリンターによる印字により出力する(S15)。具体的には、出力部13は、分析部11の分析結果をもとに、業務用DBの所定のカラムと、このカラムへのデータ伝搬があるものと分析された画面パラメータ内の変数値や業務用DBのカラムとの対応関係を示す画像を出力する。
一例として、出力部13は、業務用DBのカラムおよび画面パラメータ内の変数値を列挙したテーブルについて、対応関係のあるカラムや変数値同士を線で結びつけた画像を表示する。なお、直接的なデータ伝搬があるものと分析されたカラムや変数値同士の対応関係を示す画像の出力態様と、間接的なデータ伝搬があるものと分析されたカラムや変数値同士の対応関係を示す画像の出力態様とは互いに異なるものであってもよい。例えば、出力部13は、対応関係のあるカラムや変数値同士を線で結びつけた画像として表示する場合、直接的なデータ伝搬があるものと分析されたカラムや変数値同士は実線で表示し、間接的なデータ伝搬があるものと分析されたカラムや変数値同士は破線で表示してもよい。このように、直接的なデータ伝搬があるものと分析された分析結果と、間接的なデータ伝搬があるものと分析された分析結果との出力態様を互いに異なるようにすることで、分析結果をより見やすくできる。
図3は、「カラム1個との対応付け」の処理(S7)を示すフローチャートである。図3に示すように、S7の処理が開始されると、分析部11は、処理対象の動作ログ集合から、画面をきっかけに処理対象のカラム(X)へINSERTするまでに実行されたSELECT文の検索結果に含まれるカラムの集合(SetC)を作る(S20)。
次いで、分析部11は、カラムの集合(SetC)に含まれるカラム(C)ごとに、S21〜S26のループ処理を実行する。ループ処理が開始されると、分析部11は、画面単位ログを一つ選び、SELECT結果のカラム(C)の値(c1Val)とINSERTで挿入するカラム(X)の値(x1Val)を取得する(S22)。
次いで、分析部11は、S22で用いたもの以外の画面単位ログごとに、SELECT結果のカラム(C)の値(c2Val)とINSERTで挿入するカラム(X)の値(x2Val)を用いて次の計算を行い、αの値を求める(S23)。
α=(x1Val−x2Val)/(c1Val−c2Val)
次いで、分析部11は、全ての動作ログ(画面単位ログ)でαが同じか否かを判定する(S24)。αが同一値である場合(S24:YES)、分析部11は、カラム(C)の値が所定の演算を施されてカラム(X)にINSERTされて伝搬したものと分析する。したがって、分析部11は、カラム(C)からカラム(X)へ間接的なデータ伝搬があったものと推定し(S25)、次のカラムへと処理をループする(S26)。なお、αが同一値でない場合(S24:NO)、分析部11は、カラム(C)からカラム(X)へ間接的なデータ伝搬があったものとは推定せず、次のカラムへと処理をループする。
図4は、「画面パラメータ1個との対応付け」の処理(S8)を示すフローチャートである。図4に示すように、S8の処理が開始されると、分析部11は、処理対象の動作ログ集合から、画面パラメータの集合(SetC)を作る(S30)。
次いで、分析部11は、作成した集合(SetC)に含まれる画面パラメータ(C)ごとに、S31〜S36のループ処理を実行する。ループ処理が開始されると、分析部11は、画面単位ログを一つ選び、画面パラメータ(C)の値(c1Val)とINSERTで挿入するカラム(X)の値(x1Val)を取得する(S32)。
次いで、分析部11は、S32で用いたもの以外の画面単位ログごとに、画面パラメータ(C)の値(c2Val)とINSERTで挿入するカラム(X)の値(x2Val)を用いて次の計算を行い、αの値を求める(S33)。
α=(x1Val−x2Val)/(c1Val−c2Val)
次いで、分析部11は、全ての動作ログ(画面単位ログ)でαが同じか否かを判定する(S34)。αが同一値である場合(S34:YES)、分析部11は、画面パラメータ(C)の値が所定の演算を施されてカラム(X)にINSERTされて伝搬したものと分析する。したがって、分析部11は、画面パラメータ(C)からカラム(X)へ間接的なデータ伝搬があったと推定し(S35)、次の画面パラメータへと処理をループする。なお、αが同一値でない場合(S34:NO)、分析部11は、画面パラメータ(C)からカラム(X)へ間接的なデータ伝搬があったものとは推定せず、次の画面パラメータへと処理をループする。
図5は、「画面パラメータが持つ複数の繰り返しパラメータとINSERT値の関係推定」の処理(S9)を示すフローチャートである。図5に示すように、S9の処理が開始されると、分析部11は、画面パラメータから、同一回数出現するパラメータ名の組を取得する(S40)。次いで、分析部11は、同一回数出現するパラメータ名の組ごとに、パラメータ2個の組み合わせを作成する(S41)。
次いで、分析部11は、作成した組み合わせごとに、S42〜S47のループ処理を実行する。ループ処理が開始されると、分析部11は、画面単位ログを一つ選び、パラメータ名2個それぞれの値(それぞれC1iとD1i、i=1..m、ただしmはパラメータの繰り返し数)を取り出す。そして、分析部11は、積和値(ΣC1i・D1i)を計算する(S43)。また、分析部11は、INSERTでカラム(X)に挿入した値(X1)を取得する。
次いで、分析部11は、S43で用いたもの以外の画面単位ログごとに、画面パラメータから、パラメータ名2個それぞれの値(それぞれC2iとD2i、i=1..n、ただしnはパラメータの繰り返し数)を順に取り出す。また、分析部11は、INSERTでカラム(X)に挿入した値(X2)を取得する。そして、分析部11は、次の計算を行い、αの値を求める(S44)。
α=(X1−X2)/(ΣC1i・D1i−ΣC2j・D2j)
次いで、分析部11は、全ての動作ログ(画面単位ログ)でαが同じか否かを判定する(S45)。αが同一値である場合(S45:YES)、分析部11は、2つの画面パラメータの値が所定の演算を施されてカラム(X)にINSERTされて伝搬したものと分析する。したがって、分析部11は、2つの画面パラメータからカラム(X)へ間接的なデータ伝搬があったと推定し(S46)、次の組み合わせへと処理をループする。なお、αが同一値でない場合(S45:NO)、分析部11は、2つの画面パラメータからカラム(X)へ間接的なデータ伝搬があったものとは推定せず、次の組み合わせへと処理をループする。
図6は、「SELECT結果の2つのカラムとINSERT値の関係推定」の処理(S10)を示すフローチャートである。図6に示すように、S10の処理が開始されると、分析部11は、画面単位ログから、カラム(X)に対してINSERTを実行する前に実行するSELECTを探し、その検索結果であるカラムから、カラムを2つ選択した組み合わせ(C、D)を作成する(S50)。
次いで、分析部11は、作成した組み合わせごとに、S51〜S56のループ処理を実行する。ループ処理が開始されると、分析部11は、画面単位ログを一つ選び、カラム名2個に対応するSELECT文の検索結果値(それぞれC1iとD1i、i=1..m、ただしmは検索結果数)を取り出し、積和値(ΣC1i・D1i)を計算する(S52)。また、分析部11は、INSERTでカラム(X)に挿入した値(X1)を取得する。
次いで、分析部11は、S52で用いたもの以外の画面単位ログごとに、カラム名2個に対応するSELECT文の検索結果値(それぞれC2iとD2i、i=1..n、ただしnはパラメータの繰り返し数)を順に取り出す。また、INSERTでカラム(X)に挿入した値X2を取得する。そして、分析部11は、次の計算を行い、αの値を求める(S53)。
α=(X1−X2)/(ΣC1i・D1i−ΣC2j・D2j)
次いで、分析部11は、全ての動作ログ(画面単位ログ)でαが同じか否かを判定する(S54)。αが同一値である場合(S54:YES)、分析部11は、2つのカラム(C、D)の値が所定の演算を施されてカラム(X)にINSERTされて伝搬したものと分析する。したがって、分析部11は、2つのカラム(C、D)からカラム(X)へ間接的なデータ伝搬があったと推定し(S55)、次の組み合わせへと処理をループする。なお、αが同一値でない場合(S54:NO)、分析部11は、2つのカラム(C、D)からカラム(X)へ間接的なデータ伝搬があったものとは推定せず、次の組み合わせへと処理をループする。
図7は、「キー値を介して関係付く2種類のSELECT結果のカラムとINSERT値の関係推定」の処理(S11)を示すフローチャートである。図7に示すように、S11の処理が開始されると、分析部11は、画面単位ログを一つ選び、カラム(X)に挿入するINSERTより前に実行したSELECT文で検索対象となり、検索結果が1個以上であるテーブルを探す(S60)。分析部11は、S60におけるテーブルの検索により、条件に該当する複数のテーブル(テーブル群)を得る。
次いで、分析部11は、S60で得られたテーブル群の中から、異なる2個のテーブルの組み合わせを作り、片方のテーブルのカラム値がもう一方のテーブルのカラム値に含まれる関係になっているテーブル/カラム対(K1、K2)を抽出する(S61)。
次いで、分析部11は、抽出されたテーブル/カラム対(K1、K2)ごとに、S62〜S69のループ処理を実行する。ループ処理が開始されると、分析部11は、テーブル/カラム対(K1、K2)の2つのテーブルからの検索結果から、カラム対のそれぞれの値(カラム値)が同じである検索結果をそれぞれ得る(S63)。
次いで、分析部11は、2つのテーブルそれぞれから、S63で得られたカラム対(K1、K2)以外のカラム(C、Dとする)を1個ずつ選択する(S64)。
次いで、分析部11は、K1とK2で対応付く検索結果からS64で選択した2個のカラムの値(C、D)から、それぞれC1iとD1i、i=1..m、ただしmは検索結果数とし、積和値ΣC1i・D1iを計算する。また、分析部11は、INSERTでカラム(X)に挿入した値(X1)を取得する(S65)。
次いで、分析部11は、最初(S60)で選択した画面単位ログ以外の画面単位ログに対してS61〜S65と同様の処理を行い、積和値ΣC2i・D2iとINSERTでカラム(X)に挿入した値(X2)を取得する。そして、分析部11は、次の計算を行い、αの値を求める(S66)。
α=(X1−X2)/(ΣC1i・D1i−ΣC2j・D2j)
次いで、分析部11は、全ての動作ログ(画面単位ログ)でαが同じか否かを判定する(S67)。αが同一値である場合(S67:YES)、分析部11は、2つのカラム(C、D)の値が所定の演算を施されてカラム(X)にINSERTされて伝搬したものと分析する。したがって、分析部11は、2つのカラム(C、D)からカラム(X)へ間接的なデータ伝搬があったと推定し(S68)、次のカラム対へと処理をループする。なお、αが同一値でない場合(S67:NO)、分析部11は、2つのカラム(C、D)からカラム(X)へ間接的なデータ伝搬があったものとは推定せず、次のカラム対へと処理をループする。
図8は、「キー値を介して関係付く画面パラメータとSELECT結果のカラムとINSERT値の関係推定」の処理(S12)を示すフローチャートである。図8に示すように、S12の処理が開始されると、分析部11は、画面単位ログを一つ選び、カラム(X)に挿入するINSERTより前に実行したSELECT文で検索対象となり、検索結果が1個以上であるテーブル(テーブル群)を取得する(S70)。
次いで、分析部11は、画面パラメータから、同一回数出現するパラメータ名の組を取得し、同一回数出現するパラメータ名の組をカラム名、繰り返し毎のパラメータ値の組をSELECTの検索結果と見なす(S71)。
次いで、分析部11は、S70で取得したテーブル群と、S71で取得した画面パラメータの組を擬似的にカラム名とSELECT検索結果と見なしたものの組み合わせを作成する。そして、分析部11は、テーブルのカラム値が画面パラメータ値に含まれる関係になっているテーブル/画面パラメータ対(K1、K2)を抽出する(S72)。
分析部11は、S72で抽出されたテーブル/画面パラメータ対(K1、K2)について、「キー値を介して関係付く2種類のSELECT結果のカラムとINSERT値の関係推定」の処理(S11)におけるS64〜S68と同様の処理を行う。
図9は、実施形態にかかる分析支援装置1の動作例を示すフローチャートであり、上述したUPDATEの場合の処理の一例である。図9に示すように、画面単位の動作ログの集合を作るまでの処理(S1〜S3)は、INSERTの場合の処理(図2参照)と同様に行う。
次いで、分析部11は、作成した画面単位の動作ログの集合ごとに、S80〜S84のループ処理を実行する。ループ処理が開始されると、分析部11は、処理対象の動作ログの集合で、UPDATEを実行し、かつUPDATEの実行前にUPDATE対象のテーブルに対してSELECTを実行する組み合わせを抽出する。また、分析部11は、SELECT結果のカラム値がUPDATEで更新するカラム値と異なるカラム(X)を抽出する(S81)。
次いで、分析部11は、UPDATE対象のテーブルで、S81で抽出したカラム(X)に対して、「直接的に対応がつかない値をINSERTで挿入する場合」の処理(S7〜S12)を、INSERT値の代わりにUPDATEで更新する値に置き換えて実行する(S82)。
次いで、分析部11は、UPDATE対象のテーブルで、S81で抽出したカラム(X)に対して、「直接的に対応がつかない値をINSERTで挿入する場合」の処理(S7〜S12)を、INSERT値の代わりに(UPDATEで更新する値)−(SELECTの検索結果値)に置き換えて実行する(S83)。
上記のループ処理が終了したところで、出力部13は、ループ処理による分析部11の分析結果をディスプレイへの表示や、プリンターによる印字により出力する(S15)。
ここで、具体的な実施例を参照して分析支援装置1における分析処理を説明する。なお、以下で説明する実施例では、分析対象の業務用DBのテーブルが持つカラムは全て数値型であるものと仮定する。
図10は、業務用DB21のテーブル構成を例示する図である。図10に示すように、業務用DB21は、受注業務を指向したものであり、商品マスタテーブルT1、明細テーブルT2、受注テーブルT3および請求テーブルT4を含むものである。なお、業務用DB21において、説明で関係しないカラムについては「…」で省略している。
(カラム1個とINSERT値の関係推定について)
図11は、動作ログ(D11、D12、D13)の一例を説明する説明図である。図11に示すように、分析対象の業務システム2から取得した動作ログがD11、D12、D13の内容(値)であったものとする。なお、動作ログD11、D12、D13は時系列に出力されると仮定し、画面パラメータとSQLの実行ごとに実行順(seq)が割り当てられるものとする(実行した時刻を用いてもよい)。
図12は、データテーブル(T11、T12、T13)の一例を説明する説明図である。図12に示すように、データテーブルT11は、動作ログD11、D12、D13から画面パラメータごとにID(urlNo)と、実行したURLと、seqをまとめたものである。また、データテーブルT12は、同様に、SQLごとにID(sqlNo)、実行したSQL、そのときのバインド値と検索結果、SQLに対応する画面パラメータのID、seqをまとめたものである。データテーブルT13はカラムの集合(SetC)である。
データテーブルT11より、本実施例では、画面は全て同じであり、実行されたSQL(SELECT1個、INSERT1個)もバインド値を除くと同一であるので、これらはSQLが同一な画面単位の動作ログの集合になっている。
これらに対して、公知の方法でINSERTするテーブルのカラムとそれに先立つSELECTの対応付けを行うと、先行するSELECTの検索結果の伝票番号カラムの値が、後続のINSERTの伝票番号の値と常に一致することが検出できる。このため、分析支援装置1は、S5において、受注テーブルT3の伝票番号カラムから、請求テーブルT4の伝票番号カラムへ直接的なデータ伝搬があると推定する。
上記で関係付かなかった請求テーブルT4の請求額カラムに関して、INSERT以前に実行されたSELECT結果に含まれるカラム集合SetCは(伝票番号、税抜き額、顧客ID)である。分析支援装置1の分析部11は、これらの集合SetCごとに、S4〜S14のループ処理を行って間接的なデータ伝搬についての分析を行う。
まず、伝票番号カラムと請求額カラムに伝搬関係があるかを調べる。データテーブルT12のseqNo=1のデータから、伝票番号=101、請求額=25340である。よって、c1Val=101、x1Val=25340である。次に、seqNo=2のデータから同様に、c2Val=102、x2Val=4928である。これらからαの値を求めると、α=(25340−4928)/(101−102)=−20412となる。
同様に、seqNo=3のデータから、c2Val=103、x2Val=1580である。これらからαの値を求めると、α=(25340−1580)/(101−103)=−11880となる。よって、αが一定ではないので、この組み合わせは伝搬の関係になっていないことが分かる。
次に、税抜き額カラムと請求額カラムに伝搬関係があるかを調べる。「動作ログ1」から、税抜き額=c1Val=23000、請求額=x1Val=25340である。次に、「動作ログ2」からc2Val=4100、x2Val=4928である。これらからαの値を求めると、α=(25340−4928)/(23000−4100)=1.08となる。
同様に、「動作ログ3」から、c2Val=1000、x2Val=1580である。これらからαの値を求めると、α=(25340−1580)/(23000−1000)=1.08となる。よって、αが一定であり、β=x1Val−α・c1Val=500である。以上より、この組み合わせは間接的な伝搬関係があり、税抜き額*1.08+500=請求額であると推定できる。
なお、顧客IDカラムと請求額カラムの組み合わせでは、「動作ログ1」から、顧客ID=c1Val=2001、請求額=x1Val=25340である。次に、「動作ログ2」からc2Val=1507、x2Val=4928である。これらからαの値を求めると、α=(25340−4928)/(2001−1507)=41.3となる。同様に、「動作ログ3」からc2Val=3900、x2Val=1580である。これらからαの値を求めると、α=(25340−1580)/(2001−3900)=−12.5となる。よって、αが一定ではないので、この組み合わせは伝搬の関係になっていないことが分かる。
(画面パラメータ1個とINSERT値の関係推定について)
図13は、動作ログ(D21、D22、D23)の一例を説明する説明図である。図13に示すように、分析対象の業務システム2から取得した動作ログがD21、D22、D23の内容(値)であったものとする。
図14は、データテーブル(T21、T22、T23)の一例を説明する説明図である。図14に示すように、データテーブルT21は、動作ログD21、D22、D23から画面パラメータごとにID(urlNo)と、実行したURLと、seqをまとめたものである。また、データテーブルT22は、同様に、SQLごとにID(sqlNo)、実行したSQL、そのときのバインド値と検索結果、SQLに対応する画面パラメータのID、seqをまとめたものである。データテーブルT23はカラムの集合(SetC)である。具体的には、動作ログD21、D22、D23のURLからHTTPパラメータを抽出した集合SetCは(ORDER,PRICE)である。
まず、画面パラメータORDERと請求額カラムに伝搬関係があるかを調べる。具体的には、データテーブルT21のurlNo=1から、ORDER=c1Val=101、請求額=x1Val=25340である。次に、データテーブルT21のurlNo=2からc2Val=102、x2Val=4928である。これらからαの値を求めると、α=(25340−4928)/(101−102)=−20412となる。同様に、urlNo=3からc2Val=103、x2Val=1580である。これらからαの値を求めると、α=(25340−1580)/(101−103)=−11880となる。よって、αが一定ではないので、この組み合わせは伝搬の関係になっていないことが分かる。
次に、画面パラメータPRICEと請求額カラムに伝搬関係があるかを調べる。urlNo=1から、PRICE=c1Val=23000、請求額=x1Val=25340である。次に、urlNo=2からc2Val=4100、x2Val=4928である。これらからαの値を求めると、α=(25340−4928)/(23000−4100)=1.08となる。
同様に、urlNo=3からc2Val=1000、x2Val=1580である。これらからαの値を求めると、α=(25340−1580)/(23000−1000)=1.08となる。よって、αが一定であり、β=x1Val−α・c1Val=500である。以上より、この組み合わせは間接的な伝搬関係があり、PRICE*1.08+500=請求額であると推定できる。
(画面パラメータが持つ複数の繰り返しパラメータとINSERT値の関係推定について)
図15は、動作ログ(D31、D32、D33)の一例を説明する説明図である。図15に示すように、分析対象の業務システム2から取得した動作ログがD31、D32、D33の内容(値)であったものとする。
図16は、データテーブル(T31、T32、T33)の一例を説明する説明図である。図16に示すように、データテーブルT31は、動作ログD31、D32、D33から画面パラメータごとにID(urlNo)と、実行したURLと、seqをまとめたものである。また、データテーブルT32は、同様に、SQLごとにID(sqlNo)、実行したSQL、そのときのバインド値と検索結果、SQLに対応する画面パラメータのID、seqをまとめたものである。
画面パラメータの変数名(例えばCODE−1)は非数値(例えばCODE−)の後に数値(例えば1)が連結された文字列から構成されていると仮定し、非数値文字列と数値文字列に分離する。そして、同じ数値文字列ごとに組を構成することにより、動作ログD31のURLの値から、データテーブルT33に示すパラメータの組を作る。具体的には、パラメータ名2個の組は(CODE−、UNITPRICE−)、(CODE−、QTY−)、(UNITPRICE−、QTY−)である。分析部11は、INSERTで挿入する税抜き額と間接的な伝搬関係があるかを以下の処理で推定する。
組(CODE−、UNITPRICE−)の場合、データテーブルT33のurlNo=1からパラメータ2個の値はC=(123、130)、D=(1000、1500)である。よって、積和値はΣC1i・D1i=123*1000+130*1500=318000であり、X1=23000である。
urlNo=2で同様に計算すると、積和値ΣC2j・D2j=3280000、X2=4100である。よって、αの値を求めると、α=(X1−X2)/(ΣC1i・D1i−ΣC2j・D2j)=(23000−4100)/(318000−3280000)=−6.4*10−3である。
urlNo=3で同様に計算するとα=(23000−1580)/(318000−60100)=8.3*10−2である。よって、αが互いに異なるため、この組み合わせではデータ伝搬していないと判断する。
同様に、組(CODE−、QTY−)の場合、データテーブルT33のurlNo=1から積和値ΣC1i・D1i=123*20+130*2=2720、X1=23000である。urlNo=2で同様に計算すると、積和値ΣC2j・D2j=800、X2=4100である。よって、αの値を求めると、α=(X1−X2)/(ΣC1i・D1i−ΣC2j・D2j)=(23000−4100)/(2720−800)=9.8である。
urlNo=3で同様に計算するとα=(23000−1580)/(2720−8005)=−4.1である。よって、αが互いに異なるため、この組み合わせではデータ伝搬していないと判断する。
同様に、組(UNITPRICE−、QTY−)の場合、データテーブルT33のurlNo=1から積和値ΣC1i・D1i=1000*20+1500*2=23000、X1=23000である。urlNo=2で同様に計算すると、積和値ΣC2j・D2j=4100、X2=4100である。よって、αの値を求めると、α=(X1−X2)/(ΣC1i・D1i−ΣC2j・D2j)=(23000−4100)/(23000−4100)=1である。
urlNo=3で同様に計算するとα=(23000−1580)/(23000−1580)=1である。よって、αが一致するため、UNITPRICE−*とQTY−*から受注テーブルT3の税抜き額カラムに間接的な伝搬関係があると推定する。
(SELECT結果の2つのカラムとINSERT値の関係推定について)
図17は、動作ログ(D41、D42、D43)の一例を説明する説明図である。図17に示すように、分析対象の業務システム2から取得した動作ログがD41、D42、D43の内容(値)であったものとする。
図18は、データテーブル(T41、T42、T43)の一例を説明する説明図である。図18に示すように、データテーブルT41は、動作ログD41、D42、D43から画面パラメータごとにID(urlNo)と、実行したURLと、seqをまとめたものである。また、データテーブルT43は、同様に、SQLごとにID(sqlNo)、実行したSQL、そのときのバインド値と検索結果、SQLに対応する画面パラメータのID、seqをまとめたものである。また、データテーブルT42は、INSERTに先立つSELECTで検索した明細テーブルT2のカラム(明細ID、伝票番号、商品ID、税抜き単価、数量)をまとめたものである。
分析部11は、INSERTに先立つSELECTで検索した明細テーブルT2のカラム(明細ID、伝票番号、商品ID、税抜き単価、数量)から2つ取出して組を作り、INSERTで挿入する税抜き額と間接的な伝搬関係があるかを以下の処理で推定する。
例えば、組(商品ID、税抜き単価)の場合、データテーブルT42のurlNo=1からカラム2個の値はC=(123、130)、D=(1000、1500)である。よって、積和値ΣC1i・D1i=123*1000+130*1500=318000であり、X1=23000である。
urlNo=2で同様に計算すると、積和値ΣC2j・D2j=3280000、X2=4100である。よってαの値を求めると、α=(X1−X2)/(ΣC1i・D1i−ΣC2j・D2j)=(23000−4100)/(318000−3280000)=−6.4*10−3である。
urlNo=3で同様に計算するとα=(23000−1580)/(318000−60100)=8.3*10−2である。よって、αが互いに異なるため、この組み合わせではデータ伝搬していないと判断する。
同様に(税抜き単価、数量)の場合、データテーブルT42のurlNo=1から積和値ΣC1i・D1i=1000*20+1500*2=23000、X1=23000である。urlNo=2で同様に計算すると、積和値ΣC2j・D2j=4100、X2=4100である。よって、αの値を求めると、α=(X1−X2)/(ΣC1i・D1i−ΣC2j・D2j)=(23000−4100)/(23000−4100)=1である。
urlNo=3で同様に計算するとα=(23000−1580)/(23000−1580)=1である。よって、αが一致するため、明細テーブルT2の税抜き単価カラムと数量カラムから受注テーブルT3の税抜き額カラムには間接的な伝搬関係があると推定する。
(キー値を介して関係付く2種類のSELECT結果のカラムとINSERT値の関係推定について)
図19は、動作ログ(D51、D52、D53)の一例を説明する説明図である。図19に示すように、分析対象の業務システム2から取得した動作ログがD51、D52、D53の内容(値)であったものとする。
図20は、データテーブル(T51、T52、T53、T54)の一例を説明する説明図である。図20に示すように、データテーブルT51は、動作ログD51、D52、D53から画面パラメータごとにID(urlNo)と、実行したURLと、seqをまとめたものである。また、データテーブルT52は、同様に、SQLごとにID(sqlNo)、実行したSQL、そのときのバインド値と検索結果、SQLに対応する画面パラメータのID、seqをまとめたものである。
INSERTで挿入する受注テーブルT3の税抜き額カラムをカラムXとするとき、本実施例の動作ログD51、D52、D53では、INSERTに先立つSELECTはそれぞれの画面単位ログで2種類実行される。この2種類のものについて、データテーブルT53は、明細テーブルT2からの検索結果をまとめたものである。また、データテーブルT54は、商品マスタテーブルT1からの検索結果をまとめたものである。
分析部11は、データテーブルT53およびデータテーブルT54から、それぞれカラムを1個ずつ選択し、片方のカラム値がもう片方のカラム値を含んでいるものを探す。これにより、分析部11は、データテーブルT53の商品IDとデータテーブルT54の商品IDがカラム対(K1、K2)に該当することを検出できる。よって、分析部11は、データテーブルT53およびデータテーブルT54からカラム対(K1、K2)以外のカラムを1個ずつ選択する。
カラムCとして商品マスタテーブルT1の税抜き単価を、カラムDとして明細テーブルT2の数量を選択した場合、urlNo=1で商品IDが同じ値の対を使って積和値を求めると、ΣC1i・D1i=1000*20+1500*2=23000である。また、この場合にはX1=23000である。
urlNo=2で同様に計算すると、積和値ΣC2j・D2j=4100、X2=4100である。よって、αの値を求めると、α=(X1−X2)/(ΣC1i・D1i−ΣC2j・D2j)=(23000−4100)/(23000−4100)=1である。
urlNo=3で同様に計算するとα=(23000−1580)/(23000−1580)=1である。よって、αが一致するため、商品マスタテーブルT1の税抜き単価カラムと明細テーブルT2の数量カラムが、それぞれの商品IDカラムをキーとして、受注テーブルT3の税抜き額カラムに対して間接的な伝搬関係があると推定する。
(キー値を介して関係付く画面パラメータとSELECT結果のカラムとINSERT値の関係推定について)
図21は、動作ログ(D61、D62、D63)の一例を説明する説明図である。図21に示すように、分析対象の業務システム2から取得した動作ログがD61、D62、D63の内容(値)であったものとする。
図22は、データテーブル(T61、T62、T63、T64)の一例を説明する説明図である。図22に示すように、データテーブルT61は、動作ログD61、D62、D63から画面パラメータごとにID(urlNo)と、実行したURLと、seqをまとめたものである。また、データテーブルT62は、同様に、SQLごとにID(sqlNo)、実行したSQL、そのときのバインド値と検索結果、SQLに対応する画面パラメータのID、seqをまとめたものである。
本実施例の画面パラメータには、「画面パラメータが持つ複数の繰り返しパラメータとINSERT値の関係推定について」に示したように2種類のパラメータの繰り返しがある(例えばCODE−*とQTY−*)。データテーブルT63は、抽出した繰り返しの値をまとめたものである。また、INSERTで挿入する受注テーブルT3の税抜き額カラムをカラムXとするとき、本実施例の動作ログでは、INSERTに先立つSELECTはそれぞれの画面単位ログで1種類実行される。データテーブルT64は、商品マスタテーブルT1からの検索結果をまとめたものである。
分析部11は、データテーブルT63およびデータテーブルT64からそれぞれカラムを1個ずつ選択し、片方のカラム値がもう片方のカラム値を含んでいるものを探す。これにより、分析部11は、データテーブルT63のCODE−と、データテーブルT64の商品IDがカラム対(K1、K2)に該当することを検出できる。よって、分析部11は、データテーブルT63およびデータテーブルT64からカラム対(K1、K2)以外のカラムを1個ずつ選択する。
カラムCとして商品マスタテーブルT1の税抜き単価を、カラムDとして画面パラメータのQTY−を選択した場合、urlNo=1で商品IDとCODE−が同じ値の対を使って積和値を求めると、ΣC1i・D1i=1000*20+1500*2=23000である。また、この場合にはX1=23000である。
urlNo=2で同様に計算すると、積和値ΣC2j・D2j=4100、X2=4100である。よって、αの値を求めると、α=(X1−X2)/(ΣC1i・D1i−ΣC2j・D2j)=(23000−4100)/(23000−4100)=1である。
urlNo=3で同様に計算するとα=(23000−1580)/(23000−1580)=1である。よって、αが一致するため、商品マスタテーブルT1の税抜き単価カラムと画面パラメータのQTY−*が、それぞれの商品IDカラム、CODE−*をキーとして、受注テーブルT3の税抜き額カラムに対して間接的な伝搬関係があると推定する。
(直接的に対応がつかない値をUPDATEで更新する場合の関係推定について)
図23は、動作ログ(D71、D72、D73)の一例を説明する説明図である。図23に示すように、分析対象の業務システム2から取得した動作ログがD71、D72、D73の内容(値)であったものとする。
図24は、データテーブル(T71、T72、T73)の一例を説明する説明図である。図24に示すように、データテーブルT71は、動作ログD71、D72、D73から画面パラメータごとにID(urlNo)と、実行したURLと、seqをまとめたものである。また、データテーブルT72は、同様に、SQLごとにID(sqlNo)、実行したSQL、そのときのバインド値と検索結果、SQLに対応する画面パラメータのID、seqをまとめたものである。データテーブルT73は、請求額の更新値と請求額の差分とをまとめたものである。
請求テーブルT4の請求額カラムをカラムXとするとき、INSERT以前に実行されたSELECT結果に含まれるカラム集合SetCは受注テーブルの伝票番号、税抜き額、顧客IDと請求テーブルの伝票番号である。
「カラム1個との対応付け」に関し、税抜き額カラムと請求額カラムに伝搬関係があるかを調べる場合を例示する。まず、UPDATEで更新する値そのものをカラムXの値として処理する。
「動作ログ1」から、税抜き額=c1Val=23000、請求額=x1Val=25340である。次に、「動作ログ2」からc2Val=4100、x2Val=5428である。これらからα=(25340−5428)/(23000−4100)=1.05となる。同様に、「動作ログ3」からc2Val=1000、x2Val=2580である。これらからαの値を求めると、α=(25340−2580)/(23000−1000)=1.03となり、αは一定ではない。
次に、UPDATEに先立ち実行されたSELECTの検索結果との差分値(データテーブルT73の請求額の差分)を用いて処理する。「動作ログ1」から、税抜き額=c1Val=23000、請求額の差分=x1Val=24840である。
次に、「動作ログ2」からc2Val=4100、x2Val=4428である。これらからαの値を求めると、α=(24840−4428)/(23000−4100)=1.08となる。
同様に、「動作ログ3」からc2Val=1000、x2Val=1080である。これらからαの値を求めると、α=(24840−1080)/(23000−1000)=1.08となる。よって、αが一定であり、β=x1Val−α・c1Val=0である。以上より、この組み合わせは間接的な伝搬関係があり、税抜き額*1.08=請求額の更新値であると推定する。
上記の実施例では「カラム1個との対応付け」の処理を行う場合を例示したが、他の場合も同様に行うことで、UPDATEの更新値ないし更新値の差分と間接的なデータ伝搬の関係にあるかを推定することができる。
図25は、表示画面Gの一例を説明する説明図である。図25に示すように、出力部13は、分析部11の分析結果をディスプレイの表示画面Gに表示する。具体的には、出力部13は、表示画面G上に業務用DB21のカラムおよび画面パラメータ内の変数値を列挙したテーブル・カラム画像G1〜G5を表示する。そして、出力部13は、分析部11の分析結果に基づいて、対応関係のあるカラムや変数値同士を線で結びつけた接続関係表示G11、G12を行う。
例えば、直接的なデータ伝搬があるものと分析されたカラムや変数値同士は実線などの接続関係表示G11とする。また、間接的なデータ伝搬があるものと分析されたカラムや変数値同士は破線などの接続関係表示G12とする。これにより、ユーザは、直接的なデータ伝搬があるものと分析された分析結果と、間接的なデータ伝搬があるものと分析された分析結果とを容易に識別できる。
以上のように、分析支援装置1は、画面パラメータ、バインド変数値等の入力パラメータと、この入力パラメータに基づいて業務用DBからのデータの読み出しおよび業務用DBへのデータの書き込みの内の少なくともデータの書き込みを行ったアクセス記録とを含む動作ログを複数取得する。そして、分析支援装置1は、取得された複数の動作ログの中の、業務用DBの所定のカラムにかかるアクセス記録を含む動作ログの各々おいて、入力パラメータに含まれる値またはアクセス記録において業務用DBから読み出された値と、アクセス記録において業務用DBへ書き込みを行った値と組み合わせて所定の演算を行う。分析支援装置1は、この演算結果(α)が一定である場合に、カラムにデータの伝搬があるものと分析し、伝搬があると分析されたカラムを出力する。このため、分析支援装置1は、例えば、業務用DBより読み出した値をメソッド内で演算し、演算後の値を別のカラムに書き込むような間接的に関係性のあるデータ伝搬についても把握することができる。また、分析支援装置1は、業務システム2がDBアクセスデータ20として収集した動作ログを取得する構成である。これにより、例えば、保守開発の上流工程で業務システム2の業務用DB周りのデータ伝搬を把握でき、システム変更の現行システムへの影響をより調査しやすくなる利点がある。
また、図示した各装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、分析部11、記憶部12または出力部13を分析支援装置1の外部装置としてネットワークで接続するようにしてもよい。また、分析部11、記憶部12または出力部13を別の装置がそれぞれ有し、ネットワーク接続されて協働することで、上記の分析支援装置1の機能を実現するようにしてもよい。
また、上記の実施形態で説明した各種の処理は、予め用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、図26を用いて、上記の実施形態と同様の機能を有する分析支援プログラムを実行するコンピュータの一例について説明する。
図26は、分析支援プログラム270aを実行するコンピュータ200の一例を説明する説明図である。図26に示すように、コンピュータ200は、操作部210aと、スピーカ210bと、カメラ210cと、ディスプレイ220と、通信部230とを有する。さらに、このコンピュータ200は、CPU250と、ROM260と、HDD270と、RAM280とを有する。これら210〜280の各部はバス240を介して接続される。
HDD270には、上記の実施形態で示した分析部11、記憶部12および出力部13と同様の機能を発揮する分析支援プログラム270aが予め記憶される。この分析支援プログラム270aについては、分析部11、記憶部12および出力部13の各構成要素と同様、適宜統合または分離してもよい。例えば、HDD270に格納されるデータは、常に全てのデータがHDD270に格納される必要はなく、処理に必要なデータのみがHDD270に格納されればよい。
コンピュータ200では、CPU250が分析支援プログラム270aをHDD270から読み出してRAM280に展開する。これによって、分析支援プログラム270aは、分析支援プロセス280aとして機能する。この分析支援プロセス280aは、HDD270から読み出した各種データを適宜RAM280上の自身に割り当てられた領域に展開し、この展開した各種データに基づいて各種処理を実行する。なお、分析支援プロセス280aは、分析部11、記憶部12および出力部13にて実行される処理を含む。また、CPU250上で仮想的に実現される各処理部は、常に全ての処理部がCPU250上で動作する必要はなく、処理に必要な処理部のみが仮想的に実現されればよい。
なお、上記の分析支援プログラム270aについては、必ずしも最初からHDD270やROM260に記憶させておく必要はない。例えば、コンピュータ200に挿入されるフレキシブルディスク、いわゆるFD、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に各プログラムを記憶させる。そして、コンピュータ200がこれらの可搬用の物理媒体から各プログラムを取得して実行するようにしてもよい。また、公衆回線、インターネット、LAN、WANなどを介してコンピュータ200に接続される他のコンピュータまたはサーバ装置などに各プログラムを記憶させておき、コンピュータ200がこれらから各プログラムを取得して実行するようにしてもよい。
(別実施形態)
上述した実施形態の別実施形態を説明する。業務システム2では、受注業務を例にとると、画面で1つの受注に含まれる複数の明細項目が入力され、組ごとに処理が行われることがある。例えば、画面からは明細項目として商品コードと、受注数量の組とを幾つか入力し、その入力データを用いて明細ごとの商品コードと受注数量の値を明細テーブルに書き込む。また同時に、明細単位の合計金額を計算した値なども明細テーブルに書き込む場合がある。また、受注伝票自体を用いて受注テーブルを更新する。
画面からの入力をきっかけにして実行されるSQLは、受注伝票自体の処理と明細ごとに繰り返される処理の2種類が混在して実行される。よって、上述した実施形態では、データの対応関係を推定することが困難な場合がある。
図28は、受注業務におけるデータ伝搬の一例を説明する説明図である。図29は、データ伝搬の検出に失敗した場合を説明する説明図である。図28において、動作ログD81は、受注業務における画面入力(HTTP)のログである。また、動作ログD82は、画面入力をきっかけにして実行されるSQLのログである。また、商品マスタテーブルT1、明細テーブルT2、受注テーブルT3およびメッセージ画面パラメータテーブルT5は、受注業務にかかるデータテーブルを示し、テーブル間の実線・破線はテーブルにおける項目同士のデータ伝搬を示す。なお、実線は直接的なデータ伝搬を示し、破線は間接的なデータ伝搬を示す。図29の例では、明細テーブルT2へのデータ伝搬関係の検出に失敗している。
図28に示すように、受注業務における動作ログD81、D82では、受注テーブルT3へのデータ伝搬関係と、明細テーブルT2へのデータ伝搬関係とが存在する。動作ログD81、D82の例では、2つの明細に関するSQLが実行されたが、例えば、明細テーブルT2の受注数量カラムに「10」を挿入するSQLに対し、画面パラメータテーブルT5の受注数量は、「10」と「21」の異なる2つの値に対応する。したがって、上述した実施形態では、対応関係を推定することが困難であり、図29に示すように、明細テーブルT2へのデータ伝搬関係の検出に失敗する。
このため、別実施形態では、分析部11は、一画面からの入力がきっかけで発生した画面単位の動作ログ(画面単位ログ)ごとにキーとするカラムないし画面のパラメータのキー候補を取得する。次いで、分析部11は、キー候補を有するカラム(キーカラム候補)ごとに、画面パラメータ、バインド変数値等の入力パラメータに含まれる値またはデータの書き込みを行ったアクセス記録において業務用DB21から読み出された値と、アクセス記録において業務用DB21へ書き込みを行った値を組み合わせ、上述した実施形態と同様に所定の演算を行う。これにより、別実施形態では、上述した実施形態ではデータの対応関係を推定することが困難な事例(例えば明細ごとのデータ伝搬)であっても、データ伝搬を推定することができる。
以下に別実施形態を詳細に説明する。なお、以下の別実施形態では、分析対象の業務システム2で実行するアプリケーションはオンライン実行であり、ある画面から入力した値を用いて業務アプリの内部処理が実行され、かつ画面単位でステートレスであるという前提で説明する。ただし、この前提は一例であり、バッチ処理などでも適用可能である。また、SQL文はバインド変数を用いて記述されていることを前提とするが、変数値が埋め込まれているSQLからバインド変数に相当する部分を抽出してSQLとバインド変数、バインド変数値に変換することは可能である。
動作ログ取得部10は、分析対象の業務システム2における所定のログファイルへアクセスするなどして、端末装置の一画面からの入力がきっかけで発生した業務処理における動作ログ一式(画面単位ログ)を収集する。具体的には、動作ログ取得部10は、画面で入力し業務アプリに入力されるHTTPパラメータ(画面パラメータ)と、その画面がきっかけで実行される一連のSQLログ(SQL文、入力パラメータ(バインド変数値)、SELECT文の場合は加えて検索結果)とそれらの実行順を判断可能な情報(時刻など)を収集する。
分析部11は、動作ログ取得部10が取得した画面単位ログごとに、明細を区別する値(キー値)と、そのキー値を有する画面パラメータないしカラムを画面単位ログから検索する。ここで、キー値およびキー値を有する画面パラメータ名やカラム名は不明であるため、分析部11は、まずデータ遷移先テーブル(SQLのうちINSERTないしUPDATE文が扱うテーブル)に出現する値をキー値と仮定し、キーとするカラムの候補を生成する。
次に、分析部11は、同じキー値を持つSQLをグループとし、グループに属するSQLと、画面パラメータとで上述した実施形態と同様の演算を行い、データ伝搬(直接的なデータ伝搬および間接的なデータ伝搬)の検出を行う。
具体的には、分析部11は、次の(1)〜(3)の計算を実行する。
(1)データ遷移先のキー値の候補と同じ値をデータ遷移元から検索し、キーとするカラムないし画面パラメータの候補を生成する。
(2)キー候補が同じSQLをグループ化する。
(3)上記のSQLのグループを対象にして、上述した実施形態と同様の演算を行い、データ伝搬の検出を行う。
図30は、別実施形態にかかる分析支援装置1の動作例を示すフローチャートである。なお、上述した実施形態と同様の処理については同一の符号を付して説明を省略する。
図30に示すように、分析部11は、作成した画面単位ログの集合ごとに、S4a〜S14aの第1ループ処理を実行する。具体的には、分析部11は、第1ループ処理が開始されると、画面単位ログごとに、キー値の候補を取得する(S100)。キー値の候補は、画面単位ログに含まれるINSERTないしUPDATEで設定される値と、UPDATEのWHERE句に出現する値などである。
次いで、分析部11は、候補とするキー値ごとに、キー値を有するSQL列(文)を作る(S101)。ここでいうSQL列は、画面単位ログのSQL列のうち、キー値を含むINSERTないしUPDATEを1つと、その1つのINSERTないしUPDATE以前に実行されたキーとをWHERE節にもつSELECT(0個以上)とを有する。
次いで、分析部11は、S101で作ったSQL列のうち、INSERTないしUPDATEでキー値を持つカラム名(キーカラム候補)を作る(S102)。具体的には、分析部11は、S101で作ったSQL列において、INSERTないしUPDATEされるテーブル/カラム(データ伝搬先)を探し、キーカラム候補を作る。
次いで、分析部11は、S100、S101、S102の結果をもとに、キー値の候補、SQL列、キーカラム候補を有する一覧を作る(S103)。次いで、分析部11は、S103で作成した一覧をもとに、キーカラム候補ごとに、S104〜S109の第2ループ処理を実行する。
第2ループ処理が開始されると、分析部11は、キーカラム候補に対応するSQL(列)を対象として上述した実施形態と同様の演算を行い、データ伝搬の検出を行う(S105)。これにより、分析部11は、テーブルからのデータ伝搬を検出する。
次いで、分析部11は、キー値が画面パラメータの何番目(K)かを求める(S106)。具体的には、分析部11は、画面パラメータ名の一部が共通するグループ(例えば、「code−1」、「code−2」、「code−3」の場合は「code−」が共通)を対象として、グループの値にキー値を1つ持ち、他のグループの値全てが異なるグループを探す。そして、分析部11は、探し出したグループにおいて、キー値が何番目かを求める(K番目とする)。
次いで、分析部11は、K番目の画面パラメータを取り出す(S107)。具体的には、S106におけるグループとキー値が同じ個数の別グループを探し、K番目のパラメータを取り出す(キー値に対応する画面パラメータ一式とする)。ただし、パラメータ名には共通の文字列(例えば、「code−1」、「code−2」、「code−3」の場合は「code−」)を用いる。
次いで、分析部11は、キー値に対応してS107で取り出したK番目の画面パラメータと、同じキー値に対応するSQL列とを組み合わせて上述した実施形態と同様の演算を行い、データ伝搬の検出を行う(S108)。これにより、分析部11は、画面パラメータからのデータ伝搬を検出する。
ここで、より具体的な具体例を参照して分析支援装置1の別実施形態を説明する。なお、以下で説明する具体例では、分析対象の業務用DB21のテーブルが持つカラムは全て数値型であるものと仮定する。ただし、文字列型カラムに数値が入っている場合でも、文字列を適切に変換処理して数値として扱うことで、数値型と同様に処理できる。
図31は、動作ログの一例を説明する説明図である。図31に示すように、動作ログD91、D92は、URLで示した画面操作がきっかけで実行されたSQLの実行文(SQLとバインド値、SELECTの場合は検索で得られた値も含む)を有する。なお、動作ログD91、D92は、画面操作がきっかけで同じ種類のSQL文を実行する(例えば、バインド値が異なるものの、実行するSELECT文とINSERT文が同じ)ため、同じ画面単位ログの集合に属する。
S100において、分析部11は、動作ログD91、D92ごとに、キー値の候補を取得する。図32は、データテーブルの一例を説明する説明図である。より具体的には、図32は、動作ログD91、D92ごとにキー値候補を取得して得られたデータテーブルT81を例示している。
図32に示すように、分析部11は、画面単位ログ(動作ログD91、D92)ごとに、INSERT文で設定される値をキー値候補として取得する。なお、本例では、UPDATEを実行しなかったので、UPDATEで設定される値とWHERE句の出現する値は取得されていない。
次いで、分析部11は、S103において、画面単位ログのキー値候補、キー値候補を含むSQL列およびINSERTないしUPDATEでキー値を持つキーカラム候補の一覧を作る。
図33は、データテーブルの一例を説明する説明図である。より具体的には、図33は、動作ログD91におけるキーカラム候補の一覧を示すデータテーブルT82aと、動作ログD92におけるキーカラム候補の一覧を示すデータテーブルT82bを例示する図である。
図33のデータテーブルT82aに示すように、例えば、動作ログD91でキー値候補「001」を持つINSERT文とWHERE節にキー値を持つSERECT文は(SQL1,SQL3)であり、INSERT文でキー値候補「001」が出現するカラムは「明細.商品コード」である。
図34は、データテーブルの一例を説明する説明図であり、より具体的には、図33のデータテーブルT82a、T82bを用い、キーカラム候補ごとのSQL列一覧を示すデータテーブルT83を例示する図である。図34に示すように、分析部11は、データテーブルT83のキーカラム候補ごとに、キーカラム候補に対応するSQL列を用いて上述した実施形態と同様の演算を行い、データ伝搬の検出を行う。
図示例では、キーカラム候補のうち「明細.商品コード」以外はINSERTしか存在しないので、データ伝搬は発生していない。一方、キーカラム候補が「明細.商品コード」の場合は、それぞれのSQL列がSELECTとINSERTの組み合わせになっており、データ伝搬が検出される。
図35は、データ伝搬の検出を説明する説明図である。具体的には、図35に示すように、「商品マスタ.商品コード」→「明細.商品コード」へのデータ伝搬が検出され、商品マスタテーブルT1と明細テーブルT2とのデータ伝搬関係が検出される。
次に、分析部11は、画面パラメータ名の一部が共通するグループを作る。図36は、データテーブルの一例を説明する説明図であり、より具体的には、動作ログD91、D92より画面パラメータ名の一部が共通するグループを作成して得られるデータテーブルT84を例示する図である。本例では、「商品コード−1、商品コード−2」の「商品コード−」と、「受注数量−1、受注数量−2」の「受注数量−」とが該当し、図36に示すように、データテーブルT84が得られる。
次に、分析部11は、キーカラム候補ごとに、キー値が画面パラメータに含まれるか否かを調べ、含まれる場合はキー値が上記のグループの何番目(K)を取得する。
図37は、データテーブルの一例を説明する説明図であり、より具体的には、キーカラム候補ごとに、キー値が画面パラメータに含まれるか否かを調べて得られるデータテーブルT85を例示する図である。図37に示すように、例えば、「動作ログ1」においてキーカラム候補「明細.商品コード」のキー値「020」は、「商品コード−」の2番目の値(K=2)に存在する。「商品コード−」以外のグループの2番目の値(本例では「受注数量−」)である「21」と合わせた値「商品コード−=020&受注数量−=21」が画面パラメータとして得られる。なお、キーカラム候補「明細.商品コード」の他の動作ログおよびキー値も同様に画面パラメータが得られる。
図38は、データテーブルの一例を説明する説明図であり、より具体的には、対応する画面パラメータが存在する動作ログ、キー値、画面パラメータ、SQLの組み合わせを有するデータテーブルT86を例示する図である。分析部11は、データテーブルT85をもとに、図38に示すデータテーブルT86を得る。分析部11は、このデータテーブルT86を用いて上述した実施形態と同様の演算を行い、データ伝搬の検出を行う。
図39は、データ伝搬の検出を説明する説明図である。具体的には、図39に示すように、データテーブルT86を用いてデータ伝搬の検出を行うと次の関係が検出される。
「商品マスタ.商品コード」→「明細.商品コード」
「(画面)商品コード−」→「明細.商品コード」
「(画面)受注数量−」→「明細.受注数量」
「(画面)受注数量−*商品マスタ.単価」→「明細.合計金額」
これにより、商品マスタテーブルT1、明細テーブルT2および画面パラメータテーブルT5のデータ伝搬関係が検出される。よって、別実施形態では、図29においてデータ伝搬関係の検出に失敗した箇所のデータ伝搬関係も検出することができる。