JP2019032688A - ソースコード解析装置、ソースコード解析方法及びソースコード解析プログラム - Google Patents

ソースコード解析装置、ソースコード解析方法及びソースコード解析プログラム Download PDF

Info

Publication number
JP2019032688A
JP2019032688A JP2017153064A JP2017153064A JP2019032688A JP 2019032688 A JP2019032688 A JP 2019032688A JP 2017153064 A JP2017153064 A JP 2017153064A JP 2017153064 A JP2017153064 A JP 2017153064A JP 2019032688 A JP2019032688 A JP 2019032688A
Authority
JP
Japan
Prior art keywords
pair
source code
elements
partial
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2017153064A
Other languages
English (en)
Inventor
圭佑 堀田
Keisuke Hotta
圭佑 堀田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2017153064A priority Critical patent/JP2019032688A/ja
Publication of JP2019032688A publication Critical patent/JP2019032688A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】コードクローンの高精度な特定を短時間に行うことを可能とするソースコード解析装置、ソースコード解析方法及びソースコード解析プログラムを提供する。
【解決手段】複数の部分コードのうち、所定数以上の要素を含む複数の部分コードを特定し、特定した複数の部分コードにおける第1ペアごとに、各第1ペアに対応する部分コードにおいて共通して含まれる要素の数が、所定数以上であるか否かを判定し、第1ペアのうち、要素の数が所定数以上であると判定した部分コードの第2ペアのそれぞれについて、記述内容が互いに類似する部分コードのペアの検出を行う。
【選択図】図4

Description

