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

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

▶ フォッシド アーベーの特許一覧

特許7412935ソースコードを数値識別子に変換しデータセットに対して比較する方法
<>
  • 特許-ソースコードを数値識別子に変換しデータセットに対して比較する方法 図1
  • 特許-ソースコードを数値識別子に変換しデータセットに対して比較する方法 図2
  • 特許-ソースコードを数値識別子に変換しデータセットに対して比較する方法 図3
  • 特許-ソースコードを数値識別子に変換しデータセットに対して比較する方法 図4
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-04
(45)【発行日】2024-01-15
(54)【発明の名称】ソースコードを数値識別子に変換しデータセットに対して比較する方法
(51)【国際特許分類】
   G06F 8/75 20180101AFI20240105BHJP
【FI】
G06F8/75
【請求項の数】 12
【外国語出願】
(21)【出願番号】P 2019169213
(22)【出願日】2019-09-18
(65)【公開番号】P2020053042
(43)【公開日】2020-04-02
【審査請求日】2022-09-08
(31)【優先権主張番号】16/141,613
(32)【優先日】2018-09-25
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】519338223
【氏名又は名称】スニーク スウェーデン アーベー
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100091214
【弁理士】
【氏名又は名称】大貫 進介
(72)【発明者】
【氏名】コッチャ,ユリアン
【審査官】坂庭 剛史
(56)【参考文献】
【文献】米国特許出願公開第2017/0032117(US,A1)
【文献】特表2016-508641(JP,A)
【文献】米国特許第08498982(US,B1)
【文献】米国特許出願公開第2010/0242028(US,A1)
【文献】村上寛明 ほか,"Smith-Watermanアルゴリズムを利用したギャップを含むコードクローン検出",情報処理学会 論文誌(ジャーナル),日本,情報処理学会,2014年,Vol.55,No.2,p.981-993
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/70-8/77
(57)【特許請求の範囲】
【請求項1】
‐ (i)大文字使用を統一することと、(ii)文字を除去することと、(iii)文字及びキーワードのうち少なくとも1つを識別子で置換することと、のうち少なくとも1つを実行することにより、入力ソースコードを簡素化して簡素化ソースコードを生成するステップと、
‐ 前記簡素化ソースコードを使用して、コード行の内容を各々が表す複数の行IDを生成するステップと、
‐ 前記複数の行IDを使用して、前記複数の行IDのサブセットを表すスニペットを生成するステップと、
‐ 前記スニペットをデータセット内のコードと比較することにより、前記入力ソースコードの特性を識別するステップであって、前記スニペットをデータセット内のコードと比較することは、定義された最小数の連続スニペット出現を検索することを含む、ステップと、
を含む方法。
【請求項2】
前記行IDは、数値識別子である、請求項1に記載の方法。
【請求項3】
前記識別子は、改行コード及び新規行コードのうち少なくとも1つに対応する、請求項1に記載の方法。
【請求項4】
前記簡素化ソースコードは、(i)閾文字量を定義することと、(ii)空行を削除することと、(iii)予め定義された閾文字量より少ない文字を有する行を削除することと、のうち少なくとも1つにより生成される、請求項1に記載の方法。
【請求項5】
文字及びキーワードのうち少なくとも1つは、改行コード及び新規行コードのうち少なくとも1つに対応する識別子で置換される、請求項4に記載の方法。
【請求項6】
前記スニペットを生成すること及び所与の行リストに対する行IDを生成することは双方、同一アルゴリズムを使用して実行される、請求項1に記載の方法。
【請求項7】
(i)大文字使用を統一することと、(ii)文字を除去することと、(iii)文字及びキーワードのうち少なくとも1つを識別子で置換することと、のうち少なくとも1つにより、入力コードを簡素化コードへ変換するコーダユニットと、
(i)前記簡素化コードを使用して、コード行の内容を各々が表す複数の行IDを生成し、(ii)行IDのセットを各々が表す少なくとも1つのスニペットを生成し、(iii)前記生成された少なくとも1つのスニペットをデータセット内のコードと比較することにより、前記入力コードの特性を識別する比較ユニットであって、前記生成された少なくとも1つのスニペットをデータセット内のコードと比較することは、定義された最小数の連続スニペット出現を検索することを含む、比較ユニットと、
を含むデータシステム。
【請求項8】
前記行IDは数値識別子である、請求項に記載のシステム。
【請求項9】
前記識別子は、改行コード及び新規行コードのうち少なくとも1つに対応する、請求項に記載のシステム。
【請求項10】
前記簡素化コードは、(i)閾文字量を定義することと、(ii)空行を削除することと、(iii)予め定義された閾文字量より少ない文字を有する行を削除することと、のうち少なくとも1つにより生成される、請求項に記載のシステム。
【請求項11】
文字及びキーワードのうち少なくとも1つは、改行コード及び新規行コードのうち少なくとも1つに対応する識別子で置換される、請求項10に記載のシステム。
【請求項12】
前記少なくとも1つのスニペットを生成すること及び所与の行リストに対する行IDを生成することは双方、同一アルゴリズムを使用して実行される、請求項に記載のシステム。
【発明の詳細な説明】
【背景技術】
【0001】
本開示は、コード処理及びデータ技術に一般に関する。フリー及びオープンソースコード(Free and Open Source Code)の人気の高まりやライセンス順守に関する懸念の高まりは、所与のソースコードファイルにフリー及びオープンソースコードを含むことを識別する目的で、パブリックのフリー及びオープンソースコードを備えたデータベースを構築する必要に至っている。
【0002】
既存の従来技術の解決策では、大量の利用可能なフリー及びオープンソースコードの理由で、インデックス化及び記憶は、データベースフットプリント及び検索性能に起因して大きな挑戦を意味している。さらに、データベースに記憶されるフリー及びオープンソースコードの大規模な複製がそのそれぞれのライセンス条件と衝突する可能性があり、ソースコードを解析するタスクはデリケートな事項である。
【0003】
[関連出願の相互参照]
適用無し
【発明の概要】
【0004】
以下の簡素化された要約は、本開示で説明される種々の発明実施形態のいくつかの態様の基本理解のために提供される。要約は、本開示の広い概観ではない。請求される発明の重要又は重大な要素を識別することは意図されず、発明の範囲を概説することも意図されない。以下の要約は、本開示で説明される実施形態で用いられるいくつかの概念を、これらのより詳細な説明への前置きとして簡素化された形式で提示するに過ぎない。
【0005】
本開示で説明されるいくつかの実施形態の目的は、任意のプログラミング言語からのソースコードテキストを個々のソースコード行について一連の数値識別子に変換し、これらの識別子を比較して他のソースコードファイルからの行のサブセットに対する一致を発見するシステム及び方法をアレンジすることである。これは、ソースコードを象徴的識別子に変換し、データセットに対して比較する方法により達成され、当該方法において、ソースコードが入力コードとして使用される。当該方法において、以下の方法ステップ、すなわち、大文字使用を統一することによってと、文字を除去することによってと、文字及びキーワードのうち少なくとも1つを識別子で置換することによってと、のうち少なくとも1つを使用することにより、簡素化ソースコードが出力として生成される。当該方法において、最小の連続行識別子セットが生成され、上記最小の連続行の識別子のセットはスニペットであり、データセット内で出現が発見され、該出現は、特定のデータセット内の特定範囲の行識別子に一致する。
【0006】
本開示で説明されるいくつかの実施形態の焦点はまた、ソースコードを象徴的識別子に変換し、データセットに対して比較するデータシステムである。当該データシステムにおいて、ソースコードが入力コードである。当該データシステムは、簡素化ソースコードを出力として生成するコーダユニットを含み、該コーダユニットは、大文字使用の統一と、文字の除去と、文字及びキーワードのうち少なくとも1つの、識別子での置換と、のうち少なくとも1つを実行するように構成され、当該データシステムは、比較ユニットを含み、該比較ユニットは、最小の連続行識別子セットを生成することであって上記最小の連続行の識別子のセットはスニペットであり、データセット内の出現を発見する、ように構成され、該出現は、特定のデータセット内の特定範囲の行識別子に一致する。
【0007】
本明細書で説明される実施形態は、以下の方法ステップ、すなわち、大文字使用を統一することによってと、文字を除去することによってと、文字及びキーワードのうち少なくとも1つを識別子で置換することによってと、のうち少なくとも1つを使用することによる、出力としての簡素化ソースコードの生成に基づいてもよい。本明細書で説明される実施形態は、一致を生じる最小の連続行識別子セットを生成することによる、データセットに対する識別子の比較にさらに基づいてもよい。
【0008】
本明細書で説明される実施形態の利点は、これらがソフトウェアの比較を、その数値識別子を比較することにより、起源(originating)ソースコードを有することなく可能にし得ることであり得る。また、数値識別子のみ記憶する必要により、データフットプリントが削減される。さらに、検索をほぼ完全にバランスのとれたインデックスを有するデータセットに対する固定長数値比較へ削減させることにより、データベース検索が簡素化される。
【0009】
発明の前述及び他の目的、特徴、及び利点は、添付の図面と関連して以下の発明の詳細な説明を検討するとより容易に理解されるであろう。
【図面の簡単な説明】
【0010】
本開示の例示的及び非限定的な実施形態並びにその利点が、添付の図面を参照して以下により詳細に説明される。
図1】本開示の例示的及び非限定的な実施形態による、ソースコードテキストの簡素化の処理を示す。
図2】本開示の例示的及び非限定的な実施形態による、図1の簡素化コードテキストの行識別子の生成の処理を示す。
図3】本開示の例示的及び非限定的な実施形態による、図2に示すソースコードに対するスニペットidを示す。
図4】本開示の例示的及び非限定的な実施形態による、システムフローチャートを示す。
【発明を実施するための形態】
【0011】
本明細書で説明される実施形態は、データセットに対するソースコードの比較を、起源ソースコードのコピーをこれらのデータセットについて有することなく可能にする。これらの実施形態はまた、行ID生成とデータベース検索とが異なる位置に分離されることを可能にする。したがって、データベース検索の個々の実行は、比較されるコードへのアクセスを必要とせず、生成された行IDへのアクセスのみ必要とする。この論理的隔離は、起源コード又は比較が行われる起源ソースコードのいずれにもアクセスすることなくデータベース検索が行われることを可能にする。
【0012】
さらに、本明細書で説明される実施形態は、大きいデータセットから(ソースコードでなく)スニペットIDのみ保存することによる記憶フットプリントの削減、並びに検索が固定長のバランスのとれたインデックスに対して実行される事実に起因した処理時間の削減及び高速な検索応答を可能にし、これは、暗号ハッシュアルゴリズムにより提供される一様なデータ分布性質の結果である。
【0013】
用語「大きいデータセット」は、10億超のレコードを、さらには最大数兆の結果をも有するデータセットを含むことが意図される。本明細書で説明される実施形態はより小さいデータセットで利用されてもよく、ゆえに、データセットのサイズは制限的ファクタでない。
【0014】
ソースコードテキストは数値識別子に変換でき、コーディング慣習、表作成、及びソースコードテキスト内の他のシンタックス差における変化への許容と共に、異なるソースコードファイル間の迅速な比較を可能にする。結果として生じる数値識別子は、元のソースコードへ逆変換できない。この方法は、識別子を比較することにより、起源ソースコードテキストを保有する必要なくソースコード一致を発見することを可能にする。
【0015】
本明細書で説明される実施形態は、例えば、前に記憶されたソースコード行識別子の大きいデータベースに対する、ソースコードの迅速かつ効率的な比較を達成する。本明細書で説明されるいくつかの実施形態は、3つのステップ、すなわち、簡素化、識別子の生成、及び比較を実行することができる。
【0016】
数値識別子の生成は、2つのステップ、すなわち、簡素化及び識別を含むことができる。簡素化ステップは、好ましくは、テキストを、ソースコードインデントにおける変化、コーディング慣習における変化、空行若しくはスペース、無関係なテキストの包含若しくは除外、又はソースコード命令の大文字使用における変化にかかわらずソースコード一致の発見を可能にする中立状態へ変換する。
【0017】
簡素化は、元のソースコードを入力として取得し、一連のルールを適用することにより簡素化ソースコードを出力として生成する。これらのルールは、a)大文字使用を統一すること、b)特定の文字又はキーワードの置換、c)特定の文字又はキーワード(行セパレータ)のchr(10)との置換であって、該chr(10)は改行又は新規行に対応する、及びd)空行又は予め定義された閾より少ない文字を有する行の削除、に分けられる。
【0018】
結果として生じる簡素化コードは、各行内に最小量のコードを含む。例えば、Cプログラミング言語の簡素構成を、括弧及びセミコロン({};)のみをセパレータとして使用し、1バイトの空行閾でいかなるテキスト置換も行わないと仮定すると、ソースコードは、図1に示されるように変換される。
【0019】
すでに簡素化されたソースコード行に対して固定長識別子を生成することにより、識別が実行される。識別子データの均等分布を保証するために、暗号ハッシュアルゴリズムが選択され、結果として生じるハッシュ(又はその一部)が、行識別子として使用される。
【0020】
例えば、MD5ハッシュアルゴリズムが使用され、行ID長が36ビットであるよう選ばれるという条件で、図2に、前の例についての行識別子が示される。元のソースコードに対して結果として生じる行IDのリストは、したがって、以下のとおりである。
28dcdbf4140356bd08e6a0916af6eb265da18ecc79b23c9a6d998a9308eae7ae3855004e
【0021】
この例示的な場合において、行ID識別子として選ばれた36ビットは約680億個の可能なIDを提供し、これは明らかに、大量のデータにおける衝突を結果としてもたらすことになる。しかしながら、衝突は、データ比較方法により解決される。
【0022】
ソースコード数値識別子の比較ステップにおいて、一致を生じるために最小の連続行セットが設定されるべきである。この行セットは、スニペットと呼ばれる。最小の連続スニペット数が、最終的な行ID衝突から誤った一致を破棄するために、一致を生じるための閾として定義される。
【0023】
本明細書で説明される実施形態において、誤った識別は回避できる。固定長行識別子に対して選ばれたビット量が(W)と呼ばれ、必要とされる最小の行一致数が(N)と呼ばれる場合、Wが小さいほど、偽陽性の識別を防止するためにはNがより大きくなければならない。具体的に、Wがより小さくなるほど、衝突(すなわち、異なる行が同じ識別子を有すること)になる可能性がより高くなる。これは、さらなる連続行がデータベース内の同じファイルと一致することを必要とすることにより、緩和できる。複数の連続行が衝突する機会は、Nの値が増やされると指数関数的に減少する。
【0024】
ソースコードを比較する方法は、3つのステップ、すなわち、スニペットIDを生成することと、最小のX個の連続スニペットID出現を検索することと、最多の一致を有するファイルを選択することと、により構成される。
【0025】
スニペット識別(ID)の生成は、所与の行IDリストに対して、行IDを生成するのと同じアルゴリズムを適用することにより実行できる。例えば、図1のソースコードを所与とし、5行のスニペットサイズを検討すると、第1のスニペットに対する行IDは、最初の5つの行IDの連結:28dcdbf4140356bd08e6a0916af6eb265da18ecc79b23になる。その文字列のMD5ハッシュは36d8faf00c3d3d1fd6065737b0c4cf8fであり、ここで、そのMD5ハッシュの最初の36ビットは36d8faf00であり、これが第1のスニペットIDである。
【0026】
図3は、図2に示すソースコードの4つの順次的スニペットに対するスニペットIDを示し、各スニペットは5行のコードを有する。
【0027】
検索は、データベースが、検索が実行されることになるソースコードのスニペットIDを、起源ソースコードファイルからの対応するメタデータと共にロードされていることを仮定する。このデータベースは、元のソースコードを含む必要はなく、代わりにスニペットID及び起源コードからのメタデータだけ必要とすることに留意する。該メタデータは、これらに限られないが、ファイル名、起源ソースコード位置、コンポーネント/成果物(artifact)名等を含む。
【0028】
データベースの検索は、好ましくは、スニペットIDを探索し、データベースから各スニペットIDに一致するファイルIDのリストを収集することにより実行される。所望の連続スニペット一致出現数(X)より少ない出現数を有するファイルは、好ましくは破棄される。結果は、好ましくは、最高から最低のスニペット一致出現数によりソートされてもよい。
【0029】
図4は、本開示の例示的及び非限定的な実施形態によるシステム及びフローチャートを示す。システムは、好ましくは、コーダユニット100と、データベース104に動作上接続され又は接続可能な比較ユニット102とを含む。コーダユニットは、ステップ106において入力ソースコードを受信し、ステップ108において入力ソースコードを比較ユニット102への出力として簡素化ソースコードに変換するように構成される。コーダ100ユニットは、以下の機能、すなわち、大文字使用の統一と、文字の除去と、文字及びキーワードのうち少なくとも1つの、識別子での置換と、のうち少なくとも1つを実行するように構成される。データシステムは、文字及びキーワードのうち少なくとも1つを識別子としてchr(10)で置換するように構成でき、該chr(10)は、改行コード及び新規行コードのうち少なくとも1つに対応する。識別子は、数値識別子でもよい。識別子は、改行コード及び新規行コードのうち少なくとも1つに対応するように構成できる。
【0030】
比較ユニット102は、簡素化ソースコードを受信し、ステップ110においてそのコードを使用して、前に説明された方法で、最小のスニペットIDセット、すなわち、連続番号のコード化行識別子の順次的なそれぞれのセットを各々表す英数字コードを生成する。比較ユニットは、ステップ112において、前に生成されたスニペットをデータベース104に記憶されたコード化データ内のスニペットと比較して、データベース内のいかなる一致コードも識別する。比較ユニット102は、好ましくは、最多の一致を有するデータセットを出力し、かつ/あるいは記憶する。
【0031】
当業者は、図4に示すシステムに対して代替的な実施形態又は変形が容易に実現されることを理解するであろう。例えば、いくつかの実施形態において、コーダユニット100はさらに、入力から簡素化コードを生成することに追加で、そのコードのスニペットを生成し、生成されたスニペットのスニペットIDを生成し、これらのスニペットIDを比較ユニットに転送してもよく、比較ユニットは今度は、こうしたIDのデータベース104内のIDとの比較を単に実行する。
【0032】
行識別子の生成は、結果として生じる簡素化コードの各行について数値識別子を計算することにより実行できる。暗号ハッシュ又はその一部を使用することにより、簡素化コードの各行についての指紋又は識別(ID)として、固定長識別子が生成される。
【0033】
本発明による例示的な実施形態において、比較は、行識別子をデータベースに記憶された行識別子と比較することにより実行できる。合致又は一致は、最小数の連続行識別子が一致したとき、発見できる。
【0034】
1つの例示的な実施形態において、データシステムは、閾文字量を定義し、空行及び予め定義された閾文字量より少ない文字を有する行を削除するように構成できる。「閾文字量」により、閾として最小文字数を定義することが意図され、閾未満では、行は完全に無視される。換言すれば、コード簡素化を実行した後、行がX文字より少ない場合、行は単に無視される。さらに、データシステムは、定義された最小数の連続スニペット出現を検索するように構成できる。
【0035】
図4のシステム及びフローチャートにおいて、本開示の1つの好適な実施形態による主な動作は、ソースコードを入力として受信し、簡素化ソースコードを生成し、最小の連続行識別子セットを生成し、特定のデータファイル内の特定範囲の行識別子に一致する既存のデータセット内の出現を発見することである。
【0036】
データシステムは、所与の行リストに対して、行識別子を生成するのと同じアルゴリズムを適用することにより、スニペットを生成するように構成できる。データシステム、例えばコーダユニット100及び比較ユニット102は、例えば、プロセッサベースのコンピュータ及びマイクロプロセッサ手法により実現されて、アルゴリズムを使用し、本発明による方法を実現することができる。
【0037】
上記で与えられた説明で提供される特定の例は、別記の特許請求の範囲の範囲及び/又は適用性を限定するものとみなされるべきではない。
【0038】
前述の詳細で採用された用語及び表現は本明細書において限定でなく説明の用語として用いらており、こうした用語及び表現の使用には、図示及び説明された特徴又はその一部の均等物を除外する意図はない。発明の範囲は別記する特許請求の範囲によってのみ定義及び限定されることが認識される。
図1
図2
図3
図4