IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社日立製作所の特許一覧

特開2024-164619ソースコード検索システム及びソースコード検索方法
<>
  • 特開-ソースコード検索システム及びソースコード検索方法 図1
  • 特開-ソースコード検索システム及びソースコード検索方法 図2
  • 特開-ソースコード検索システム及びソースコード検索方法 図3
  • 特開-ソースコード検索システム及びソースコード検索方法 図4
  • 特開-ソースコード検索システム及びソースコード検索方法 図5
  • 特開-ソースコード検索システム及びソースコード検索方法 図6
  • 特開-ソースコード検索システム及びソースコード検索方法 図7
  • 特開-ソースコード検索システム及びソースコード検索方法 図8
  • 特開-ソースコード検索システム及びソースコード検索方法 図9
  • 特開-ソースコード検索システム及びソースコード検索方法 図10
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024164619
(43)【公開日】2024-11-27
(54)【発明の名称】ソースコード検索システム及びソースコード検索方法
(51)【国際特許分類】
   G06F 9/445 20180101AFI20241120BHJP
   G06F 16/903 20190101ALI20241120BHJP
【FI】
G06F9/445 130
G06F16/903
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2023080230
(22)【出願日】2023-05-15
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110000925
【氏名又は名称】弁理士法人信友国際特許事務所
(72)【発明者】
【氏名】森下 皓文
(72)【発明者】
【氏名】是枝 祐太
(72)【発明者】
【氏名】今一 修
【テーマコード(参考)】
5B175
5B376
【Fターム(参考)】
5B175DA10
5B175JC04
5B376AC01
5B376AC23
(57)【要約】
【課題】多くのソースコードを保存するコードベースから文脈情報を考慮した検索結果を返すことが可能なソースコード検索システムを提供する。
【解決手段】ソースコード検索システム1は、コードベースDB0に参照情報を入力し、コードベースDB0から取得したソースコードに補足情報を付与したコード情報D0を出力するコード情報抽出部MD1と、コード情報D0をコードベースDB0に入力し、コード情報D0に対応する文脈情報D1をコードベースDB0から抽出し、コード情報D0と共に文脈情報D1を出力する文脈情報抽出部MD2と、コード情報D0と、コード情報D0に対応する文脈情報D1をペアとして保存するコード及び文脈情報データベースDB1と、を備える。
【選択図】図1
【特許請求の範囲】
【請求項1】
プログラムのソースコードが登録されるリポジトリを保存するコードベースに参照情報を入力し、前記コードベースから取得した前記ソースコードに補足情報を付与したコード情報を出力するコード情報抽出部と、
前記コード情報を前記コードベースに入力し、前記コード情報に対応する文脈情報を前記コードベースから抽出し、前記コード情報と共に前記文脈情報を出力する文脈情報抽出部と、
前記コード情報と、前記コード情報に対応する前記文脈情報をペアとして保存するソースコード検索用データベースと、を備える
ソースコード検索システム。
【請求項2】
前記コード情報抽出部は、前記コードベースから取得した前記ソースコードを規定の単位で分割して、分割した前記ソースコードに前記補足情報を付与して前記コード情報を出力する
請求項1に記載のソースコード検索システム。
【請求項3】
前記規定の単位は、関数ごとである
請求項2に記載のソースコード検索システム。
【請求項4】
前記補足情報は、前記コード情報のうち、コード文字列以外の情報である
請求項3に記載のソースコード検索システム。
【請求項5】
前記文脈情報は、メタ情報である
請求項3に記載のソースコード検索システム。
【請求項6】
前記文脈情報抽出部は、前記文脈情報で異なる前記コード情報を抽出した場合、前記ソースコード検索用データベースには、前記コード情報と、前記コード情報に対応する前記文脈情報とが1対多で保存される
請求項3に記載のソースコード検索システム。
【請求項7】
入力されたクエリに基づいて、前記ソースコード検索用データベースから前記クエリに対応する前記文脈情報を検索し、検索した前記文脈情報と、前記文脈情報に対してペアとして保存されている前記コード情報とを、検索結果として出力する検索部を備える
請求項2乃至6のいずれか一項に記載のソースコード検索システム。
【請求項8】
前記文脈情報抽出部は、
前記コードベースから前記文脈情報を含むテキストを粗情報として特定する粗情報特定部と、
前記粗情報に前記文脈情報が書かれた部分を詳細に特定し、特定した詳細部分を前記文脈情報として出力する文脈情報特定部と、を有する
請求項7に記載のソースコード検索システム。
【請求項9】
前記粗情報特定部は、前記文脈情報を含む前記テキストを、ファイル単位のテキストブロックとして特定し、前記粗情報として出力し、
前記文脈情報特定部は、前記テキストブロックから前記詳細部分を特定する
請求項8に記載のソースコード検索システム。
【請求項10】
プログラムのソースコードが登録されるリポジトリを保存するコードベースに参照情報を入力し、前記コードベースから取得した前記ソースコードに補足情報を付与したコード情報を出力するステップと、
前記コード情報を前記コードベースに入力し、前記コード情報に対応する文脈情報を前記コードベースから抽出し、前記コード情報と共に前記文脈情報を出力し、ソースコード検索用データベースに前記コード情報と、前記コード情報に対応する前記文脈情報をペアとして保存するステップと、を含む
ソースコード検索方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソースコード検索システム及びソースコード検索方法に関する。
【背景技術】
【0002】
過去20年間で、Web上でオープンにアクセスできる巨大なコードベースが出現した。このようなコードベースに含まれるソースコード(以下、「コード」と呼ぶ)を再利用することは、ソフトウェア開発の効率と品質を大幅に向上させる。特定の場面で再利用可能なコードを見つけるために、semantic code search(以下、「コード検索」と呼ぶ)が重要な技術として用いられる。コード検索は、与えられた自然言語クエリに最もマッチするコードを見つけることを目的とする技術である。自然言語クエリとは、例えば、ユーザが、質問文からなる自然言語を入力することで、検索指示を行うことが可能な命令である。
【0003】
コード検索のタスクに取り組むために、非特許文献1に示されるような多くのディープニューラルネットワーク(DNN)ベースのモデルが提案されている。これらのモデルは、クエリとコードの間の関連性を、ベクトル空間において捉えることを目的として構築されたものである。クエリは、通常、”How can I sort users?”のように、ユーザが取得したいコードの機能を指定することで実行される。
【0004】
近年では、これらのモデルの検索性能を測定するベンチマークも多く提案されてきている。最も有名なベンチマークとして、非特許文献2に挙げられるCodeSearchNet(CSN)が知られている。CSNには、コードベースから収集した多数の関数からなる学習データセットが含まれている。各関数は、コメント(関数定義の直後に書かれている自然言語文)とペアになっている。このコメントは通常、コードの機能を記述したものである。
【0005】
関数及びコメントのペアは、コード及びクエリの関係性を学習するのに適しているので、実際、DNNの学習に使用されてきている。以上のように、既存研究では、コードの機能に基づいてコードを検索することに焦点が当てられてきた。
【先行技術文献】
【特許文献】
【0006】
【非特許文献1】Zhensu Sun, Yan Liu, Chen Yang, and Yu Qian. Pscs: A path-based neural model for semantic code search. arXiv preprint arXiv:2008.03042, 2020.
【非特許文献2】Husain, Hamel, et al. "Codesearchnet challenge: Evaluating the state of semantic code search." arXiv preprint arXiv:1909.09436 (2019).
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかし、現実のソフトウェア開発では、コードの機能だけでなく、より広い文脈も重要である。例えば、開発者が特定のソフトウェア開発プロジェクトに所属している場合、開発者が開発するコードは、そのプロジェクトの特定の目的又はドメイン(例えば、金融システム、顧客管理システム、流通向けシステム等のプログラムが利用される産業分野)を反映したものでなければならない。そのため、開発者のクエリには、例えば「How can I sort users in an ad recommendation system?」という文脈情報が含まれることがある。既存のモデルでは、検索時に考慮される情報がクエリとコードのみであったので、上記の文脈情報を考慮した検索結果を返すことができなかった。
【0008】
本発明はこのような状況に鑑みて成されたものであり、コード検索において、コードの機能だけでなく、より広い文脈情報に基づいた検索結果を提示できるようにすることを目的とする。
【課題を解決するための手段】
【0009】
本発明に係るソースコード検索システムは、プログラムのソースコードが登録されるリポジトリを保存するコードベースに参照情報を入力し、コードベースから取得したソースコードに補足情報を付与したコード情報を出力するコード情報抽出部と、コード情報をコードベースに入力し、コード情報に対応する文脈情報をコードベースから抽出し、コード情報と共に文脈情報を出力する文脈情報抽出部と、コード情報と、コード情報に対応する文脈情報をペアとして保存するソースコード検索用データベースと、を備える。
【発明の効果】
【0010】
本発明によれば、ソースコード検索システムは、コード情報と、コード情報に対応する文脈情報をペアとして保存するソースコード検索用データベースを備えることで、コード検索において、コードの機能だけでなく、より広い文脈情報に基づいた検索結果を提示できるようになる。
上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【0011】
図1】本発明の第1実施形態に係るソースコード検索システムの全体構成例を示すブロック図である。
図2】本発明の第1実施形態に係るコード情報の例を示す図である。
図3】本発明の第1実施形態に係る文字列情報の抽出対象の例を示す図である。
図4】本発明の第1実施形態に係る文脈情報の例を示す図である。
図5】本発明の第1実施形態に係るソースコード検索画面と検索結果表示画面の表示例を示す図である。
図6】本発明の第1実施形態に係るコード情報及び文脈情報の保存方法の例を示すフローチャートである。
図7】本発明の第1実施形態に係るコードの検索方法の例を示すフローチャートである。
図8】本発明の第1実施形態に係る計算機のハードウェア構成例を示すブロック図である。
図9】本発明の第2実施形態に係るソースコード検索システムの全体構成例を示すブロック図である。
図10】本発明の第2実施形態に係る文脈粗情報の例を示す図である。
【発明を実施するための形態】
【0012】
以下、本発明を実施するための形態について、添付図面を参照して説明する。本明細書及び図面において、実質的に同一の機能又は構成を有する構成要素については、同一の符号を付することにより重複する説明を省略する。
【0013】
[第1実施形態]
図1は、本発明の第1実施形態に係るソースコード検索システム1の全体構成例を示すブロック図である。
【0014】
ソースコード検索システム1は、コード情報抽出部MD1、文脈情報抽出部MD2、コード及び文脈情報データベースDB1(ソースコード検索用データベースの一例)、及び検索部MD3を備える。ソースコード検索システム1は、例えば、クラウドサーバによって構成される。ユーザはPC2を操作して、Webブラウザを通じてソースコード検索システム1にアクセス可能である。ソースコード検索システム1の外部には、プログラムのソースコードが登録されるリポジトリを保存するコードベースDB0が設けられる。コードベースDB0は、多数のコードを格納するデータベースシステムの一例である。
【0015】
コード情報抽出部MD1は、コードベースDB0に参照情報を入力し、コードベースDB0から取得したソースコードに補足情報を付与したコード情報を出力する。例えば、コード情報抽出部MD1は、コードベースDB0のアクセス情報であるURL(Uniform Resource Locator)を入力として、コードベースDB0にアクセスし、コードベースDB0から複数のコード情報D0を抽出して出力する。補足情報は、後述する図2に示すコード情報D0のうち、コード文字列以外の情報である。
【0016】
また、コード情報抽出部MD1は、コードベースDB0から取得したソースコードを規定の単位(例えば、関数ごと)で分割して、分割したソースコードに補足情報を付与してコード情報D0を出力することもできる。コード情報D0のデータ構造は、コードベースDB0中に存在するコードを小規模な規定の単位に分割した情報のそれぞれに対して補足情報を付与した構造としている。
【0017】
図2は、コード情報D0の例を示す図である。図2に示すコード情報D0では、上記の「小規模の単位」として関数を用いている。
【0018】
コード情報D0は、「コード文字列」、「元ファイル」及び「行数」の項目を持つ。
「コード文字列」は、1つの関数の文字列情報を保存している。
「元ファイル」は、「コード文字列」に保存される関数が記述されていたファイルのURLである。このURLは、関数が記述されていたファイルの保存場所を示すアクセス情報の一例である。ここでは、ファイルとして、python言語で記述されたプログラムファイルの保存場所がURLで示される。
「行数」は、関数が記述されていたファイル中で記述されていた「コード文字列」の開始行数及び終了行数である。「行数」は、[開始行数,終了行数]の形式で表される。
【0019】
コード情報抽出部MD1が、関数の文字列情報と、文字列情報に対する補足情報である「元ファイル」及び「行数」をコードベースDB0から特定する処理は、コードベースDB0中に含まれる各ファイルに対して、ソースコードを解析する技術を適用することで実現できる。ソースコードを解析する技術は、コード情報抽出部MD1の一機能であり、例えば正規表現を用いたり、コンパイラを用いてソースコードを解析したりすることで、ソースコードを規定の単位である関数に分割することを可能とする。
【0020】
上述したように補足情報は、「コード文字列」以外の情報、すなわち「元ファイル」及び「行数」のうち、少なくとも一つを含む情報である。
【0021】
コード情報抽出部MD1の入力は、コードベースDB0のリポジトリからソースコードを指定できる情報であれば、URLでなくともよい。例えば、コードベースDB0のオリジナルデータが手に入る場合は、そのデータの保存場所などを用いてもよい。
【0022】
文脈情報抽出部MD2は、コード情報をコードベースDB0に入力し、コード情報に対応する文脈情報をコードベースDB0から抽出し、コード情報と共に文脈情報を出力する。例えば、文脈情報抽出部MD2は、コード情報D0を入力として、コード情報D0に対応する文脈情報D1をコードベースDB0から特定する。その後、文脈情報抽出部MD2は、特定した文脈情報D1と、コード情報D0とを出力する。
【0023】
図3は、文字列情報の抽出対象の例を示す図である。
図3のソースコード(1)は、プログラミング言語の一つであるJava(登録商標)で記載されたソースコードの例を示す。このソースコードは、変数a,bの総計を求める関数を表す。コード情報抽出部MD1は、このソースコードの全文を関数の文字列情報として抽出する。
【0024】
図3のソースコード(2)は、プログラミング言語の一つであるPython(登録商標)で記載されたソースコードの例を示す。このソースコードは、変数a,bの総計を求める関数を表す。コード情報抽出部MD1は、このソースコードの全文を関数の文字列情報として抽出する。
【0025】
なお、図3のソースコード(1)、(2)で示したような関数だけがソースコードとしてコードベースDB0に保存されている場合がある。この場合、コード情報抽出部MD1は、コードベースDB0から取得したソースコードを分割することなく文脈情報抽出部MD2に出力する。
【0026】
図3のソースコード(3)は、Pythonで記載されたソースコードの例を示す。このソースコードは、if文により変数a,bの大きさを比較して、異なる値を出力するものであり、関数ではない。このため、コード情報抽出部MD1は、このソースコードを文字列情報として出力しない。なお、ソースコード(1)、(2)で示したように定義された関数の中にif文が含まれる場合、if文を含む関数全体が文字列情報として抽出されうる。
【0027】
図4は、文脈情報D1の例を示す図である。文脈情報D1は、図1に示したように、文脈情報抽出部MD2がコードベースDB0から抽出する情報であり、メタ情報である。メタ情報とは、コード情報D0の内容を説明する情報であり、メタデータとも呼ばれる。
【0028】
文脈情報D1は、「目的文字列」、「元ファイル」、及び「行数」の項目を持つ。
「目的文字列」は、コードが含まれていた元リポジトリの目的を表す文字列である。
「元ファイル」は、「目的文字列」が含まれていた元ファイルのURLである。このURLは、元ファイルの保存場所を示すアクセス情報の一例である。ここでは、元ファイルとして、READMEファイルの保存場所がURLで示される。
「行数」は、当該ファイル中で「目的文字列」が記述されていた開始行数及び終了行数である。「行数」は、[開始行数,終了行数]の形式で表される。
【0029】
文脈情報抽出部MD2がコードベースDB0から文脈情報D1の情報を特定するための手法には、様々な手法が考えられる。例えば、元リポジトリがREADMEファイルを含んでいる場合、文脈情報抽出部MD2は、そのREADMEファイルを文字列ベースのルールとして、例えば「readme又はREADMEという文字列がファイル名に含まれる」といったルールで特定する。
【0030】
また、文脈情報抽出部MD2は、特定したREADMEファイル中の特定の行数、例えば「1行目から3行目」を「目的文字列」として抽出する。なお、「1行目から3行目」と例示した理由は、READMEファイル中の最初のテキストには、リポジトリの目的、ドメイン(プログラムが利用される産業分野)、又はプロジェクトの内容等が記載されていることが多いからである。READMEファイル以外にも、後述するファイルコメント、クラスコメント等についても、文脈情報として抽出可能な情報となりえる。
【0031】
また、文脈情報抽出部MD2は、文脈情報D1の特定方法として、ファイルコメントを用いることもできる。文脈情報抽出部MD2は、コードが含まれていた元ファイル中の最上位に記述されるコメントを、ソースコードを解析する技術を用いて抽出し、文脈情報として用いることができる。この理由は、最上位コメントが、そのファイル中のコードの目的を記していることが多いからである。ソースコードを解析する技術は、文脈情報抽出部MD2の一機能である。
【0032】
また、文脈情報抽出部MD2は、文脈情報D1の特定方法として、クラスコメントを用いることもできる。文脈情報抽出部MD2は、コードが含まれていた元クラスの最上位に記されるコメントを、ソースコードを解析する技術などで抽出し、文脈情報D1として用いることができる。この理由は、クラスの最上位コメントは、そのクラス中のコードの目的を記していることが多いからである。
【0033】
文脈情報抽出部MD2は、コードベースDB0から抽出した文脈情報D1と、コード情報抽出部MD1から入力したコード情報D0とをペアにして、コード及び文脈情報データベースDB1に保存する。なお、文脈情報抽出部MD2は、文脈情報D1で異なるコード情報D0を抽出した場合、コード及び文脈情報データベースDB1には、コード情報D0と、コード情報D0に対応する文脈情報D1とが1対多で保存される。
【0034】
コード及び文脈情報データベースDB1は、コード情報D0と、コード情報D0に対応する文脈情報D1をペアとして保存する。コード情報D0と文脈情報D1は、1対1で保存される場合があるし、多対1で保存される場合もある。コード情報D0と文脈情報D1が多対1で保存される場合、ある文脈情報D1と、コード情報D0とで保存される複数のペアのうち、いずれのペアにおいても文脈情報D1が同じことがある。
【0035】
図1に示した検索部MD3は、ユーザが操作するPC2により起動する検索アルゴリズムの一例である。ユーザは、検索対象であるコードを指定するためのクエリをPC2に入力する。クエリは、例えば、「How can I sort users in an ad recommendation system.」のように入力される。クエリとしては、自然言語で構成された文章による命令以外にも、データベースの検索操作で一般的に使用される命令であってもよい。
【0036】
検索部MD3は、入力されたクエリに基づいて、コード及び文脈情報データベースDB1からクエリに対応する文脈情報D1を検索し、検索した文脈情報D1と、文脈情報D1に対してペアとして保存されているコード情報D0とを、検索結果として出力する。例えば、検索部MD3は、PC2から受信するクエリに基づいて、コード及び文脈情報データベースDB1から検索したコード情報D0と文脈情報D1のペアをPC2に送信する。PC2は、検索部MD3から受信したコード情報D0と文脈情報D1のペアを表示し、ユーザはコード情報D0を確認することができる。
【0037】
図5は、ソースコード検索画面W1と検索結果表示画面W2の表示例を示す図である。
【0038】
始めに、PC2には、ソースコード検索画面W1が表示される。ソースコード検索画面W1は、クエリ入力部W11、プログラミング言語選択部W12、検索ボタンW13、クエリ例表示部W14を備える。
【0039】
クエリ入力部W11には、ユーザが検索しようとする文章がクエリとして入力される。
プログラミング言語選択部W12には、ユーザが取得したいソースコードが書かれるプログラミング言語を選択するために用いられる。プログラミング言語として、例えば、Python、Java等がある。
【0040】
検索ボタンW13は、検索部MD3に対して、クエリに基づいてコード及び文脈情報データベースDB1からコードを検索する指示を入力するためのボタンである。この検索ボタンW13は、クエリ入力部W11に入力されたクエリを検索部MD3に送信するトリガとして機能する。
【0041】
クエリ例表示部W14には、入力が推奨されるクエリの例が一覧表示される。ユーザは、クエリ入力部W11にクエリを入力する際、一覧表示されたクエリの例から任意のクエリを選ぶことができる。
【0042】
検索ボタンW13の押下後、PC2に検索結果表示画面W2が表示される。
検索結果表示画面W2は、スコア、プロジェクト、文脈、コードの各項目を持つ。
【0043】
スコア項目には、文脈情報D1とコード情報D0の関連度スコアが表示される。図示していないが、関連度スコアの上位n件の検索結果が、スコア、プロジェクト、文脈、コードの各項目をもつレコードとして検索結果表示画面W2に一覧表示されてもよい。
【0044】
プロジェクト項目には、コード及び文脈情報データベースDB1で検索されたコードが用いられるプロジェクトの名称が表示される。
文脈項目には、コード情報D0のペアである文脈情報D1から取得された文脈情報D1(例えば、図3に示した目的文字列の項目の内容)が表示される。
コード項目には、検索部MD3がコード及び文脈情報データベースDB1から検索したコード情報D0が表示される。ユーザは、コード項目に表示されたコード情報D0を利用することができる。
【0045】
<コード検索システムで行われる処理の例>
次に、ソースコード検索システム1で行われるコード情報及び文脈情報の保存方法と、コードの検索方法の例について、図6図7を参照して説明する。
【0046】
(コード情報及び文脈情報の保存方法)
図6は、コード情報及び文脈情報の保存方法の例を示すフローチャートである。
【0047】
始めに、コード情報抽出部MD1は、コードベースDB0からコード情報D0を抽出する(S1)。コード情報D0は、文脈情報抽出部MD2に出力される。
【0048】
次に、文脈情報抽出部MD2は、コード情報D0に基づいて、コードベースDB0から文脈情報D1を抽出する(S2)。
【0049】
最後に、文脈情報抽出部MD2は、コード情報D0及び文脈情報D1をペアとしてコード及び文脈情報データベースDB1に保存する(S3)。
図6に示す一連の処理は、所定タイミングで繰り返し行われ、コード及び文脈情報データベースDB1の内容が更新される。
【0050】
(コードの検索方法)
図7は、コードの検索方法の例を示すフローチャートである。
始めに、ユーザは、図5に示したソースコード検索画面W1からクエリを入力し、検索開始を指示する(S11)。
【0051】
次に、検索部MD3は、PC2からクエリを受け取り、このクエリに従って、コード及び文脈情報データベースDB1からコード情報D0を検索する(S12)。
【0052】
次に、検索部MD3は、検索したコード情報D0に含まれるコードを検索結果としてPC2に出力する(S13)。
【0053】
最後に、PC2は、検索結果表示画面W2にコード情報D0に含まれるコードを検索結果として表示する(S14)。ユーザは、検索結果表示画面W2に表示されたコードをソフトウェア開発に利用することができる。
【0054】
<計算機のハードウェア構成例>
次に、ソースコード検索システム1の各装置を構成する計算機20のハードウェア構成を説明する。
図8は、計算機20のハードウェア構成例を示すブロック図である。計算機20は、本実施の形態に係るソースコード検索システム1として動作可能なコンピュータとして用いられるハードウェアの一例である。
【0055】
計算機20は、バス24にそれぞれ接続されたCPU(Central Processing Unit)21、ROM(Read Only Memory)22、及びRAM(Random Access Memory)23を備える。さらに、計算機20は、表示装置25、入力装置26、不揮発性ストレージ27及びネットワークインターフェイス28を備える。
【0056】
CPU21は、本実施の形態に係る各機能を実現するソフトウェアのプログラムコードをROM22から読み出してRAM23にロードし、実行する。RAM23には、CPU21の演算処理の途中で発生した変数やパラメーター等が一時的に書き込まれ、これらの変数やパラメーター等がCPU21によって適宜読み出される。ただし、CPU21に代えてGPU(Graphics Processing Unit)を用いてもよく、CPU21とGPUを併用してもよい。
【0057】
表示装置25は、例えば、液晶ディスプレイモニターであり、計算機20で行われる処理の結果等を開発者に表示する。入力装置26には、例えば、キーボード、マウス等が用いられ、開発者(例えば、ユーザ)が所定の操作入力、指示を行うことが可能である。
【0058】
不揮発性ストレージ27としては、例えば、HDD(Hard Disk Drive)、SSD(Solid State Drive)、フレキシブルディスク、光ディスク、光磁気ディスク、CD-ROM、CD-R、磁気テープ又は不揮発性のメモリ等が用いられる。この不揮発性ストレージ27には、OS(Operating System)、各種のパラメーターの他に、計算機20を機能させるためのプログラムが記録されている。ROM22及び不揮発性ストレージ27は、CPU21が動作するために必要なプログラムやデータ等を記録しており、計算機20によって実行されるプログラムを格納したコンピュータが読取可能な非一過性の記憶媒体の一例として用いられる。
【0059】
ネットワークインターフェイス28には、例えば、NIC(Network Interface Card)等が用いられ、NICの端子に接続されたLAN(Local Area Network)、専用線等を介して各種のデータを装置間で送受信することが可能である。
【0060】
以上説明した第1実施形態に係るソースコード検索システム1では、コード情報D0と、文脈情報D1とが対応づけられた状態で保存されたコード及び文脈情報データベースDB1が構築される。ユーザは、コード及び文脈情報データベースDB1と、検索部MD3を用いて、文脈情報D1を考慮したソースコードの検索を実現できる。このため、開発者は、大量のコードを格納するコードベースDB0の中から必要なコードを検索しやすくなる。
【0061】
例えば、ユーザからクエリが入力された際に、検索部MD3は、あるコード情報D0と、文脈情報D1とのペアの関連度スコアを計算し、関連度スコアが高い上位n件の検索結果が返却される。クエリと、コード情報D0及び文脈情報D1のペアとの間の関連度スコアの計算方法として、以下の方法が挙げられる。この方法は、例えば、検索部MD3が、クエリとコード情報D0中の文字列の関連度スコアをDNN(Deep Neural Network)によって計算し、また、クエリと文脈情報D1中の文字列との関連度スコアをDNNによって計算する。その後、検索部MD3は、2つの関連度スコアの重み付け和を取ることで実現できる。
【0062】
ユーザは、クエリ入力部W11に自然文をクエリとして入力するだけで、目的とするコードを得ることができる。従来のコード検索時には、コードロジックを入力していたが、ソースコード検索システム1では、ユーザがプロジェクトの目的又はドメインのような抽象度の高い情報に基づいてコードを検索できる。
【0063】
また、ユーザは、ソースコード検索画面W1を通じて間接的にコードベースDB0にアクセスして、コードを得ることができる。このため、従来のようにコードベースDB0にアクセスして、多数のコードから目的のコードをユーザが目視で検索する場合に比べて、大きく検索時間を削減することができる。また、ユーザは、取得したコードを開発に流用できるので、開発に要する時間を削減することができ、生産性が向上する。
【0064】
[第2実施形態]
【0065】
第1実施形態に係るソースコード検索システム1では、例えば、READMEファイル中の最初のテキストは、リポジトリの目的を記していることに注目して、READMEファイルから文脈情報D1を抽出する処理について説明した。しかし、READMEファイルには、文脈情報D1として抽出したいソースコードの利用目的及びドメインの他にも、プログラムのインストール方法、プロジェクトの利用方法等の冗長な記載も含まれる。このため、第1実施形態に係る文脈情報抽出部MD2がREADMEファイルから文脈情報D1となり得る情報を正しく抽出できないおそれがある。そこで、第2実施形態に係るソースコード検索システム1では、図9に示すように文脈情報抽出部MD2が、コードベースDB0から文脈粗情報R1を抽出した後、文脈粗情報R1から文脈情報D1を特定する処理を加える。以下に、本発明の第2実施形態に係るソースコード検索システム1Aの構成例及び動作例を説明する。
【0066】
図9は、本発明の第2実施形態に係るソースコード検索システム1Aの全体構成例を示すブロック図である。
【0067】
第2実施形態に係るソースコード検索システム1Aは、図1に示した第1実施形態に係るソースコード検索システム1と同様の構成であるが、文脈情報抽出部MD2の内部構成が異なる。
文脈情報抽出部MD2は、コードベースDB0から文脈情報を抽出する機能を持つ。この文脈情報抽出部MD2は、テキストブロック特定部MD41及びテキストブロック内文脈情報特定部MD42を備える。
【0068】
テキストブロック特定部MD41(粗情報特定部の一例)は、第1実施形態に係る文脈情報抽出部MD2と同様の機能を持っているが、コード情報D0に基づいて、コードベースDB0から文脈情報D1を含むテキストを文脈粗情報R1として取得する点が異なる。この際、テキストブロック特定部MD41は、文脈情報D1を含むテキストを、ファイル単位のテキストブロックとして特定し、特定したテキストブロックを文脈粗情報R1としてテキストブロック内文脈情報特定部MD42に出力する。文脈粗情報R1は、文脈情報D1を大まかに特定する情報であり、文脈情報D1よりも大きな範囲の情報を含む。ファイル単位とは、例えば、READMEファイルのような単位である。また、「テキストブロック」とは、「文脈情報が含まれていると予想されるテキスト」を表す。例えば、ファイル全体、ファイル最上部に書かれている自然言語のコメント全体が文脈粗情報R1として用いられるテキストブロックである。
【0069】
テキストブロック内文脈情報特定部MD42(文脈情報特定部の一例)は、文脈粗情報R1を基に、さらに粒度を小さく特定するために用いられる。テキストブロック内文脈情報特定部MD42は、文脈粗情報R1に文脈情報D1が書かれた部分を詳細に特定し、特定した詳細部分を文脈情報D1として出力する。この際、テキストブロック内文脈情報特定部MD42は、テキストブロックから詳細部分を特定する。例えば、テキストブロック内文脈情報特定部MD42は、後述する図10に示すように文脈粗情報R1に含まれる「粗目的文字列」の中から、目的を表す文字列の部分のみを特定する。例えば、「目的」、「ドメイン」が含まれる一文のテキストブロックを詳細部分として文脈粗情報R1から特定する。詳細部分として特定されるテキストブロックは、「目的」、「ドメイン」が含まれる一文だけでなく、その一文の前後の文を含んでもよい。文脈粗情報R1から特定された、プロジェクトの目的、ドメインといった情報は、文脈情報D1としてコード及び文脈情報データベースDB1に出力される。
【0070】
図10は、文脈粗情報R1の例を示す図である。文脈粗情報R1は、「粗目的文字列」、「元ファイル」及び「行数」の項目を持つ。
【0071】
「粗目的文字列」は、コードの粗目的を文字列として含み、例えば、「このライブラリは、ユーザに対して最適な広告を推薦することを目的とする。具体的な処理としては、まずユーザをDNNによってベクトルに変換し、…」のようにファイルの最上部に記載される情報である。
「元ファイル」は、「粗目的文字列」が含まれていた元ファイルのURLである。このURLは、元ファイルの保存場所を示すアクセス情報の一例である。ここでは、元ファイルとして、READMEファイルの保存場所がURLで示される。
「行数」は、当該ファイル中で「粗目的文字列」が記述されていた開始行数及び終了行数である。「行数」は、[開始行数,終了行数]の形式で表される。
【0072】
テキストブロック内文脈情報特定部MD42により、文脈粗情報R1から特定された文脈情報D1は、例えば、「このライブラリは、ユーザに対して最適な広告を推薦することを目的とする。」のように表される。このため、目的以外の情報である「具体的な処理としては、まずユーザをDNNによってベクトルに変換し、…」といった記載は文脈情報D1として抽出されない。
【0073】
テキストブロック内文脈情報特定部MD42が、文脈粗情報R1から文脈情報D1を抽出する方法として、例えば、テキスト中から特定の部分を抜き出す情報抽出及び関係抽出技術などが用いられる。あるいは、自動要約技術などを用いて、文脈粗情報R1から目的に関する文字列のみを含む文脈情報D1に変換してもよい。テキストブロック内文脈情報特定部MD42は、文脈粗情報R1から抽出した文字列を図4に示した「目的文字列」を含む文脈情報D1として出力する。コード情報D0と、文脈情報D1のペアは、コード及び文脈情報データベースDB1に保存される。以降のユーザによるコード検索の方法は、第1実施形態に係る方法と同じであるため、詳細な説明を省略する。
【0074】
以上説明した第2実施形態に係るソースコード検索システム1Aでは、テキストブロック特定部MD41によりコードベースDB0から文脈粗情報R1が特定された後、テキストブロック内文脈情報特定部MD42により文脈情報D1が特定される。その後、コード情報D0に対応する文脈情報D1が適切に特定され、コード情報D0と文脈情報D1がペアとしてコード及び文脈情報データベースDB1に保存される。このため、ユーザがPC2にクエリを入力すると、文脈情報D1に対応するコード情報D0が検索されやすくなる。
【0075】
[変形例]
上述した各実施形態に係るソースコード検索システム1,1AをPC2の内部に構成してもよい。この場合、PC2に構成されるコード及び文脈情報データベースDB1にコード情報D0と文脈情報D1のペアが保存される。このため、ユーザは、オンラインにすることができないサーバ室等のオフライン環境であっても、PC2からクエリを入力してコードを検索し、開発を続けることができる。
【0076】
また、ソースコード検索システム1,1Aは、コードベースDB0を備える構成としてもよい。この場合、外部に公開することを前提としていないソースコードを保有する既存のシステムにおいて、コードベースDB0を使ってソースコードを管理する形態が考えられる。
【0077】
本発明は上述した各実施形態に限られるものではなく、特許請求の範囲に記載した本発明の要旨を逸脱しない限りその他種々の応用例、変形例を取り得ることは勿論である。
例えば、上述した各実施形態は本発明を分かりやすく説明するために装置及びシステムの構成を詳細かつ具体的に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されない。また、ここで説明した実施形態の構成の一部を他の実施形態の構成に置き換えることは可能であり、さらにはある実施形態の構成に他の実施形態の構成を加えることも可能である。また、各実施形態の構成の一部について、他の構成の追加、削除、置換をすることも可能である。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【0078】
1,1A…ソースコード検索システム、D1…文脈情報、DB1…文脈情報データベース、MD1…コード情報抽出部、MD2…文脈情報抽出部、MD3…検索部、MD41…テキストブロック特定部、MD42…テキストブロック内文脈情報特定部、R1…文脈粗情報、W1…ソースコード検索画面、W2…検索結果表示画面
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10