(57)【要約】【課題】より望ましい処理内容や実行結果が得られるソースコードを推薦することができるようにする。【解決手段】システム開発において、開発中のプログラムのソースコードではなく、そのソースコードが変換された中間コードを、データベースに記憶されているプログラムの中間コードと比較する比較部と、その比較部による中間コードの比較結果に基づいて、プログラム同士の類似度を算出する類似度算出部とを備える。また、必要に応じてプログラムの付加情報を用いて推薦候補の絞り込みも行う。本開示は情報処理装置に適用することができる。【選択図】図５
2013003664.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの中間コード同士を比較する比較部と、
前記比較部による比較結果に基づいて、プログラム同士の類似度を算出する類似度算出部と
を備える情報処理装置。
【請求項２】
前記類似度算出部により算出された前記類似度に基づいて、推薦するプログラムを決定する決定部と、
前記決定部により決定された前記プログラムを推薦する推薦部と
をさらに備える請求項１に記載の情報処理装置。
【請求項３】
前記類似度算出部により算出された前記類似度に基づいて、推薦するプログラムの候補を選択する候補選択部と、
前記プログラムの付加情報を用いて、前記選択部により選択された前記候補を絞り込む絞り込み部と
をさらに備え、
前記決定部は、前記絞り込み部により絞り込まれた前記候補を、推薦するプログラムとして決定する
請求項２に記載の情報処理装置。
【請求項４】
前記プログラムの付加情報に応じて、前記決定部により決定された前記プログラムの重み付けを設定する重み付け設定部と、
前記重み付け設定部により設定された、各付加情報に対応する重み付けを用いて、前記決定部により決定された前記プログラムの優先度を決定する優先度決定部と
をさらに備える請求項３に記載の情報処理装置。
【請求項５】
ユーザの指示に従って、前記重み付け設定部により設定された、各付加情報に対応する重み付けを更新する重み付け更新部をさらに備える
請求項４に記載の情報処理装置。
【請求項６】
前記付加情報は、前記プログラムのソースコードの言語種別を含む
請求項３に記載の情報処理装置。
【請求項７】
前記付加情報は、前記プログラムのソースコードの編集日時を含む
請求項３に記載の情報処理装置。
【請求項８】
前記付加情報は、前記プログラムのソースコードが含まれるライブラリを示す情報を含む
請求項３に記載の情報処理装置。
【請求項９】
前記付加情報は、前記プログラムのソースコードのライセンスを含む
請求項３に記載の情報処理装置。
【請求項１０】
前記付加情報は、前記プログラムの中間コードの種別を含む
請求項３に記載の情報処理装置。
【請求項１１】
前記付加情報は、前記プログラムの中間コードを生成するためのオプションを含む
請求項３に記載の情報処理装置。
【請求項１２】
前記付加情報は、前記プログラムのソースコードの実行結果を含む
請求項３に記載の情報処理装置。
【請求項１３】
前記付加情報は、前記プログラムのソースコードの使用実績を含む
請求項３に記載の情報処理装置。
【請求項１４】
前記付加情報は、前記プログラムのソースコードの改変度を含む
請求項３に記載の情報処理装置。
【請求項１５】
前記付加情報は、前記プログラムの更新に関する情報を含む
請求項３に記載の情報処理装置。
【請求項１６】
前記付加情報は、前記プログラムのソースコードの自信度を含む
請求項３に記載の情報処理装置。
【請求項１７】
プログラムのソースコードを中間コードに変換するコード変換部をさらに備え、
前記比較部は、プログラムの、前記コード変換部によりソースコードが変換された中間コード同士を比較する
請求項１に記載の情報処理装置。
【請求項１８】
ユーザの指示を受け付ける受付部と、
前記受付部により受け付けられた前記ユーザの指示に基づいて、プログラムのソースコードを作成するソースコード作成部と
をさらに備え、
前記コード変換部は、前記ソースコード作成部により作成されたソースコードを中間コードに変換する
請求項１７に記載の情報処理装置。
【請求項１９】
情報処理装置の情報処理方法であって、
前記比較部は、プログラムの中間コード同士を比較し、
前記類似度算出部は、比較結果に基づいて、プログラム同士の類似度を算出する
情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、情報処理装置および方法に関し、特に、より望ましい処理内容や実行結果が得られるソースコードを推薦することができるようにした情報処理装置および方法に関する。
【背景技術】
【０００２】
従来、例えば、プログラムの編集を行ったり、ソフトウエア開発に必要な設定を行ったり、ドキュメントの作成を行ったりするにあたって、所望の情報を書籍やインターネット等から得ようとする場合、ユーザは、書籍の目次や検索エンジンなどで所望の情報を検索し、得ることができる。一般的に、このような検索作業は、特に検索対象の規模や複雑度が大きくなる程、より煩雑になる。そこでユーザは、先人の前例を参考にすることが多い。その際、ユーザは、書籍に記載されている内容やインターネット検索の結果を取捨選択し、自分の所望する情報に適切か否かを判断しなければならなかった。
【０００３】
また、特にインターネット検索は、ユーザ等が入力したキーワードを基にして行われるため、ユーザが検索結果として得る情報には、ユーザにとって不必要なものや適切でないものが混じっていることが多い。そのような場合、更に目視でそれらを確認する作業が必要であり、煩雑な作業が必要であるだけでなく、間違い易かった。
【０００４】
ところで、情報の検索方法の一例として、プログラムのソースコードを作成中のユーザに対して、そのソースコードに類似する既存のソースコードを推薦する方法が提案されている（例えば、非特許文献１参照）。非特許文献１に記載の方法の場合、ソースコード同士を比較することにより、推薦するソースコードが決定される。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】島田隆次，市井誠，早瀬康裕，松下誠，井上克郎，"開発中のソースコードに基づくソフトウエア部品の自動推薦システムA-SCORE",情報処理学会論文誌Vol.50 3095-3107 Dec.2009
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、ソースコードの記述が類似していても、実行ファイルも類似するとは限らない。ソフトウエア開発において重要なのは、ソースコードの記述ではなく、処理の内容（処理の過程）や実行結果である。そのため、非特許文献１に記載の方法によって常にユーザにとって適切なソースコードが推薦されるとは限らない恐れがあった。
【０００７】
本開示は、このような状況に鑑みてなされたものであり、より望ましい処理内容や実行結果が得られるソースコードを推薦することができるようにすることを目的とする。
【課題を解決するための手段】
【０００８】
本開示の一側面は、プログラムの中間コード同士を比較する比較部と、前記比較部による比較結果に基づいて、プログラム同士の類似度を算出する類似度算出部とを備える情報処理装置である。
【０００９】
前記類似度算出部により算出された前記類似度に基づいて、推薦するプログラムを決定する決定部と、前記決定部により決定された前記プログラムを推薦する推薦部とをさらに備えることができる。
【００１０】
前記類似度算出部により算出された前記類似度に基づいて、推薦するプログラムの候補を選択する候補選択部と、前記プログラムの付加情報を用いて、前記選択部により選択された前記候補を絞り込む絞り込み部とをさらに備え、前記決定部は、前記絞り込み部により絞り込まれた前記候補を、推薦するプログラムとして決定することができる。
【００１１】
前記プログラムの付加情報に応じて、前記決定部により決定された前記プログラムの重み付けを設定する重み付け設定部と、前記重み付け設定部により設定された、各付加情報に対応する重み付けを用いて、前記決定部により決定された前記プログラムの優先度を決定する優先度決定部をさらに備えることができる。
【００１２】
ユーザの指示に従って、前記重み付け設定部により設定された、各付加情報に対応する重み付けを更新する重み付け更新部をさらに備えることができる。
【００１３】
前記付加情報は、前記プログラムのソースコードの言語種別を含むことができる。
【００１４】
前記付加情報は、前記プログラムのソースコードの編集日時を含むことができる。
【００１５】
前記付加情報は、前記プログラムのソースコードが含まれるライブラリを示す情報を含むことができる。
【００１６】
前記付加情報は、前記プログラムのソースコードのライセンスを含むことができる。
【００１７】
前記付加情報は、前記プログラムの中間コードの種別を含むことができる。
【００１８】
前記付加情報は、前記プログラムの中間コードを生成するためのオプションを含むことができる。
【００１９】
前記付加情報は、前記プログラムのソースコードの実行結果を含むことができる。
【００２０】
前記付加情報は、前記プログラムのソースコードの使用実績を含むことができる。
【００２１】
前記付加情報は、前記プログラムのソースコードの改変度を含むことができる。
【００２２】
前記付加情報は、前記プログラムの更新に関する情報を含むことができる。
【００２３】
プログラムのソースコードを中間コードに変換するコード変換部をさらに備え、前記比較部は、プログラムの、前記コード変換部によりソースコードが変換された中間コード同士を比較することができる。
【００２４】
ユーザの指示を受け付ける受付部と、前記受付部により受け付けられた前記ユーザの指示に基づいて、プログラムのソースコードを作成するソースコード作成部とをさらに備え、前記コード変換部は、前記ソースコード作成部により作成されたソースコードを中間コードに変換することができる。
【００２５】
本開示の一側面は、また、情報処理装置の情報処理方法であって、前記比較部は、プログラムの中間コード同士を比較し、前記類似度算出部は、比較結果に基づいて、プログラム同士の類似度を算出する情報処理方法である。
【００２６】
本開示の一側面においては、プログラムの中間コード同士が比較され、比較結果に基づいて、プログラム同士の類似度が算出される。
【発明の効果】
【００２７】
本開示によれば、情報を処理することができる。特に、より望ましい処理内容や実行結果が得られるソースコードを推薦することができる。
【図面の簡単な説明】
【００２８】
【図１】開発システムの主な構成例を示すブロック図である。
【図２】端末装置の主な構成例を示すブロック図である。
【図３】データサーバの主な構成例を示すブロック図である。
【図４】プログラムが実行されて実現された統合開発環境と推薦エンジンの様子の例を示す図である。
【図５】データセット推薦処理の流れの例を説明するフローチャートである。
【図６】候補絞り込み処理の流れの例を説明するフローチャートである。
【図７】優先度設定処理の流れの例を説明するフローチャートである。
【図８】推薦条件指定更新処理の流れの例を説明するフローチャートである。
【発明を実施するための形態】
【００２９】
以下、本技術を実施するための形態（以下実施の形態とする）について説明する。なお、説明は以下の順序で行う。
１．第１の実施の形態（開発支援システム）
【００３０】
＜１．第１の実施の形態＞
［開発支援システム］
図１は、開発支援システムの主な構成例を示す図である。図１に示される開発支援システム１００は、ソフトウエアやハードウエア等のシステム開発を支援するシステムである。図１に示されるように、この開発支援システム１００は、端末装置１０１−１、端末装置１０１−２、およびデータサーバ１０２を有し、それらが互いにネットワーク１０３を介して通信可能な状態に接続される。
【００３１】
端末装置１０１−１は、システム開発を行うエンジニアであるユーザ１１０−１に対してCUI（Character-based User Interface）やGUI（Graphical User Interface）等のユーザインタフェースを提供する。端末装置１０１−２は、システム開発を行うエンジニアであるユーザ１１０−２に対してCUIやGUI等のユーザインタフェースを提供する。以下において、端末装置１０１−１および端末装置１０１−２を互いに区別して説明する必要が無い場合、単に端末装置１０１と称する。また、同様に、ユーザ１１０−１およびユーザ１１０−２を互いに区別して説明する必要が無い場合、単にユーザ１１０と称する。
【００３２】
図１においては、開発支援システム１００が端末装置１０１を２台有するように示しているが、端末装置１０１の台数は任意であり、１台であってもよいし、３台以上であってもよい。同様に、ユーザ１１０の人数も任意であり、１人であってもよいし、３人以上であっても良い。
【００３３】
端末装置１０１は、ユーザ１１０に対してCUIやGUI等の画像をモニタに表示したり、音声をスピーカから出力したりし、さらに、キーボード等の入力デバイスにより、ユーザ１１０が入力した指示を受け付ける。
【００３４】
また、端末装置１０１は、入力されたユーザ指示等に基づいて、ネットワーク１０３を介してデータサーバ１０２と通信を行い、情報の授受を行う。
【００３５】
データサーバ１０２は、例えば端末装置１０１から供給される、ソースコード等を含むデータセットを記憶するデータベースを有する。また、データサーバ１０２は、例えば、端末装置１０１からの指示等に従って、データベースにおいて管理されるデータセット群の中から、ユーザに推薦するデータセットである推薦データセットを選択し、ネットワーク１０３を介して端末装置１０１に供給する。
【００３６】
図１においては、開発支援システム１００がデータサーバ１０２を１台有するように示しているが、データサーバ１０２の台数は任意であり、２台以上であってもよい。
【００３７】
ネットワーク１０３は、LAN（Local Area Network）やインターネット等により構成される通信回線である。このネットワーク１０３を介して、各端末装置１０１とデータサーバ１０２との間の通信が行われる。ネットワーク１０３は、有線若しくは無線、または、その両方の通信網により構成される。ネットワーク１０３の構成は任意であり、１つの通信網により構成されていても良いし、複数の通信網を組み合わせたものであってもよい。
【００３８】
このような開発支援システム１００を利用するシステム開発において、ユーザ１１０は、プログラム作成のために、端末装置１０１を操作して、そのプログラムのソースコード等を作成する。そのソースコード等を含むデータセットは、ネットワーク１０３を介してデータサーバ１０２に供給され、データベースに記憶され、管理される。データサーバ１０２は、そのデータベースにより管理されるデータセット群の中から、端末装置１０１から供給されたデータセットに関連する（例えば類似する）、推薦すべきデータセットを選択し、推薦データセットとして端末装置１０１に供給する。端末装置１０１は、その推薦データセットをユーザに提示する。ユーザは、提示された推薦データセットを適宜利用してシステム開発を行う。
【００３９】
［端末装置］
図２は、端末装置１０１の主な構成例を示すブロック図である。図２に示されるように、端末装置１０１は、CPU（Central Processing Unit）１３１、ROM（Read Only Memory）１３２、RAM（Random Access Memory）１３３およびバス１３４を有する。CPU１３１は、ROM１３２に記憶されているプログラム、または記憶部１４３からRAM１３３にロードされたプログラムに従って各種の処理を実行する。RAM１３３にはまた、CPU１３１が各種の処理を実行する上において必要なデータなども適宜記憶される。CPU１３１、ROM１３２、およびRAM１３３は、バス１３４を介して相互に接続されている。
【００４０】
図２に示されるように、このバス１３４にはまた、入出力インタフェース１４０も接続されている。また、端末装置１０１は、入力部１４１、出力部１４２、記憶部１４３、および通信部１４４をさらに有する。これらは、入出力インタフェース１４０に接続される。
【００４１】
入力部１４１は、例えば、キーボード、マウス、タッチパネル、カメラ、若しくはマイクロホン等の任意の入力デバイスよりなる。入力部１４１は、ユーザ１１０に操作されて、ユーザ１１０からの指示入力を受け付け、その受け付けたユーザ指示を、入出力インタフェース１４０を介して、例えばCPU１３１やRAM１３３等の適切な供給先に供給する。なお、入力部１４１を構成する入力デバイスの数および種類数は任意である。つまり、どのような入力デバイスを、いくつ、どのように組み合わせるようにしてもよい。
【００４２】
出力部１４２は、例えば、CRT（Cathode Ray Tube）ディスプレイ、LCD（Liquid Crystal Display）、若しくは、有機ELディスプレイ（OELD（Organic ElectroLuminescence Display））等のディスプレイ、プロジェクタ、またはスピーカ等の任意の出力デバイス等よりなる。出力部１４２は、入出力インタフェース１４０を介して、例えばCPU１３１やRAM１３３等から供給される出力情報を取得し、その出力情報を画像や音声等として端末装置１０１の外部に出力してユーザ１１０にその出力情報を提示する。なお、出力部１４２を構成する出力デバイスの数および種類数は任意である。つまり、どのような出力デバイスを、いくつ、どのように組み合わせるようにしてもよい。
【００４３】
記憶部１４３は、例えば、RAMディスク、フラッシュメモリ、SSD（Solid State Drive）、またはハードディスク等、任意の記憶媒体よりなる。記憶部１４３は、入出力インタフェース１４０を介して、例えばCPU１３１等から供給される情報を取得し、記憶する。また、記憶部１４３は、所定のタイミングにおいて、若しくは、例えばCPU１３１等の外部からの指示に基づいて、記憶している情報を、入出力インタフェース１４０を介して、例えばCPU１３１やRAM１３３等、適切な供給先に供給する。なお、記憶部１３３を構成する記憶媒体の数および種類数は任意である。つまり、どのような記憶媒体を、いくつ、どのように組み合わせるようにしてもよい。
【００４４】
通信部１４４は、有線LAN、無線LAN、ブルートゥース、USB（Universal Serial Bus）、IEEE（Institute of Electrical and Electronic Engineers）1394、若しくはHDMI（High-Definition Multimedia Interface）等の任意の通信規格の通信インタフェース、モデム、TA（Terminal Adapter）、3G回線通信モジュール、赤外線通信用モジュール、非接触型IC（Integrated Circuit）カード、外部入力端子、または、外部出力端子等、任意の通信デバイスよりなる。通信部１４４は、入出力インタフェース１４０を介して、例えばCPU１３１やRAM１３３等から供給される出力情報を取得し、その出力情報を他の装置に伝送したり、他の装置から伝送される入力情報を取得し、その入力情報を、入出力インタフェース１４０を介して、例えばCPU１３１やRAM１３３等の適切な供給先に供給したりする。なお、通信部１４４を構成する通信デバイスの数および種類数は任意である。つまり、どのような通信デバイスを、いくつ、どのように組み合わせるようにしてもよい。
【００４５】
入出力インタフェース１４０にはまた、必要に応じてドライブ１４５が接続され、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリ等の任意のリムーバブルメディア１４６が適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じて記憶部１４３等にインストールされる。また、ドライブ１４５が、書き込み可能なリムーバブルメディア１４６に対する情報書き込み機能を有するようにしてもよい。その場合、ドライブ１４５は、入出力インタフェース１４０を介して、例えばCPU１３１やRAM１３３から供給される情報を、ドライブ１４５に装着されたリムーバブルメディア１４６に書き込み、記録する。
【００４６】
［データサーバ］
図３は、データサーバ１０２の主な構成例を示すブロック図である。図３に示されるように、データサーバ１０２は、基本的に、端末装置１０１と同様の構成を有する。つまり、データサーバ１０２は、CPU１５１、ROM１５２、RAM１５３、バス１５４、入出力インタフェース１６０、入力部１６１、出力部１６２、記憶部１６３、および通信部１６４を有する。また、入出力インタフェース１６０には、リムーバブルメディア１６６が適宜装着されるドライブ１６５が必要に応じて接続される。
【００４７】
これらの各部は、それぞれ、図２を参照して説明した端末装置１０１の各部と同様である。したがってこれらの詳細な説明は、端末装置１０１の場合と同様であるので省略する。
【００４８】
データサーバ１０２は、さらにデータベース１６７を有する。データベース１６７は、例えば、RAMディスク、フラッシュメモリ、SSD、またはハードディスク等、任意の記憶媒体を有する。データベース１６７は、例えば、CPU１５１やRAM１５３等から供給される情報を、入出力インタフェース１６０を介して取得して記憶媒体に記憶し、管理する。また、データベース１６７は、必要に応じて、管理している情報をCPU１５１やRAM１５３等、適切な供給先に供給する。データベース１６７は、例えば、ユーザ１１０により作成されたソースコードを含むデータセット等、システム開発に関するデータや設定等を記憶し、管理する。
【００４９】
［開発支援サービス］
次に、図１の開発支援システム１００がユーザ１１０に対して提供する開発支援サービスの概要について説明する。
【００５０】
端末装置１０１は、CPU１３１が記憶部１４３等に記憶されている所定のプログラム（開発中のプログラムでは無い）を実行することにより、統合開発環境１８１を実現する。統合開発環境１８１は、ユーザ１１０に対して、システム開発に関するCUIやGUI等を提供する。ユーザ１１０は、そのユーザインタフェースに従ってプログラムの開発を行う。例えば、ユーザ１１０は、そのプログラムのソースコードや設定データ等の作成、編集、削除等の各種操作を行う。また、ユーザ１１０は、そのユーザインタフェースに従って、例えばデータの保存や読み出し等といった任意の制御指示の入力等を行うこともできる。
【００５１】
作成されるソースコードは、例えば、C, C++, Java（登録商標）, Fortran, Pascal, Lisp, ML, Haskel, Ruby等、統合開発環境１８１が対応可能なものであれば、どのようなプログラミング言語であってもよい。
【００５２】
設定データは、統合開発環境１８１から選択できるフィールドやメニュー、入力できるフィールドなど、統合開発環境１８１でユーザが選択、入力することができるデータ群である。
【００５３】
統合開発環境１８１は、作成されたソースコードや設定データ等をまとめ、作成されるプログラムのデータセットを生成する。このデータセットは、例えば、そのプログラムのソースコード、設定データ、中間コード、および付加情報を含む。
【００５４】
統合開発環境１８１は、ユーザ１１０により作成若しくは更新されたソースコードを中間コードに変換する。中間コードは、ソースコードの種類やアーキテクチャ、コンパイラバージョンなど、ソースコード以外の要素に依存しないような、例えば構文木や仮想機械言語などの共通の形式を持つ情報である。
【００５５】
付加情報は、例えば、ソースコードの言語種別、ソースコードの編集日時、ソースコードが含まれるライブラリ、ソースコードのライセンス、中間コードの種別、中間コードを生成するためのオプション、ソースコードの実行結果、参考にした推薦データセット、ソースコードの改変率、改変内容、データセットを登録・更新したユーザとユーザ種別、更新時間、タイミング、並びに、ソースコードの自信度の内、一部または全部を含むことができる。
【００５６】
「ソースコードの言語種別」は、そのソースコードのプログラミング言語が何であるか（プログラミング言語の種類）を示す情報である。「ソースコードの編集日時」は、そのソースコードが編集された日時を示す情報（時刻情報）である。「ソースコードが含まれるライブラリ」は、そのソースコードが含まれるライブラリに関する情報（例えばライブラリ名、関数名、または、そのライブラリのライセンスに関する情報等）である。「ソースコードのライセンス」は、そのソースコードの公開の許可に関する情報（例えば、公開可であるか否か、公開を許可する条件、ライセンスの名称等）である。
【００５７】
「中間コードの種別」は、中間コードに利用する形式（例えば構文木や仮想機械言語等）を指定する情報である。「中間コードを生成するためのオプション」は、中間コードが生成されたオプションを示す情報である。「ソースコードの実行結果」は、ソースコードの実行に関する情報である。例えば、ユーザ１１０が、そのソースコードが実行可能であるか、そのソースコードに対応する実行ファイルを実行したときの処理速度が速いか、実行ファイルのサイズが小さいか、FORTIFYなどの静的解析済みのものであるか等の情報を含む。
【００５８】
「参考にした推薦データセット」は、データサーバ１０２により推薦された複数のデータセットの内、どのデータセットをユーザが選択したかを示す情報である。「ソースコードの改変率、改変内容」は、推薦されたソースコードを使用するにあたってユーザ１１０等により行われた改変の度合いや、その改変の内容に関する情報を含む。
【００５９】
「データセットを登録・更新したユーザとユーザ種別、更新時間、タイミング」は、データセットを登録・更新したユーザ１１０の種別（例えば、管理者、作成者、開発者、一般ユーザ等）を示す情報を含む。また更新時間や更新のタイミングに関する情報が含まれていてもよい。「ソースコードの自信度」は、データセットをデータサーバ１０２に登録させたユーザによる、そのデータセットに対する自信度を示す情報である。
【００６０】
付加情報に含まれる情報は任意である。上述した以外の情報が付加情報に含まれるようにしてもよい。例えば、ソースコードの検査回数や検査結果等、ソフトウエア品質保証に関する情報が付加情報に含まれるようにしてもよい。
【００６１】
統合開発環境１８１は、ユーザにより作成若しくは更新されたデータセットを、ネットワーク１０３を介してデータサーバ１０２に供給する。
【００６２】
データサーバ１０２は、CPU１５１が記憶部１６３等に記憶されているプログラム（開発中のプログラムでは無い）を実行することにより、推薦エンジン１８２を実現する。この推薦エンジン１８２は、データセットの推薦に関する処理を行う。推薦エンジン１８２は、統合開発環境１８１から供給されるデータセットを取得すると、それをデータベース１６７において管理する。
【００６３】
また、推薦エンジン１８２は、統合開発環境１８１から供給されるデータセットのプログラムに関連する（例えば類似する）プログラム（データセット）を、データベース１６７の中から検索する。推薦エンジン１８２は、そのプログラム（データセット）同士の類似性の判定を、ソースコードの記述ではなく、中間コードを用いて行う。
【００６４】
より具体的には、推薦エンジン１８２は、データベース１６７において管理されるプログラム（データセット）の中間コードを、統合開発環境１８１から供給される、開発中のプログラム（データセット）の中間コードと比較し、その比較結果に従って、両プログラム（データセット）の類似性を判定する。そして、推薦エンジン１８２は、その判定結果に基づいて、推薦すべきプログラム（データセット）、例えば、統合開発環境１８１から供給されるプログラム（データセット）との処理内容や実行結果の類似度が高いプログラム（データセット）を選択し、推薦する。
【００６５】
また、推薦エンジン１８２は、推薦するプログラム（データセット）の選択を、類似性の判定結果だけでなく、その他の情報にも基づいて行うことができる。例えば、推薦エンジン１８２は、類似度が高いプログラム（データセット）を推薦するプログラム（データセット）の候補として選択し、さらに、そのデータセットに含まれる付加情報を用いて、その候補の絞り込みを行うことができる。
【００６６】
推薦エンジン１８２は、このように絞り込まれた候補のプログラム（データセット）を、統合開発環境１８１を介してユーザ１１０に推薦する。さらに、推薦エンジン１８２は、推薦するプログラム（データセット）の優先度を判定し、それを、ネットワーク１０３を介して統合開発環境１８１に提供し、ユーザ１１０に提示させることもできる。
【００６７】
［推薦処理の流れ］
次に、このようなデータセットの推薦に関する処理の流れの例を、図５のフローチャートを参照して説明する。ここでは、ユーザ１１０がソースコードを作成する際に、データセットを推薦する場合について説明する。
【００６８】
まず、端末装置１０１の統合開発環境１８１は、ステップＳ１１１において、ユーザ１１０に対して、GUIを表示する等、システム開発の環境を提供し、ユーザ１１０からの入力を受け付ける。これに対して、ユーザ１１０は、ステップＳ１０１において、プログラミングを行い、ソースコードを含むデータセット（ソースコードデータセット）を作成する。
【００６９】
ソースコードデータセットが作成されると、統合開発環境１８１は、ステップＳ１１２において、そのソースコードを中間コードに変換する。ステップＳ１１３において、統合開発環境１８１は、変換後の中間コードをソースコードデータセットに加え、中間コードデータセットとする。統合開発環境１８１は、そのデータセット（中間コードデータセット）を、ネットワーク１０３を介してデータサーバ１０２に供給する（推薦エンジン１８２に提供する）。
【００７０】
推薦エンジン１８２は、ステップＳ１２１において、そのデータセットを取得すると、ステップＳ１２２において、そのデータセットをデータベース１６７に供給する。
【００７１】
データベース１６７は、そのデータセットを取得すると、ステップＳ１３１において記憶する。また、データベース１６７は、ステップＳ１３２において、記憶（管理）しているデータセット（中間コードデータセット）を順に読み出し、推薦エンジン１８２に供給する。
【００７２】
ステップＳ１２３において、推薦エンジン１８２は、統合開発環境１８１から供給されたデータセットと、データベース１６７から読み出されたデータセットとで、中間コードを比較する。ステップＳ１２４において、推薦エンジン１８２は、その比較結果に基づいて、類似度を算出する。すなわち、両プログラムの処理の内容（処理の過程）、並びに、実行結果がどの程度類似しているかが判定される。
【００７３】
ステップＳ１２５において、推薦エンジン１８２は、算出された類似度に従って、推薦するデータセットの候補（候補データセット）を選択する。例えば、推薦エンジン１８２が、類似度が高い方から所定数のデータセット（データベース１６７から読み出されたデータセット）を候補データセットとして選択するようにしてもよい。また、例えば、推薦エンジン１８２が、類似度が所定の閾値より大きなデータセット（データベース１６７から読み出されたデータセット）を候補データセットとして選択するようにしてもよい。
【００７４】
なお、このステップＳ１２５の処理により、推薦するデータセットを類似度のみに基づいて一気に決定するようにしてもよいが、推薦エンジン１８２は、より有用なデータセットを推薦することができるように、ここでは候補の選択に留める。
【００７５】
ステップＳ１２６において、推薦エンジン１８２は、各候補データセットに含まれる付加情報を用いて候補を絞り込む。ステップＳ１２７において、推薦エンジン１８２は、その絞り込まれた候補を、推薦するデータセット（推薦データセット）として決定する。なお、この推薦データセットの数は任意であり、単数であっても複数であってもよい。
【００７６】
ステップＳ１２８において、推薦エンジン１８２は、推薦データセットの優先度を判定する。つまり、推薦エンジン１８２は、諸条件に従って、推薦データセットの優先度を算出する。
【００７７】
優先度は、推薦データセットの有用性を絶対的に若しくは相対的に示す情報である。この優先度は、データセットの更新時刻、更新者、または使用頻度等に基づいて設定される。例えばソフトウエアの作成者や管理者により更新された場合、その更新は、正しく、かつ、より大きな意味があるものである可能性が高いので、優先度が高く設定される。もちろん、優先度の決定条件や決定方法は、任意である。
【００７８】
この優先度によって、ユーザ１１０は、提示された推薦データセットの有用性をより容易に判断することができる。
【００７９】
ステップＳ１２９において、推薦エンジン１８２は、推薦データセットを、その優先度とともに、統合開発環境１８１に供給する。
【００８０】
統合開発環境１８１は、ステップＳ１１４において、その推薦データセット（および優先度）を取得する。ステップＳ１１５において、統合開発環境１８１は、その推薦データセットに関する情報を、任意のタイミングにおいて、画像や音声として出力部１４２から出力させ、ユーザ１１０に提示する。この推薦データセットは、ユーザ１１０が現在作成しているソースコードや設定データを補完するもの、もしくはその作成作業に有効な情報になる。なお、その際、統合開発環境１８１は、所定の条件に基づいて、推薦データセットをフィルタリングすることもできる。この所定の条件の内容は任意である。また、この所定の条件は、例えば、予め定められていてもよいし、統合開発環境１８１が、ユーザ１１０からの指示、実行環境、または処理内容等、任意の情報に基づいて設定するようにしてもよい。
【００８１】
ステップＳ１０２において、ユーザ１１０は、提示された推薦データセットや優先度の情報を参照し、必要に応じて例えば点線矢印のように、新たなデータセットのプログラミング、若しくは、既存のデータセットの編集等の作業に反映させることができる。
【００８２】
以上のように、推薦エンジン１８２は、ソースコードではなく中間コードが類似するデータセットを推薦する。このようにすることにより、ユーザ１１０は、自身が作成したソースコードに対して、単に記述が類似するだけでなく、実行時の動作（処理内容）や結果（処理結果）等が類似するソースコードを得ることができる。
【００８３】
また、推薦エンジン１８２が、上述したように、付加情報を用いて推薦データセットの候補の絞り込みを行うことにより、ユーザ１１０は、より望ましい処理内容や実行結果が得られるソースコード（データセット）、すなわち、より有用なソースコード（データセット）を得ることができる。
【００８４】
例えば、ある特定言語でプログラミングをしているユーザ１１０に対して、統合開発環境１８１は、そのプログラミングの内容に応じた、より有用なソースコード（データセット）を推薦することができる。
【００８５】
さらに、推薦データセットについて、諸条件に従って優先度が算出され、提示されるので、ユーザ１１０は、推薦されたデータセットの有用性をより容易に把握することができる。
【００８６】
なお、以上においては、ユーザ１１０がソースコードを作成する際に、データセットを推薦する場合について説明したが、データセットの推薦は、これ以外の処理に対して行うことができる。例えば、ユーザ１１０が、データセットのソースコード以外の情報を作成する際にも、推薦エンジン１８２は、そのデータセットに含まれる中間コードに基づいてデータセットの推薦を行うことができる。
【００８７】
また、例えば、ユーザが既にデータベース１６７に登録されている（既存の）データセットの情報を更新する場合に、推薦エンジン１８２が、データセットの推薦を行うようにしてもよい。その場合、図５に示される各処理を実行する前に、データベース１６７からユーザに指定されたデータセットが読み出されて端末装置１０１に供給され、統合開発環境１８１によって編集可能な状態でユーザ１１０に提示される。データセットの編集は、データセットの作成の場合と同様に行われる。すなわち、それ以降の処理は、図５のフローチャートと同様に行われる。
【００８８】
なお、以上においては、ユーザが作成したソースコードを統合開発環境１８１が中間データに変換し、中間コードデータセットを推薦エンジン１８２に供給するように説明したが、これに限らず、ソースコードを中間コードへ変換するコード変換処理は、データサーバ１０２（例えば推薦エンジン１８２若しくはそれ以外のエンジン）において行うようにしてもよい。その場合、統合開発環境１８１は、ユーザに作成（または更新）されたソースコード（ソースコードデータセット）を、データサーバ１０２に供給する。
【００８９】
［候補絞り込み処理の流れ］
次に、図５のステップＳ１２６において、推薦エンジン１８２が実行する候補絞り込み処理の流れの例を、図６のフローチャートを参照して説明する。なお、付加情報は、上述した例とする。
【００９０】
候補絞り込み処理が開始されると、推薦エンジン１８２は、ステップＳ１５１において、各候補データセットに含まれる付加情報を確認し、ソースコードの言語種別（例えばC, C++, Java（登録商標）, Fortran, Pascal, Lisp, ML, Haskel, Ruby等）が、統合開発環境１８１から供給されたデータセットと同一の候補を選択する。このようにすることにより、推薦エンジン１８２は、ユーザ１１０が参考にするのに容易なソースコード（データセット）を推薦することができる。
【００９１】
ステップＳ１５２において、推薦エンジン１８２は、各候補データセットに含まれる付加情報を確認し、ソースコードの編集日時が所定の期間内の候補（例えば、現在からＸ日前までの期間に編集された候補や、所定の基準日Ｙから基準日Ｚまでの間に編集された候補等。期間のスケールは分、時、日、週、月、年等任意。）を選択する。このようにすることにより、推薦エンジン１８２は、より有用である可能性の高い、新しい情報を含むデータセットを推薦することができる。
【００９２】
ステップＳ１５３において、推薦エンジン１８２は、各候補データセットに含まれる付加情報を確認し、ソースコードが含まれるライブラリを候補として選択する。例えば、ユーザ１１０が編集しているソースコードが既にライブラリとして作成されている場合、それを呼び出すだけで良く、ユーザ１１０が同じソースコードを作成する必要が無くなる。そこで推薦エンジン１８２は、そのようなライブラリを、関数名やライセンスなどと共に推薦する。このように、推薦エンジン１８２は、既存のライブラリもユーザに推薦することができる。
【００９３】
ステップＳ１５４において、推薦エンジン１８２は、統合開発環境１８１から供給されたデータセットに含まれる付加情報を確認し、ソースコードの公開の許可設定に応じて候補を選択する。例えば、ユーザ１１０が作成しているソースコードが公開不可の場合、GPLなど公開を義務づけるソースコードを含むデータセットを候補から除外する。このようにすることにより、推薦エンジン１８２は、ユーザ１１０が所望するライセンスのデータセットを推薦することができる。
【００９４】
ステップＳ１５５において、推薦エンジン１８２は、各候補データセットに含まれる付加情報を確認し、中間コードの種別が、ユーザ１１０等により指定される条件に適合する候補を選択する。例えば、ユーザ１１０は、構文木や仮想機械言語等、中間コードに利用する形式を条件として指定することができる。推薦エンジン１８２は、この条件に基づいて候補の絞込みを行う。これにより、推薦エンジン１８２は、推薦の効率化を図ることができる。
【００９５】
ステップＳ１５６において、推薦エンジン１８２は、各候補データセットに含まれる付加情報を確認し、中間コード生成のオプションが、ユーザ１１０が指定する条件に適合する候補を選択する。ユーザ１１０による、中間コードが生成されたオプションの指定に従うことで、推薦エンジン１８２は、類似度計算の精度向上を図ることができる。
【００９６】
ステップＳ１５７において、推薦エンジン１８２は、ソースコードが実行環境および実行条件に適合する候補を選択する。より具体的には、例えば、各候補データセットについて、端末装置１０１においてそのソースコードが実行可能であるか否か、処理速度が速いか否か、実行ファイルのサイズが小さいか否か、FORTIFYなどの静的解析済みのものであるか否か等が判定され、判定結果が許容範囲内であるものが候補として選択される。候補の選択基準は任意である。例えば、推薦エンジン１８２が、これらの各項目に対する判定結果をスコア化し、所定の点数以上の判定結果が得られるデータセットを候補として選択するようにしてもよいし、スコアが上位からＮ（Ｎは自然数）番目までのデータセットを候補として選択するようにしてもよいし、これら以外の方法であってもよい。このようにすることにより、推薦エンジン１８２は、ユーザ１１０が参考にし易い、より有用なソースコード（データセット）を推薦することができる。
【００９７】
ステップＳ１５８において、推薦エンジン１８２は、過去の使用履歴において改変の程度（改変度）の少ない候補を選択する。推薦されたデータセットを利用する場合、ユーザ１１０は、その用途や環境に応じて、一部（または全部）変更する（改変する）ことができる。改変度は、その改変の程度（改変率や改変内容の重要度）を示す。
【００９８】
この改変の量（改変率）が少ない実績を持つデータセット程、より少ない改変によって使用することができる可能性が高く、ユーザ１１０にとってより有用であるとみなすことができる。
【００９９】
また、単に改変の量だけでなく、ソースコードのどの部分をどのように改変するか（改変内容の重要度）によっても、有用度の判断ができる。例えば、変数名のような軽微な改変と、関数や処理内容といった重要な改変とでは、仮に改変率が同一であっても、改変度（改変の程度）は異なるとみなすことができる。データセットには、このような過去の使用履歴（改変に関する情報を含む）が付加情報として含まれている。推薦エンジン１８２は、これを参照し、過去に使用された時の改変率や改変内容が少ないデータセットを候補として選択する。
【０１００】
この選択基準は任意である。例えば、改変率や改変内容をスコア化し、そのスコアが所定の基準より低いデータセットを候補として選択するようにしてもよいし、そのスコアが低い方からＮ（Ｎは自然数）番目までのデータセットを候補として選択するようにしてもよいし、これら以外の方法であってもよい。
【０１０１】
ステップＳ１５８の処理を終了すると、推薦エンジン１８２は、候補絞り込み処理を終了する。
【０１０２】
以上のように、付加情報に基づいて候補の絞り込みを行うことにより、推薦エンジン１８２は、より有用なソースコード（データセット）を推薦することができる。
【０１０３】
なお、候補の絞り込みに用いる付加情報の項目は、上述した以外の項目が含まれるようにしてもよい。また、上述した各項目の内、一部の項目を省略するようにしてもよい。さらに、各項目の、候補の絞り込みに用いる順（図６のフローチャートの各ステップの処理順）は、任意であり、上述した以外であってもよい。
【０１０４】
例えば、ソースコードの検査回数や検査結果等、ソフトウエア品質保証に関する項目を追加するようにしてもよい。例えば、ソースコードの検査回数がより多くて検査結果がより良好であるデータセットを候補として選択するようにしてもよい。この選択基準は任意である。例えば、検査回数や検査結果をスコア化し（例えば、検査回数が多いほど、かつ、検査結果が良好なほど、高スコアとし）、そのスコアが所定の基準より高いデータセットを候補として選択するようにしてもよいし、そのスコアが高い方からＮ（Ｎは自然数）番目までのデータセットを候補として選択するようにしてもよい。もちろん、これら以外の方法であってもよい。
【０１０５】
［優先度設定処理の流れ］
次に、図７のフローチャートを参照して、図５のステップＳ１２８において行われる優先度設定処理の流れの例を説明する。
【０１０６】
優先度設定処理が開始されると、推薦エンジン１８２は、ステップＳ１７１において、ソースコードの言語種別（例えばC, C++, Java（登録商標）, Fortran, Pascal, Lisp, ML, Haskel, Ruby等）が、統合開発環境１８１から供給されたデータセットと同一の候補の重み付けを高くする。言語種別が同一のソースコードの方が、ユーザ１１０がより容易に参考にすることができるので、より有用であるとみなすことができる。
【０１０７】
ステップＳ１７２において、推薦エンジン１８２は、ソースコードの編集日時が現在に近い候補程、重み付けを高くする。編集日時が現在により近いもの程、情報が新しく、より有用であるとみなすことができる。
【０１０８】
ステップＳ１７３において、推薦エンジン１８２は、ソースコードの公開が許可されていない候補の重み付けを低くする。公開が許可されていないソースコードは、ユーザ１１０が利用しにくい場合が多い。
【０１０９】
なお、例えば、ユーザが作成しているプログラムが非公開の場合等、公開が許可されていない候補を選択する場合も考えられる。そのような場合、推薦エンジン１８２が、ソースコードの公開が許可されていない候補の重み付けを高く設定するようにすればよい。
【０１１０】
なお、推薦エンジン１８２が、ユーザが作成してるプログラムのライセンスタイプ（例えば公開可であるか否か）を判定し、その判定結果に応じて、ソースコードのライセンスタイプに基づいた重み付けを行うようにしてもよい。例えば、推薦エンジン１８２が、ユーザが作成してるプログラムが公開可である場合、ソースコードの公開が許可されている候補の重み付けを高くし、ソースコードの公開が許可されていない候補の重み付けを低くするようにしてもよい。また、例えば、推薦エンジン１８２が、ユーザが作成してるプログラムが公開不可である場合、ソースコードの公開が許可されている候補の重み付けを低くし、ソースコードの公開が許可されていない候補の重み付けを高くするようにしてもよい。
【０１１１】
ステップＳ１７４において、推薦エンジン１８２は、中間コード生成のオプションが適合する候補の重み付けを高くする。ユーザ１１０による、中間コードが生成されたオプションの指定に従うことで、推薦エンジン１８２は、類似度計算の精度向上を図ることができる。
【０１１２】
ステップＳ１７５において、推薦エンジン１８２は、ソースコードが実行環境および実行条件に適合する候補の重み付けを高くする。より具体的には、例えば、各候補データセットについて、端末装置１０１においてそのソースコードが実行可能であるか否か、処理速度が速いか否か、実行ファイルのサイズが小さいか否か、FORTIFYなどの静的解析済みのものであるか否か等が判定され、これらの各項目に対する判定結果がスコア化され、そのスコアが高いほど、重み付けが高くされる。
【０１１３】
ステップＳ１７６において、推薦エンジン１８２は、使用実績のある候補の重み付けを高くする。過去にユーザ１１０が使用したことのあるソースコード（データセット）程（若しくは、使用頻度が多いソースコード（データセット）程）、より有用であるとみなすことができる。
【０１１４】
ステップＳ１７７において、推薦エンジン１８２は、使用履歴において、改変度の少ない候補の重み付けを高くする。改変度が少ない実績を持つデータセット程、より少ない改変によって使用することができる可能性が高く、ユーザ１１０にとってより有用であるとみなすことができる。
【０１１５】
ステップＳ１７８において、推薦エンジン１８２は、データセットの登録・更新履歴に応じた重み付けを行う。ソースコード（データセット）を登録したり、更新したりした者の権限（例えば、一般であるか、開発者であるか、管理者であるか、若しくは作成者であるか等）によって、そのデータセットに含まれる情報の信頼性の高さが推定される。つまり、そのデータセットの有用度が推定される。なお、ユーザ１１０自身が登録若しくは更新したデータセットで有れば、そのユーザ１１０にとって有用である可能性がより高くなる。したがって、推薦エンジン１８２は、さらに、データセットを登録・更新する者が誰かによっても重み付けを行うようにしてもよい。
【０１１６】
ステップＳ１７９において、推薦エンジン１８２は、ソースコードの自信度が高い候補の重み付けを高くする。ユーザ１１０が、データサーバ１０２に対し送るデータセットに対する自信度は、そのデータセットの、そのユーザ１１０に対する有用度を示すとみなすことができる。
【０１１７】
ステップＳ１８０において、推薦エンジン１８２は、推薦条件指定に従って重み付けを更新する。より具体的には、推薦エンジン１８２は、以上のように設定される、付加情報の各項目の重み付けを、ユーザ１１０により指定される推薦条件指定に従って更新する。このようにすることにより、推薦エンジン１８２は、ユーザの意向を重み付け（優先度）に、より直接的に反映させることができる。
【０１１８】
ステップＳ１８１において、推薦エンジン１８２は、以上のように設定される付加情報の各項目の重み付けを考慮して、推薦データセットの優先度を決定する。
【０１１９】
ステップＳ１８１の処理が終了すると、推薦エンジン１８２は、優先度設定処理を終了する。
【０１２０】
このように設定された優先度が、推薦データセットに付加されて、ユーザ１１０に提示されるので、ユーザ１１０は、推薦されたデータセットの有用性をより容易に把握することができる。
【０１２１】
［推薦条件指定更新処理の流れ］
ユーザ１１０は、統合開発環境１８１が表示する設定画面やプルダウンメニューなどから、任意のタイミングにおいて、優先度の設定に用いられる推薦条件指定の設定を行うことができる。この推薦条件指定は、優先度の設定に用いられる、上述した付加情報の各項目の重み付けのユーザ設定である。つまり、上述したように重み付けの算出方法は予め定められているが、ユーザ１１０は、この推薦条件指定を用いることにより、各項目の重み付けの値を、ユーザ１１０自身の嗜好に応じて補正することができる。
【０１２２】
このような推薦条件指定をユーザ１１０が更新するために、開発支援システム１００において行われる推薦条件指定更新処理の流れの例を、図８のフローチャートを参照して説明する。
【０１２３】
ステップＳ２１１において、統合開発環境１８１は、ユーザ１１０に対して、GUIを表示する等、推薦条件指定更新の環境を提供し、ユーザ１１０からの入力を受け付ける。これに対して、ユーザ１１０は、ステップＳ２０１において、推薦条件指定更新指示を入力する。
【０１２４】
統合開発環境１８１は、ステップＳ２１２において、入力された推薦条件指定更新指示を、ネットワーク１０３を介してデータサーバ１０２に供給する（推薦エンジン１８２に提供する）。
【０１２５】
推薦エンジン１８２は、ステップＳ２２１において、その推薦条件指定更新指示を取得すると、ステップＳ２２２において、その指示に基づいて推薦条件指定を更新する。この更新が成功した場合、推薦条件指定がユーザ１１０の所望する設定に更新される。すなわち、優先度の設定にユーザ１１０の意向を反映させることができるようになる。
【０１２６】
なお、この推薦条件指定は、推薦エンジン１８２が保持していていもよいし、データベース１６７において管理されるようにしてもよい。
【０１２７】
推薦条件指定が更新されると、推薦エンジン１８２は、更新結果通知を、ネットワーク１０３を介して端末装置１０１に供給する（統合開発環境に更新結果を通知する）。統合開発環境１８１は、ステップＳ２１３において、この更新結果通知を取得すると、ステップＳ２１４において、その更新結果を、任意のタイミングにおいて、画像や音声として出力部１４２から出力させ、ユーザ１１０に提示する。
【０１２８】
ステップＳ２０２において、ユーザ１１０は、提示された更新結果を参照する。例えば、その結果に満足しない場合、ユーザ１１０は、点線矢印のように、処理をステップＳ２０１に戻し、再度、更新指示を入力することができる。
【０１２９】
以上のように、ユーザ１１０は、推薦条件指定を所望の設定にすることができるので、ユーザ１１０の嗜好に応じた優先度の設定を行うことができる。この設定を用いることにより、推薦エンジン１８２は、ユーザ１１０にとってより有用なソースコード（データセット）を推薦することができる。
【０１３０】
上述した一連の処理は、ハードウエアにより実行させることもできるし、ソフトウエアにより実行させることもできる。上述した一連の処理をソフトウエアにより実行させる場合には、そのソフトウエアを構成するプログラムが、ネットワークや記録媒体からインストールされる。
【０１３１】
この記録媒体は、例えば、図２や図３に示されるように、装置本体とは別に、端末装置１０１若しくはデータサーバ１０２の管理者にプログラムを配信するために配布される、プログラムが記録されている磁気ディスク（フレキシブルディスクを含む）、光ディスク（CD-ROM(Compact Disc-Read Only Memory),DVD(Digital Versatile Disc)を含む）、光磁気ディスク（ＭＤ（Mini-Disc）（登録商標）を含む）、もしくは半導体メモリなどよりなるリムーバブルメディア１４６若しくはリムーバブルメディア１６６により構成されるだけでなく、装置本体に予め組み込まれた状態で管理者に配信される、プログラムが記録されているROM１３２若しくはROM１５２や、記憶部１４３若しくは記憶部１６３に含まれるハードディスクなどで構成される。
【０１３２】
なお、コンピュータが実行するプログラムは、本明細書で説明する順序に沿って時系列に処理が行われるプログラムであっても良いし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで処理が行われるプログラムであっても良い。
【０１３３】
また、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【０１３４】
また、本明細書において、システムとは、複数のデバイス（装置）により構成される装置全体を表すものである。
【０１３５】
また、以上において、１つの装置（または処理部）として説明した構成が、複数の装置（または処理部）として構成されるようにしてもよい。逆に、以上において複数の装置（または処理部）として説明した構成が、まとめて１つの装置（または処理部）として構成されるようにしてもよい。また、各装置（または各処理部）の構成に上述した以外の構成が付加されるようにしてももちろんよい。さらに、システム全体としての構成や動作が実質的に同じであれば、ある装置（または処理部）の構成の一部が他の装置（または他の処理部）の構成に含まれるようにしてもよい。つまり、本開示の実施の形態は、上述した実施の形態に限定されるものではなく、本開示の要旨を逸脱しない範囲において種々の変更が可能である。
【０１３６】
例えば、以上においては、統合開発環境１８１が端末装置１０１において実現され、推薦エンジン１８２（データベース１６７）がデータサーバ１０２において実現されるように説明したが、これに限らず、上述した統合開発環境１８１および推薦エンジン１８２が１つの装置（例えば端末装置１０１）において実現されるようにしてもよい。
【０１３７】
なお、本技術は以下のような構成も取ることができる。
（１）  プログラムの中間コード同士を比較する比較部と、
前記比較部による比較結果に基づいて、プログラム同士の類似度を算出する類似度算出部と
を備える情報処理装置。
（２）  前記類似度算出部により算出された前記類似度に基づいて、推薦するプログラムを決定する決定部と、
前記決定部により決定された前記プログラムを推薦する推薦部と
をさらに備える前記（１）に記載の情報処理装置。
（３）  前記類似度算出部により算出された前記類似度に基づいて、推薦するプログラムの候補を選択する候補選択部と、
前記プログラムの付加情報を用いて、前記選択部により選択された前記候補を絞り込む絞り込み部と
をさらに備え、
前記決定部は、前記絞り込み部により絞り込まれた前記候補を、推薦するプログラムとして決定する
前記（２）に記載の情報処理装置。
（４）  前記プログラムの付加情報に応じて、前記決定部により決定された前記プログラムの重み付けを設定する重み付け設定部と、
前記重み付け設定部により設定された、各付加情報に対応する重み付けを用いて、前記決定部により決定された前記プログラムの優先度を決定する優先度決定部と
をさらに備える前記（３）に記載の情報処理装置。
（５）  ユーザの指示に従って、前記重み付け設定部により設定された、各付加情報に対応する重み付けを更新する重み付け更新部をさらに備える
前記（４）に記載の情報処理装置。
（６）  前記付加情報は、前記プログラムのソースコードの言語種別を含む
前記（３）乃至（５）のいずれかに記載の情報処理装置。
（７）  前記付加情報は、前記プログラムのソースコードの編集日時を含む
前記（３）乃至（６）のいずれかに記載の情報処理装置。
（８）  前記付加情報は、前記プログラムのソースコードが含まれるライブラリを示す情報を含む
前記（３）乃至（７）のいずれかに記載の情報処理装置。
（９）  前記付加情報は、前記プログラムのソースコードのライセンスを含む
前記（３）乃至（８）のいずれかに記載の情報処理装置。
（１０）  前記付加情報は、前記プログラムの中間コードの種別を含む
前記（３）乃至（９）のいずれかに記載の情報処理装置。
（１１）  前記付加情報は、前記プログラムの中間コードを生成するためのオプションを含む
前記（３）乃至（１０）のいずれかに記載の情報処理装置。
（１２）  前記付加情報は、前記プログラムのソースコードの実行結果を含む
前記（３）乃至（１１）のいずれかに記載の情報処理装置。
（１３）  前記付加情報は、前記プログラムのソースコードの使用実績を含む
前記（３）乃至（１２）のいずれかに記載の情報処理装置。
（１４）  前記付加情報は、前記プログラムのソースコードの改変度を含む
前記（３）乃至（１３）のいずれかに記載の情報処理装置。
（１５）  前記付加情報は、前記プログラムの更新に関する情報を含む
前記（３）乃至（１４）のいずれかに記載の情報処理装置。
（１６）  前記付加情報は、前記プログラムのソースコードの自信度を含む
前記（３）乃至（１５）のいずれかに記載の情報処理装置。
（１７）  プログラムのソースコードを中間コードに変換するコード変換部をさらに備え、
前記比較部は、プログラムの、前記コード変換部によりソースコードが変換された中間コード同士を比較する
前記（１）乃至（１６）のいずれかに記載の情報処理装置。
（１８）  ユーザの指示を受け付ける受付部と、
前記受付部により受け付けられた前記ユーザの指示に基づいて、プログラムのソースコードを作成するソースコード作成部と
をさらに備え、
前記コード変換部は、前記ソースコード作成部により作成されたソースコードを中間コードに変換する
前記（１７）に記載の情報処理装置。
（１９）  情報処理装置の情報処理方法であって、
前記比較部は、プログラムの中間コード同士を比較し、
前記類似度算出部は、比較結果に基づいて、プログラム同士の類似度を算出する
情報処理方法。
【符号の説明】
【０１３８】
１００  開発支援システム，  １０１  端末装置，  １０２  データサーバ，  １０３  ネットワーク，  １１０  ユーザ，  １６７  データベース，  １８１  統合開発環境，  １８２  推薦エンジン
【図１】
2013003664.tif 000003
【図２】
2013003664.tif 000004
【図３】
2013003664.tif 000005
【図４】
2013003664.tif 000006
【図５】
2013003664.tif 000007
【図６】
2013003664.tif 000008
【図７】
2013003664.tif 000009
【図８】
2013003664.tif 000010