"並列処理計算開発環境であって、aカーネルおよびbアルゴリズムのうちの少なくとも1つを含む、並列処理ルーチンを作成するように、それを通して少なくとも1人の開発者が前記開発環境にアクセスしてもよい、インターフェースを提供する、グラフィカルプロセス制御サーバと、前記並列処理ルーチンの認可および使用料を管理するための財務サーバであって、前記並列処理ルーチンの前記開発者は、前記認可および使用料の一部分を受容する、財務サーバとを含む、開発環境。前記財務サーバは、前記並列処理ルーチンについて、a認可費用、b使用費用、およびc公開権限のうちの少なくとも1つを判定するように、少なくとも1人の管理者から入力を受容し、前記公開権限は、前記ルーチンが他の組織と共有されてもよいかどうかを示す、請求項1に記載の環境。第1の開発者は、第1のカーネルを作成するように前記開発環境にアクセスし、第2の開発者は、前記第1のカーネルを使用する第1のアルゴリズムを作成するように前記開発環境にアクセスし、前記財務サーバは、認可料で前記第1のカーネルを前記第2の開発者に認可するため、および前記認可料の少なくとも一部分を前記第1の開発者に支払うために使用される、請求項1に記載の開発環境。前記財務サーバは、前記第1の開発者による前記環境の利用の支払いとして、前記認可料の一部分を保持する、請求項3に記載の環境。第2のカーネルのプロファイルを作成し、前記カーネルの相対的性能を判定するように、前記第1のカーネルのプロファイル結果に対して前記第2のカーネルのプロファイル結果を比較する、開発サーバを含む、請求項3に記載の環境。少なくとも1人の開発者および複数の組織に関する情報を記憶するためのデータベースと、前記開発者および前記組織と相互作用するようにインターフェースを提供するためのグラフィカルプロセス制御サーバと、a前記開発者から、前記開発者の履歴書を受容し、b前記組織のうちの少なくとも1つから、行われる任務の説明を受容するように、前記グラフィカルプロセス制御サーバと協働する、補助リソースサーバとを含み、前記補助リソースサーバは、前記少なくとも1人の開発者の前記履歴書に合致する仕事を提供する組織のリストを双方向に提供し、前記開発者による前記少なくとも1つの組織の選択を受容し、前記開発者の前記履歴書を前記選択された組織に伝送することが可能であり、前記組織のうちの1つは、前記履歴書の中の情報に基づいて行われる前記仕事に関する情報で前記開発者に応答する、並列処理開発環境。処理ノードのクラスタを含む、並列処理システム上で実行する並列処理ルーチンのプロファイルデータを自動的に判定するための並列処理開発環境内で動作するコンピュータ実装方法であって、前記クラスタの単一の処理ノード上の試験データを処理し、第1の実行時間を判定するように、前記並列処理ルーチンを実行するステップと、前記第1の実行時間をNで割ることによって、前記クラスタのN個の処理ノード上の前記試験データを同時に処理するように、前記並列処理ルーチンを実行するための予測実行時間を開発サーバ内で計算するステップと、前記クラスタのN個の処理ノード上の前記試験データを同時に処理し、第2の実行時間を判定するように、前記並列処理ルーチンを実行するステップと、前記予測実行時間を前記第2の実行時間で割ることによって、前記並列処理ルーチンのアムダールスケーリングを前記開発サーバ内で計算するステップとを含み、前記アムダールスケーリングおよび前記第1の実行時間は、前記プロファイルデータの少なくとも一部を形成する、方法。前記並列処理ルーチンによって使用される最大量のRAMを前記開発サーバ内で判定するステップをさらに含み、前記プロファイルデータは、前記使用される最大量のRAMを含む、請求項7に記載の方法。前記並列処理ルーチンのうちのそれぞれに対するa定義されたカテゴリおよびb定義されたキーワードのうちの少なくとも1つ、ならびに前記並列処理ルーチンのうちのそれぞれと関連付けられるキーワードに基づいて、前記並列処理環境内で少なくとも1つの同様の並列処理ルーチンを選択するステップと、参照プロファイルを判定するように、前記選択された同様の並列処理ルーチンのうちのそれぞれに対する実行および計算するステップを行うステップと、選択された並列処理ルーチンに対して前記並列処理ルーチンを評価し、ランク付けするように、前記プロファイルデータを前記参照プロファイルのうちのそれぞれと比較するステップとをさらに含む、請求項7に記載の方法。並列処理ルーチンのソースコードの中の盗用を識別するためのコンピュータ実装方法であって、a第1のソース比較ファイルを作成するように、候補ソースコードファイルから、書式設定、コメント、変数名、およびファイル名を除去するステップと、b前記候補ソースコードファイルの中の選択されたカテゴリおよびキーワードに基づいて、データベース内で同様の既存並列処理ルーチンを識別するステップと、c前記識別された並列処理ルーチンの次のソースコードファイルを選択するステップと、d第2のソース比較ファイルを形成するように、前記選択されたソースコードファイルから、書式設定、コメント、変数名、およびファイル名を除去するステップと、e前記第2のソース比較ファイルの中のコード文に合致する、前記第1のソース比較ファイルの中のある割合のコード文を判定するように、前記第1のソース比較ファイルを前記第2のソース比較ファイルと比較するステップと、f前記判定された割合が所定の値よりも大きい場合に、前記候補ソースコードファイルを拒絶するステップと、gファイル比較が終了されるまで、または前記ソースコードファイルが拒絶されるまで、前記候補ソースコードファイルを前記選択されたソースコードファイルと比較するように、ステップcからfを繰り返すステップと、h前記判定された割合が前記所定の値よりも大きい場合に、前記候補ソースコードファイルが前記選択されたソースコードを盗用したことを判定するステップとを含む、方法。各前記ソースコードファイルに対する前記ソースコードの複数のインスタンスは、前記ソース比較ファイルのうちのそれぞれを生成するように作成され、前記インスタンスのうちのそれぞれは、それぞれのコードブロック内の独立文の1つの順列を表し、各前記順列は、配置が特定のコードブロック内のいずれの文の従属関係にも影響しないならば、任意の関連文とともに、独立しているものとして判定されるソースコード文を、前記ブロック内に配置することによって作成される、請求項10に記載の方法。各前記順列は、前記ソースコードファイルのうちのそれぞれの中の前記ソフトウェアコード文を、それらを分離するルーピングまたは分岐文を伴わずに、2つ以上のコード文を含むブロックにグループ化することによって、作成され、独立しているものとして判定される前記ソースコード文は、コードブロック内の任意の先行代入文の左側でも見出される、その同じブロック内の代入文の右側で見出される変数を含まない、請求項11に記載の方法。並列処理システム用のソースコードの中の盗用を識別するためのコンピュータ実装方法であって、複数の編集済みソースコードファイルを作成するように、複数のソースコードファイルからの非命令文字、コメント、変数名、およびファイルを編集するステップと、複数の残りの編集済みソースコードファイルの中のコード文に合致する、前記編集済みソースコードファイルのうちの第1のソースコードファイルの中のある割合のコード文を判定するように、前記編集済みソースコードファイルのうちの前記第1のソースコードファイルを、前記複数の残りの編集済みソースコードファイルのうちのそれぞれと比較するステップと、前記判定された割合が所定の値よりも大きい場合、前記編集済みソースコードファイルのうちの前記第1のソースコードファイルが、前記残りの編集済みソースコードファイルを盗用したことを判定するステップとを含む、方法。前記ソースコードファイルのそれぞれに対する前記ソースコードの複数のインスタンスは、前記ソース比較ファイルのうちのそれぞれを生成するように作成され、前記インスタンスのうちのそれぞれは、それぞれのコードブロック内の独立文の1つの順列を表す、請求項13に記載の方法。各前記順列は、前記ソースコードファイルのうちのそれぞれの中の前記ソフトウェアコード文を、それらを分離するルーピングまたは分岐文を伴わずに、2つ以上のコード文を含むブロックにグループ化することによって、作成される、請求項13に記載の方法。並列処理機能のソースコードの中の盗用を識別するためのコンピュータ実装方法であって、第1の構成要素編集比較ファイルを作成するように、ソースコードファイルの中の候補関数からの非命令文字、コメント、変数名、およびファイル名を編集するステップと、同様の関数の間の合致、および前記候補関数を含有するソースコードファイルの中の選択されたカテゴリおよびキーワードに基づいて、データベース内の前記同様の関数を識別するステップと、前記識別された同様の関数の中の次の関数を選択するステップと、第2の構成要素編集比較ファイルを形成するように、前記選択された次の関数からの非命令文字、コメント、変数名、およびファイル名を編集するステップと、前記第2の構成要素編集比較ファイルの中のコード文に合致する、前記第1の構成要素編集比較ファイルの中のある割合のコード文を判定するように、前記構成要素編集比較ファイルを前記第2の構成要素編集比較ファイルと比較するステップと、前記判定された割合が所定の値よりも大きい場合、前記ソースコードファイルの中の前記候補関数が前記選択された次の関数を盗用したことを判定するステップとを含む、方法。並列処理ルーチンの開発を促進するためのシステムであって、前記並列処理ルーチンを作成するように、それを通して少なくとも1つの開発者サーバが前記システムの開発環境にアクセスしてもよい、インターフェースを含む、グラフィカルプロセス制御サーバと、前記グラフィカルプロセス制御サーバから前記並列処理ルーチンを受容し、データベース内に前記並列処理ルーチンを記憶するための開発サーバと、前記並列処理ルーチンについて、a認可料およびb使用料のうちの一方または両方を得るための財務サーバであって、前記財務サーバは、前記未払い認可料の少なくとも一部および前記未払い使用料の少なくとも一部を前記システムの所有者に分配することが可能であり、前記財務サーバは、さらに、前記未払い認可料の少なくとも一部および前記未払い使用料の少なくとも一部を前記並列処理ルーチンの開発者に分配することが可能な財務サーバとを含む、システム。並列処理ルーチンの開発者への経済報酬を追跡するための方法であって、前記並列処理ルーチンの開発環境の財務サーバ内で、前記並列処理ルーチンと関連付けられる認可料を得るステップと、前記財務サーバ内で、前記並列処理ルーチンの使用と関連付けられる使用料を得るステップと、前記未収認可料の少なくとも一部および前記未収使用料の少なくとも一部を前記並列処理ルーチンの開発者に分配するステップとを含む、方法。並列処理開発環境を利用する組織は、1人以上の管理者と、0人以上の開発者とを含んでもよい。組織は、並列処理開発環境を利用する従業員がいる実際の会社を表してもよく、または並列処理開発環境を使用して並列処理ルーチンを開発するように協働する個人の集合体を表してもよい。並列処理開発環境は、クライアント/サーバベース、マルチコア、マルチサーバグラフィカルプロセス制御、コンピュータプログラム管理、およびアプリケーション構築共同システムを表す。図1は、1人以上の開発者が、処理ノード113のクラスタ112上で作動する並列処理ルーチンを作成し、管理することを可能にする、1つの例示的な並列処理計算開発環境100を示す。並列処理ルーチンは、a1つ以上のカーネルおよびb1つ以上のアルゴリズムのうちの一方または両方から成る。本明細書で使用されるように、カーネルは、クラスタ112の1つ以上の処理ノード113によって実行された時に、データを処理するように特定の機能を果たす、ソフトウェアモジュールである。環境100は、それを通して1人以上の開発者152が同時に環境100にアクセスしてもよい、インターネット150へのインターフェースを提供する、グラフィカルプロセス制御サーバ104を含む。環境100はまた、カーネル122、アルゴリズム124、組織126、ユーザ128、データベース130、および使用情報132用の1つ以上のデータベースも含む。環境100の開発サーバ108は、グラフィカルプロセス制御サーバ104およびデータベース106と協働して、カーネル122およびアルゴリズム124の作成および維持を促進する。環境100のプログラム管理サーバ110は、1つ以上のアルゴリズム124およびカーネル122を実行するように、環境100のクラスタ112へのアクセスを促進する。図1に図示されるように、開発者152は、これらの開発者によって作成されるカーネル122およびアルゴリズム124が、各組織154のために構成される制御に基づいて組織化され、アクセスされるように、組織154にグループ化されてもよい。各組織154はまた、組織154内の各作成されたカーネルおよびアルゴリズムへのアクセス、およびその費用を制御する、1人以上の管理者158を含んでもよい。例えば、開発者1521によって作成される各カーネルは、管理者1581によって試験され、承認され、次いで、組織1542内の開発者1523、1524による等、他の組織内の開発者による使用のために公開される。管理者158は、組織154内の開発者152によって作成される各カーネル122およびアルゴリズム124に対する認可料および使用費用を定義してもよい。図1に示されるように、クラスタ112の処理ノード113は、並行して1つ以上の並列処理ルーチンを処理するためのハワードカスケードに形成されてもよい。開発サーバ108は、開発者152が、グラフィカルプロセス制御サーバ104との相互作用を通して、環境100内で試験するためにカーネルおよび/またはアルゴリズムを提出することを可能にする。開発サーバ108は、データベース106内で、開発者152および組織154と関連して受容したカーネルおよびアルゴリズムを記憶する。一実施形態では、データベース106は、関係型データベースおよびファイル記憶を表す。付加的な制御情報は、各カーネルおよびアルゴリズムのアクセスおよび費用を定義する、これらのカーネルおよびアルゴリズムと関連して、データベース106内で例えば、示されていない別個のデータベース表内で記憶される。環境100はまた、組織カーネルおよびアルゴリズムのうちのそれぞれに対して受容される認可料および使用料に基づいて、支払いを組織154、管理者158、および開発者152に提供する、財務サーバ102も含む。例えば、組織1541の開発者1521によって開発されたカーネル122は、組織1542の開発者1523によって開発されたアルゴリズム124に組み込まれてもよい。カーネル122に対する管理者1581によって定義される認可料は、組織1542によって支払われ、認可料の第1の部分は、開発者1521に分配され、認可料の第2の部分は、管理者1581に分配され、認可料の第3の部分は、組織1541に分配される。認可料の第4の部分は、環境100の使用の支払いとして、財務サーバ102によって得られてもよい。つまり、環境100は、各開発者および管理者に対する接続および使用時間を請求しなくてもよいが、代わりに、各カーネルおよびアルゴリズムと関連付けられる認可料および使用料の割合に基づいて、経済的補償を受容する。同様に、開発されたアルゴリズムは、環境100を通して他の組織へ販売されてもよく、販売からの収益は、所有組織、その管理者、およびその開発者に分配されてもよく、環境100は全体的な販売価格の割合を受容する。データベース106内の各カーネル122およびアルゴリズム124は、環境100内の各カーネルおよびアルゴリズムを分類する、定義されたカテゴリおよび一式のキーワードを有する。カテゴリは、相互通信、画像処理、mmoゲーム用ツール等を含んでもよい。付加的なキーワードが、必要なパラメータおよびデータ出力形式等のそれらの特徴を詳細に定義するように、各カーネルおよびアルゴリズムと関連付けられてもよい。データベース106内に記憶されたカーネルおよびアルゴリズムは、カテゴリおよび/または1つ以上のキーワードを入力する開発者によって選択されてもよい。図2は、これらのカーネル2041、2042、および2043から開発者2525によって作成される1つの例示的なアルゴリズム222、および別のアルゴリズム2021を示す。カーネル2041は、開発者2521によって作成され、カーネル2042および2043は、開発者2522によって作成され、アルゴリズム2021は、開発者2523によって作成され、開発者2524によって作成されるカーネル2044を含む。各カーネル例えば、カーネル204は、図1のクラスタ112上で作動し、1人以上の開発者152によって開発される、ソフトウェアルーチンを表す。アルゴリズム例えば、アルゴリズム2021は、クラスタ112上で作動する時に所望の機能を提供するように組み合わせられる、1つ以上のカーネルおよび/または他のアルゴリズムを表す。カーネル204およびアルゴリズム202は、それぞれ、図1のカーネル122およびアルゴリズム124を表してもよい。各カーネル204およびアルゴリズム202は、カーネル/アルゴリズムが使用される度に支払われる、定義された使用費用210と、カーネル/アルゴリズムの定義された認可期間に支払われる、定義された認可費用208とを有する。図2の実施例では、アルゴリズム222は、カーネル2041、2042、2043、およびアルゴリズム2021を組み合わせることによって作成される。アルゴリズム222は同様に、認可された時に他のアルゴリズム内に含まれてもよい。矢印212は、カーネル204とアルゴリズム2021との間のデータフローを表す。図2に示されるように、アルゴリズム222は、定義されたカテゴリ206と、認可費用208と、使用費用210とを有する。随意で、キーワードはまた、他の開発者によるアルゴリズム222の選択を促進するように、アルゴリズム222と関連付けられてもよい。アルゴリズム222が、カーネル204と、アルゴリズム2021とを含むため、認可費用2086は、認可費用2081、2082、2083、および2084の合計に等しい、またはそれよりも大きい。同様に、使用費用2106は、使用費用2101、2102、2103、および2104の合計に等しい、またはそれよりも大きい。同様に再度、使用費用2104は、カーネル2044の使用費用2105に等しく、またはそれよりも大きく、認可費用2084は、カーネル2044の認可費用2085に等しい、またはそれよりも大きい。一実施形態では、環境100は、新しいアルゴリズムの作成時に、使用費用および認可費用が、それぞれ、その中に含まれる構成要素の使用費用および構成要素費用の合計に等しい、またはそれよりも大きいことを確実にする。具体的には、アルゴリズム222が認可または使用された時に、環境100は、その中に含まれる各カーネル204およびアルゴリズム202の開発者152が、アルゴリズム222に支払われる認可料220および/または使用料230の適切な部分を受容することを確実にする。アルゴリズム222を作成する時に、開発者152は、その中で使用される各カーネル204およびアルゴリズム202に対する認可を必要とする。したがって、開発者152は、これらのカーネルおよびアルゴリズムのうちのそれぞれに対する認可が開発者152によってすでに保持されていない限り、各カーネル204および/またはアルゴリズム202の新しい認可を支払う。環境100は、開発者152が新しいアルゴリズム内に任意の選択されたカーネル204および/またはアルゴリズム202を含むことを可能にする前に、開発者152が任意の必要な認可費用208を支払うことを確実にするように動作する。いったん新しいカーネルまたはアルゴリズムが作成されると、作成組織内で使用するために非公開のままであってもよく、または他の組織内の開発者による使用のために公開されてもよい。一実施形態では、各クライアント156内の図1のユーザインターフェース160は、そのクライアントでログインした開発者152に利用可能なカーネル204およびアルゴリズム202のみを表示する。ユーザインターフェース160は、付属書A内で詳細に説明される。環境100は、カーネル204およびアルゴリズム202、222の認可および使用を制御し、それらの実収使用および認可料を追跡し、それにより、開発者が開発されたルーチンおよびアルゴリズムからの収入を共有することを可能にする。さらに、開発されたソフトウェアの共有および再利用が、認可料および使用料の自動制御および支払いを通して、環境100によって促され、報酬を受ける。並列処理アルゴリズム例えば、カーネルおよびアルゴリズムを作成し、公開するように開発者を促すために、環境100は、環境100によって提供される施設の使用の代金を開発者に請求しない。むしろ、環境100は、認可および使用される際に、各カーネルおよびアルゴリズムによって得られる、一定の割合の使用料および認可料を保持する。この料金は、要求された収入の流れが妨げられないままであるように、他の料金に追加される。図3は、クラスタ112を使用してデータ306を処理するプログラム304を選択することによって、ユーザ352がタスク302を行うように環境100のプログラム管理サーバ110にアクセスする、1つの例示的なシナリオ300を示す。プログラム管理サーバ110は、例えば、開発者152によってクラスタ112上で作動するために開発される、複数の例えば、データベース106内に記憶された並列処理ルーチン例えば、カーネルおよびアルゴリズムからのプログラム304の選択を可能にするように、インターネット150を介してユーザ352と相互作用する、グラフィカルインターフェースを提供してもよい。プログラム管理サーバ110は、各プログラムについて、データベース106内に記憶され、ユーザ352が、費用および性能とともにデータ処理要件に基づいて、プログラム304の知識に基づく選択を行ってもよいように、詳細な費用および機能性情報をユーザ352に提供してもよい。ユーザ352は、インターネット150を介してデータ306を環境100にアップロードし、またはデータ306をクラスタ112に提供するための他の手段を使用してもよい。データ306を処理するようにクラスタ112上でプログラム304を実行すると、プログラム管理サーバ110は、プログラム304の使用費用に基づいてユーザ352によって支払い可能である、適切な使用料320、データ306のサイズおよび種類、プログラム304を実行するために選択されるクラスタ112の処理ノード113の数を判定する。プログラム管理サーバ110は、財務サーバ102が、プログラム304の構成要素に基づいて、開発者152に対する支払い322を判定してもよいように、使用料320について財務サーバ102に知らせてもよい。図2および3の実施例を使用して、プログラム304は、アルゴリズム222、したがって、カーネル2041、2042、2043、および2044の開発者152を含み、アルゴリズム2021およびアルゴリズム222の開発者は、それぞれ、各含まれた構成要素の定義された使用費用210に基づいて、使用料320の適切な部分支払い3221-3225として示されるを受容する。財務サーバ102は、クラスタ112上で実行される各プログラム例えば、プログラム304の中の構成要素の使用に基づいて、各開発者152への支払いを得る。財務サーバ102はまた、開発者1521-5がアルゴリズム222に貢献したため、これらの開発者による環境100の使用の支払いとして、ある割合の使用料320を保留する。ユーザ352は、特定のタスクのために、より高い性能の処理を選択し、環境100から、そのより高い性能に対する特別料金を支払ってもよい。より高い性能の処理のために選択されるタスクは、クラスタ112の付加的な処理ノードを利用してもよく、または優先順位の低いタスクノード要求に優先して、ノードがタスクに割り付けられることを確実にする、より高い優先順位を有してもよい。このより高い性能の処理に対する支払いは、環境100の使用の代金を支払うためだけに使用され、開発者には支払われない。環境100内に記憶された並列処理ルーチン例えば、カーネルおよびアルゴリズムおよびデータベース例えば、図1のデータベース130は、組織、その組織内のカテゴリ、および所与の名前によって分離される。動作の一実施例では、開発者152は、最初に、ユーザインターフェース160から組織を選択し、次いで、カテゴリを選択し、次いで、所望の並列処理ルーチンおよび/またはデータベースの名前を選択する。開発者152はまた、特定の組織およびカテゴリについてユーザインターフェース160内で表示される、並列処理ルーチンおよびデータベースの数を限定する、キーワードリストをユーザインターフェース160内で定義してもよい。MassivelyParallelTechnologiesは、ユーザインターフェース160のボタンまたは制御上でMPTと略称されてもよい、1つの例示的な組織名である。組織名がユーザインターフェース160内で略称される場合、開発者が略称上にマウスを合わせると、完全な組織名が表示される。組織内で、例示的なカテゴリは、相互通信、画像処理、およびmmoゲーム用ツールである。これらのカテゴリは、いったん組織が選択されると、ユーザインターフェース160内に現れる。例示的な並列処理ルーチン名は、PAAX交換、FAAX交換、およびハワードカスケードである。動作の一実施例では、開発者1525は、最初に、組織1543の名前MPTを選択し、次いで、カテゴリ相互通信を選択し、次いで、ハワードカスケードと呼ばれるカーネルを選択する。開発者1525は、次いで、試験データセットに基づいて特性を判定するように、新しいアルゴリズムまたはプロファイル内に選択されたカーネルを含んでもよい。図4は、試験データ406を処理する第1のルーチン4041の性能を、試験データ406を処理する第2のルーチン4042の性能と比較するための開発サーバ108の例示的な使用を示す。試験データ406は、環境100内に存在してもよく、または開発者152によってアップロードされてもよい。第1のルーチン4041および第2のルーチン4042は、図1および2のカーネル122、204および/またはアルゴリズム124、202、222のインスタンスを表してもよい。第1のルーチン4041および第2のルーチン4042は、両方とも同じ機能を果たし、同じ入力および出力パラメータを有するという点で同様であるが、異なるカーネルおよび/またはアルゴリズムを含んでもよい。ルーチン404は、同じカテゴリの範囲内に入り、同様のキーワード記述子を有してもよい。開発サーバ108は、それぞれ、第1のルーチンプロファイル4081および第2のルーチンプロファイル4082を判定するように、第1のルーチン4041および第2のルーチン4042のうちのそれぞれのプロファイルを作成する。各ルーチンプロファイル408は、使用されるRAMの量410、通信モデル412、第1および第2の処理速度414、およびアムダールスケーリング416のうちの1つ以上を含む。一実施形態では、1つのルーチンプロファイル408は、ルーチン404に選択された各通信モデル412のために作成される。特定の通信モデルの選択は、各利用可能な通信モデルを使用して、ルーチンのプロファイルを作成することに起因してもよく、またはユーザによって行われてもよい。動作の一実施例では、開発サーバ108は、試験データ406を処理するようにクラスタ112の単一の処理ノード上で作動する、第1のルーチン4041のプロファイルを作成し、試験データを処理する第1のルーチンの実行時間に基づいて、使用されるRAM4101、通信モデル4121、および第1の処理速度4141を導出する。開発サーバ108は、次いで、試験データ406を処理するようにクラスタ112の10個の処理ノード上で作動する、第1のルーチン4041のプロファイルを作成し、第2の処理速度4143を導出する。処理速度および実行時間は、処理ノードの計算能力ではなく、並列処理ルーチンの処理性能を表すために、本明細書で交換可能に使用される。例えば、第1の処理速度4141は、クラスタ112の単一の処理ノード上で第1のルーチン4041によって試験データ406を処理するための実行時間を表す。次いで、開発サーバ108は、以下の図5に関連して説明されるように、第1の処理速度4141、判定された第2の処理速度4143、および第2の処理速度4143を判定するために使用される処理ノードの数Nに基づいて、アムダールスケーリング4161を判定する。次いで、開発サーバ108は、第2のルーチンプロファイル4082を判定するように、第2のルーチン4042についてこのシーケンスを繰り返す。最も適切なカーネルおよびアルゴリズムの使用を促すため、および開発者が新たに作成されたカーネルおよび/またはアルゴリズムを評価することを可能にするために、特定のタスクに対する最良のカーネル/アルゴリズムが、識別され、そのタスクに組み込まれてもよいように、環境100は、開発者またはユーザがカーネルおよびアルゴリズムを相互に対して比較することを可能にする。データセットのサイズ、カーネルおよび/またはアルゴリズムに入力されるパラメータ、カーネルおよび/またはアルゴリズムを処理するために選択される処理ノードの数、ならびにカーネルおよび/またはアルゴリズムのアムダールスケーリングを含むが、それらに限定されない、多くの要因が、特定のタスクに対するカーネルおよび/またはアルゴリズムの適合性を判定する。一実施形態では、特に、各開発者が、処理仕様および要件に合わせられた独自の試験データを利用してルーチンを評価するため、並列処理ルーチンを評価するための条件が、典型的には変化するので、環境100は、データベース106内にルーチンプロファイル408を保存しない。環境100は、開発者がデータ要件に基づいて最適なカーネルおよびアルゴリズムを選択することを可能にするように、試験データおよび入力パラメータに対する新規および既存の並列処理ルーチンの自動評価を促進する。別の実施形態では、入力パラメータおよび試験データが変化していない時に、開発者が1回以上ルーチンのプロファイルを作成する必要がないように、環境は、試験データ406および評価開発者152に関するルーチンプロファイル408を記憶する。図5は、例えば、カーネルおよびアルゴリズム等の並列処理ルーチンのアムダールスケーリングを自動的に判定するための1つの例示的な方法500を示す。アムダールスケーリングは、図1のクラスタ112内の複数の処理ノード113によって実行された時等に、複数の処理ノード上で実行されるルーチンの性能が予測されることを可能にする。方法500は、開発サーバ108および処理ノード113のうちの1つ以上によって実装される。方法500のステップ502では、ルーチンが、第1の実行時間を得るように単一の処理ノード上でプロファイル作成される。ステップ502の一実施例では、開発サーバ108は、第1の処理速度4141を判定するように、クラスタ112の単一の処理ノード内で試験データ406を処理する、第1のルーチン4041のプロファイルを作成する。ステップ504では、N個の処理ノード上のルーチンの予測実行時間が、第1の実行時間/Nとして計算され、Nは、プロファイリングに使用される処理ノードの数である。ステップ504の一実施例では、10個の処理ノード113が、ステップ506でルーチン4041のプロファイルを作成するために使用され、したがって、Nは10に等しく、10で割った第1の処理速度4141として予測実行時間を求める。ステップ506では、ルーチンが、第2の実行時間を判定するようにN個の処理ノード上でプロファイル作成される。ステップ506の一実施例では、開発サーバ108は、第2の処理速度4143を判定するように、クラスタ112の10個の処理ノード113上で試験データ406を処理する、ルーチン4041のプロファイルを作成する。ステップ508では、アムダールスケーリングが、予測実行時間/第2の実行時間として計算される。ステップ508の一実施例では、10個の処理ノード113がステップ506で使用されたため、第1の処理速度4141は、10で割られ、次いで、この結果を第2の処理速度4143で割る。第1の実行時間が10秒であり、第2の実行時間が5秒である場合、アムダールスケーリング因数は0.5である。1というアムダールスケーリング因数が理想的であり、並列処理ルーチンは、より小さいアムダールスケーリング因数を伴うルーチンよりも効率的に1つの尺度に近い、アムダールスケーリング値を有する。図6は、環境100内に記憶された1つ以上の他の並列処理ルーチンに対して第1の並列処理ルーチンを自動的に評価するための1つの例示的な方法600を図示する、フローチャートである。ステップ602では、第1の並列処理ルーチンが、一式の試験データを使用してプロファイル作成される。ステップ602の一実施例では、ルーチン4041は、開発者1521によって作成され、図5の方法500および試験データ406を使用して開発サーバ108によってプロファイル作成される。ステップ604では、同様の並列処理ルーチンが、第1の並列処理ルーチンに対して定義されるカテゴリおよび/またはキーワードに基づいて選択される。ステップ604の一実施例では、開発サーバ108は、データベース106内の他の同様のカーネルおよびアルゴリズムを選択するために、ルーチン4041に対する定義されたカテゴリおよびキーワードを利用する。ステップ606では、各選択された同様の並列処理ルーチンが、試験データを使用してプロファイル作成される。ステップ606の一実施例では、開発サーバ108は、試験データ406を処理する第2のルーチン4044のプロファイルを作成するために方法500を利用し、ルーチンプロファイル4082を生成する。ステップ608では、選択された同様の並列処理ルーチンに対して第1の並列処理ルーチンをランク付けするように、第1の並列処理ルーチンのプロファイルデータが、選択された同様の並列処理ルーチンのうちのそれぞれのプロファイルデータと比較される。並行スケーリングの効率が非常に重要である、ステップ608の一実施例では、開発サーバ108は、第2のルーチンプロファイル4082に対して第1のルーチンプロファイル4081を比較し、各ルーチンプロファイル408内のアムダールスケーリング416に基づいて、第2のルーチン4042に対して第1のルーチン4041をランク付けする。ステップ610では、次いで、選択された既存のルーチンの通信モデルが判定される。随意で、開発者152は、ステップ608のランキングに影響を及ぼすように、ルーチンプロファイル408の要素に優先順位を付けてもよい。例えば、使用される最大量のRAMが、処理されているデータのサイズに基づく、特定の用途について、より少ないRAMを利用するアルゴリズムは、最高速の処理速度を伴うアルゴリズムよりも貴重であってもよい。したがって、開発サーバ108が、方法600のステップ608で、他のプロファイル作成された特性を上回る、使用される最低RAM410の値を伴うカーネルをランク付けするように、開発者152は、ルーチンプロファイル408内の最高優先順位の要素として、使用されるRAM410を定義してもよい。動作の一実施例では、開発者152は、試験データ406を使用して、環境100内の同様の機能性を伴う既存のカーネルに対して新しいカーネルを評価するために、環境100を使用する。開発サーバ108は、新しいカーネルに対して開発者152によって定義されるカテゴリおよび定義されたキーワードのうちの一方または両方に基づいて、データベース106からカーネルを選択する。開発サーバ108は、図6の方法600を使用して、新しいカーネル、および試験データ406を使用するこれらの選択されたカーネルのうちのそれぞれのプロファイルを作成する。次いで、開発サーバ108は、判定されたルーチンプロファイル例えば、ルーチンプロファイル408を開発者152に提示する。開発者152が、選択されたカーネルと同様の機能を果たすために、より効率的な内部アルゴリズムを利用する、改良型カーネルを作成した場合、開発者152は、既存のカーネルに対して新しいカーネルの性能を比較し、それにより、新しいカーネルを評価してもよい。ソフトウェア盗用検出悪徳ソフトウェア開発者は、別の開発者によって開発されたコンピュータコードおよびアイディアをコピーしまたはその近い模造品を使用し、この複製コードを独創的な作品として提示する場合がある。ソフトウェアは、容易に複製され、したがって、その価値を容易に傷つけることができる。ソースコードは、その機能性を変えることなく、全体的な発見および置換方法を使用して、および/またはソースコード内の関数の順序を再編成することによって、容易に修正される。これらの修正を組み合わせることによって、初心者がソフトウェア盗用を認識することは困難である。以下の実施例では、Cソフトウェア言語が使用されるが、その範囲から逸脱することなく、他のソフトウェア言語が、Cソフトウェア言語の代わりに使用されてもよい。さらに、ソフトウェアソースコードのコンパイラによって無視される書式設定の量は、ソフトウェア言語の間で変化し、コンパイルされたコードに影響を及ぼさない書式設定のみが、以下の方法論で除去される。図7Aおよび7Bは、第1の並列処理ルーチンの一部として、第1の開発者によって図1の環境100に提出された例示的な第1のソフトウェアソースコード700を示す。図8Aおよび8Bは、第2の並列処理ルーチンの一部として、第2の開発者によって図1の環境100に提出された例示的な第2のソフトウェアソースコード800を示す。この実施例では、第2の開発者は、第1のソフトウェアソースコード700を盗用し、変数名に変更を行い、第2のソフトウェアソースコード800を形成するように関数の順序を再編成している。図8Aおよび8B内で、変更は、図示を明確にするために太字フォントで示されている。機能的に、第1のソフトウェアソースコード700と第2のソフトウェアソースコード800との間に違いはないが、これは、第2のソフトウェアソースコード800を第1のソフトウェアソースコード700と比較する時に、即時に明白ではない。さらに、第1のソフトウェアソースコード700内の関数の順序と比較して、第2のソフトウェアソースコード800内の関数の順序が並べ替えられるため、第2のソフトウェアソースコード800のコンパイルされたコードは、第1のソフトウェアソースコード700のコンパイルされたコードとは異なり、コンパイルされたコードは、盗用を識別するように直接比較することができない。これらの実施例では、C言語は、大文字と小文字を区別し、これは、大文字と小文字の違いが合致することを要求する。他のソフトウェア言語は、大文字と小文字を区別せず、そのような言語をサポートする実施形態では、大文字と小文字の違いを無視するように、全て小文字または全て大文字に変換されてもよい。環境100は、提出された並列処理ルーチン例えば、カーネル112およびアルゴリズム124内の盗用を識別するための盗用検出モジュールPDM109を含む。PDM109は、開発サーバ108内で例証的に示されているが、PDM109は、その範囲から逸脱することなく、他のサーバ例えば、プログラム管理サーバ110および財務サーバ102内で実装されてもよい。PDM109はまた、環境100の外部のソフトウェア盗用を識別するための別個のツールとして実装されてもよい。さらなる実施例では、悪徳開発者は、盗用を隠そうとして、ソフトウェアソースコード内の独立文の順序を変更する。図30は、コードブロック3002、3004、および3006、独立文3010、3012、および3014、ならびに従属文3030、3032、および3034を図示するように、例示的なソフトウェアソースコード3000の断片を示す。図50は、ソフトウェアコード文で見られるコードの並べ替えられた複数のインスタンスを生成するための例示的な方法を示すフローチャートである。図50に示されるように、ステップ5005では、ソフトウェアコード文のグループが、それらを分離するルーピングまたは分岐文を伴わずに、2つ以上のコード文を含むブロックにグループ化される。C言語では、分岐の実施例は、goto...label、if...then...else...、switch...case...default...、break、およびcontinueである。C言語では、ルーピングの実施例は、for...、while...、およびdo...while...である。ステップ5010では、どの代入文がブロック内で従属しているか、およびどれが独立しているかを判定するように、ブロック内の代入文が分析される。C言語の中には、片面および両面といった2種類の代入文がある。片面代入文は、変数に関連して、それぞれ、インクリメントおよびデクリメント演算子および-を利用する。例えば、a;は、a=a1;と同等の代入文である。両面代入文は、=、/=、=、=、=、=、|=、^=、<<=、および>>=といった演算子のうちの1つを含む。例えば、a=a1は、両面代入文である。上記の片面代入文で示される変数は、代入文の左および右側の両方で生じるものとして見なされる。コードブロック内の代入文の右側で見られる変数が、同じブロック内の任意の先行代入文実際または暗示の左側でも見られる場合に、その文は従属していると見なされる例えば、従属文3030、3032、および3034。同じブロック内で、代入後の任意の非代入文は、その代入文と関連付けられると見なされる例えば、独立文3010および3012。次いで、ステップ5015では、以下の規則に従って、元のソフトウェアソースコードと同じ機能性を維持しながら、ソフトウェアソースコードの複数のインスタンス2910が特定のインスタンスを示すワイルドカードである、図29に示されるが作成される。ブロック内で従属しているものとして判定されない文は、独立文と見なされ、そのような配置が、独立文を従属文に変化させない、または従属文の従属関係を変化させないならばすなわち、配置がブロック内のいずれの文の従属関係にも影響を及ぼさない限り、任意の関連文とともに、所与のコードブロック内のどこかに配置される。文の従属関係は、その左側に変数を含有する独立文実際または暗示が、その左側の変数に依存する文と交換される場合に変化する。従属文は、独立文を定義した後に生じなければならない。従属文には、関連文がない。各ソフトウェアソースコードインスタンスは、それぞれのコードブロック内の独立文の1つの順列を表す。コードブロック3006、および独立コード文を位置付けるための上記の規則を見ると、含まれた文の1つだけの他の順列がある。つまり、独立文3010および3012が位置を交換してもよいが、文のi部分が、独立文3010または3012をそこから従属させるため、独立文3014は移動することができない。独立文3014は、それらの従属関係が違反されるため、従属文3030、3032、および3034のうちのいずれかと交換することができない。一実施形態では、ステップ5020では、がインスタンス番号を表す、ソースファイル名_.ccppというファイル名形式を使用して、可動独立文の順列から生成される各新しいコードインスタンス2910が、別個のファイルとして記憶される。例えば、元のソフトウェアソースコードファイルがa.cと名付けられた場合、第1の新しいソフトウェアソースコードインスタンスファイル名はa_1.cとして生成される。図29は、ソフトウェアソースコード2902から生成された例示的なデータを示す。ソフトウェアソースコード2902は、図1のカーネル122、アルゴリズム124、図2のカーネル204、アルゴリズム202、図4の並列処理ルーチン404、図7Aおよび7Bのソフトウェアソースコード700、ならびに図8Aおよび8Bのソフトウェアソースコード800に対するソースコードのうちの1つ以上を表してもよい。図9は、ソフトウェアソースコードの中の盗用の割合を判定するための1つの例示的な方法900を示す。例えば、開発者は、図1のカーネル122およびアルゴリズム124等の新しい並列処理ルーチンを環境100に提出してもよい。環境100内で使用するために公開する前に、この新しいアルゴリズムは、新しいルーチンの独創性を確保するように、環境100内の既存の並列処理ルーチンに対して評価される。一意的であると考えられるようにソフトウェアソースコードが改変され得る容易性を考慮して、既存のルーチンへの類似性の量を判定するように、変数名、ファイル名、およびコメントを除外して、提出されたソフトウェアソースコードが比較される。図10は、編集済み機能的構成要素へのソフトウェアソースコードの編集のための1つの例示的な編集プロセス1000を示す。図9、10、および29は、以下の説明と併せて、ともに最も良く検討される。図9のステップ902では、図29に示されるように、ソフトウェアソースコード2902が、mainルーチン用の関数名表2907および変数表2904、ならびに関数名表内に記載された各付加的な関数用の変数表例えば、2906、2908を構築するように解析される。関数名表2907および変数表2904、2906、2908等は、以下で説明されるように、構成要素編集ファイルを生成する目的で関数を識別するために、後に使用される。システムは、関数名表および変数表から関数名および変数名を検索する。盗用について試験されるコードのテキスト内で見つかった時に、それらは、試験する前にコードから除去編集される。ステップ902の一実施例では、PDM109は、図11の関数表1100を生成するように、かつソフトウェアソースコードのmain関数用の図12の変数表1200、関数power用の図13の変数表1300、および関数power1用の図14の変数表1400を生成するように、ソフトウェアソースコード800を解析する。ステップ904では、ソフトウェアソースコードが、図50に関して上記で説明されるように、独立文の各順列に対する1つのソースコードを生成するように解析される。ステップ904の一実施例では、PDM109は、ソフトウェアソースコードインスタンス29101、29102、および29103を生成するように、ソフトウェアソースコード2902を解析する。ステップ906では、プロセス1000図10に関して以下で詳細に説明されるが、各ソースコードインスタンスを編集して、比較ファイルおよび構成要素編集ファイルを作成するように呼び出される。ステップ906の一実施例では、PDM109は、ソフトウェアソースコードインスタンス29101を処理して、ソースコード比較ファイル29201、構成要素編集ファイルmain29221、構成要素編集ファイルfunction129222、および構成要素編集ファイルfunction229223を生成するように、過程1000を実装する。同様に、PDM109は、それぞれ、比較ファイル29202、構成要素編集ファイルmain29224、構成要素編集ファイルfunction129225、および構成要素編集ファイルfunction229226、ならびに比較ファイル29203、構成要素編集ファイルmain29227、構成要素編集ファイルfunction129228、および構成要素編集ファイルfunction229229を生成するように、ソフトウェアソースコードインスタンス29102および29103を処理する。ここで、図10の過程1000が詳細に説明される。ステップ1002では、ソース比較ファイルを形成するように、非命令文字、変数名、およびファイル名が、ソフトウェアソースコードから除去される。非命令文字は、言語コンパイラによって無視され、スペース、タブ、および改行/キャリッジリターン等の書式設定文字、およびコメントを含んでもよい。ステップ1002の一実施例では、PDM109は、図15のソース比較ファイル1500を形成するように、ソフトウェアソースコード800から書式設定、コメント、変数名、およびファイル名を除去する。機能的構成要素の図示を明確にするために、あるキャリッジリターン/改行がソース比較ファイル1500の中に残されていることに留意されたい。ステップ1004では、ソース比較ファイル内の関数が、文字で表した長さに従って、昇順で配置される。ステップ1004の一実施例では、PDM109は、ソース比較ファイル1500内の各関数の文字で表した長さを判定し、図16のソース比較ファイル1600として示される、サイズの昇順で、これらの関数を配置する。ステップ1006では、構成要素編集ファイル2922が、ソース比較ファイル内の各関数に対して生成される。ステップ1006の一実施例では、PDM109は、第1の関数power用の図17の構成要素編集ファイル1700、第2の関数power1用の図18の構成要素編集ファイル1800、および第3の関数main用の図19の第3の構成要素編集ファイル1900を作成する。図9の方法900を参照すると、ステップ908では、同様の既存並列処理ルーチンが、データベース内で識別される。ステップ908の一実施例では、PDM109は、ソフトウェアソースコード800のカテゴリ例えば、カテゴリ206、図2および/または関連キーワードに基づいて、ソフトウェアソースコード800と同様であるカーネル例えば、カーネル122およびアルゴリズム例えば、アルゴリズム124を識別するようにデータベース106を検索し、図7Aおよび7Bのソフトウェアソースコード700を識別する。ステップ910から916は、ステップ908の各識別された並列処理ルーチンについて繰り返される。ステップ910では、識別されたソフトウェアソースコードが、mainルーチン用の関数表および変数表、ならびに関数表内に記載された各付加的な関数用の変数表を構築するように分析される。ステップ910の一実施例では、PDM109は、それぞれ、図21、22、および23に示されるように、図20の第2の関数表2000、第1の関数main用の第2の変数表2100、第2の関数power用の2200、および第3の関数power1用の2300を生成するようにソフトウェアソースコード700を解析する。ステップ912では、ステップ908の識別されたソフトウェアソースコードに編集を行い、第2の比較ファイルおよびゼロ以上の第2の構成要素編集ファイルを形成するように、プロセス1000が呼び出される。ステップ912の一実施例では、PDM109は、ソフトウェアソースコード700から書式設定、コメント、変数名、およびファイル名を除去することによって、ソフトウェアソースコード700を処理し、図24のソース比較ファイル2400を生成するようにプロセス1000を実装する。次いで、PDM109は、図24のソース比較ファイル2400内の関数を順序付けて、図25のソース比較ファイル2500を形成するために、プロセス1000を利用する。次いで、PDM109は、ソースコード700の関数power用の図26のソース比較ファイル2600、ソースコード700の関数power1用の図27のソース比較ファイル2700、およびソースコード700の関数main用の図28のソース比較ファイル2800を生成するように、プロセス1000を続ける。ステップ914では、第1のソース比較ファイルのコード文と第2のソース比較ファイルのコード文との間の盗用の割合を判定するように、第1の比較ファイルが第2の比較ファイルと比較される。ステップ914の一実施例では、PDM109は、a比較ファイル1600と比較ファイル2500、bそれぞれ、比較ファイル1700、1800、1900と比較ファイル2600、2700、および2800との間のある割合の盗用を判定するために、Needleman-Wunsch分析を利用する。具体的には、盗用率は、比較ファイル2500、2600、2700、および2800に対してソフトウェアソースコード800から導出される各インスタンス29101、29102、および29103について判定される。ソースコード整合および盗用率の判定は、図31Aを参照して、以下で詳細に説明される。ステップ916では、判定された盗用率が許容限度よりも大きい場合に、第1のソースコードファイルが拒絶される。ステップ916の一実施例では、PDM109は、60の定義された限度を有し、判定された盗用率が60よりも大きいため、拒絶のためにソフトウェアソースコード800にフラグを付ける。PDM109はまた、ソフトウェアソースコード800に対する拒絶通知を関連開発者152に送信してもよい。ステップ918は決定である。もし、ステップ918で、第1のソースコードファイルが、データベース106内の任意の識別された並列処理ルーチンについてステップ916で拒絶されたことを、方法900が判定する場合、方法900は、ステップ920を続け、そうでなければ、方法900は終了する。ステップ920では、第1のソースコードファイルが容認される。ステップ920の一実施例では、ソフトウェアソースコード2902は、盗用されていないものとして容認される。方法900を利用することによって、各関数は、盗用率を判定するように、データベース106に記憶された他の関数に対して評価されてもよい。ソフトウェアソースコード内で、関数は、完全な機能的着想と見なされてもよく、したがって、盗用について個別にチェックされる。上記で示されるように、各関数用の編集済みコードは、ファイル拡張子.CREを有してもよい、構成要素編集ファイルと呼ばれる独自のファイルの中に入れられる。各構成要素編集ファイルは、例えば、データベース106内に記憶されるような環境100内の選択された構成要素編集ファイルに対して比較される。このプロセスは、図9で説明されるプロセスと同様であり、各識別された関数用の構成要素編集ファイルのみが、データベース106に記憶された他の関数用の構成要素編集ファイルに対して比較される。盗用整合ステップソフトウェアは、典型的には、複数バージョンで作成され、1つのバージョンが以前のバージョンの特徴の多くを含む。つまり、コードのバージョン間に進化的関係があってもよい。この進化的関係に基づいて、新たに提出されたソフトウェアソースコードにとって最も近いバージョンの試験コードを判定するために、生物情報数学的ツールが使用されてもよい。Needleman-Wunsch動的プログラミングモデルを使用して、2つの編集済みファイル例えば、構成要素編集ファイル29221および構成要素編集ファイル29224-29229の間で全ての最適な全体的整合を得ることが可能である。Needleman-Wunsch方程式は、以下の通りである。Mi,j=Mi,jmaxMk,j1,Mi1,l式中、Mi,j=比較される完成した編集済みファイルi=第1のファイルの長さj=第2のファイルの長さk=任意の整数>il=任意の整数>j図31Aは、図16のソース比較ファイル1600および図25のソース比較ファイル2500のうちのそれぞれの最初の19文字の間の合致を図示する、1つの例示的な表3100を示す。示された技法は、各編集済みファイル全体に直接適用可能である。表3100内で、一番上の行は、ソース比較ファイル1600を表し、左の列は、ソース比較ファイル2500の文字を表す。文字がファイル1600および2500の間で合致する、図31Aに示されるように、1は、対応する四角内に配置される。図31Bは、図31Aの表3100へのNeedleman-Wunsch方程式の適用に起因する、例示的な表3110を示す。具体的には、Needleman-Wunsch方程式は、表3110を形成するように繰り返し適用される。19の連続合致文字の一次最適トレース3112が見出され、二次最適トレース3114も識別される。Smith-Waterman動的プログラミングモデルを使用して、2つのソース比較ファイル例えば、比較ファイル1600および2500の間で全ての最適な局所的整合を得ることが可能である。本明細書で説明されるようなSmith-Waterman動的プログラミングモデルは、比較されたシーケンスの中の間隙の効果が加重されることを可能にするため、好ましい整合方法と見なされる。以下の方程式は、Smith-Waterman動的プログラミングモデルを示す。式中、a,b=アルファベットΣ上の文字列m=長さan=長さbHi,j=a[1...i]という接尾辞とb[1...j]という接尾辞との間の最大類似性スコアwc,d,c,d∈Σ∪{’’},’’は、間隙採点スキームである実施例シーケンス1=コード断片Aの最初の19文字シーケンス2=コード断片Bの最初の19文字wmatch=2wa,=w,b=wmismatch=1図31Cは、表内の文字によって識別される間隙検出の規定を図示する、例示的なSmith-Watermanドット表3120を示す。また、このステップで必要とされる最適トレースを作成するために、BLASTまたは任意の他の局所的整合方法が使用されてもよいことにも留意されたい。盗用比較ステップフィルタにかけられ、最適に整合させられたトレースを生成するために使用される2つのコードの中で、より多くの数の合致文字が見出されるほど、これらのコードが無関係である確率が低くなる。比較されたコードが、25を上回る、フィルタにかけられ、最適に整合させられたトレースに沿った合致を生成する場合、相同性が仮定されてもよく、つまり、コードは進化的に関係する。したがって、いずれか2つのコードAおよびBと呼ばれ、A=盗用について試験されているコードによる、任意のフィルタにかけられ、最適に整合させられたトレースに沿った25の文字合致が、Bに対するAの盗用を構成する。コード系統を判定するソフトウェアソースコードは、概して、複数バージョンで作成され、1つのバージョンが以前のバージョンの特徴の多くを保持するため、複数のバージョンのコードがある場合、次いで、いくつかのバージョンのコードは、系統の中で最も近い別のバージョンに対して、フィルタにかけられた整合トレースにより高い割合の合致を有する。例えば、未知のソフトウェアソースコードバージョンXが、進化的に関係するソフトウェアソースコードバージョンに対して比較された場合に、以下のシナリオが起こってもよい。図31Dは、バージョン1、2、2.1、2.2、3、3.1、および4のうちのそれぞれに対するバージョンXの盗用率が、表3132に示されるように判定される、第1の例示的なシナリオ3130を示す。バージョン2.2に対するバージョンXの100合致は、矢印3134によって示されるように、バージョンXがバージョン2.2であることを示す。図31Eは、バージョン1、2、2.1、2.2、3、3.1、および4のうちのそれぞれに対するバージョンXの盗用率が、表3142に示されるように判定される、第2の例示的なシナリオ3140を示す。バージョン2.1に対するバージョンXの75合致は、矢印3144によって示されるように、バージョンXが、おそらくバージョン2.1に由来するが、バージョン2.2と同じではないことを示す。図31Fは、バージョン1、2、2.1、2.2、3、3.1、および4のうちのそれぞれに対するバージョンXの盗用率が、表3152に示されるように判定される、第2の例示的なシナリオ3150を示す。表3152内の盗用率は、バージョンXとバージョン1、2、2.1、2.2、3、3.1、および4との間に進化がない、したがって、盗用がないことを示す。コード作成タイムスタンプもまた、バージョンX等の何らかの未知のコードの関連を示すために、バージョン番号の代わりに使用されてもよい。悪質ソフトウェア挙動検出環境100内で、並列処理ルーチン例えば、カーネル122およびアルゴリズム124は、他の並列処理ルーチンに問題を引き起こすべきではない。他のソフトウェアに問題を引き起こすソフトウェアは、悪質ソフトウェアと呼ばれ、不要なソフトウェア活動は、悪質ソフトウェア挙動と呼ばれる。悪質ソフトウェア挙動は、偶発的に起こる場合があり、または意図的となり得る。いずれにしても、悪質ソフトウェア挙動は、環境100内で望ましくない。好ましくは、悪質ソフトウェアは、環境100内でそのソフトウェア例えば、並列処理ルーチンを公開する前に検出される。1つの例示的な悪質ソフトウェア挙動は、メモリの中の変数例えば、アレイ型構造またはポインタが溢れ、保護されたメモリがアクセスされるときである。ハッカーすなわち、悪質ソフトウェアを意図的に作成する個人が、システムの保護されたメモリへの不正アクセスを獲得し、次いで、そのアクセスを活用しようとする。環境100内の悪質ソフトウェア挙動を防止するために、開発サーバ108は、悪質挙動検出器MBD111を含む。具体的には、MBD111は、環境100内での公開のために提出された並列処理ルーチン内の悪質挙動を検出するように機能する。MBD111は、提出された並列処理ルーチンの中の悪質ソフトウェア挙動を検出し、並列処理ルーチンがその変数を溢れさせている時を検出する。図32は、ソフトウェアソースコード3202内の悪質ソフトウェア挙動を検出する時にMDB111によって使用される例示的なファイルを示す。第1のステップでは、MBD111は、元のソフトウェアソースコードと同じファイル名を伴い、かつ.AUG拡張子を伴う、ソフトウェアソースコード3202のコピーである、増補ソースコード3204を作成する。同様に、MBD111はまた、ソフトウェソースコードと同じファイル名を伴い、かつ.MAP拡張子を伴う、ソフトウェアソースコードのコピーである、マップされたソースコード3206も作成する。増補ソースコード3204およびマップされたソースコード3206は、各識別された線形ソース区分の区分番号を示す、コメントを含むように改正される。ソフトウェアソースコードが完全に試験されていることを確実にするために、ソフトウェアソースコード内の全ての識別された線形コード区分が、試験中に起動されなければならない。ソフトウェアソースコード3202内のある分岐が、1つ以上のエラー条件時に起動されるのみであってもよいため、これらの分岐の選択が強制されてもよい。マップされたソースコード3206は、アクセスされていない区分が試験中に報告される時の参照として、ソフトウェアソースコード3202の開発者または提出者に返信されてもよい。マップされたソースコード3206は、図39で例示されている。ソフトウェアソースコード内の線形ソースコード区分を識別することは、全ての線形コード区分を単一の実行で試験することができるわけではない時に、ソフトウェアが反復して試験されることを可能にする。MBD111は、各線形コード区分からの追跡情報を、ソフトウェアソースコードと同じファイル名および.TRK拡張子を伴う追跡ファイル3208の中へ出力するように、増補ソースコード3204をさらに修正する。ソフトウェアソースコード3202と関連付けられる並列処理ルーチンは、追跡ファイル3208内の追跡情報によって示されるように、全ての分岐およびループコード区分が試験されるまで、本システムによる使用のために公開されない。図33は、開発者152によって環境100に提出されるような例示的なソフトウェアソースコード3300を示す。ソフトウェアソースコード3300は、図32のソフトウェアソースコード3202を表してもよい。図34は、増補ソースコード3204を形成するようにソフトウェアソースコード3202を改正するための1つの例示的なプロセス3400を示す。プロセス3400は、例えば、MBD111内の機械可読命令として実装される。図35は、追跡ファイル3208を作成して開くための1つの例示的なコード挿入3500を示す。図36は、現在の日付および時間ならびに区分番号を追跡ファイル3208に添付するように関数mptWriteSegmentを呼び出す、1つの例示的なコード挿入3600を示す。図37は、追跡ファイル3208を閉じるための1つの例示的なコード挿入3700を示す。図38Aおよび38Bは、ソフトウェアソースコード3300内の例示的なコード挿入を示す。図34、35、36、37、および38は、以下の説明を用いて、ともに最も良く検討される。ステップ3402では、プロセス3400が、定義ファイルを含むコードを増補ソースコードに挿入する。ステップ3402の一実施例では、MBD111は、増補ソースコード3204にも挿入される追跡コードをサポートする定義を含むように、ソフトウェアソースコード3300の点3302でinclude<mpttrace.h>を挿入する。ステップ3404では、プロセス3400は、追跡ファイルを開くコードを、増補ソースコードの第1の線形コード区分に挿入する。ステップ3404の一実施例では、MBD111は、ソフトウェアソースコード3300の第1の実行された関数mainの第1の線形コード区分の冒頭にある点3304で、図35のコード挿入3500をソフトウェアソースコード3300に挿入する。ステップ3406では、プロセス3400が、識別されたループおよび分岐点に基づいて、ソフトウェアソースコード内の線形コード区分を識別する。ステップ3406の一実施例では、MBD111は、ソフトウェアソースコード3300を分析し、その中の線形コード区分3352、3354、3356、3358、3360、および3362を識別するように、分岐点3306、3308、3314、および3316、ならびにループ点3312を識別する。ステップ3408では、プロセスが、ブロックマーカーがない単一の文であれば、識別された線形コード区分を包囲するようにブロックマーカーを追加する。ステップ3408の一実施例では、MBD111は、線形コード区分3356の周囲に区切り文字{and}を追加する。ステップ3410では、プロセス3400が、タイムスタンプ付き区分識別子を各線形コード区分内の追跡ファイルに添付するように、ソースコードを挿入する。ステップ3410の一実施例では、MBD111は、関数mptWriteSegmenttrkFile,Xを呼び出すコードを追加し、Xは、各識別された線形コード区分3352、3354、3356、3358、3360、および3362内の第1の文としての区分番号である。関数mptWriteSegmentは、すでに開かれた追跡ファイルtrkFileの終わりに、現在の時間および日付ならびに区分番号Xを書く。ステップ3412では、プロセス3400が、各プログラム終了点前に追跡ファイルを閉じるようにソースコードを挿入する。ステップ3412の一実施例では、MBD111は、挿入3812および3826によって示されるように、各exit、_exit、およびreturn文の前に図37のコード挿入3700を追加する。加えて、mptWriteSegment関数は、以前の区分の実行時間および/または全実行時間が定義された最大時間を超えるかどうかを判定する。定義された最大時間制限に達した場合、mptWriteSegment関数は1を返信し、そうでなければ、0を返信する。図36のコード挿入3600に示されるように、if文は、mptWriteSegment関数からの返信値を評価し、並列処理ルーチンを時期尚早に終了させてもよい。図39は、ソフトウェアソースコード3300に基づく、マップされたソースコード3206内の例示的なコメント挿入太字で示されるを示す。カーネルデータ使用を追跡するレベル2増補コンピュータ言語は、異なる静的および動的メモリ割付モデルを有してもよい。CおよびC言語では、malloc、calloc、realloc、およびnewtypeコマンドを使用して、動的メモリが割り付けられる。アレイもまた、実行時に動的に割り付けられてもよい。割り付けられたメモリは、ヒープ空間を利用する。割付が静的でない限り、それは各スレッドの中の各ルーチンに作成される。C言語は、可変アドレスを判定し、そのアドレスから始まる任意の値を書く能力を含む。例えば、標準的なハッカー技法である、変数が保持するように定義されているよりも多くの値をその変数に書くことによってルーチンに割り付けられたメモリの外側のメモリがアクセスされないことを確実にするために、静的および動的である全ての変数が位置付けられ、それらのアドレスは、オーバーフロー条件について実行時にチェックされる。変数の定義された範囲を超えてメモリにアクセスするコードを識別するために、各変数の開始および終了アドレスが実行時に判定される。図40Aおよび40Bは、実行時に変数の開始アドレスを判定するように、増補ソースコード3204内の可変アドレス検出コード4002の例示的な配置を示す。変数アドレス検出コード4002は、各変数定義後に増補ソースコード3204に追加される。図40Aおよび40Bでは、図示を明確にするために、追加されたコードが太字で示されている。図40Aの実施例では、可変アドレス検出コード4002は、変数名文字列4006および可変アドレス4008といった2つの入力パラメータを伴う関数4004mptStartingAddressDetectorとして実装される。変数名文字列は、変数または引用符によって取り囲まれた構成変数の名前である。アドレスパラメータは、変数のアドレスである。図40AのC言語実施例では、位置4010における変数indexの公表後に、mptStartingAddressDetectorindex,index;が増補ソースコード3204に追加される。図40Bの位置4012で示されるように、ポインタが公表された場合、典型的には、代入文を伴う値すなわち、メモリ領域のアドレスが割り当てられる。C言語では、例えば、alloc、calloc、malloc、およびnewといった関数が、メモリをポインタに割り付けるために使用される。記憶割付関数が代入文の右側にある場合に、代入文の左側のポインタは、図38Bの位置3840で示されるように、文内でメモリが割り付けられている。mptStartingAddressDetector関数は、位置4014で示されるように、ポインタに割り当てられた開始アドレスを捕捉するために使用される。C言語では、=、=、=、=、/=、=、<<=、>>=、=、^=、および|=が、代入演算子である。必要とされる時に、ポインタへのメモリの割付は、位置3840で示されるようなif文内等から隔離される。可変アドレス検出コード4002例えば、関数mptStartingAddressDetectorが開始アドレスを記録することを可能にするように、メモリの割当および割付に起因するポインタの評価は、位置4014で示されるように分離され、割り付けられたポインタの試験は、示されるように別個のif文内で行われる。開始アドレスは、以下のように取得される。非構成変数の全ての型定義が位置付けられる。見出された時に、mptStartingAddressDetector関数を使用して、これらの変数のアドレスを取得する。記憶割付関数を使用してポインタ定義が生じた場合に、その代入文を隔離し、mptStartingAddressDetector関数を使用して新しいアドレスを取得する。記憶割付関数を用いることなく、代入演算子に遭遇した時はいつでも、変数のアドレスがアドレスを計算するために使用される時に、または変数のアドレスが変更された時に、currentAddressDetector関数を使用して、代入演算子実際または暗示の左側の変数の現在のアドレスが捕捉される。例えば、以下のC言語文は、ポインタ値を増分する。bufferinfo;実行時にポインタ値を評価するために、以下のように、文がポインタ値を変更した後に関数が挿入される。bufferinfo;mptCurrentAddressDetectorbufferinfo,bufferinfo;この実施例では、関数mptCurrentAddressDetectorは、mptStartAddressDetector関数によって以前に判定され、図41の変数追跡表内4100に記憶されたような、判定された開始および終了アドレスに対して、修正されたポインタ値を比較した。具体的には、mptCurrentAddressDetector関数によって判定されるようなポインタ値は、その変数の有効アドレス範囲に対して比較され、その比較の結果は、追跡ファイル3208に書かれる。図42は、mptCurrentAddressDetector関数の出力を図示する、1つの例示的な表4200を示す。メモリ割付および割付解除を追跡する上述のように、メモリは、典型的には、言語内の割付関数を使用してポインタに割り付けられる。C言語では、malloc、calloc、realloc、または新しいシステム関数呼び出しを使用して割り付けられる。これらのメモリ割付を記録するために、メモリ割付代入文の左側の変数の名前を、割り付けられたリソースの表に書き込むように、割付追跡関数が、ポインタへの割当に近接して増補ソースコード3204に追加される。図43は、割り付けられたポインタの変数名、それが割り付けられた関数の名前、および割付フラグを含有する、1つの例示的な割り付けられたリソースの表4300を示す。割付フラグは、関連変数がそれに割り付けられたメモリを有する時に、1に設定され、いずれのメモリも変数に割り付けられていない時に例えば、割り付けられたメモリが解放されている時に、0に設定される。メモリの割付および割付解除を追跡するための関数の一実施例が、以下で示される。mptAllocationTableChangevariablename,functionname,allocationflag;増補ソースコード3204内のポインタ変数への各メモリ割付および割当に近接して、第3のパラメータとして1を伴うmptAllocationTableChange関数の呼び出しが、割り付けられたリソースの表4300を更新して、メモリがそのポインタ変数に割り付けられたことを示す。同様に、増補ソースコード3204の各メモリ割付解除文について、文のポインタ変数へのメモリ割付解除を記録するように、第3のパラメータとして0を伴って、mptAllocationTableChange関数の呼び出しが挿入される。メモリが割り付けられたリソースの表4300内にすでに記載されているポインタに割り付けられる例えば、メモリがポインタ変数に1回以上割り付けられる場合、同じ変数名を伴う付加的な入力が、割り付けられたリソースの表4300に追加される。メモリがポインタ変数から割付解除された時に、変数名および関数名に合致し、1に設定された割付フラグを有する、割り付けられたリソースの表4300の中の第1の入力は、0に設定された割付フラグを有するように修正される。それにより、割り付けられたリソースの表4300は、割り付けられたメモリの異常な使用例えば、第1のメモリが割付解除されることなく、メモリがポインタ変数に2回割り付けられた場合を判定することができるように、メモリの割付および割付解除を追跡する。同様に、割り付けられたメモリの誤用を防止するように、アドレス割当例えば、第2のポインタ変数に割り当てられた1つのポインタ変数内に記憶されたメモリアドレスが追跡される。プログラム終了点例えば、C言語内のreturnまたはexit関数呼び出し毎に、割付リソース表の値が追跡ファイル3208に記憶される。以下は、割付リソース表の値の追跡増補を行うために必要とされる関数を示す。mptTraceResourceValuesourceFileName.TRCfilehandler;図44Aおよび44Bは、増補ソースコード3204へのmptTraceResourceValue関数の例示的な追加4402および4404を示す。強制コード区分入力レベル3増補ソフトウェアソースコード3202内のあるコード区分にアクセスすることは、典型的には、あるエラー条件時のみにアクセスされるという点で、問題があり得る。コード区分が通常動作を通してアクセスされない場合、強制区分ファイル3210図32参照は、これらのコード区分へのアクセスを強制するように定義されてもよい。強制区分ファイル3210は、強制されるコード区分のコード区分番号を含有し、形式sourceFileName.FRCのファイル名を有する。強制区分ファイル3210内で、強制されるコード区分が記載される例えば、空白によって分離される区分番号のリストとして。例えば、区分3および区分5および区分7が、強制入力を有するものである場合に、強制区分ファイル3210は、357を含有する。図45Aおよび45Bは、条件付き分岐強制を伴う増補ソースコード3204を示す。具体的には、増補ソースコード3204は、位置4502および4504で強制区分ファイル3210へのファイルハンドルを含むように修正される。一次元強制アレイ例えば、mptForceArrayが、位置4506で公表され、位置4508で0に初期化される。強制アレイは、ソフトウェアソースコード3202内にコード区分があるのと同じ数の要素を伴って公表される。増補ソースコード3204内の位置4510で、強制区分ファイル3210が読み取られ、強制区分ファイル3210からロードされた区分番号に対応する強制アレイの要素が1に設定される。次いで、強制区分ファイル3210が閉じられる。増補ソースコード3204内で、各分岐点4512、4514、および4516は、強制アレイの適切な要素を評価するように修正される。例えば、区分6の入力点における条件文は、強制アレイの要素6を評価した。したがって、強制区分ファイル3210内に区分番号を含むことによって、そのコード区分と関連付けられる強制アレイ要素は、ファイルが実行時に読み取られる時に0に設定され、分岐文に対する条件が評価された時に、そのコード区分が入力される。増補ソースコード3204内で、C言語について、デフォルトcaseラベルの前に、case文例えば、switchに追加caseが追加され、それは、強制ファイルを介したデフォルトの起動を可能にする。さらに、強制されるコード区分が別のコード区分に埋め込まれる場合例えば、ネスト化、if文、次いで、標的コード区分が実際に起動されていることを確実にするために、全てのネスティング分岐点の全起動が必要とされる。全ての区分にアクセスするための複数プログラム実行の使用増補ソースコード3204は、コンパイルされ、次いで、可変アドレスアクセス、コード区分アクセス、および時間/日付を含有する追跡ファイル3208を生成するように実行される。次いで、MBD111は、ソフトウェアソースコード3202内の全ての区分がアクセスされているかどうかを判定するように、追跡ファイル3208を処理する。ソフトウェアソースコード3202内の全てのコード区分がアクセスされているわけではない場合、MBD111は、アクセスされていないコード区分のリストを含有する、欠落区分ファイル3212を生成する。欠落区分ファイル3212のファイル名形式は、sourceFileName.MISである。ユーザは、識別された欠落コード区分を起動するために、修正された強制区分ファイル3210を用いて付加的な実行が必要であるかどうかを判定するように、欠落区分ファイル3212を検討してもよい。追跡ファイル3208は、増補ソースコード3204の付加的な実行からの出力がファイルに添付されるという点で累積的である。欠落区分ファイル3212は、どの区分がプロファイリングを必要とするかをユーザが知るように、増補ソースコード3204の各実行によって再生される。ソフトウェアソースコード3202の全てのコード区分がアクセスされている時、次いで、欠落区分ファイル3212は作成されず、それにより、全ての区分が分析されていることを示す。新しいソフトウェアソースファイルがユーザによって提供された場合に、同じソースファイル名を伴う任意の追跡ファイルがシステムから消去され、それにより、分析を要求するために全ての区分を必要とする。双方向カーネル追跡ソフトウェアソースコード3202を試験することが、増補ソースコード3204の数回の実行を必要とし得るため、MBD111は、提出されたカーネルの実行を双方向に辿るように、ユーザ例えば、開発者152がクライアント156内のユーザインターフェース160と相互作用することを可能にする。MBD111は、提出または選択されたカーネル例えば、図2のカーネル2041、および図32のソフトウェアソースコード3202の視覚表現を作成し、ユーザインターフェース160上に関数構造図を表示する。図46は、マップされたソースコードファイル例えば、図32のマップされたソースコード3206内でも示されるような関連区分番号とともにそれぞれ表された、11のコード区分を図示する、1つの例示的な関数構造図4600を示す。ユーザインターフェース160内でトレースオプションを選択することによって、実行時間双方向フラグが設定され、それは、書き込み区分関数例えば、mptWriteSegmentに、各コード区分におけるカーネルの実行を停止させ、カーネルの実行を続ける前に、ユーザが双方向に強制アレイ例えば、mptForceArray[]を設定することを可能にする。動作の一実施例では、増補ソースコード3204が実行される際に、実行されているコード区分は、関数構造図4600内で強調表示される。MBD111は、各分岐点例えば、図45の分岐点4512、4514、および4516で増補ソースコード3204の実行を停止し、関数構造図4600の現在のコード区分から発する適切な矢印の上で左のマウスボタンをクリックすることによって、ユーザが実行経路を選択することを可能にする。経路例えば、矢印がユーザによって選択された時に、選択された矢印の色が変化し、ユーザが続けるボタンを選択した時に、どの経路が取られるかを示す。続けるボタンの選択時に、選択された経路に基づいて実行が続く。ユーザは、右のマウスボタンを使用してコード区分を選択し、実行がその区分において中断するべきではないことを示してもよい。例えば、分岐点、exit、およびreturnのうちの1つにおいて増補ソースコード3204の実行が中断させられた時はいつでも、ユーザは、随意で、変数名、それらの開始、終了、および現在のアドレス、ならびにポップアップウィンドウ内のそれらの現在の場所の値を表示してもよい。例えば、ユーザは、ユーザインターフェース160内の変数を表示変更するボタンをクリックして、これらの変数を表示してもよい。ポップアップウィンドウ内の任意の変数の現在の値のフィールドを選択することは、ユーザが変数のデータを変更することを可能にする。変数がアレイである場合に、アレイ指標値はまた、そのアレイ要素の値を表示するようにユーザによって変更されてもよい。ユーザが変数の値を変更する場合、変更後に実行されるコード区分は、アクセスされた区分経路として追跡されない。一実施形態では、アレイ例えば、mptVariableArray[]が、ポップアップウィンドウ内で表示するために、この変数情報を記憶するために使用される。さらに、例えば、分岐点、exit、およびreturnのうちの1つにおいて増補ソースコード3204の実行が中断させられた時はいつでも、ユーザは、随意で、ユーザインターフェース160内のコードを表示するボタンを選択することによって、ポップアップウィンドウ内にマッピングファイル例えば、マップされたソースコード3206のコンテンツを表示してもよい。このポップアップウィンドウ内で、例えば、増補ソースコード3204に追加されたmptWriteSegment関数の実行から判定されるように、現在のコード区分がハイライトされる。さらに再度、MBD111は、増補ソースコード3204内で実行されたコード区分を記録し、1つ以上の異なる色で、より古いコード区分実行を表示する。コード区分実行が欠落区分ファイル3212内のデータに基づくため、新しいバージョンのソフトウェアソースコード3202が環境100にロードされる時に、全ての区分起動履歴がリセットされる。コード区分ロールバック例えば、分岐点、exit、およびreturnのうちの1つにおいて増補ソースコード3204の実行が中断させられた時はいつでも、ユーザは、随意で、ユーザインターフェース160内のロールバックボタン例えば、ロールバックコードボタンを選択して、最後に実行されたコード区分において実行を再開してもよい。これは、一実施形態では、mptWriteSegment関数によって返信される、最後に実行されたコード区分を利用し、それにより、MBD111が、制御を返信されたコード区分へ移転するためにその情報を使用することを可能にすることによって、実装される。図47Aおよび47Bは、関数mptWriteSegmentからの、返信された、以前に実行された区分番号変数mptFlag内に記憶されているを評価し、その後すぐにgotoコマンドを条件付きで実行するコードタグ4702例えば、区分ラベルおよびコードを含むための増補ソースコード3204の例示的な改正を示す。共同カーネルレベルデバッギング上記の機能性およびツールが、例えば、ユーザの機器上ではなく、開発サーバ108内で実装されるため、双方向活動もまた、他の開発者と共有されてもよい。例えば、組織内の複数のユーザがそれぞれ、同じカーネルに対してトレースモードを起動し、次いで、上記のツールに同時にアクセスしてもよい。一実施形態では、カーネルのトレースを開始する第1の個人が、仲裁者になり、双方向セッションを検討し、随意で制御するための他のユーザアクセスを選択的に許可してもよい。一実施形態では、各共同ユーザの名前が、ユーザインターフェース160内で表示され、強調表示および/または色を通して、どのユーザが現在実行されている区分を制御しているかが示される。例えば、現在制御しているユーザは、別のユーザの名前を選択して、それに双方向セッションの制御を渡してもよい。区分制御を伴うユーザのみが、区分を選択し、コードを表示し、変数を表示し、および/または変数を変更してもよい。仲裁者のみが、続けるおよびロールバックコードボタンを選択してもよい。仲裁者は、中断された実行中のいつでも、区分制御ユーザを変更してもよい。共同アルゴリズムトレーシングアルゴリズムは、複数のカーネルから成ってもよく、他のアルゴリズムを含んでもよい。ユーザインターフェース160内で、ユーザ例えば、開発者152または管理者158は、MBD111によるトレーシングのためのアルゴリズムを選択してもよい。図48は、カーネル48021-3およびアルゴリズム4804を示す、1つの例示的なアルゴリズムトレース表示4800を示す。いったん組織/カテゴリ/アルゴリズム/トレースボタンが選択されるとアルゴリズムが現在の組織によって作成されたとすれば、アルゴリズムのMPTトレース画面が表示される。表示4800内で、ユーザは、カーネルまたはアルゴリズムのうちのいずれかを選択してもよい例えば、マウスでクリックする。一実施形態では、カーネルおよびアルゴリズムへのアクセスは、ユーザの組織によって作成されたものに限定される。例えば、カーネルを選択することは、図46の関数構造図4600を、そのカーネルに対して表示させる。トレースモードでアルゴリズムにアクセスする第1の管理者レベルユーザ例えば、管理者158は、ユーザリスト4806内で示される4808ように、そのアルゴリズムの仲裁者になる。現在の仲裁者は、例えば、ユーザインターフェース160内で解放ボタンを選択することによって、仲裁者の地位を放棄してもよい。仲裁者は、他のユーザを、追跡されているアルゴリズム内のカーネルに割り当ててもよく、ユーザ名2が示され4810、カーネル6を仲裁する48022。一実施形態では、仲裁者がリスト4806からユーザ名を選択し、次いで、そのユーザに割り当てられるカーネルを選択した時に、割当が起こり、そうするとすぐに、選択されたカーネル名が、ユーザの名前によって表示される4810。カーネル4802がユーザによってダブルクリックされた場合、選択されたカーネルがポップアップカーネルトレースウィンドウ内で表示される。現在のアルゴリズム内の別のアルゴリズム例えば、アルゴリズム4804が選択されたおよびユーザの組織によって所有される場合に、そのアルゴリズムのカーネル/アルゴリズムが表示される。最上アルゴリズムの仲裁者は、全てのアルゴリズムの仲裁者である。一実施形態では、各カーネル4802に割り当てられたユーザが、そのカーネルの仲裁者になり、上記で説明されるように、続けてMBD111内でそのカーネルを辿る例えば、図46および関連説明を参照。カーネルに対する全ての区分が適性にアクセスされ、エラーがなく、必要な正解が得られており、そのカーネルが安全と見なされる時に、次いで、カーネルを表す記号は、カーネルが承認されていることを示す図48内のように太字で示される、または緑色で表示される。ユーザによるカーネルのトレース中に、そのカーネルは、鎖線輪郭で表示されるカーネル48022参照。全ての仲裁者が作成した割当は、仲裁者によって変更されるまで実施中のままである。仲裁者は、出力値を、辿っている各カーネル/アルゴリズムに割り当てることができる。これは、必要なカーネルまたはアルゴリズムの上でダブル右クリックする選択することによって達成される。カーネル/アルゴリズムの仲裁者選択は、入力/出力選択ポップアップメニューを表示させる。入力ボタンが入力/出力選択ポップアップメニュー上で選択された後に、ファイルまたは変数選択ポップアップメニューが表示される。変数ファイルのURLが入力され、その後に続くボタンの選択が続く場合に、以下の形式を伴うファイルが、全ての入力変数を定義するために使用される。variablename1,inputvalue1,....variablenamen,inputvaluen;空白および改行/キャリッジリターン文字は無視される。変数がアレイである場合に、影響を受けるアレイ要素が選択される。例えば、test[3],10は、試験と名付けられたアレイの第4の要素が、値10を受容することを意味する。あらゆる未定義要素はN/Aと指定される。N/A指定を伴ういずれの変数も定義されない。ユーザインターフェース160内の変数を表示するボタンの選択は、現在のカーネル/アルゴリズムに対する全ての変数を表示させる。次いで、仲裁者は、各変数の現在の値のフィールドに値を入れ、またはN/Aを入力してもよく、N/Aは、この値が重要ではないことを意味する。アレイの中の各要素は、別々に定義されなければならない。値が与えられていない任意の変数は、N/Aとして定義されると仮定される。入力/出力ポップアップメニュー内の出力ボタンの選択は、ファイルまたは変数を出力するポップアップメニューを表示させる。出力ファイルおよび変数は、入力ファイルまたは変数と類似した方式で記入される。全ての入力および出力変数が定義された後に、仲裁者は、起動のために開始カーネル/アルゴリズムを選択する。一実施形態では、仲裁者は、開始カーネル/アルゴリズムを左クリックし、その後にユーザインターフェース160内の開始ボタンを左クリックする。次いで、アルゴリズムは、開発サーバ108によって処理され、いったん完了すると、出力データは、入力された出力変数値と比較される。仲裁されたアルゴリズムは、あり得る全てのアルゴリズム経路が選択された時、および必要な値が各経路について取得された時に、辿られると考えられる。アルゴリズムは、そのアルゴリズム内で定義された全てのカーネルおよびアルゴリズムが成功裏に辿られ、安全と見なされる時に、辿られてもよい。危険コード判定MBD111は、試験されたソフトウェアソースコード3202が安全と見なされるかどうかを判定するように、追跡ファイル3208および欠落区分ファイル3212を分析する。欠落区分ファイル3212が、任意のコード区分を試験されていないものとして識別する場合、ソフトウェアソースコードは、安全と見なされない。追跡ファイル3208内で、任意の変数の現在のアドレスが、プログラム実行中に、その変数の割り当てられたアドレス範囲の外側にある場合に、ソフトウェアソースコード3202は、安全と見なされない。追跡ファイル3208内で、コード区分が、定義された最大時間を上回る全実行時間を有するものとして示される場合、ソフトウェアソースコード3202は、安全と見なされない。追跡ファイル3208内で、ルーピング区分を終了することなくルーピング区分の全実行時間の合計が、定義された最大時間を上回る場合に、ソフトウェアソースコードは、安全と見なされない。追跡ファイル3208内で、ソフトウェアソースコード3202の全実行時間が定義された最大時間を超える場合に、ソフトウェアコードは、安全と見なされない。追跡ファイル3208内で、それらに割り付けられたメモリを決して持たない、任意の割り付けられた変数がある場合に、ソフトウェアソースコード3202は、安全と見なされない。追跡ファイル3208内で、1つよりも多くのメモリ割付が、関数あたりの変数につき行われる場合に、ソフトウェアソースコード3202は、安全と見なされない。補助サービス図49は、開発者152、管理者158、および環境100を利用する組織154に補助サービスを提供する、随意的な補助リソースサーバ4902を伴う図1の環境100を示す。補助サービスは、司法サービス、技術文書サービス、言語翻訳サービス、会計サービス、グラフィックアートサービス、試験/デバッギングサービス、マーケティングサービス、ユーザ命令サービス等を含んでもよい。補助リソースサーバ4902はまた、開発者152と、環境100を利用する組織154との間に求人サービスを提供してもよい。補助リソースサーバ4902は、プログラム管理サーバ110、財務サーバ102、開発サーバ108、クラスタ112、およびデータベース106のうちの1つ以上と協働してもよく、かつ既存のサーバ内で実装されてもよく、または1つ以上の他のコンピュータサーバを利用してもよい。それにより、環境100は、補助リソースサーバ4902の包含を通して、ソーシャルネットワーキング機能を組織154、管理者158、および開発者152に提供してもよい。図49の実施例では、補助リソースサーバ4902は、組織1546またはより具体的には、組織1546の管理者158からサービス情報4904を受容するように、データベース106およびグラフィカルプロセス制御サーバ104と協働する。補助リソースサーバ4902は、組織1546に対する組織126の入力に関連して、データベース106の中のサービス情報表4906内にサービス情報4904を記憶する。サービス情報4904は、組織1546によって提供されるサービスを分類するキーワードを含んでもよい。実施例を続けると、別の組織1544は、グラフィカルプロセス制御サーバ104を介して、サービス要求4908を提出し、他の組織によって提供されるサービスを検索するように補助リソースサーバ4902に指図してもよい。サービス要求4908は、組織1544によって要求されたサービスと関連付けられる1つ以上のキーワードおよび/または1つ以上のカテゴリを特定してもよい。補助リソースサーバ4902は、サービス要求4908に基づいて、データベース106からサービス情報および関連組織情報を受容し、要求されたサービスを組織1544に提供する組織のリストを提示する。一実施形態では、サービス情報4904は、カーネル例えば、図2のカーネル204と同様のグラフィックとして提示されてもよい。図49の実施例を続けると、サービス要求4908が組織1546のキーワードまたは他のサービス情報4904に合致する場合、補助リソースサーバ4902は、合致サービスを提供する組織のリスト内に組織1546の情報を含む。次いで、組織1544より具体的には、組織1544の管理者158は、そのリストから1つ以上の組織を選択してもよく、そこから要求されたサービスの見積もりが求められる。次いで、補助リソースサーバ4902は、グラフィカルプロセス制御サーバ104を介して、サービス要求情報を提示し、および/または選択された組織この実施例では組織1546に送信する。選択された組織は、サービス要求を評価し、応答することを拒否または容認してもよい。図49の別の実施例では、組織1544および1545は、グラフィカルプロセス制御サーバ104を介して、それぞれ、任務の説明49201および49202を補助リソースサーバ4902に送信する。任務の説明4920は、提出組織154内に仕事の要件および/または地位を含む。補助リソースサーバ4902は、データベース106の任務説明表4922内に任務の説明4920を記憶する。環境100と関連する仕事を見つけることに関心がある開発者例えば、開発者1526および1527は、グラフィカルプロセス制御サーバ104を介して、履歴書例えば、それぞれ、履歴書49301および49302を補助リソースサーバ4902に提出してもよい。補助リソースサーバ4902は、データベース106の開発者情報表4932内に履歴書49301および49302を記憶する。次いで、各開発者152は、入力カテゴリおよび/または1つ以上のキーワードに基づいて任務の説明4922内で任務を検索するように、グラフィカルプロセス制御サーバ104を介して、補助リソースサーバ4902と相互作用してもよい。それに応じて、補助リソースサーバ4902は、グラフィカルプロセス制御サーバ104を介して、仕事を開発者に提供する組織例えば、組織1544および1545のリスト4934を表示してもよい。リスト4934上のこれらの組織のうちの1つ以上の開発者例えば、開発者1526による選択は、補助リソースサーバ4902によって受容され、開発者1526および任務の説明4922と関連してデータベース106内に記憶される。組織1544および1545の管理者158はそれぞれ、グラフィカルプロセス制御サーバ104を介して、組織リスト4934から組織を選択した開発者152の履歴書4930を評価するように、補助リソースサーバ4902と相互作用してもよい。図49の実施例では、開発者1526が組織リスト4934から組織1544を選択する場合、組織1544は、補助リソースサーバ4902から任務の説明49201への関心の通知を受容してもよい。組織1544は、任務の説明5021に応答した開発者152のリストを検討するように、グラフィカルプロセス制御サーバ104を介して補助リソースサーバ4902と相互作用してもよい。各記載された開発者の履歴書情報例えば、履歴書49301が検討されてもよく、0人、1人、またはそれ以上の開発者が、組織の管理者によって選択されてもよく、そうするとすぐに、関連開発者情報がデータベース106内のその組織と関連付けられる。例えば、組織1544の管理者158によって容認されると、開発者1526の情報は、組織1544と関連付けられ、開発者は、その組織の一員となる。その範囲から逸脱することなく、上記の方法およびシステムに変更が行われてもよい。したがって、上記の説明に含有される、または添付図面に示される事項は、限定的な意味ではなく例証的として解釈されるべきであることに留意されたい。以下の請求項は、本明細書で説明される全ての一般的および具体的特徴、ならびに、言語上、その間にあると考えられ得る、本方法およびシステムの範囲の全ての記述を対象とすることを目的とする。"