JP7148802B2 - 解析プログラム、解析方法および解析装置 - Google Patents
解析プログラム、解析方法および解析装置 Download PDFInfo
- Publication number
- JP7148802B2 JP7148802B2 JP2019010754A JP2019010754A JP7148802B2 JP 7148802 B2 JP7148802 B2 JP 7148802B2 JP 2019010754 A JP2019010754 A JP 2019010754A JP 2019010754 A JP2019010754 A JP 2019010754A JP 7148802 B2 JP7148802 B2 JP 7148802B2
- Authority
- JP
- Japan
- Prior art keywords
- query
- analysis
- module
- database
- predetermined format
- 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.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
[第1の実施の形態]
第1の実施の形態を説明する。
第1の実施の形態の解析装置10は、既存ソフトウェアによるデータベースクエリの発行を解析する。解析装置10をコンピュータや情報処理装置と言うこともできる。解析装置10は、クライアント装置でもよいしサーバ装置でもよい。
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の解析装置のハードウェア例を示す図である。
図3は、複数の業務ロジックの連携例を示す図である。
解析対象のアプリケーションソフトウェアは、複数の業務ロジックを含む。1つの業務ロジックは、1つの業務機能を実現するソフトウェア部品であり、他のメソッドから呼び出し可能なメソッドの集合である。複数の業務ロジックは、グローバル変数やデータベースなどのデータストアを介してデータ依存関係をもつことがある。
データベース31を利用する業務ロジックは、最終的にDBアクセッサ36にデータベース31のテーブル操作を依頼する。DBアクセッサ36は、SQL文を受け付け、受け付けたSQL文に従ってレコードの検索、挿入、更新、削除などのテーブル操作を実行するデータベースアクセスプログラムである。DBアクセッサ36は、プログラミング言語が用意するDBC(Database Connectivity)などデータベースアクセスAPIでもよいし、ORMなどのデータベースアクセスライブラリでもよい。
データベース31を使用する業務ロジック60を解析することを考える。解析装置100は、DBアクセッサ36をダミーDBアクセッサ37に置換して業務ロジック60を実行する。ダミーDBアクセッサ37は、SQL文を受け付け、受け付けたSQL文に応じたデータベース31のテーブル操作を実行せず、受け付けたSQL文を記録するダミープログラムである。例えば、ダミーDBアクセッサ37は、テーブルBに新規レコードを挿入するINSERT命令を示すSQL文41を受け付け、受け付けたSQL文41を記録する。このとき、ダミーDBアクセッサ37は、データベース31に対して、テーブルBに新規レコードを挿入するテーブル操作を実行しない。
正しい構文のSQL文は、テーブル操作の種類を示すコマンド名と、操作対象テーブルを示すテーブル名とを少なくとも含むSQL文である。コマンド名は、SELECT、INSERT、UPDATE、DELETEなどである。カラム名を要するコマンドについては、正しい構文のSQL文は、コマンド名とテーブル名とカラム名を少なくとも含むSQL文である。一方、正しい構文のSQL文は、挿入するレコードのカラム値、更新後のレコードのカラム値、レコード検索条件であるWHERE句のカラム値など、具体的なカラム値を含まなくてよい。具体的なカラム値は、クエリ決定メソッドに対して適切な引数を与えればSQL文に設定されると考えられるためである。
図7は、解析装置の機能例を示すブロック図である。
解析装置100は、ソースコード記憶部121、ライブラリ記憶部122、ソースコード解析部123、バイトコード解析部124、呼び出し関係記憶部125、メソッド探索部126、プログラム実行部127、解析結果記憶部128および解析結果表示部129を有する。ソースコード記憶部121、ライブラリ記憶部122および呼び出し関係記憶部125は、例えば、RAM102またはHDD103の記憶領域を用いて実現される。その他のユニットは、例えば、CPU101が実行するプログラムを用いて実現される。
解析結果表示部129は、解析結果記憶部128に記憶された解析結果を表示装置111に表示する。なお、解析装置100は、プリンタなど表示装置111以外の出力デバイスに解析結果を出力してもよいし、他の情報処理装置に解析結果を送信してもよい。
ソースコード131は、ソースコード記憶部121に記憶されるアプリケーションソフトウェアのソースコードである。ソースコード131は、オブジェクト指向言語で記述されている。ソースコード131には、クラスTimeRecordRegistBeanが記述されている。クラスTimeRecordRegistBeanは、メソッドinsertを含む。メソッドinsertは、クラスTimeRecordDtoInterfaceのオブジェクトを引数dtoとして受け付ける。メソッドinsertを実行開始位置に設定する場合、解析装置100は、引数dtoにnullを代入することになる。メソッドinsertは、同じクラスのメソッドvalidate、クラスMospParamsのメソッドhasErrorMessage、同じクラスのcheckInsert、クラスTmdTimeRecordDaoのメソッドnextRecordId、クラスTmdTimeRecordDaoのメソッドinsertを呼び出すことがある。
呼び出し関係テーブル132は、呼び出し関係記憶部125に記憶される。呼び出し関係テーブル132には、ソースコード解析部123によるソースコード解析で検出された呼び出し関係が登録される。また、呼び出し関係テーブル132には、バイトコード解析部124によるバイトコード解析で検出された呼び出し関係も登録される。
呼び出し関係グラフ70は、メソッド間の呼び出し関係を示す有向グラフである。呼び出し関係グラフ70は、メソッドに対応するノードと呼び出し関係に対応する単方向エッジとを含む。あるノードから他のノードに向かうエッジは、前者のノードに対応するメソッドが後者のノードに対応するメソッドを呼び出すことがあることを意味する。
ソースコード133には、クラスTmdTimeRecordDaoが記述されている。クラスTmdTimeRecordDaoは、メソッドprepareStatementとメソッドinsertを含む。メソッドprepareStatementは前述のノード74に対応し、メソッドinsertは前述のノード73に対応する。メソッドinsertはメソッドprepareStatementを呼び出すことがある。メソッドprepareStatementは、文字列を引数sqlとして受け付ける。メソッドinsertは、インタフェースBaseDtoInterfaceの実装クラスのオブジェクトを引数baseDtoとして受け付ける。
解析結果表示部129は、解析結果画面80を生成して表示装置111に表示する。解析結果画面80は、入力フィールド81および解析結果テーブル82を含む。解析結果テーブル82は、解析結果記憶部128に記憶されている。
図13は、呼び出し関係解析の手順例を示すフローチャートである。
(S10)バイトコード解析部124は、ライブラリ記憶部122に記憶されたライブラリのうち未解析のライブラリを1つ選択する。
(S14)ソースコード解析部123は、ステップS13で選択したメソッドから呼び出されている呼び出し先メソッドをソースコードから抽出し、呼び出し関係を検出する。ソースコード解析部123は、検出した呼び出し関係を、呼び出し関係テーブル132に記録する。呼び出し関係は、呼び出し元クラス、呼び出し元メソッド、呼び出し先クラスおよび呼び出し先メソッドの組で特定される。
(S20)メソッド探索部126は、ユーザから始点メソッドの指定を受け付ける。
(S21)メソッド探索部126は、指定された始点メソッドの呼び出し先メソッドを呼び出し関係テーブル132から検索し、未探索リストに追加する。
(S23)メソッド探索部126は、ステップS22で選択したメソッドが基点メソッドであるか判断する。例えば、メソッド探索部126は、選択したメソッドの呼び出し先クラスを呼び出し関係テーブル132から検索する。メソッド探索部126は、呼び出し先クラスにDBアクセッサが含まれる場合、選択したメソッドが基点メソッドであると判断し、呼び出し先クラスにDBアクセッサが含まれない場合、選択したメソッドが基点メソッドでないと判断する。選択したメソッドが基点メソッドである場合はステップS24に進み、基点メソッドでない場合はステップS25に進む。
(S25)メソッド探索部126は、選択したメソッドの呼び出し先メソッドを呼び出し関係テーブル132から検索し、未探索リストに追加する。
(S27)メソッド探索部126は、ステップS24で記録されたSQL文とメソッド名の対応関係を示すテーブルを解析結果として出力する。すなわち、メソッド探索部126は、SQL文とメソッド名のテーブルを解析結果記憶部128に格納する。解析結果表示部129は、SQL文とメソッド名のテーブルを表示装置111に表示する。
クエリ決定メソッド探索は、上記のステップS24で実行される。
(S30)メソッド探索部126は、基点メソッドを実行開始メソッドに指定する。
11 記憶部
12 処理部
13 解析対象プログラム
14 データベース
15,16,17 モジュール
18 クエリ
19 解析結果
Claims (6)
- コンピュータに、
解析対象プログラムに含まれる複数のモジュールの間の呼び出し関係を検出し、
前記複数のモジュールのうち第1のモジュールを起動し、
前記第1のモジュールの起動によってデータベースに対して生成されたクエリを取得し、前記取得したクエリが所定のフォーマットを満たしているか判定し、
前記所定のフォーマットを満たしていない場合、前記複数のモジュールのうち前記第1のモジュールの呼び出し元である第2のモジュールを起動し、
前記所定のフォーマットを満たすクエリが取得されるまで、起動するモジュールを呼び出し元に向かって遡ることで、前記所定のフォーマットを満たすクエリと当該クエリが生成されたときに起動されたモジュールとを示す解析結果を出力する、
処理を実行させる解析プログラム。 - 前記第1のモジュールは、クエリを受け付けて前記データベースに対してデータ操作を実行するデータベースアクセスプログラムの呼び出し元である、
請求項1記載の解析プログラム。 - 前記第1のモジュールの起動によって生成されたクエリは、クエリを受け付けて前記データベースに対してデータ操作を実行するデータベースアクセスプログラムを、受け付けたクエリを記録するダミープログラムに置換することで取得する、
請求項1記載の解析プログラム。 - 前記所定のフォーマットを満たすクエリは、前記データベースに対するデータ操作の種類を示すコマンド名と、操作対象のテーブルを示すテーブル名とを含むクエリである、
請求項1記載の解析プログラム。 - コンピュータが、
解析対象プログラムに含まれる複数のモジュールの間の呼び出し関係を検出し、
前記複数のモジュールのうち第1のモジュールを起動し、
前記第1のモジュールの起動によってデータベースに対して生成されたクエリを取得し、前記取得したクエリが所定のフォーマットを満たしているか判定し、
前記所定のフォーマットを満たしていない場合、前記複数のモジュールのうち前記第1のモジュールの呼び出し元である第2のモジュールを起動し、
前記所定のフォーマットを満たすクエリが取得されるまで、起動するモジュールを呼び出し元に向かって遡ることで、前記所定のフォーマットを満たすクエリと当該クエリが生成されたときに起動されたモジュールとを示す解析結果を出力する、
解析方法。 - 解析対象プログラムを記憶する記憶部と、
前記解析対象プログラムに含まれる複数のモジュールの間の呼び出し関係を検出し、前記複数のモジュールのうち第1のモジュールを起動し、前記第1のモジュールの起動によってデータベースに対して生成されたクエリを取得し、前記取得したクエリが所定のフォーマットを満たしているか判定し、前記所定のフォーマットを満たしていない場合、前記複数のモジュールのうち前記第1のモジュールの呼び出し元である第2のモジュールを起動し、前記所定のフォーマットを満たすクエリが取得されるまで、起動するモジュールを呼び出し元に向かって遡ることで、前記所定のフォーマットを満たすクエリと当該クエリが生成されたときに起動されたモジュールとを示す解析結果を出力する処理部と、
を有する解析装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019010754A JP7148802B2 (ja) | 2019-01-25 | 2019-01-25 | 解析プログラム、解析方法および解析装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019010754A JP7148802B2 (ja) | 2019-01-25 | 2019-01-25 | 解析プログラム、解析方法および解析装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2020119348A JP2020119348A (ja) | 2020-08-06 |
JP7148802B2 true JP7148802B2 (ja) | 2022-10-06 |
Family
ID=71890916
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2019010754A Active JP7148802B2 (ja) | 2019-01-25 | 2019-01-25 | 解析プログラム、解析方法および解析装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP7148802B2 (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012088266A2 (en) | 2010-12-22 | 2012-06-28 | Incyte Corporation | Substituted imidazopyridazines and benzimidazoles as inhibitors of fgfr3 |
CA2909207C (en) | 2013-04-19 | 2021-11-02 | Incyte Corporation | Bicyclic heterocycles as fgfr inhibitors |
US10851105B2 (en) | 2014-10-22 | 2020-12-01 | Incyte Corporation | Bicyclic heterocycles as FGFR4 inhibitors |
MA41551A (fr) | 2015-02-20 | 2017-12-26 | Incyte Corp | Hétérocycles bicycliques utilisés en tant qu'inhibiteurs de fgfr4 |
WO2019213544A2 (en) | 2018-05-04 | 2019-11-07 | Incyte Corporation | Solid forms of an fgfr inhibitor and processes for preparing the same |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010049489A (ja) | 2008-08-21 | 2010-03-04 | Toshiba Corp | デバッグ支援装置およびデバッグ支援プログラム |
WO2011151931A1 (ja) | 2010-06-02 | 2011-12-08 | 株式会社日立製作所 | アプリケーションの解析方法、解析システム及び記録媒体 |
WO2013161195A1 (ja) | 2012-04-26 | 2013-10-31 | 日本電気株式会社 | プログラム単体テスト支援装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07225707A (ja) * | 1994-02-10 | 1995-08-22 | Fujitsu Ltd | アプリケーションのテスト方法及びそのテスト支援装置 |
-
2019
- 2019-01-25 JP JP2019010754A patent/JP7148802B2/ja active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010049489A (ja) | 2008-08-21 | 2010-03-04 | Toshiba Corp | デバッグ支援装置およびデバッグ支援プログラム |
WO2011151931A1 (ja) | 2010-06-02 | 2011-12-08 | 株式会社日立製作所 | アプリケーションの解析方法、解析システム及び記録媒体 |
WO2013161195A1 (ja) | 2012-04-26 | 2013-10-31 | 日本電気株式会社 | プログラム単体テスト支援装置 |
Non-Patent Citations (2)
Title |
---|
倉田 涼史,実行時のログを利用したDBを介した業務アプリケーションの影響波及分析,レクチャーノート/ソフトウェア学43 ソフトウェア工学の基礎XXIV,株式会社近代科学社,2017年11月30日,pp.73~82 |
芦田 佳行,実行履歴を利用したソースプログラムの部分解析に基づくスライス抽出技法の提案,電子情報通信学会技術研究報告,社団法人電子情報通信学会,1999年05月20日,第99巻 第71号,pp.17~24,SS93-3 |
Also Published As
Publication number | Publication date |
---|---|
JP2020119348A (ja) | 2020-08-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7148802B2 (ja) | 解析プログラム、解析方法および解析装置 | |
AU2019262864B2 (en) | Execution control with cross-level trace mapping | |
US5850554A (en) | Compiler tool set for efficiently generating and easily managing multiple program versions of different types | |
US8601016B2 (en) | Pre-generation of structured query language (SQL) from application programming interface (API) defined query systems | |
US20180024911A1 (en) | Software code debugger for quick detection of error root causes | |
US20070168909A1 (en) | System And Method For Context-Sensitive Help In A Design Environment | |
EP3785125B1 (en) | Selectively tracing portions of computer process execution | |
US9588872B2 (en) | Discovery of code paths | |
US9317607B2 (en) | Executing a fast crawl over a computer-executable application | |
US20080313208A1 (en) | Apparatus, system, and method for automated context-sensitive message organization | |
US10990515B2 (en) | Automated unit testing in a mainframe environment | |
US9311077B2 (en) | Identification of code changes using language syntax and changeset data | |
US8478953B2 (en) | Buffer snapshots from unmodifiable data piece tables | |
CN109284222B (zh) | 软件单元、数据处理系统中的项目测试方法、装置及设备 | |
JP2023024966A (ja) | スタック使用量を監視するコンピュータ実装方法、コンピュータシステム及びコンピュータプログラム(プログラムを最適化するためのスタックメモリ使用量の監視) | |
US10839124B1 (en) | Interactive compilation of software to a hardware language to satisfy formal verification constraints | |
JP7082284B2 (ja) | 分析支援方法および分析支援プログラム | |
Gabrijelčič | Mastering Delphi Programming: A Complete Reference Guide: Learn all about building fast, scalable, and high performing applications with Delphi | |
JP6955162B2 (ja) | 解析装置、解析方法および解析プログラム | |
Falchi | IT tools for the management of multi—Representation geographical information | |
JP2018045619A (ja) | 解析プログラム、解析方法、及び解析装置 | |
Gabrijelčič | Delphi High Performance: Build fast Delphi applications using concurrency, parallel programming and memory management | |
US20230418574A1 (en) | Using a semantic tree of a compiler to execute a semantic code query against source code | |
US20240045658A1 (en) | Reducing code path permutations | |
Yannes | The Future of Android with Liquid Development |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20211007 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20211011 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20211011 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20220719 |
|
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: 20220823 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20220905 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 7148802 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |