JP2002342110A - プログラム解析装置及びそのプログラム並びにプログラム記録媒体 - Google Patents

プログラム解析装置及びそのプログラム並びにプログラム記録媒体

Info

Publication number
JP2002342110A
JP2002342110A JP2001147298A JP2001147298A JP2002342110A JP 2002342110 A JP2002342110 A JP 2002342110A JP 2001147298 A JP2001147298 A JP 2001147298A JP 2001147298 A JP2001147298 A JP 2001147298A JP 2002342110 A JP2002342110 A JP 2002342110A
Authority
JP
Japan
Prior art keywords
sql
program
sentence
statement
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.)
Pending
Application number
JP2001147298A
Other languages
English (en)
Inventor
Satoru Nakajima
哲 中島
Shigeki Naota
繁樹 直田
Hiroko Nakayama
裕子 中山
Tatsuo Kondo
竜生 近藤
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2001147298A priority Critical patent/JP2002342110A/ja
Publication of JP2002342110A publication Critical patent/JP2002342110A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【課題】 本発明は、プログラム解析装置に関し、プロ
グラムのソースコードを解析することにより、プログラ
ム中にSQL文として現れないものまで含めて、早期に
問題のあるSQL文を抽出することを目的とする。 【解決手段】 第1のSQL文抽出手段21は、プログ
ラムのソースコード1を解析して、プログラム中に記述
されておらず、かつ、プログラムの実行時に発行される
可能性のあるSQL文を抽出する。問題SQL文検出手
段7は、第1のSQL文抽出手段21により抽出された
SQL文の中から、予め定められた検出条件に該当する
ものを、問題のあるSQL文として抽出する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は,プログラム解析装
置及びそのプログラム並びにプログラム記録媒体に関
し,特に,プログラムのソースコードを解析してプログ
ラムに現れないSQL文までを含めて問題の有無を検出
するプログラム解析装置及びそのプログラム並びにプロ
グラム記録媒体に関する。
【0002】
【従来の技術】データベースを利用するプログラムの開
発を終了した段階で,その性能評価(主に,実行時間の
評価)を行い,その結果,問題があれば,当該プログラ
ムを改善する必要がある。例えば,実行時間が長けれ
ば,当該プログラムの実行時間を短縮する必要がある。
そこで,従来から,プログラムが発行するSQL(Stru
ctured Query Language )の情報を収集することが行わ
れている。
【0003】しかし,このようなSQLの情報を収集す
る手段によれば,収集されるタイミングは,プログラム
実行時に限られる。即ち,プログラムをコンパイルして
実行可能な形式に直して,始めてデータベースを利用す
る設定が完了する。従って,この時点までは,SQLの
情報を収集することができない。これでは,プログラム
の性能評価の時点がほぼ開発工程の最終段階となり,プ
ログラム修正のコストが高くなってしまう。
【0004】
【発明が解決しようとする課題】プログラム開発の早い
段階でSQLの情報を収集し,問題のあるSQLの検出
を行うことも提案されている(例えば,特開平4−11
2334号)。しかし,このような従来の技術によれ
ば,プログラム中に現に現れる個々のSQL文自体の良
否を判断するのみである。即ち,プログラム中にSQL
文として記述されている文についてのみを検出し,その
記述についての文法エラーの有無をチェックするのみで
ある。
【0005】従って,従来は,プログラム中に現にSQ
L文として記述された文についてはチェックすることが
できた。しかし,プログラム中にSQL文としての記述
はないが,当該記述によって発行される可能性のあるS
QL文については,その情報を収集することができない
ので,全くチェックすることができなかった。従って,
このようなプログラム中に現れないSQL文にエラーが
あったり,その記述が最適化されていない結果,これが
性能向上(実行時間の短縮)の障害となっている場合,
その原因を特定することは極めて難しかった。特に,プ
ログラム中にSQL文として現れないため,プログラム
中におけるその位置が特定できない結果,プログラムの
問題解析に非常に多くの時間を必要としていた。
【0006】また,従来は,SQL文の実行性能評価に
おいて,プログラム中でのSQL文の発行頻度,インデ
ックスの有無等のデータベースのテーブルの定義,デー
タベースに蓄積されたデータ量等が考慮されることはな
かった。例えば,SQL文の発行頻度が少なかったり,
データベースのテーブルにインデックスの定義があった
り,データベースに蓄積されたデータ量等が少なけれ
ば,たとえSQL文の記述が最適化されていないとして
も,プログラム全体の実行時間から見て問題となる可能
性は少ない。従って,問題の有るSQL文であるとして
チェックする必要はない。
【0007】本発明は,プログラムのソースコードを解
析することにより,プログラム中にSQL文として現れ
ないものまで含めて,早期に問題の有るSQL文を抽出
するプログラム解析装置を提供することを目的とする。
【0008】また,本発明は,プログラムのソースコー
ドを解析することにより,プログラム中にSQL文とし
て現れないものまで含めて,早期に問題の有るSQL文
を抽出するプログラム解析装置を実現するプログラムを
提供することを目的とする。
【0009】更に,本発明は,プログラムのソースコー
ドを解析することにより,プログラム中にSQL文とし
て現れないものまで含めて,早期に問題の有るSQL文
を抽出するプログラム解析装置を実現するプログラムを
記録したプログラム記録媒体を提供することを目的とす
る。
【0010】
【課題を解決するための手段】本発明のプログラム解析
装置は,プログラムのソースコードを解析してSQL文
を抽出する。プログラム解析装置は,プログラムのソー
スコードを解析して,プログラム中に記述されておら
ず,かつ,プログラムの実行時に発行される可能性のあ
るSQL文を抽出する第1のSQL文抽出手段を備え
る。本発明のプログラム及びプログラム記録媒体は,こ
のようなプログラム解析装置を実現するプログラム及び
これをフロッピィディスク等種々の媒体に記録したプロ
グラム記録媒体を提供する。
【0011】また,本発明の好ましい実施態様によれ
ば,本発明のプログラム解析装置は,第1のSQL文抽
出手段により抽出されたSQL文の中から,予め定めら
れた検出条件に該当するものを,問題の有るSQL文と
して抽出する問題SQL文検出手段を備える。
【0012】本発明のプログラム解析装置によれば,プ
ログラムのソースコードを解析することにより,プログ
ラム中にSQL文として現れないものまで含めて,プロ
グラムの実行時に発行される可能性のあるSQL文を抽
出することができる。従って,このようなプログラム中
に現れないSQL文がプログラムの性能向上(実行時間
の短縮)の障害となっている場合でも,プログラム中に
おけるその位置が特定でき,その原因を容易に特定する
ことができる。
【0013】また,本発明の好ましい実施態様によれ
ば,抽出したSQL文の中から,予め定められた検出条
件に該当するものを,問題の有るSQL文として抽出す
ることができる。例えば,発行頻度が多いSQL文,イ
ンデックスの定義がないデータベースのテーブルについ
ての処理を行うSQL文,蓄積されたデータ量等が多い
データベースについての処理を行うSQL文等について
のみを,問題の有るSQL文であるとしてチェックする
ことができる。従って,プログラム全体の実行時間から
見て問題となる可能性の高いSQL文のみを抽出して,
プログラムの性能改善を有効に行うことができる。
【0014】
【発明の実施の形態】図1はプログラム解析装置構成図
であり,本発明のプログラム解析装置の構成を示す。
【0015】プログラム解析装置は,プログラムのソー
スコード1を解析してSQL文を抽出する。このため
に,プログラム解析装置はSQL文抽出部2を備える。
SQL文抽出部2は,プログラムのソースコード1が入
力されると,これを解析してSQL文を抽出する。SQ
L文抽出部2は,第1のSQL文抽出手段21及び第2
のSQL文抽出手段22を備える。
【0016】第1のSQL文抽出手段21は,プログラ
ムのソースコード1を解析して,プログラムのソースコ
ード1中に記述されておらず,かつ,プログラムの実行
時に発行される可能性のあるSQL文を抽出する。第1
のSQL文抽出手段21は,後述するように,プログラ
ムの実行時に発行される可能性のあるSQL文の構成要
素となる文字列変数を合成することにより,発行される
可能性のあるSQL文を抽出する。第2のSQL文抽出
手段22は,プログラムのソースコード1を解析して,
その中に記述されたSQL文を抽出する。即ち,第2の
SQL文抽出手段22は,プログラムのソースコード1
中に,実際にSQL文として記述されたもの(SQL
文)を抽出する。なお,このような実際に記述されたS
QL文は容易に発見できるので,第2のSQL文抽出手
段22を省略してもよい。
【0017】SQL文抽出部2はSQL文群3とSQL
発行箇所情報4とを出力する。SQL文群3は,第1及
び第2のSQL文抽出手段21及び22が抽出した(1
又は複数の)SQL文からなる。SQL発行箇所情報4
は,SQL文群3におけるSQL文の各々について,プ
ログラムのソースコード1中におけるその発行箇所(位
置)を示す情報である。
【0018】例えば,プログラムのソースコード1の開
発が完了した時点で,これをプログラム解析装置(のS
QL文抽出部2)に入力して,SQL文群3とSQL発
行箇所情報4とを,プログラム解析装置の出力として問
題SQL文情報出力部10から得ることができる。これ
により,SQL文の内容及びその位置を知ることができ
るので,プログラムの開発の早期の段階で,当該プログ
ラムを評価することができる。この場合には,プログラ
ムの実行時に発行される可能性のあるSQL文の全て
と,ソースコード1に実際に記述されているSQL文の
全てとの双方のチェックが行われることになる。
【0019】この例では,実際には,プログラム解析装
置は,SQL文群3等をそのまま出力するのではなく,
実際のプログラムの性能(実行時間の評価)上,問題の
ありそうなSQL文を抽出して出力する。即ち,プログ
ラムの実行時間の短縮化の観点から見てその障害となっ
ている可能性のある(高い)と思われるSQL文を抽出
することができる。このために,プログラム解析装置は
問題SQL文検出手段である問題SQL文検出部7を備
える。
【0020】問題SQL文検出部7は,SQL文群3が
入力されると,これに含まれるSQL文の中から,予め
定められた検出条件に該当するものを,問題の有るSQ
L文として抽出する。従って,問題SQL文検出部7
は,少なくとも,第1のSQL文抽出手段21により抽
出されたSQL文の中から,予め定められた検出条件に
該当するものを,問題の有るSQL文として抽出する。
【0021】ここで,「問題の有るSQL文」とは,プ
ログラムの実行時間の短縮化の障害となっている可能性
のあると思われるSQL文を指す。従って,経験的に実
行時間の短縮化の(無視できない)障害となるであろう
(即ち,一定の条件に該当する)SQL文を,「問題の
有るSQL文」として取り扱えば足りる。そこで,問題
SQL文検出部7において問題の有るSQL文を抽出す
るために,検出条件が予め定められ,問題SQL文検出
部7に与えられる。
【0022】この例では,検出条件として,SQL文が
処理対象とするデータベース(リレーショナルデータベ
ース)におけるインデックスの有無を示す情報51,S
QL文が処理対象とするデータベースに格納されたデー
タ量を示す情報52,SQL文の発行頻度(の予測値)
が用いられる。前2者はデータベース情報5に含まれ
る。データベース情報5は当該データベースについての
種々の管理情報を格納し,当該データベースに付随して
予め用意される。SQL文の発行頻度は,SQL文発行
頻度予測手段であるSQL文発行頻度予測部6により生
成される。
【0023】SQL文発行頻度予測部6は,SQL発行
箇所情報4が入力されると,各々のSQL文についての
発行頻度(の予測値)を生成する。即ち,プログラムの
ソースコード1に記述された繰り返し制御文に基づい
て,繰り返し制御文により実行される当該繰り返しのル
ープ内に存在するSQL文の発行頻度を予測する。SQ
L文の発行頻度は問題SQL文検出手段である問題SQ
L文検出部7に入力される。
【0024】問題SQL文検出部7は,SQL文発行頻
度予測部6により予測されたSQL文の発行頻度が所定
の値以上である場合,当該繰り返しのループ内に存在す
るSQL文を問題の有るSQL文として抽出する。SQ
L文の発行頻度が所定の値よりも小さい場合,当該SQ
L文は,問題の有るSQL文ではない(問題のないSQ
L文である)とされる。即ち,問題SQL文検出部7
は,当該SQL文を抽出しない(出力しない)。
【0025】この後,問題SQL文検出部7は,SQL
文が処理対象とするデータベースにおけるインデックス
が無い(付与されていない)場合,当該データベースに
ついてのSQL文を問題の有るSQL文として抽出す
る。データベースにおけるインデックスが有る場合,当
該SQL文は,問題の有るSQL文ではないとされ,問
題SQL文検出部7によりSQL文を抽出されない。
【0026】更に,この後,問題SQL文検出部7は,
SQL文が処理対象とするデータベースに格納されたデ
ータ量が所定の値以上の場合,当該データベースについ
てのSQL文を問題の有るSQL文として抽出する。デ
ータ量が所定の値よりも小さい場合,当該SQL文は,
問題の有るSQL文ではないとされ,問題SQL文検出
部7によりSQL文を抽出されない。
【0027】なお,この例では問題の有るSQL文の抽
出のために上述の3個の検出条件を上述の順に用いる
が,問題の有るSQL文の抽出手順はこれに限られな
い。例えば,上述の3個の検出条件を順序を替えて用い
てもよく,いずれか2個の検出条件をその順序を変更し
て組み合わせて用いてもよく,いずれか1個の検出条件
のみを用いてもよい。また,上述の3個の検出条件以外
の1又は複数の検出条件を用いてもよく,上述の3個の
検出条件とこれら以外の1又は複数の検出条件との中か
ら1又は複数の検出条件を組み合わせて用いてもよい。
【0028】例えば,プログラムのソースコード1の開
発が完了した時点で,前述のようにしてSQL文群3と
SQL発行箇所情報4とを得て,更にこれらをSQL文
発行頻度予測部6及び問題SQL文検出部7に前述のよ
うに入力する。これにより,プログラム解析装置の出力
として,1又は複数の「問題の有るSQL文」を問題S
QL文情報出力部10から得ることができる。この場合
も,SQL文の内容及びその位置を知ることができるの
で,プログラムの開発の早期の段階で,当該プログラム
を評価することができる。この場合には,プログラムの
実行時に発行される可能性のあるSQL文とソースコー
ド1に実際に記述されているSQL文との双方から「問
題の有るSQL文」として抽出されたSQL文のみのチ
ェックが行われることになる。即ち,短時間で効果的に
プログラムの性能を改善する(実行時間を短縮する)こ
とができる。
【0029】この例では,実際には,プログラム解析装
置は,問題の有るSQL文(プログラムの性能向上の障
害となっている可能性のあるSQL文)のみを出力する
のではなく,実際のプログラムの実行において発行され
たSQL文について,ソースコード1におけるその位置
をも抽出して出力する。このために,プログラム解析装
置は,実行時SQL発行情報8とSQL発行箇所特定手
段であるSQL発行箇所特定部9とを備える。
【0030】実行時SQL発行情報8は,プログラムの
実行時において実際に発行されたSQL文からなる。即
ち、ソースコード1は、コンパイラ等により実行形式
(実際に発行されたSQL文を含む)に変換された後、
データベース管理システムを介してデータベースにアク
セスする(図示せず)。この時,実際に発行されたSQ
L文を,通常のデータベース管理システムが備える周知
のSQL文についての収集手段により,収集することが
できる。
【0031】SQL発行箇所特定部9は,実行時SQL
発行情報8が入力されると,これに基づいて,当該SQ
L文の各々について,プログラムのソースコード1にお
けるその位置を特定する。また,SQL発行箇所特定部
9は,SQL文群3及びSQL発行箇所情報4が入力さ
れると,これらに基づいて,SQL文群3に含まれるS
QL文の各々について,プログラムのソースコード1に
おけるその位置を特定する。SQL発行箇所特定部9に
よるSQL文の位置についての情報は,問題SQL文情
報出力部10から出力される。
【0032】これにより,実際に発行されたSQL文の
ソースコード1における位置を,特に解析の手間なく,
容易に知ることができる。そして,実際に発行されたS
QL文のソースコード1における位置を,SQL文群3
に含まれるSQL文の各々のソースコード1における位
置と,容易に比較することができる。従って,事後的で
はあるが,SQL文が実際のプログラムの実行時にどの
ように障害となるかについての情報を簡単に収集するこ
とができる。この情報は,プログラムの開発に生かされ
ると共に,問題SQL文検出部7における検出条件の設
定に反映される。これにより,当該検出条件を最適化す
ることができる。
【0033】以下,実際のプログラムのソースコード1
を例に,本発明のプログラム解析について具体的に説明
する。
【0034】図2は,ソースコード説明図であり,解析
によるSQL文の抽出対象となるプログラムのソースコ
ード1を示す。
【0035】ソースコード1はプログラミング言語Ja
vaで記述されている。プログラム名をA.javaとする。
ソースコード1について簡単に説明すると,2行目から
のメソッドf1の中でメソッドsearchが呼び出される(6
行目)。その際,メソッドf1の中の4行目及び5行目で
宣言したString型変数を引数に渡す。この引数であるSt
ring型変数が,メソッドsearchの中で発行されるSQL
文を構成する文字列である。9行目からのメソッドf2も
ほぼ同様である。但し,メソッドf2は,メソッドf1とは
異なる引数でメソッドsearchを呼び出す(12行目)。
即ち,ここでの引数は文字列そのものであり,これがS
QL文を構成する文字列となる。なお,メソッドsearch
の呼び出しは,11行目から14行目までの繰り返し制
御文(while 文)の中に存在する。SQL文に直接関連
する記述は19行目及び20行目に存在し,20行目の
記述によりデータベースがアクセスされる。
【0036】以上から判るように,ソースコード1は,
SQL文がソースコード1の中に記述されているのでは
なく,プログラムの実行時に発行される可能性があるS
QL文の例を示す。また,ソースコード1はSQL文と
して記述された部分(SQL文)を含んでいない。
【0037】図3は,プログラム解析処理フローであ
り,本発明によるプログラムの解析処理の概略を示す。
【0038】図2に示すプログラムのソースコード1が
SQL文抽出部2に入力されると(ステップS11),
これをSQL文抽出部2が解析して,SQL文群3及び
SQL発行箇所情報4を生成する(ステップS12)。
SQL発行箇所情報4がSQL文発行頻度予測部6に入
力されると(ステップS13),これに基づいてSQL
文発行頻度予測部6がSQL文の発行頻度を予測して,
その結果を問題SQL文検出部7に入力する(ステップ
S14)。これに応じて,問題SQL文検出部7が,デ
ータベース情報5(データベースに格納されたインデッ
クスの有無を示す情報51及びデータ量を示す情報5
2)とSQL文の発行頻度とに基づいて,問題の有るS
QL文を抽出し,問題SQL文情報出力部10に入力す
る(ステップS15)。問題SQL文情報出力部10
は,抽出されたSQL文を出力する(ステップS1
6)。
【0039】この後,当該プログラムを実行し,当該実
行時に実際に発行されたSQL文についての情報を実行
時SQL発行情報8として得て,これをSQL発行箇所
特定部9に入力する(ステップS17)。これに応じ
て,SQL発行箇所特定部9が,発行されたSQL文に
ついてソースコード1における位置を特定しSQL文群
3及びSQL発行箇所情報4を読み出してこれらに基づ
いてSQL文群3に含まれるSQL文についてソースコ
ード1における位置を特定し,問題SQL文情報出力部
10に入力する(ステップS18)。問題SQL文情報
出力部10はSQL文の各々の位置を出力する(ステッ
プS19)。
【0040】図4は,SQL文抽出処理フローであり,
ステップS12においてSQL文抽出部2の実行するS
QL文の抽出処理を示す。
【0041】ソースコード1からSQL文発行箇所を見
つけ出して,SQL文を表す(構成する)変数を抽出す
る(ステップS21)。例えば,図2のソースコード1
について見ると,SQL文発行箇所としてデータベース
へのアクセスを実行するexecute Query の存在する20
行目の文を検出し,当該行の中から値がSQL文である
文字列型変数sqlStrを抽出する。
【0042】抽出した変数の代入値を抽出する(ステッ
プS22)。例えば,図2のソースコード1について見
ると,抽出した変数sqlStrに対する代入値として,19
行目の変数sqlStrの定義文を参照して,その定義の部分
(=の右の部分)から,”SELECT”+col +”FROM”+
table を抽出する。ここで,col は,データベースの列
の名前であり,当該SQL文が検索条件で指定する。ta
ble は,データベースのテーブル名であり,当該SQL
文の検索対象である。
【0043】抽出した代入値が含む変数の代入箇所を再
帰的に解析し,定数からなる代入値の組を取得する(ス
テップS23)。例えば,図2のソースコード1につい
て見ると,抽出した代入値が2個の変数col 及びtable
を含むので,ソースコード1の実行パスに従って,これ
を解析する。即ち,変数col 及びtable は,18行目に
おいて引数として渡されており,その定義は6行目及び
12行目に存在する。6行目の変数col 及びtable は,
実行パス(メソッドf1からメソッドsearchの呼び出しま
で)を辿ると,4行目及び5行目に文字列TABLE1及びCO
L1として定義される。12行目の変数col 及びtable
は,実行パス(メソッドf2からメソッドsearchの呼び出
しまで)を辿ると,当該12行目に文字列TABLE2及びCO
L2として定義される。従って,代入値の組COL1及びTABL
E1,COL2及びTABLE2が求まる。
【0044】以上の取得結果を組合わせて,SQL文群
3を取得する(ステップS24)。例えば,図2のソー
スコード1について見ると,求めた代入値の組COL1及び
TABLE1を,19行目の変数sqlStrの定義文に組み合わせ
て,SQL文を得る。COL2及びTABLE2についても同様で
ある。これにより,SQL文として,図5(A)に示す
ように,SELECT COL1 FROM TABLE1 を得る。SQL文に
は,各々,一意に定まるIDが付加される。
【0045】なお,図2のソースコード1は, 前述のよ
うに、ソースコード1の中には記述されずプログラムの
実行時に発行される可能性があるSQL文(ID=1及び
ID=2のSQL文)のみを含み,SQL文として記述さ
れた部分(SQL文それ自体)を含んでいない。SQL
文として記述された部分であるSQL文については,ス
テップS21においてその抽出が終了する。即ち、ソー
スコード1からSQL文発行箇所を見つけ出して,SQ
L文それ自体を(前述の変数として)抽出する。SQL
文はSELECT文等の特定の記述からなるので,SQL文で
あるか否かを判断することができる。そこで, SQL文
発行箇所から(変数として)抽出した記述について調べ
て, それがSQL文であるなら,当該抽出した部分(S
QL文)がSQL文群3に格納される。
【0046】また, SQL発行箇所情報4はステップS
21において取得される。例えば,図2のソースコード
1について見ると,ステップS21において,前述のよ
うに,SQL文発行箇所(出現位置)としてプログラム
名A.javaの20行目を求め,前述の実行パスを同様にし
て辿りその制御構造を解析する。メソッドf1からメソッ
ドsearchの呼び出しまでについて見ると,繰り返し制御
文がないので,ループなしとされる。メソッドf2からメ
ソッドsearchの呼び出しまでについて見ると,繰り返し
制御文であるwhile 文が1個あるので,1重ループとさ
れる。これにより,図5(B)に示すような構成のSQ
L発行箇所情報4が得られる。SQL文の発行箇所に
は,各々,一意に定まるIDが付加される。図5(A)に
おけるID=1のSQL文の出現位置が,図5(B)にお
けるID=1に示される。
【0047】この図5(B)に示すSQL発行箇所情報
4における制御構造に基づいて,ステップS14におい
て,SQL文発行頻度予測部6は,前述の実行パスを同
様に辿り,SQL文の発行頻度を予測する。図2のソー
スコード1において,ID=1であるSQL文(メソッド
f1からメソッドsearchの呼び出しまで)について見る
と,ループがないので,このSQL文の発行回数は「1
回」であると予測する。ID=2であるSQL文(メソッ
ドf2からメソッドsearchの呼び出しまで)について見る
と,1重ループであるので,このSQL文の発行回数は
「当該ループの繰り返しの回数」であると予測する。こ
こでは,例えば,説明の便宜上,繰り返しの回数が10
00回であるとする。
【0048】図6は,問題SQL文検出処理フローであ
り,ステップS15において問題SQL文検出部7の実
行する問題SQL文の検出処理を示す。
【0049】SQL文群3の中から1個の未処理(未チ
ェック)のSQL文を処理対象として取り出し(ステッ
プS31),当該SQL文についてのSQL文発行頻度
予測部6による発行頻度が所定の値以上か否かを調べる
(ステップS32)。所定の値以上でない場合,当該S
QL文についての処理は終了し,SQL文群3の中に未
チェックのSQL文が残っているか否かを調べる(ステ
ップS37)。残っている場合,ステップS31以下を
繰り返す。残っていない場合,検出処理を終了する。
【0050】ステップS32における所定の値は,経験
的に定まるが,例えば1000回とされる。図2のソー
スコード1について見ると,ID=1であるSQL文の発
行頻度は1回であるので,このSQL文についての処理
は終了する。一方,ID=2であるSQL文の発行頻度1
000回であるので,このSQL文についての処理はス
テップS33へ進む。
【0051】ステップS32において発行頻度が所定の
値以上である場合,データベース情報5のテーブル定義
から,当該SQL文の検索対象のテーブル名と検索条件
で指定されている列の名前を取得し(ステップS3
3),当該列についてのインデックスの有無を示す情報
51からインデックスが無いか否かを調べる(ステップ
S34)。インデックスが有る場合,当該SQL文につ
いての処理は終了し,ステップS37を実行する。
【0052】ステップS33で取得するデータベース情
報5のテーブル定義の一例を図5(C)に示す。テーブ
ル定義は,当該データベースのテーブル毎に,列の名
前,インデックスの有無からなる列情報を格納する。図
2のソースコード1について見ると,ID=2であるSQ
L文の対象とするテーブル名であるTABLE2において,当
該SQL文の指定する列であるCOL2には,インデックス
が付加されていない。従って,ID=2であるSQL文に
ついての処理はステップS35へ進む。
【0053】インデックスが無い場合,更に,データベ
ース情報5のデータ量から,当該データ量を取得し,こ
れが所定の値以上か否かを調べる(ステップS35)。
所定の値以上でない場合,当該SQL文についての処理
は終了し,ステップS37を実行する。所定の値以上で
ある場合,当該SQL文を問題の有るSQL文として検
出する(ステップS36)。この後,ステップS37を
実行する。
【0054】ステップS35における所定の値は,経験
的に定まるが,例えば10000件とされる。ステップ
S35で取得するデータベース情報5のデータ量の一例
を図5(D)に示す。データ量は,当該データベースの
テーブル毎に,それが格納するデータ量(を示す情報5
2)を格納する。図2のソースコード1について見る
と,ID=2であるSQL文の対象とするテーブル名であ
るTABLE2のデータ量は50000件である。従って,こ
のデータ量は所定の値よりも大きいので,ステップS3
6において,ID=2であるSQL文が問題の有るSQL
文として抽出される。
【0055】以上の結果,図2のソースコード1につい
て見ると,図7に示すように,2個のSQL文を含むS
QL文群3から,ID=2として特定される1個のSQL
文が検出される。即ち,発行頻度が所定の値以上であ
り,インデックスの無い列COL2を使用し,対象テーブル
TABLE2のデータ量が所定の値以上のSQL文が検出され
る。なお,図7においては,SQL文の実際の記述を示
し,WHERE以下は検索条件を示す。図7における検出結果
が、ステップS16において,問題SQL文情報出力部
10から問題の有るSQL文として出力される。
【0056】この後,図2のソースコード1をコンパイ
ル等して実行形式に変換して実行する。この時,実行形
式とされたソースコード1には実際に発行されたSQL
文が含まれる。図2の例の場合,前述のID=1及びID=
2である2個のSQL文が発行される。実行時に,これ
ら2個のSQL文についての情報(実行時SQL発行情
報8)がデータベース管理システムから得られる。
【0057】図2の例の場合に得られる実行時SQL発
行情報8の一例を図8に示す。実行時SQL発行情報8
は,実際に発行されたSQL文毎に,その処理に要した
時間を格納する。
【0058】SQL発行箇所特定部9は,実行時SQL
発行情報8が入力される(ステップS17)と,これと
SQL文群3とを比較して,同一の記述内容のSQL文
(のID)を求め, これに基づいてSQL発行箇所情報4
を参照して, 求めたSQL文の発行箇所を求める(ステ
ップS18)。これにより,実行時SQL発行情報8に
存在するSQL文のソースコード1における発行箇所
は, 「プログラム名A.javaの20行目」に存在すること
が特定される。なお,SQL文群3及びSQL発行箇所
情報4を共に出力してもよい。
【0059】このように,SQL発行箇所特定部9によ
れば,SQL文のソースコード1 における位置を容易に
特定することができる。例えば、実行時SQL発行情報
8において実行時間が10秒もかかっているSQL文
(ID=2であるSQL文)の位置が,プログラム名A.ja
vaの20行目に存在することを,簡単に知ることができ
る。特に,ソースコード1中にSQL文として記述され
ていなくても,実際に発行されたSQL文の発行箇所を
簡単に知ることができる。これにより,当該プログラム
の実行時間が短縮できない原因を知り,その性能改善を
行うことができる。なお,従来は,ソースコード1中に
SQL文として記述されていなけれ,ソースコード1を
1行ずつ解析する他に原因究明の手段がなかった。
【0060】なお,以上は,ステップS16において問
題SQL文情報出力部10から出力された問題の有るS
QL文(ID=2であるSQL文)を除去しなかった場合
の例である。ステップS16の結果に基づいて,ソース
コード1におけるID=2であるSQL文を改善すれば,
プログラムの実行時間を短縮することができる。例え
ば、実行パスを逆に辿って,プログラム名A.javaの20
行目から1重ループの11行目乃至14行目の記述やメ
ソッドsearchの記述を適宜変更する。これにより, 当該
SQL文に起因する実行時間を少しでも短縮することが
できる。即ち、プログラムのソースコード1が完成した
時点で直ちに本発明により問題の有るSQL文を検出す
れば,開発工程の早期の段階でプログラムの最適化によ
る性能向上(実行時間の短縮)を図ることができる。
【0061】本発明の形態および実施例の特徴を列記す
ると以下のとおりである。 (付記1) プログラムのソースコードを解析してSQ
L文を抽出するプログラム解析装置であって,前記プロ
グラムのソースコードを解析して,前記プログラム中に
記述されておらず,かつ,前記プログラムの実行時に発
行される可能性のあるSQL文を抽出する第1のSQL
文抽出手段を備えることを特徴とするプログラム解析装
置。 (付記2) 前記第1のSQL文抽出手段が,前記プロ
グラムの実行時に発行される可能性のあるSQL文の構
成要素となる文字列変数を合成することにより,前記発
行される可能性のあるSQL文を抽出することを特徴と
する付記1に記載のプログラム解析装置。 (付記3) 当該プログラム解析装置が,更に,前記プ
ログラムのソースコードを解析して,その中に記述され
た前記SQL文を抽出する第2のSQL文抽出手段を備
えることを特徴とする付記1に記載のプログラム解析装
置。 (付記4) 当該プログラム解析装置が,更に,前記第
1のSQL文抽出手段により抽出されたSQL文の中か
ら,予め定められた検出条件に該当するものを,問題の
有るSQL文として抽出する問題SQL文検出手段を備
えることを特徴とする付記1に記載のプログラム解析装
置。 (付記5) 当該プログラム解析装置が,更に,データ
ベースに格納されたデータ量を示す情報を含むデータベ
ース情報を備え,前記問題SQL文検出手段が,前記検
出条件として前記データ量を示す情報を用いて,前記デ
ータ量が所定の値以上の場合に,前記データベースにつ
いてのSQL文を前記問題の有るSQL文として抽出す
ることを特徴とする付記4に記載のプログラム解析装
置。 (付記6) 当該プログラム解析装置が,更に,データ
ベースにおけるインデックスの有無を示す情報を含むデ
ータベース情報を備え,前記問題SQL文検出手段が,
前記検出条件として前記インデックスの有無を示す情報
を用いて,前記インデックスが無い場合に,前記データ
ベースについてのSQL文を前記問題の有るSQL文と
して抽出することを特徴とする付記4に記載のプログラ
ム解析装置。 (付記7) 当該プログラム解析装置が,更に,前記プ
ログラムのソースコードに記述された繰り返し制御文に
基づいて,当該繰り返しのループ内に存在するSQL文
の発行頻度を予測するSQL文発行頻度予測手段を備
え,前記問題SQL文検出手段が,前記検出条件として
前記SQL文発行頻度予測手段により予測された前記発
行頻度を用いて,前記発行頻度が所定の値以上の場合
に,前記繰り返しのループ内に存在するSQL文を前記
問題の有るSQL文として抽出することを特徴とする付
記4に記載のプログラム解析装置。 (付記8) 当該プログラム解析装置が,更に,プログ
ラムの実行時において実際に発行されたSQL文からな
るSQL発行情報と,前記SQL発行情報に基づいて,
当該SQL文の各々について,当該SQL文のソースコ
ードにおける位置を特定するSQL発行箇所特定手段と
を備えることを特徴とする付記1に記載のプログラム解
析装置。 (付記9) 前記SQL発行箇所特定手段が,前記第1
及び第2のSQL文抽出手段により抽出されたSQL文
の各々について,当該SQL文のソースコードにおける
位置を特定することを特徴とする付記8に記載のプログ
ラム解析装置。 (付記10) プログラムのソースコードを解析して,
前記プログラム中に記述されておらず,かつ,前記プロ
グラムの実行時に発行される可能性のあるSQL文を抽
出する処理をコンピュータに実行させることを特徴とす
るプログラム。 (付記11) プログラムのソースコードを解析して,
前記プログラム中に記述されておらず,かつ,前記プロ
グラムの実行時に発行される可能性のあるSQL文を抽
出する処理をコンピュータに実行させるプログラムを記
録したことを特徴とするプログラム記録媒体。
【0062】
【発明の効果】以上説明したように,本発明によれば,
プログラム解析装置において,プログラム中に記述され
ておらずかつプログラムの実行時に発行される可能性の
あるSQL文を抽出することにより,このようなプログ
ラム中に現れないSQL文がプログラムの性能向上の障
害となっている場合でも,プログラム中におけるその位
置が特定でき,その原因を容易に特定することができ
る。
【0063】また,本発明の好ましい実施態様によれ
ば,プログラム解析装置において,抽出したSQL文の
中から予め定められた検出条件に該当するものを問題の
有るSQL文として抽出することにより,プログラム全
体の実行時間から見て問題となる可能性の高いSQL文
のみを抽出して,プログラムの性能改善を有効に行うこ
とができる。
【図面の簡単な説明】
【図1】プログラム解析装置構成図である。
【図2】ソースコード説明図である。
【図3】プログラム解析処理フローである。
【図4】SQL文抽出処理フローである。
【図5】プログラム解析説明図である。
【図6】問題SQL文検出処理フローである。
【図7】プログラム解析説明図である。
【図8】プログラム解析説明図である。
【符号の説明】
2 SQL文抽出部 3 SQL文群 4 SQL発行箇所情報 6 SQL文発行頻度予測部 7 問題SQL文検出部 8 実行時SQL発行情報 9 SQL発行箇所特定部 10 問題SQL文情報出力部
フロントページの続き (72)発明者 中山 裕子 神奈川県川崎市中原区上小田中4丁目1番 1号 富士通株式会社内 (72)発明者 近藤 竜生 神奈川県川崎市中原区上小田中4丁目1番 1号 富士通株式会社内 Fターム(参考) 5B042 GA02 GB03 HH08 MC12 MC23 MC28 MC33

