JP2018181121A - 分析装置、分析プログラム及び分析方法 - Google Patents

分析装置、分析プログラム及び分析方法 Download PDF

Info

Publication number
JP2018181121A
JP2018181121A JP2017082343A JP2017082343A JP2018181121A JP 2018181121 A JP2018181121 A JP 2018181121A JP 2017082343 A JP2017082343 A JP 2017082343A JP 2017082343 A JP2017082343 A JP 2017082343A JP 2018181121 A JP2018181121 A JP 2018181121A
Authority
JP
Japan
Prior art keywords
processing
sql
executed
log information
api
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
JP2017082343A
Other languages
English (en)
Other versions
JP6870454B2 (ja
Inventor
光幾 加藤
Koki Kato
光幾 加藤
武 安家
Takeshi Ake
武 安家
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 JP2017082343A priority Critical patent/JP6870454B2/ja
Publication of JP2018181121A publication Critical patent/JP2018181121A/ja
Application granted granted Critical
Publication of JP6870454B2 publication Critical patent/JP6870454B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

【課題】プログラム内に存在する再利用可能な範囲を特定することを目的とする。【解決手段】所定の業務アプリケーションの仕様を分析する分析装置であって、業務アプリケーションの実行においてアクセスされるデータベースのアクセス処理のログ情報を取得する取得部と、前記ログ情報に基づき、前記データベースのアクセス処理において連続する処理のうちの一部分であって、重複して実行される処理部分を抽出する第1の抽出部と、抽出した前記重複して実行される処理部分に含まれる処理のそれぞれを呼び出すメソッドを抽出する第2の抽出部と、抽出した前記メソッドから更新されるテーブルのうち、前記処理部分に含まれる処理のそれぞれを実行したときに更新されるテーブル以外の他のテーブルを更新しないメソッドに、APIを設定し、利用可能とする設定部と、を有する分析装置が提供される。【選択図】図7

Description

本発明は、分析装置、分析プログラム及び分析方法に関する。
業務アプリケーションは、度重なる機能の追加により、プログラム及び使用するデータが複雑な関係となっていることがある。この場合、機能変更や追加等の保守がし難く、保守コストが増大する傾向にある。そこで、機能変更や追加等をするときに、既存の業務アプリケーションのデータを外部システムから活用する、Web API(Application Programming Interface)等のAPIを利用することが行われている。
また、例えば、業務機能とプログラムとそれがアクセスするデータを対応付け、業務機能が実現する業務仕様の作成を支援する技術が知られている(例えば、特許文献1参照)。これによれば、受注登録業務や得意先登録業務等の業務機能を実現するために画面から入力する項目とプログラムの入出力項目とを解析し、業務間に存在する依存関係を抽出し、提示する。
特開2009−116638号公報 特開2016−57722号公報 特開2012−123582号公報 特開2009−230618号公報 特開2013−218380号公報
しかし、特許文献1では、プログラムと入出力されるテーブルとの対応が業務機能単位で抽出されるに留まり、プログラム内に存在する再利用可能な範囲を特定することはできない。また、業務実行時にまとまってアクセスされるデータベース内のテーブル群を検出できない。そのため、業務アプリケーションのあるメソッドにAPIを追加すると、どのような業務を実行するためにSQLが発行され、データベース内のどのテーブルに影響があるかを把握することは困難である。
一方、業務アプリケーションは、機能追加をする時点で、該当システムの開発担当者がいないとか、ドキュメントの保守がされていない場合がある。この場合、API提供側では、機能追加によってデータ間に不整合が起こらないように、どこにどのような粒度のAPIを設ければ良いかが不明である。
そこで、1つの側面では、本発明は、プログラム内に存在する再利用可能な範囲を特定することを目的とする。
1つの実施態様では、所定の業務アプリケーションの仕様を分析する分析装置であって、業務アプリケーションの実行においてアクセスされるデータベースのアクセス処理のログ情報を取得する取得部と、前記ログ情報に基づき、前記データベースのアクセス処理において連続する処理のうちの一部分であって、重複して実行される処理部分を抽出する第1の抽出部と、抽出した前記重複して実行される処理部分に含まれる処理のそれぞれを呼び出すメソッドを抽出する第2の抽出部と、抽出した前記メソッドから更新されるテーブルのうち、前記処理部分に含まれる処理のそれぞれを実行したときに更新されるテーブル以外の他のテーブルを更新しないメソッドに、APIを設定し、利用可能とする設定部と、を有する分析装置が提供される。
1つの側面では、本発明は、プログラム内に存在する再利用可能な範囲を特定することができる。
一実施形態に係るシステムのハードウェア構成の一例を示す図。 一実施形態に係る業務用DBの一例を示す図。 一実施形態に係るAPサーバと分析装置の機能構成の一例を示す図。 一実施形態に係る動作ログ情報DBに格納された実行テーブルの一例を示す図。 一実施形態に係る動作ログ情報DBに格納された実行テーブルの一例を示す図。 一実施形態に係る動作ログ情報DBに格納された実行テーブルの一例を示す図。 一実施形態に係る分析処理の一例を示すフローチャート。 一実施形態に係る類似度判定処理の一例を示すフローチャート。 一実施形態に係る類似度判定処理の結果の一例を示す図。 一実施形態に係る冗長部分の削除処理の一例を示すフローチャート。 一実施形態に係る冗長部分の削除処理の結果の一例を示す図。 一実施形態に係る冗長部分の削除処理の結果の一例を示す図。 一実施形態に係る部分SQL列生成処理の一例を示すフローチャート。 一実施形態に係る部分SQL列生成処理の結果の一例を示す図。 一実施形態に係る親メソッドの抽出例を説明するための図。 一実施形態に係るAPIの設定テーブルの一例を示す図。
以下、本発明の実施形態について添付の図面を参照しながら説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複した説明を省く。
[はじめに]
業務アプリケーションは、機能追加をする時点で、該当システムの開発担当者がいないとか、ドキュメントの保守がされていない場合がある。この場合、API提供側では、機能追加によってデータ間に不整合が起こらないような粒度のAPIを設ける必要がある。
一方、業務アプリケーションがデータベース内のデータを利用する場合、業務に対応するまとまりを持つ複数のSQLを発行することがある。そのようなSQLを実行するクラス及びメソッドのかたまりは、上記のAPIとしての粒度として適切で、API追加の候補になると考えられる。
そこで、本実施形態に係るシステムは、業務アプリケーションのプログラム理解支援のリバースエンジニアリングに関し、既存業務アプリケーションのうち、データ間に不整合が起こらないような粒度のSQL処理を抽出し、抽出結果に基づきAPIを設定し、本システムの内部及び外部から再利用可能とする。
[システム構成/ハードウェア構成]
まず、一実施形態に係るシステムのハードウェア構成の一例について、図1を参照しながら説明する。図1は、一実施形態に係るシステムのハードウェア構成の一例を示す。本実施形態に係るシステムは、分析装置10、アプリケーションサーバ(以下、「APサーバ」と表記する。)20及びクライアント端末30を有する。分析装置10、APサーバ20及びクライアント端末30は、インターネット等のネットワーク40を介して接続可能である。クライアント端末30は、入出力装置31に接続されてもよい。
クライアント端末30は、Webブラウザを使用して、要求する業務の登録画面を表示する。本実施形態の例では、クライアント端末30は、受注登録画面を表示する。受注登録画面には、商品として扱える一覧が表示されてもよい。
クライアント端末30は、どのような電子機器であってもよく、一例としては、パーソナルコンピュータ、スマートフォン、PDA(Personal Digital Assistants)、タブレット型端末、携帯電話、サーバ等が挙げられる。クライアント端末30は、HMD(Head Mount Display)、FMD(Face Mount Display)等のウェアラブル機器であってもよい。
ユーザは、受注登録画面に対して、例えば得意先コード(以下、「CD」と表記する。)、商品CD、商品数量を入力する。APサーバ20は、ユーザが画面から入力したデータ項目を受け付け、特定の業務アプリケーションを実行する。分析装置10は、APサーバ20にて実行された特定の業務アプリケーションの仕様を分析する。
ユーザは、クライアント端末30の画面に直接、必要なデータ項目を入力してもよいし、クライアント端末30と通信可能な入出力装置31を使用して必要なデータ項目を入力してもよい。入出力装置31は、どのような電子機器であってもよく、スマートフォン、タブレット型端末、HMD、FMD等であり得る。
(APサーバのハードウェア構成)
APサーバ20は、業務アプリケーションを実行する。APサーバ20は、プロセッサ201、入力インタフェース(以下、インタフェースを「I/F」と表記する。)202、通信I/F203及びメモリ204を有する。
メモリ204には、動作ログ情報DB205及び業務アプリケーションプログラム群206が記憶されている。動作ログ情報DB205は、プロセッサ201が実行した業務アプリケーションの動作履歴を示す動作ログ情報を記憶する。動作ログ情報DB205には、業務アプリケーションの実行においてアクセスされるデータベースのアクセス処理のログ情報(動作ログ情報)が含まれている。本実施形態では、業務アプリケーションの実行においてアクセスされるデータベースのアクセス処理の一例として、業務用データベース(以下、データベースを「DB」と表記する。)300をアクセスする場合を例に挙げて説明する。
図2は、一実施形態に係る業務用DB300の一例を示す。業務用DB300には、利用者マスタテーブルT1、商品マスタテーブルT2、得意先マスタテーブルT3、在庫テーブルT4、受注明細テーブルT5、受注テーブルT6、EDI(Electronic Data Interchange;電子データ交換)履歴テーブルT7等、業務アプリケーションがアクセスする各種テーブルが格納されている。業務用DB300は、APサーバ20に取り付けられたHDD(Hard Disk Drive)等の周辺機器に記憶されてもよいし、クラウド上の他のサーバ機器に記憶されてもよい。業務用DB300は、リレーショナルデータベース(RDB)の一例である。
なお、本実施形態では、動作ログ情報DB205及び業務アプリケーションプログラム群206はメモリ204に記憶されているが、業務用DB300と同様に、APサーバ20に取り付けられたHDD等の周辺機器や、クラウド上の記憶装置に記憶されてもよい。
プロセッサ201は、メモリ204に記憶された業務アプリケーションプログラム群206のうちの所定の業務アプリケーションを実行することで、所定の業務処理を実行する。所定の業務処理には、受注処理、在庫処理、伝票処理等、いかなる業務が含まれていてもよい。
(分析装置のハードウェア構成)
分析装置10は、所定の業務アプリケーションの仕様を分析する機器である。分析装置10は、CPU(Central Processing Unit)101、入力I/F102、通信I/F103、表示I/F104、外部I/F105及びメモリ106を有する。
メモリ106には、分析用テーブル107、動作ログ抽出テーブル108、API設定テーブル109及び分析プログラム110が記憶されている。分析用テーブル107は、業務アプリケーションの仕様を分析する際に使用する。動作ログ抽出テーブル108は、動作ログ情報DB205に蓄積された業務アプリケーションの動作ログ情報のうち、APサーバ20から転送された分析対象の動作ログ情報を記憶する。API設定テーブル109は、分析結果、再利用可能なAPIの情報を記憶する。分析プログラム110は、分析装置10が業務アプリケーションの仕様を分析する際に実行するプログラムである。
なお、本実施形態では分析用テーブル107、動作ログ抽出テーブル108、API設定テーブル109及び分析プログラム110はメモリ106に記憶されているが、分析装置10に取り付けられたHDD等の周辺機器に記憶されてもよいし、クラウド上の記憶装置に記憶されてもよい。
[機能構成]
次に、一実施形態に係るAPサーバ20及び分析装置10の機能構成の一例について、図3を参照しながら説明する。図3は、一実施形態に係るAPサーバ20及び分析装置10の機能構成の一例を示す。
(APサーバの機能構成)
APサーバ20は、受付部21、認証部22、実行部23、通信部24及び記憶部25を有する。ユーザは、クライアント端末30に表示したログイン画面からユーザID及びパスワードを入力する。受付部21は、入力したユーザID及びパスワードを受け付け、認証部22は、受け付けたユーザID及びパスワードに基づき、正規のユーザであるかを認証する。
正規のユーザである場合、本実施形態の例では、クライアント端末30は、Webブラウザを使用して受注登録画面を表示する。ただし、表示される画面は、受注登録画面に限らず、他の業務に関する画面であってもよい。
ユーザは、受注登録画面に対して、例えば得意先コード(以下、「CD」と表記する。)、商品CD、商品数量を入力する。受付部21は、ユーザが画面から入力したデータ項目を受け付ける。
実行部23は、入力したデータ項目のいずれかを引数として業務アプリケーションプログラム群206のうち、特定の業務に関するアプリケーションプログラム(以下、「アプリケーション」ともいう。)を呼び出す。例えば、受注処理において、消しゴム及び鉛筆の受注をする場合、ユーザは、伝票明細に消しゴムを10個、鉛筆を100個と入力したとする。APサーバ20は、入力したデータ項目に対して業務アプリケーションプログラム群206のうち、受注の業務アプリケーションを実行する。実行した結果、消しゴム10個、鉛筆100個という2つの受注明細が書かれた伝票が登録される。
このとき、APサーバ20のプロセッサ201は、業務アプリケーションプログラム群206の中から受注業務アプリケーションを選び、実行する。実行部23は、受注業務アプリケーションの実行により行われる受注処理において業務用DB300にアクセスし、業務用DB300の受注明細テーブルT5及び受注テーブルT6から必要な情報を読み出したり、受注明細テーブルT5及び受注テーブルT6を更新(書き込む)したりする動作が実行される。
例えば、受注処理において、使用される伝票本体が示す「受注」と伝票に書かれている内容を示す「受注明細」とは組になって扱われる。よって、受注処理において業務用DB300にアクセスするとき、図2に示す受注テーブルT6と受注明細テーブルT5とは組になってアクセスされる。
このように、データベースのアクセス処理では、組にして同時に更新しなければならないテーブルが存在する。よって、特定の処理の場合、一方のテーブルのみにアクセスすることは、データの不整合が生じるためにできず、両方のテーブルにアクセスする必要がある。本実施形態では、以上のようにユーザによって画面入力されたデータ項目に基づき行われる処理の一連の流れを業務機能として定義し、この業務機能で利用される画面の集合をユーザからの主な入力とする。実行部23は、ユーザによって画面入力されたデータ項目に基づき特定される業務アプリケーションを実行する。実行部23は、EDI受信によるデータ項目に基づき特定される業務アプリケーションを実行してもよい。
通信部24は、クライアント端末30又は分析装置10と通信する。通信部24は、複数のクライアント端末30と通信することができる。
本実施形態では、予め、分析対象の業務アプリケーションに、SQLとスタックトレースを抽出するプローブを設置する。例えば業務アプリケーションがJava(登録商標)で実装されている場合、プローブの設置には、公知のBytecode Injection技術を用いることができ、データベースアクセスを行う時に動作ログ情報を出力するようにバイトコードを変更する。例えば次の文献に記述されている方法が適用可能である。Cleve, Hainaut, "Dynamic Analysis of SQL Statements for Data-Intensive Applications Reverse Engineering", 2008.
プローブの設置により、業務アプリケーションにおいて、画面入力などをきっかけにして業務機能実行単位を実行するごとに、データベース(業務用DBなど)に対して発行したSQL文と、スタックトレース(stack trace)からなる動作ログ情報が取得可能となる。スタックトレースは、SQL文を発行したメソッドからメソッドの呼び出し関係をさかのぼったメソッド名一覧である。
ある業務機能実行単位で発行されたSQL文の列(SQL列)を識別する手段としては、例えば業務アプリケーションがJavaで実装されている場合は同一のスレッドIDで発行されたSQLをその発行順にまとめることで識別できる。
記憶部25は、動作ログ情報DB205を有する。実行部23は、業務アプリケーション実行時に、業務アプリケーションに設置したプローブを用いて、ユーザの画面入力又はEDI受信ごとに発行されるSQL列とスタックトレースからなる動作ログ情報を抽出し、動作ログ情報DB205に記憶する。APサーバ20は、動作ログ情報DB205にある程度蓄積された動作ログ情報を分析装置10に一括して転送してもよいし、動作ログ情報が生成される度に分析装置10に転送してもよい。
図4〜図6に、一実施形態に係る動作ログ情報を格納する動作ログ情報DB205内の実行テーブルの一例を示す。図4〜図6には、業務アプリケーション実行中に行われたデータベースアクセス処理において、動作ログ情報DB205に格納された所定のテーブルをアクセスしたときの動作ログ情報の一例を示す。動作ログ情報は、業務アプリケーションの画面ないしEDI受信の実行を単位とし、SQLとスタックトレースからなる。図4〜図6の例では、6回分の実行1〜6にかかる動作ログ情報を記憶した6つの実行テーブルが示されている。
なお、図4〜図6の例では、スタックトレースはDBアクセス用ライブラリ(f.Daoクラス)を実行したときに取得した場合を示し、データベースドライバに関するスタックトレースは省略する。スタックトレースはクラス名#メソッド名の並びで表記し、データベースアクセス側から呼び出し元への順に並んでいる。
以上に説明した機能構成のうち、受付部21の機能は、例えば図1の入力I/F202により実現可能である。認証部22の機能は、例えばプロセッサ201が所定の認証プログラムを実行することで実現可能である。実行部23の機能は、例えばプロセッサ201が業務アプリケーションプログラム群206のうちの特定の業務アプリケーションを実行することで実現可能である。通信部24の機能は、例えば通信I/F203により実現可能である。記憶部25の機能は、例えばメモリ204により実現可能である。
(分析装置の機能構成)
分析装置10は、取得部11、解析部12、第1の抽出部13、第2の抽出部14、設定部15、表示処理部16、通信部17及び記憶部18を有する。取得部11は、業務アプリケーションの実行においてアクセスされるデータベースのアクセス処理の動作ログ情報を取得する。本実施形態では、取得部11は、APサーバ20から転送された、動作ログDB205に蓄積された動作ログ情報を取得する。解析部12は、業務機能毎に業務の実行状態を解析する。
第1の抽出部13は、動作ログ情報に基づき、業務用DB300のアクセス処理において連続する処理のうちの一部分であって、重複して実行される処理部分を抽出する。第1の抽出部13は業務用DB300のアクセス処理の連続する処理のうちの一部分が、所定の閾値以上一致する場合、前記重複して実行される処理部分として抽出してもよい。
第2の抽出部14は、抽出した、重複して実行される処理部分に含まれる処理のそれぞれを呼び出すメソッドを抽出する。
設定部15は、抽出したメソッドから更新されるテーブルのうち、前記重複して実行される処理部分に含まれる処理のそれぞれを実行したときに更新されるテーブル以外の他のテーブルを更新しないメソッドに、API(Application Program Interface)を設定し、本システムの内部及び外部から利用可能とする。
表示処理部16は、分析結果を表示する処理を行う。表示処理部16は、設定したAPIをWebブラウザ等を用いてクライアント端末30のディスプレイ等に表示し、ユーザに利用可能とする。通信部17は、APサーバ20及びクライアント端末30と通信する。
記憶部18は、分析した情報を分析用テーブル107に記憶する。また、記憶部18は、APサーバ20から転送された動作ログ情報を記憶する。また、記憶部18は、分析の結果、設定部15が設定したAPIに関する情報を記憶する。さらに、記憶部18は、所定の業務アプリケーションの仕様を分析するための分析プログラム110を記憶する。
以上に説明した機能構成のうち、取得部11の機能は、例えば図1の入力I/F102により実現可能である。解析部12、第1の抽出部13、第2の抽出部14及び設定部15の機能は、例えばCPU101が分析プログラム110を実行することで実現可能である。表示設定部16の機能は、例えば表示I/F104により実現可能である。通信部17の機能は、例えば通信I/F103により実現可能である。記憶部18の機能は、例えばメモリ107により実現可能である。
本実施形態に係るシステムでは、画面ないしEDI受信の実行を一単位として、単位毎に発行されたSQL列から重複して実行される部分SQL命令列(以下、「部分SQL列」ともいう。)を抽出し、部分SQL列をまとめて実行する共通の親メソッドを、スタックトレースを用いて抽出する。この親メソッドが、部分SQL列でアクセスするテーブル以外を更新しないとき、この親メソッドを再利用の候補とし、APIを設置する。
部分SQL列とは、業務アプリケーションから特定の業務の塊で実行される処理部分をいい、2個以上のSQLから構成され、どういうSQLが連続して実行されるかを示す。言い換えれば、部分SQL列とは、データベースアクセス処理の連続する処理のうちの一部分であって、特定の業務の塊で実行される処理部分をいう。親メソッドとは、部分SQL列のそれぞれを呼び出すメソッドをいう。つまり、部分SQL列に含まれるすべてのSQLは、同じ親メソッドから呼び出される関係にある。
[分析処理]
次に、本実施形態に係る分析処理について説明する。本実施形態では、Javaで実装された業務アプリケーションを想定し、あるメソッドがデータベースにアクセスしたときに、SQL文とメソッドでのスタックトレースを取得するプローブを設定しておく。また、業務アプリケーションが用いるテーブル名T1〜T7・・・が持つカラム名を図2に示す。テーブル名は、テーブルの業務的な意味を示す。
本実施形態に係る分析処理の一例について図7を参照して説明する。図7は、一実施形態に係る分析処理の一例を示したフローチャートである。以下の処理は、分析装置10により実行される。
本処理が開始されると、取得部11は、APサーバ20から画面毎のSQL列とスタックトレースを有する動作ログ情報を取得する(ステップS1)。次に、解析部12は、取得したSQLを解析し、第1の抽出部13は、取得したSQL文間の類似度を判断し、類似しているSQL文はそれらを代表とするSQL文と置き換え、代表SQL列を作る(ステップS2)。
次に、第1の抽出部13は、代表SQL列から重複部分を示す冗長部分を削除する(ステップS3)。次に、第1の抽出部13は、得られた重複のない、つまり、冗長を削除した代表SQL列から2個以上のSQLが連続する部分SQL列を抽出する(ステップS4)。
次に、第2の抽出部14は、部分SQL列ごとに、ステップS6以降の処理を繰り返し実行する(ステップS5)。ステップS6〜S7では、第2の抽出部14は、動作ログ抽出テーブル108に格納された動作ログ情報のうち、部分SQL列に対応するSQL列を用いて、SQLに対応するスタックトレースを検索する。このとき、第2の抽出部14は、それらに共通して最初に現れる(ライブラリではなく)業務アプリケーションのメソッド(親メソッド)を検出する。業務アプリケーションのメソッドであるか否かは、例えば業務アプリケーションで用いるpackage名やnamespace名をあらかじめ与えておき、あるメソッドが属するクラスが上記のpackage名やnamespace名から始まるものか否かにより判断できる。
次に、第2の抽出部14は、検出した親メソッドがAPI設定候補か否かを判定する(ステップS8)。例えば、第2の抽出部14は、検出した親メソッドが1つだけ存在する場合は、その親メソッドがAPI設定候補であると判定する。
ある部分SQL列に対して、対応する複数の親メソッドが検出されている場合、同じ部分SQL列を異なる実装部分で発行することを意味する。この場合、第2の抽出部14は、部分SQL列が同じなので、類似した業務処理をしていると推定する。このとき、どのメソッドがAPI設定に適切かはユーザが別途検討・判断を行い、いずれかを選択するようにしてもよい。この場合、第2の抽出部14は、選択された親メソッドがAPI設定候補であると判定してもよい。
ステップS8において、第2の抽出部14は、親メソッドがAPI設定候補でないと判定した場合、すべての部分SQL列についてステップS5以降の処理が終了した場合には、本処理を終了する。一方、すべての部分SQLについてステップS5以降の処理が終了していない場合には、ステップS5に戻り、ステップS以降の処理を繰り返す。
第2の抽出部14は、親メソッドがAPI設定候補であると判定した場合、部分SQL列の各SQLをparse(静的解析)し、アクセス対象となるテーブル名とアクセス種別(CRUD;Create/Read/Update/Delete)を抽出する(ステップS9)。
次に、第2の抽出部14は、部分SQL列以外のSQLのスタックトレースのうち、上記で検出した親メソッドを含むものを選択する(ステップS10)。これは親メソッドを実行するときに、着目部分SQL列以外の他のSQLも実行することを意味する。
次に、設定部15は、そのSQL実行で書き込み(C/U/D)アクセスされるテーブルが上記の部分SQL列でアクセスするテーブルであるかを判定する(ステップS11)。設定部15は、SQLが部分SQL列でアクセスするテーブル以外には書き込まないと判定した場合、このメソッドを実行しても部分SQL列がアクセスするテーブル以外に影響を及ぼさないため、この親メソッドを呼び出すAPIを設定する(ステップS12)。
APIは、例えばRESTを用い、親メソッドのソースコードから引数と戻り値を抽出し、例えばそれらのJSON形式をそれぞれAPIの入力と出力とする。APIが実行されるとJSON形式のデータをオブジェクトに変換し、親メソッドの引数として実行し、戻り値をJSON形式に変換したものをAPIの戻り値として返す。
なお部分SQL列毎の処理は、例えば部分SQL列の出現回数の多い順に優先して行ってもよい。以上の処理を、ステップS4にて抽出した部分SQL列のそれぞれについて行った後、本処理を終了する。
[類似度判定処理]
次に、図7のステップS2で実行する本実施形態に係る類似度の判定処理の一例について図8を参照して説明する。図8は、一実施形態に係る類似度判定処理の一例を示したフローチャートである。
類似度判定処理では、解析部12は、SQL文にリテラルが含まれている場合、それをバインド変数(:1など)に置換する(ステップS21)。例えば、SQL文が{SELECT A,B FROM T1 WHERE A=10 AND B=20}の場合、バインド変数(:1、:2)にて、{SELECT A,B FROM T1 WHERE A=:1 AND B=:2}と置き換えてもよい。バインド変数(?)にて、{SELECT A,B FROM T1 WHERE A=? AND B=?}と置き換えてもよい。
次に、解析部12は、取得した動作ログ情報に含まれるSQL文を種類(SELECT/INSERT/UPDATE/DELETE)ごとに分類し(ステップS22)、分類した種類毎にそれぞれ以下の処理を実行する(ステップS23)。
まず、解析部12は、クラスタを格納する領域を生成する(ステップS24)。次に、解析部12は、SQL文ごとに、SQL文をスペース、「,」、「(」、「)」で区切り、SQL文内の単語の集合を抽出する(ステップS25)。このとき、解析部12は、同一単語は1個のみ抽出する。解析部12は、クラスタが存在するかを判定する(ステップS26)。解析部12は、クラスタがまだ登録されていないときは、クラスタが存在しないと判定し、新たにクラスタを作成し、SQLと対応する単語の集合を登録し(ステップS27)、ステップS28に進む。一方、解析部12は、クラスタが登録されているときは、クラスタが存在すると判定し、そのままステップS28に進む。ステップS28では、ステップS29〜S32の処理をすべてのクラスタについて、クラスタ毎に繰り返し実行する。
つまり、解析部12は、クラスタ内のSQL毎に、当該SQLの単語の一致する個数を勘定し、単語の一致数と単語の個数の大きい方との比の最大値を計算する(ステップS29)。第1の抽出部13は、最大値が予め定められている閾値(例えば0.95)以上と判定した場合、当該SQLは類似していると判定し、当該SQLはそのクラスタに属すると判断し追加する。一方、第1の抽出部13は、最大値が閾値未満と判定した場合、新たにクラスタを作成し、当該SQLと単語の集合を登録する。
例えば、図4に示す動作ログ情報のうち、動作ログ情報のログ1とログ2の類似度計算を行う場合を示す。ログ1とログ2のSQLをそれぞれ単語に分解すると、次のような単語の集合になる。
ログ1のSQLの単語={SELECT,*,FROM,T1,WHERE,ユーザID,=,:1}
ログ2のSQLの単語={SELECT,*,FROM,T2,WHERE,商品名,LIKE,:1}
このとき両者に共通する単語が5個、単語数の多い方が8個であるため、類似度は次のように計算される。
類似度=5/max(8,8)=0.625
閾値を0.95とすると、ログ1とログ2のSQLの類似度は閾値未満であるため、類似していないと判断されるので、ログ1とログ2のSQLは別のクラスタに属する。これをすべてのログについて行うと図9のように10個のクラスタに分割される。各クラスタを代表する代表SQLのIDとして、各クラスタに含まれるログ#の最小値を使うことにする。
なお、類似度を計算するときに、SQL文内に出現する単語をテーブル名とそれ以外に分類し、テーブル名が一致した場合には重みを多くしてもよい。
全てのクラスタについてのステップS28の繰り返し処理後、第1の抽出部13は、クラスタごとに、例えば一番初めに登録したSQLを代表SQLに選出し(ステップS33)、本処理を終了する。
以上、本実施形態に係る類似度の判定処理について説明した。図4〜図6に示す実行1〜6の動作ログ情報について、本実施形態に係る類似度の判定方法により類似度を判定した結果を図9に示す。分析用テーブル107には、10個のSQLクラスタが生成される。各SQLクラスタには、完全一致又は類似(すなわち閾値以上一致)する動作ログ情報が振り分けられている。また、代表SQLには、各SQLクラスタに属する動作ログ情報のうちの一番初めに登録された動作ログ情報が選択されている。図9では、動作ログ情報の一例として動作ログのIDが示されている。
[冗長部分の削除処理]
次に、図7のステップS3で実行する本実施形態に係る冗長部分の削除処理の一例について図10を参照して説明する。図10は、一実施形態に係る冗長部分の削除処理の一例を示したフローチャートである。
冗長部分の削除処理では、ステップS41〜S47の処理を、すべての代表SQL列について、代表SQL列毎に繰り返し実行する(ステップS40)。まず、第1の抽出部13は、SQLを代表SQLで置換したものを対象に、同じ代表SQLが連続する部分を1個だけに置換する。図11(A)の「SQL列を代表SQLで置換」した分析用テーブル107には、図9の動作ログ情報のIDを代表SQLの動作ログ情報のIDで置換した結果を示す。
次に、第1の抽出部13は、代表SQL列の繰り返し部分を探すため、部分列の長さLを、代表SQL列の長さ/2から2まで、長い方から順にステップS43〜S47を繰り返し実行する。
ステップS43において、開始点を1から代表SQL列の長さ/2まで変化させたとき、第1の抽出部13は、開始点から長さLのSQL列と、(開始点+L)から長さLのSQL列が同じか比較する(ステップS44)。第1の抽出部13は、同じであると判定した場合、繰り返し部分を削除する(ステップS45)。この処理を開始点を1から代表SQL列の長さ/2まで変化させて繰り返し行う。
例えば、図11(A)の例では、 動作ログ情報8〜18に対応する代表SQLのID(1,3,10,10,12,13,14,12,13,14,18)では「10」が連続していることが検出される。この重複を削除した結果を、図11(B)の「連続する代表SQLを削除」に示す。
ステップS43〜S47を繰り返し実行した後、第1の抽出部13は、冗長部分を削除した結果、ある代表部分SQL列が他の代表部分SQL列と同一になった場合は、どちらかの代表SQL列を削除し(ステップS47)、本処理を終了する。
例えば、図11(B)の「連続する代表SQLを削除」に示す動作ログ情報8〜18と動作ログ情報25〜35ではそれぞれ(12,13,14)が繰り返されていることが検出される。よって、この繰り返しが削除される。その結果を、図11(C)の「繰り返し部分の代表SQLを削除」した後の分析用テーブル107に示す。
その結果、図11(C)の「繰り返し部分の代表SQLを削除」の動作ログ情報36〜40は動作ログ情報25〜35と同じ代表SQLを持つ。よって、ある代表部分SQL列が他の代表部分SQL列と同一になった場合は、どちらかの代表SQL列を削除する。本実施形態では、動作ログ情報36〜40を削除した結果を、図12(D)の「同一代表SQL列を削除」に示す。図12(D)では、分析用テーブル107から、動作ログ情報36〜40が削除されている。
[部分SQL列生成処理]
次に、図7のステップS4で実行する本実施形態に係る部分SQL列生成処理の一例について図13を参照して説明する。図13は、一実施形態に係る部分SQL列生成処理の一例を示したフローチャートである。
部分SQL列生成処理では、まず、第1の抽出部13は、冗長部分を削除した代表SQL列のうち、最も長い長さをLmaxとする(ステップS50)。例えば、図12(D)では、代表SQL列のうち、最も長い長さを示すLmaxに「7」が設定される。
次に、第1の抽出部13は、長さLをLmaxから2までとし、ステップS52及びS53を繰り返し実行する(ステップS51)。第1の抽出部13は、代表SQL列から長さLの部分SQL列を抽出し(ステップS52)、抽出した部分SQL列がすべての代表SQL列で何カ所存在するかを勘定する(ステップS53)。長さLをLmaxから2まで繰り返し実行した後、本処理を終了する。
図12(D)に示した冗長性を削除した代表SQL列を用い、部分SQL列の長さごとに部分SQL列を生成してその発生回数を勘定した結果を図14に示す。図12(D)で最も長い代表SQL列は7なので、部分SQL列の長さを7から開始すると、動作ログ情報8〜18の(1,3,10,12,13,14,18)の発生回数は1回と勘定される。部分SQL列の長さを6に設定すると、動作ログ情報8〜18と動作ログ情報19〜24に(3,10,12,13,14,18)が計2回存在する。よって、この場合、分析用テーブル107の発生回数は2となる。以下同様に部分SQL列の長さを2まで行う。なお、図14では部分SQL列の長さ3以降の結果は省略する。
以上の処理を実行した後、第2の抽出部14は、抽出した部分SQL列に対応するSQL列を用いて、図7のステップS7の処理を実行する。例えば、発生回数が3回だった部分SQL列(12,13,14,18)を例に、親メソッドの選択の具体例を説明する。前もって、業務アプリケーションで用いられるpackage名は"f"であることを把握していると仮定する。
上記部分SQL列の代表SQLに対応する元の動作ログ情報でのスタックトレースを図15に示す。部分SQL列を生成する際に繰り返しなど冗長部分を削除しているため、当該部分SQL列に対応する元の動作ログ情報はログ12〜18、ログ21〜24、ログ25〜34、ログ36〜39の4個の列に対応する。
スタックトレースは直近に実行されたメソッドが一番左に、それを呼び出したメソッドが右になるよう並べられている。第2の抽出部14は、業務アプリケーションのメソッドのうち、すべてに出現する最初のメソッドとして、図15のPに示す「f.Register.Header#伝票登録」を抽出し、これを親メソッドとして選択する。
第2の抽出部14は、検出した親メソッドが1つだけ存在する場合は、その親メソッドがAPI設定候補であると判定し、呼び出す部分SQL列の各SQLがアクセスするテーブル名とアクセス種別を抽出する。部分SQL列(12,13,14,18)がアクセスするテーブルとCRUDを、対応するSQLをparseして抽出した結果を図16のAPI設定テーブル109に示す。これによれば、親メソッドが呼び出す各SQLによってテーブルT4、T5、T6が更新されることが分かる。
一方、「f.Register.Header#伝票登録」をスタックトレースに持つSQLは、図5と図6に示す実行3〜6に対応する動作ログ情報に存在するが、図16のAPI設定テーブル109に示すテーブルT4、T5、T6以外には変更を行わない。
よって、この場合、図7のステップS11に示すように、親メソッドから実行されるSQLが、部分SQL列がアクセスするテーブル以外にも書き込むか否かの判定において、「NO」と判定される。以上より、抽出された親メソッドはAPIの設定先として適当であると判断される。つまり、選択された親メソッドが呼び出す部分SQL列は、共通で良く使われているSQLであり、その部分SQL列のそれぞれがアクセスするテーブルは、親メソッドの対象業務の性質からまとめてアクセスされるテーブルを含み、かつ、部分SQL列を実行したときに想定外のテーブルが書き換わらないという条件を満たす。よって、このような条件を満たす親メソッドに対して、他社の再利用可能なようにAPIが設定される。
なお、本発明で得られる親メソッドで実行される業務機能には、業務を利用する際に必要となる認証機能やaudit(監査)記録機能が含まれない可能性がある。そのため、APIは、外部サービス用の認証機能やaudit機能と本発明で得られる業務機能を組み合わせて使う。
以上に説明したように、一実施形態に係るシステムによれば、プログラム内に存在する再利用可能な範囲を特定することができる。これにより、従来手段では把握が困難であった、業務アプリケーションの内部のみで使われていた機能にAPIを追加して、別機能から再利用することを可能にする。
以上、分析装置、分析プログラム及び分析方法を上記実施形態により説明したが、本発明に係る分析装置、分析プログラム及び分析方法は上記実施形態に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能である。また、上記実施形態及び変形例が複数存在する場合、矛盾しない範囲で組み合わせることができる。
例えば、上記実施形態では、複数の部分SQLが抽出され得る。抽出された複数の部分SQLのうち、どの部分SQLを採用するかは、出現回数の多い順に優先してもよい。また、他には、例えば、「受注」に関してAPIを追加したい場合には、「受注」に使用されているテーブルは、システム開発者であれば用語等から分かるので、そのテーブルを使っているオブジェクトやメソッドを探すことは本件の方法を使えば簡単にできる。このようにして抽出した親メソッドを優先してもよい。
上記実施形態では、リレーショナルデータベース(RDB)を例に挙げて、データベースアクセス処理について説明したが、本発明に係るシステムは、これに限らず、あらゆるデータベースに対して適用可能である。
以上の説明に関し、更に以下の項を開示する。
(付記1)
所定の業務アプリケーションの仕様を分析する分析装置であって、
業務アプリケーションの実行においてアクセスされるデータベースのアクセス処理のログ情報を取得する取得部と、
前記ログ情報に基づき、前記データベースのアクセス処理において連続する処理のうちの一部分であって、重複して実行される処理部分を抽出する第1の抽出部と、
抽出した前記重複して実行される処理部分に含まれる処理のそれぞれを呼び出すメソッドを抽出する第2の抽出部と、
抽出した前記メソッドから更新されるテーブルのうち、前記重複して実行される処理部分に含まれる処理のそれぞれを実行したときに更新されるテーブル以外の他のテーブルを更新しないメソッドに、API(Application Program Interface)を設定し、利用可能とする設定部と、
を有する分析装置。
(付記2)
前記第1の抽出部は、前記データベースのアクセス処理において連続する処理のうちの一部分が、所定の閾値以上一致する場合、前記重複して実行される処理部分として抽出する、
付記1に記載の分析装置。
(付記3)
所定の業務アプリケーションの仕様を分析する処理をコンピュータに実行させるための分析プログラムであって、
業務アプリケーションの実行においてアクセスされるデータベースのアクセス処理のログ情報を取得する処理と、
前記ログ情報に基づき、前記データベースのアクセス処理において連続する処理のうちの一部分であって、重複して実行される処理部分を抽出する処理と、
抽出した前記重複して実行される処理部分に含まれる処理のそれぞれを呼び出すメソッドを抽出する処理と、
抽出した前記メソッドから更新されるテーブルのうち、前記重複して実行される処理部分に含まれる処理のそれぞれを実行したときに更新されるテーブル以外の他のテーブルを更新しないメソッドに、API(Application Program Interface)を設定し、利用可能とする処理と、を有する分析プログラム。
(付記4)
前記データベースのアクセス処理において連続する処理のうちの一部分が、所定の閾値以上一致する場合、前記重複して実行される処理部分として抽出する、
付記3に記載の分析プログラム。
(付記5)
所定の業務アプリケーションの仕様を分析することをコンピュータが実行する分析方法であって、
業務アプリケーションの実行においてアクセスされるデータベースのアクセス処理のログ情報を取得し、
前記ログ情報に基づき、前記データベースのアクセス処理において連続する処理のうちの一部分であって、重複して実行される処理部分を抽出し、
抽出した前記重複して実行される処理部分に含まれる処理のそれぞれを呼び出すメソッドを抽出し、
抽出した前記メソッドから更新されるテーブルのうち、前記重複して実行される処理部分に含まれる処理のそれぞれを実行したときに更新されるテーブル以外の他のテーブルを更新しないメソッドに、API(Application Program Interface)を設定し、利用可能とする、分析方法。
(付記6)
前記データベースのアクセス処理において連続する処理のうちの一部分が、所定の閾値以上一致する場合、前記重複して実行される処理部分として抽出する、
付記5に記載の分析方法。
10 分析装置
11 取得部
12 解析部
13 第1の抽出部
14 第2の抽出部
15 設定部
16 表示処理部
17 通信部
18 記憶部
20 APサーバ
21 受付部
22 認証部
23 実行部
24 通信部
25 記憶部
30 クライアント端末
101 CPU
102 入力I/F
103 通信I/F
104 表示I/F
105 外部I/F
106 メモリ
107 分析用テーブル
108 動作ログ抽出テーブル
109 API設定テーブル
110 分析プログラム
201 プロセッサ
202 入力I/F
203 通信I/F
204 メモリ
205 動作ログ情報DB
206 業務アプリケーションプログラム群
300 業務用DB

Claims (4)

  1. 所定の業務アプリケーションの仕様を分析する分析装置であって、
    業務アプリケーションの実行においてアクセスされるデータベースのアクセス処理のログ情報を取得する取得部と、
    前記ログ情報に基づき、前記データベースのアクセス処理において連続する処理のうちの一部分であって、重複して実行される処理部分を抽出する第1の抽出部と、
    抽出した前記重複して実行される処理部分に含まれる処理のそれぞれを呼び出すメソッドを抽出する第2の抽出部と、
    抽出した前記メソッドから更新されるテーブルのうち、前記重複して実行される処理部分に含まれる処理のそれぞれを実行したときに更新されるテーブル以外の他のテーブルを更新しないメソッドに、API(Application Program Interface)を設定し、利用可能とする設定部と、
    を有する分析装置。
  2. 前記第1の抽出部は、前記データベースのアクセス処理において連続する処理のうちの一部分が、所定の閾値以上一致する場合、前記重複して実行される処理部分として抽出する、
    請求項1に記載の分析装置。
  3. 所定の業務アプリケーションの仕様を分析する処理をコンピュータに実行させるための分析プログラムであって、
    業務アプリケーションの実行においてアクセスされるデータベースのアクセス処理のログ情報を取得する処理と、
    前記ログ情報に基づき、前記データベースのアクセス処理において連続する処理のうちの一部分であって、重複して実行される処理部分を抽出する処理と、
    抽出した前記重複して実行される処理部分に含まれる処理のそれぞれを呼び出すメソッドを抽出する処理と、
    抽出した前記メソッドから更新されるテーブルのうち、前記重複して実行される処理部分に含まれる処理のそれぞれを実行したときに更新されるテーブル以外の他のテーブルを更新しないメソッドに、API(Application Program Interface)を設定し、利用可能とする処理と、を有する分析プログラム。
  4. 所定の業務アプリケーションの仕様を分析することをコンピュータが実行する分析方法であって、
    業務アプリケーションの実行においてアクセスされるデータベースのアクセス処理のログ情報を取得し、
    前記ログ情報に基づき、前記データベースのアクセス処理において連続する処理のうちの一部分であって、重複して実行される処理部分を抽出し、
    抽出した前記重複して実行される処理部分に含まれる処理のそれぞれを呼び出すメソッドを抽出し、
    抽出した前記メソッドから更新されるテーブルのうち、前記重複して実行される処理部分に含まれる処理のそれぞれを実行したときに更新されるテーブル以外の他のテーブルを更新しないメソッドに、API(Application Program Interface)を設定し、利用可能とする、分析方法。
JP2017082343A 2017-04-18 2017-04-18 分析装置、分析プログラム及び分析方法 Active JP6870454B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2017082343A JP6870454B2 (ja) 2017-04-18 2017-04-18 分析装置、分析プログラム及び分析方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017082343A JP6870454B2 (ja) 2017-04-18 2017-04-18 分析装置、分析プログラム及び分析方法

Publications (2)

Publication Number Publication Date
JP2018181121A true JP2018181121A (ja) 2018-11-15
JP6870454B2 JP6870454B2 (ja) 2021-05-12

Family

ID=64275676

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017082343A Active JP6870454B2 (ja) 2017-04-18 2017-04-18 分析装置、分析プログラム及び分析方法

Country Status (1)

Country Link
JP (1) JP6870454B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022254487A1 (ja) * 2021-05-31 2022-12-08 富士通株式会社 情報処理プログラム、情報処理方法および情報処理装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003228586A (ja) * 2002-02-05 2003-08-15 Hitachi Ltd データベースアクセス装置及び方法
US6950850B1 (en) * 2000-10-31 2005-09-27 International Business Machines Corporation System and method for dynamic runtime partitioning of model-view-controller applications
JP2008210214A (ja) * 2007-02-27 2008-09-11 Nippon Telegr & Teleph Corp <Ntt> 情報処理装置、通信制御処理関数追加方法、及び、通信制御処理関数追加プログラム
JP2012203726A (ja) * 2011-03-25 2012-10-22 Hitachi Ltd コンピュータプログラムの分析方法及び分析装置
JP2015118562A (ja) * 2013-12-18 2015-06-25 富士通株式会社 スクリプト管理プログラム、スクリプト管理装置及びスクリプト管理方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6950850B1 (en) * 2000-10-31 2005-09-27 International Business Machines Corporation System and method for dynamic runtime partitioning of model-view-controller applications
JP2003228586A (ja) * 2002-02-05 2003-08-15 Hitachi Ltd データベースアクセス装置及び方法
JP2008210214A (ja) * 2007-02-27 2008-09-11 Nippon Telegr & Teleph Corp <Ntt> 情報処理装置、通信制御処理関数追加方法、及び、通信制御処理関数追加プログラム
JP2012203726A (ja) * 2011-03-25 2012-10-22 Hitachi Ltd コンピュータプログラムの分析方法及び分析装置
JP2015118562A (ja) * 2013-12-18 2015-06-25 富士通株式会社 スクリプト管理プログラム、スクリプト管理装置及びスクリプト管理方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022254487A1 (ja) * 2021-05-31 2022-12-08 富士通株式会社 情報処理プログラム、情報処理方法および情報処理装置

Also Published As

Publication number Publication date
JP6870454B2 (ja) 2021-05-12

Similar Documents

Publication Publication Date Title
US11755387B1 (en) Updating code of an app feature based on a value of a query feature
US20230126005A1 (en) Consistent filtering of machine learning data
Robbes et al. How program history can improve code completion
US8756593B2 (en) Map generator for representing interrelationships between app features forged by dynamic pointers
US8589876B1 (en) Detection of central-registry events influencing dynamic pointers and app feature dependencies
AU2013329525B2 (en) System and method for recursively traversing the internet and other sources to identify, gather, curate, adjudicate, and qualify business identity and related data
CA2957674C (en) Testing insecure computing environments using random data sets generated from characterizations of real data sets
JP6365195B2 (ja) 命令履歴分析プログラム、命令履歴分析装置、および、命令履歴分析方法
US8904352B2 (en) Systems and methods for processing source code during debugging operations
CN106648569B (zh) 目标序列化实现方法和装置
CN109815240B (zh) 用于管理索引的方法、装置、设备和存储介质
US11836331B2 (en) Mathematical models of graphical user interfaces
CN114356968A (zh) 查询语句生成方法、装置、计算机设备及存储介质
US10503743B2 (en) Integrating search with application analysis
JP6870454B2 (ja) 分析装置、分析プログラム及び分析方法
US9286349B2 (en) Dynamic search system
US11580251B1 (en) Query-based database redaction
KR20100080345A (ko) 최소 개의 입력들로 액티비티를 수행하는 바람직한 명령 시퀀스를 최종 사용자에게 프롬프팅하기 위한 시스템 및 방법
JP5184987B2 (ja) 索引情報作成装置、索引情報作成方法及びプログラム
CN112202822B (zh) 数据库注入检测方法、装置、电子设备及存储介质
JP7293544B2 (ja) 質問回答システムの更新処理方法及び装置
CN117312124A (zh) 一种测试用例的获取方法以及相关装置
CN116483735A (zh) 一种代码变更的影响分析方法、装置、存储介质及设备
CN117390023A (zh) 数据合计方法、数据合计装置、设备及存储介质
JP2019139577A (ja) データ検索方法、データ検索装置及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200115

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20201125

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20201208

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210115

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: 20210316

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210329

R150 Certificate of patent or registration of utility model

Ref document number: 6870454

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150