(57)【要約】【課題】保守作業やコードの更新作業を効率化する。【解決手段】情報処理装置は、記憶部と受付部と解析部と判定部と出力制御部とを備える。記憶部は、１以上のソースコードの特徴をそれぞれ表す１以上の第１特徴情報と、前記ソースコードの更新状況を表す１以上の補助情報と、を対応づけて記憶する。受付部は、解析対象とするソースコードの特徴を表す第２特徴情報の入力を受け付ける。解析部は、第１特徴情報と第２特徴情報との類似度を算出する。判定部は、類似度に基づいて、記憶部に記憶された補助情報から、出力する補助情報を選択する。出力制御部は、選択された補助情報を出力する。【選択図】図１
2015179312.tif 000002
【特許請求の範囲】
【請求項１】
１以上のソースコードの特徴をそれぞれ表す１以上の第１特徴情報と、前記ソースコードの更新状況を表す１以上の補助情報と、を対応づけて記憶する記憶部と、
解析対象とするソースコードの特徴を表す第２特徴情報の入力を受け付ける受付部と、
前記第１特徴情報と前記第２特徴情報との類似度を算出する解析部と、
前記類似度に基づいて、前記記憶部に記憶された前記補助情報から、出力する前記補助情報を選択する判定部と、
選択された前記補助情報を出力する出力制御部と、
を備える情報処理装置。
【請求項２】
前記補助情報は、前記ソースコードの更新の履歴を表す情報、前記ソースコードの更新の目的を表す情報、および、前記ソースコードの更新前後のコストまたは性能の変化を表す情報、のうち少なくとも１つを含む、
請求項１に記載の情報処理装置。
【請求項３】
前記出力制御部は、選択された前記補助情報に対応する前記第１特徴情報と前記第２特徴情報との類似度をさらに出力する、
請求項１に記載の情報処理装置。
【請求項４】
前記受付部は、さらに、解析対象とするソースコードを特定する特定情報の入力を受け付け、
前記出力制御部は、前記特定情報で特定されるソースコードと、選択された前記補助情報と、を対応づけて出力する、
請求項１に記載の情報処理装置。
【請求項５】
前記受付部は、前記第２特徴情報から、前記第１特徴情報と比較する第３特徴情報を抽出し、
前記解析部は、前記第３特徴情報と前記第１特徴情報との類似度を算出する、
請求項１に記載の情報処理装置。
【請求項６】
１以上のソースコードの特徴をそれぞれ表す１以上の第１特徴情報と、前記ソースコードの更新状況を表す１以上の補助情報と、を対応づけて記憶する記憶部を備えるコンピュータを、
解析対象とするソースコードの特徴を表す第２特徴情報の入力を受け付ける受付部と、
前記第１特徴情報と前記第２特徴情報との類似度を算出する解析部と、
前記類似度に基づいて、前記記憶部に記憶された前記補助情報から、出力する前記補助情報を選択する判定部と、
選択された前記補助情報を出力する出力制御部、
として機能させるためのプログラム。
【請求項７】
前記補助情報は、前記ソースコードの更新の履歴を表す情報、前記ソースコードの更新の目的を表す情報、および、前記ソースコードの更新前後のコストまたは性能の変化を表す情報、のうち少なくとも１つを含む、
請求項６に記載のプログラム。
【請求項８】
前記出力制御部は、選択された前記補助情報に対応する前記第１特徴情報と前記第２特徴情報との類似度をさらに出力する、
請求項６に記載のプログラム。
【請求項９】
前記受付部は、さらに、解析対象とするソースコードを特定する特定情報の入力を受け付け、
前記出力制御部は、前記特定情報で特定されるソースコードと、選択された前記補助情報と、を対応づけて出力する、
請求項６に記載のプログラム。
【請求項１０】
前記受付部は、前記第２特徴情報から、前記第１特徴情報と比較する第３特徴情報を抽出し、
前記解析部は、前記第３特徴情報と前記第１特徴情報との類似度を算出する、
請求項６に記載のプログラム。
【請求項１１】
１以上のソースコードの特徴をそれぞれ表す１以上の第１特徴情報と、前記ソースコードの更新状況を表す１以上の補助情報と、を対応づけて記憶する記憶部を備える情報処理装置で実行される情報処理方法であって、
解析対象とするソースコードの特徴を表す第２特徴情報の入力を受け付ける受付ステップと、
前記第１特徴情報と前記第２特徴情報との類似度を算出する解析ステップと、
前記類似度に基づいて、前記記憶部に記憶された前記補助情報から、出力する前記補助情報を選択する選択ステップと、
選択された前記補助情報を出力する出力制御ステップと、
を含む情報処理方法。
【請求項１２】
前記補助情報は、前記ソースコードの更新の履歴を表す情報、前記ソースコードの更新の目的を表す情報、および、前記ソースコードの更新前後のコストまたは性能の変化を表す情報、のうち少なくとも１つを含む、
請求項１１に記載の情報処理方法。
【請求項１３】
前記出力制御ステップは、選択された前記補助情報に対応する前記第１特徴情報と前記第２特徴情報との類似度をさらに出力する、
請求項１１に記載の情報処理方法。
【請求項１４】
前記受付ステップは、さらに、解析対象とするソースコードを特定する特定情報の入力を受け付け、
前記出力制御ステップは、前記特定情報で特定されるソースコードと、選択された前記補助情報と、を対応づけて出力する、
請求項１１に記載の情報処理方法。
【請求項１５】
前記受付ステップは、前記第２特徴情報から、前記第１特徴情報と比較する第３特徴情報を抽出し、
前記解析ステップは、前記第３特徴情報と前記第１特徴情報との類似度を算出する、
請求項１１に記載の情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
解析対象ソースコード中で類似または一致した部分を抽出する技術が存在する。この技術は、あるソースコードからバグが発見された場合に、類似コードを発見することで保守作業効率を上げるために用いられている。この技術は、特に大規模なソフトウェア開発などの際に有用な技術である。完全に同一のソースコードを発見することは容易である。しかし、類似ソースコードを発見するためには、変数、関数名、および、パラメータ等の違いに対して柔軟である必要がある。このため、ソースコードを標準化させることでコーディングスタイルに依存しにくい類似コード検出技術が用いられている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第４５６０６０８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術では、同一または類似のコードを発見できるのみである。このため、例えば発見したコードに対してとるべき処理に関する情報が得られず、保守作業やコードの更新作業を十分に効率化できない場合があった。
【課題を解決するための手段】
【０００５】
実施形態の情報処理装置は、記憶部と受付部と解析部と判定部と出力制御部とを備える。記憶部は、１以上のソースコードの特徴をそれぞれ表す１以上の第１特徴情報と、ソースコードの更新を補助する１以上の補助情報と、を対応づけて記憶する。受付部は、解析対象とするソースコードの特徴を表す第２特徴情報の入力を受け付ける。解析部は、第１特徴情報と第２特徴情報との類似度を算出する。判定部は、類似度に基づいて、記憶部に記憶された補助情報から、出力する補助情報を判定する。出力制御部は、判定で選択された補助情報を出力する。
【図面の簡単な説明】
【０００６】
【図１】実施形態の情報処理装置の機能ブロック図。
【図２】実施形態における情報処理装置の出力処理のフローチャート。
【図３】出力処理の詳細を示す図。
【図４】解析対象スコープ、特徴情報および特徴情報の例を示す図。
【図５】スコープ位置情報の例を説明する図。
【図６】辞書のデータ構造の一例を示す図。
【図７】更新結果情報と履歴情報と特徴情報との関係を示す図。
【図８】解析処理で用いられる辞書群の一例を示す図。
【図９】解析処理のフローチャート。
【図１０】特徴情報をベクトルに変換する例を示す図。
【図１１】特徴情報をベクトルに変換する例を示す図。
【図１２】解析結果の一例を示す図。
【図１３】解析結果群から判定結果群を判定する判定パターンの図。
【図１４】出力制御部による出力制御処理のフローチャート。
【図１５】補助情報の表示方法の具体例を示す図。
【図１６】スコープの例を示す図。
【図１７】解析対象ソースコードと解析対象スコープの関係を示す図。
【図１８】解析対象ソースコードと解析対象スコープの関係を示す図。
【図１９】本実施形態にかかる情報処理装置のハードウェア構成図。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、この発明にかかる情報処理装置の好適な実施形態を詳細に説明する。
【０００８】
上述のように、従来技術は、ソースコード内における類似コードの発見のみを目的としており、元となるソースコードの分類属性については考慮していない。このため、ユーザが得ることのできる情報は類似コードのみであり、類似コード発見後にユーザがとるべきアクションに関する情報などの、ソースコードの更新を補助する情報（補助情報）は得られない。さらに、入力をソースコードのみに限定しているため、ソースコード更新ログやトレース情報を用いた解析を実行できない等の問題があった。
【０００９】
本実施形態では、ソースコード等のスコープに対して、ユーザがスコープの特徴を確認する場合やスコープを更新する際に用いる補助情報を記憶しておく。そして、類似するスコープに対応する補助情報を出力可能とする。これにより、類似のスコープを発見した際に元ソースコードに類似する特徴を持つスコープを予測して分類すること、および、分類によって得られたスコープの特徴情報からユーザがとるべきアクションに関する情報を表示すること、および、開発者や開発チームが個別に蓄積していた情報や知識を表示することが可能となる。
【００１０】
以下、図１を参照しながら本実施形態について説明する。図１は、情報処理装置の機能構成例を示すブロック図である。情報処理装置１００は、受付部１０１と、記憶部１０２と、解析部１０３と、判定部１０４と、出力制御部１０５を備える。
【００１１】
記憶部１０２は、１以上のソースコードの特徴をそれぞれ表す１以上の特徴情報（第１特徴情報）と、ソースコードの更新状況を表す１以上の補助情報と、を対応づけて記憶する。記憶部１０２のデータ保存方法は、例えば、一般的に用いられているファイルシステムに保存する方法を用いる。特徴情報および補助情報の詳細は後述する。なお、記憶部１０２は、ＨＤＤ（Hard  Disk  Drive）、光ディスク、メモリカード、ＲＡＭ（Random  Access  Memory）などの一般的に利用されているあらゆる記憶媒体により構成することができる。
【００１２】
受付部１０１は、各種情報の入力を受け付ける。例えば、受付部１０１は、解析対象とするスコープ（解析対象スコープ）の特徴を表す特徴情報（第２特徴情報）の入力を受け付ける。スコープとは、解析対象とするソースコード（解析対象ソースコード）の全部または一部であり、少なくとも１つのプログラム処理単位のソースコードを含むソースコードを示す。
【００１３】
受付部１０１による情報の入力方法は、例えば、一般的に用いられているファイルシステムからの入力方法を用いる。情報の入力方法はこれに限られるものではない。例えば、ネットワークを介してメモリに読み込んだ情報を入力する方法であってもよい。また、その他の方法としては、例えば、ＧＵＩ（Graphical  User  Interface）を利用してインタラクティブに情報を入力させる方法などがある。
【００１４】
解析部１０３は、記憶部１０２に記憶された特徴情報（第１特徴情報）と、解析対象スコープの特徴情報（第２特徴情報）との類似度を算出する。解析部１０３は、算出した類似度、および、記憶された補助情報などを含む解析結果を出力する。解析部１０３による解析処理の詳細は後述する。
【００１５】
判定部１０４は、算出された類似度に基づいて、記憶部１０２に記憶された補助情報から、出力する補助情報を判定する。判定部による判定処理の詳細は後述する。
【００１６】
出力制御部１０５は、判定された補助情報を、例えば液晶ディスプレイなどの表示装置（図示せず）に出力（表示）する処理を制御する。出力制御部１０５は、例えば、一般的に用いられているＧＵＩ（Graphical  User  Interface）を利用してインタラクティブに補助情報を出力する。なお、出力方法は表示装置に表示する方法に限られるものではない。例えば出力制御部１０５は、ネットワークを介して他の端末等に補助情報を出力する方法、ファイルシステムへ補助情報を出力する方法、および、プリンタ等を用いて補助情報を印刷することにより出力する方法、などを用いてもよい。
【００１７】
なお、受付部１０１、解析部１０３、判定部１０４、および、出力制御部１０５は、例えば、ＣＰＵ（Central  Processing  Unit）などの処理装置にプログラムを実行させること、すなわち、ソフトウェアにより実現してもよいし、ＩＣ（Integrated  Circuit）などのハードウェアにより実現してもよいし、ソフトウェアおよびハードウェアを併用して実現してもよい。
【００１８】
次に、このように構成された本実施形態にかかる情報処理装置１００による出力処理の概要について図２を用いて説明する。図２は、本実施形態における出力処理の一例を示すフローチャートである。
【００１９】
受付部１０１は、解析対象スコープの特徴情報（第２特徴情報）の入力を受け付ける（ステップＳ１０１）。また、受付部１０１は、受け付けた特徴情報からスコープ位置情報を抽出する（ステップＳ１０２）。スコープ位置情報とは、解析対象スコープを特定する情報（特定情報）である。例えばスコープ位置情報は、ソースコードにおけるスコープの位置を特定する情報である。スコープ位置情報の詳細は後述する。
【００２０】
解析部１０３は、解析対象スコープの特徴情報と、記憶部１０２に記憶された特徴情報とを比較する（ステップＳ１０３）。後述するように、解析部１０３は、受け付けられた特徴情報を、記憶された特徴情報と比較するための形式に変換し、変換した特徴情報と記憶された特徴情報とを比較してもよい。解析部１０３は、比較時に算出した類似度、および、記憶された補助情報などを含む解析結果を出力する（ステップＳ１０４）。
【００２１】
判定部１０４は、解析部１０３で得られた１つ以上の解析結果から、類似度および補助情報のうち少なくとも１つを用いた評価条件（評価式）を用いて１個以上の解析結果を選択するか、または解析結果を選択しないという判定をする（ステップＳ１０５）。次に、出力制御部１０５は、解析対象スコープの特徴情報から抽出されたスコープ位置情報と、選択された解析結果（以下、判定結果という）を用いて、スコープ更新の補助情報を表示する（ステップＳ１０６）。
【００２２】
以下では、図３を用いて、情報処理装置１００による出力処理の詳細についてさらに説明する。なお図３に示す処理は一例でありこれに限られるものではない。
【００２３】
解析対象スコープ３０１は、例えばブロック単位などの、解析に適した処理単位を含む。特徴情報３０２は、解析対象スコープ３０１の特徴を表す情報を含む情報である。より具体的には、特徴情報３０２は、ソースコード自体の特徴を示す情報、またはソースコードの実行履歴情報（トレース情報）のいずれかを少なくとも含む情報である。例えば、特徴情報３０２は、解析対象スコープに関連付けられたソースコードのトレース結果など情報である。受付部１０１は、解析対象スコープ３０１に関連付けられた特徴情報３０２を入力する。
【００２４】
受付部１０１は、特徴情報３０２から、記憶部１０２に記憶された特徴情報と比較するための特徴情報３０４（第３特徴情報）を抽出する。なお、特徴情報３０２が記憶部１０２に記憶された特徴情報と比較可能な形式の場合は、特徴情報３０４の抽出処理を実行しなくてもよい。この場合は、特徴情報３０２が、記憶部１０２に記憶された特徴情報との比較に用いられる。
【００２５】
特徴情報３０４は、特徴情報３０２から抽出した情報を元に、文字列、整数、および実数などのパラメータ値の組合せで表現される。図４は、解析対象スコープ３０１、特徴情報３０２、および、特徴情報３０４の例を示す図である。解析対象スコープ３０１は、例えばソースコードが変更された箇所や変更を行う予定のソースコードの箇所である。
【００２６】
図４の例では、特徴情報３０２は、コードレビューの評価分類等で用いられる情報である“コード変更理由”、“テスト結果”、“コード規約”、“パフォーマンス”、および、“コメント文の有無”の情報を含む。
【００２７】
特徴情報３０４は、スコープの特徴を示す項目であるパラメータキーと、パラメータキーの値を示すパラメータ値を含む。例えば特徴情報３０４は、パラメータキーとして、ｗｏｒｄ［０］、ｗｏｒｄ［１］、ｗｏｒｄ［２］、ｔｅｓｔ、ｆｏｒｍａｔ、ｐｅｒｆｏｒｍａｎｃｅ、および、ｃｏｍｍｅｎｔを含む。なお、これらのパラメータキーは一例であり、これらに限られるものではない。
【００２８】
ｗｏｒｄ［ｎ］（ｎ＝０、１、・・・）は、特徴情報３０２に含まれる単語を設定するパラメータキーである。ｔｅｓｔは、テストをクリアしたか否かを設定するパラメータキーである。ｆｏｒｍａｔは、コード規約を満たすか否かを設定するパラメータキーである。ｐｅｒｆｏｒｍａｎｃｅは、性能（パフォーマンス）の改善度合いを設定するパラメータキーである。ｃｏｍｍｅｎｔは、コメント文の有無を設定するパラメータキーである。
【００２９】
図４の例では、特徴情報３０２における“コード変更理由”で用いられた単語が、パラメータキーｗｏｒｄ［０］、ｗｏｒｄ［１］、ｗｏｒｄ［２］に対応するパラメータ値“ｒｅｆａｃｔｏｒ”、“ｂｕｇ”、“ｔｅｓｔ”で示されている。
【００３０】
なお、ｗｏｒｄの個数は３に限られるものではなく、任意の個数としてよい。例えば、特徴情報３０２に含まれるすべての単語（すべての名詞などでもよい）を抽出して特徴情報３０４のパラメータキーｗｏｒｄ［０］、ｗｏｒｄ［１］、・・・に設定してもよい。予め定められた登録語と同一または類似する単語を抽出してもよい。
【００３１】
特徴情報３０２の“テスト結果”は、すべてのテストにおいて、性能や機能などユーザが指定した条件を満たしていることを示している。従って、パラメータキーｔｅｓｔに対しては、テストが条件を満たしていることを示すパラメータ値“１”が設定される。テストが条件を満たしていない場合は、例えばパラメータ値“０”が設定される。パラメータ値は２値だけでなく、例えばパラメータ値“０．６”など、すべてのテストの中でユーザが指定した条件を満たしているテストの割合を示しても良い。
【００３２】
特徴情報３０２の“コード規約”は、解析対象スコープ３０１がコード規約を満たしていることを示している。従って、パラメータキー“ｆｏｒｍａｔ”に対しては、コード規約を満たすことを示すパラメータ値“１”が設定される。コード規約を満たさない場合は、例えばパラメータ値“０”が設定される。パラメータ値は２値だけでなく、例えばパラメータ値“０．６”など、すべてのテストの中でユーザが指定した条件を満たしているテストの割合を示しても良い。
【００３３】
特徴情報３０２の“パフォーマンス”は、解析対象スコープ３０１の変更等により、性能が１００ｃｙｃｌｅから２００ｃｙｃｌｅに変更したことを示している。性能が０．５倍になっていることから、パラメータキー“ｐｅｒｆｏｒｍａｎｃｅ”に対しては、パラメータ値として実数“０．５”が設定される。
【００３４】
特徴情報３０２の“コメント文の有無”は、コメントが書かれてないことを示している。従って、パラメータキー“ｃｏｍｍｅｎｔ”に対しては、コメントがないことを示すパラメータ値が“０”が設定される。コメントが有る場合は、例えばパラメータ値“１”が設定される。
【００３５】
このように、特徴情報３０４は、通常、複数のパラメータキーの集合となる。各パラメータキーは、１つのパラメータ値を有している。
【００３６】
図３に戻り、受付部１０１は、さらに解析対象スコープ３０１のスコープ位置情報３０３を出力する。スコープ位置情報３０３は、解析対象のスコープを特定する情報である。図５は、スコープ位置情報の例を説明するための図である。図５のスコープ位置情報７０２は、解析対象ソースコード７０１に含まれる解析対象スコープ７１１のスコープ位置情報の２つの例である。
【００３７】
図５に示すように、スコープ位置情報７１２は、ソースコードのパス情報と、ファイル内の解析対象行と、の組合せなどがスコープ位置情報として用いられる。解析対象ソースコードがファイルや関数である場合は、スコープ位置情報７２２のように、ソースコードのパス情報と、ファイル名や関数名と、の組合せをスコープ位置情報として用いてもよい。スコープ位置情報はこれらに限られるものではなく、解析対象スコープを特定できる情報であればよい。
【００３８】
図３に戻り、記憶部１０２は、特徴情報と補助情報とを対応づけて記憶する。図３の辞書３０５は、特徴情報と補助情報とを対応づけた情報を表している。記憶部１０２は、このような辞書の集合である辞書群３０６を記憶している。各辞書３０５は、例えば、特徴情報３０４と共通するパラメータキーを持つ特徴情報を含む。また、各辞書３０５に含まれる補助情報は、例えば、履歴情報および更新結果情報を含む。
【００３９】
履歴情報は、辞書３０５に含まれる特徴情報に関連付けられているソースコードの更新履歴を示す情報である。例えば履歴情報は、更新前のソースコードと、更新後のソースコードとを対応づけた情報である。
【００４０】
更新結果情報は、例えば、属性情報と、差分情報と、を含む。属性情報は、ソースコードの更新の目的を表す情報である。例えば、可読性問題、テスト不足、性能問題、および、コーディング規約問題などが、属性情報として設定されうる。差分情報は、変更によって生じたコスト（実装コスト）や性能変化（性能向上率）等を示す情報である。このような更新結果情報は一例であり、これに限られるものではない。例えば、属性情報および差分情報の一方のみを更新結果情報としてもよい。
【００４１】
図６は、辞書３０５のデータ構造の一例を示す図である。図６に示すように、辞書３０５に含まれる特徴情報８０１のパラメータキーは、図４の特徴情報３０４と同様のパラメータキーで構成される。特徴情報８０１の内部のパラメータ値は、図４の特徴情報３０４とは異なっている。図６の例では、特徴情報８０１に対応する補助情報８０２は、属性情報が“コーディング規約問題”であり、差分情報が“コスト  ０．１”である更新結果情報を含む。また、補助情報８０２は、解析対象ソースコードの更新前後で表現した履歴情報を含む。“レビュー前”以下のソースコードが解析対象ソースコードの更新前の情報であり、“レビュー後”以下のソースコードが解析対象ソースコードの更新後の情報である。
【００４２】
次に、辞書３０５に含まれる更新結果情報と履歴情報と特徴情報との関係性について図７を用いて説明する。図７は、辞書に含まれる更新結果情報と履歴情報と特徴情報との関係を示す図である。
【００４３】
辞書に記憶する特徴情報５０１は第２のスコープの特徴情報５１１から生成される。履歴情報５０２は、特徴情報５１１とその他のスコープ（スコープＡ，Ｂ）の特徴情報５１２、５１３に基づいて生成される。更新結果情報５０３ａ〜５０３ｃは、特徴情報５１１と、その他のスコープの特徴情報５１２、５１３とに基づいて生成される。生成される更新結果情報は１つとは限らず、複数であってもよい。例えば図７では、第２のスコープの特徴情報５１１と、スコープＡの特徴情報５１２とから、複数の更新結果情報５０３ａおよび５０３ｂが生成されている。例えば、スコープAとスコープBは第2のスコープの更新前後のスコープと設定される。なお、スコープAとスコープBは更新の前後に限定される必要はなく、第２のスコープの差分のある他のスコープであってもよい。さらに、更新結果情報は、属性情報および差分情報を１つ以上関連付けることが可能である。
【００４４】
図３に戻り、解析部１０３は、記憶部１０２に記憶されている辞書群３０６を入力とし、特徴情報３０４と辞書３０５に含まれる特徴情報との類似度、辞書３０５に含まれる履歴情報、および、辞書３０５に含まれる更新結果情報を含む解析結果３０７を生成する。解析結果３０７は１つ以上出力されるため、これをまとめて解析結果群３０８とする。
【００４５】
図８〜図１１を用いて、解析部１０３による解析処理について説明する。図８は、解析処理で用いられる辞書群３０６の一例を示す図である。図９は、解析処理の一例を示すフローチャートである。なお、入力となる辞書と特徴情報とは、図６で説明した特徴情報８０１と同じパラメータキーで構成されるものとする。また、属性情報は、可読性問題、テスト不足、性能問題、および、コーディング規約問題の４種類を含む。なお、特徴情報のパラメータキーが増えた場合も、同様の挙動をとる。
【００４６】
解析部１０３は、初めに、辞書群３０６から出力されるすべての辞書３０５と特徴情報３０４とを入力する。解析部１０３は、特徴情報３０４と、辞書３０５に含まれる特徴情報と、を比較に適したフォーマットに変換する（ステップＳ２０１）。
【００４７】
図１０および図１１は、特徴情報をベクトルに変換する例を示す図である。図１０および図１１では、パラメータキーｗｏｒｄ［］を、単語が出現したか否かを２値（例えば、出現した場合「１」、出現しない場合「０」）で表すパラメータキーに変換する例が示されている。パラメータキーｗｏｒｄ＿ｒｅｆａｃｔｏｒ、ｗｏｒｄ＿ｂｕｇ、ｗｏｒｄ＿ｔｅｓｔ、および、ｗｏｒｄ＿ｐｅｒｆｏｒｍａｎｃｅは、それぞれ単語「ｒｅｆａｃｔｏｒ」、「ｂｕｇ」、「ｔｅｓｔ」および「ｐｅｒｆｏｒｍａｎｃｅ」が出現したか否かを表す。
【００４８】
パラメータキー“ｔｅｓｔ”、“ｆｏｒｍａｔ”、“ｃｏｍｍｅｎｔ”などのパラメータ値（「０」「１」）については、そのまま採用することができる。パラメータキー“ｐｅｒｆｏｒｍａｎｃｅ”については、パラメータ値が１．０を超えた場合はパラメータ値を１に変換し、１．０以内はパラメータ値を０としてもよい。
【００４９】
フォーマット変換を行うことで、特徴情報をベクトルとして扱うことが可能になる。これにより、例えば特徴情報の比較処理の負荷を軽減することができる。ただし、特徴情報が比較できるフォーマットで表されている場合など、解析部１０３が特徴情報を変換する必要がない場合もある。
【００５０】
次に、解析部１０３は、特徴情報３０４との解析に用いられていない辞書３０５を１つ選択する（ステップＳ２０２）。解析部１０３は、選択した辞書３０５に含まれる特徴情報と、特徴情報３０４との類似度を算出する（ステップＳ２０３）。類似度は、辞書３０５に含まれる特徴情報と特徴情報３０４とが類似する度合いを示す指標である。類似度は、各特徴情報に共通に含まれるパラメータキー（共通パラメータキー）を用いて算出する。
【００５１】
例えば類似度は、フォーマット変換（ステップＳ２０１）によって生成された、特徴情報３０４のベクトル、および、辞書３０５に含まれる特徴情報のベクトルのｃｏｓ類似度を用いて算出される。各ベクトルをｘ、ｙとすると、ｃｏｓ類似度は、以下の(１)式で算出される。ただし、｜ｘ｜はｘのノルムであり、｜ｙ｜はｙのノルムである。
ｃｏｓ（ｘ，ｙ）＝ｘｙＴ／｜ｘ｜｜ｙ｜  ・・・（１）
【００５２】
例えば図１０で表したベクトルおよび図１１で表したベクトルのｃｏｓ類似度は、以下の（２）式で表されるように約８０％となる。
ｃｏｓ（ｘ，ｙ）＝５／６≒０．８  ・・・（２）
【００５３】
類似度の算出方法は上記の例に限らず、特徴情報間の類似度を算出できるアルゴリズムであればどのような算出方法であってもよい。例えば、特徴情報に含まれるパラメータキーごとに類似度を比較し、各類似度の合計（重み付け加算値などでもよい）を、特徴情報間の類似度としてもよい。各パラメータ値が文字列の場合は、一致する文字の割合、および、文字列間の編集距離などを類似度として用いてもよい。
【００５４】
次に解析部１０３は、選択した辞書に含まれる更新結果情報を、解析結果として出力する更新結果情報とする（ステップＳ２０４）。さらに解析部１０３は、選択した辞書に含まれる補助情報を、解析結果として出力する補助情報とする（ステップＳ２０５）。解析部１０３は、ステップＳ２０３〜ステップＳ２０５で生成された類似度と履歴情報と更新結果情報の組合せを解析結果（図３では解析結果３０７）として生成する（ステップＳ２０６）。解析部１０３は、ステップＳ２０２で選択した辞書で、特徴情報３０４との解析が行われていない辞書があるか否かを判断する（ステップＳ２０７）。解析が行われていない辞書がある場合（ステップＳ２０７：Ｙｅｓ）、ステップＳ２０２に戻り処理を繰り返す。解析が行われていない辞書がない場合（ステップＳ２０７：Ｎｏ）、解析部１０３は、解析処理を終了する。
【００５５】
解析結果の具体例について、図１２を用いて説明する。図１２は、解析結果の一例を示す図である。図１２の上に書かれているパラメータ値の組合せは、解析部１０３の入力となった特徴情報３０４である。図１２の下のパラメータ値の組合せは、特徴情報３０４と選択された辞書群３０６に含まれる各特徴情報とを比較した結果である。図１２は、図８の辞書群に対応する４つの解析結果を示している。１つの解析結果は、１列で更新結果情報、類似度、および、履歴情報の順に示されている。図１２の例では、特徴情報３０４は、可読性問題の属性を持つ、ある辞書に対する類似度が８０％であり、この辞書の持つ履歴情報が解析結果の履歴情報として示されている。残りの３つの辞書に対しても同様の情報が示されている。例では、更新結果情報はすべて異なっているが、更新結果情報における属性情報が同様で類似度や更新結果情報における差分情報や履歴情報も異なる場合もある。これは、個々の辞書毎に解析を行うためである。
【００５６】
記憶部１０２から解析部１０３への情報の入力方法は、例えば、一般的に用いられているファイルシステムから情報を入力する方法を用いる。また、ネットワークを介して既にメモリに読み込んだ情報を入力する方法であってもよい。また、その他の方法としては、例えば、ＧＵＩ（Graphical  User  Interface）を利用してインタラクティブに入力させる方法などがある。
【００５７】
図３に戻り、判定部１０４は、解析部１０３から出力された解析結果群３０８から、類似度を用いた評価条件によって１個以上の判定結果３０９を選択するか、または判定結果を選択しないという判定をする。例えば、類似度が高い順にｎ個の解析結果を判定する条件などを評価条件として用いることができる。判定結果全体は判定結果群３１０とする。判定部１０４が、解析結果群３０８から判定結果群３１０を判定する基本的な判定パターンについて、図１３を用いて説明する。図１３の判定パターンは、解析結果群１３０１の中から類似度が高い解析結果をｎ個選択するパターンである。図１３の例では、判定部１０４は、類似度が高い解析結果をｎ＝２個選択する。この結果、類似度が９０％と８０％であった２つの解析結果が判定結果として判定されている（判定結果群１３０２）。
【００５８】
判定部１０４による判定方法（判定パターン）はこれに限られるものではない。例えば、類似度、更新結果情報に含まれる属性情報、および、更新結果情報に含まれる差分情報のうち少なくとも１つを用いた条件であれば評価条件として用いることができる。例えば、類似度が所定の閾値以上（または閾値未満）、かつ、ｎ個以内の解析結果を選択する評価条件を用いてもよい。また例えば、差分情報としての性能向上率が所定の閾値以上（または閾値未満）、かつ、ｎ個以内の解析結果を選択する評価条件を用いてもよい。
【００５９】
図３に戻り、出力制御部１０５は、０個以上の判定結果群から解析対象スコープ３０１の補助情報３１１を出力する。出力制御部１０５は、スコープ位置情報３０３で特定されるソースコードと、補助情報とを対応づけて出力する。補助情報は、更新結果情報および履歴情報のいずれかでもよいし、両方でもよい。補助情報の他に、類似度を出力してもよい。
【００６０】
図１４は、出力制御部１０５による出力制御処理の一例を示すフローチャートである。判定結果群３１０に含まれる判定結果３０９は、０個以上という条件を持つ。このため、判定結果３０９が０個である場合と１個以上の場合とで表示までの工程が変化する。すなわち、出力制御部１０５は、判定結果が１個以上存在するか否かを判断する（ステップＳ３０１）。存在しない場合、すなわち、判定結果が０個の場合（ステップＳ３０１：Ｎｏ）、出力制御部１０５は、疑似的な補助情報を生成する（ステップＳ３０２）。例えば、出力制御部１０５は、判定結果が存在しないことを示す補助情報を生成する。
【００６１】
判定結果が１個以上存在する場合（ステップＳ３０１：Ｙｅｓ）、出力制御部１０５は、スコープ位置情報３０３と、判定結果群に含まれる判定結果の補助情報を表示する（ステップＳ３０３）。図１５は、補助情報の表示方法の具体例を示す図である。図１５は、解析対象スコープに対して類似度の高い２つの判定結果の更新結果情報と履歴情報とを表示する例である。図１５の例では、解析対象ソースコード１５０１のファイルのパス名とソースコードの関数が示され、その関数の中のループが解析対象スコープ１５１１として点線で囲われている。
【００６２】
解析対象スコープを特定するための出力方法は図１５の例に限られるものではなく、解析対象スコープの位置が特定できるのであれば、どのような方法であってもよい。例えば、解析対象ソースコードのファイルのパス名と、解析対象ソースコード内でのコード行とによって示されていても構わない。出力制御部１０５が、スコープ位置情報で特定される解析対象スコープ１５１１と補助情報１５０２とを対応づけて出力することにより、解析対象スコープに関連する更新結果情報と履歴情報とが明らかとなる。
【００６３】
次に、解析対象スコープ、解析部１０３における比較方法、判定部１０４における選択パターン、および、出力制御部１０５における出力方法の変形例について説明する。なお、各変形例を組み合わせる構成等で実施することも可能である。
【００６４】
解析対象スコープにおけるプログラム処理単位とは、例えば、ファイル単位、関数やメソッドなどのブロック単位、ループ処理単位、内部に分岐を含まない基本ブロック単位などが挙げられる。図１６は、関数ブロック単位のスコープ１６１１、ループ処理単位のスコープ１６１２、基本ブロック単位のスコープ１６１３の例を示す図である。最も小さいブロックが基本ブロックで示されている。
【００６５】
プログラム処理単位は、図１６の例に限らず、特定の処理単位で分割可能なソースコードの一部分であれば、どのような分割形式をとってもよい。また、解析対象スコープは、Ｃ言語やＪａｖａ（登録商標）言語のようなプログラミング言語、または、特定の処理装置独自のプログラム言語で記述されたソースコードやコメント文であってもよい。
【００６６】
このような処理単位を含む解析対象ソースコード１６０１に関連付けられた特徴情報１６０２は、図１６に示されるように、データフロー構造、コンパイル時の情報、データ入出力トレース、メモリ操作のトレース、メモリ値のトレース、命令実行情報のトレース、テストケース情報、テスト結果、性能、ソースコード自体の複雑さ、不具合情報、重複コード情報、開発者、更新日時、依存関係にあるスコープ情報など、解析対象スコープに関連する１つ以上の情報で構成される。解析対象ソースコード１６０１の一部または全部を特徴情報に含めてもよい。
【００６７】
上記に限らず、解析対象スコープに関連する要素を含めばいずれも特徴情報としてよい。さらに、解析対象スコープは必ずしも１つでなくてもよい。例えば、解析対象ソースコードが、想定したプログラム処理単位よりも大きい場合は、処理単位ごとに分割して複数の解析対象スコープを生成させることができる。
【００６８】
図１７および図１８は、解析対象ソースコードと解析対象スコープとの関係の例を示す図である。図１７では、１つの解析対象ソースコード１７０１から、ループ処理単位をとる５つの解析対象スコープ１７１１〜１７１５を抽出している。
【００６９】
解析対象ソースコードが、条件文、ループ文、構造体、および、関数呼び出し等でネスト構造をとる場合に、子孫となるスコープも解析対象スコープとして扱うこともできる。図１８では、解析対象ソースコード１８０１内の最初のループ文を解析対象スコープ１８１１としたとき、解析対象スコープ１８１１の内側にもう１つループ文を持つため、内側のループ文を解析対象スコープ１８１２とした。解析対象スコープ１８１２の内部には条件分岐があるため、条件分岐スコープを解析対象スコープ１８１３とした。解析対象スコープ１８１３の内部には関数ｆｕｎｃが含まれているため、関数ｆｕｎｃを解析対象スコープ１８１４とした。上記の例に限らず、どのような関係を持つスコープでも複数入力可能である。
【００７０】
次に、記憶部１０２における辞書群の生成方法について述べる。解析部１０３は、記憶部１０２に記憶されたすべての辞書を入力とするが、辞書で用いられる特徴情報は、特徴情報３０４と共通のパラメータキーを持つ必要がある。そのため、共通のパラメータキーを持たない辞書は解析部１０３に入力することができない。また、記憶部１０２に記憶された辞書のうち、ユーザが解析の対象としていない属性情報を持つ辞書も解析部１０３に入力することはできない。そこで、解析部１０３に入力しない辞書が記憶部１０２に含まれる場合は、解析部１０３に入力する辞書のみを抜き出して辞書群３０６として用いてもよい。例えば、解析部１０３は、解析対象外の属性情報またはユーザが求める範囲外の差分情報を含む辞書を除く辞書を選択して解析処理を実行してもよい。上記の場合に限らず、辞書の更新結果情報が持つ情報であればどの情報を用いて記憶部１０２から辞書を選択してもよい。
【００７１】
次に、解析部１０３における特徴情報のフォーマット変換について述べる。上記の実施形態では、特徴情報のフォーマット変換後のベクトルの各要素はすべて０または１で表現されていたが、各要素は実数で表現することも可能である。
【００７２】
次に、判定部１０４における、解析結果群からの判定結果の選択パターンを示す。最初のパターンは、図１３で既に示したように、解析結果群の中から類似度が高い解析結果をｎ個選択する方法である。上記以外にも、類似度、更新結果情報における属性情報、および、差分情報の任意の組み合わせに対する評価条件を用いて判定結果を選択可能である。
【００７３】
最後に、出力制御部１０５における出力方法について説明する。最初の表示方法は、図１５に示した基本的な表示の例であり、既に説明した。図１５の例に限らず、補助情報（履歴情報、更新結果情報）、および、解析対象スコープを対応づけて出力する方法であればどのような出力方法であってもよい。
【００７４】
以上のように、本実施形態では、コードレビューの例を用いてソフトウェア開発において特定箇所のソースコードの変更に対する補助情報を出力することが可能となる。コードレビューに限らず、性能向上のためのソースコード変更など、様々な目的に対してソースコードを更新する際に効果が期待される。以下では、本実施形態による他の効果の例を示す。
【００７５】
本実施形態は、ソフトウェア開発における経験的知識の共有に効果がある。ソフトウェア開発において、過去のソースコード、トレース情報、および、更新ログ情報などは保存されずに廃棄されることも多い。この場合、過去の資源がその後のソフトウェア開発に生かすことができない。ソースコード、トレース情報、および、更新ログ情報などが保存されている場合でも、特徴情報、履歴情報、および、更新結果情報などを含む辞書が存在しない場合は、解析対象ソースコードに対応する特徴情報に対して有益な補助情報を示すことができない。
【００７６】
本実施形態によれば、過去のソースコードの特徴情報をもとにした辞書を記憶部１０２に記憶しておくことできるため、経験的知識の保存が可能となる。また、辞書に補助情報を持たせることによって、記憶部１０２に含まれる辞書が膨大になった場合でも、ソースコード理解やソースコード変更の際に必要な情報を容易に取り出すことが可能となる。これにより、保守作業やコードの変更作業をより効率化することが可能となる。
【００７７】
本実施形態は、データの軽量化にも効果がある。ソフトウェア開発において、過去の経験的知識を記憶しておくためには、ソースコード、トレース情報、および、更新ログ情報などを保存するという方法が考えられる。しかし、これらの情報をすべて保存するとデータ量が膨大になり、経験的知識の抽出にかかる時間も膨大になり、現実的でない。
【００７８】
本実施形態によれば、ソースコード、トレース情報、および、更新ログ情報などの情報を特徴情報のフォーマットに落とし込んで記憶できる。これにより、必要なデータのみを保存することができ、データ軽量化を実現できる。入力となる特徴情報だけでなく、記憶部１０２に保存される辞書に含まれる特徴情報についても同様のことが言える。
【００７９】
本実施形態は、ソースコードおよび個人情報の機密保持にも効果がある。過去のすべてのソースコード、更新ログ情報、および、トレース情報を記憶部１０２に記憶すると、記憶部１０２にアクセス可能な状態であれば、機密保持が必要となるソースコードおよび個人情報が閲覧可能となり、機密保持が実現できない。
【００８０】
本実施形態では、すべてのソースコード等の情報を記憶するのではなく、必要な情報のみを含む特徴情報および補助情報を記憶すればよい。すなわち、特徴情報や補助情報から機密性のある情報を除外することができる。これにより、記憶部１０２への不正なアクセスがなされた場合にもソースコードや個人情報などの機密保持が可能となる。
【００８１】
本実施形態は、情報閲覧容易性にも効果がある。解析結果をすべて出力すると情報が膨大になり、表示の際にユーザの理解を妨げる可能性がある。しかし、本実施形態によれば、判定部１０４によって表示する情報をユーザが必要とするものだけに限るという限定を行うことができる。これにより、表示した際の情報閲覧の容易性を実現できる。
【００８２】
次に、本実施形態にかかる情報処理装置のハードウェア構成について図１９を用いて説明する。図１９は、本実施形態にかかる情報処理装置のハードウェア構成を示す説明図である。
【００８３】
本実施形態にかかる情報処理装置は、ＣＰＵ（Central  Processing  Unit）５１などの制御装置と、ＲＯＭ（Read  Only  Memory）５２やＲＡＭ（Random  Access  Memory）５３などの記憶装置と、ネットワークに接続して通信を行う通信Ｉ／Ｆ５４と、各部を接続するバス６１を備えている。
【００８４】
本実施形態にかかる情報処理装置で実行されるプログラムは、ＲＯＭ５２等に予め組み込まれて提供される。
【００８５】
本実施形態にかかる情報処理装置で実行されるプログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ（Compact  Disk  Read  Only  Memory）、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ（Compact  Disk  Recordable）、ＤＶＤ（Digital  Versatile  Disk）等のコンピュータで読み取り可能な記録媒体に記録してコンピュータプログラムプロダクトとして提供されるように構成してもよい。
【００８６】
さらに、本実施形態にかかる情報処理装置で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本実施形態にかかる情報処理装置で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
【００８７】
本実施形態にかかる情報処理装置で実行されるプログラムは、コンピュータを上述した情報処理装置の各部として機能させうる。このコンピュータは、ＣＰＵ５１がコンピュータ読取可能な記憶媒体からプログラムを主記憶装置上に読み出して実行することができる。
【００８８】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００８９】
１００  情報処理装置
１０１  受付部
１０２  記憶部
１０３  解析部
１０４  判定部
１０５  出力制御部
３０１  解析対象スコープ
３０２  特徴情報
３０３  スコープ位置情報
３０４  特徴情報
３０５  辞書
３０６  辞書群
３０７  解析結果
３０８  解析結果群
３０９  判定結果
３１０  判定結果群
３１１  補助情報
【図１】
2015179312.tif 000003
【図２】
2015179312.tif 000004
【図３】
2015179312.tif 000005
【図４】
2015179312.tif 000006
【図５】
2015179312.tif 000007
【図６】
2015179312.tif 000008
【図７】
2015179312.tif 000009
【図８】
2015179312.tif 000010
【図９】
2015179312.tif 000011
【図１０】
2015179312.tif 000012
【図１１】
2015179312.tif 000013
【図１２】
2015179312.tif 000014
【図１３】
2015179312.tif 000015
【図１４】
2015179312.tif 000016
【図１５】
2015179312.tif 000017
【図１６】
2015179312.tif 000018
【図１７】
2015179312.tif 000019
【図１８】
2015179312.tif 000020
【図１９】
2015179312.tif 000021