Claims (5)

    【特許請求の範囲】
  1. 【請求項1】 プログラムのソースコードを解析してS
    QL文を抽出するプログラム解析装置であって,前記プ
    ログラムのソースコードを解析して,前記プログラム中
    に記述されておらず,かつ,前記プログラムの実行時に
    発行される可能性のあるSQL文を抽出する第1のSQ
    L文抽出手段を備えることを特徴とするプログラム解析
    装置。
  2. 【請求項2】 当該プログラム解析装置が,更に,前記
    第1のSQL文抽出手段により抽出されたSQL文の中
    から,予め定められた検出条件に該当するものを,問題
    の有るSQL文として抽出する問題SQL文検出手段を
    備えることを特徴とする請求項1に記載のプログラム解
    析装置。
  3. 【請求項3】 当該プログラム解析装置が,更に,前記
    プログラムのソースコードに記述された繰り返し制御文
    に基づいて,当該繰り返しのループ内に存在するSQL
    文の発行頻度を予測するSQL文発行頻度予測手段を備
    え,前記問題SQL文検出手段が,前記検出条件として
    前記SQL文発行頻度予測手段により予測された前記発
    行頻度を用いて,前記発行頻度が所定の値以上の場合
    に,前記繰り返しのループ内に存在するSQL文を前記
    問題の有るSQL文として抽出することを特徴とする請
    求項2に記載のプログラム解析装置。
  4. 【請求項4】 プログラムのソースコードを解析して,
    前記プログラム中に記述されておらず,かつ,前記プロ
    グラムの実行時に発行される可能性のあるSQL文を抽
    出する処理をコンピュータに実行させることを特徴とす
    るプログラム。
  5. 【請求項5】 プログラムのソースコードを解析して,
    前記プログラム中に記述されておらず,かつ,前記プロ
    グラムの実行時に発行される可能性のあるSQL文を抽
    出する処理をコンピュータに実行させるプログラムを記
    録したことを特徴とするプログラム記録媒体。
