(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022044446
(43)【公開日】2022-03-17
(54)【発明の名称】情報処理装置及びプログラム
(51)【国際特許分類】
G06F 8/30 20180101AFI20220310BHJP
【FI】
G06F8/30
【審査請求】未請求
【請求項の数】5
【出願形態】OL
(21)【出願番号】P 2020150071
(22)【出願日】2020-09-07
(71)【出願人】
【識別番号】000155469
【氏名又は名称】株式会社野村総合研究所
(74)【代理人】
【識別番号】100076428
【弁理士】
【氏名又は名称】大塚 康徳
(74)【代理人】
【識別番号】100115071
【弁理士】
【氏名又は名称】大塚 康弘
(74)【代理人】
【識別番号】100112508
【弁理士】
【氏名又は名称】高柳 司郎
(74)【代理人】
【識別番号】100116894
【弁理士】
【氏名又は名称】木村 秀二
(74)【代理人】
【識別番号】100130409
【弁理士】
【氏名又は名称】下山 治
(74)【代理人】
【識別番号】100134175
【弁理士】
【氏名又は名称】永川 行光
(74)【代理人】
【識別番号】100177390
【弁理士】
【氏名又は名称】大出 純哉
(72)【発明者】
【氏名】近藤 健
(72)【発明者】
【氏名】井沢 祐介
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376BC38
5B376BC69
5B376BC79
(57)【要約】
【課題】より動作に準じた対象から所望の箇所を容易に特定することが可能になる。
【解決手段】本実施形態に係る情報処理装置は、プログラミング言語で記載されたソースコードをコンパイルして生成された実行可能コードに基づいて、プログラム内のプログラム要素を分類するための各要素に合致する記述を取得する取得手段と、取得された記述を、データベースに格納する格納手段と、データの操作及び定義を行うためのデータベース言語を用いて構成される検索条件に従って、データベースから当該検索条件を満たす記述を検索する検索手段と、を有する。
【選択図】
図4A
【特許請求の範囲】
【請求項1】
プログラミング言語で記載されたソースコードをコンパイルして生成された実行可能コードに基づいて、プログラム内のプログラム要素を分類するための各要素に合致する記述を取得する取得手段と、
取得された前記記述を、データベースに格納する格納手段と、
データの操作及び定義を行うためのデータベース言語を用いて構成される検索条件に従って、前記データベースから当該検索条件を満たす記述を検索する検索手段と、を有することを特徴とする情報処理装置。
【請求項2】
前記プログラム要素を分類するための各要素は、インポートしているコード、アノテーション、メソッド、インスタンスを生成しているコード、例外をスローしているコード、変数の型をキャストしているコード、メソッドを呼び出しているコード、クラスの所定の変数にアクセスしているコード、及びパラメータのうちの少なくともいずれかを含む、ことを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記検索手段による検索結果を所定の形式のファイルとして生成する生成手段と、
前記ソースコードを受けつけたことに応じて、前記取得手段と、前記格納手段と、前記検索手段と、前記生成手段との動作を連続的に実行させる制御手段と、を更に有する、ことを特徴とする請求項1又は2に記載の情報処理装置。
【請求項4】
検索された前記検索条件を満たす記述に対応するソースコードを提供する提供手段を更に有し、
前記取得手段は、プログラム内のプログラム要素を分類するための各要素に合致する記述と、当該記述に対応するソースコードの行数とを関連付けて取得し、
前記格納手段は、プログラム内のプログラム要素を分類するための各要素に合致する記述と、当該記述に対応するソースコードの行数とを関連付けて格納し、
前記提供手段は、前記記述に対応するソースコードの行数に基づいて、前記検索条件を満たす記述に対応するソースコードを提供する、ことを特徴とする請求項1から3のいずれか1項に記載の情報処理装置。
【請求項5】
コンピュータを、請求項1から4のいずれか1項に記載の情報処理装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置及びプログラムに関する。
【背景技術】
【0002】
一般に、プログラム開発では、開発者によって作成されたプログラムの品質を確保するために、ソースコードを記述する際のルールを定めたコーディング規約を定めたうえで、作成されたソースコードが当該規約に満たしているかを確認する場合がある。
【0003】
プログラムの開発規模が大規模になれば、開発されるプログラムの量は膨大であり、また、設計変更や仕様変更などによりソースコードの改変が頻繁となれば、コーディング規約を満たしているかを確認することは、ますます容易ではなくなる。このような課題に対し、特許文献1では、情報処理装置を用いて、プログラムがコーディング規約を満たしているかを判定し、ソースコードがコーディング規約を満たすと判定した場合に、ソースコードに対応するオブジェクトコード(実行可能コード)を生成する技術を提案している。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
ところで、実際にコンピュータによって実行されるのはオブジェクトコード(実行可能コード)であり、コンパイラやコンパイル時のオプションに応じてソースコードとオブジェクトコードが完全に対応しない場合がある。このため、ソースコードに対してコーディング規約を満たさない箇所を特定する場合と比べて、より動作に準じた対象に対してコーディング規約を満たしていない箇所を特定し、変更する方が合理的である場合がある。
【0006】
また、プログラム開発では、コーディング規約を満たすように修正する場合のほか、発生した不具合を修正する場合、プログラム(ソースコード或いは実行可能コード)の1か所が変更されると、他のプログラムに当該変更の影響が現れる場合がある。また、変更する前の記述と同様の記述が他のプログラムに存在し、当該他のプログラムも併せて変更されるべき場合もある。このため、膨大なプログラムのなかから、変更の影響が現れる箇所や同様の変更が必要な箇所を、容易に特定できることが望ましい。
【0007】
本発明は、上記課題に鑑みてなされ、その目的は、より動作に準じた対象から所望の箇所を容易に特定することが可能な技術を実現することである。
【課題を解決するための手段】
【0008】
この課題を解決するため、例えば本発明の情報処理装置は以下の構成を備える。すなわち、
プログラミング言語で記載されたソースコードをコンパイルして生成された実行可能コードに基づいて、プログラム内のプログラム要素を分類するための各要素に合致する記述を取得する取得手段と、
取得された前記記述を、データベースに格納する格納手段と、
データの操作及び定義を行うためのデータベース言語を用いて構成される検索条件に従って、前記データベースから当該検索条件を満たす記述を検索する検索手段と、を有することを特徴とする。
【発明の効果】
【0009】
本発明によれば、より動作に準じた対象から所望の箇所を容易に特定することが可能になる。
【図面の簡単な説明】
【0010】
【
図1】本発明の実施形態に係る情報提供システムの概要を説明する図
【
図2】本実施形態に係る情報処理装置の機能構成例を示すブロック図
【
図3】本実施形態に係る通信装置の機能構成例を示すブロック図
【
図4A】本実施形態に係る記述分類処理の一連の動作を示すフローチャート
【
図4B】本実施形態に係る記述検索処理の一連の動作を示すフローチャート
【
図5】本実施形態に係るコーディング規約を満たさないソースコードの例を説明するための図
【
図6】本実施形態に係るデータベースモデルの各要素の例について説明する図
【
図7】本実施形態に係る検索設定ファイルとその検索内容の一例を示す図
【
図8】本実施形態に係る検索設定ファイルと検索対象となるデータベースモデルの要素の関係を示す図
【
図9】本実施形態で生成されるJSON形式のデータの一例を示す図
【
図10】JSON形式のデータとソースコードの一例を示す図
【
図11】本実施形態に係る、検索条件を指定する際のユーザインタフェースの例を示す図
【
図12】本実施形態に係る、検索結果を表示するユーザインタフェースの例を示す図
【
図13】本実施形態に係る、検索結果に関する統計を表示するユーザインタフェースの例を示す図
【発明を実施するための形態】
【0011】
以下、添付図面を参照して実施形態を詳しく説明する。なお、以下の実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態で説明されている特徴の組み合わせの全てが発明に必須のものとは限らない。実施形態で説明されている複数の特徴のうち二つ以上の特徴は任意に組み合わされてもよい。また、同一若しくは同様の構成には同一の参照番号を付し、重複した説明は省略する。
【0012】
<情報提供システムの概要>
図1は、本実施形態に係る情報処理システムの概要を示している。本実施形態に係る情報処理システム10は、例えば一例として情報処理サーバである情報処理装置100と、例えば一例としてパーソナルコンピュータである通信装置110及び通信装置120とを含む。
【0013】
情報処理システム10は、所定のプログラミング言語で作成されたプログラムのソースコードをコンパイルして、実行可能なコードを生成するとともに、作成されたプログラムのソースコード或いは実行可能コードに対するデータ分析機能を提供する。データ分析機能は、例えば、作成されたプログラムがコーディング規約を満たすかどうかを分析したり、プログラムを修正する際に修正による影響範囲を分析したり、或いはコードレビューにおける指摘事項が他のソースコードにも存在するかを分析したりする機能を含む。これらの分析は、データの操作及び定義を行うためのデータベース言語を用いて構成される検索条件を用いて、データベースから検索条件を満たすデータを取得することにより実現される。
【0014】
通信装置120は、例えば、プログラムを作成するユーザによって使用される装置であり、ユーザによってプログラムのソースコードが作成されると、ネットワークを介して情報処理装置100に送信する。
【0015】
情報処理装置100は、通信装置120からソースコードを受信してリポジトリに格納する。情報処理装置100は、ソースコードをリポジトリに格納すると、ソースコードをコンパイルして、実行可能なコードを生成する。そして、実行可能なコードのなかから、後述する、データベースモデルで規定されるプログラム要素に合致する記述を取り出して、取り出した記述をデータベースに格納する(以下、記述分類処理ともいう)。また、情報処理装置100は、(通信装置110から)プログラムの記述を検索するための検索条件の設定を受け付けると、データベース言語を用いてデータベースを検索(記述検索処理ともいう)し、検索条件に応じた検索結果(検索条件に合致したプログラムの記述)を通信装置110に送信することができる。検索結果は、csvやxlsxファイルの形式で生成され、通信装置110にダウンロードされてもよい。
【0016】
通信装置110は、情報処理装置100に格納されているプログラムの記述を分析するためにユーザに用いられる通信装置である。データベース言語を用いて検索条件を作成することができる。また、通信装置110は、検索条件を表示部306に表示させて、ユーザの選択した検索条件を情報処理装置100に送信することができる。また、通信装置110は、情報処理装置100が生成した検索結果を表示部に表示させたり、ファイル形式でダウンロードしたりすることができる。
【0017】
<情報処理装置の構成>
次に、
図2を参照して、情報処理装置100の機能構成例について説明する。なお、図を参照して説明する機能ブロックの各々は、統合されまたは分離されてもよく、また説明する機能が別のブロックで実現されてもよい。また、ハードウェアとして説明するものがソフトウェアで実現されてもよく、その逆であってもよい。更に、本実施形態では、情報処理装置100が単体の装置である場合を例に説明するが、情報処理装置100が複数の装置で構成されてもよいし、また、1つ以上の仮想マシンとして構成されてもよい。
【0018】
通信部201は、ユーザが利用する通信装置110や通信装置120と、ネットワークを介して通信する通信回路又は通信モジュールを含む。
【0019】
制御部202は、中央演算装置であるCPU210と、RAM211とを含む。CPU210は1つ以上のCPUから構成されてよい。制御部202は、記録部204に記憶されたコンピュータプログラムを実行することにより、記述分類処理や記述検索処理を実行したり、情報処理装置100の各部の動作を制御したりする。
【0020】
RAM211は、例えばDRAM等の揮発性の記憶媒体であり、制御部202がコンピュータプログラムを実行するためのパラメータや処理結果等を一時的に記憶する。
【0021】
電源部203は、情報処理装置100の各部が動作するための電力を提供するための回路又はモジュールである。記録部204は、例えばハードディスクや半導体メモリ等の不揮発性の記録媒体を含み、情報処理装置100の動作に必要な設定値や演算結果等を記録する。記録部204は、内部にデータベースを含んでよい。データベースは、開発されたソースコードのリポジトリ220と、プログラム内のプログラム要素を分類するための要素(データベースモデルで規定される要素)に合致する記述を格納する記述DB221と、予め作成された検索条件を記録する検索条件DB222とを含む。
【0022】
実行可能コード生成部212は、ソースコードのリポジトリの中からコンパイル対象のソースコードを取り出してコンパイルし、実行可能コードを生成する。例えば、実行可能コード生成部212は、例えば、プログラム言語であるJava(登録商標。以下同じ)で作成されたソースコードをコンパイルして、実行可能コードであるバイトコードを(例えばJarファイルとして)生成する。なお、以下の本実施形態では、ソースコードがプログラム言語Javaで記載されたものであり、Java言語用のコンパイラによって、バイトコードが生成される場合を例に説明する。しかし、本実施形態は、必ずしもプログラム言語がJavaである必要はなく、他のプログラム言語であってもよい。
【0023】
記述取得部213は、実行可能コードのなかの、プログラム内のプログラム要素を分類するための要素(データベースモデルで規定される要素)に合致する記述を特定して取り出し、取り出した記述をデータベースモデルの各要素と関連付ける。例えば、プログラム要素を分類するための要素(データベースモデルの各要素)には、例えば、インポートしているコード、アノテーション、メソッド、インスタンスを生成しているコード、例外をスローしているコード、変数の型をキャストしているコード、メソッドを呼び出しているコード、クラスの所定の変数にアクセスしているコード、及びパラメータが含まれる。例えば、記述取得部213は、プログラム要素を分類するための要素が、「インポートしているコード」である場合、実行可能コードのうち、インポートを実行する記述を取り出す。
【0024】
記述取得部213は、予め定められたバイナリのパターンに基づいて、実行可能コードのうちの、データベースモデルの各要素に合致する記述を特定する。或いは、記述取得部213は、一旦実行可能コードをテキスト表現としてのニーモニックに変換したうえで、各要素に対応するニーモニックの記述を特定してもよい。
【0025】
記述取得部213は、データベースモデルの各要素と関連付けられた記述をファイルに書き込んでもよい。例えば、記述取得部213は、関連付けられている記述とデータベースモデルの要素とを、JSON形式のファイルに書き込むことができる。
【0026】
記述格納部214は、記述取得部213によって取得された記述を記述DB221へ書き込む。記述格納部214は、例えば、記述取得部213によってJSON形式のファイルが生成されているときは、当該JSON形式のファイルのデータに基づいて、データベースモデルの要素ごとに、取得した記述をデータベース(記述DB221)に格納する。
【0027】
検索条件設定部215は、通信装置110から検索条件の設定を受け付ける。このとき、検索条件設定部215は、設定された検索条件を記録部204の検索条件DB222に記録し、制御部202が必要に応じて読み出せるようにしてもよい。検索条件は、データの操作及び定義を行うためのデータベース言語を用いて構成され、例えばSQLで記述される。データベース言語を用いることにより、指定のパターンと合致するテキストを検索するコマンド(例えばgrepコマンド)を用いるような検索よりも、複雑な検索対象の範囲や検索する対象の指定をニーズに応じて容易に構築することできる。また、SQLなどのデータベース言語を使用可能なユーザの数も多いことや、データ分析を行う際のデータ分析用のライブラリ/フレームワークとの親和性が高いことも、データベース言語を用いるうえでのメリットである。
【0028】
検索実行部216は、設定された検索条件に応じて、例えば検索条件に対応するSQL文を実行し、記述DB221に格納されている記述(データベースモデルの各要素に関連付けられている記述)から検索条件を満たす記述を検索する。このように、データベースに格納された各データベースモデルに対する記述を、データベース言語を用いた多様な検索条件で検索することで、大量データをより容易に且つ多角的な視点で分析することができるようになり、蓄積された大量のソースコードに対する分析の可視化が可能になる。
【0029】
ファイル生成部217は、検索された記述をファイルとして記録する。例えば、ファイル生成部217は、検索結果を、csvやxlsxファイルの形式で生成し、通信装置110へのダウンロード用として記録部204に記録する。
【0030】
自動実行制御部218は、例えば、通信装置120からソースコードが(アップロードされて)リポジトリ220に格納されると、実行可能コードの生成、(予め定められた)検索の実行、及び検索結果を示すファイルの生成を自動的に実行する。例えば、自動実行制御部218は、記述取得部213と、記述格納部214と、検索実行部216と、ファイル生成部217との動作を連続的に実行させる。このようにすれば、例えば、ユーザによってソースコードを受け付けたことに応じて、コンパイルからコードの検査、レポート作成までの一連の動作を自動的に実行することができる。
【0031】
<通信装置110の構成>
次に、
図3を参照して、通信装置110の機能構成例について説明する。本実施形態では、通信装置の一例として、パーソナルコンピュータを用いる場合を例に説明するが、通信装置は、タブレット端末などの他の電子機器であってよい。なお、以降の図を参照して説明する機能ブロックの各々は、統合されまたは分離されてもよく、また説明する機能が別のブロックで実現されてもよい。また、ハードウェアとして説明するものがソフトウェアで実現されてもよく、その逆であってもよい。
【0032】
通信部301は、例えば通信用回路等を含み、例えばLTE等の移動体通信を介してインターネットに接続したり、無線LAN通信を介してネットワークに接続したりして、情報処理装置100との通信を行う。
【0033】
制御部302は、CPU310及びRAM311を含み、例えば記録部307に記録されたコンピュータプログラムをCPU310が実行することにより、通信装置110内の各部の動作を制御する。
【0034】
操作部303は、通信装置110の備えるタッチパネルやキーボード等を含み、表示部306に表示される各種操作用のGUIに対する操作(例えば、検索条件の設定)を行うことができる。電源部304は、通信装置110の各部へ電力を提供する。撮像デバイス305は、例えば、撮像素子を含むカメラ機構であり、制御部302からの指示に応じて撮影を行う。
【0035】
表示部306は、例えばLCDやOLED等の表示デバイスを含む。表示部306は、制御部302の指示に応じて、検索条件を入力するためのGUIや、検索結果を表示するGUI、検索結果を含むレポートファイルを表示するGUI等を表示する。
【0036】
記録部307は、例えば半導体メモリ等の不揮発性メモリを含み、制御部302が実行するプログラムや設定値を保持したりする。記録部307に保持されるコンピュータプログラムは、通信装置110の諸機能を実現するためのオペレーティングシステムや、ブラウザなどの種々のアプリケーションを含む。
【0037】
音声入力デバイス308は、例えばマイクロホンを含み、通信装置110を使用するユーザの発する音声を入力する。音声入力デバイス308は、ユーザの発した音声を入力するだけでなく、ユーザの発した音声を認識して、入力情報(例えば検索条件の指定)をアプリケーションに入力する機能を兼ね備えてもよい。
【0038】
<通信装置120の構成>
通信装置120の機能構成は、実質的に通信装置110の機能構成と同様である。なお、通信装置120のCPU310が、例えば通信装置120の記録部307に記録されたコンピュータプログラムを実行することにより、通信装置120内の各部の動作を制御する。
【0039】
<情報処理装置における記述分類処理の一連の動作>
次に、情報処理装置100において実行される記述分類処理の一連の動作について、
図4Aを参照して説明する。また、本処理は、制御部202のCPU210が記録部204に記録されるコンピュータプログラムを実行することにより実現される。以下の説明では、説明を容易にするために各ステップの処理主体をまとめて制御部202として説明するが、処理内容に応じて制御部202内で機能する各部が対応する処理を実行する。
【0040】
なお、本実施形態では、記述分類処理と(後述の)記述検索処理とが、コーディング規約を満たしていないコードを出力する場合を例に説明する。しかし、上述のように、記述分類処理と(後述の)記述検索処理とは、コーディング規約を満たしていないコードを出力する場合に限らず、不具合の影響範囲の調査や類似コードの検索など他の用途にも適用可能である。
【0041】
コーディング規約は、対象となるプログラムの開発プロジェクト、或いは開発部署、或いは社内で定めた、ソースコードの記載様式に関するルールであり、例えば、記載してはいけない記載様式が定められている。
【0042】
例えば、
図5(a)及び(b)を参照して、複数の記載様式のうちの、予め定めたアーキテクチャを逸脱しないように品質を管理するための記載様式を適用する例を説明する。
図5(a)及び(b)はプログラム言語Javaを用いて作成されたソースコードの例を示しており、
図5(a)は、アーキテクチャを逸脱する記載を含むソースコードの例を示している。
図5(a)には、「XxxLogic logic = new XxxLogicImple();」との記載が存在し、この記載はコーディング規約を満たさないものとして扱われる。
【0043】
図5(a)に示すソースコードは、コーディング規約を満たすためには、例えば、
図5(b)のように、インジェクションを用いるコードに修正されなければならない。
【0044】
なお、実際には、「XxxLogic logic = new XxxLogicImple();」がコンパイルされた後のバイトコードにおいて対応する記述が検索されることで、
図5(a)に示すコードがコーディング規約を満たさないものとして検索結果に含まれるようになる。
【0045】
再び
図4Aを参照して説明する。S401において、制御部202は、ソースコードを取得する。例えば、制御部202は、通信装置110において、リポジトリ220にソースコードをチェックインする操作が行われたことに応じて、当該ソースコードを通信装置110から受信する。
【0046】
S402において、制御部202は、実行可能コードを生成する。例えば、制御部202は、プログラム言語Javaで作成されたソースコードをコンパイルして、実行可能コードであるバイトコードを(例えばJarファイルとして)生成する。
【0047】
S403において、制御部202は、データベースモデルの各要素(プログラム要素を分類する各要素)と合致する記述を取得する。
【0048】
ここで、
図6を参照して、データベースモデルの各要素の例について説明する。
図6は、Javaの言語仕様に基づき、Javaのプログラム要素を分類するためのデータベースモデルの一例を示している。
図6に示す要素601は、それぞれ、プログラムの要素名602と、その要素に対応するコードの例603との組で示されている。プログラム要素を分類するための要素は、
図6に示すように、インポートしているコード、アノテーション、メソッド、インスタンスを生成しているコード、例外をスローしているコード、変数の型をキャストしているコード、メソッドを呼び出しているコード、クラスの所定の変数にアクセスしているコード、及びパラメータなどを含んでいる。
【0049】
S404において、制御部202は、データベースモデルの各要素と合致する記述をJSON形式のデータとして生成する。JSON形式のデータを一旦生成することにより、データベース言語を用いてJSON形式のデータの各値をデータベースに容易に追加することができる。例えば、
図9は、
図10に示すソースコード1000が入力された際に生成されるJSON形式のデータ900の一例を示している。
図10に示す例では、Javaのソースコード1000には、インポートしているコード、アノテーション、メソッド、例外をスローしているコードなどが含まれている。このようなソースコードをコンパイルした後に、生成されたバイトコード(或いは更にニーモニックに変換したテキスト)から、データベースモデルの各要素と合致する記述を取得して、
図9に示すデータを生成する。
図9に示す例では、
図6に示したデータベースモデルと対応する要素901~903や、要素902の下位に更に構成される要素911~914のそれぞれに、対応する記述が格納されている。
【0050】
本実施形態では、例えば、データベースモデルの各要素と合致する記述は、ソースコードの行番号を含んでいる。このようにすることで、コンパイル済のバイトコードと対応するソースコードの位置を特定することができる。このようにすれば、後述する記述検索処理において、検索結果に対応するソースコードを容易に提示することが可能になる。すなわち、コンパイルしたコードから所望のプログラム要素を検索することによって、より動作に準じた対象から所望の箇所を容易に特定することを可能にしつつ、検索結果において特定された箇所を、人間が理解し易いソースコードの形式でユーザに提供することができる。
【0051】
S405において、制御部202は、JSON形式のデータ内の記述を、データベースに格納する。制御部202は、例えばデータベース言語で記載された処理を、JSON形式のデータに対して実行することにより、ファイルに格納されたデータの各値をデータベースに格納する。このとき、制御部202は、データベースモデルの各要素に合致する記述と、当該記述に対応するソースコードの行数とを関連付けてデータベースに格納する。制御部202は、JSON形式のファイルのデータをデータベースに格納すると、本一連の処理を終了する。
【0052】
<情報処理装置における記述検索処理の一連の動作>
次に、情報処理装置100において実行される記述検索処理の一連の動作について、
図4Bを参照して説明する。また、本処理は、制御部202のCPU210が記録部204に記録されるコンピュータプログラムを実行することにより実現される。以下の説明では、説明を容易にするために各ステップの処理主体をまとめて制御部202として説明するが、処理内容に応じて制御部202内で機能する各部が対応する処理を実行する。
【0053】
S410において、制御部202は、通信装置110から検索条件を受け付ける、或いは、予め定められた検索条件を検索条件DB222から読み出す。例えば、制御部202は、通信装置110から検索条件に該当する、検索条件を記載したファイル名の指定を受け付けて、検索条件DB222から該当する検索設定ファイルを読み出す。検索設定ファイル名は、例えば、検索対象のデータや検索すべき記述などをSQLを用いて記載したファイルである。検索条件は、1以上の検索設定ファイルを選択して、複数の検索を実行するようにしてもよい。検索設定ファイルは、上述した検索条件DB222に格納されてよい。
【0054】
ここで、
図7及び
図8を参照して、検索設定ファイルの例について説明する。
図7は、それぞれの検索設定ファイルの一例と、それぞれの検索設定ファイルの検索内容の例を示している。例えば、検索設定ファイルは例えばSQLを用いて記載されている。
図7に示すように、検索設定ファイルの指定は、ID701によって指定されてもよい。すなわち、情報処理装置100が通信装置110から検索条件を受け付ける際に、検索設定ファイルのID701の指定を受け付けるようにしてもよい。
【0055】
検索設定ファイルは、例えば、サードパーティのライブラリのメソッドに係る記述の一覧を検索したり、例外処理に係る記述の一覧を検索したり、クラスをキャストする記述の一覧を取得するなど、特定の記述に対応するように生成されてよい。このように検索設定ファイルを生成すれば、これらを組み合わせて、複合的な観点からプログラム要素を検索することができる。
【0056】
また、検索設定ファイルに記載される検索条件には、例えば、
図8に示すように、検索対象となるデータベースモデルの要素801が関連付けられている。例えば、サードパーティのライブラリのメソッドに係る記述の一覧を検索する場合、
図6に示したデータベースモデルの要素のうちの、「JavaClass」、「method」、「methodcall」に関連付けられた記述が検索の対象であることが分かる。
図6に示すように、それぞれの検索設定ファイルは、その性質に応じて様々なデータベースモデルの要素を検索対象としている。
【0057】
S411において、制御部202は、検索条件を満たす記述を記述DB221から検索する。例えば、制御部202は、SQLを用いて記述DB221から検索条件を満たす記述を検索する。
【0058】
S412において、制御部202は、S411で得られた検索結果を満たす記述と対応するソースコードの記述を取得する。例えば、制御部202は、検索結果を満たす記述と対応付けて格納されているソースコードの行番号を記述DB221から読み出す。そして、制御部202は、リポジトリ220から対応するソースコードの行を取得する。
【0059】
S413において、制御部202は、S411で得られた検索結果とソースコードの記述とを通信装置110に送信する、又はファイルに出力する。
【0060】
なお、上述の説明では、本実施形態に係る記述分類処理と記述検索処理とが別個に実行される場合を例に説明した。しかし、記述分類処理と記述検索処理とが連続して実行されてもよい。例えば、情報処理装置100は、通信装置120からソースコードを受信したことをトリガとして、S402からS412までの一連の処理を実行するようにしてもよい。このとき、S410では、予め定められた検索条件がDBから読み出され、S411において検索条件に対応する記述が検索される。検索結果は、例えばファイルに出力されて、通信装置110からの要求に応じて、通信装置110へ送信されればよい。このようにすれば、記述DB221へのコンパイル済みデータの格納や、特定の可視化用の分析処理の実行(特定の検索条件の実行)を自動化することができる。また、ユーザは、既に作成されている分析結果を所望のタイミングでファイルにより確認することができる。
【0061】
この例では、通信装置120からソースコードを受信したことが一連の処理のトリガである場合を例に説明したが、トリガは他のものであってもよい。特定の時刻になったことに応じてS402~S412の処理を実行してもよいし、特定の数のソースコードを受信したことに応じてS402~S412の処理を実行してもよい。或いは、リポジトリ220に格納されたソースコードが所定のデータ量だけ増加したことをトリガとしてもよいし、記述DB221が所定のデータ量だけ増加したことをトリガにしてもよい。このようにすれば、一定の時間ごとに、或いは、(コーディング規約を確認するなどの)対象が一定量だけ増加するごとに、自動的に分析結果を得ることができる。1回ごとに手動で分析結果を得る場合に比べて、分析の手間を低減することができ、且つ、所定の時間や量ごとにソースコードの品質をモニタすることが可能になる。
【0062】
<検索条件を指定するユーザインタフェースの例>
次に、
図11を参照して、検索条件を指定する際のユーザインタフェースについて説明する。なお、
図11に示すユーザインターフェースは、例えば、情報処理装置100が表示用のページ情報を作成して通信装置110へ送信し、通信装置110がブラウザアプリケーションを実行することにより表示される。
【0063】
図11では、検索条件を指定する画面1101が通信装置110の表示部306に表示されている様子を例示的に示している。画面1101は、予めSQLで構成した検索設定ファイルのなかから所望の検索設定ファイルを選択することができる「検索設定から選択」に係る項目1102と、所望のデータベースモデルの要素を選択することができる「データベースモデルの要素から選択」に係る項目1103とを含む。更に、画面1101は、ユーザが新たにデータベース言語でクエリを作成することができる「データベース言語でクエリを作成」に係る項目1104を更に含む。作成されたクエリは、例えば、検索設定として情報処理装置100に登録される。
【0064】
例えば、ユーザが、カーソル1108により、検索設定「api-select-throw-class」を選択した場合、選択されたことを示すチェックマーク1107が表示されてよい。特定の検索設定が選択されると、通信装置110から情報処理装置100に選択された項目が通知され、情報処理装置100はチェックマーク1107が付加されたページ情報を通信装置110に送信するようにしてもよい。このとき、ユーザが複数の検索設定を選択可能であってよい。その後、ユーザが検索実行ボタン1110を押下すると、選択されている検索条件が情報処理装置100に送信される。情報処理装置100は、選択されている検索条件を受け付けて(上述のS410)、その後のS410以降の処理を実行する。
【0065】
画面1101において、ユーザは、データベースモデルの要素1106ごとに検索条件を設定してもよい。データベースモデルの要素ごとに検索を実行する場合には検索結果が大量となることが考えられる。このため、検索結果にフィルタを設定することができるようにしてもよい。フィルタは、例えば、特定の作成期間に作成又は更新されたプログラムや、特定のキーワードを含むプログラムなどを対象とするように、設定されてよい。
【0066】
画面1101において、ユーザが、データベース言語を用いて新たにクエリを構成することができる。例えば、新規作成ボタン1109が押下された場合には、SQLを用いてクエリを記述可能な画面(不図示)に遷移してよい。新たに生成されたクエリは、新たな検索条件として情報処理装置100で検索に用いられる。
【0067】
<検索結果を表示するユーザインタフェースの例>
次に、検索結果を表示するためのユーザインタフェースの例について、
図12を参照して説明する。なお、
図12に示すユーザインターフェースは、例えば、情報処理装置100が表示用のページ情報を作成して通信装置110へ送信し、通信装置110がブラウザアプリケーションを実行することにより表示される。
【0068】
図12では、検索結果を表示する画面1201が通信装置110の表示部306に表示されている様子を例示的に示している。画面1201は、指定された検索条件を表示する「検索条件」に係る項目1202と、指定された検索条件の内容を示す「説明」に係る項目1103とを含む。また、画面1201は、検索されたソースコードを示す欄を含み、ソースコードファイル一覧1204と、選択されたファイル内の該当個所を表示するソースコードエディタ1206とが表示される。
【0069】
ソースコードファイル一覧1204には、検索条件を満たしたソースコードのファイル一覧が表示されている。ユーザがカーソル1205により1つのファイルを選択すると、選択されたファイル内において検索条件に合致した部分がソースコードエディタ1206に表示される。情報処理装置100は、編集ボタン1207が押下された場合には、表示されているソースコードを編集可能にしてもよい。このようにすれば、仮に「api-select-throw-class」で検索されたコードが、コーディング規約を満たしていない場合に、当該ソースコードを容易に修正することができる。
【0070】
<検索結果に関する統計を表示するユーザインタフェースの例>
更に、検索結果に関する統計を表示するためのユーザインタフェースの例について、
図13を参照して説明する。なお、
図13に示すユーザインターフェース(統計表示画面1301)は、例えば、情報処理装置100が表示用のページ情報を作成して通信装置110へ送信し、通信装置110がブラウザアプリケーションを実行することにより表示される。
【0071】
上述のように、情報処理装置100は、ソースコードの入力や特定のタイミングをトリガとして、予め定めた検索条件を実行し、検索結果を記録したファイルを生成することができる。情報処理装置100は、このように生成した所定の期間のファイルを用いて、検索結果の時間推移や統計値を生成するようにしてもよい。
【0072】
統計表示画面1301は、統計表示の対象である検索条件を表示する「検索条件」に係る項目1302と、検索条件の内容を示す「説明」に係る項目1303とを含む。また、統計表示画面1301は、検索結果に関する統計量の表示として、例えば、検出数の推移や検出数の平均及び分散を表示することができる。カーソル1305により期間1306のなかから所望の期間を指定することができ、グラフ領域1304には、期間1306で指定された期間における、検出数の推移1307と、当該期間における検出数の平均や分散が表示される。情報処理装置100は、例えば、検索条件や期間が指定されると、指定された期間に生成した、検索条件に対応したファイル(CSVファイル等)からデータを読み出す。そして、読み出したデータに基づいて検出数をカウントし、平均値や分散値を算出する。情報処理装置100は、得られたカウント数や算出結果を用いて、統計表示画面1301を生成し、通信装置110に送信する。
【0073】
なお、
図13に示す例は、1つの検索条件について情報を表示する例を示したが、複数の検索条件について情報を表示するようにしてもよい。また、複数の検索条件の情報を表示する際に、それぞれの検索条件に係る情報を比較可能なように、並べて表示してもよい。
【0074】
このように、自動的に生成された検索結果に係るファイルから検索結果に関する統計量を表示することで、ソースコードの品質をより容易に可視化することがすることができ、また、様々な観点からソースコードの品質を分析可能になる。
【0075】
以上説明したように本実施形態では、ソースコードをコンパイルして生成された実行可能コードに基づいて、プログラム内のプログラム要素を分類するための各要素に合致する記述を取得するようにした。また、取得された記述を、データベースに格納し、データベース言語を用いて構成される検索条件に従って、データベースから当該検索条件を満たす記述を検索するようにした。このようにすることで、コンパイルされた、より動作に準じた対象から所望の箇所を容易に特定することが可能になる。また、データベース言語を用いた多様な検索条件で検索することで、大量データをより容易に且つ多角的な視点で分析することができるようになり、蓄積された大量のソースコードに対する分析の可視化が可能になる。
【0076】
発明は上記の実施形態に制限されるものではなく、発明の要旨の範囲内で、種々の変形・変更が可能である。
【符号の説明】
【0077】
100…情報処理装置、110…通信装置、120…通信装置、202…制御手段、212…実行可能コード生成部、213…記述取得部、214…記述格納部、215…検索条件設定部、217…検索実行部、218…ファイル生成部