(57)【要約】【課題】解析精度が低い場合であっても、ＤＡＯメソッドに対応するＳＱＬ文を抽出する。【解決手段】プロセッサとメモリを有してソースコードを静的解析するＳＱＬ文抽出装置は、ソースコードを静的解析してＤＡＯメソッドに対応するＳＱＬ文を抽出する解析及び可視化部を有し、前記解析及び可視化部は、予め設定されたＳＱＬマップ及びＳＱＬＩＤ向け連絡情報を取得して、当該ＳＱＬマップを解析し、前記ＳＱＬＩＤ向け連絡情報からＳＱＬＩＤを生成し、前記ＳＱＬＩＤとＳＱＬ文のマップデータを生成する検索対象整形マップ生成部と、前記ソースコードを解析してＤＡＯメソッドの定義を抽出し、当該ＤＡＯメソッドの定義からＤＡＯ検索式を生成するＤＡＯ検索式生成部と、前記ＳＱＬＩＤとＳＱＬ文のマップデータと前記ＤＡＯ検索式を用いて前記ＤＡＯメソッドに対応するＳＱＬ文の候補を抽出するＳＱＬ文候補抽出部と、を有する。【選択図】図２
2019074966.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサとメモリを有してソースコードを静的解析するＳＱＬ文抽出装置であって、
ソースコードを静的解析してＤＡＯメソッドに対応するＳＱＬ文を抽出する解析及び可視化部を有し、
前記解析及び可視化部は、
予め設定されたＳＱＬマップ及びＳＱＬＩＤ向け連絡情報を取得して、当該ＳＱＬマップを解析し、前記ＳＱＬＩＤ向け連絡情報からＳＱＬＩＤを生成し、前記ＳＱＬＩＤとＳＱＬ文のマップデータを生成する検索対象整形マップ生成部と、
前記ソースコードを解析してＤＡＯメソッドの定義を抽出し、当該ＤＡＯメソッドの定義からＤＡＯ検索式を生成するＤＡＯ検索式生成部と、
前記ＳＱＬＩＤとＳＱＬ文のマップデータと前記ＤＡＯ検索式を用いて前記ＤＡＯメソッドに対応するＳＱＬ文の候補を抽出するＳＱＬ文候補抽出部と、
を有することを特徴とするＳＱＬ文抽出装置。
【請求項２】
請求項１に記載のＳＱＬ文抽出装置であって、
前記解析及び可視化部は、
前記ソースコードを静的解析して可視化図を生成する可視化図生成部を、さらに有し、
前記可視化図生成部は、
受け付けたトリガーイベントを契機として前記ＳＱＬ文の候補を出力することを特徴とするＳＱＬ文抽出装置。
【請求項３】
請求項１に記載のＳＱＬ文抽出装置であって、
前記ＤＡＯ検索式生成部は、
前記ＤＡＯメソッドの定義の関数呼び出し部で、呼び出し関数の引数が前記ＳＱＬＩＤとＳＱＬ文のマップデータのＳＱＬＩＤのいずれかと部分一致している場合に、前記呼び出し関数の引数部分をＤＡＯ検索式の生成対象とすることを特徴とするＳＱＬ文抽出装置。
【請求項４】
請求項３に記載のＳＱＬ文抽出装置であって、
前記ＤＡＯ検索式生成部は、
前記ＤＡＯ検索式の生成対象に対して、文字列以外の部分を“．＊”で置換した置換文字列によりＤＡＯ検索式を生成することを特徴とするＳＱＬ文抽出装置。
【請求項５】
請求項４に記載のＳＱＬ文抽出装置であって、
前記ＤＡＯ検索式生成部は、
前記ＳＱＬ文の候補の中からユーザの選択を受け付けて、前記選択されたＳＱＬ文の前記ＳＱＬＩＤと前記ＤＡＯ検索式の置換文字列の一部または全てが、所定の条件を満たしている場合に、ＤＡＯ検索式アップデート情報の当該項目の回数に所定値を加算し、当該項目の回数が予め設定された閾値を超えた場合に、ＤＡＯ検索式のアップデートを行うことを特徴とするＳＱＬ文抽出装置。
【請求項６】
請求項２に記載のＳＱＬ文抽出装置であって、
前記可視化図生成部は、
前記抽出したＳＱＬ文候補の中から、ＤＡＯメソッドに合わせてＳＱＬ文の候補を出力する際に、過去に選択された回数の多いＳＱＬ文を優先して出力することを特徴とするＳＱＬ文抽出装置。
【請求項７】
プロセッサとメモリを有する計算機が、ソースコードを静的解析するＳＱＬ文抽出方法であって、
前記計算機が、ＳＱＬマップと、ＳＱＬＩＤ向け連絡情報及びソースコードを取得する第１のステップと、
前記計算機が、前記ＳＱＬマップを解析し、前記ＳＱＬＩＤ向け連絡情報からＳＱＬＩＤを生成し、前記ＳＱＬＩＤとＳＱＬ文のマップデータを生成する第２のステップと、
前記計算機が、前記ソースコードを解析してＤＡＯメソッドの定義を抽出し、当該ＤＡＯメソッドの定義からＤＡＯ検索式を生成する第３のステップと、
前記計算機が、前記ＳＱＬＩＤとＳＱＬ文のマップデータと前記ＤＡＯ検索式を用いて前記ＤＡＯメソッドに対応するＳＱＬ文の候補を抽出する第４のステップと、
を含むことを特徴とするＳＱＬ文抽出方法。
【請求項８】
請求項７に記載のＳＱＬ文抽出方法であって、
前記計算機が、前記ソースコードを静的解析して可視化図を生成する第５のステップを、さらに含み、
前記第５のステップは、
受け付けたトリガーイベントを契機として前記ＳＱＬ文の候補を出力することを特徴とするＳＱＬ文抽出方法。
【請求項９】
請求項７に記載のＳＱＬ文抽出方法であって、
前記第３のステップは、
前記ＤＡＯメソッドの定義の関数呼び出し部で、呼び出し関数の引数が前記ＳＱＬＩＤとＳＱＬ文のマップデータのＳＱＬＩＤのいずれかと部分一致している場合に、前記呼び出し関数の引数部分をＤＡＯ検索式の生成対象とすることを特徴とするＳＱＬ文抽出方法。
【請求項１０】
請求項９に記載のＳＱＬ文抽出方法であって、
前記第３のステップは、
前記ＤＡＯ検索式の生成対象に対して、文字列以外の部分を“．＊”で置換した置換文字列によりＤＡＯ検索式を生成することを特徴とするＳＱＬ文抽出方法。
【請求項１１】
請求項１０に記載のＳＱＬ文抽出方法であって、
前記第３のステップは、
前記ＳＱＬ文の候補の中からユーザの選択を受け付けて、前記選択されたＳＱＬ文の前記ＳＱＬＩＤと前記ＤＡＯ検索式の置換文字列の一部または全てが、所定の条件を満たしている場合に、ＤＡＯ検索式アップデート情報の当該項目の回数に所定値を加算し、当該項目の回数が予め設定された閾値を超えた場合に、ＤＡＯ検索式のアップデートを行うことを特徴とするＳＱＬ文抽出方法。
【請求項１２】
請求項８に記載のＳＱＬ文抽出方法であって、
前記第５のステップは、
前記抽出したＳＱＬ文候補の中から、ＤＡＯメソッドに合わせてＳＱＬ文の候補を出力する際に、過去に選択された回数の多いＳＱＬ文を優先して出力することを特徴とするＳＱＬ文抽出方法。
【請求項１３】
プロセッサとメモリを有する計算機で、ソースコードを静的解析させるためのプログラムであって、
ＳＱＬマップと、ＳＱＬＩＤ向け連絡情報及びソースコードを取得する第１のステップと、
前記ＳＱＬマップを解析し、前記ＳＱＬＩＤ向け連絡情報からＳＱＬＩＤを生成し、前記ＳＱＬＩＤとＳＱＬ文のマップデータを生成する第２のステップと、
前記ソースコードを解析してＤＡＯメソッドの定義を抽出し、当該ＤＡＯメソッドの定義からＤＡＯ検索式を生成する第３のステップと、
前記ＳＱＬＩＤとＳＱＬ文のマップデータと前記ＤＡＯ検索式を用いて前記ＤＡＯメソッドに対応するＳＱＬ文の候補を抽出する第４のステップと、
を前記計算機に実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコードを静的に解析し、ＤＡＯ（Data Access Object）メソッドに対応するＳＱＬ文を抽出する技術に関する。
【背景技術】
【０００２】
３層アーキテクチャのＷｅｂアプリケーションでは、プログラムの動作不良や脆弱性等の原因箇所の特定を、静的解析で行う事が困難である。中でも、データアクセスを伴うプログラムでは、ＳＱＬ文がプログラムの実行によって動的に構成される事があるため、ＤＡＯメソッドに対応するＳＱＬ文について静的解析を行う事は難しい。
【０００３】
特許文献１には、ソースコードを静的に解析（ＡＰフロー解析とＳＱＬフロー解析）して、ＳＱＬ文を構成する変数が取り得る値の集合を生成する技術が開示され、ＡＰフローに対応するＳＱＬ文を挙げる方法が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−２５３３６３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記特許文献１の方法は、静的解析の精度の問題により、ＳＱＬ文を構成する変数が取り得る値の集合の生成漏れが発生する事があり、引いてはＡＰフローとしてのＤＡＯメソッドに対応するＳＱＬ文の抽出漏れが発生する事があった。
【０００６】
そこで本発明は、上記問題点に鑑みてなされたもので、解析精度が低い場合であっても、ＤＡＯメソッドに対応するＳＱＬ文を抽出することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、プロセッサとメモリを有してソースコードを静的解析するＳＱＬ文抽出装置であって、ソースコードを静的解析してＤＡＯメソッドに対応するＳＱＬ文を抽出する解析及び可視化部を有し、前記解析及び可視化部は、予め設定されたＳＱＬマップ及びＳＱＬＩＤ向け連絡情報を取得して、当該ＳＱＬマップを解析し、前記ＳＱＬＩＤ向け連絡情報からＳＱＬＩＤを生成し、前記ＳＱＬＩＤとＳＱＬ文のマップデータを生成する検索対象整形マップ生成部と、前記ソースコードを解析してＤＡＯメソッドの定義を抽出し、当該ＤＡＯメソッドの定義からＤＡＯ検索式を生成するＤＡＯ検索式生成部と、前記ＳＱＬＩＤとＳＱＬ文のマップデータと前記ＤＡＯ検索式を用いて前記ＤＡＯメソッドに対応するＳＱＬ文の候補を抽出するＳＱＬ文候補抽出部と、を有する。
【発明の効果】
【０００８】
本発明によれば、たとえ解析精度が低い場合であっても、ＤＡＯメソッドに対応するＳＱＬ文を抽出する事が出来る。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施例を示し、計算機システムのハードウェア構成の一例を示すブロック図である。
【図２】本発明の実施例を示し、計算機システムの機能の一例を示すブロック図である。
【図３】本発明の実施例を示し、ＳＱＬ−Ｍａｐの一例を示す図である。
【図４】本発明の実施例を示し、ＤＡＯメソッドの一例を示す図である。
【図５】本発明の実施例を示し、ＳＱＬＩＤとＳＱＬ文のマップデータの一例を示す図である。
【図６】本発明の実施例を示し、ＤＡＯメソッドとＳＱＬＩＤの対応表の一例を示す図である。
【図７】本発明の実施例を示し、ソースコードを解析して、ＤＡＯメソッドに対応するＳＱＬ文を抽出し、抽出したＳＱＬを可視化する処理の一例を示すフローチャートである。
【図８】本発明の実施例を示し、ソースコードを解析して、ＤＡＯメソッドに対応するＳＱＬ文を抽出し、抽出したＳＱＬを可視化する処理の一例を示すフローチャートである。
【図９】本発明の実施例を示し、ソースコードのユーザ選択メソッドをシーケンス図として可視化した後に、選択されたＳＱＬ文をシーケンス図上に表示する処理の一例を示すフローチャートである。
【図１０】本発明の実施例を示し、生成されたシーケンス図の一例を示す図である。
【図１１】本発明の実施例を示し、ＳＱＬ文の候補がシーケンス図上に表された例を示す図である。
【図１２】本発明の実施例を示し、ユーザに選択されたＳＱＬ文がシーケンス図上でオーバーレイ表示された例を示す図である。
【図１３】本発明の実施例を示し、ＳＱＬＩＤ向け連結表の一例を示す図である。
【図１４】本発明の実施例を示し、ＤＡＯ検索式アップデート表の一例を示すである。
【発明を実施するための形態】
【００１０】
以下、本発明によるＳＱＬ文抽出装置、ＳＱＬ文抽出方法、及びＳＱＬ文抽出プログラムに関する一実施形態を、図面を用いて詳細に説明する。
【００１１】
本実施例では、ソースコードを解析して、ＤＡＯ（Data Access Object）メソッドに対応するＳＱＬ文を抽出し、抽出したＳＱＬ文を、同じくソース解析を行い生成したシーケンス図上に可視化表示する方法の一例を記す。
【００１２】
尚、本実施例では、アプリケーションフレームワークとしてＳｐｒｉｎｇフレームワーク（登録商標）と、またＯ／Ｒマッピング（Object-relational mapping）フレームワークとしてｍｙＢａｔｉｓ（登録商標）の利用を意識して記述しているが、本発明は特定のフレームワークや言語に依存するものではない。
【００１３】
また、本実施例ではシーケンス図を生成し、シーケンス図上にＳＱＬ文をオーバーレイ表示する例を挙げるが、出力する図はシーケンス図に限定される事はなく、シーケンス図、コミュニケーション図、クラス図、その他ＵＭＬ図、その他オリジナル図等何であってもよい。
【００１４】
図１は、本発明の実施例に係る情報処理装置１００のハードウェア構成の一例を示すブロック図である。情報処理装置１００のハードウェアとして、中央処理装置１０１と、キーボードやマウス等の入力装置１０２と、二次記憶装置１０３と、主記憶装置１０４と、ディスプレイ等の表示装置１０５、及び通信装置１０７を有する。
【００１５】
尚、各装置は、バス１０６によって接続され、各装置間で相互にデータの送受信が可能である。通信装置１０７はネットワーク１２０に接続される。ネットワーク１２０には、情報処理装置やネットワークストレージといった、データを保存する事が可能な情報装置Ａ１１０が接続されている。
【００１６】
図２は、本発明の実施例に係る情報処理装置１００と、情報装置Ａ１１０の機能の一例を示すブロック図である。尚、本実施例においては、情報処理装置１００の機能の全てが中央処理装置１０１によって実行または操作されるソフトウェアプログラムやデータであるものとして説明するが、一部または全ては、ハードウェアとして実現されても良い。
【００１７】
また、本来は、これらの機能に加え、各機能の起動や管理等を行うＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）や制御プログラム等が存在する。本実施例では、これらの機能の連携処理を適宜説明することとし、ＯＳや制御プログラムがここで適宜説明された連携処理に必要となる機能ブロックの起動や実行管理を行う事は自明であるので、これらのＯＳや制御プログラムについては説明及び記載を省略する。
【００１８】
本発明の実施例に係る情報処理装置１００は、機能のブロックとして、図２に示すように構成される。解析及び可視化実行部２００が、検索対象整形マップ生成部２０１と、ＤＡＯ検索式生成部２０２と、ＳＱＬ文候補抽出部２０３とを含み、ＳＱＬＩＤとＳＱＬ文のマップデータ２０４と、ＤＡＯメソッドとＳＱＬＩＤの対応表２０５と、ＳＱＬＩＤ向け連結表２０６、及びＤＡＯ検索式アップデート表２０７を生成又は参照する。
【００１９】
情報装置Ａ１１０は、ＸＭＬ形式のＳＱＬ−Ｍａｐ２３０、及びソースコード（Ｊａｖａ（登録商標））２３１を有する。尚、ＳＱＬ−Ｍａｐ２３０、及びソースコード２３１は必ずしも上述の装置にある必要はなく、情報処理装置１００、及び情報装置Ａ１１０のいずれに格納されていても良い。
【００２０】
検索対象整形マップ生成部２０１と、ＤＡＯ検索式生成部２０２と、ＳＱＬ文候補抽出部２０３を含む解析及び可視化実行部２００の各機能部は、プログラムとして主記憶装置１０４にロードされ、中央処理装置１０１によって実行される。
【００２１】
中央処理装置１０１は、各機能部のプログラムに従って処理することによって、所定の機能を提供する機能部として稼働する。例えば、中央処理装置１０１は、解析及び可視化プログラムに従って処理することで解析及び可視化実行部２００として機能する。他のプログラムについても同様である。さらに、中央処理装置１０１は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
【００２２】
情報処理装置１００の各機能を実現するプログラム、テーブル等の情報は、二次記憶装置１０３や不揮発性半導体メモリ、ハードディスクドライブ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶デバイス、または、ＩＣカード、ＳＤカード、ＤＶＤ等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
【００２３】
上記プログラムを実行することで、情報処理装置１００はＳＱＬ文抽出装置として機能することができる。また、上記ＳＱＬＩＤ向け連結表２０６及びＤＡＯ検索式アップデート表２０７と、ＱＬ−Ｍａｐ２３０及びソースコード２３１は、予め設定された情報である。
【００２４】
図３は、ＳＱＬ−Ｍａｐ２３０の一例を示す図である。本実施例では、ＳＱＬ−Ｍａｐ２３０はＸＭＬで記述した例を示す。ＳＱＬ−Ｍａｐ２３０には、ｎａｍｅｓｐａｃｅ属性“ｃｏｍ．ｈｉｔａｃｈｉ．ｕｓｅｒ”を含むｍａｐｐｅｒタグ要素が存在し、その子要素として、“ＳＥＬＥＣＴ  ｉｄ，  ｎａｍｅ  ＦＲＯＭ  ｕｓｅｒ”という文字列を内容として含む、ｉｄ属性“ｔｅｓｔ”のｓｅｌｅｃｔタグ要素が存在している。
【００２５】
情報処理装置１００はＳＱＬ−Ｍａｐ２３０の情報を利用して、ＳＱＬＩＤとＳＱＬ文のマップデータ２０４を生成するが、その生成方法に関しては後述する。
【００２６】
図４は、ソースコード２３１のＤＡＯに関する記述例を示す図である。ソースコード２３１には、Ｄａｏクラスのメソッドとして“ｔｅｓｔ“メソッドが記載されている。ＤＡＯクラスのメソッドを解析して、ＤＡＯ検索式を生成し、ＤＡＯメソッドとＳＱＬＩＤの対応表２０５へ格納するが、その方法に関しては後述する。
【００２７】
図５は、ＳＱＬＩＤとＳＱＬ文のマップデータ２０４の一例を示す図である。ＳＱＬＩＤとＳＱＬ文のマップデータ２０４には、ＳＱＬＩＤ２０４１、及び該ＳＱＬＩＤに対応するＳＱＬ文２０４２を格納する。本実施例では、ＳＱＬＩＤ２０４１の“ｃｏｍ．ｈｉｔａｃｈｉ．ｕｓｅｒ．ｔｅｓｔ”に対応するＳＱＬ文２０４２として、“ＳＥＬＥＣＴ  ｉｄ，  ｎａｍｅ  ＦＲＯＭ  ｕｓｅｒ”という文字列が格納されている。本ＳＱＬＩＤとＳＱＬ文のマップデータ２０４の生成方法は後述する。
【００２８】
図６は、ＤＡＯメソッドとＳＱＬＩＤの対応表２０５の一例を示す図である。ＤＡＯメソッドとＳＱＬＩＤの対応表２０５には、ＤＡＯメソッド名２０５１と、ＤＡＯ検索式２０５２と、ＳＱＬＩＤ２０５３と、及び選択回数２０５４をひとつのエントリに格納する。
【００２９】
本実施例では、ＤＡＯメソッド名２０５１として“ｔｅｓｔ（）”が格納され、ＤＡＯ検索式２０５２として“ｃｏｍ￥．ｈｉｔａｃｈｉ￥．．＊．ｔｅｓｔ”が格納され、ＳＱＬＩＤ２０５３として、“ｃｏｍ．ｈｉｔａｃｈｉ．ｕｓｅｒ．ｔｅｓｔ”と“ｃｏｍ．ｈｉｔａｃｈｉ．ｕｓｅｒ２．ｔｅｓｔ”の二つが格納され、選択回数２０５４として、“ｃｏｍ．ｈｉｔａｃｈｉ．ｕｓｅｒ．ｔｅｓｔ”が５、“ｃｏｍ．ｈｉｔａｃｈｉ．ｕｓｅｒ２．ｔｅｓｔ”が２として格納されている。本ＤＡＯメソッドとＳＱＬＩＤの対応表２０５の生成方法は後述する。
【００３０】
図１３は、ＳＱＬＩＤ向け連結表２０６の一例を示す図である。ＳＱＬＩＤ向け連結表２０６は、ＳＱＬＩＤとＳＱＬ文のマップデータ２０４を生成するにあたり、ＳＱＬ−Ｍａｐ２３０の、どの要素をどの順番で連結してＳＱＬＩＤを生成し、どの部分がＳＱＬ文にあたるかを予め設定している。
【００３１】
ＳＱＬＩＤ向け連結表２０６は、番号＃２０６１と、タグと属性を含むＳＱＬＩＤ２０６２と、ＳＱＬ文２０６３とをひとつのエントリに含む。本実施例では、＃１のタグ“ｍａｐｐｅｒ”の属性“ｎａｍｅｓｐａｃｅ”の値と、＃２のタグ“ｓｅｌｅｃｔ”の属性“ｉｄ”の値、またはタグ“ｉｎｓｅｒｔ”の属性“ｉｄ”の値を、この順番で連結して、ＳＱＬＩＤを生成する。
【００３２】
生成した該ＳＱＬＩＤに対応するＳＱＬ文は、ＳＱＬＩＤ向け連結表２０６のＳＱＬ文の項目に○が付いているところの内容がそれに該当する。例えば、＃１、＃２ａと連結してＳＱＬＩＤを生成した場合は、ｓｅｌｅｃｔタグの内容がＳＱＬ文となり、＃１、＃２ｂと連結してＳＱＬＩＤを生成した場合は、ｉｎｓｅｒｔタグの内容がＳＱＬ文となる。
【００３３】
図１４は、ＤＡＯ検索式アップデート表２０７の一例を示す図である。ＤＡＯ検索式アップデート表２０７は、項目２０７１と、回数２０７２と、閾値２０７３と、実施２０７４とをひとつのエントリに含む。
【００３４】
ＤＡＯ検索式アップデート表２０７には、ＤＡＯ検索式のアップデートにあたりどのような項目２０７１を解析するか、その項目２０７１で正しく解析出来た回数２０７２と、項目の閾値２０７３、及びアップデートを実施したか否か（２０７４）を格納する。詳細については後述するが、本実施例では、項目２０７１で正しく解析出来た回数２０７２が項目の閾値２０７３以上の場合に、ＤＡＯ検索式をアップデートするものと判断する。
【００３５】
図７は、情報処理装置１００で行われる処理の一例を示すフローチャートである。情報処理装置１００の解析及び可視化実行部２００は、ソースコード２３１を解析して、ＤＡＯメソッドに対応するＳＱＬ文を抽出し、シーケンス図を生成して表示装置１０５に出力する。この処理は、情報処理装置１００の利用者などが解析及び可視化実行部２００を実行させることで開始される。
【００３６】
まず、ステップ７００では、解析及び可視化実行部２００が、ＤＡＯメソッドに対応するＳＱＬ文の抽出、及びシーケンス図の生成と表示を開始する。
【００３７】
ステップ７０１では、解析及び可視化実行部２００が、ＳＱＬ−Ｍａｐ２３０及びソースコード２３１を情報装置Ａ１１０から取得する。
【００３８】
ステップ７０２では、解析及び可視化実行部２００が、ＤＡＯメソッドとＳＱＬ文の対応付けが完了しているか否かを判定する。判定が真であれば、ステップ７０４へ進む。判定が偽であれば、ステップ７０３へ進む。
【００３９】
尚、該判定方法として、本実施例では、図５と図６で示した、ＳＱＬＩＤ２０４１とＳＱＬ文のマップデータ２０４、及びＤＡＯメソッドとＳＱＬＩＤの対応表２０５が生成されているか否かで判定を行うものとする。しかし、判定方法はこれに限定されるものではなく、例えば、ステップ７０３の実施後にソース修正が発生している場合は対応付けが完了していないものとする、など複数考えられる。
【００４０】
ステップ７０３では、解析及び可視化実行部２００が、ＤＡＯメソッドとＳＱＬ文の対応付けを行う。尚、本処理は、図８を用いて後に詳述する。
【００４１】
ステップ７０４では、解析及び可視化実行部２００が、処理の対象となるメソッド名の入力をユーザから受け付ける。勿論、ソースコードに含まれるメソッド名のリストをソースコード解析の際などに予め生成しておき、該リストの中からユーザが選択する方法であっても良い。
【００４２】
ステップ７０５では、解析及び可視化実行部２００が、ステップ７０４でユーザから受け付けたメソッドについて呼出関係を解析し、解析結果に基づいてシーケンス図を生成する。先にも述べたように、本実施例ではシーケンス図として可視化するが、可視化図はシーケンス図に限定される事はなく、シーケンス図、コミュニケーション図、クラス図、その他ＵＭＬ図、その他オリジナル図等何であってもよい。
【００４３】
図１０は、シーケンス図による可視化の一例を示す図である。図１０は、解析及び可視化実行部２００が生成したシーケンス図を、表示装置１０５に出力した一例を示す。
【００４４】
図１０の例では、呼出関係の解析結果には、ＣｏｎｔｒｏｌｌｅｒＣｌａｓｓ（２５１）と、ＳｅｒｖｉｃｅＣｌａｓｓ（２５２）と、Ｄａｏクラス（２５３）と、ＤＢ（２５４）という４つのライフラインが存在する。そして、Ｃｏｎｔｒｏｌｌｅｒクラス（２５１）の“ｅｎｔｒｙ（）”メソッドと、Ｓｅｒｖｉｃｅクラス（２５２）の“ｓｅｒｖ＿ａ（）”メソッドと、Ｄａｏクラス（２５３）の“ｔｅｓｔ（）”メソッドの順番にメソッドが呼ばれている例を示す。
【００４５】
図７に戻って、ステップ７０６では、解析及び可視化実行部２００が、ＤＡＯメソッドに対応するＳＱＬ文の抽出、及びシーケンス図の生成後に表示を終了する。
【００４６】
尚、上記処理の順番は、シーケンス図を生成した後にＤＡＯメソッドに対応するＳＱＬ文を抽出してもよく、つまり上記ステップ７０４とステップ７０５をステップ７０２に先駆けて実施する構成であっても良い。
【００４７】
図８は、情報処理装置１００で、ソースコードを解析して、ＤＡＯメソッドに対応するＳＱＬ文を抽出する処理の一例を示すフローチャートである。本フローチャートは、図７のステップ７０３で行われる処理を詳述したものである。
【００４８】
ステップ８００では、解析及び可視化実行部２００が、ＤＡＯメソッドに対応するＳＱＬ文の抽出を開始する。
【００４９】
ステップ８０１では、検索対象整形マップ生成部２０１が、ステップ７０１で取得したＳＱＬ−Ｍａｐ２３０を解析して、予め定義されたＳＱＬＩＤ向け連結表２０６に従って、ＳＱＬＩＤとＳＱＬ文のマップデータ２０４を生成する。
【００５０】
図１３に示すＳＱＬＩＤ向け連結表２０６の例では、検索対象整形マップ生成部２０１が、＃１と＃２の順にタグの属性値を連結してＳＱＬＩＤ２０６２を生成する。つまり、＃１のタグ“ｍａｐｐｅｒ”の属性“ｎａｍｅｓｐａｃｅ”の値と、＃２のタグの“ｓｅｌｅｃｔ”の属性“ｉｄ”の値またはタグ“ｉｎｓｅｒｔ”の属性“ｉｄ”の値を、この順番で連結して、ＳＱＬＩＤ２０６２を生成する。
【００５１】
検索対象整形マップ生成部２０１が生成した該ＳＱＬＩＤに対応するＳＱＬ文２０４２は、ＳＱＬＩＤ向け連結表２０６のＳＱＬ文２０６３の項目に○が付いているところの内容に相当する。例えば、＃１、＃２ａと連結してＳＱＬＩＤを生成した場合は、ｓｅｌｅｃｔタグの内容がＳＱＬ文となり、＃１、＃２ｂと連結してＳＱＬＩＤを生成した場合は、ｉｎｓｅｒｔタグの内容がＳＱＬ文となる。
【００５２】
図３のＳＱＬ−Ｍａｐ２３０の例と図１３のＳＱＬＩＤ向け連結表２０６の例では、図５のＳＱＬＩＤとＳＱＬ文のマップデータ２０４に記載の通り、ＳＱＬＩＤ２０４１が“ｃｏｍ．ｈｉｔａｃｈｉ．ｕｓｅｒ．ｔｅｓｔ”と、ＳＱＬ文２０４２が“ＳＥＬＥＣＴ  ｉｄ，  ｎａｍｅ  ＦＲＯＭ  ｕｓｅｒ”となる。
【００５３】
ステップ８０２では、ＤＡＯ検索式生成部２０２が、ステップ７０１で取得したソースコード２３１を解析して、ＤＡＯクラスのメソッド名と定義を抽出する。そして、ＤＡＯ検索式生成部２０２は、抽出したＤＡＯメソッドの定義部分を解析して、ＳＱＬＩＤを検索するためのＤＡＯ検索式を生成する。さらに、ＤＡＯ検索式生成部２０２は、ＤＡＯメソッド名と合わせて、生成した該ＤＡＯ検索式をＤＡＯメソッドとＳＱＬＩＤの対応表２０５へ格納する。
【００５４】
図４に示すＤＡＯメソッド“ｔｅｓｔ（）”の例について、ＤＡＯ検索式生成方法を説明する。ＤＡＯ検索式生成部２０２は、ステップ８０１にて生成したＳＱＬＩＤとＳＱＬ文のマップデータ２０４から、ＳＱＬＩＤのリストを取得出来るが、これらＳＱＬＩＤのいずれかに部分一致または全体一致する引数で関数呼び出しが行われている部分（関数呼び出し部）をＤＡＯ検索式生成箇所として抽出する。
【００５５】
すなわち、ＤＡＯ検索式生成部２０２は、ＤＡＯメソッドの定義内の関数呼び出し部で、呼び出し関数の引数がＳＱＬＩＤとＳＱＬ文のマップデータのＳＱＬＩＤのいずれかと部分一致している場合に、呼び出し関数の引数部分をＤＡＯ検索式の生成対象とする。
【００５６】
本実施例では、図４に示したＤＡＯメソッド“ｔｅｓｔ（）”内で、“ｇｅｔＳｑｌＳｅｓｓｉｏｎ（）．ｓｅｌｅｃｔＯｎｅ（）”という関数呼び出しが行われており、該関数の引数として、“ｃｏｍ．ｈｉｔａｃｈｉ．”＋  ｅｎｔｉｔｙ．ｇｅｔＴａｂｌｅＮａｍｅ（）  ＋  “．ｔｅｓｔ”が与えられている。
【００５７】
この引数の“ｃｏｍ．ｈｉｔａｃｈｉ．”や“．ｔｅｓｔ”は、ＳＱＬＩＤである“ｃｏｍ．ｈｉｔａｃｈｉ．ｕｓｅｒ．ｔｅｓｔ”と部分一致しているため、ここはＤＡＯ検索式生成箇所となる。ＤＡＯ検索式は、この引数部分から生成する。本実施例では、“ｃｏｍ．ｈｉｔａｃｈｉ．”＋  ｅｎｔｉｔｙ．ｇｅｔＴａｂｌｅＮａｍｅ（）  ＋  “．ｔｅｓｔ”であり、“ｃｏｍ．ｈｉｔａｃｈｉ．”と“．ｔｅｓｔ”は良いが、“ｅｎｔｉｔｙ．ｇｅｔＴａｂｌｅＮａｍｅ（）”の部分に入る文字列が静的解析では分からない事がある。
【００５８】
そのため、“ｅｎｔｉｔｙ．ｇｅｔＴａｂｌｅＮａｍｅ（）”を“．＊”という正規表現に置き換え、ＤＡＯ検索式として“ｃｏｍ￥．ｈｉｔａｃｈｉ￥．．＊￥．ｔｅｓｔ”とする。この際、“．”という文字列はエスケープ処理を行う。
【００５９】
ステップ８０３では、ＳＱＬ文候補抽出部２０３が、ＳＱＬＩＤとＳＱＬ文のマップデータ２０４に格納されたＳＱＬＩＤに対して、ＤＡＯメソッドとＳＱＬＩＤの対応表２０５に格納されたＤＡＯ検索式を用いて、ＳＱＬ文の候補を抽出する。抽出したＳＱＬ文の候補は、ＤＡＯメソッドとＳＱＬＩＤの対応表２０５に格納する。この際、ＳＱＬ文の候補に対する選択回数として０を合わせて格納する。
【００６０】
ステップ８０４では、解析及び可視化実行部２００が、次のＤＡＯメソッドが存在するか否かを判定する。判定が真であれば、ステップ８０２へ進む。判定が偽であれば、ステップ８０５へ進む。ステップ８０５では、解析及び可視化実行部２００が、ＤＡＯメソッドに対応するＳＱＬ文の抽出を終了する。
【００６１】
図９は、情報処理装置１００が、指定されたＳＱＬ文をシーケンス図上にオーバーレイ表示する処理の一例を示すフローチャートである。情報処理装置１００は、ソースコードのユーザ選択メソッドをシーケンス図として可視化した後に、シーケンス図上で利用されるＤＡＯメソッドのＳＱＬ文をユーザが選択し、該ＳＱＬ文をシーケンス図上にオーバーレイ表示する。尚、本フローチャートは、図７のステップ７０６でシーケンス図の生成が完了した後に、ユーザが任意のタイミングで行う事を想定している。
【００６２】
ステップ９００では、解析及び可視化実行部２００が、ＤＡＯメソッドに対応するＳＱＬ文をシーケンス図上にオーバーレイ表示するフローチャートを開始する。尚、本実施例では、本フローチャート開始のトリガーイベントとして、「ユーザがＤＡＯメソッド上をマウスオーバーした時」を想定しているが、これに限定されるものではなく、ＤＡＯメソッドを表すオブジェクトをクリックした時等、所定のイベントであれば良い。
【００６３】
ステップ９０１では、解析及び可視化実行部２００が、ステップ９００でユーザがマウスオーバーしたＤＡＯメソッドに対応するＳＱＬ文を、ユーザが候補から選び直すか否か、入力を受け付ける。判定が真であれば、ステップ９０３へ進む。判定が偽であれば、ステップ９０２へ進む。尚、本処理は、ユーザクリックなどを契機として任意のタイミングで実施出来るようにしても構わない。
【００６４】
ステップ９０２では、解析及び可視化実行部２００が、ステップ９００でユーザがマウスオーバーしたＤＡＯメソッドに対応するＳＱＬ文を、ＤＡＯメソッドとＳＱＬＩＤの対応表２０５に格納された、該ＤＡＯメソッドに対するＳＱＬ文候補の中からユーザが既にＳＱＬ文を選んでいるか否かを判定する。該判定方法として、本実施例では、ＤＡＯメソッドとＳＱＬＩＤの対応表２０５に格納されている該ＤＡＯメソッドに対するＳＱＬＩＤ２０５３で選択回数２０５４が１以上のものがあるか否か、または該ＤＡＯメソッドに対するＳＱＬＩＤ２０５３の候補が単数か否かで判定する。
【００６５】
図６の例では、ＤＡＯメソッド名２０５１の“ｔｅｓｔ（）”上をユーザがマウスオーバーしている時、“ｔｅｓｔ（）”のＳＱＬＩＤ２０５３の候補である“ｃｏｍ．ｈｉｔａｃｈｉ．ｕｓｅｒ．ｔｅｓｔ”の選択回数は５、また“ｃｏｍ．ｈｉｔａｃｈｉ．ｕｓｅｒ２．ｔｅｓｔ”の選択回数は２なので、既に選択されていると判定する。判定が真であれば、ステップ９０４へ進む。判定が偽であれば、ステップ９０３へ進む。
【００６６】
ステップ９０３では解析及び可視化実行部２００が、シーケンス図上に、該ＤＡＯメソッドに対応するＳＱＬ文の候補を表示し、表示されたＳＱＬ文候補の中からユーザが一つを選択するのを受け付ける。ユーザがＳＱＬ文を選択すると、ステップ９０８に進む。
【００６７】
ステップ９０８では、解析及び可視化実行部２００が、シーケンス図上に、選択されたＳＱＬ文をＤＡＯメソッド上にオーバーレイ表示する。また、解析及び可視化実行部２００は、ＤＡＯメソッドとＳＱＬＩＤの対応表２０５のうち該選択されたＳＱＬ文の選択回数２０５４を１増やす。
【００６８】
図１１は、ＳＱＬ文の候補をシーケンス図上に表示する例を示す図である。ポップアップウィンドウ２５５内に、ＤＡＯのメソッド“ｔｅｓｔ（）”のＳＱＬ文の候補が二つ表示され、ユーザが＃１の候補を選択してＯＫボタンを押せば、＃１のＳＱＬ文が選択される。
【００６９】
ステップ９０４では、解析及び可視化実行部２００が、ユーザが選択したＳＱＬ文を、マウスオーバーしているＤＡＯメソッド上にオーバーレイ表示する。
【００７０】
図１２は、ユーザが選択したＳＱＬ文がシーケンス図上でオーバーレイ表示されている例を示す図である。ステップ９０２において、図１１で、ＳＱＬ文候補のうち＃１がユーザに選択された例を挙げたが、図１２では当該選択されたＳＱＬ文２５６がＤＡＯメソッド上にオーバーレイ表示されている。
【００７１】
図９のステップ９０２の判定で真となりステップ９０４へ進んだ場合にも、ＤＡＯメソッドとＳＱＬＩＤの対応表２０５に格納されている該ＤＡＯメソッドに対するＳＱＬの文候補のうち選択回数２０５４が最も多いものがオーバーレイ表示される。また、ＳＱＬ文候補が単数の場合は、該ＳＱＬ文の候補がオーバーレイ表示される。
【００７２】
ステップ９０５では、ＤＡＯ検索式生成部２０２が、ＤＡＯメソッドとＳＱＬＩＤの対応表２０５をアップデートするか否かを判定する。該判定方法として、オーバーレイ表示しているＳＱＬ文のＳＱＬＩＤとマウスオーバーしたＤＡＯメソッドのＤＡＯ検索式とを比較し、ＤＡＯ検索式に“．＊”が含まれる場合に、「＊」（ワイルドカード）の部分をＳＱＬＩＤが対応する部分に置き換える。
【００７３】
そして、ＤＡＯ検索式生成部２０２は、置き換えた部分の文字列（以後、置換文字列Ａ）が、ＤＡＯ検索式アップデート表２０７に格納された項目２０７１により静的解析で取得可能か否かをチェックし、取得可能であった場合にＤＡＯ検索式アップデート表２０７の回数２０７２に１（または所定値）を加算し、当該回数２０７２が予めシステムで設定した、またはユーザが入力した閾値２０７３以上か否かで判定する。
【００７４】
図６を用いて説明すると、“ｃｏｍ￥．ｈｉｔａｃｈｉ￥．．＊￥．ｔｅｓｔ”というＤＡＯ検索式２０５２に対して、図１１の画面でオーバーレイ表示されるＳＱＬ文のＳＱＬＩＤは“ｃｏｍ．ｈｉｔａｃｈｉ．ｕｓｅｒ．ｔｅｓｔ”である。このため、上述の置換文字列Ａは、“ｕｓｅｒ”となる。
【００７５】
ステップ９０５では、この“ｕｓｅｒ”が静的解析で取得可能か否を判定するわけである。ここで、置換文字列Ａが静的解析で取得可能か否かの判定では、ＤＡＯ検索式アップデート表２０７を利用する。
【００７６】
ＤＡＯ検索式アップデート表２０７の項目２０７１は「コンストラクタ」と「セッターメソッド」が格納されている。このため、上述の“．＊”に対応するＤＡＯメソッドの定義箇所が、ＤＡＯメソッドの引数で与えられたオブジェクトがゲッターメソッドの場合（図４の例では、“ｅｎｔｉｔｙ．ｇｅｔＴａｂｌｅＮａｍｅ（）”）、ＤＡＯ検索式生成部２０２が、引数のオブジェクト生成部を解析して、コンストラクタ部で置換文字列Ａが利用されているか、またはオブジェクトのメソッド（セッターメソッドなど）を利用して置換文字列が利用されているか、をチェックする。
【００７７】
ＤＡＯ検索式生成部２０２は、上述の“ｕｓｅｒ”がどちらかで利用されていれば、ＤＡＯ検索式アップデート表２０７の対応する項目２０７１の回数２０７２に１を加算する。図１４では、項目２０７１＝“コンストラクタ”で置換文字列“ｕｓｅｒ”が利用されていたものと想定し、回数２０７２に１が加算されて３となっている。更に、閾値が３のためＤＡＯ検索式のアップデートが実施されると判定され、ステップ９０６へ進む。
【００７８】
ステップ９０６では、ＤＡＯ検索式生成部２０２が、ステップ９０５で閾値２０７３を超えた項目２０７１の解析を“．＊”という正規表現を含む全ＤＡＯメソッドに対して行い、ＤＡＯ検索式を更新する。
【００７９】
本実施例では、ステップ９０５にて、図１４のように項目２０７１＝“コンストラクタ”の回数２０７２が閾値２０７３を超えたため、この解析を全てのＤＡＯメソッドに対して行い、ＤＡＯ検索式を更新する。
【００８０】
換言すれば、ＤＡＯ検索式生成部２０２は、ＳＱＬ文の候補の中からユーザの選択を受け付けて、選択されたＳＱＬ文のＳＱＬＩＤとＤＡＯ検索式の置換文字列Ａの一部または全てが、所定の条件を満たしている場合に、ＤＡＯ検索式アップデート表２０７の項目２０７１の回数２０７２に１を加算し、当該項目２０７１の回数２０７２が予め設定された閾値２０７３を超えた場合に、ＤＡＯ検索式のアップデートを行う。なお、本実施例では、所定の条件として、対応するＤＡＯメソッドの引数がオブジェクトである場合に、当該オブジェクトのゲッターメソッドで取得可能な文字列と置換文字列が一致していれば、当該オブジェクトのコンストラクタまたはセッターメソッドを解析して当該文字列を利用することを示す。
【００８１】
ＤＡＯ検索式の更新後、ＳＱＬＩＤとＳＱＬ文のマップデータ２０４に格納されたＳＱＬＩＤ２０４１に対して、ＤＡＯメソッドとＳＱＬＩＤの対応表２０５に格納されたＤＡＯ検索式２０５２を用いて、ＳＱＬ文の候補を抽出する。抽出したＳＱＬ文の候補は、ＤＡＯメソッドとＳＱＬＩＤの対応表２０５に格納する。
【００８２】
ステップ９０７では解析及び可視化実行部２００が、ＤＡＯメソッドに対応するＳＱＬ文をシーケンス図上にオーバーレイ表示するフローチャートを終了する。
【００８３】
以上のように、本実施例によれば、上述した特許文献１に存在した課題、すなわち静的解析の精度の問題により、ＳＱＬ文を構成する変数が取り得る値の集合の生成漏れが発生し、引いてはＤＡＯメソッドに対応するＳＱＬ文の抽出漏れが発生する事があった、という課題を解決する。
【００８４】
また、抽出したＳＱＬ文候補の中からユーザが選択したＳＱＬ文を、優先的に可視化時に利用する事で、３層アーキテクチャのＷｅｂアプリケーションにおけるプログラムの動作不良や脆弱性等の原因箇所の特定を容易に行うことが可能となる。
【００８５】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
【００８６】
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【００８７】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【００８８】
１００  情報処理装置
１０１  中央処理装置
１０４  主記憶装置
２００  解析及び可視化実行部
２０１  検索対象整形マップ生成部
２０２  ＤＡＯ検索式生成部
２０３  ＳＱＬ文候補抽出部
２０４  ＳＱＬＩＤとＳＱＬ文のマップデータ
２０５  ＤＡＯメソッドとＳＱＬＩＤの対応表
２０６  ＳＱＬＩＤ向け連結表
２０７  ＤＡＯ検索式アップデート表
２３０  ＳＱＬ−Ｍａｐ
【図１】
2019074966.tif 000003
【図２】
2019074966.tif 000004
【図３】
2019074966.tif 000005
【図４】
2019074966.tif 000006
【図５】
2019074966.tif 000007
【図６】
2019074966.tif 000008
【図７】
2019074966.tif 000009
【図８】
2019074966.tif 000010
【図９】
2019074966.tif 000011
【図１０】
2019074966.tif 000012
【図１１】
2019074966.tif 000013
【図１２】
2019074966.tif 000014
【図１３】
2019074966.tif 000015
【図１４】
2019074966.tif 000016