JP2001147298A 2001-05-17 2001-05-17 プログラム解析装置及びそのプログラム並びにプログラム記録媒体 Pending JP2002342110A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2001147298A JP2002342110A (ja) 2001-05-17 2001-05-17 プログラム解析装置及びそのプログラム並びにプログラム記録媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001147298A JP2002342110A (ja) 2001-05-17 2001-05-17 プログラム解析装置及びそのプログラム並びにプログラム記録媒体

Publications (1)

Publication Number Publication Date
JP2002342110A true JP2002342110A (ja) 2002-11-29

Family

ID=18992806

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001147298A Pending JP2002342110A (ja) 2001-05-17 2001-05-17 プログラム解析装置及びそのプログラム並びにプログラム記録媒体

Country Status (1)

Country Link
JP (1) JP2002342110A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009259141A (ja) * 2008-04-21 2009-11-05 Jfe Steel Corp アプリケーションプログラム作成支援装置、データベースシステム、アプリケーションプログラム作成支援方法およびそのプログラム
WO2011151931A1 (ja) * 2010-06-02 2011-12-08 株式会社日立製作所 アプリケーションの解析方法、解析システム及び記録媒体
JP2018532171A (ja) * 2016-09-28 2018-11-01 平安科技(深▲せん▼)有限公司 Sql審査方法、サーバ及び記憶デバイス

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04112334A (ja) * 1990-09-03 1992-04-14 Nippon Telegr & Teleph Corp <Ntt> Sqlステートメント意味解析実現方式
JPH11265306A (ja) * 1998-03-16 1999-09-28 Ntt Data Corp 処理能力概算装置、処理能力概算方法及び記録媒体
JP2000259723A (ja) * 1999-03-09 2000-09-22 Toshiba Corp 情報関係チューニング装置及びプログラムを記憶したコンピュータ読み取り可能な記憶媒体

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04112334A (ja) * 1990-09-03 1992-04-14 Nippon Telegr & Teleph Corp <Ntt> Sqlステートメント意味解析実現方式
JPH11265306A (ja) * 1998-03-16 1999-09-28 Ntt Data Corp 処理能力概算装置、処理能力概算方法及び記録媒体
JP2000259723A (ja) * 1999-03-09 2000-09-22 Toshiba Corp 情報関係チューニング装置及びプログラムを記憶したコンピュータ読み取り可能な記憶媒体

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009259141A (ja) * 2008-04-21 2009-11-05 Jfe Steel Corp アプリケーションプログラム作成支援装置、データベースシステム、アプリケーションプログラム作成支援方法およびそのプログラム
WO2011151931A1 (ja) * 2010-06-02 2011-12-08 株式会社日立製作所 アプリケーションの解析方法、解析システム及び記録媒体
JP2011253363A (ja) * 2010-06-02 2011-12-15 Hitachi Ltd アプリケーションの解析方法、解析システム及び解析プログラム
US8898649B2 (en) 2010-06-02 2014-11-25 Hitachi, Ltd. Application program analysis method, analysis system and recording medium for identifying a contributing factor for an invalid operation of an application program
JP2018532171A (ja) * 2016-09-28 2018-11-01 平安科技(深▲せん▼)有限公司 Sql審査方法、サーバ及び記憶デバイス

Similar Documents

Publication Publication Date Title
US20040221262A1 (en) Processing macro information and displaying via GUI in different tools
US8566810B2 (en) Using database knowledge to optimize a computer program
US7424646B2 (en) Imposing a logical structure on an unstructured trace record for trace analysis
US20050114842A1 (en) System and method for whole-system program analysis
US20120198423A1 (en) Code Path Tracking
JP3280332B2 (ja) ループに対するバージョニングを実行する方法及び装置、配列レンジ・チェックに関する情報をベーシック・ブロック内において収集する方法及び装置、配列レンジ・チェックに関する情報を変更する方法、配列レンジ・チェック最適化方法、配列レンジ・チェックのためのコードを生成する方法、不要配列レンジ・チェック除去方法及び装置、配列レンジ・チェックを選択する方法、配列レンジ・チェック変更方法、配列レンジ・チェック収集方法、及び配列レンジ・チェック取扱判断方法
CN110851830B (zh) 基于指令格式识别的面向cpu未公开指令发现方法
CN113468525B (zh) 针对二进制程序的相似漏洞检测方法及装置
CN107220175B (zh) 应用程序死循环定位方法、装置、计算机设备和存储介质
US20030101336A1 (en) Technique for associating instructions with execution events
CN111914260A (zh) 一种基于函数差分的二进制程序漏洞检测方法
CN101895517A (zh) 一种脚本语义提取方法和提取装置
JP2002342110A (ja) プログラム解析装置及びそのプログラム並びにプログラム記録媒体
CN101373506B (zh) 一种基于漏洞模型的软件漏洞模型检测方法
EP2599042A1 (en) Systems and methods of rapid business discovery and transformation of business processes
US8090990B2 (en) Abnormal pattern detection program for function call in source program
CN113918948B (zh) 一种基于语义分析的无害化处理识别方法
CN110688303A (zh) 一种基于一体化开发平台的软件工件关系的挖掘方法
JP3550748B2 (ja) コンパイラ装置
US7844627B2 (en) Program analysis method and apparatus
WO2021104027A1 (zh) 代码性能检测方法、装置、设备及存储介质
JP4055197B2 (ja) プログラムに含まれる手続きの解析装置
Akbari et al. Vulnerability detector using parse tree annotation
Henry et al. Complexity measurement of a graphical programming language
CN106547531A (zh) 基于php的应用性能管理方法及其模块

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20071219

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20091013

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100427

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100625

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20100625

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20100625

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100720