本発明は、ソースコード解析装置、ソースコード解析方法及びソースコード解析プログラムに関する。
例えば、利用者にサービスを提供する事業者(以下、単に事業者とも呼ぶ)は、サービスの提供を行うための業務システム(以下、情報処理システムとも呼ぶ)を構築して稼働させる。そして、事業者は、例えば、利用者に対して提供するサービスの内容に変更等があった場合、業務システムが実行する処理に対応するソースコード(以下、単にソースコードとも呼ぶ)の修正を行う。
具体的に、事業者は、この場合、例えば、所定の類似関係にある複数のコードクローンをソースコードから特定し、特定したコードクローンの全てについて同じ内容の修正を行う。これにより、事業者は、ソースコードにおける修正漏れの発生を防止することが可能になる(例えば、特許文献1乃至4参照)。
特開2011−086147号公報 特開2017−010476号公報 国際公開第2014/157056号 特開2014−059743号公報
ここで、上記のようなコードクローンの特定は、ソースコードの規模によって膨大な時間を要する場合がある。そのため、事業者は、例えば、コードクローンの特定を行う時間に制限がある場合、コードクローンの特定を短時間で行うことができる方法を採用する。
しかしながら、コードクローンの特定を短時間で行うことができる方法では、コードクローンの特定を精度高く行うことができない場合がある。そのため、事業者は、高精度のコードクローンの特定を短時間に行うことができない場合がある。
そこで、一つの側面では、本発明は、コードクローンの高精度な特定を短時間に行うことを可能とするソースコード解析装置、ソースコード解析方法及びソースコード解析プログラムを提供することを目的とする。
実施の形態の一態様では、ソースコードに含まれる複数の部分コードから、記述内容が互いに類似する部分コードのペアを検出するソースコード解析装置であって、前記複数の部分コードのうち、所定数以上の要素を含む複数の部分コードを特定する部分コード特定部と、特定した前記複数の部分コードにおける第1ペアごとに、各第1ペアに対応する部分コードにおいて共通して含まれる前記要素の数が、前記所定数以上であるか否かを判定する要素数判定部と、前記第1ペアのうち、前記要素の数が前記所定数以上であると判定した前記部分コードの第2ペアのそれぞれについて、前記記述内容が互いに類似する部分コードのペアの検出を行うコードクローン検出部と、を有する。
一つの側面によれば、コードクローンの高精度な特定を短時間に行うことを可能とする。
図1は、情報処理システム10の構成を示す図である。 図2は、情報処理装置1のハードウエア構成を示す図である。 図3は、情報処理装置1の機能ブロック図である。 図4は、第1の実施の形態におけるソースコード解析処理の概略を説明するフローチャート図である。 図5は、第1の実施の形態におけるソースコード解析処理の概略を説明する図である。 図6は、第1の実施の形態におけるソースコード解析処理の詳細を説明するフローチャート図である。 図7は、第1の実施の形態におけるソースコード解析処理の詳細を説明するフローチャート図である。 図8は、第1の実施の形態におけるソースコード解析処理の詳細を説明するフローチャート図である。 図9は、第1の実施の形態におけるソースコード解析処理の詳細を説明するフローチャート図である。 図10は、第1の実施の形態におけるソースコード解析処理の詳細を説明するフローチャート図である。 図11は、第1の実施の形態におけるソースコード解析処理の詳細を説明するフローチャート図である。 図12は、第1の実施の形態におけるソースコード解析処理の詳細を説明するフローチャート図である。 図13は、第1の実施の形態におけるソースコード解析処理の詳細を説明するフローチャート図である。 図14は、第1の実施の形態におけるソースコード解析処理の詳細を説明するフローチャート図である。 図15は、ソースコード131の具体例を説明する図である。 図16は、ユニット132の具体例を説明する図である。 図17は、要素数情報133の具体例を説明する図である。 図18は、要素数情報133の具体例を説明する図である。 図19は、共通要素数情報134の具体例を説明する図である。 図20は、共通要素数情報134の具体例を説明する図である。 図21は、共通要素数情報134の具体例を説明する図である。 図22は、S41の処理の具体例について説明する図である。 図23は、S41の処理の具体例について説明する図である。 図24は、S41の処理の具体例について説明する図である。 図25は、S41の処理の具体例について説明する図である。
[情報処理システムの構成]
初めに、情報処理システム10の構成について説明を行う。図1は、情報処理システム10の構成を示す図である。図1に示す情報処理システム10は、例えば、情報処理装置1(以下、ソースコード解析装置1とも呼ぶ)と、記憶装置1aと、操作端末3a、3b及び3c(以下、これらを総称して操作端末3とも呼ぶ)とを有する。
情報処理装置1は、例えば、事業者が操作端末3を介してコードクローンの検出指示を送信した場合(図1の(1))、記憶装置1aに記憶されたソースコード131を参照し、ソースコード131に含まれるコードクローンの検出を行う(図1の(2))。そして、情報処理装置1は、例えば、コードクローンの検出結果を操作端末3に出力する(図1の(3))。
これにより、事業者は、ソースコード131における修正漏れの発生等を防止することが可能になる。
ここで、上記のようなコードクローンの特定は、ソースコード131の規模によって膨大な時間を要する場合がある。そのため、事業者は、例えば、コードクローンの特定を短時間で行うことができる方法を採用する。
しかしながら、コードクローンの特定を短時間で行うことができる方法では、コードクローンの特定を精度高く行うことができない場合がある。そのため、事業者は、必要な精度を維持したコードクローンの特定を短時間に行うことができない場合がある。
そこで、本実施の形態における情報処理装置1は、ソースコード131に含まれる複数のユニット(以下、部分コードとも呼ぶ)のうち、所定数以上の要素を含む複数のユニットを特定する。そして、情報処理装置1は、特定した複数のユニットにおけるペア(以下、第1ペアとも呼ぶ)ごとに、各第1ペアに対応するユニットにおいて共通して含まれる要素数が、所定数以上であるか否かを判定する。その後、情報処理装置1は、第1ペアのうち、要素数が所定数以上であると判定したユニットのペア(以下、第2ペアとも呼ぶ)のそれぞれについて、記述内容が互いに類似するユニットのペア(コードクローン)の検出を行う。
すなわち、例えば、ソースコード131に含まれる複数のユニットのうち、所定数以上の要素を含むユニットのみからコードクローンの検出が行われる場合、所定数以上の要素数を含まないユニットを含むペアからは、コードクローンが検出されないものと判断できる。そのため、情報処理装置1は、所定数以上の要素数を含まないユニットを含むペアを、コードクローンの検出を行うユニットのペアから除外する。
さらに、この場合、共通して含まれる要素数が所定数未満であるユニットのペアからは、コードクローンが検出されないものと判断できる。そのため、情報処理装置1は、共通して含まれる要素数が所定数未満であるユニットのペアを、コードクローンの検出を行うユニットのペアから除外する。
これにより、情報処理装置1は、コードクローンの検出を行うユニットのペアの数を抑制することが可能になる。そのため、情報処理装置1は、コードクローンの特定を効率的に行うことが可能になる。したがって、情報処理装置1は、コードクローンの特定を高精度に行う方法が採用された場合であっても、コードクローンの特定を短時間に行うことが可能になる。
[情報処理システムのハードウエア構成]
次に、情報処理システム10のハードウエア構成について説明する。図2は、情報処理装置1のハードウエア構成を示す図である。
情報処理装置1は、プロセッサであるCPU101と、メモリ102と、外部インターフェース(I/Oユニット)103と、記憶媒体104とを有する。各部は、バス105を介して互いに接続される。
記憶媒体104は、例えば、記憶媒体104内のプログラム格納領域(図示しない)に、コードクローンの検出を行う処理(以下、ソースコード解析処理とも呼ぶ)を行うためのプログラム110(以下、ソースコード解析プログラム110とも呼ぶ)を記憶する。また、記憶媒体104は、例えば、ソースコード解析処理を行う際に用いられる情報を記憶する情報格納領域130(以下、記憶部130とも呼ぶ)を有する。なお、情報格納領域130は、図1で説明した記憶装置1aに対応する。
CPU101は、プログラム110の実行時に、プログラム110を記憶媒体104からメモリ102にロードし、プログラム110と協働してソースコード解析処理を行う。また、外部インターフェース103は、例えば、操作端末3と通信を行う。
[情報処理システムの機能]
次に、情報処理システム10の機能について説明する。図3は、情報処理装置1の機能ブロック図である。
情報処理装置1のCPU101は、プログラム110と協働することにより、例えば、情報受付部111と、ユニット特定部112(以下、部分コード特定部112とも呼ぶ)と、要素数判定部113と、ユニットペア特定部114と、コードクローン検出部115と、結果出力部116として動作する。
また、情報格納領域130には、例えば、ソースコード131と、ユニット132と、要素数情報133と、共通要素数情報134と、ユニットペア情報135と、コードクローン情報136とが記憶される。
情報受付部111は、例えば、事業者が操作端末3を介して入力したソースコード131を情報格納領域130に記憶する。
ユニット特定部112は、情報格納領域130に記憶されたソースコード131を分割することにより、複数のユニット132を生成する。具体的に、ユニット特定部112は、例えば、ソースコード131に含まれるファイル、メソッド、または、ブロックごとにソースコード131の分割を行うことにより、複数のユニット132の特定を行う。そして、ユニット特定部112は、生成した複数のユニット132を情報格納領域130に記憶する。
また、ユニット特定部112は、ソースコード131から生成された複数のユニット132のうち、所定数以上の要素を含む複数のユニット132を特定する。要素は、例えば、文字、字句またはソースコード131における行であってよい。
要素数判定部113は、ユニット特定部112が特定した複数のユニット132における第1ペアごとに、各第1ペアに対応するユニット132において共通して含まれる要素数が、所定数以上であるか否かの判定を行う。
ユニットペア特定部114は、第1ペアのうち、要素数判定部113によって要素数が所定数以上であると判定された第2ペアを特定する。
コードクローン検出部115は、ユニットペア特定部114が特定した第2ペアのそれぞれについて、コードクローンの検出を行う。
なお、要素数情報133、共通要素数情報134、ユニットペア情報135及びコードクローン情報136の説明については後述する。
[第1の実施の形態の概略]
次に、第1の実施の形態について説明を行う。図4は、第1の実施の形態におけるソースコード解析処理の概略を説明するフローチャート図である。また、図5は、第1の実施の形態におけるソースコード解析処理の概略を説明する図である。図5を参照しながら、図4に示すソースコード解析処理の概略について説明を行う。
情報処理装置1は、図4に示すように、コードクローン検出タイミングになるまで待機する(S1のNO)。コードクローン検出タイミングは、例えば、事業者が操作端末3を介してコードクローンの検出を開始する旨の情報を入力したタイミングである。
そして、コードクローン検出タイミングになった場合(S1のYES)、情報処理装置1は、複数のユニット132のうちの所定数以上の要素を含む複数のユニット132を特定する(S2)。
具体的に、情報処理装置1は、例えば、図5に示すように、ソースコード131から生成された5個のユニット132から、所定数以上の要素を含む4個のユニット132を特定する。
さらに、情報処理装置1は、S2の処理で特定した複数のユニット132における第1ペアごとに、各第1ペアに対応するユニット132において共通して含まれる要素の数が、所定数以上であるか否かを判定する(S3)。その後、情報処理装置1は、第1ペアのうち、要素の数が所定数以上であると判定したユニット132の第2ペアのそれぞれについて、記述内容が互いに類似するユニット132のペアの特定を行う(S4)。
具体的に、情報処理装置1は、例えば、図5に示すように、所定数以上の要素を含む4個のユニット132における6組のペアのうち、共通して含まれる要素の数が所定数以上である4組のペアのそれぞれについて、コードクローンの特定を行う。
すなわち、例えば、ソースコード131に含まれる複数のユニット132のうち、所定数以上の要素を含むユニット132のみからコードクローンの検出が行われる場合、所定数以上の要素数を含まないユニット132を含むペアからは、コードクローンが検出されないものと判断できる。そのため、情報処理装置1は、所定数以上の要素数を含まないユニット132を含むペアを、コードクローンの検出を行うユニット132のペアから除外する。
さらに、この場合、共通して含まれる要素数が所定数未満であるユニット132のペアからは、コードクローンが検出されないものと判断できる。そのため、情報処理装置1は、共通して含まれる要素数が所定数未満であるユニット132のペアを、コードクローンの検出を行うユニット132のペアから除外する。
これにより、情報処理装置1は、コードクローンの検出を行うユニット132のペアの数を抑制することが可能になる。そのため、情報処理装置1は、コードクローンの特定を効率的に行うことが可能になる。したがって、情報処理装置1は、コードクローンの特定を高精度に行う方法が採用された場合であっても、コードクローンの特定を短時間に行うことが可能になる。
[第1の実施の形態の詳細]
次に、第1の実施の形態の詳細について説明する。図6から図14は、第1の実施の形態におけるソースコード解析処理の詳細を説明するフローチャート図である。また、図15から図25は、第1の実施の形態におけるソースコード解析処理の詳細を説明する図である。図15から図25を参照しながら、図6から図14のソースコード解析処理の詳細を説明する。
[ユニット生成処理]
初めに、ソースコード解析処理の事前処理のうち、ソースコード131から複数のユニット132を生成する処理(以下、ユニット生成処理とも呼ぶ)について説明を行う。図6は、ユニット生成処理を説明するフローチャート図である。
情報処理装置1の情報受付部111は、図6に示すように、ソースコード131を受け付けるまで待機する(S11のNO)。具体的に、情報受付部111は、例えば、事業者が操作端末3を介してソースコード131を送信するまで待機する。そして、ソースコード131を受け付けた場合(S11のYES)、情報受付部111は、S11の処理で受け付けたソースコード131を情報格納領域130に記憶する(S12)。以下、ソースコード131の具体例について説明を行う。
[ソースコードの具体例]
図15は、ソースコード131の具体例を説明する図である。図15(A)は、ソースコード131に含まれるファイル131aの具体例を説明する図であり、図15(B)は、ソースコード131に含まれるファイル131bの具体例を説明する図である。なお、以下、ソースコード131には、ファイル131a及びファイル131bのみが含まれるものとして説明を行う。
具体的に、図15(A)に示すファイル131aには、「#block1{A;T;G;T;A;C;A;C;C}」という文字列と、「#block2{T;G;T;A;C;G;C;A;G;C;}」という文字列と、「#block3{G;C;A;T;}」という文字列とが記述されている。また、図15(B)に示すファイル131bには、「#block4{A;A;C;A;A;C;A;A;T;}」という文字列と、「#block5{G;A;G;G;G;C;}」という文字列とが記述されている。
図6に戻り、情報処理装置1のユニット特定部112は、S11の処理で受け付けたソースコード131を分割することにより複数のユニット132を生成する(S13)。そして、ユニット特定部112は、S13の処理で生成した複数のユニット132を情報格納領域130に記憶する(S14)。
これにより、情報処理装置1は、情報格納領域130に記憶された複数のユニット132を参照することで、後述するように、ソースコード解析処理を行うことが可能になる。以下、ユニット132の具体例について説明を行う。
[ユニットの具体例]
図16は、ユニット132の具体例を説明する図である。図16(A)から(C)は、図15(A)で説明したファイル131aを分割することにより生成された各ユニット132の具体例であり、図16(D)及び(E)は、図15(B)で説明したファイル131bを分割することにより生成された各ユニット132の具体例である。なお、以下、図16(A)から(E)に示すユニット132を、それぞれユニット132a、132b、132c、132d及び132eとも呼ぶ。
具体的に、図16(A)に示すユニット132aには、「#block1{A;T;G;T;A;C;A;C;C}」という文字列が含まれており、図16(B)に示すユニット132bには、「#block2{T;G;T;A;C;G;C;A;G;C;}」という文字列が含まれており、図16(C)に示すユニット132cには、「#block3{G;C;A;T;}」という文字列が含まれている。また、図16(D)に示すユニット132dには、「#block4{A;A;C;A;A;C;A;A;T;}」という文字列が含まれており、図16(E)に示すユニット132eには、「#block5{G;A;G;G;G;C;}」という文字列が含まれている。
[ソースコード解析処理の詳細]
次に、ソースコード解析処理の詳細について説明を行う。図7から図14は、ソースコード解析処理の詳細について説明するフローチャート図である。
情報処理装置1の要素数判定部113は、図7に示すように、コードクローン検出タイミングになるまで待機する(S21のNO)。そして、コードクローン検出タイミングになった場合(S21のYES)、要素数判定部113は、S23の処理においてまだ抽出していないユニット132(以下、未抽出のユニット132とも呼ぶ)が存在するか否かを判定する(S22)。
その結果、S23の処理において未抽出のユニット132が存在すると判定した場合(S22のYES)、要素数判定部113は、情報格納領域130に記憶されたユニット132のうち、未抽出のユニット132を1つ抽出する(S23)。
その後、要素数判定部113は、S23の処理で抽出したユニット132に含まれる要素に対応する要素数情報133を生成する(S24)。要素数情報133は、各ユニット132に含まれる要素の数についての情報である。以下、S24の処理の具体例について説明を行う。
[S24の処理の詳細]
図10及び図11は、S24の処理の詳細を説明するフローチャート図である。
要素数判定部113は、S23の処理で抽出したユニット132を解析し、S23の処理で抽出したユニット132に記述された内容を要素列に変換する(S51)。
具体的に、S23の処理で抽出されたユニット132がユニット132a(図16(A)で説明したユニット132a)である場合、要素数判定部113は、例えば、「{」と「}」とによって囲まれた各要素(「A」、「T」、「G」、「T」、「A」、「C」、「A」、「C」及び「C」)からなる要素列を生成する。
そして、要素数判定部113は、要素数を保存するための空の要素数情報133を情報格納領域130に記憶する(S52)。
その後、要素数判定部113は、S61の処理においてまだ抽出していない要素(以下、未抽出の要素とも呼ぶ)が存在するか否かを判定する(S53)。
その結果、S54の処理において未抽出の要素が存在すると判定した場合(S53のYES)、要素数判定部113は、図11に示すように、S51の処理で変換した要素列に含まれる要素のうち、未抽出の要素を1つ抽出する(S61)。
続いて、要素数判定部113は、S61の処理で抽出した要素のハッシュ値を算出する(S62)。そして、S62の処理で算出したハッシュ値が要素数情報133に設定されていない場合(S63のNO)、要素数判定部113は、S62の処理で算出したハッシュ値と、S61の処理で抽出した要素の抽出回数の初期値である0とを、S52の処理で記憶した要素数情報133の少なくとも一部として情報格納領域130に記憶する(S64)。一方、S62の処理で算出したハッシュ値が要素数情報133に設定されている場合(S63のYES)、要素数判定部113は、S64の処理を行わない。
さらに、要素数判定部113は、情報格納領域130に記憶された要素数情報133のうち、S62で算出したハッシュ値に対応する抽出回数に1を加算する(S65)。その後、要素数判定部113は、S53以降の処理を再度行う。
すなわち、要素数判定部113は、S23の処理で抽出したユニット132に含まれる要素数の累計を含む情報を要素数情報133として生成する。これにより、情報処理装置1は、生成した要素数情報133を参照することで、後述するように、コードクローンの検出対象から除外することが可能なユニット132のペアを特定することが可能になる。
一方、S54の処理において未抽出の要素が存在しないと判定した場合(S53のYES)、要素数判定部113は、S52の処理で記憶した要素数情報133における抽出回数の合計値を要素数として特定する(S54)。そして、要素数判定部113は、S24の処理を終了する。以下、S24の処理で生成された要素数情報133の具体例について説明を行う。
[要素数情報の具体例]
図17及び図18は、要素数情報133の具体例を説明する図である。図17は、S24の処理で生成された要素数情報133の具体例を説明する図である。また、図17(A)から(E)に示す要素数情報133のそれぞれは、S23の処理においてユニット132aからユニット132eのそれぞれが抽出された場合に生成される要素数情報133の具体例である。
具体的に、図17(A)に示す要素数情報133には、ユニット132aに含まれる要素の種類の1つである「A」と、「A」から算出されるハッシュ値である「0x11」と、ユニット132aから「A」が抽出された回数である「3(回)」とを対応させた情報が設定されている。また、図17(A)に示す要素数情報133には、ユニット132aに含まれる要素の種類の1つである「G」と、「G」から算出されるハッシュ値である「0x2f」と、ユニット132aから「G」が抽出された回数である「1(回)」とを対応させた情報が設定されている。また、図17(A)に示す要素数情報133には、ユニット132aに含まれる要素の種類の1つである「T」と、「T」から算出されるハッシュ値である「0x3a」と、ユニット132aから「T」が抽出された回数である「2(回)」とを対応させた情報が設定されている。また、図17(A)に示す要素数情報133には、ユニット132aに含まれる要素の種類の1つである「C」と、「C」から算出されるハッシュ値である「0x49」と、ユニット132aから「C」が抽出された回数である「3(回)」とを対応させた情報が設定されている。
さらに、図17(A)に示す要素数情報133には、ユニット132aに含まれる要素数として、図17(A)に示す要素数情報133にそれぞれ設定された「3(回)」、「1(回)」、「2(回)」及び「3(回)」の合計回数である「9(回)」が設定されている。図17(B)、(C)、(D)及び(E)に含まれる情報については説明を省略する。
図7に戻り、要素数判定部113は、S24の処理で生成された要素数情報133のうち、要素数が最小要素数以上の要素数情報133を情報格納領域130に記憶する(S25)。最小要素数は、コードクローンとして検出される要素の集合(以下、コード片とも呼ぶ)に最低限含まれている必要がある要素の数である。この最小要素数は、例えば、事業者によって予め決定されて情報格納領域130に記憶されるものであってよい。なお、図4等で説明した所定数は、例えば、最小要素数であってよい。
具体的に、例えば、最小要素数が5(回)である場合、要素数判定部113は、S24の処理で生成された要素数情報133のうち、要素数が5(回)以上である要素数情報133の記憶を行う。そのため、要素数判定部113は、例えば、図18(A)から(D)に示すように、図17(C)で説明した要素数情報133を情報格納領域130から削除し、図17(A)、(B)、(D)及び(E)で説明した要素数情報133の記憶を維持する。
そして、要素数判定部113は、図8に示すように、S32の処理においてまだ抽出していないユニット132にペア(以下、未抽出のユニット132のペアとも呼ぶ)が存在するか否かについての判定を行う(S31)。
その結果、S32の処理において未抽出のユニット132のペアが存在すると判定した場合(S31のYES)、要素数判定部113は、情報格納領域130に記憶されたユニット132のペアのうち、未抽出のペアを1つ抽出する(S32)。
その後、情報処理装置1のユニットペア特定部114は、S32の処理で抽出したユニット132のペアをコードクローンの検出対象とするか否かの判定を行う(S33)。以下、S33の処理の具体例について説明を行う。
[S33の処理の詳細]
図12から図14は、S33の処理の詳細を説明するフローチャート図である。
ユニットペア特定部114は、初期値として0が設定された共通要素数情報134を情報格納領域130に記憶する(S71)。共通要素数情報134は、各ユニット132のペアに共通して含まれる要素の数についての情報である。
そして、ユニットペア特定部114は、S73の処理において未抽出の要素が存在するか否かについての判定を行う(S72)。
その結果、S73の処理において未抽出の要素が存在すると判定した場合(S72のYES)、ユニットペア特定部114は、S32の処理で抽出したユニット132のペアに含まれる要素を1つ抽出する(S73)。
続いて、ユニットペア特定部114は、S73の処理で抽出した要素のハッシュ値を算出する(S74)。そして、ユニットペア特定部114は、図13に示すように、情報格納領域130に記憶された要素数情報133のうち、S32の処理で抽出したユニット132のペアに対応する要素数情報133のそれぞれに、S74の処理で算出したハッシュ値が設定されているか否かを判定する(S81)。
その結果、S74の処理で算出したハッシュ値が設定されていると判定した場合(S82のYES)、ユニットペア特定部114は、S32の処理で抽出したユニット132のペアに対応する要素数情報133のそれぞれに設定されたハッシュ値に対応する抽出回数のうち、小さい方の抽出回数を特定する(S83)。そして、ユニットペア特定部114は、この場合、S83の処理で特定した抽出回数を、情報格納領域130に記憶された共通要素数情報134に加算する(S84)。
すなわち、ユニットペア特定部114は、S32の処理で抽出したユニット132のペアにおいて、共通して含まれる要素数の累計を共通要素数情報134として生成する。これにより、情報処理装置1は、生成した共通要素数情報134を参照することで、後述するように、コードクローンの検出対象から除外することが可能なユニット132のペアを特定することが可能になる。
一方、S74の処理で算出したハッシュ値が設定されていないと判定した場合(S82のNO)、ユニットペア特定部114は、S83及びS84の処理を行わない。その後、ユニットペア特定部114は、S72以降の処理を再度行う。以下、S33の処理で生成された共通要素数情報134の具体例について説明を行う。
[共通要素数情報の具体例]
図19から図21は、共通要素数情報134の具体例を説明する図である。図19(A)は、S32の処理においてユニット132a及び132bのペアが抽出された場合に生成される共通要素数情報134の具体例であり、図19(B)は、S32の処理においてユニット132a及び132dのペアが抽出された場合に生成される共通要素数情報134の具体例である。また、図20(A)は、S32の処理においてユニット132a及び132eのペアが抽出された場合に生成される共通要素数情報134の具体例であり、図20(B)は、S32の処理においてユニット132b及び132dのペアが抽出された場合に生成される共通要素数情報134の具体例である。さらに、図21(A)は、S32の処理においてユニット132b及び132eのペアが抽出された場合に生成される共通要素数情報134の具体例であり、図21(B)は、S32の処理においてユニット132d及び132eのペアが抽出された場合に生成される共通要素数情報134の具体例である。すなわち、図19から図21に示す共通要素数情報134は、図18で説明した要素数情報133に対応するユニット132の各ペアに対応する共通要素数情報134である。
具体的に、図19(A)に示す共通要素数情報134には、要素の1つである「A」と、「A」から算出されるハッシュ値である「0x11」と、ユニット132aから「A」が抽出された回数である「3(回)」と、ユニット132bから「A」が抽出された回数である「2(回)」と、「3(回)」及び「2(回)」のうちの最小数である「2(回)」とを対応させた情報が設定されている。また、図19(A)に示す共通要素数情報134には、要素の1つである「G」と、「G」から算出されるハッシュ値である「0x2f」と、ユニット132aから「G」が抽出された回数である「1(回)」と、ユニット132bから「G」が抽出された回数である「3(回)」と、「1(回)」及び「3(回)」のうちの最小数である「1(回)」とを対応させた情報が設定されている。また、図19(A)に示す共通要素数情報134には、要素の1つである「T」と、「T」から算出されるハッシュ値である「0x3a」と、ユニット132aから「T」が抽出された回数である「2(回)」と、ユニット132bから「T」が抽出された回数である「2(回)」と、「2(回)」及び「2(回)」のうちの最小数である「2(回)」とを対応させた情報が設定されている。また、図19(A)に示す共通要素数情報134には、要素の1つである「C」と、「C」から算出されるハッシュ値である「0x49」と、ユニット132aから「C」が抽出された回数である「3(回)」と、ユニット132bから「C」が抽出された回数である「3(回)」と、「3(回)」及び「3(回)」のうちの最小数である「3(回)」とを対応させた情報が設定されている。
さらに、図19(A)に示す共通要素数情報134には、ユニット132aとユニット132bとに共通して含まれる要素数(共通要素数)として、図19(A)に示す共通要素数情報134に設定された「2(回)」、「1(回)」、「2(回)」及び「3(回)」の合計回数である「8(回)」が設定されている。図19(B)、図20(A)、図20(B)、図21(A)及び図21(B)に含まれる情報については説明を省略する。
図12に戻り、S73の処理において未抽出の要素が存在しないと判定した場合(S72のNO)、ユニットペア特定部114は、図14に示すように、情報格納領域130に記憶された共通要素数情報134のうち、S71の処理で記憶した共通要素数情報134に含まれる共通要素数が最小要素数以上であるか否かを判定する(S91)。
その結果、S71の処理で記憶した共通要素数情報134に含まれる共通要素数が最小要素数以上であると判定した場合(S92のYES)、ユニットペア特定部114は、S32の処理で抽出したユニット132のペアをコードクローンの検出対象として特定する(S93)。一方、S71の処理で記憶した共通要素数情報134に含まれる共通要素数が最小要素数以上でないと判定した場合(S92のNO)、ユニットペア特定部114は、S93の処理を行わない。すなわち、ユニットペア特定部114は、この場合、S32の処理で抽出したユニット132のペアをコードクローンの検出対象として特定しない。その後、情報処理装置1は、S33の処理を終了する。
具体的に、図19(A)で説明した共通要素数情報134には、共通要素数として「8(回)」が設定されている。そのため、例えば、最小要素数が5(回)である場合であって、S32の処理においてユニット132a及び132bのペアが抽出されている場合、ユニットペア特定部114は、ユニット132a及び132bのペアをコードクローンの検出対象として特定する。
図8に戻り、S32の処理で抽出したユニット132のペアが検出対象であると判定した場合(S34のYES)、要素数判定部113は、S32の処理で抽出したユニット132のペアを示す情報を、ユニットペア情報135の少なくとも一部として情報格納領域130に記憶する(S35)。一方、S32の処理で抽出したユニット132のペアが検出対象でないと判定した場合(S34のNO)、要素数判定部113は、S35の処理を行わない。その後、要素数判定部113は、S31以降の処理を再度行う。
また、S32の処理において未抽出のペアが存在しないと判定した場合(S31のNO)、情報処理装置1のコードクローン検出部115は、図9に示すように、S41以降の処理を行う。なお、以下、S31からS35の処理において生成されたユニットペア情報135には、ユニット132a及び132bのペアと、ユニット132a及び132dのペアと、ユニット132b及び132dのペアと、ユニット132b及びユニット132eのペアとを示す情報が含まれているものとして説明を行う。
そして、コードクローン検出部115は、情報格納領域130に記憶されたユニットペア情報135に対応するユニット132のペアのそれぞれに対して比較アルゴリズムを適用し、コードクローンを検出する(S41)。
具体的に、コードクローン検出部115は、S41の処理において、例えば、各ペアに対応するユニット132における最長共通部分列(LSC:Longest Commom Subsequence)を特定する。最長共通部分列は、複数の比較対象のそれぞれにおいて同一の順序によって記述された複数の要素からなる文字列のうち、最長の文字列である。そして、コードクローン検出部115は、例えば、情報格納領域130に記憶されたユニットペア情報135に情報が含まれるユニット132のペアのうち、特定した最長共通部分列に含まれる要素数が所定の要素数以上であって、最長共通部分列に含まれない要素の割合が所定の割合以下であるペアを、コードクローンとして特定するものであってよい。なお、所定の要素数及び所定の割合は、事業者によって情報格納領域130に予め記憶されるものであってよい。以下、S41の処理の具体例について説明を行う。
[S41の処理の具体例]
図22から図25は、S41の処理の具体例について説明する図である。図22は、ユニット132a及び132bがコードクローンであるか否かを判定する場合の要素列の具体例であり、図23は、ユニット132a及び132dがコードクローンであるか否かを判定する場合の要素列の具体例である。また、図24は、ユニット132b及び132dがコードクローンであるか否かを判定する場合の要素列の具体例であり、図25は、ユニット132b及び132eがコードクローンであるか否かを判定する場合の要素列の具体例である。
具体的に、図22に示す例において、ユニット132aとユニット132bにおける最長共通文字列は、図22におけるハッチ部分に示すように、「T」、「G」、「T」、「A」、「C」、「A」及び「C」であり、要素数が7である。また、図22に示す例において、ユニット132a及びユニット132bに含まれる要素数が19であり、最長共通文字列に含まれていない要素の要素数が5である。そのため、図22に示す例において、ユニット132a及びユニット132bに含まれる要素数のうち、最長共通文字列に含まれていない要素の要素数の割合は、約26.3(%)である。
したがって、例えば、S41の処理における所定の要素数が5であり、S41の処理における所定の割合が30(%)である場合、コードクローン検出部115は、ユニット132a及びユニット132bがコードクローンであるとして検出を行う。
一方、図23に示す例において、ユニット132aとユニット132dにおける最長共通文字列は、図23におけるハッチ部分に示すように、「A」、「A」、「G」及び「A」であり、要素数が4である。また、図23に示す例において、ユニット132a及びユニット132dに含まれる要素数が18であり、最長共通文字列に含まれていない要素の要素数が10である。そのため、図23に示す例において、ユニット132a及びユニット132dに含まれる要素数のうち、最長共通文字列に含まれていない要素の要素数の割合は、約55.6(%)である。
したがって、例えば、S41の処理における所定の要素数が5であり、S41の処理における所定の割合が30(%)である場合、コードクローン検出部115は、ユニット132a及びユニット132dがコードクローンでないものと判定する。
同様に、コードクローン検出部115は、図24に示す例において、ユニット132b及びユニット132dがコードクローンでないものと判定する。また、コードクローン検出部115は、図25に示す例において、ユニット132b及びユニット132eがコードクローンでないものと判定する。
図9に戻り、コードクローン検出部115は、S41の処理で検出したコードクローンを示す情報をコードクローン情報136として情報格納領域130に記憶する(S42)。
その後、情報処理装置1の結果出力部116は、情報格納領域130に記憶したコードクローン情報136を出力する(S43)。具体的に、ユニット132a及びユニット132bがコードクローンであるとして検出された場合、結果出力部116は、例えば、ユニット132a及びユニット132bがコードクローンであることを示すコードクローン情報136を操作端末3に出力する。
このように、本実施の形態における情報処理装置1は、ソースコード131に含まれる複数のユニット132のうち、所定数以上の要素を含む複数のユニット132を特定する。そして、情報処理装置1は、特定した複数のユニット132における第1ペアごとに、各第1ペアに対応するユニット132において共通して含まれる要素数が、所定数以上であるか否かを判定する。その後、情報処理装置1は、第1ペアのうち、要素数が所定数以上であると判定したユニット132の第2ペアのそれぞれについて、記述内容が互いに類似するユニット132のペアの検出を行う。
すなわち、例えば、ソースコード131に含まれる複数のユニット132のうち、所定数以上の要素を含むユニット132のみからコードクローンの検出が行われる場合、所定数以上の要素数を含まないユニット132を含むペアからは、コードクローンが検出されないものと判断できる。そのため、情報処理装置1は、所定数以上の要素数を含まないユニット132を含むペアを、コードクローンの検出を行うユニット132のペアから除外する。
さらに、この場合、共通して含まれる要素数が所定数未満であるユニット132のペアからは、コードクローンが検出されないものと判断できる。そのため、情報処理装置1は、共通して含まれる要素数が所定数未満であるユニット132のペアを、コードクローンの検出を行うユニット132のペアから除外する。
これにより、情報処理装置1は、コードクローンの検出を行うユニット132のペアの数を抑制することが可能になる。そのため、情報処理装置1は、コードクローンの特定を効率的に行うことが可能になる。したがって、情報処理装置1は、コードクローンの特定を高精度に行う方法が採用された場合であっても、コードクローンの特定を短時間に行うことが可能になる。
以上の実施の形態をまとめると、以下の付記のとおりである。
(付記1)
ソースコードに含まれる複数の部分コードから、記述内容が互いに類似する部分コードのペアを検出するソースコード解析装置であって、
前記複数の部分コードのうち、所定数以上の要素を含む複数の部分コードを特定する部分コード特定部と、
特定した前記複数の部分コードにおける第1ペアごとに、各第1ペアに対応する部分コードにおいて共通して含まれる前記要素の数が、前記所定数以上であるか否かを判定する要素数判定部と、
前記第1ペアのうち、前記要素の数が前記所定数以上であると判定した前記部分コードの第2ペアのそれぞれについて、前記記述内容が互いに類似する部分コードのペアの検出を行うコードクローン検出部と、を有する、
ことを特徴とするソースコード解析装置。
(付記2)
付記1において、
前記コードクローン検出部は、
前記第2ペアごとに、各第2ペアに対応する各部分コードにおいて共通して含まれ、同一の順序によって記述された複数の前記要素からなる要素列のうち、最大数の前記要素を含む要素列を特定し、
前記第2ペアのうち、特定した前記要素列に含まれる前記要素の数が前記所定数以上であるペアを、前記記述内容が互いに類似する部分コードのペアとして特定する、
ことを特徴とするソースコード解析装置。
(付記3)
付記1において、
前記要素は、文字、字句または前記ソースコードにおける行である、
ことを特徴とするソースコード解析装置。
(付記4)
付記1において、
前記複数の部分コードは、前記ソースコードを分割することにより生成されるコードである、
ことを特徴とするソースコード解析装置。
(付記5)
付記1において、
前記要素数判定部は、
前記第1ペアごとであって前記要素ごとに、各第1ペアに対応する部分コードにおいて共通して含まれる各要素の数を特定し、
前記第1ペアごとに、特定した前記要素の数の和を算出し、
前記第1ペアごとに、算出した前記和が前記所定数以上であるか否かの判定を行う、
ことを特徴とするソースコード解析装置。
(付記6)
ソースコードに含まれる複数の部分コードから、記述内容が互いに類似する部分コードのペアを検出するソースコード解析方法であって、
前記複数の部分コードのうち、所定数以上の要素を含む複数の部分コードを特定し、
特定した前記複数の部分コードにおける第1ペアごとに、各第1ペアに対応する部分コードにおいて共通して含まれる前記要素の数が、前記所定数以上であるか否かを判定し、
前記第1ペアのうち、前記要素の数が前記所定数以上であると判定した前記部分コードの第2ペアのそれぞれについて、前記記述内容が互いに類似する部分コードのペアの検出を行う、
ことを特徴とするソースコード解析方法。
(付記7)
付記6において、
前記判定する工程では、
前記第1ペアごとであって前記要素ごとに、各第1ペアに対応する部分コードにおいて共通して含まれる各要素の数を特定し、
前記第1ペアごとに、特定した前記要素の数の和を算出し、
前記第1ペアごとに、算出した前記和が前記所定数以上であるか否かの判定を行う、
ことを特徴とするソースコード解析方法。
(付記8)
ソースコードに含まれる複数の部分コードから、記述内容が互いに類似する部分コードのペアを検出する処理をコンピュータに実行させるソースコード解析プログラムであって、
前記複数の部分コードのうち、所定数以上の要素を含む複数の部分コードを特定し、
特定した前記複数の部分コードにおける第1ペアごとに、各第1ペアに対応する部分コードにおいて共通して含まれる前記要素の数が、前記所定数以上であるか否かを判定し、
前記第1ペアのうち、前記要素の数が前記所定数以上であると判定した前記部分コードの第2ペアのそれぞれについて、前記記述内容が互いに類似する部分コードのペアの検出を行う、
処理をコンピュータに実行させることを特徴とするソースコード解析プログラム。
(付記9)
付記8において、
前記判定する処理では、
前記第1ペアごとであって前記要素ごとに、各第1ペアに対応する部分コードにおいて共通して含まれる各要素の数を特定し、
前記第1ペアごとに、特定した前記要素の数の和を算出し、
前記第1ペアごとに、算出した前記和が前記所定数以上であるか否かの判定を行う、
ことを特徴とするソースコード解析プログラム。
1:情報処理装置 1a:記憶装置
3a:操作端末 3b:操作端末
3c:操作端末 131:ソースコード

Claims (7)

  1. ソースコードに含まれる複数の部分コードから、記述内容が互いに類似する部分コードのペアを検出するソースコード解析装置であって、
    前記複数の部分コードのうち、所定数以上の要素を含む複数の部分コードを特定する部分コード特定部と、
    特定した前記複数の部分コードにおける第1ペアごとに、各第1ペアに対応する部分コードにおいて共通して含まれる前記要素の数が、前記所定数以上であるか否かを判定する要素数判定部と、
    前記第1ペアのうち、前記要素の数が前記所定数以上であると判定した前記部分コードの第2ペアのそれぞれについて、前記記述内容が互いに類似する部分コードのペアの検出を行うコードクローン検出部と、を有する、
    ことを特徴とするソースコード解析装置。
  2. 請求項1において、
    前記コードクローン検出部は、
    前記第2ペアごとに、各第2ペアに対応する各部分コードにおいて共通して含まれ、同一の順序によって記述された複数の前記要素からなる要素列のうち、最大数の前記要素を含む要素列を特定し、
    前記第2ペアのうち、特定した前記要素列に含まれる前記要素の数が前記所定数以上であるペアを、前記記述内容が互いに類似する部分コードのペアとして特定する、
    ことを特徴とするソースコード解析装置。
  3. 請求項1において、
    前記要素は、文字、字句または前記ソースコードにおける行である、
    ことを特徴とするソースコード解析装置。
  4. 請求項1において、
    前記複数の部分コードは、前記ソースコードを分割することにより生成されるコードである、
    ことを特徴とするソースコード解析装置。
  5. 請求項1において、
    前記要素数判定部は、
    前記第1ペアごとであって前記要素ごとに、各第1ペアに対応する部分コードにおいて共通して含まれる各要素の数を特定し、
    前記第1ペアごとに、特定した前記要素の数の和を算出し、
    前記第1ペアごとに、算出した前記和が前記所定数以上であるか否かの判定を行う、
    ことを特徴とするソースコード解析装置。
  6. ソースコードに含まれる複数の部分コードから、記述内容が互いに類似する部分コードのペアを検出するソースコード解析方法であって、
    前記複数の部分コードのうち、所定数以上の要素を含む複数の部分コードを特定し、
    特定した前記複数の部分コードにおける第1ペアごとに、各第1ペアに対応する部分コードにおいて共通して含まれる前記要素の数が、前記所定数以上であるか否かを判定し、
    前記第1ペアのうち、前記要素の数が前記所定数以上であると判定した前記部分コードの第2ペアのそれぞれについて、前記記述内容が互いに類似する部分コードのペアの検出を行う、
    ことを特徴とするソースコード解析方法。
  7. ソースコードに含まれる複数の部分コードから、記述内容が互いに類似する部分コードのペアを検出する処理をコンピュータに実行させるソースコード解析プログラムであって、
    前記複数の部分コードのうち、所定数以上の要素を含む複数の部分コードを特定し、
    特定した前記複数の部分コードにおける第1ペアごとに、各第1ペアに対応する部分コードにおいて共通して含まれる前記要素の数が、前記所定数以上であるか否かを判定し、
    前記第1ペアのうち、前記要素の数が前記所定数以上であると判定した前記部分コードの第2ペアのそれぞれについて、前記記述内容が互いに類似する部分コードのペアの検出を行う、
    処理をコンピュータに実行させることを特徴とするソースコード解析プログラム。
JP2017153064A 2017-08-08 2017-08-08 ソースコード解析装置、ソースコード解析方法及びソースコード解析プログラム Pending JP2019032688A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2017153064A JP2019032688A (ja) 2017-08-08 2017-08-08 ソースコード解析装置、ソースコード解析方法及びソースコード解析プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017153064A JP2019032688A (ja) 2017-08-08 2017-08-08 ソースコード解析装置、ソースコード解析方法及びソースコード解析プログラム

Publications (1)

Publication Number Publication Date
JP2019032688A true JP2019032688A (ja) 2019-02-28

Family

ID=65523546

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017153064A Pending JP2019032688A (ja) 2017-08-08 2017-08-08 ソースコード解析装置、ソースコード解析方法及びソースコード解析プログラム

Country Status (1)

Country Link
JP (1) JP2019032688A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111367566A (zh) * 2019-06-27 2020-07-03 北京关键科技股份有限公司 混源代码特征提取与匹配方法
JP2020130949A (ja) * 2019-02-26 2020-08-31 株式会社ニューギン 遊技機

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020130949A (ja) * 2019-02-26 2020-08-31 株式会社ニューギン 遊技機
CN111367566A (zh) * 2019-06-27 2020-07-03 北京关键科技股份有限公司 混源代码特征提取与匹配方法

