(57)【要約】【課題】ソフトウェア・サーチ・エンジンを操作する方法およびシステムを提供する。【解決手段】実施形態において、ソフトウェア・サーチ・エンジンを操作する方法は提供される。該方法は、ソースコードの1つ以上のソースからソフトウェア・コード・データベースを投入することを具備する。また、該方法は、ソフトウェア・コード・サーチ・エンジンに対する検索クエリーを受信すること（525）を具備する。さらに、該方法は、検索クエリーによって前記ソフトウェア・コード・データベースを検索すること（530）を具備する。さらに、該方法は、検索の結果を表示すること（550）を具備する。さらに、該方法は、前記ソフトウェア・コード・データベースのコード部分の再利用をトラッキングすることを具備する。また、方法は、ソフトウェア・コード・データベース(560)のコード部分の用法をレポートするのを含む。【選択図】図５Ａ
2008533544.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェア・コード・サーチ・エンジンへの検索クエリーを受信すること、
前記検索クエリーにて、ソースコードのうち1つ以上のソースからソースコードとともに投入されるソフトウェア・コード・データベースを検索すること、および、
前記検索の結果を表示すること、
を具備することを特徴とする方法。
【請求項２】
前記ソフトウェア・コード・データベースを投入することを更に具備する請求項１に記載の方法。
【請求項３】
前記ソフトウェア・コード・データベースは、バージョン・コントロール・システムから投入される請求項２に記載の方法。
【請求項４】
前記ソフトウェア・コード・データベースは、公的に入手可能なソースコードから投入される請求項２に記載の方法。
【請求項５】
前記ソフトウェア・コード・データベースは、ファイルシステムから投入される請求項２に記載の方法。
【請求項６】
前記ソフトウェア・コード・データベースは、バージョン・コントロール・システムと公的に入手可能なソースコードとから投入される請求項２に記載の方法。
【請求項７】
前記ソフトウェア・コード・データベースのソフトウェア・コードに索引付けすることを具備し、
検索することには、前記ソフトウェア・コード・データベースのインデックスと検索クエリーを比較することが含まれる、
請求項１に記載の方法。
【請求項８】
前記ソフトウェア・コード・データベースのコード部分の再利用をトラッキングすることを更に具備する請求項１に記載の方法。
【請求項９】
前記ソフトウェア・コード・データベースのコード部分の用法についてレポートすることを更に具備する請求項１に記載の方法。
【請求項１０】
機械可読メディアにて統合されたインストラクションに応答してプロセッサによって実行される請求項１に記載の方法。
【請求項１１】
前記ソフトウェア・コード・データベースをコード改訂システムから投入すること、
前記ソフトウェア・コード・データベースのソフトウェア・コードに索引付けすることを具備し、
検索することには、前記ソフトウェア・コード・データベースのインデックスと前記検索クエリーを比較することが含まれる、
請求項１に記載の方法。
【請求項１２】
前記ソフトウェア・コード・データベースのコード部分の再利用をトラッキングすること、
および
前記ソフトウェア・コード・データベースのコード部分の用法についてレポートすること、
を更に具備する請求項１１に記載の方法。
【請求項１３】
検索することには、フルテキスト適合検索が含まれる請求項１に記載の方法。
【請求項１４】
前記ソフトウェア・コード・データベースを検索することには、構文適合検索が含まれる請求項１に記載の方法。
【請求項１５】
前記ソフトウェア・コード・データベースを検索することには、ソースコードに関するメタデータを適合させるための検索が含まれる請求項１に記載の方法。
【請求項１６】
前記ソフトウェア・コード・データベースのコード部分の再利用をトラッキングすることを具備し、
検索結果を表示することには、前記結果に関する再利用統計データに基づくオーダーの結果を表示することが含まれる、
請求項１に記載の方法。
【請求項１７】
前記ソフトウェア・コード・データベースのコード部分の再利用についてレポートすることを更に具備する請求項１６に記載の方法。
【請求項１８】
ソースコードのパブリックレポジトリから前記ソフトウェア・コード・データベースを投入すること、
前記ソフトウェア・コード・データベースのソースコードを索引付けすること、
前記ソフトウェア・コード・データベースのコード部分の再利用をトラッキングすること、および、
前記ソフトウェア・コード・データベースのコード部分の用法についてレポートすることを具備し、
検索することには、前記ソフトウェア・コード・データベースのインデックスと前記検索クエリーを比較することが含まれる、
請求項１に記載の方法。
【請求項１９】
ソフトウェア・コード・データベースを投入すること、
ソフトウェア・コード・サーチ・エンジンへの検索クエリーを受信すること、
前記検索クエリーにてソフトウェア・コード・データベースを検索すること、
前記検索の結果を表示すること、
前記ソフトウェア・コード・データベースのコード部分の再利用をトラッキングすること、
および
前記ソフトウェア・コード・データベースのコード部分の利用法についてレポートすること、
を具備することを特徴とするソフトウェア・サーチ・エンジンを操作する方法。
【請求項２０】
前記ソフトウェア・コード・データベースは、コード改訂システムから投入される請求項１９に記載のソフトウェア・サーチ・エンジンを操作する方法。
【請求項２１】
前記ソフトウェア・コード・データベースは、ソースコードのパブリックレポジトリから投入される請求項１９に記載のソフトウェア・サーチ・エンジンを操作する方法。
【請求項２２】
ソフトウェア・コード・データベースと、
該ソフトウェア・コード・データベースに接続されるサーチ・エンジンと、
該サーチ・エンジンに接続されるユーザーインターフェースと、
を備えることを特徴とするシステム。
【請求項２３】
前記ソフトウェア・コード・データベースは、ソフトウェア・コードと共にソースコードのパブリックレポジトリから投入される請求項２２に記載のシステム。
【請求項２４】
前記ソフトウェア・コード・データベースは、ソフトウェア・コードと共にソースコード改訂管理システムから投入される請求項２２に記載のシステム。
【請求項２５】
前記ソフトウェア・コード・データベースは、ソフトウェア・コードと共にソースコードのパブリックレポジトリとソースコード改訂管理システムとから投入される請求項２２に記載のシステム。
【請求項２６】
ユーザーインターフェースは、ソースコード開発アプリケーションの一部である請求項２２に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
この出願は、2004年9月20日にファイルされ、「サブシステムに索引付けと検索とランク付けとをする検索システムを用いて、ソースコード・ファイルを検索する方法」と題され、Darren Leslie Rushを発明者とする仮出願番号60/612,024を基礎とする優先権を主張する。出願番号60/612,024は、ここに参照することによって含まれる。
【０００２】
本発明は、ソフトウェア・サーチ・エンジンを操作する方法およびシステムに関する。
【背景技術及び発明が解決しようとする課題】
【０００３】
ソフトウェア開発は、面倒で時間がかかりすぎるビジネスである。一般に、ソフトウェア・アプリケーションは、すべて同様の基本的なデータのマニピュレーション（操作）を行う。どのようにそれらのマニピュレーションが起こるのかということと、データが何を表しているのかということとのバリエーションが、ソフトウェアの多様性をもたらしている。従って、さまざまな異なるアプリケーションにおいて、同じソフトウェア・ルーチンまたはソフトウェア・コンポーネントを用いることは自然なことである。
【０００４】
同じルーチンが使用され得るが、それらは、ルーチンの個別のインスタンスを少し異ならせるバリエーションを有する場合がある。代わりに、同じルーチンは、同じ形式のデータが処理される際に、異なる（または、関連する）アプリケーションに接続される場合がある。従って、ソフトウェア開発の際に、既存のソフトウェア・コードを検出する方法を提供することは有益である。
【０００５】
再使用可能なソフトウェア・コードを検出することは、潜在的に簡単である。それを簡単にするためには、すでにあるソフトウェア・コンポーネントの編成されたリストと、これらのコンポーネントが何であるかという知識とを有しなければならない。しかしながら、代表的なソフトウェアエンジニアの誰もが、当該エンジニアが個々に開発したすべてのソフトウェアについて、そのような情報を有していない。さらに、ソフトウェア開発者のグループは、一般に、グループのメンバーが開発したものに関する漠然とした知識と、当該グループ外で開発されているものに関するちょっとした知識とのみしか有しない。従って、さまざまなソフトウェア・アプリケーションまたはソースコードリポジトリー（ソースコードレポジトリ）からソフトウェア・ソースコードへの体系的なアクセスを許容するシステムを開発することは有益である。さらに、効率的な方法でソースコードへのアクセスを可能にして、そのような情報を分類する或いは編成することは有益である。
【発明の開示】
【課題を解決するための手段】
【０００６】
本発明に係る実施形態は、制限的事項というよりも実例として説明される。本発明は、説明される実施形態に制限されるものとして理解されているべきでない。さらに、ある実施形態の構成は、それらの構成が説明されない他の実施形態にも併用され得る。ある実施形態の様々な構成は、他の実施形態の構成と矛盾するというよりも、他の実施形態をさらによくする場合がある。
【０００７】
本実施形態において、ソフトウェア・サーチ・エンジンを操作する方法が提供される。該方法は、ソースコードのうち1つ以上のソースからソフトウェア・コード・データベースを投入することを含む。また、該方法は、ソフトウェア・コード・サーチ・エンジンへの検索クエリーを受信することを含む。さらに、該方法は、検索クエリーに基づいてソフトウェア・コード・データベースを検索することを含む。さらに、該方法は、検索結果を表示することを含む。さらに、該方法は、ソフトウェア・コード・データベースのコード部分の再利用をトラッキングすることを含む。また、該方法は、ソフトウェア・コード・データベースのコード部分の利用方法をレポートすることを含む。
【０００８】
さらに、他の実施形態において、方法が提供される。該方法は、ソフトウェア・コード・サーチ・エンジンへの検索クエリーを受信することを含む。また、該方法は、検索クエリーに基づいてソフトウェア・コード・データベースを検索することを含む。前記ソフトウェア・コード・データベースは、ソースコードのうち1つ以上のソースから、ソースコードとともに投入される。さらに、該方法は、検索結果を表示することを含む。
【０００９】
他の実施形態において、システムが提供される。該システムはソフトウェア・コード・データベースを備える。前記ソフトウェア・コード・データベースは、ソースコードのうち1つ以上のソースから、ソースコードとともに投入される。さらに、該システムは、ソフトウェア・コード・データベースに接続されるサーチ・エンジンを備える。また、該システムは、前記サーチ・エンジンに接続されるユーザーインターフェースを備える。
【発明を実施するための最良の形態】
【００１０】
システム、方法、および装置は、ソースコード・サーチ・エンジンのために提供される。いくつかの実施形態において、複数のソースコードレポジトリまたはストレージシステム（保管システム）への1つの検索インターフェースが提供される。該検索インターフェースは、細部のさまざまなレベルに関するソースコードを検索し得る。前記１つの検索インターフェースは、さらに、利用と再利用とに基づいて前記ソースコードをランク付けし得る。このドキュメントにて説明される具体的な実施形態は、本発明の模範的な例を示しており、制限的であるというよりも事実上実例となる。
【００１１】
説明のために、以下の記載において、たくさんの具体的な細部は、本発明の完全な理解をなすために説明される。しかしながら、本発明がこれらの具体的な細部なしで実施できることは、当業者にとって明白である。他の例において、構成とデバイスとは、本発明を不明確とするのを回避するため、ブロック図の形式で示される。
【００１２】
明細書における「一実施形態」または「実施形態」への言及は、当該実施形態に関連して説明される特定の機能、構成、または特徴が本発明の少なくとも1つの実施形態に含まれていることを意味している。明細書における様々な箇所での「一実施形態において」というフレーズは、必ずしもすべて同じ実施形態を示すわけではなく、他の実施形態のうち相互排他的な別個のまたは代わりの実施形態も示す。
【００１３】
好ましくは、以下の機能のうち1つ以上が提供される。一般的なソースコード検索（フルテキスト検索など）は、1つのそのような機能である。また、シンタックス・レベル・ソースコード検索、即ち正確なテキスト適合というよりもソースコードの文法形式に基づく検索は有益である。同様に、関連したメタデータに基づいて検索することは有益である。さらに、コード部分の再利用統計データについてのトラッキングに基づいてどのコードが有益であるかについてのフィードバックを提供することは有益である。そのようなフィードバックを提供するために、再利用のトラッキングもまた発生しなければならない。
【００１４】
実施形態において、ソフトウェア・サーチ・エンジンを操作する方法が提供される。該方法は、ソースコードの1つ以上のソースからソフトウェア・コード・データベースを投入することを含む。また、該方法は、ソフトウェア・コード・サーチ・エンジンのための検索クエリーを受信することを含む。さらに、該方法は、検索クエリーにてソフトウェア・コード・データベースを検索することを含む。さらに、該方法は、検索結果を示すことを含む。さらに、該方法は、ソフトウェア・コード・データベースのコード部分の再利用をトラッキングすることを含む。また、該方法は、ソフトウェア・コード・データベースのコード部分の利用法についてレポートすることを含む。
【００１５】
また、他の実施形態において方法が提供される。該方法は、ソフトウェア・コード・サーチ・エンジンのための検索クエリーを受信することを含む。また、該方法は検索クエリーにてソフトウェア・コード・データベースを検索することを含む。前記ソフトウェア・コード・データベースは、ソースコードの1つ以上のソースからソースコードと共に投入される。さらに、該方法は検索結果を示すことを含む。
【００１６】
他の実施形態において、システムが提供される。該システムはソフトウェア・コード・データベースを備える。該ソフトウェア・コード・データベースは、ソースコードの1つ以上のソースからソースコードと共に投入される。さらに、該システムは、前記ソフトウェア・コード・データベースに接続されるサーチ・エンジンを備える。また、該システムは、前記サーチ・エンジンに接続されるユーザーインターフェースを備える。
【００１７】
ローカル・ソースコード・レポジトリまたはリモート・ソースコード・レポジトリにあるソフトウェア・ソースコード・ファイルのコンテンツを検索するためのサーチ・エンジンは、一実施形態において与えられる。前記サーチ・エンジンは、適切なプロトコルを用いている各レポジトリに接続し、ローカルコピーにプロジェクト・ソースコード・ファイルのバージョンをコピーする。インデキシング・システムは、関連するメタデータを抽出すると共に検索基準として後に用いられ得る統計データを作成するために、各ファイルに索引を付ける。ユーザーまたは他のシステム（コンピュータ）が指定された検索基準を含むファイルについての前記インデックスを、ユーザーまたは他のシステム（コンピュータ）が検索することを可能にする検索システム。最も関連するオーダーから最も関連しないオーダーでの適合する検索結果を示すランキング・システムもまた採用し得る。
【００１８】
実施形態は、一般に、ソースコードに対するサーチ・エンジンの構造と関連しており、より具体的には、いくつかの実施形態は、内蔵されているメタデータを抽出すると共にユーザーに最も関連深い知的方法で結果をランク付けするために、ソースコードに索引付けするサーチ・エンジンと関連している。
【００１９】
様々な機能が、ソースコード・サーチ・エンジンおよび関連するソフトウェアのさまざまな実施形態に組み込まれ得る。図面および記載において説明される様々な実施形態と共に、ソースコード・サーチ・エンジンの実施形態についての初期のディスカッションが提供される。一般に、様々な機能は他の実施形態の機能と矛盾しているというよりも強化するので、一実施形態による機能は、他の実施形態に組み込まれ得る。
【００２０】
また、インデキシング・エンジンは、各ファイルのフルテキスト解析に加えて、それが書かれるプログラミング言語に基づいて各ファイルを解析し得る。即ち、本質的に、そのプログラム定義を抽出するためにファイルを構文解析すると共にコンパイルし、外部コンポーネントへの参照を解決する。ファイルのこの意味表示は、ソースコードにて与えられたより高レベルの機能を理解する中でユーザーを補助するためと、ファイルおよびプロジェクトを横切るファイルの参照エンティティをシステムが横切ることを可能にするためとに用いられる。
【００２１】
検索を実施した後に、ユーザーは、適合する結果と共にファイルの要約を得る。いくつかの実施形態において、結果のリストからファイルをクリックすると、そのファイルコンテンツをコード−カラー方式で表示し、そして、検索語を強調表示する。このコード表示から、ユーザーは、それらのアプリケーションの全てのファイルまたはファイルのコピー部分と過去部分とをダウンロードするためのリンクをクリックすることができる。
【００２２】
ユーザーがファイルをダウンロードする際に、システムは、再利用の例としてこれを登録し、ユーザーによって実施された前の検索と再利用とを関係づける。ユーザーがカット・アンド・ペーストすべくファイルコンテンツの一部を選択する場合に、システムは、このことを検出し、彼らがファイルの一部をコピーすることを望むということを確認するダイアログボックスをユーザーに提供する。ユーザーは、OK、キャンセル、またはYes、Noを選択することができ、Noまたはキャンセルを選択すると、コピー・アンド・ペースト機能が無効になる。YesまたはOKをクリックすると、コピー・アンド・ペースト機能が有効となり、システム上の再利用の例を登録する。再び、この再利用は、ユーザーによって実施された以前の検索に相関することとなる。
【００２３】
各ファイルについてのコードを索引付けること及び構文解析することによって、人は、コードの各ステートメントによって参照される明確なエンティティとメンバーとを識別することができる。この情報は、開発者が、エンティティが定義される場所を容易に見出すことと、エンティティが参照される他の場所を識別することとを可能にする。この機能がプロジェクトの範囲の中のIDEアプリケーションにおいて一般に入手可能である場合、内部バージョンコントロールシステム、内部ファイルシステム、またはソフトウェア・コードの外部ソースからであるかどうかにかかわらず、人は、索引付けされたすべてのプロジェクトに、この原則を適用することができる。
【００２４】
このことの副作用は、各エンティティについての参照カウントを保管することを可能にする。人は、ファイルレベルでこれらの参照カウントを合計することができ、結果を記録するために、どのファイルが他のファイルよりも再使用可能な適合であるかを決定するために、この参照カウントを用いることができる。
【００２５】
メカニズムを記録するには、検索に適合する各ファイルのスコアを計算するための式を用いる。スコアは、エンドユーザーへの結果ファイルのディスプレイをソートするために用いられる。
1つの手法として、一般に、ファイルは、以下の場合にはより高いスコアとなる。
1.それらが開発者によって以前再利用されている。
2.それらが、他のプロジェクトによって参照されるエンティティについての定義を含んでいる。
3.それらが、検索において指定された適合用語についての高周波を具備する。
1つの手法において、次の用語が用いられ得る。
リユーズ・スコア（ReuseScore）−ファイルがダウンロードされた回数またはファイルの一部がコピーされた回数。
リファレンスド・エンティティ・カウント（ReferencedEntityCount）−プロジェクトおよびインデックス全体の中の他のファイルからのこのファイルにおけるエンティティへの参照回数。
ワード・フレクエンシー・カウント（WordFrequencyCount）−ファイル* 100のワード数によって分配されて検索用語が検出される回数；
スコア＝（（リユーズ・カウント> 0）* 10000 +リユーズ・カウント）
+（（リファレンスド・エンティティ・カウント> 0）*5000+リファレンスド・エンティティ・カウント）
+ワード・フリークエンシー・カウント
【００２６】
この特定の手法においては、この合成式は、再利用されたファイルが最初に表示され、続いてその中で定義されるエンティティに多くの外部参照を具備するファイルが表示され、続いてコンテンツに含まれる検索用語についての高周波を具備するファイルが表示されることを保証する。
【００２７】
ソースコードのスコアまたはランキングの他の手法もまた有益である。上述の手法において、異なる式が様々な状況下で用いられ得る。
【００２８】
ソースコード・ファイルに対する基本的なコードライン解析に加えて、コードラインの数は、プロジェクトの近似値を評価するためのプロジェクトレベルで集約され得る。一般に認められる産業条件を用いると、プロジェクトの値は、以下の式から計算され得る：
Project Cost = [TLOC]/1000* [EKLOC] * [FP] * [LC]
ここで、
TLOC = 全てのプロジェクトについてのトータル・コードライン（Total Lines of Code for entire project）
EKLOC = 1000のコードラインを書くための人−月の数（Number of person-months to write 1000 lines of code）
FP = プロジェクトを用いる開発者に必要な機能の%（% of functionality needed by the developer who will use the project）
LC = 1ヶ月あたりの開発者1人の人件費(平均)（Labor Cost for 1 developer for 1 month (average)）
【００２９】
ユーザーは、プロジェクト表示スクリーンから、変数のいくつかを彼らの好みに調整することができ、そして、新しいプロジェクトコストを見るために再計算（Recalculate）をクリックする。開発チームが自身で等価な機能を構築することになっている場合には、このことは、発生するコストの見積りである。
【００３０】
ソフトウェアプロジェクトの現在の表示を提供することに加えて、システムは、前の時点でプロジェクトの保存されているスナップショットを用いて過去の解析を提供することもできる。特に、アプリケーションが接続するバージョン・コントロール・システムは、プロジェクトの各ファイルのすべての過去のバージョンを保存する。この過去のデータに対してインデキシング・システムを用いることは、新しい解析をもたらし得る。これは、プロジェクトを含み、時間上のラインカウントをファイルすることができる。従って、ユーザーは、どのように、プロジェクトが、バージョン・コントロール・システムの各バージョンについての全てのコードラインをプロットして増大させたかを知ることができる。このデータは、プロジェクト進展を理解することに有益である場合がある。（時々速度と称される）また、このデータは、開発者によって除去される場合もある。この解析は、個々の開発者がどのように時間をかけてプロジェクトに寄与していたかを知るために用いられ得る。
【００３１】
多くの場合、システムは、特定のファイルを作成したユーザーも再利用しているユーザーも識別するので、該システムは、ファイルが変わると、両メンバーに通知書を送ることが潜在的に可能である。これが有益である場合には、少なくとも2つのシナリオがある。1つは、作者がバグ修正にてファイルをアップデートする。システムは、ファイルを再利用したすべてのユーザーに変更があったことを通知すると共に、彼らがファイルを再利用したのちに、変更の要約を彼らに与える。2つは、開発者は、ファイルを再利用し、原作者が利益を得ることができるように変更する。システムは、（再利用）ユーザーの許可によって、作成者がメインプロジェクトに変更を戻して組み込むことを選択可能とするための変更を作成者に通知することができる。
【００３２】
実施形態の特徴一式が説明されている。以下で説明されるような様々な特徴は、そのような実施形態または他の実施形態に組み入れられ得る。そのような特徴は、インターネットまたは他のソースロケーションからソフトウェアプロジェクトの部分的なスナップショットを周期的に取り去ることを具備し得る。その際、内蔵されたメタデータと統計情報とを識別するためにソースファイルに索引を付けることは起こる場合がある。そのような情報は、ファイルのためのプログラミング言語を含み得る；命令行、コメント、コードとコメントとの混合、および空白行の数；コード長さ；コメント長さ；GPL、LGPLなどのあらゆる内蔵されたライセンス；ファイルまたは、ソースファイルを説明する補助ファイルの中のコメントに内蔵されたxml部分；そして、ファイルとそれらのフリークエンシーにおいて用いられるキーワード。
【００３３】
その際、システムは、あらゆるインデックスデータを用いて、作成されたインデックスをユーザーが検索することを可能にし得る。それに応じて、システムは、記録装置を用いて最も関連しない方法に最も関連する方法で検索結果を示すこともできる。様々な記録装置は、検索にて示されたキーワードの最も高い全体の使用を含めて用いられ得る；DOCSスコア：コードストリーム長さへのコメントストリーム長さの比率；または、File Duplicity Score：例えば、このファイルが他のプロジェクトにおいて参照される回数。
【００３４】
また、システムは、1つ以上の方法でコードの再利用をトラッキングし得る。これは、ファイルを再利用または再度目的としているユーザーについてのすべての例をトラッキング（tracking）することを含み得る。また、これは、その特定の検索に有益であると見出される結果と検索とを関係づけることを含み得る。さらに、これは、新しい変更ファイルを再利用したユーザーに通知し、および／または、ファイルを再利用している開発者によって作成されたファイルに、変更の原作成者を通知することを含み得る。
【００３５】
同様に、システム利用法に関するレポートがなされることがある。これは、検索の解析および／または再利用の解析をもたらすことを伴い得る。また、これは、例えば、人口統計的グループまたはコミュニティグループによる検索解析と再利用解析とを提供することを伴ってもよい。
【００３６】
他の実施形態は、同様の結果を達成するために様々な技術を用い得る。ソースコードレポジトリへ接続する手段と、プロジェクト・ソースコード・ファイルのアップデートをダウンロードする手段とが備えられ得る。これは、接続情報と認証情報とが入っているソースコードレポジトリのリストを列挙することを具備してもよい。これは、適切なプロトコルを使用している各レポジトリに接続することを、さらに具備してもよい。同様に、これは、ローカルコピーにプロジェクトをダウンロードするためにコマンドを出すことを備えてもよい。代わりに、これは、ローカルソースコードプロジェクトファイルがリモートレポジトリのファイルによって最新となっている（例えば、同期化する）ことを保証するために、コマンドを出すことを備えてもよい。
【００３７】
また、ソースコードプロジェクトファイルについての部分的なコピーのそれぞれに索引を付ける手段が備えられていてもよい。該手段は、その形式を決定するためにファイルのファイル拡張子を利用することによって、各ファイルに含まれているソースコードについての形式を決定することを具備してもよい。また、これは、それが関連するコード部分とコメント部分とを含むか否かを決定するための適切なインデキシング・システムを用いているファイルに、索引を付けることを具備してもよい。さらに、これは、ソースコード・ファイルの各形式についてのカスタムインデキシングプロセスを用いることを具備してもよい。
【００３８】
索引付け手段は、一般にインデックスを作成する。場合によっては、作成されたインデックスは、ファイルの各キーワードのフリークエンシーについての対応する計算によってソースコード・ファイルの中で検出されたキーワードのリストを含んでいる。これは、ファイルにおいて用いられる特別なプログラミング言語についての構文に特有の表現に適合するパターンを用いた各ワードの適合を検出するために、正規表現システムを用いているファイルを構文解析することによって遂行されてもよい。その際、これは、ワードとそれらのフリークエンシーとについてのテーブルをファイルに保存すること、検出された各新しいワードを1のフリークエンシーカウントと一緒にテーブルに追加すること、および、ワードがファイルコンテンツにて検出されるそれぞれの追加のときにワードテーブルにてフリークエンシーカウントをインクリメントすることとよって進行してもよい。
【００３９】
代わりに、インデックスは含む場合がある：ファイルのテキストのラインの総数、ファイルのソースコードを含むラインの総数、ファイルのコメントを含むラインの総数、ソースコードとコメントとの双方を含むラインの総数（混合して分類される）、ファイルの空または空白であるラインの総数。前記した統計データの各々は、ファイルにて検出されるプログラミング言語に特有な適合パターンにシステムを適合する正規表現パターンを用いているファイルを構文解析することによって決定されてもよい。そのようなパターンは、言語の構文仕様によって各言語に対して決定され得る。
【００４０】
同様に、作成されたインデックスは、ファイルのソースコードの全長を含む場合がある。これは、具体的なプログラミング言語についての構文仕様に必要とされるように、すべての空白行およびコメントを削除すること、そしてまた、ファイルのすべてのフォーマットしている特定情報を削除することによって決定され得る。多くのプログラミング言語において、フォーマットしている特定情報は、以下を具備してもよい：空白文字（ASCII 32）またはタブ文字（ASCII 9）などの空白文字。また、インデックスは、ファイルのすべてのソースコードを削除すること、および、ファイルのすべてのフォーマットしている特定情報を削除することによって決定されるファイルのコメントの全長を具備してもよい。その際、以下の比率に基づいたスコア計算（ここではDOCSと称される）がなされてもよい。
(Length of Comments) / (Length of Source Code)
【００４１】
また、インデックスは、ファイルの中で用いられる主要なプログラミング言語を含み得る。同様に、インデックスは、ファイルに入っているライセンス情報についてのネームを含み得る。これは、例えば、よく知られているライセンスの一部であると知られているテキストについてのファイルを検索すること、および、検出したテキストをよく知られているライセンスのコンテンツと比較すること、キーワードフリークエンシーとテキストにおいて見られる用語の特異性とに基づいて最適な適合を決定することによって進行されてもよい。さらに、インデックスは、ファイルに含まれるあらゆる著作権情報のネームを含み得る。そのような情報は、著作権用語または著作権c文字を含む文字列についてのファイルコメントを検索することによって検索されてもよい。
【００４２】
ハッシュアルゴリズムは、同一のコンテンツと共に他のファイルのコンテンツによって作成されたハッシュコード（hashcode）と比較した場合に等しくなるファイルのコンテンツに基づいて値を作成するべく用いられてもよい。ここで、この値は、ファイル・ハッシュ・コード（FileHashCode）として知られている。好ましくは、これは、インターテーブル・ハッシュ・コードを用いてなされてもよい。
【００４３】
また、インデックスは、ファイルについての作者固有の情報を与えるXMLについてのコンテンツを具備してもよい。そのような情報は、適切な始まり<xml>タグと対応する終わり</xml>タグとについてのファイルのコメントを検索することによって検出することができる。また、これは、始まりタグと終わりタグとの間のあらゆる不正コメント文字を本体から削除することを備えてもよい。代わりに、追加のファイル情報を含む実際のxmlタグは、公文書において定義されたタグの一部のいずれかであってもよい。
【００４４】
いくつかの実施形態において、ファイルまたはプロジェクトに特有な情報をソースコード・ファイルに直接組込むための方法が与えられる。該方法は、特有情報を提供しているXMLタグセットを構築することを含む。また、該方法は、ソースコード・ファイルのコメントにXMLタグセットを組み込むことを具備する。代わりに、該方法は、XMLタグセットを含む付随的なファイルへのリンクをソースコード・ファイルのコメントに組み込むことを具備する。同様に、いくつかの実施形態において、ユーザーが、キーワード、プロジェクト、レポジトリ、ライセンス、プログラミング言語、または他のプロジェクトへのリンクによってユーザーの検索基準を満たすファイルを識別するためにインデックスを検索することを可能にする方法が提供されてもよい。
【００４５】
また、最も関連しない方法に最も関連する方法でファイルを表示するための検索結果の結果を記録する方法は、いくつかの実施形態において提供され得る。いくつかの実施形態において、ユーザーは、好ましい記録装置によって結果を分類することを選択することができる。この記録方法は、前に説明したDOCS値であってもよい。代わりに、この記録方法は、次に計算されるワード・フリークエンシー・スコア（Word Frequency Score（WFS)）であるかもしれない：
Sum (Word Frequency of each Search term in the Resulting file)
同様に、記録方法は、ファイル・リユース・スコア（File Reuse Score（FRS））であってもよい。
FRS = sum (Files in the Index with same FileHashcode as resultant file)
【００４６】
様々な実施形態において、IDEとの統合は好ましい場合があり、そのようなインプリメンテーションは、以下の機能のいくつかまたはすべてを具備し得る：
・ソフトウェア開発者が、ネームスペース、クラス、インターフェース、ファンクション、方法、プロパティー、またはフィールドなどのソフトウェア・アプリケーションの構造要素を作成または修正する際に検出するテキストエディター（IDE）との統合。
・これらの要素が、定義された要素と同様または関連する既存のソフトウェア・ソースコードを識別するために1つ以上の外部ソースコード・データベースを背景として作成または修正される際に背景検索を実行すること。
・視覚的または他の手段にて適合結果の数と種類とを開発者に表示すること。
・メッセージをクリックするまたは特別なキーボードの組み合わせをタイプすることによって、開発者が結果に容易にアクセスすることを可能にすること。
・それらが、結果から開発者IDEに容易にコピーされてペーストされ得るような方法で結果を提示すること。
・時間につれて検索結果を繰り返し改善するために、検索と再利用されたソースコード結果とに関する統計データを収集すること。
【００４７】
実施形態は、一般に、テキストエディタアプリケーションが、現在開発されているドキュメントにおいて再使用可能である外部コンテンツの統合についてユーザーに提案することを可能にするソフトウェア・コンポーネントの構文、より具体的には、ソフトウェア開発のドメインへのシステムなどのアプリケーションに関連している。
【００４８】
いくつかの実施形態の特徴は、特にソフトウェア開発のために考案されたテキストエディタにて統合する、また、統合開発環境（IDEs）として知られているソフトウェア・コンポーネントを具備する。ソフトウェア・コンポーネントまたはモジュールは、開発者が、ネームスペース、クラス、インターフェース、ファンクション、方法、プロパティ、またはフィールドなどのソフトウェア・アプリケーションの定義する要素を作成または修正している際に、検出することができてもよい。関連するコンポーネントは、定義された要素と同様または関連するコードを識別するためのソースコードを具備する1つ以上の外部データベースを検索するシステムをインプリメントすることもできる。これは、検出される結果の数および種類を開発者に通知するシステムと、開発者が現在開発されているアプリケーションに結果を容易にコピー・アンド・ペーストすることができる結果を表示するシステムとをインプリメントしているコンポーネントにて作動するかもしれない。検索は、同様または関連するソースコードの検索が迅速に実行されるように、ソースコードを索引付けするシステムを具備してもよい。また、これは、検索と、繰り返しランキングを改善し、将来、検索結果のオーダーを表示するために開発者によって選択された結果とを記録するシステムを具備してもよい。
【００４９】
そのユーザーインターフェースについての実施形態の考察は、どのようにコード・サーチ・エンジンがDDE（統合開発環境（integrated development environment））と統合し得るのかということへの見識をさらにもたらし得る。図1は、IDEにて統合したコード検索コンポーネントの実施形態のディスプレイを示す。インターフェース100は、コード・サーチ・エンジンとともにIDEの典型的な要素を具備する。ウィンドウ110は、コードの編集環境をもたらす。ロケーション120は、どのソフトウェア・コードが現在編集されているかについての表示を示す。コード検索インターフェース130は、検索パラメータの選択を可能にするインターフェースを形成する。コードスペース（Codespace）ディスプレイ140は、ウィンドウ110の現在のコードのコンテキストについての表示と共に開発がなされている全体的なコードスペースの説明をもたらす。図1において、検索は何れもなされず、そして、すべての形式のコードの検索を可能にするパラメータが選択される。
【００５０】
ソースコードは、さまざまな形態、サイズ、そしてフォームとして供給される。ソースコードの様々な部分は、例えば、システム、アプリケーション、ライブラリ、コンポーネント、モジュール、オブジェクト、クラス、方法、ルーチン、手順、ファンクション、または断片と称され得る。これらの何れの部分であっても、検出または様々な実施形態における結果としての検索に適している。また、例えば一般的なテキストなどの他の形式のコンピュータデータについての再利用が、例えばサーチ・エンジンと文書管理システムとで同様に処理され得ることに留意する。
【００５１】
要求またはソースコードの変更のどちらかに応じて、検索が開始されてもよい。図2において、新方法の作成の後に、ユーザーに表示される入手可能な検索結果の通知についての実施形態が示されている。検索通知アイコン270は、潜在的な適合が、ウィンドウ110において現在進展されているコードのために検出されていることを示す。検索は、図1のコードディスプレイ110に表示されたコードの特徴に基づいており、編集がなされる間バックグラウンド処理がなされる。検索は、新しいソフトウェア・コードの検出、若しくは、既存の方法、オブジェクト、ファンクション、またはコードの他の部分についてのAPIへの変更の検出に基づいて始動されてもよい。アイコン270をクリックすると、検索によって検出されたソフトウェア・コードが表示される。
【００５２】
代わりに、さまざまな結果のリストが供給されてもよい。図3は、（好ましくは）開発者が視覚的に結果にフィルタをかけることを容易にする検索結果要約の実施形態を示す。すべてのソフトウェア・コードを示す代わりに、ディスプレイウィンドウ350において示されるように、結果の要約が供給されてもよい。各コード部分は、それが検出され得るところについて（そして、それがどのようなライセンス制限を将来的に持ち得るのか）、そのAPIと情報とによって表示される。
【００５３】
特有な結果は、別個のウィンドウにてさらに与えられてもよい。図4Aは、コピー・アンド・ペーストによって現在のファイルに容易に組み込まれ得るブラウザの詳細なコード表示の実施形態を示す。インターフェース400は、例えばマイクロソフト（Microsoft）またはファイヤーフォックス（Firefox）のインターネットエクスプローラ（Internet Explorer）などのブラウザにて表示されてもよい。コード410は、部分の現在のコードである。プロジェクト情報420は、どこでコードが発生したかということと、どんなライセンス制限がコードによって伝えられる可能性があるかということとを示す。言語情報430は、コードがどんな言語であるかということと、コードが統合についてどのような要件（例えば、言語の種類、専門的なライブラリなど）を有するかということとを示す。コンテキスト情報440は、どのような他のモジュールがインスタントモジュールとともに入手可能であるかを示す。インターフェースデータ450は、インスタントモジュールのAPIについての情報を供給する。また、例えば言語、ライセンス、およびキーワードの指定を含めて、検索インターフェース460にて検索をより詳細に行うための機会が与えられる。
【００５４】
図4Bは、開発環境（例えばIDE）に組み入れられ得る図4Aのそれと同様なインターフェースを示す。従って、どのようなソフトウェア・コードが入手可能であるかについての情報は、プロジェクトの進展についてのコンテキスト情報と併せて表示され得る。要素は、コピー・アンド・ペーストされるか、さもなければ、プロジェクトに組み込まれてもよい。
【００５５】
検索は、書き込みコードに対する反応または要求に対する応答反応にて開始されると共に実行され得る。図5Aは、ソフトウェア・コード要求のプロセスについての実施形態をもたらす。プロセス（方法）500とこの文書の他のプロセスとは、モジュールのセットとしてインプリメントされる。それは、プロセスモジュールまたはオペレーション、例えば、関連するファンクションまたは効果を有するソフトウェアモジュール、プロセス操作を実行するように作成されたハードウェアモジュール、または、モジュールの様々な形式のうちのいくつかの組み合わせであってもよい。ここで説明したプロセス500と他のプロセスとのモジュールは、パラレルまたはシリアル方式で再編成されてもよく、また、様々な態様で、再オーダー、結合、または再分割されてもよい。
【００５６】
検索要求は、モジュール510でソフトウェアモジュールにて変更が検出される際に作り出されてもよい。そのような変更は、パラメータの変更、ソフトウェア・コードの編集、またはこの文書において他のところで論じた他の変更を含み得る。コード情報（検索パラメータ）は、モジュール520で抽出される。従って、ソフトウェア・コードのAPIまたはファンクションは、例えば、署名として抽出され得る。検索クエリーまたは検索基準のセットは、検索機関への提案のためにモジュール525にて作成される。
【００５７】
検索クエリーが発行されると、モジュール530にて検索要求が受信され実行される。これは、様々な質の適合を検出するために、様々な検索アルゴリズムとデータベースクエリーとを具備することができる。モジュール535にて、受信された適合の数は、計算されると共に検索クエリーを発行しているクライアントへ返される。モジュール540にて、いくつの結果が検出されたかに関して決定が作成される。結果が検出されなかった場合、検索は、モジュール545では無視される（恐らく、別の変更の検出を待つべくモジュール510に戻る）。検索の結果（それらがある場合）は、モジュール550にてユーザーに表示される。その際、モジュール555にて、ユーザーが検索結果をアクティブにしている（例えばアクセス状態）かどうかに関して決定が作成される。そうでない場合、モジュール565にて、結果は隠される。最初の通知を無視した後に、検索が何を検出したかを知るためにユーザーがバックトラックすることを許容するので、結果は、円形状のキューまたは他の記憶構造（データ構造）で保存されることができることに留意する。例えば、これは、例えばソフトウェア・コードが予期されるより多くの作業を要することを認識した、または、有益であるコードの前の一部を記憶した後に、ユーザーが予測することを許容する。
【００５８】
ある実施形態において、検索結果がアクティブである場合、検索基準と検索結果とは、モジュール570にて再調査のために新しいウィンドウに渡される。それから、モジュール575にて、ユーザーは結果の細目を再調査してもよく、そして、例えば、現在のプロジェクトにコードをコピー・アンド・ペースト或いは統合する。また、検索の利用とは別に、検索による結果の統計データと検索結果のユーザー利用とは、例えば、検索と併せて、または検索と検索結果の利用の後に、モジュール560にて保存される。これらの統計データは、単に、サーバーベースであってもよく（検索クエリーと検索結果とのみを含む）、或いは、より包括的であってもよい。
【００５９】
代わりに、検索は、例えばウェブページでまたはツールバーを通して、ユーザーの申し出によって開始されてもよい。図5Bは、ユーザーで開始された検索プロセスを示している。プロセス515は、検索開始と、結果要約ページを表示することと、詳細情報を提供することと、プロジェクトページに戻ることとを具備する。
【００６０】
プロセス515は、モジュール580で検索の開始から始まる。これは、例えば、様々な検索基準を与えることを具備してもよい。モジュール585において、検索結果は検索基準に対応して与えられる。具体的なソフトウェア・コードは、モジュール590で表示されてもよい。また、例えば、ユーザーは、モジュール595にて（ソースが発生したプロジェクトの）プロジェクト情報を再調査することができ、結合するための他のコードを検出することができる。
【００６１】
ソフトウェア・コードは、さまざまな方法で収集され得る。図6（A）は、ソフトウェア・コードを取得するプロセスの実施形態を提供する。プロセス600は、モジュール610にてコード情報を検出することを含む。これは、バージョン・コントロール・システムまたは改訂管理システムにインターフェース接続することを具備してもよい。また、例えば、これは、開発者によって作成されたコードサブミッションを具備し得る。内部システムに対して、具体的なバージョン・コントロール・システムが用いられてもよい。他のシステムに対して、コードのパブリックソースが用いられ得る。コードの特徴は、API、言語、ライセンスなどのような情報を含めて、モジュール620にて抽出される。この情報は、迅速な検索を可能にすべく、モジュール630にてデータベースに挿入される。
【００６２】
ソフトウェア・コードについての情報を収集すると、ソフトウェア・コードが検索され得る。図6（B）は、ソフトウェア・コードのデータベースを検索することについてのプロセスの実施形態を示す。プロセス650は、モジュール660の言語、ファンクション、APIなどのコード要求特性を受信することを具備する。さらに、これは、モジュール670にて、そのような特性を（例えば、データベース要求を介して）データベースの情報と適合させることを具備する。その際、結果は、モジュール680に戻される。
【００６３】
図7および8の以下の説明は、以上および以下で説明される本発明に係る方法を実施するのに適したデバイスハードウェアと他のオペレーティングコンポーネントとをもたらすことを意図しているが、適用可能な状況を制限することを意図していない。同様に、ハードウェアと他のオペレーティングコンポーネントとは、上述の装置の一部として適していてもよい。本発明は、パーソナル・コンピュータ、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラム化可能な家電、ネットワークPC、小型コンピュータ、大型コンピュータ、およびそのようなものを含む他のシステム構成によって実施され得る。また、本発明は、通信ネットワークを介してリンクされる遠隔処理装置によってタスクが実行される分散コンピューティング環境においても実施され得る。
【００６４】
図7は、セルラー・ネットワークおよび関連するセルラー・デバイスと共に、インターネットなどのネットワーク705を介して結合されるいくつかのコンピュータシステムを示す。ここで用いられるような「インターネット」の用語は、tcp/ipプロトコルなど、或いはワールドワイドウェブ（web）を形成するハイパーテキスト・マークアップ言語（HTML）ドキュメントのためのハイパーテキスト転送プロトコル（HTTP）などの他のプロトコルなどの所定のプロトコルを使用する複数のネットワークのうちのあるネットワークを参照する。インターネットおよびプロトコルへの物理的接続とインターネットの通信手段とは、当業者によく知られている。
【００６５】
インターネット705へのアクセスは、一般に、ISP710とISP 715などのインターネットサービスプロバイダー（ISP）とによって形成される。クライアントコンピュータシステム730、750、および760などのクライアントシステム上のユーザーは、ISP710やISP 715などのインターネットサービスプロバイダーを介してインターネットへのアクセスを得る。インターネットへのアクセスは、クライアントコンピュータシステムのユーザーが、情報を交換し、電子メールを送信および受信し、そしてHTMLフォーマットにて作成されたドキュメントなどのドキュメントを見ることを可能にする。これらのドキュメントは、しばしば、インターネットの「上」であると考えられるウェブサーバー720などのウェブサーバーによって与えられる。コンピュータシステムが、セットアップされ、またISPであるシステムなしでインターネットに接続されることができるけれども、これらのウェブサーバーは、しばしば、ISP710などのISPによって与えられる。
【００６６】
ウェブサーバー720は、一般に、サーバー・コンピュータシステムとして作動し、ワールドワイドウェブのプロトコルにて作動するように設定され、インターネットに結合される少なくとも1つのコンピュータシステムである。任意に、ウェブサーバー720は、クライアントシステムのインターネットへのアクセスを形成するISPの一部とすることができる。ウェブサーバー720は、それ自身がウェブコンテンツ795に接続されているサーバー・コンピュータシステム725に結合されて示されている。そして、それはメディアデータベースのフォームと考えられ得る。2つのコンピュータシステム720と725とが図7に示されているが、ウェブサーバーシステム720とサーバー・コンピュータシステム725とは、ウェブサーバー機能と、以下に説明されるサーバー・コンピュータシステム725によって形成されるサーバー機能とをもたらす異なるソフトウェア・コンポーネントを有する1つのコンピュータシステムであってもよい。
【００６７】
セルラー・ネットワーク・インターフェース743は、一方でセルラー・ネットワークと対応するセルラー・デバイス744、746、および748との間のインターフェースを形成し、他方でネットワーク705とのインターフェースを形成する。従って、携帯電話、双方向のポケベル、携帯情報端末（個人用デジタル補助装置）、または他の同様なデバイスを含むパーソナルデバイスであってもよいセルラー・デバイス744、746、および748は、ネットワーク705と接続し、例えばEメール、コンテンツ、またはHTTPでフォーマットされたデータなどの情報を交換することができる。セルラー・ネットワーク・インターフェース743は、モデム・インターフェース745を通してネットワーク705と通信するコンピュータ740に結合されている。コンピュータ740は、パーソナル・コンピュータ、サーバー・コンピュータ、または同類であってもよく、ゲートウェイとして役立つ。従って、コンピュータ740は、例えばクライアントコンピュータ750および760に、またはゲートウェイ・コンピュータ775に類似していてもよい。その際、ソフトウェアまたはコンテンツは、インターフェース743、コンピュータ740、およびモデム745によって形成される接続を介してアップロードされるか、ダウンロードされてもよい。
【００６８】
クライアントコンピュータシステム730、750、および760は、それぞれ、適切なウェブブラウズソフトウェアによって、ウェブサーバー720によって与えられるHTMLページを表示することができる。ISP710は、クライアントコンピュータシステム730の一部と考えられることができるモデム・インターフェース735を介してクライアントコンピュータシステム730にインターネット接続を形成する。クライアントコンピュータシステムは、パーソナル・コンピュータ・システム、ネットワーク・コンピュータ、ウェブtvシステム、または他のそのようなコンピュータシステムであってもよい。
【００６９】
同様に、ISP715は、図7に示すように、より直接的に接続されたコンピュータシステムに対するものとは接続が同じでないけれども、クライアントシステム750および760のためにインターネット接続を形成する。クライアントコンピュータシステム750および760は、ゲートウェイ・コンピュータ775を介して結合されたLANの一部である。図7は、「モデム」と同じくらい遺伝的にインターフェース735および745を示す一方で、これらのインターフェースのそれぞれは、アナログモデム、isdnモデム、ケーブル・モデム、衛星送信インターフェース（例えば「直接的なPC」）、または１つのコンピュータシステムを他のコンピュータシステムに結合するための他のインターフェースであってもよい。
【００７０】
クライアントコンピュータシステム750および760は、ネットワーク・インターフェース755および765を介してLAN770に結合される。それは、イーサーネットネットワークまたは他のネットワーク・インターフェースであってもよい。また、LAN770は、ローカルエリアネットワークへのサービスに関連したファイアウォールと他のインターネットとを形成することができるゲートウェイ・コンピュータシステム775につながれる。このゲートウェイ・コンピュータシステム775は、クライアントコンピュータシステム750および760にインターネット接続を形成するためにISP715につながれる。ゲートウェイ・コンピュータシステム775は、従来のサーバー・コンピュータシステムであってもよい。また、ウェブサーバーシステム720も、従来のサーバー・コンピュータシステムであってもよい。
【００７１】
代わりに、サーバー・コンピュータシステム780は、ゲートウェイ・システム775を介してインターネットに接続する必要なくクライアント750、760にファイル790と他のサービスとを供給するように、ネットワーク・インターフェース785を介してLAN770に直接つながれてもよい。
【００７２】
図8は、携帯電話（744、746、または748）として利用可能なパーソナルデバイスまたは同様なパーソナルデバイスについての1つの例を示す。そのようなデバイスは、電話通信、双方向のポケベル通信、個人的な組織、または同様のファンクションなどのインプリメンテーションに依存する多くのファンクションを実行するのに利用され得る。コンピュータシステム800は、通信インターフェース820を介して外部システムにインターフェースする。携帯電話においては、このインターフェースは、一般にセルラー・ネットワークとの通信のための無線インターフェースであり、また、すぐに入手可能なパーソナル・コンピュータによる使用のための電送されたインターフェースのいくつかの形式を含み得る。双方向のポケベルにおいては、通信インターフェース820は、一般にデータ通信ネットワークとの通信のための無線インターフェースであるけれども、同様に電送またはクレードルされたインターフェースを含み得る。携帯情報端末（個人用デジタル補助装置）においては、通信インターフェース820は、一般にクレードルまたは電送されたインターフェースを含み、また、例えば、ブルートゥース（Bluetooth）または802.11インターフェースまたはセルラー無線インターフェースなどの無線インターフェースのいくつかの形式を含み得る。
【００７３】
コンピュータシステム800は、プロセッサ810を具備する。そしてそれは、インテル・ペンティアム・マイクロプロセッサ（Intel pentium microprocessor）（登録商標）などの従来のマイクロプロセッサ、または、モトローラ・パワーPC・マイクロプロセッサ（Motorola power PC microprocessor）、テキサス・インスツルメンツ・デジタルシグナルプロセッサ（a Texas Instruments digital signal processor）または2タイプまたはプロセッサのいくつかの組み合わせであってもよい。メモリー840は、バス870によってプロセッサ810につながれる。メモリー840は、ダイナミック・ランダム・アクセス（dram）でもよく、また、スタティック・ラム（sram）、またはFLASH EEPROMも含み得る。バス870は、プロセッサ810を、メモリー840につなぐと共に、不揮発性記憶装置850、ディスプレイコントローラ830、および入出力（I／O）コントローラ860にもつなぐ。ディスプレイコントローラ830とI／Oコントローラ860とが一緒に統合され得ることに注目すると、ディスプレイは、また、インプットを形成し得る。
【００７４】
ディスプレイコントローラ830は、一般に液晶ディスプレイ（LCD）または同様なフラットパネル、小さなフォームファクターディスプレイであるディスプレイデバイス835上のディスプレイを従来の方法でコントロールする。入出力装置855は、キーボードまたはスタイラススクリーンおよびタッチスクリーンを具備することができ、時々、マウスまたは他のポインティングデバイスを具備しているディスクドライブ、プリンタ、スキャナ、および他の入出力デバイスを具備するように拡張され得る。ディスプレイコントローラ830とI／Oコントローラ860とは、従来公知の技術にてインプリメントされ得る。デジタル画像入力デバイス865は、デジタルカメラからの画像がデバイス800に入力され得るようにi/oコントローラ860に結合されるデジタルカメラであってもよい。
【００７５】
不揮発性記憶装置850は、しばしばフラッシュメモリまたは読み出し専用メモリ、若しくは2つのうちのいくつかの組み合わせである。また、磁気ハードディスク、光ディスク、または大容量のデータのための別形式の記憶装置は、そのようなデバイスについてのフォームファクターが一般にデバイス800の恒久的なコンポーネントとしてインストールを妨げるけれども、いくつかの実施形態において用いられ得る。むしろ、別のコンピュータの大容量記憶装置は、一般にデバイス800のより制限された記憶装置と共に用いられる。このデータのうちのいくつかは、デバイス800のソフトウェアを実行している間にメモリー840にダイレクトメモリーアクセスプロセスによってよく書き込まれる。当業者は、「機械可読メディア」または「コンピュータ可読メディア」の用語が、プロセッサ810によってアクセス可能であると共にデータ信号をエンコードする搬送波を包含するあらゆるタイプの記憶装置をも含むということを直ちに認めるであろう。
【００７６】
デバイス800は、異なるアーキテクチャを有する多くの可能なデバイスの1つの例である。例えば、インテルマイクロプロセッサに基づくデバイスは、しばしば多重バスを有し、そのうちの一つは、周辺装置と、プロセッサ810およびメモリー840を直接接続するもの（しばしばメモリーバスと称される）とについての入出力（I／O）バスとすることができる。バスは、異なるバスプロトコルのためのあらゆる必要な翻訳でも行うブリッジコンポーネントを介して一緒に接続される。
【００７７】
さらに、デバイス800は、オペレーティングシステムソフトウェアの一部であるディスク・オペレーティングシステムなどのファイル管理システムを具備するオペレーティングシステムソフトウェアによってコントロールされる。その関連するファイル管理システムソフトウェアを有するオペレーティングシステムソフトウェアの1つの例は、ワシントン州レドモンドのマイクロソフト社のWindows CER（登録商標）として知られるオペレーティングシステム、および、それらの関連するファイル管理システムのファミリーである。その関連するファイル管理システムソフトウェアを有するオペレーティングシステムソフトウェアの別の例は、PalmRオペレーティングシステムとその関連するファイル管理システムとである。ファイル管理システムは、一般に不揮発性記憶装置850に保存され、不揮発性記憶装置850にファイルを保存することを含めて、データを入力および出力すると共にデータをメモリーに保存するためのオペレーティングシステムに必要とされる様々な動作をプロセッサ810に実行させる。他のオペレーティングシステムは、デバイスのメーカーによって形成されてもよく、そして、それらのオペレーティングシステムは、一般に、同様なデバイスについての同様なオペレーティングシステムの一部ではないデバイス固有の特徴を有する。同様に、WinCERまたはPalmRオペレーティングシステムは、具体的なデバイスの性能についての具体的なデバイスに適合させてもよい。
【００７８】
デバイス800は、シングルチップまたはいくつかの実施形態でのチップのセットに統合されてもよく、一般に、パーソナルデバイスとしての利用のための小さなフォームファクターに納められる。従って、プロセッサ、バス、オンボードメモリ、およびディスプレイi/oコントローラが、すべてシングルチップの上に統合されることは珍しくない。代わりに、ファンクションは、バスが、実際のデバイスまたは関連する概略図のどちらかの検査からは論理的に明白であるけれども物理的に明白でないようにして、ポイントツーポイント相互接続によっていくつかのチップに分割されてもよい。
【００７９】
詳細な説明のいくつかの部分は、コンピュータメモリーのデータビットに関するオペレーションのアルゴリズムおよび象徴の用語にて表示される。これらのアルゴリズムの説明および表現は、それらの作業の内容を他の当業者に最も効果的に伝達するためにデータ処理技術の当業者によって用いられる手段である。ここでは、一般に、アルゴリズムは、要求された結果につながる操作のセルフ−コンシスタント・シーケンスであると思われる。操作は、物理量のうちそれらの要求物質マニピュレーションである。通常、必ずではないけれども、これらの量は、保存され、転送され、コンバインされ、比較され、さもなければマニピュレートされることが可能な電気または磁気信号の形式をとる。それは、これらのシグナルを、ビット、値、要素、シンボル、文字、用語、数、または同類のものと称するには、主に共通の用法であるとの理由で時には便利であると分かる。
【００８０】
しかしながら、これらおよび同様の用語のすべてが、適切な物理量と関連することであり、これらの量に適用された単に便利なラベルであるということは、心にとどめておかれるべきである。以下の議論から明白であるように、特に違った形で述べられない限り、説明全体において、「処理」または「コンピューティング」または「計算」または「決定」または「表示」または同類のものなどの用語を利用している考察が、コンピュータシステムのレジスターおよびメモリーにおいて物理的な（電気的な）量として表示されたデータを、同様にコンピュータシステムのメモリーまたはレジスターまたは他のそのような情報の記憶、送信または表示デバイスにおいて物理的な量として表示された他のデータに、処理および変換するコンピュータシステムまたは同様の電子コンピューティングデバイスの動作とプロセスとを参照することは高く評価される。
【００８１】
また、本発明は、いくつかの実施形態において、ここでの操作を実行するための装置と関連している。この装置は、必要とされる目的のために特別に構成されてもよく、若しくは、コンピュータに保存されているコンピュータプログラムによって選択的に作動または再設定された汎用コンピュータを備えてもよい。そのようなコンピュータプログラムは、コンピュータ読み取り可能な記憶メディアに保存されてもよいが、それに限定されず、フロッピーディスク（登録商標）、光ディスク、CD-rom、および磁気光ディスク、読み出し専用メモリ（ROM）、ランダムアクセスメモリー（RAM）、EPROM、EEPROM、磁気または光カード、または電気的なインストラクションを保存するのに適すると共にコンピュータシステムバスにそれぞれつながれたあらゆるタイプのメディアを含むあらゆるタイプのディスクなどでもよい。
【００８２】
ここに示されたアルゴリズムと表示とは、どのような特定のコンピュータにもまたは他の装置にも本質的に関連していない。様々な汎用システムは、ここでの教示に従ってプログラムにて使用され、或いは、必要とされる方法のステップを実行するためのより専門的な装置を構成するのに便利であると判明し得る。これらのシステムの種類についての必要とされる構成は、以下の説明から明らかになるだろう。さらに、本発明は、いかなる特定のプログラミング言語に関しても説明されず、従って、様々な実施形態は、さまざまなプログラミング言語を用いて実施され得る。
【００８３】
サーチ・エンジンとアプリケーションインターフェースとは、いくつかの形態のメディアにおいて統合され得る。図9は、例えば、アプリケーションと共に用いられ得るメディアの実施形態を示す。メディア900は、コード・サーチ・エンジン、コード獲得モジュール、データベースインターフェース、ユーザーインターフェース、およびアプリケーションインターフェースを具備する。コード・サーチ・エンジン910は、ソフトウェア・コードを検索することを容易にするために、ユーザーインターフェースおよびデータベースインターフェースと相互作用してもよい。獲得モジュール920は、改訂管理システムなどのコードソースとインターフェースし、コードサブミッションを受信することができる。データベースインターフェース930は、データベース960からの情報についてのデータベースエントリーおよびリクエストを受信することができる。アプリケーションインターフェース940は、プラグイン、ツールバー、または他のインターフェースを形成することによるなど、サーチ・エンジン910に検索要求を受信するためのアプリケーションにて作動してもよい。ユーザーインターフェース950は、同様に、ウェブ（IDEから分離する）を介して検索要求またはコードサブミッションを受信することができる。
【００８４】
機械可読メディアについての別の実施形態は、様々な形態の方法とシステムとをインプリメントするために用いられてもよい。メディア1000において具体的に示されるようなソースコード検索システムは、それぞれがいくつかのコンポーネントを潜在的に具備する3つの主要なレイヤーとしてインプリメントされ得る。これらのコンポーネントは、ソースコード・データベース・インデックス（index）、ソースコード・クローラー（kodebot）、ウェブ・アプリケーション・フロントエンド（web interface）、およびデスクトップ・クライアント・プラグイン（plugin）を具備してもよい。
【００８５】
インデックスは、高性能の検索可能なソースコードキャッシュ（この実施形態においてキャッシュ1095としてインプリメントされる）だけでなく、2つの主要なスキーマ−記憶装置とプロジェクトとのレジストリー−内部ソースコード・データベースの本質的なマップを具備してもよい。プロジェクトレジストリー、システム統計データ、および他のメタデータは、例えばSQL Server（リレーショナルデータベース1090）に保持されていてもよい。データベース1085は、データベース1090と検索部1095とを具備する。代わりのデータベースオプションもまた入手可能である。
【００８６】
kodebot 1060は、例えば、外部バージョンコントロールシステム（または、例えばソフトウェアコンフィグレーションマネジメントシステム（SCM））にインデックスを構成にてシンクロするサービスプロセスとしてインプリメントされ得る。Koders API1065は、例えば、他のソフトウェアサービスおよびデータレポジトリとのインタラクションを可能にし得る。従って、SCMアダプター1075は、SCMとのインターフェースを可能にすることができ、アナライザー1080は、ソフトウェア・コードから署名情報を抽出するようにカスタマイズされることがあり、セキュリティAPI1070は、システム1000のためにセキュリティ対策をプログラムを作成するために使用されることがある。ウェブサーバー1045は、例えば、ユーザーがインデックス1095を検索し、関連するリポートを見て、プロジェクトレジストリーをアップデートすることを可能にしてもよい。これは、例えば、ウェブインターフェース1045、ウェブサービス1050、およびリポートエンジン1055の使用を介してある程度行われてもよい。
【００８７】
管理クライアント1030（時にkodebotクライアントと称される）は、例えば、システム構成、セキュリティ・ポリシー、およびプロジェクトレジストリーのメンテナンスのための管理インターフェースとして利用してもよい。プラグイン1010は、例えば、開発者が開発環境についてのコンテキストにてコードサーバーとデータベースとを検索することを可能にするシステムの任意のコンポーネントであってもよい。一般に、プラグインは、例えば、Visual Studio.NET、Eclipse、およびFirefoxなどの公知のアプリケーションにて使用され得る。開発者は、いつでもこれらのコンポーネントを潜在的にダウンロードし、インストールすることができる。ウェブブラウザ1020は、例えば、Internet ExplorerまたはFirefoxなどの従来のウェブブラウザであってもよい。
【００８８】
様々な実施形態において、方法と装置とが形成されることができ、いくつかの実施形態の様々な特徴についてのさらなる議論が説明され得る。実施形態は、彼らの現在のプロジェクトに組み込まれ得る外部データベースから既存の再使用可能なソースコードをソフトウェア開発者に通知する方法を具備してもよい。同様に、実施形態は、テキストエディタまたは統合された開発環境（IDE）とソフトウェア・コンポーネントを統合する方法を具備してもよい。
【００８９】
さらに、実施形態では、開発者がテキストエディタ（IDE）の中からソースコード・ファイルの構造の要素を作成または変更するたびに検出する方法を具備してもよい。この方法は、入手可能なAPIと、開発者キーボードシーケンスおよびIDEの固有イベントを記憶するための方法とを使用しているIDEと統合すること具備してもよい。さらに、該方法は、開発者がファイルの解析によってまたはIDEにて供給されるAPI方法を介することによってソースコードに書き込んでいるプログラミング言語を検出することを具備してもよい。また、該方法は、特定のプログラミング言語の文法にて記入されるものと同じような要素を定義するために用いられる構文（シンタックス）についてのキーボードシーケンスを解析することによって、クラス、インターフェース、ファンクション、方法、プロパティ、またはフィールドの作成または変更を検出することを具備してもよい。該方法は、入手可能ならば、要素名と関連する署名情報とを抽出することを具備してもよい。
【００９０】
さらに、実施形態は、抽出されたプログラミング言語および要素名から検索クエリーを構成する方法を具備してもよい。該方法は、検索パラメータとして定義している要素についての署名情報を備えてもよい。さらに、該方法は、開発者が受信したいと思う要求結果の広さを明確にすることを具備してもよい。そのような明確さは、例えば、‘正確な適合’、‘よりよい適合’、または‘より多くの適合’を含み得る。
【００９１】
1つ以上の外部ソースコード・データベースに検索クエリーを発行する際には、検索メカニズムは、検索が出されて応答が戻る間、ユーザーを中断するまたは阻止することを回避するためにインプリメントされ得る。同様に、検索メカニズムは、結果とそれらの結果の性質についてのテキスト表示との適合数を含む応答を供給することができる。同様に、該方法（検索）は、ソースコード・データベースがプロトコルを用いているコンピュータに接続されて、遠隔表示となり得る。例えば、該方法はネットワークプロトコルのためにHTTP/SOAPを使ってもよい。
【００９２】
さらに、実施形態は、適合結果数と性質とを視覚的にまたは他の方法にて開発者に通知する方法をインプリメントしてもよい。これは可聴の通知を含み得る。そのような通知書は、タイプすることをやめる、さもなければ彼らの作業を乱すことを開発者に要求する必要がない。さらに、該方法は、ユーザーが決められたまたは予定された秒数の後にリンクを起動させない場合、視覚的な通知を非表示にすることを伴ってもよい。開発者が、結果を見るためのメッセージをクリックすることを可能にする、または、開発者が結果を見るために特定のキーボードコンビネーションをタイプすることを可能にすることなどによって、開発者は容易に検索結果にアクセスすることができる。
【００９３】
実施形態は、それらが結果から開発者IDEに容易にコピー・アンド・ペーストされ得るような方法で、結果を表示する方法をさらに具備してもよい。例えば、この方法は、IDEで新しいウェブブラウザウィンドウを開くことを具備してもよい。また、該方法は、データベースロケーションと検索基準とを含むURLを構成することを具備してもよい。さらに、該方法は、新しく開いたウェブブラウザウィンドウにURLを送ることを具備してもよい。また、該方法は、ウェブブラウザウィンドウにて結果を表示することを具備してもよい。該方法は、必要に応じて、開発者がナビゲートすることを可能にしてもよい。同様に、該方法は、開発者がウェブブラウザウィンドウに表示されているページからソースコードをコピーすることを可能にすることができる。
【００９４】
方法の実施形態は、検索精度を高めるためにユーザーの好みをさらに含み得る。これは、ユーザーが検索されないであろう所定の用語についてのリストを作成することを可能にすることを伴い得る。同様に、方法は、実施された各検索を記憶しておき、IDEがアクティブな間に検索を繰り返して再び出さないようにインプリメントされてもよい。
【００９５】
同様に、実施形態は、それが迅速に検索されるように、ソースコードを索引付けする方法を具備してもよい。該方法は、ソースコードプロジェクトの位置を記入する方法（またはプロトコル）を具備してもよい。また、該方法は、ソースコードを取り出して解析する方法を具備してもよい。また、該方法は、検索可能なインデックスにソースコードをコンパイルする方法を具備してもよい。同様に、該方法は、HTTP/SOAPなどのプロトコルを利用するネットワーク上で遠隔のクライアントに検索インターフェースを示す方法を具備してもよい。
【００９６】
実施形態は、ソースコードを取り出す様々なプロセスとともに、統計データを記憶する方法を具備してもよい。これは、例えば、各検索を記録することと、開発者がソースコード・ファイルをダウンロードすることを選択した際に記録することと、ユーザーがWebページからソースコードをコピーする際に記録する方法とを伴ってもよい。ソースコードのコピーの記録方法は、マウスイベントを検出するためにWebページの特別なコードを組み込むことと、ユーザーがマウスボタンを押してクリックおよびホールドすることによってコピーし始める際に検出することと、ユーザーがマウスボタンをリリースした際に検出することと、コピー・アンド・ペーストのイベントが発生していることを表示するメッセージをサーバーに送ることとを具備してもよい。また、統計データを記録することは、検索と開発者によってダウンロードまたはコピーされた結果との相互関係を記録することを伴ってもよい。
【００９７】
統計データを記録した状態で、実施形態は、いずれ検索結果を改善するために統計データを適用する方法をインプリメントしてもよい。この方法は、検索結果ファイルにスコアを割り当てることを具備してもよい。さらに、該方法は、それらがどの程度頻繁に開発者によってダウンロードまたはコピーされるかに基づいたファイルのデフォルトスコアを増加させることを具備することができる。また、該方法は、同じ検索を出している開発者によって、それが何回もダウンロードまたはコピーされると明らかにされた場合に、特定のファイルのスコアを増加させることをさらに伴ってもよい。同様に、該方法は、適合結果ファイルがスコア順、つまり最初の最高スコアから最後の最低スコアの順に示されるように、検索結果をソートすることを具備してもよい。
【００９８】
スタンドアロンまたはウェブベースのフォームでの実施形態についてのさらなる説明は有益である。実施形態が、スタンドアロンアプリケーション、ウェブベースアプリケーション、若しくは開発環境またはアプリケーションの一部としてインプリメントされるかどうかにかかわらず、様々な実施形態からの機能性が利用し得るということに留意する。図11は、コード・サーチ・エンジンを操作するプロセスの実施形態を示す。プロセス1100は、ソースコードのスナップショットをとることと、ソースコードに索引を付けることと、検索要求を受信することと、検索結果を表示することと、コードの再利用をトラッキングすることと、コードの用法をレポートすることとを具備する。
【００９９】
プロセス1100は、モジュール1110でソースコードのスナップショットにて始まる。これは、改訂管理システム、周知のソフトウェア・コードレポジトリ、または2つのうちのいくつかの組み合わせから、コードを取り出すことを具備してもよい。ソースコードのスナップショットは、ソースコード部分の高速な検索とロケーションを形成して、モジュール1120にて索引を付けられる。
【０１００】
モジュール1130にて、ソースコードについての要求またはクエリーが受信される。モジュール1140にて、ソースコードのインデックスが検索され、結果が表示される。結果の表示と共に、コードの再利用は、ソースコード部分が、結果にて索引を付けられる、またはユーザーによって用いられる多くの時間を蓄積することなどによって、モジュール1150にてトラッキングされる。モジュール1160にて、利用と再利用とがユーザーまたは管理者にレポートされる。
【０１０１】
プロセスが様々なモジュールのループを備えてもよいということに留意する。例えば、繰り返されるクエリーと結果とは、モジュール1130、1140、および1150のループを具備してもよい。同様に、用法についてのレポートの後またはそのようなレポートの前でさえ、プロセスは、ソースコードのアップデートされたスナップショットのためにモジュール1110にループバックしてもよい。
【０１０２】
ソースコード検索システムの様々な実施形態は、図11の方法または同様の方法をインプリメントすることができる。図12は、コード・サーチ・エンジン・システムの実施形態を示す。システム1200は、データベース層とウェブサービスAPIとクライアントインターフェースと管理者インターフェースとウェブサイトエンジンとを備える。
【０１０３】
データベース層1210は、SQLインデックス1202、インデクサー1204、プロジェクトリスト1206（レポジトリでのソフトウェアプロジェクトのリスト）、クローラー1208（遠隔でデータを延策することができるソフトウェア・ロボット）、レポジトリ1212、およびレポジトリインデクサー1214を備える。インデックス1202とレポジトリ1212とは、インデックス1202が速いアクセスシステムを形成すると共にレポジトリ1212が包括的なデータを供給することによって、システムについてのデータのメインソースを形成する。
【０１０４】
ウェブサイトエンジン1230は、ソースコードを検索および表示するための全体的なシステムを形成する。サーチ・エンジン1228は検索機能をもたらす。ファイルビューア1232は、ソースコードを表示するためのユーザーインターフェースを形成する。プロジェクトビューア1234は、ソースコードが検出され得るプロジェクトを見るためのユーザーインターフェースを形成する。言語情報1236、ライセンス情報1238、およびレポジトリ情報1242は、言語（Java（登録商標）、Cなど）、ライセンスデータ、および保存コードをそれぞれ翻訳する。
【０１０５】
Web API1220は、ウェブサイトエンジン1230にアクセスのためのウェブベースインターフェースを形成する。検索API1216は、検索インターフェースを形成する。ファイル情報API1218およびプロジェクト情報API1222は、特別なファイルと関連するプロジェクトとについての情報へのインターフェースを形成する。管理API1224は、コマンドアクセスとメンテナンスとに対するインターフェースを形成する。レポートAPI1226は、実行された検索および使用／再利用されたコードなどのレポート情報に対するインターフェースを形成する。
【０１０６】
クライアントインターフェース1240は、プラグインまたはスタンドアロンのアプリケーションとして用いられ得るクライアントを形成する。ユーザーインターフェース1244は、ウェブベースインターフェースである。Windows（登録商標）クライアント1246は、Windows（登録商標）オペレーティングシステムでの使用を可能にする。ビジュアル・スタジオ・プラグイン1248は、ビジュアル・スタジオ開発環境または同様の開発プラットフォームへのプラグインを形成する。エクリプス・プラグイン1252は、エクリプス環境のための同様のインターフェースを形成する。さらに、同様のプラグインが、他のシステムによって用いられ得る。
【０１０７】
管理アクセスのために、管理インターフェース1250が形成される。このインターフェースは、管理者特権にて他人によるアクセスを可能にする。パフォーマンス結果のレポートは、例えばパフォーマンスのセキュリティレポートおよびセキュリティ解析とともに、インターフェース1250を介して供給されてもよい。ユーザー1260は、クライアント1240を使用することを要求することができるけれども、限られたユーザーが管理インターフェース1250を使用することができる。
【０１０８】
また、代わりの表現は、プロセスを説明することに役立ち得る。図13は、コード・サーチ・エンジン・システムの別の実施形態を示す。システム1300は、コード・サーチ・エンジンについてのシステムを介したデータのパスを形成する。
【０１０９】
ソースコード1310は、ASTツリー1330を形成するための文法ファイル1320に基づいて索引を付けられる。ASTツリー1330は、オペレータとしての内部ノードとオペランドとしての葉節点（リーフノード）とを備える要約構文ツリーである。ASTツリー1330は、コードドメイン1340（ユーザーに表示可能なソースコードの表示）にマップされ得る。コードドメインXMLファイル1350は、コードドメイン1340にフォーマットを形成する。ビューア1360は、例えばHTMLデータ1370またはXMLデータ1380としてデータ転送を可能にして、コードドメイン1340にインターフェースを形成する。
【０１１０】
コードの様々な入手可能な表現によって、要約の様々なレベルでの検索は、実行され得る。従って、フルテキスト検索が起こり得る。同一の構文構成を有するコードが識別され得るように、コードの構文解析がなされてもよい。また、メタデータの抽出が使用され、従って、同様の属性のコードの周辺にあるメタデータを検索することが可能となる。
【０１１１】
様々なユーザーインターフェースは、コード・サーチ・エンジンのインプリメンテーションで使用されてもよい。図14は、コード検索ユーザーインターフェースの実施形態を示す。インターフェース1400は、ウェブサイトとして用いられ得る基本的な検索インターフェースを形成する。検索ボックス1410は、クエリー基準のエントリーを準備する。サーチ・ボタン1420は検索を作動させる。言語セレクター1430は、ソースコード言語の選択を可能にする。ライセンスセレクター1440は、例えばGPLライセンスなどの特別なライセンスの選択を可能にする。
【０１１２】
検索の後に、結果は表示される。図15は、検索結果を示す図14の実施形態を示す。結果1530は、各検索結果のためにタイトル1535、API1540、言語1545、コードライン1550、およびプロジェクトソース1555を備える。
【０１１３】
また、プロジェクトは、検索結果の一部としてまたは開発プロジェクトとしてアクセスされ得る。図16は、コード部分のためのユーザーインターフェースについての実施形態を示す。ユーザーインターフェース1600は、コード部分のタイトル1605、ウェブサイト1610、プロジェクトステータス1620、プロジェクトタイプ1630、開発費1640、プロジェクトディレクトリ構成1650、およびプロジェクトコード部分リスト1660を与える。
【０１１４】
様々な実施形態の特徴と態様とは、他の実施形態に組み込まれてもよく、この文書で説明された実施形態は、示されたまたは説明された特徴または態様のすべてがなくても実施され得る。当業者は、システムおよび方法の具体例および実施形態が説明のために記述されたけれども、様々な変更がされ得ると理解するであろう。例えば、本発明の実施形態は、多くの異なるタイプのデータベース、システム、およびアプリケーションプログラムに適用されてもよい。さらに、現在の文書のうち1つの実施形態においてそれらの特徴が一緒に説明されていないとしても、一方の実施形態についての特徴は、他の実施形態に組み込まれ得る。それに応じて、本発明は添付のクレームにて説明される。
【０１１５】
本発明は、模範的な方法で添付図面によって説明される。本発明の範囲は、請求項によって定義されるので、前記図面は制限するというよりも模範的であると理解されるべきである。
【図面の簡単な説明】
【０１１６】
【図１】IDEにて接続されたコンポーネントの一実施形態にかかるディスプレイを示す図である。
【図２】新しい方法の作成後にユーザーに示された入手可能な検索結果の通知について  の実施形態を示す図である。
【図３】（好ましくは）開発者が視覚的に結果にフィルタをかけることを容易にするための検索結果の要約についての実施形態を示す図である。
【図４Ａ】コピー・アンド・ペーストを介して現在のファイルに容易に統合することができるブラウザでの詳細なコード表示にかかる実施形態を示す図である。
【図４Ｂ】IDEでの詳細なコード表示にかかる実施形態を示す図である。
【図５Ａ】ソフトウェア・コードを自動検索するプロセスにかかる実施形態を示す図である。
【図５Ｂ】ソフトウェア・コードを要求するプロセスにかかる実施形態を示す図である。
【図６】（Ａ）は、ソフトウェア・コードを取得するプロセスにかかる実施形態を示す図であり、（Ｂ）は、ソフトウェア・コードのデータベースを検索するプロセスにかかる実施形態を示す図である。
【図７】様々な他の実施形態に用いられ得るネットワークについての実施形態を示す図である。
【図８】様々な他の実施形態に用いられ得るコンピュータまたは機械についての実施形態を示す図である。
【図９】例えば、アプリケーションとともに用いられ得るメディアにかかる実施形態を示す図である。
【図１０】機械可読メディアにかかる他の実施形態を示す図である。
【図１１】コード・サーチ・エンジンを操作するプロセスにかかる実施形態を示す図である。
【図１２】コード・サーチ・エンジン・システムにかかる実施形態を示す図である。
【図１３】コード・サーチ・エンジン・システムにかかる他の実施形態を示す図である。
【図１４】コード検索ユーザーインターフェースにかかる実施形態を示す図である。
【図１５】図14に示す検索結果にかかる実施形態を示す図である。
【図１６】コード部分についてのユーザーインターフェースにかかる実施形態を示す図である。
【符号の説明】
【０１１７】
５００…ソフトウェア・コード要求のプロセス
【図１】
2008533544.tif 000003
【図２】
2008533544.tif 000004
【図３】
2008533544.tif 000005
【図４Ａ】
2008533544.tif 000006
【図４Ｂ】
2008533544.tif 000007
【図５Ａ】
2008533544.tif 000008
【図５Ｂ】
2008533544.tif 000009
【図６】
2008533544.tif 000010
【図７】
2008533544.tif 000011
【図８】
2008533544.tif 000012
【図９】
2008533544.tif 000013
【図１０】
2008533544.tif 000014
【図１１】
2008533544.tif 000015
【図１２】
2008533544.tif 000016
【図１３】
2008533544.tif 000017
【図１４】
2008533544.tif 000018
【図１５】
2008533544.tif 000019
【図１６】
2008533544.tif 000020
【国際調査報告】
2008533544.tif 000021