(57)【要約】      （修正有）【課題】ソースコードを数値識別子に変換しデータセットに対して比較する方法を提供する。【解決手段】システム及び方法が、入力コードを簡素化コードに変換し（１０８）、簡素化コードを使用してデータベース内のコードと比較できるスニペットを生成する（１１０）ことにより、入力コードの特性を識別する（１１２）。好ましくは、コードは、大文字使用の統一と、文字を除去することと、文字及びキーワードのうち少なくとも１つを識別子で置換することとのうち少なくとも１つにより簡素化される。【選択図】図４
2020053042.tif 000002
【特許請求の範囲】
【請求項１】
‐  （ｉ）大文字使用を統一することと、（ｉｉ）文字を除去することと、（ｉｉｉ）文字及びキーワードのうち少なくとも１つを識別子で置換することと、のうち少なくとも１つを実行することにより、入力ソースコードを簡素化して簡素化ソースコードを生成するステップと、
‐  前記簡素化ソースコードを使用して、コード行の内容を各々が表す複数の行ＩＤを生成するステップと、
‐  前記複数の行ＩＤを使用して、前記複数の行ＩＤのサブセットセットを表すスニペットを生成するステップと、
‐  前記スニペットをデータセット内のコードと比較することにより、前記入力ソースコードの特性を識別するステップと、
を含む方法。
【請求項２】
前記行ＩＤは、数値識別子である、請求項１に記載の方法。
【請求項３】
前記識別子は、改行コード及び新規行コードのうち少なくとも１つに対応する、請求項１に記載の方法。
【請求項４】
前記簡素化ソースコードは、（ｉ）閾文字量を定義することと、（ｉｉ）空行を削除することと、（ｉｉｉ）予め定義された閾文字量より少ない文字を有する行を削除することと、のうち少なくとも１つにより生成される、請求項１に記載の方法。
【請求項５】
文字及びキーワードのうち少なくとも１つは、改行コード及び新規行コードのうち少なくとも１つに対応する識別子で置換される、請求項４に記載の方法。
【請求項６】
定義された最小数の連続スニペット出現を検索するステップ、を含む請求項１に記載の方法。
【請求項７】
前記スニペットを生成すること及び所与の行リストに対する行ＩＤを生成することは双方、同一アルゴリズムを使用して実行される、請求項１に記載の方法。
【請求項８】
（ｉ）大文字使用を統一することと、（ｉｉ）文字を除去することと、（ｉｉｉ）文字及びキーワードのうち少なくとも１つを識別子で置換することと、のうち少なくとも１つにより、入力コードを簡素化コードへ変換するコーダユニットと、
（ｉ）前記簡素化ソースコードを使用して、コード行の内容を各々が表す複数の行ＩＤを生成し、（ｉｉ）行ＩＤのセットを各々が表す少なくとも１つのスニペットを生成し、（ｉｉｉ）前記生成された少なくとも１つのスニペットをデータセット内のコードと比較することにより、前記入力コードの特性を識別する比較ユニットと、
を含むデータシステム。
【請求項９】
前記行ＩＤは数値識別子である、請求項８に記載のシステム。
【請求項１０】
前記識別子は、改行コード及び新規行コードのうち少なくとも１つに対応する、請求項８に記載のシステム。
【請求項１１】
前記簡素化ソースコードは、（ｉ）閾文字量を定義することと、（ｉｉ）空行を削除することと、（ｉｉｉ）予め定義された閾文字量より少ない文字を有する行を削除することと、のうち少なくとも１つにより生成される、請求項８に記載のシステム。
【請求項１２】
文字及びキーワードのうち少なくとも１つは、改行コード及び新規行コードのうち少なくとも１つに対応する識別子で置換される、請求項１１に記載のシステム。
【請求項１３】
定義された最小数の連続スニペット出現を検索するステップ、を含む請求項８に記載のシステム。
【請求項１４】
前記スニペットを生成すること及び所与の行リストに対する行ＩＤを生成することは双方、同一アルゴリズムを使用して実行される、請求項８に記載のシステム。
【請求項１５】
コンピュータコードを複数の英数字ハッシュに変換する第１のモジュールであり、各ハッシュは前記コンピュータコードの行のサブセットを使用して作成される、第１のモジュールと、
前記複数の英数字ハッシュをデータベース内のデータと比較して前記コンピュータコードの特性を識別する第２のモジュールと、
を含むシステム。
【請求項１６】
前記コンピュータコードは入力コードの簡素化表現である、請求項１５に記載のシステム。
【請求項１７】
前記コンピュータコードの前記識別された特性は、前記コンピュータコードがフリーコンピュータコード又はオープンソースコンピュータコードのうち少なくとも１つであるかどうかである、請求項１５に記載のシステム。
【請求項１８】
前記第１のモジュールは、複数の第１のハッシュを作成し、各第１のハッシュは前記コンピュータコードのそれぞれの行を使用して作成され、複数の第２のハッシュを作成し、各第２のハッシュは前記第１のハッシュのそれぞれ異なるサブセットを使用して作成される、請求項１５に記載のシステム。
【請求項１９】
前記複数の第１のハッシュ及び前記複数の第２のハッシュは同一アルゴリズムを使用して作成される、請求項１５に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
本開示は、コード処理及びデータ技術に一般に関する。フリー及びオープンソースコード（Free  and  Open  Source  Code）の人気の高まりやライセンス順守に関する懸念の高まりは、所与のソースコードファイルにフリー及びオープンソースコードを含むことを識別する目的で、パブリックのフリー及びオープンソースコードを備えたデータベースを構築する必要に至っている。
【０００２】
既存の従来技術の解決策では、大量の利用可能なフリー及びオープンソースコードの理由で、インデックス化及び記憶は、データベースフットプリント及び検索性能に起因して大きな挑戦を意味している。さらに、データベースに記憶されるフリー及びオープンソースコードの大規模な複製がそのそれぞれのライセンス条件と衝突する可能性があり、ソースコードを解析するタスクはデリケートな事項である。
【０００３】
［関連出願の相互参照］
適用無し
【発明の概要】
【０００４】
以下の簡素化された要約は、本開示で説明される種々の発明実施形態のいくつかの態様の基本理解のために提供される。要約は、本開示の広い概観ではない。請求される発明の重要又は重大な要素を識別することは意図されず、発明の範囲を概説することも意図されない。以下の要約は、本開示で説明される実施形態で用いられるいくつかの概念を、これらのより詳細な説明への前置きとして簡素化された形式で提示するに過ぎない。
【０００５】
本開示で説明されるいくつかの実施形態の目的は、任意のプログラミング言語からのソースコードテキストを個々のソースコード行について一連の数値識別子に変換し、これらの識別子を比較して他のソースコードファイルからの行のサブセットに対する一致を発見するシステム及び方法をアレンジすることである。これは、ソースコードを象徴的識別子に変換し、データセットに対して比較する方法により達成され、当該方法において、ソースコードが入力コードとして使用される。当該方法において、以下の方法ステップ、すなわち、大文字使用を統一することによってと、文字を除去することによってと、文字及びキーワードのうち少なくとも１つを識別子で置換することによってと、のうち少なくとも１つを使用することにより、簡素化ソースコードが出力として生成される。当該方法において、最小の連続行識別子セットが生成され、上記最小の連続行の識別子のセットはスニペットであり、データセット内で出現が発見され、該出現は、特定のデータセット内の特定範囲の行識別子に一致する。
【０００６】
本開示で説明されるいくつかの実施形態の焦点はまた、ソースコードを象徴的識別子に変換し、データセットに対して比較するデータシステムである。当該データシステムにおいて、ソースコードが入力コードである。当該データシステムは、簡素化ソースコードを出力として生成するコーダユニットを含み、該コーダユニットは、大文字使用の統一と、文字の除去と、文字及びキーワードのうち少なくとも１つの、識別子での置換と、のうち少なくとも１つを実行するように構成され、当該データシステムは、比較ユニットを含み、該比較ユニットは、最小の連続行識別子セットを生成することであって上記最小の連続行の識別子のセットはスニペットであり、データセット内の出現を発見する、ように構成され、該出現は、特定のデータセット内の特定範囲の行識別子に一致する。
【０００７】
本明細書で説明される実施形態は、以下の方法ステップ、すなわち、大文字使用を統一することによってと、文字を除去することによってと、文字及びキーワードのうち少なくとも１つを識別子で置換することによってと、のうち少なくとも１つを使用することによる、出力としての簡素化ソースコードの生成に基づいてもよい。本明細書で説明される実施形態は、一致を生じる最小の連続行識別子セットを生成することによる、データセットに対する識別子の比較にさらに基づいてもよい。
【０００８】
本明細書で説明される実施形態の利点は、これらがソフトウェアの比較を、その数値識別子を比較することにより、起源（originating）ソースコードを有することなく可能にし得ることであり得る。また、数値識別子のみ記憶する必要により、データフットプリントが削減される。さらに、検索をほぼ完全にバランスのとれたインデックスを有するデータセットに対する固定長数値比較へ削減させることにより、データベース検索が簡素化される。
【０００９】
発明の前述及び他の目的、特徴、及び利点は、添付の図面と関連して以下の発明の詳細な説明を検討するとより容易に理解されるであろう。
【図面の簡単な説明】
【００１０】
本開示の例示的及び非限定的な実施形態並びにその利点が、添付の図面を参照して以下により詳細に説明される。
【図１】本開示の例示的及び非限定的な実施形態による、ソースコードテキストの簡素化の処理を示す。
【図２】本開示の例示的及び非限定的な実施形態による、図１の簡素化コードテキストの行識別子の生成の処理を示す。
【図３】本開示の例示的及び非限定的な実施形態による、図２に示すソースコードに対するスニペットｉｄを示す。
【図４】本開示の例示的及び非限定的な実施形態による、システムフローチャートを示す。
【発明を実施するための形態】
【００１１】
本明細書で説明される実施形態は、データセットに対するソースコードの比較を、起源ソースコードのコピーをこれらのデータセットについて有することなく可能にする。これらの実施形態はまた、行ＩＤ生成とデータベース検索とが異なる位置に分離されることを可能にする。したがって、データベース検索の個々の実行は、比較されるコードへのアクセスを必要とせず、生成された行ＩＤへのアクセスのみ必要とする。この論理的隔離は、起源コード又は比較が行われる起源ソースコードのいずれにもアクセスすることなくデータベース検索が行われることを可能にする。
【００１２】
さらに、本明細書で説明される実施形態は、大きいデータセットから（ソースコードでなく）スニペットＩＤのみ保存することによる記憶フットプリントの削減、並びに検索が固定長のバランスのとれたインデックスに対して実行される事実に起因した処理時間の削減及び高速な検索応答を可能にし、これは、暗号ハッシュアルゴリズムにより提供される一様なデータ分布性質の結果である。
【００１３】
用語「大きいデータセット」は、１０億超のレコードを、さらには最大数兆の結果をも有するデータセットを含むことが意図される。本明細書で説明される実施形態はより小さいデータセットで利用されてもよく、ゆえに、データセットのサイズは制限的ファクタでない。
【００１４】
ソースコードテキストは数値識別子に変換でき、コーディング慣習、表作成、及びソースコードテキスト内の他のシンタックス差における変化への許容と共に、異なるソースコードファイル間の迅速な比較を可能にする。結果として生じる数値識別子は、元のソースコードへ逆変換できない。この方法は、識別子を比較することにより、起源ソースコードテキストを保有する必要なくソースコード一致を発見することを可能にする。
【００１５】
本明細書で説明される実施形態は、例えば、前に記憶されたソースコード行識別子の大きいデータベースに対する、ソースコードの迅速かつ効率的な比較を達成する。本明細書で説明されるいくつかの実施形態は、３つのステップ、すなわち、簡素化、識別子の生成、及び比較を実行することができる。
【００１６】
数値識別子の生成は、２つのステップ、すなわち、簡素化及び識別を含むことができる。簡素化ステップは、好ましくは、テキストを、ソースコードインデントにおける変化、コーディング慣習における変化、空行若しくはスペース、無関係なテキストの包含若しくは除外、又はソースコード命令の大文字使用における変化にかかわらずソースコード一致の発見を可能にする中立状態へ変換する。
【００１７】
簡素化は、元のソースコードを入力として取得し、一連のルールを適用することにより簡素化ソースコードを出力として生成する。これらのルールは、ａ）大文字使用を統一すること、ｂ）特定の文字又はキーワードの置換、ｃ）特定の文字又はキーワード（行セパレータ）のchr(10)との置換であって、該chr(10)は改行又は新規行に対応する、及びｄ）空行又は予め定義された閾より少ない文字を有する行の削除、に分けられる。
【００１８】
結果として生じる簡素化コードは、各行内に最小量のコードを含む。例えば、Ｃプログラミング言語の簡素構成を、括弧及びセミコロン（｛｝；）のみをセパレータとして使用し、１バイトの空行閾でいかなるテキスト置換も行わないと仮定すると、ソースコードは、図１に示されるように変換される。
【００１９】
すでに簡素化されたソースコード行に対して固定長識別子を生成することにより、識別が実行される。識別子データの均等分布を保証するために、暗号ハッシュアルゴリズムが選択され、結果として生じるハッシュ（又はその一部）が、行識別子として使用される。
【００２０】
例えば、ＭＤ５ハッシュアルゴリズムが使用され、行ＩＤ長が３６ビットであるよう選ばれるという条件で、図２に、前の例についての行識別子が示される。元のソースコードに対して結果として生じる行ＩＤのリストは、したがって、以下のとおりである。
28dcdbf4140356bd08e6a0916af6eb265da18ecc79b23c9a6d998a9308eae7ae3855004e
【００２１】
この例示的な場合において、行ＩＤ識別子として選ばれた３６ビットは約６８０億個の可能なＩＤを提供し、これは明らかに、大量のデータにおける衝突を結果としてもたらすことになる。しかしながら、衝突は、データ比較方法により解決される。
【００２２】
ソースコード数値識別子の比較ステップにおいて、一致を生じるために最小の連続行セットが設定されるべきである。この行セットは、スニペットと呼ばれる。最小の連続スニペット数が、最終的な行ＩＤ衝突から誤った一致を破棄するために、一致を生じるための閾として定義される。
【００２３】
本明細書で説明される実施形態において、誤った識別は回避できる。固定長行識別子に対して選ばれたビット量が（Ｗ）と呼ばれ、必要とされる最小の行一致数が（Ｎ）と呼ばれる場合、Ｗが小さいほど、偽陽性の識別を防止するためにはＮがより大きくなければならない。具体的に、Ｗがより小さくなるほど、衝突（すなわち、異なる行が同じ識別子を有すること）になる可能性がより高くなる。これは、さらなる連続行がデータベース内の同じファイルと一致することを必要とすることにより、緩和できる。複数の連続行が衝突する機会は、Ｎの値が増やされると指数関数的に減少する。
【００２４】
ソースコードを比較する方法は、３つのステップ、すなわち、スニペットＩＤを生成することと、最小のＸ個の連続スニペットＩＤ出現を検索することと、最多の一致を有するファイルを選択することと、により構成される。
【００２５】
スニペット識別（ＩＤ）の生成は、所与の行ＩＤリストに対して、行ＩＤを生成するのと同じアルゴリズムを適用することにより実行できる。例えば、図１のソースコードを所与とし、５行のスニペットサイズを検討すると、第１のスニペットに対する行ＩＤは、最初の５つの行ＩＤの連結：28dcdbf4140356bd08e6a0916af6eb265da18ecc79b23になる。その文字列のＭＤ５ハッシュは36d8faf00c3d3d1fd6065737b0c4cf8fであり、ここで、そのＭＤ５ハッシュの最初の３６ビットは36d8faf00であり、これが第１のスニペットＩＤである。
【００２６】
図３は、図２に示すソースコードの４つの順次的スニペットに対するスニペットＩＤを示し、各スニペットは５行のコードを有する。
【００２７】
検索は、データベースが、検索が実行されることになるソースコードのスニペットＩＤを、起源ソースコードファイルからの対応するメタデータと共にロードされていることを仮定する。このデータベースは、元のソースコードを含む必要はなく、代わりにスニペットＩＤ及び起源コードからのメタデータだけ必要とすることに留意する。該メタデータは、これらに限られないが、ファイル名、起源ソースコード位置、コンポーネント／成果物（artifact）名等を含む。
【００２８】
データベースの検索は、好ましくは、スニペットＩＤを探索し、データベースから各スニペットＩＤに一致するファイルＩＤのリストを収集することにより実行される。所望の連続スニペット一致出現数（Ｘ）より少ない出現数を有するファイルは、好ましくは破棄される。結果は、好ましくは、最高から最低のスニペット一致出現数によりソートされてもよい。
【００２９】
図４は、本開示の例示的及び非限定的な実施形態によるシステム及びフローチャートを示す。システムは、好ましくは、コーダユニット１００と、データベース１０４に動作上接続され又は接続可能な比較ユニット１０２とを含む。コーダユニットは、ステップ１０６において入力ソースコードを受信し、ステップ１０８において入力ソースコードを比較ユニット１０２への出力として簡素化ソースコードに変換するように構成される。コーダ１００ユニットは、以下の機能、すなわち、大文字使用の統一と、文字の除去と、文字及びキーワードのうち少なくとも１つの、識別子での置換と、のうち少なくとも１つを実行するように構成される。データシステムは、文字及びキーワードのうち少なくとも１つを識別子としてchr(10)で置換するように構成でき、該chr(10)は、改行コード及び新規行コードのうち少なくとも１つに対応する。識別子は、数値識別子でもよい。識別子は、改行コード及び新規行コードのうち少なくとも１つに対応するように構成できる。
【００３０】
比較ユニット１０２は、簡素化ソースコードを受信し、ステップ１１０においてそのコードを使用して、前に説明された方法で、最小のスニペットＩＤセット、すなわち、連続番号のコード化行識別子の順次的なそれぞれのセットを各々表す英数字コードを生成する。比較ユニットは、ステップ１１２において、前に生成されたスニペットをデータベース１０４に記憶されたコード化データ内のスニペットと比較して、データベース内のいかなる一致コードも識別する。比較ユニット１０２は、好ましくは、最多の一致を有するデータセットを出力し、かつ／あるいは記憶する。
【００３１】
当業者は、図４に示すシステムに対して代替的な実施形態又は変形が容易に実現されることを理解するであろう。例えば、いくつかの実施形態において、コーダユニット１００はさらに、入力から簡素化コードを生成することに追加で、そのコードのスニペットを生成し、生成されたスニペットのスニペットＩＤを生成し、これらのスニペットＩＤを比較ユニットに転送してもよく、比較ユニットは今度は、こうしたＩＤのデータベース１０４内のＩＤとの比較を単に実行する。
【００３２】
行識別子の生成は、結果として生じる簡素化コードの各行について数値識別子を計算することにより実行できる。暗号ハッシュ又はその一部を使用することにより、簡素化コードの各行についての指紋又は識別（ＩＤ）として、固定長識別子が生成される。
【００３３】
本発明による例示的な実施形態において、比較は、行識別子をデータベースに記憶された行識別子と比較することにより実行できる。合致又は一致は、最小数の連続行識別子が一致したとき、発見できる。
【００３４】
１つの例示的な実施形態において、データシステムは、閾文字量を定義し、空行及び予め定義された閾文字量より少ない文字を有する行を削除するように構成できる。「閾文字量」により、閾として最小文字数を定義することが意図され、閾未満では、行は完全に無視される。換言すれば、コード簡素化を実行した後、行がＸ文字より少ない場合、行は単に無視される。さらに、データシステムは、定義された最小数の連続スニペット出現を検索するように構成できる。
【００３５】
図４のシステム及びフローチャートにおいて、本開示の１つの好適な実施形態による主な動作は、ソースコードを入力として受信し、簡素化ソースコードを生成し、最小の連続行識別子セットを生成し、特定のデータファイル内の特定範囲の行識別子に一致する既存のデータセット内の出現を発見することである。
【００３６】
データシステムは、所与の行リストに対して、行識別子を生成するのと同じアルゴリズムを適用することにより、スニペットを生成するように構成できる。データシステム、例えばコーダユニット１００及び比較ユニット１０２は、例えば、プロセッサベースのコンピュータ及びマイクロプロセッサ手法により実現されて、アルゴリズムを使用し、本発明による方法を実現することができる。
【００３７】
上記で与えられた説明で提供される特定の例は、別記の特許請求の範囲の範囲及び／又は適用性を限定するものとみなされるべきではない。
【００３８】
前述の詳細で採用された用語及び表現は本明細書において限定でなく説明の用語として用いらており、こうした用語及び表現の使用には、図示及び説明された特徴又はその一部の均等物を除外する意図はない。発明の範囲は別記する特許請求の範囲によってのみ定義及び限定されることが認識される。
【図１】
2020053042.tif 000003
【図２】
2020053042.tif 000004
【図３】
2020053042.tif 000005
【図４】
2020053042.tif 000006
【外国語明細書】
2020053042000001.pdf