Similar Documents

Publication Publication Date Title
CN109063055B (zh) 同源二进制文件检索方法和装置
CN110222511B (zh) 恶意软件家族识别方法、装置及电子设备
RU2722692C1 (ru) Способ и система выявления вредоносных файлов в неизолированной среде
US10678914B2 (en) Virus program detection method, terminal, and computer readable storage medium
KR101390220B1 (ko) 소프트웨어 버그 정정을 위한 적합한 개발자 추천 방법 및 장치
US10783067B2 (en) Software quality determination apparatus, software quality determination method, and software quality determination program
JP2019032688A (ja) ソースコード解析装置、ソースコード解析方法及びソースコード解析プログラム
EP3312755B1 (en) Method and apparatus for detecting application
CN106709350B (zh) 一种病毒检测方法及装置
Vyverman et al. A long fragment aligner called ALFALFA
CN111930610B (zh) 软件同源性检测方法、装置、设备及存储介质
CN111191087B (zh) 字符匹配方法、终端设备及计算机可读存储介质
CN112698861A (zh) 源代码克隆识别方法及系统
CN115589339B (zh) 网络攻击类型识别方法、装置、设备以及存储介质
JP2020139914A (ja) 物質構造分析装置、方法及びプログラム
CN112632551A (zh) 一种第三方库信息泄露检测方法及装置
JP6249505B1 (ja) 特徴抽出装置およびプログラム
US10394523B2 (en) Method and system for extracting rule specific data from a computer word
JP6740912B2 (ja) データ圧縮装置、データ圧縮プログラム、データ圧縮方法及びプログラム
KR102435497B1 (ko) 멀티미디어 신호 인식을 위한 전자 장치 및 그의 동작 방법
CN113721978B (zh) 一种混源软件中开源成分检测的方法和系统
CN110647519B (zh) 对测试样本中的缺失属性值进行预测的方法及装置
US20240037010A1 (en) Program analysis apparatus, program analysis method, and non-transitory computer readable medium storing program
US20240045973A1 (en) Symbol narrowing-down apparatus, program analysis apparatus, symbol extraction method, program analysis method, and non-transitory computer readable medium
KR102240455B1 (ko) 동적 노트 매칭을 위한 전자 장치 및 그의 동작 방법