JP2019074966A - Sql文抽出装置、sql文抽出方法及びプログラム - Google Patents

Sql文抽出装置、sql文抽出方法及びプログラム Download PDF

Info

Publication number
JP2019074966A
JP2019074966A JP2017201233A JP2017201233A JP2019074966A JP 2019074966 A JP2019074966 A JP 2019074966A JP 2017201233 A JP2017201233 A JP 2017201233A JP 2017201233 A JP2017201233 A JP 2017201233A JP 2019074966 A JP2019074966 A JP 2019074966A
Authority
JP
Japan
Prior art keywords
dao
sql
sql statement
search expression
source code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2017201233A
Other languages
English (en)
Other versions
JP6866270B2 (ja
Inventor
玄太 是木
Genta Koreki
玄太 是木
前岡 淳
Atsushi Maeoka
淳 前岡
秀行 鹿糠
Hideyuki Kanuka
秀行 鹿糠
仁 芳ケ迫
Hitoshi Yoshigasako
仁 芳ケ迫
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Systems Ltd
Original Assignee
Hitachi Systems Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Systems Ltd filed Critical Hitachi Systems Ltd
Priority to JP2017201233A priority Critical patent/JP6866270B2/ja
Publication of JP2019074966A publication Critical patent/JP2019074966A/ja
Application granted granted Critical
Publication of JP6866270B2 publication Critical patent/JP6866270B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

【課題】解析精度が低い場合であっても、DAOメソッドに対応するSQL文を抽出する。【解決手段】プロセッサとメモリを有してソースコードを静的解析するSQL文抽出装置は、ソースコードを静的解析してDAOメソッドに対応するSQL文を抽出する解析及び可視化部を有し、前記解析及び可視化部は、予め設定されたSQLマップ及びSQLID向け連絡情報を取得して、当該SQLマップを解析し、前記SQLID向け連絡情報からSQLIDを生成し、前記SQLIDとSQL文のマップデータを生成する検索対象整形マップ生成部と、前記ソースコードを解析してDAOメソッドの定義を抽出し、当該DAOメソッドの定義からDAO検索式を生成するDAO検索式生成部と、前記SQLIDとSQL文のマップデータと前記DAO検索式を用いて前記DAOメソッドに対応するSQL文の候補を抽出するSQL文候補抽出部と、を有する。【選択図】図2

Description

本発明は、ソースコードを静的に解析し、DAO(Data Access Object)メソッドに対応するSQL文を抽出する技術に関する。
3層アーキテクチャのWebアプリケーションでは、プログラムの動作不良や脆弱性等の原因箇所の特定を、静的解析で行う事が困難である。中でも、データアクセスを伴うプログラムでは、SQL文がプログラムの実行によって動的に構成される事があるため、DAOメソッドに対応するSQL文について静的解析を行う事は難しい。
特許文献1には、ソースコードを静的に解析(APフロー解析とSQLフロー解析)して、SQL文を構成する変数が取り得る値の集合を生成する技術が開示され、APフローに対応するSQL文を挙げる方法が提案されている。
特開2011−253363号公報
しかしながら、上記特許文献1の方法は、静的解析の精度の問題により、SQL文を構成する変数が取り得る値の集合の生成漏れが発生する事があり、引いてはAPフローとしてのDAOメソッドに対応するSQL文の抽出漏れが発生する事があった。
そこで本発明は、上記問題点に鑑みてなされたもので、解析精度が低い場合であっても、DAOメソッドに対応するSQL文を抽出することを目的とする。
本発明は、プロセッサとメモリを有してソースコードを静的解析するSQL文抽出装置であって、ソースコードを静的解析してDAOメソッドに対応するSQL文を抽出する解析及び可視化部を有し、前記解析及び可視化部は、予め設定されたSQLマップ及びSQLID向け連絡情報を取得して、当該SQLマップを解析し、前記SQLID向け連絡情報からSQLIDを生成し、前記SQLIDとSQL文のマップデータを生成する検索対象整形マップ生成部と、前記ソースコードを解析してDAOメソッドの定義を抽出し、当該DAOメソッドの定義からDAO検索式を生成するDAO検索式生成部と、前記SQLIDとSQL文のマップデータと前記DAO検索式を用いて前記DAOメソッドに対応するSQL文の候補を抽出するSQL文候補抽出部と、を有する。
本発明によれば、たとえ解析精度が低い場合であっても、DAOメソッドに対応するSQL文を抽出する事が出来る。
本発明の実施例を示し、計算機システムのハードウェア構成の一例を示すブロック図である。 本発明の実施例を示し、計算機システムの機能の一例を示すブロック図である。 本発明の実施例を示し、SQL−Mapの一例を示す図である。 本発明の実施例を示し、DAOメソッドの一例を示す図である。 本発明の実施例を示し、SQLIDとSQL文のマップデータの一例を示す図である。 本発明の実施例を示し、DAOメソッドとSQLIDの対応表の一例を示す図である。 本発明の実施例を示し、ソースコードを解析して、DAOメソッドに対応するSQL文を抽出し、抽出したSQLを可視化する処理の一例を示すフローチャートである。 本発明の実施例を示し、ソースコードを解析して、DAOメソッドに対応するSQL文を抽出し、抽出したSQLを可視化する処理の一例を示すフローチャートである。 本発明の実施例を示し、ソースコードのユーザ選択メソッドをシーケンス図として可視化した後に、選択されたSQL文をシーケンス図上に表示する処理の一例を示すフローチャートである。 本発明の実施例を示し、生成されたシーケンス図の一例を示す図である。 本発明の実施例を示し、SQL文の候補がシーケンス図上に表された例を示す図である。 本発明の実施例を示し、ユーザに選択されたSQL文がシーケンス図上でオーバーレイ表示された例を示す図である。 本発明の実施例を示し、SQLID向け連結表の一例を示す図である。 本発明の実施例を示し、DAO検索式アップデート表の一例を示すである。
以下、本発明によるSQL文抽出装置、SQL文抽出方法、及びSQL文抽出プログラムに関する一実施形態を、図面を用いて詳細に説明する。
本実施例では、ソースコードを解析して、DAO(Data Access Object)メソッドに対応するSQL文を抽出し、抽出したSQL文を、同じくソース解析を行い生成したシーケンス図上に可視化表示する方法の一例を記す。
尚、本実施例では、アプリケーションフレームワークとしてSpringフレームワーク(登録商標)と、またO/Rマッピング(Object-relational mapping)フレームワークとしてmyBatis(登録商標)の利用を意識して記述しているが、本発明は特定のフレームワークや言語に依存するものではない。
また、本実施例ではシーケンス図を生成し、シーケンス図上にSQL文をオーバーレイ表示する例を挙げるが、出力する図はシーケンス図に限定される事はなく、シーケンス図、コミュニケーション図、クラス図、その他UML図、その他オリジナル図等何であってもよい。
図1は、本発明の実施例に係る情報処理装置100のハードウェア構成の一例を示すブロック図である。情報処理装置100のハードウェアとして、中央処理装置101と、キーボードやマウス等の入力装置102と、二次記憶装置103と、主記憶装置104と、ディスプレイ等の表示装置105、及び通信装置107を有する。
尚、各装置は、バス106によって接続され、各装置間で相互にデータの送受信が可能である。通信装置107はネットワーク120に接続される。ネットワーク120には、情報処理装置やネットワークストレージといった、データを保存する事が可能な情報装置A110が接続されている。
図2は、本発明の実施例に係る情報処理装置100と、情報装置A110の機能の一例を示すブロック図である。尚、本実施例においては、情報処理装置100の機能の全てが中央処理装置101によって実行または操作されるソフトウェアプログラムやデータであるものとして説明するが、一部または全ては、ハードウェアとして実現されても良い。
また、本来は、これらの機能に加え、各機能の起動や管理等を行うOS(Operating System)や制御プログラム等が存在する。本実施例では、これらの機能の連携処理を適宜説明することとし、OSや制御プログラムがここで適宜説明された連携処理に必要となる機能ブロックの起動や実行管理を行う事は自明であるので、これらのOSや制御プログラムについては説明及び記載を省略する。
本発明の実施例に係る情報処理装置100は、機能のブロックとして、図2に示すように構成される。解析及び可視化実行部200が、検索対象整形マップ生成部201と、DAO検索式生成部202と、SQL文候補抽出部203とを含み、SQLIDとSQL文のマップデータ204と、DAOメソッドとSQLIDの対応表205と、SQLID向け連結表206、及びDAO検索式アップデート表207を生成又は参照する。
情報装置A110は、XML形式のSQL−Map230、及びソースコード(Java(登録商標))231を有する。尚、SQL−Map230、及びソースコード231は必ずしも上述の装置にある必要はなく、情報処理装置100、及び情報装置A110のいずれに格納されていても良い。
検索対象整形マップ生成部201と、DAO検索式生成部202と、SQL文候補抽出部203を含む解析及び可視化実行部200の各機能部は、プログラムとして主記憶装置104にロードされ、中央処理装置101によって実行される。
中央処理装置101は、各機能部のプログラムに従って処理することによって、所定の機能を提供する機能部として稼働する。例えば、中央処理装置101は、解析及び可視化プログラムに従って処理することで解析及び可視化実行部200として機能する。他のプログラムについても同様である。さらに、中央処理装置101は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
情報処理装置100の各機能を実現するプログラム、テーブル等の情報は、二次記憶装置103や不揮発性半導体メモリ、ハードディスクドライブ、SSD(Solid State Drive)等の記憶デバイス、または、ICカード、SDカード、DVD等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
上記プログラムを実行することで、情報処理装置100はSQL文抽出装置として機能することができる。また、上記SQLID向け連結表206及びDAO検索式アップデート表207と、QL−Map230及びソースコード231は、予め設定された情報である。
図3は、SQL−Map230の一例を示す図である。本実施例では、SQL−Map230はXMLで記述した例を示す。SQL−Map230には、namespace属性“com.hitachi.user”を含むmapperタグ要素が存在し、その子要素として、“SELECT id, name FROM user”という文字列を内容として含む、id属性“test”のselectタグ要素が存在している。
情報処理装置100はSQL−Map230の情報を利用して、SQLIDとSQL文のマップデータ204を生成するが、その生成方法に関しては後述する。
図4は、ソースコード231のDAOに関する記述例を示す図である。ソースコード231には、Daoクラスのメソッドとして“test“メソッドが記載されている。DAOクラスのメソッドを解析して、DAO検索式を生成し、DAOメソッドとSQLIDの対応表205へ格納するが、その方法に関しては後述する。
図5は、SQLIDとSQL文のマップデータ204の一例を示す図である。SQLIDとSQL文のマップデータ204には、SQLID2041、及び該SQLIDに対応するSQL文2042を格納する。本実施例では、SQLID2041の“com.hitachi.user.test”に対応するSQL文2042として、“SELECT id, name FROM user”という文字列が格納されている。本SQLIDとSQL文のマップデータ204の生成方法は後述する。
図6は、DAOメソッドとSQLIDの対応表205の一例を示す図である。DAOメソッドとSQLIDの対応表205には、DAOメソッド名2051と、DAO検索式2052と、SQLID2053と、及び選択回数2054をひとつのエントリに格納する。
本実施例では、DAOメソッド名2051として“test()”が格納され、DAO検索式2052として“com¥.hitachi¥..*.test”が格納され、SQLID2053として、“com.hitachi.user.test”と“com.hitachi.user2.test”の二つが格納され、選択回数2054として、“com.hitachi.user.test”が5、“com.hitachi.user2.test”が2として格納されている。本DAOメソッドとSQLIDの対応表205の生成方法は後述する。
図13は、SQLID向け連結表206の一例を示す図である。SQLID向け連結表206は、SQLIDとSQL文のマップデータ204を生成するにあたり、SQL−Map230の、どの要素をどの順番で連結してSQLIDを生成し、どの部分がSQL文にあたるかを予め設定している。
SQLID向け連結表206は、番号#2061と、タグと属性を含むSQLID2062と、SQL文2063とをひとつのエントリに含む。本実施例では、#1のタグ“mapper”の属性“namespace”の値と、#2のタグ“select”の属性“id”の値、またはタグ“insert”の属性“id”の値を、この順番で連結して、SQLIDを生成する。
生成した該SQLIDに対応するSQL文は、SQLID向け連結表206のSQL文の項目に○が付いているところの内容がそれに該当する。例えば、#1、#2aと連結してSQLIDを生成した場合は、selectタグの内容がSQL文となり、#1、#2bと連結してSQLIDを生成した場合は、insertタグの内容がSQL文となる。
図14は、DAO検索式アップデート表207の一例を示す図である。DAO検索式アップデート表207は、項目2071と、回数2072と、閾値2073と、実施2074とをひとつのエントリに含む。
DAO検索式アップデート表207には、DAO検索式のアップデートにあたりどのような項目2071を解析するか、その項目2071で正しく解析出来た回数2072と、項目の閾値2073、及びアップデートを実施したか否か(2074)を格納する。詳細については後述するが、本実施例では、項目2071で正しく解析出来た回数2072が項目の閾値2073以上の場合に、DAO検索式をアップデートするものと判断する。
図7は、情報処理装置100で行われる処理の一例を示すフローチャートである。情報処理装置100の解析及び可視化実行部200は、ソースコード231を解析して、DAOメソッドに対応するSQL文を抽出し、シーケンス図を生成して表示装置105に出力する。この処理は、情報処理装置100の利用者などが解析及び可視化実行部200を実行させることで開始される。
まず、ステップ700では、解析及び可視化実行部200が、DAOメソッドに対応するSQL文の抽出、及びシーケンス図の生成と表示を開始する。
ステップ701では、解析及び可視化実行部200が、SQL−Map230及びソースコード231を情報装置A110から取得する。
ステップ702では、解析及び可視化実行部200が、DAOメソッドとSQL文の対応付けが完了しているか否かを判定する。判定が真であれば、ステップ704へ進む。判定が偽であれば、ステップ703へ進む。
尚、該判定方法として、本実施例では、図5と図6で示した、SQLID2041とSQL文のマップデータ204、及びDAOメソッドとSQLIDの対応表205が生成されているか否かで判定を行うものとする。しかし、判定方法はこれに限定されるものではなく、例えば、ステップ703の実施後にソース修正が発生している場合は対応付けが完了していないものとする、など複数考えられる。
ステップ703では、解析及び可視化実行部200が、DAOメソッドとSQL文の対応付けを行う。尚、本処理は、図8を用いて後に詳述する。
ステップ704では、解析及び可視化実行部200が、処理の対象となるメソッド名の入力をユーザから受け付ける。勿論、ソースコードに含まれるメソッド名のリストをソースコード解析の際などに予め生成しておき、該リストの中からユーザが選択する方法であっても良い。
ステップ705では、解析及び可視化実行部200が、ステップ704でユーザから受け付けたメソッドについて呼出関係を解析し、解析結果に基づいてシーケンス図を生成する。先にも述べたように、本実施例ではシーケンス図として可視化するが、可視化図はシーケンス図に限定される事はなく、シーケンス図、コミュニケーション図、クラス図、その他UML図、その他オリジナル図等何であってもよい。
図10は、シーケンス図による可視化の一例を示す図である。図10は、解析及び可視化実行部200が生成したシーケンス図を、表示装置105に出力した一例を示す。
図10の例では、呼出関係の解析結果には、ControllerClass(251)と、ServiceClass(252)と、Daoクラス(253)と、DB(254)という4つのライフラインが存在する。そして、Controllerクラス(251)の“entry()”メソッドと、Serviceクラス(252)の“serv_a()”メソッドと、Daoクラス(253)の“test()”メソッドの順番にメソッドが呼ばれている例を示す。
図7に戻って、ステップ706では、解析及び可視化実行部200が、DAOメソッドに対応するSQL文の抽出、及びシーケンス図の生成後に表示を終了する。
尚、上記処理の順番は、シーケンス図を生成した後にDAOメソッドに対応するSQL文を抽出してもよく、つまり上記ステップ704とステップ705をステップ702に先駆けて実施する構成であっても良い。
図8は、情報処理装置100で、ソースコードを解析して、DAOメソッドに対応するSQL文を抽出する処理の一例を示すフローチャートである。本フローチャートは、図7のステップ703で行われる処理を詳述したものである。
ステップ800では、解析及び可視化実行部200が、DAOメソッドに対応するSQL文の抽出を開始する。
ステップ801では、検索対象整形マップ生成部201が、ステップ701で取得したSQL−Map230を解析して、予め定義されたSQLID向け連結表206に従って、SQLIDとSQL文のマップデータ204を生成する。
図13に示すSQLID向け連結表206の例では、検索対象整形マップ生成部201が、#1と#2の順にタグの属性値を連結してSQLID2062を生成する。つまり、#1のタグ“mapper”の属性“namespace”の値と、#2のタグの“select”の属性“id”の値またはタグ“insert”の属性“id”の値を、この順番で連結して、SQLID2062を生成する。
検索対象整形マップ生成部201が生成した該SQLIDに対応するSQL文2042は、SQLID向け連結表206のSQL文2063の項目に○が付いているところの内容に相当する。例えば、#1、#2aと連結してSQLIDを生成した場合は、selectタグの内容がSQL文となり、#1、#2bと連結してSQLIDを生成した場合は、insertタグの内容がSQL文となる。
図3のSQL−Map230の例と図13のSQLID向け連結表206の例では、図5のSQLIDとSQL文のマップデータ204に記載の通り、SQLID2041が“com.hitachi.user.test”と、SQL文2042が“SELECT id, name FROM user”となる。
ステップ802では、DAO検索式生成部202が、ステップ701で取得したソースコード231を解析して、DAOクラスのメソッド名と定義を抽出する。そして、DAO検索式生成部202は、抽出したDAOメソッドの定義部分を解析して、SQLIDを検索するためのDAO検索式を生成する。さらに、DAO検索式生成部202は、DAOメソッド名と合わせて、生成した該DAO検索式をDAOメソッドとSQLIDの対応表205へ格納する。
図4に示すDAOメソッド“test()”の例について、DAO検索式生成方法を説明する。DAO検索式生成部202は、ステップ801にて生成したSQLIDとSQL文のマップデータ204から、SQLIDのリストを取得出来るが、これらSQLIDのいずれかに部分一致または全体一致する引数で関数呼び出しが行われている部分(関数呼び出し部)をDAO検索式生成箇所として抽出する。
すなわち、DAO検索式生成部202は、DAOメソッドの定義内の関数呼び出し部で、呼び出し関数の引数がSQLIDとSQL文のマップデータのSQLIDのいずれかと部分一致している場合に、呼び出し関数の引数部分をDAO検索式の生成対象とする。
本実施例では、図4に示したDAOメソッド“test()”内で、“getSqlSession().selectOne()”という関数呼び出しが行われており、該関数の引数として、“com.hitachi.”+ entity.getTableName() + “.test”が与えられている。
この引数の“com.hitachi.”や“.test”は、SQLIDである“com.hitachi.user.test”と部分一致しているため、ここはDAO検索式生成箇所となる。DAO検索式は、この引数部分から生成する。本実施例では、“com.hitachi.”+ entity.getTableName() + “.test”であり、“com.hitachi.”と“.test”は良いが、“entity.getTableName()”の部分に入る文字列が静的解析では分からない事がある。
そのため、“entity.getTableName()”を“.*”という正規表現に置き換え、DAO検索式として“com¥.hitachi¥..*¥.test”とする。この際、“.”という文字列はエスケープ処理を行う。
ステップ803では、SQL文候補抽出部203が、SQLIDとSQL文のマップデータ204に格納されたSQLIDに対して、DAOメソッドとSQLIDの対応表205に格納されたDAO検索式を用いて、SQL文の候補を抽出する。抽出したSQL文の候補は、DAOメソッドとSQLIDの対応表205に格納する。この際、SQL文の候補に対する選択回数として0を合わせて格納する。
ステップ804では、解析及び可視化実行部200が、次のDAOメソッドが存在するか否かを判定する。判定が真であれば、ステップ802へ進む。判定が偽であれば、ステップ805へ進む。ステップ805では、解析及び可視化実行部200が、DAOメソッドに対応するSQL文の抽出を終了する。
図9は、情報処理装置100が、指定されたSQL文をシーケンス図上にオーバーレイ表示する処理の一例を示すフローチャートである。情報処理装置100は、ソースコードのユーザ選択メソッドをシーケンス図として可視化した後に、シーケンス図上で利用されるDAOメソッドのSQL文をユーザが選択し、該SQL文をシーケンス図上にオーバーレイ表示する。尚、本フローチャートは、図7のステップ706でシーケンス図の生成が完了した後に、ユーザが任意のタイミングで行う事を想定している。
ステップ900では、解析及び可視化実行部200が、DAOメソッドに対応するSQL文をシーケンス図上にオーバーレイ表示するフローチャートを開始する。尚、本実施例では、本フローチャート開始のトリガーイベントとして、「ユーザがDAOメソッド上をマウスオーバーした時」を想定しているが、これに限定されるものではなく、DAOメソッドを表すオブジェクトをクリックした時等、所定のイベントであれば良い。
ステップ901では、解析及び可視化実行部200が、ステップ900でユーザがマウスオーバーしたDAOメソッドに対応するSQL文を、ユーザが候補から選び直すか否か、入力を受け付ける。判定が真であれば、ステップ903へ進む。判定が偽であれば、ステップ902へ進む。尚、本処理は、ユーザクリックなどを契機として任意のタイミングで実施出来るようにしても構わない。
ステップ902では、解析及び可視化実行部200が、ステップ900でユーザがマウスオーバーしたDAOメソッドに対応するSQL文を、DAOメソッドとSQLIDの対応表205に格納された、該DAOメソッドに対するSQL文候補の中からユーザが既にSQL文を選んでいるか否かを判定する。該判定方法として、本実施例では、DAOメソッドとSQLIDの対応表205に格納されている該DAOメソッドに対するSQLID2053で選択回数2054が1以上のものがあるか否か、または該DAOメソッドに対するSQLID2053の候補が単数か否かで判定する。
図6の例では、DAOメソッド名2051の“test()”上をユーザがマウスオーバーしている時、“test()”のSQLID2053の候補である“com.hitachi.user.test”の選択回数は5、また“com.hitachi.user2.test”の選択回数は2なので、既に選択されていると判定する。判定が真であれば、ステップ904へ進む。判定が偽であれば、ステップ903へ進む。
ステップ903では解析及び可視化実行部200が、シーケンス図上に、該DAOメソッドに対応するSQL文の候補を表示し、表示されたSQL文候補の中からユーザが一つを選択するのを受け付ける。ユーザがSQL文を選択すると、ステップ908に進む。
ステップ908では、解析及び可視化実行部200が、シーケンス図上に、選択されたSQL文をDAOメソッド上にオーバーレイ表示する。また、解析及び可視化実行部200は、DAOメソッドとSQLIDの対応表205のうち該選択されたSQL文の選択回数2054を1増やす。
図11は、SQL文の候補をシーケンス図上に表示する例を示す図である。ポップアップウィンドウ255内に、DAOのメソッド“test()”のSQL文の候補が二つ表示され、ユーザが#1の候補を選択してOKボタンを押せば、#1のSQL文が選択される。
ステップ904では、解析及び可視化実行部200が、ユーザが選択したSQL文を、マウスオーバーしているDAOメソッド上にオーバーレイ表示する。
図12は、ユーザが選択したSQL文がシーケンス図上でオーバーレイ表示されている例を示す図である。ステップ902において、図11で、SQL文候補のうち#1がユーザに選択された例を挙げたが、図12では当該選択されたSQL文256がDAOメソッド上にオーバーレイ表示されている。
図9のステップ902の判定で真となりステップ904へ進んだ場合にも、DAOメソッドとSQLIDの対応表205に格納されている該DAOメソッドに対するSQLの文候補のうち選択回数2054が最も多いものがオーバーレイ表示される。また、SQL文候補が単数の場合は、該SQL文の候補がオーバーレイ表示される。
ステップ905では、DAO検索式生成部202が、DAOメソッドとSQLIDの対応表205をアップデートするか否かを判定する。該判定方法として、オーバーレイ表示しているSQL文のSQLIDとマウスオーバーしたDAOメソッドのDAO検索式とを比較し、DAO検索式に“.*”が含まれる場合に、「*」(ワイルドカード)の部分をSQLIDが対応する部分に置き換える。
そして、DAO検索式生成部202は、置き換えた部分の文字列(以後、置換文字列A)が、DAO検索式アップデート表207に格納された項目2071により静的解析で取得可能か否かをチェックし、取得可能であった場合にDAO検索式アップデート表207の回数2072に1(または所定値)を加算し、当該回数2072が予めシステムで設定した、またはユーザが入力した閾値2073以上か否かで判定する。
図6を用いて説明すると、“com¥.hitachi¥..*¥.test”というDAO検索式2052に対して、図11の画面でオーバーレイ表示されるSQL文のSQLIDは“com.hitachi.user.test”である。このため、上述の置換文字列Aは、“user”となる。
ステップ905では、この“user”が静的解析で取得可能か否を判定するわけである。ここで、置換文字列Aが静的解析で取得可能か否かの判定では、DAO検索式アップデート表207を利用する。
DAO検索式アップデート表207の項目2071は「コンストラクタ」と「セッターメソッド」が格納されている。このため、上述の“.*”に対応するDAOメソッドの定義箇所が、DAOメソッドの引数で与えられたオブジェクトがゲッターメソッドの場合(図4の例では、“entity.getTableName()”)、DAO検索式生成部202が、引数のオブジェクト生成部を解析して、コンストラクタ部で置換文字列Aが利用されているか、またはオブジェクトのメソッド(セッターメソッドなど)を利用して置換文字列が利用されているか、をチェックする。
DAO検索式生成部202は、上述の“user”がどちらかで利用されていれば、DAO検索式アップデート表207の対応する項目2071の回数2072に1を加算する。図14では、項目2071=“コンストラクタ”で置換文字列“user”が利用されていたものと想定し、回数2072に1が加算されて3となっている。更に、閾値が3のためDAO検索式のアップデートが実施されると判定され、ステップ906へ進む。
ステップ906では、DAO検索式生成部202が、ステップ905で閾値2073を超えた項目2071の解析を“.*”という正規表現を含む全DAOメソッドに対して行い、DAO検索式を更新する。
本実施例では、ステップ905にて、図14のように項目2071=“コンストラクタ”の回数2072が閾値2073を超えたため、この解析を全てのDAOメソッドに対して行い、DAO検索式を更新する。
換言すれば、DAO検索式生成部202は、SQL文の候補の中からユーザの選択を受け付けて、選択されたSQL文のSQLIDとDAO検索式の置換文字列Aの一部または全てが、所定の条件を満たしている場合に、DAO検索式アップデート表207の項目2071の回数2072に1を加算し、当該項目2071の回数2072が予め設定された閾値2073を超えた場合に、DAO検索式のアップデートを行う。なお、本実施例では、所定の条件として、対応するDAOメソッドの引数がオブジェクトである場合に、当該オブジェクトのゲッターメソッドで取得可能な文字列と置換文字列が一致していれば、当該オブジェクトのコンストラクタまたはセッターメソッドを解析して当該文字列を利用することを示す。
DAO検索式の更新後、SQLIDとSQL文のマップデータ204に格納されたSQLID2041に対して、DAOメソッドとSQLIDの対応表205に格納されたDAO検索式2052を用いて、SQL文の候補を抽出する。抽出したSQL文の候補は、DAOメソッドとSQLIDの対応表205に格納する。
ステップ907では解析及び可視化実行部200が、DAOメソッドに対応するSQL文をシーケンス図上にオーバーレイ表示するフローチャートを終了する。
以上のように、本実施例によれば、上述した特許文献1に存在した課題、すなわち静的解析の精度の問題により、SQL文を構成する変数が取り得る値の集合の生成漏れが発生し、引いてはDAOメソッドに対応するSQL文の抽出漏れが発生する事があった、という課題を解決する。
また、抽出したSQL文候補の中からユーザが選択したSQL文を、優先的に可視化時に利用する事で、3層アーキテクチャのWebアプリケーションにおけるプログラムの動作不良や脆弱性等の原因箇所の特定を容易に行うことが可能となる。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
100 情報処理装置
101 中央処理装置
104 主記憶装置
200 解析及び可視化実行部
201 検索対象整形マップ生成部
202 DAO検索式生成部
203 SQL文候補抽出部
204 SQLIDとSQL文のマップデータ
205 DAOメソッドとSQLIDの対応表
206 SQLID向け連結表
207 DAO検索式アップデート表
230 SQL−Map

Claims (13)

  1. プロセッサとメモリを有してソースコードを静的解析するSQL文抽出装置であって、
    ソースコードを静的解析してDAOメソッドに対応するSQL文を抽出する解析及び可視化部を有し、
    前記解析及び可視化部は、
    予め設定されたSQLマップ及びSQLID向け連絡情報を取得して、当該SQLマップを解析し、前記SQLID向け連絡情報からSQLIDを生成し、前記SQLIDとSQL文のマップデータを生成する検索対象整形マップ生成部と、
    前記ソースコードを解析してDAOメソッドの定義を抽出し、当該DAOメソッドの定義からDAO検索式を生成するDAO検索式生成部と、
    前記SQLIDとSQL文のマップデータと前記DAO検索式を用いて前記DAOメソッドに対応するSQL文の候補を抽出するSQL文候補抽出部と、
    を有することを特徴とするSQL文抽出装置。
  2. 請求項1に記載のSQL文抽出装置であって、
    前記解析及び可視化部は、
    前記ソースコードを静的解析して可視化図を生成する可視化図生成部を、さらに有し、
    前記可視化図生成部は、
    受け付けたトリガーイベントを契機として前記SQL文の候補を出力することを特徴とするSQL文抽出装置。
  3. 請求項1に記載のSQL文抽出装置であって、
    前記DAO検索式生成部は、
    前記DAOメソッドの定義の関数呼び出し部で、呼び出し関数の引数が前記SQLIDとSQL文のマップデータのSQLIDのいずれかと部分一致している場合に、前記呼び出し関数の引数部分をDAO検索式の生成対象とすることを特徴とするSQL文抽出装置。
  4. 請求項3に記載のSQL文抽出装置であって、
    前記DAO検索式生成部は、
    前記DAO検索式の生成対象に対して、文字列以外の部分を“.*”で置換した置換文字列によりDAO検索式を生成することを特徴とするSQL文抽出装置。
  5. 請求項4に記載のSQL文抽出装置であって、
    前記DAO検索式生成部は、
    前記SQL文の候補の中からユーザの選択を受け付けて、前記選択されたSQL文の前記SQLIDと前記DAO検索式の置換文字列の一部または全てが、所定の条件を満たしている場合に、DAO検索式アップデート情報の当該項目の回数に所定値を加算し、当該項目の回数が予め設定された閾値を超えた場合に、DAO検索式のアップデートを行うことを特徴とするSQL文抽出装置。
  6. 請求項2に記載のSQL文抽出装置であって、
    前記可視化図生成部は、
    前記抽出したSQL文候補の中から、DAOメソッドに合わせてSQL文の候補を出力する際に、過去に選択された回数の多いSQL文を優先して出力することを特徴とするSQL文抽出装置。
  7. プロセッサとメモリを有する計算機が、ソースコードを静的解析するSQL文抽出方法であって、
    前記計算機が、SQLマップと、SQLID向け連絡情報及びソースコードを取得する第1のステップと、
    前記計算機が、前記SQLマップを解析し、前記SQLID向け連絡情報からSQLIDを生成し、前記SQLIDとSQL文のマップデータを生成する第2のステップと、
    前記計算機が、前記ソースコードを解析してDAOメソッドの定義を抽出し、当該DAOメソッドの定義からDAO検索式を生成する第3のステップと、
    前記計算機が、前記SQLIDとSQL文のマップデータと前記DAO検索式を用いて前記DAOメソッドに対応するSQL文の候補を抽出する第4のステップと、
    を含むことを特徴とするSQL文抽出方法。
  8. 請求項7に記載のSQL文抽出方法であって、
    前記計算機が、前記ソースコードを静的解析して可視化図を生成する第5のステップを、さらに含み、
    前記第5のステップは、
    受け付けたトリガーイベントを契機として前記SQL文の候補を出力することを特徴とするSQL文抽出方法。
  9. 請求項7に記載のSQL文抽出方法であって、
    前記第3のステップは、
    前記DAOメソッドの定義の関数呼び出し部で、呼び出し関数の引数が前記SQLIDとSQL文のマップデータのSQLIDのいずれかと部分一致している場合に、前記呼び出し関数の引数部分をDAO検索式の生成対象とすることを特徴とするSQL文抽出方法。
  10. 請求項9に記載のSQL文抽出方法であって、
    前記第3のステップは、
    前記DAO検索式の生成対象に対して、文字列以外の部分を“.*”で置換した置換文字列によりDAO検索式を生成することを特徴とするSQL文抽出方法。
  11. 請求項10に記載のSQL文抽出方法であって、
    前記第3のステップは、
    前記SQL文の候補の中からユーザの選択を受け付けて、前記選択されたSQL文の前記SQLIDと前記DAO検索式の置換文字列の一部または全てが、所定の条件を満たしている場合に、DAO検索式アップデート情報の当該項目の回数に所定値を加算し、当該項目の回数が予め設定された閾値を超えた場合に、DAO検索式のアップデートを行うことを特徴とするSQL文抽出方法。
  12. 請求項8に記載のSQL文抽出方法であって、
    前記第5のステップは、
    前記抽出したSQL文候補の中から、DAOメソッドに合わせてSQL文の候補を出力する際に、過去に選択された回数の多いSQL文を優先して出力することを特徴とするSQL文抽出方法。
  13. プロセッサとメモリを有する計算機で、ソースコードを静的解析させるためのプログラムであって、
    SQLマップと、SQLID向け連絡情報及びソースコードを取得する第1のステップと、
    前記SQLマップを解析し、前記SQLID向け連絡情報からSQLIDを生成し、前記SQLIDとSQL文のマップデータを生成する第2のステップと、
    前記ソースコードを解析してDAOメソッドの定義を抽出し、当該DAOメソッドの定義からDAO検索式を生成する第3のステップと、
    前記SQLIDとSQL文のマップデータと前記DAO検索式を用いて前記DAOメソッドに対応するSQL文の候補を抽出する第4のステップと、
    を前記計算機に実行させるためのプログラム。
JP2017201233A 2017-10-17 2017-10-17 Sql文抽出装置、sql文抽出方法及びプログラム Active JP6866270B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2017201233A JP6866270B2 (ja) 2017-10-17 2017-10-17 Sql文抽出装置、sql文抽出方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017201233A JP6866270B2 (ja) 2017-10-17 2017-10-17 Sql文抽出装置、sql文抽出方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2019074966A true JP2019074966A (ja) 2019-05-16
JP6866270B2 JP6866270B2 (ja) 2021-04-28

Family

ID=66544154

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017201233A Active JP6866270B2 (ja) 2017-10-17 2017-10-17 Sql文抽出装置、sql文抽出方法及びプログラム

Country Status (1)

Country Link
JP (1) JP6866270B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111797073A (zh) * 2019-11-26 2020-10-20 北京京东尚科信息技术有限公司 数据库管理方法、电子设备与计算机可读存储介质
CN114519582A (zh) * 2022-02-21 2022-05-20 中国邮政储蓄银行股份有限公司 服务的预热方法、预热装置和服务系统
CN117762773A (zh) * 2023-11-17 2024-03-26 北京计算机技术及应用研究所 一种面向模糊测试的语句序列变异方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006344213A (ja) * 2005-06-07 2006-12-21 Samsung Electronics Co Ltd ソフトウェアモジュールの独立性を保障するデータベースアプリケーションを具現するシステム及び方法
JP2011248631A (ja) * 2010-05-27 2011-12-08 Nec System Technologies Ltd 情報処理装置、設定ファイル生成方法、および設定ファイル生成プログラム
JP2013143114A (ja) * 2012-01-13 2013-07-22 Fujitsu Frontech Ltd プログラム、情報処理装置およびアクセス支援方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006344213A (ja) * 2005-06-07 2006-12-21 Samsung Electronics Co Ltd ソフトウェアモジュールの独立性を保障するデータベースアプリケーションを具現するシステム及び方法
JP2011248631A (ja) * 2010-05-27 2011-12-08 Nec System Technologies Ltd 情報処理装置、設定ファイル生成方法、および設定ファイル生成プログラム
JP2013143114A (ja) * 2012-01-13 2013-07-22 Fujitsu Frontech Ltd プログラム、情報処理装置およびアクセス支援方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111797073A (zh) * 2019-11-26 2020-10-20 北京京东尚科信息技术有限公司 数据库管理方法、电子设备与计算机可读存储介质
CN114519582A (zh) * 2022-02-21 2022-05-20 中国邮政储蓄银行股份有限公司 服务的预热方法、预热装置和服务系统
CN117762773A (zh) * 2023-11-17 2024-03-26 北京计算机技术及应用研究所 一种面向模糊测试的语句序列变异方法

Also Published As

Publication number Publication date
JP6866270B2 (ja) 2021-04-28

Similar Documents

Publication Publication Date Title
JP4148527B2 (ja) 機能テスト・スクリプト生成装置
CN111026470B (zh) 用于输入数据的验证和转换的系统和方法
US20080195377A1 (en) Method, device, and program product for verifying translation in resource file
US8887135B2 (en) Generating test cases for functional testing of a software application
US9483284B2 (en) Version compatibility determination
US8700998B2 (en) Foreign language translation tool
US10698571B2 (en) Behavior feature use in programming by example
EP1890235A1 (en) Test case management
CN110221899B (zh) 一种用户界面的调节方法、装置及系统
US20120266131A1 (en) Automatic program generation device, method, and computer program
JP6440895B2 (ja) ソフトウェア分析装置及びソフトウェア分析方法
JP6866270B2 (ja) Sql文抽出装置、sql文抽出方法及びプログラム
JP5303795B2 (ja) アプリケーションの解析方法、解析システム及び解析プログラム
US20210208996A1 (en) Verification automation apparatus, verification automation method, and computer-readable recording medium
JP4928848B2 (ja) 計算機システム統合管理環境におけるメッセージ変換装置
US10678864B2 (en) Analysis model preparing system, programming apparatus, and analysis model preparing method
US8701086B2 (en) Simplifying analysis of software code used in software systems
US11119899B2 (en) Determining potential test actions
US11960390B2 (en) Test apparatus, test method and program
JP2020123175A (ja) コード管理システムおよびコード管理方法
JP2017004282A (ja) プログラム表示装置、プログラム表示システム、プログラム表示方法、及びプログラム表示プログラム
CN111273913B (zh) 一种输出规范表示的应用程序接口数据的方法及装置
JP7260150B2 (ja) Webサイト設計支援装置、Webサイト設計支援方法、及びプログラム
JP2013145443A (ja) テストコード生成装置、テストコード生成方法、テストコード生成プログラム
CN115687704A (zh) 信息显示方法、装置、电子设备及计算机可读存储介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200316

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210216

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210224

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210312

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210330

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210407

R150 Certificate of patent or registration of utility model

Ref document number: 6866270

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250