(57)【要約】【課題】コードクローンの高精度な特定を短時間に行うことを可能とするソースコード解析装置、ソースコード解析方法及びソースコード解析プログラムを提供する。【解決手段】複数の部分コードのうち、所定数以上の要素を含む複数の部分コードを特定し、特定した複数の部分コードにおける第１ペアごとに、各第１ペアに対応する部分コードにおいて共通して含まれる要素の数が、所定数以上であるか否かを判定し、第１ペアのうち、要素の数が所定数以上であると判定した部分コードの第２ペアのそれぞれについて、記述内容が互いに類似する部分コードのペアの検出を行う。【選択図】図４
2019032688.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードに含まれる複数の部分コードから、記述内容が互いに類似する部分コードのペアを検出するソースコード解析装置であって、
前記複数の部分コードのうち、所定数以上の要素を含む複数の部分コードを特定する部分コード特定部と、
特定した前記複数の部分コードにおける第１ペアごとに、各第１ペアに対応する部分コードにおいて共通して含まれる前記要素の数が、前記所定数以上であるか否かを判定する要素数判定部と、
前記第１ペアのうち、前記要素の数が前記所定数以上であると判定した前記部分コードの第２ペアのそれぞれについて、前記記述内容が互いに類似する部分コードのペアの検出を行うコードクローン検出部と、を有する、
ことを特徴とするソースコード解析装置。
【請求項２】
請求項１において、
前記コードクローン検出部は、
前記第２ペアごとに、各第２ペアに対応する各部分コードにおいて共通して含まれ、同一の順序によって記述された複数の前記要素からなる要素列のうち、最大数の前記要素を含む要素列を特定し、
前記第２ペアのうち、特定した前記要素列に含まれる前記要素の数が前記所定数以上であるペアを、前記記述内容が互いに類似する部分コードのペアとして特定する、
ことを特徴とするソースコード解析装置。
【請求項３】
請求項１において、
前記要素は、文字、字句または前記ソースコードにおける行である、
ことを特徴とするソースコード解析装置。
【請求項４】
請求項１において、
前記複数の部分コードは、前記ソースコードを分割することにより生成されるコードである、
ことを特徴とするソースコード解析装置。
【請求項５】
請求項１において、
前記要素数判定部は、
前記第１ペアごとであって前記要素ごとに、各第１ペアに対応する部分コードにおいて共通して含まれる各要素の数を特定し、
前記第１ペアごとに、特定した前記要素の数の和を算出し、
前記第１ペアごとに、算出した前記和が前記所定数以上であるか否かの判定を行う、
ことを特徴とするソースコード解析装置。
【請求項６】
ソースコードに含まれる複数の部分コードから、記述内容が互いに類似する部分コードのペアを検出するソースコード解析方法であって、
前記複数の部分コードのうち、所定数以上の要素を含む複数の部分コードを特定し、
特定した前記複数の部分コードにおける第１ペアごとに、各第１ペアに対応する部分コードにおいて共通して含まれる前記要素の数が、前記所定数以上であるか否かを判定し、
前記第１ペアのうち、前記要素の数が前記所定数以上であると判定した前記部分コードの第２ペアのそれぞれについて、前記記述内容が互いに類似する部分コードのペアの検出を行う、
ことを特徴とするソースコード解析方法。
【請求項７】
ソースコードに含まれる複数の部分コードから、記述内容が互いに類似する部分コードのペアを検出する処理をコンピュータに実行させるソースコード解析プログラムであって、
前記複数の部分コードのうち、所定数以上の要素を含む複数の部分コードを特定し、
特定した前記複数の部分コードにおける第１ペアごとに、各第１ペアに対応する部分コードにおいて共通して含まれる前記要素の数が、前記所定数以上であるか否かを判定し、
前記第１ペアのうち、前記要素の数が前記所定数以上であると判定した前記部分コードの第２ペアのそれぞれについて、前記記述内容が互いに類似する部分コードのペアの検出を行う、
処理をコンピュータに実行させることを特徴とするソースコード解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコード解析装置、ソースコード解析方法及びソースコード解析プログラムに関する。
【背景技術】
【０００２】
例えば、利用者にサービスを提供する事業者（以下、単に事業者とも呼ぶ）は、サービスの提供を行うための業務システム（以下、情報処理システムとも呼ぶ）を構築して稼働させる。そして、事業者は、例えば、利用者に対して提供するサービスの内容に変更等があった場合、業務システムが実行する処理に対応するソースコード（以下、単にソースコードとも呼ぶ）の修正を行う。
【０００３】
具体的に、事業者は、この場合、例えば、所定の類似関係にある複数のコードクローンをソースコードから特定し、特定したコードクローンの全てについて同じ内容の修正を行う。これにより、事業者は、ソースコードにおける修正漏れの発生を防止することが可能になる（例えば、特許文献１乃至４参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−０８６１４７号公報
【特許文献２】特開２０１７−０１０４７６号公報
【特許文献３】国際公開第２０１４／１５７０５６号
【特許文献４】特開２０１４−０５９７４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ここで、上記のようなコードクローンの特定は、ソースコードの規模によって膨大な時間を要する場合がある。そのため、事業者は、例えば、コードクローンの特定を行う時間に制限がある場合、コードクローンの特定を短時間で行うことができる方法を採用する。
【０００６】
しかしながら、コードクローンの特定を短時間で行うことができる方法では、コードクローンの特定を精度高く行うことができない場合がある。そのため、事業者は、高精度のコードクローンの特定を短時間に行うことができない場合がある。
【０００７】
そこで、一つの側面では、本発明は、コードクローンの高精度な特定を短時間に行うことを可能とするソースコード解析装置、ソースコード解析方法及びソースコード解析プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
実施の形態の一態様では、ソースコードに含まれる複数の部分コードから、記述内容が互いに類似する部分コードのペアを検出するソースコード解析装置であって、前記複数の部分コードのうち、所定数以上の要素を含む複数の部分コードを特定する部分コード特定部と、特定した前記複数の部分コードにおける第１ペアごとに、各第１ペアに対応する部分コードにおいて共通して含まれる前記要素の数が、前記所定数以上であるか否かを判定する要素数判定部と、前記第１ペアのうち、前記要素の数が前記所定数以上であると判定した前記部分コードの第２ペアのそれぞれについて、前記記述内容が互いに類似する部分コードのペアの検出を行うコードクローン検出部と、を有する。
【発明の効果】
【０００９】
一つの側面によれば、コードクローンの高精度な特定を短時間に行うことを可能とする。
【図面の簡単な説明】
【００１０】
【図１】図１は、情報処理システム１０の構成を示す図である。
【図２】図２は、情報処理装置１のハードウエア構成を示す図である。
【図３】図３は、情報処理装置１の機能ブロック図である。
【図４】図４は、第１の実施の形態におけるソースコード解析処理の概略を説明するフローチャート図である。
【図５】図５は、第１の実施の形態におけるソースコード解析処理の概略を説明する図である。
【図６】図６は、第１の実施の形態におけるソースコード解析処理の詳細を説明するフローチャート図である。
【図７】図７は、第１の実施の形態におけるソースコード解析処理の詳細を説明するフローチャート図である。
【図８】図８は、第１の実施の形態におけるソースコード解析処理の詳細を説明するフローチャート図である。
【図９】図９は、第１の実施の形態におけるソースコード解析処理の詳細を説明するフローチャート図である。
【図１０】図１０は、第１の実施の形態におけるソースコード解析処理の詳細を説明するフローチャート図である。
【図１１】図１１は、第１の実施の形態におけるソースコード解析処理の詳細を説明するフローチャート図である。
【図１２】図１２は、第１の実施の形態におけるソースコード解析処理の詳細を説明するフローチャート図である。
【図１３】図１３は、第１の実施の形態におけるソースコード解析処理の詳細を説明するフローチャート図である。
【図１４】図１４は、第１の実施の形態におけるソースコード解析処理の詳細を説明するフローチャート図である。
【図１５】図１５は、ソースコード１３１の具体例を説明する図である。
【図１６】図１６は、ユニット１３２の具体例を説明する図である。
【図１７】図１７は、要素数情報１３３の具体例を説明する図である。
【図１８】図１８は、要素数情報１３３の具体例を説明する図である。
【図１９】図１９は、共通要素数情報１３４の具体例を説明する図である。
【図２０】図２０は、共通要素数情報１３４の具体例を説明する図である。
【図２１】図２１は、共通要素数情報１３４の具体例を説明する図である。
【図２２】図２２は、Ｓ４１の処理の具体例について説明する図である。
【図２３】図２３は、Ｓ４１の処理の具体例について説明する図である。
【図２４】図２４は、Ｓ４１の処理の具体例について説明する図である。
【図２５】図２５は、Ｓ４１の処理の具体例について説明する図である。
【発明を実施するための形態】
【００１１】
［情報処理システムの構成］
初めに、情報処理システム１０の構成について説明を行う。図１は、情報処理システム１０の構成を示す図である。図１に示す情報処理システム１０は、例えば、情報処理装置１（以下、ソースコード解析装置１とも呼ぶ）と、記憶装置１ａと、操作端末３ａ、３ｂ及び３ｃ（以下、これらを総称して操作端末３とも呼ぶ）とを有する。
【００１２】
情報処理装置１は、例えば、事業者が操作端末３を介してコードクローンの検出指示を送信した場合（図１の（１））、記憶装置１ａに記憶されたソースコード１３１を参照し、ソースコード１３１に含まれるコードクローンの検出を行う（図１の（２））。そして、情報処理装置１は、例えば、コードクローンの検出結果を操作端末３に出力する（図１の（３））。
【００１３】
これにより、事業者は、ソースコード１３１における修正漏れの発生等を防止することが可能になる。
【００１４】
ここで、上記のようなコードクローンの特定は、ソースコード１３１の規模によって膨大な時間を要する場合がある。そのため、事業者は、例えば、コードクローンの特定を短時間で行うことができる方法を採用する。
【００１５】
しかしながら、コードクローンの特定を短時間で行うことができる方法では、コードクローンの特定を精度高く行うことができない場合がある。そのため、事業者は、必要な精度を維持したコードクローンの特定を短時間に行うことができない場合がある。
【００１６】
そこで、本実施の形態における情報処理装置１は、ソースコード１３１に含まれる複数のユニット（以下、部分コードとも呼ぶ）のうち、所定数以上の要素を含む複数のユニットを特定する。そして、情報処理装置１は、特定した複数のユニットにおけるペア（以下、第１ペアとも呼ぶ）ごとに、各第１ペアに対応するユニットにおいて共通して含まれる要素数が、所定数以上であるか否かを判定する。その後、情報処理装置１は、第１ペアのうち、要素数が所定数以上であると判定したユニットのペア（以下、第２ペアとも呼ぶ）のそれぞれについて、記述内容が互いに類似するユニットのペア（コードクローン）の検出を行う。
【００１７】
すなわち、例えば、ソースコード１３１に含まれる複数のユニットのうち、所定数以上の要素を含むユニットのみからコードクローンの検出が行われる場合、所定数以上の要素数を含まないユニットを含むペアからは、コードクローンが検出されないものと判断できる。そのため、情報処理装置１は、所定数以上の要素数を含まないユニットを含むペアを、コードクローンの検出を行うユニットのペアから除外する。
【００１８】
さらに、この場合、共通して含まれる要素数が所定数未満であるユニットのペアからは、コードクローンが検出されないものと判断できる。そのため、情報処理装置１は、共通して含まれる要素数が所定数未満であるユニットのペアを、コードクローンの検出を行うユニットのペアから除外する。
【００１９】
これにより、情報処理装置１は、コードクローンの検出を行うユニットのペアの数を抑制することが可能になる。そのため、情報処理装置１は、コードクローンの特定を効率的に行うことが可能になる。したがって、情報処理装置１は、コードクローンの特定を高精度に行う方法が採用された場合であっても、コードクローンの特定を短時間に行うことが可能になる。
【００２０】
［情報処理システムのハードウエア構成］
次に、情報処理システム１０のハードウエア構成について説明する。図２は、情報処理装置１のハードウエア構成を示す図である。
【００２１】
情報処理装置１は、プロセッサであるＣＰＵ１０１と、メモリ１０２と、外部インターフェース（Ｉ／Ｏユニット）１０３と、記憶媒体１０４とを有する。各部は、バス１０５を介して互いに接続される。
【００２２】
記憶媒体１０４は、例えば、記憶媒体１０４内のプログラム格納領域（図示しない）に、コードクローンの検出を行う処理（以下、ソースコード解析処理とも呼ぶ）を行うためのプログラム１１０（以下、ソースコード解析プログラム１１０とも呼ぶ）を記憶する。また、記憶媒体１０４は、例えば、ソースコード解析処理を行う際に用いられる情報を記憶する情報格納領域１３０（以下、記憶部１３０とも呼ぶ）を有する。なお、情報格納領域１３０は、図１で説明した記憶装置１ａに対応する。
【００２３】
ＣＰＵ１０１は、プログラム１１０の実行時に、プログラム１１０を記憶媒体１０４からメモリ１０２にロードし、プログラム１１０と協働してソースコード解析処理を行う。また、外部インターフェース１０３は、例えば、操作端末３と通信を行う。
【００２４】
［情報処理システムの機能］
次に、情報処理システム１０の機能について説明する。図３は、情報処理装置１の機能ブロック図である。
【００２５】
情報処理装置１のＣＰＵ１０１は、プログラム１１０と協働することにより、例えば、情報受付部１１１と、ユニット特定部１１２（以下、部分コード特定部１１２とも呼ぶ）と、要素数判定部１１３と、ユニットペア特定部１１４と、コードクローン検出部１１５と、結果出力部１１６として動作する。
【００２６】
また、情報格納領域１３０には、例えば、ソースコード１３１と、ユニット１３２と、要素数情報１３３と、共通要素数情報１３４と、ユニットペア情報１３５と、コードクローン情報１３６とが記憶される。
【００２７】
情報受付部１１１は、例えば、事業者が操作端末３を介して入力したソースコード１３１を情報格納領域１３０に記憶する。
【００２８】
ユニット特定部１１２は、情報格納領域１３０に記憶されたソースコード１３１を分割することにより、複数のユニット１３２を生成する。具体的に、ユニット特定部１１２は、例えば、ソースコード１３１に含まれるファイル、メソッド、または、ブロックごとにソースコード１３１の分割を行うことにより、複数のユニット１３２の特定を行う。そして、ユニット特定部１１２は、生成した複数のユニット１３２を情報格納領域１３０に記憶する。
【００２９】
また、ユニット特定部１１２は、ソースコード１３１から生成された複数のユニット１３２のうち、所定数以上の要素を含む複数のユニット１３２を特定する。要素は、例えば、文字、字句またはソースコード１３１における行であってよい。
【００３０】
要素数判定部１１３は、ユニット特定部１１２が特定した複数のユニット１３２における第１ペアごとに、各第１ペアに対応するユニット１３２において共通して含まれる要素数が、所定数以上であるか否かの判定を行う。
【００３１】
ユニットペア特定部１１４は、第１ペアのうち、要素数判定部１１３によって要素数が所定数以上であると判定された第２ペアを特定する。
【００３２】
コードクローン検出部１１５は、ユニットペア特定部１１４が特定した第２ペアのそれぞれについて、コードクローンの検出を行う。
【００３３】
なお、要素数情報１３３、共通要素数情報１３４、ユニットペア情報１３５及びコードクローン情報１３６の説明については後述する。
【００３４】
［第１の実施の形態の概略］
次に、第１の実施の形態について説明を行う。図４は、第１の実施の形態におけるソースコード解析処理の概略を説明するフローチャート図である。また、図５は、第１の実施の形態におけるソースコード解析処理の概略を説明する図である。図５を参照しながら、図４に示すソースコード解析処理の概略について説明を行う。
【００３５】
情報処理装置１は、図４に示すように、コードクローン検出タイミングになるまで待機する（Ｓ１のＮＯ）。コードクローン検出タイミングは、例えば、事業者が操作端末３を介してコードクローンの検出を開始する旨の情報を入力したタイミングである。
【００３６】
そして、コードクローン検出タイミングになった場合（Ｓ１のＹＥＳ）、情報処理装置１は、複数のユニット１３２のうちの所定数以上の要素を含む複数のユニット１３２を特定する（Ｓ２）。
【００３７】
具体的に、情報処理装置１は、例えば、図５に示すように、ソースコード１３１から生成された５個のユニット１３２から、所定数以上の要素を含む４個のユニット１３２を特定する。
【００３８】
さらに、情報処理装置１は、Ｓ２の処理で特定した複数のユニット１３２における第１ペアごとに、各第１ペアに対応するユニット１３２において共通して含まれる要素の数が、所定数以上であるか否かを判定する（Ｓ３）。その後、情報処理装置１は、第１ペアのうち、要素の数が所定数以上であると判定したユニット１３２の第２ペアのそれぞれについて、記述内容が互いに類似するユニット１３２のペアの特定を行う（Ｓ４）。
【００３９】
具体的に、情報処理装置１は、例えば、図５に示すように、所定数以上の要素を含む４個のユニット１３２における６組のペアのうち、共通して含まれる要素の数が所定数以上である４組のペアのそれぞれについて、コードクローンの特定を行う。
【００４０】
すなわち、例えば、ソースコード１３１に含まれる複数のユニット１３２のうち、所定数以上の要素を含むユニット１３２のみからコードクローンの検出が行われる場合、所定数以上の要素数を含まないユニット１３２を含むペアからは、コードクローンが検出されないものと判断できる。そのため、情報処理装置１は、所定数以上の要素数を含まないユニット１３２を含むペアを、コードクローンの検出を行うユニット１３２のペアから除外する。
【００４１】
さらに、この場合、共通して含まれる要素数が所定数未満であるユニット１３２のペアからは、コードクローンが検出されないものと判断できる。そのため、情報処理装置１は、共通して含まれる要素数が所定数未満であるユニット１３２のペアを、コードクローンの検出を行うユニット１３２のペアから除外する。
【００４２】
これにより、情報処理装置１は、コードクローンの検出を行うユニット１３２のペアの数を抑制することが可能になる。そのため、情報処理装置１は、コードクローンの特定を効率的に行うことが可能になる。したがって、情報処理装置１は、コードクローンの特定を高精度に行う方法が採用された場合であっても、コードクローンの特定を短時間に行うことが可能になる。
【００４３】
［第１の実施の形態の詳細］
次に、第１の実施の形態の詳細について説明する。図６から図１４は、第１の実施の形態におけるソースコード解析処理の詳細を説明するフローチャート図である。また、図１５から図２５は、第１の実施の形態におけるソースコード解析処理の詳細を説明する図である。図１５から図２５を参照しながら、図６から図１４のソースコード解析処理の詳細を説明する。
【００４４】
［ユニット生成処理］
初めに、ソースコード解析処理の事前処理のうち、ソースコード１３１から複数のユニット１３２を生成する処理（以下、ユニット生成処理とも呼ぶ）について説明を行う。図６は、ユニット生成処理を説明するフローチャート図である。
【００４５】
情報処理装置１の情報受付部１１１は、図６に示すように、ソースコード１３１を受け付けるまで待機する（Ｓ１１のＮＯ）。具体的に、情報受付部１１１は、例えば、事業者が操作端末３を介してソースコード１３１を送信するまで待機する。そして、ソースコード１３１を受け付けた場合（Ｓ１１のＹＥＳ）、情報受付部１１１は、Ｓ１１の処理で受け付けたソースコード１３１を情報格納領域１３０に記憶する（Ｓ１２）。以下、ソースコード１３１の具体例について説明を行う。
【００４６】
［ソースコードの具体例］
図１５は、ソースコード１３１の具体例を説明する図である。図１５（Ａ）は、ソースコード１３１に含まれるファイル１３１ａの具体例を説明する図であり、図１５（Ｂ）は、ソースコード１３１に含まれるファイル１３１ｂの具体例を説明する図である。なお、以下、ソースコード１３１には、ファイル１３１ａ及びファイル１３１ｂのみが含まれるものとして説明を行う。
【００４７】
具体的に、図１５（Ａ）に示すファイル１３１ａには、「＃ｂｌｏｃｋ１｛Ａ；Ｔ；Ｇ；Ｔ；Ａ；Ｃ；Ａ；Ｃ；Ｃ｝」という文字列と、「＃ｂｌｏｃｋ２｛Ｔ；Ｇ；Ｔ；Ａ；Ｃ；Ｇ；Ｃ；Ａ；Ｇ；Ｃ；｝」という文字列と、「＃ｂｌｏｃｋ３｛Ｇ；Ｃ；Ａ；Ｔ；｝」という文字列とが記述されている。また、図１５（Ｂ）に示すファイル１３１ｂには、「＃ｂｌｏｃｋ４｛Ａ；Ａ；Ｃ；Ａ；Ａ；Ｃ；Ａ；Ａ；Ｔ；｝」という文字列と、「＃ｂｌｏｃｋ５｛Ｇ；Ａ；Ｇ；Ｇ；Ｇ；Ｃ；｝」という文字列とが記述されている。
【００４８】
図６に戻り、情報処理装置１のユニット特定部１１２は、Ｓ１１の処理で受け付けたソースコード１３１を分割することにより複数のユニット１３２を生成する（Ｓ１３）。そして、ユニット特定部１１２は、Ｓ１３の処理で生成した複数のユニット１３２を情報格納領域１３０に記憶する（Ｓ１４）。
【００４９】
これにより、情報処理装置１は、情報格納領域１３０に記憶された複数のユニット１３２を参照することで、後述するように、ソースコード解析処理を行うことが可能になる。以下、ユニット１３２の具体例について説明を行う。
【００５０】
［ユニットの具体例］
図１６は、ユニット１３２の具体例を説明する図である。図１６（Ａ）から（Ｃ）は、図１５（Ａ）で説明したファイル１３１ａを分割することにより生成された各ユニット１３２の具体例であり、図１６（Ｄ）及び（Ｅ）は、図１５（Ｂ）で説明したファイル１３１ｂを分割することにより生成された各ユニット１３２の具体例である。なお、以下、図１６（Ａ）から（Ｅ）に示すユニット１３２を、それぞれユニット１３２ａ、１３２ｂ、１３２ｃ、１３２ｄ及び１３２ｅとも呼ぶ。
【００５１】
具体的に、図１６（Ａ）に示すユニット１３２ａには、「＃ｂｌｏｃｋ１｛Ａ；Ｔ；Ｇ；Ｔ；Ａ；Ｃ；Ａ；Ｃ；Ｃ｝」という文字列が含まれており、図１６（Ｂ）に示すユニット１３２ｂには、「＃ｂｌｏｃｋ２｛Ｔ；Ｇ；Ｔ；Ａ；Ｃ；Ｇ；Ｃ；Ａ；Ｇ；Ｃ；｝」という文字列が含まれており、図１６（Ｃ）に示すユニット１３２ｃには、「＃ｂｌｏｃｋ３｛Ｇ；Ｃ；Ａ；Ｔ；｝」という文字列が含まれている。また、図１６（Ｄ）に示すユニット１３２ｄには、「＃ｂｌｏｃｋ４｛Ａ；Ａ；Ｃ；Ａ；Ａ；Ｃ；Ａ；Ａ；Ｔ；｝」という文字列が含まれており、図１６（Ｅ）に示すユニット１３２ｅには、「＃ｂｌｏｃｋ５｛Ｇ；Ａ；Ｇ；Ｇ；Ｇ；Ｃ；｝」という文字列が含まれている。
【００５２】
［ソースコード解析処理の詳細］
次に、ソースコード解析処理の詳細について説明を行う。図７から図１４は、ソースコード解析処理の詳細について説明するフローチャート図である。
【００５３】
情報処理装置１の要素数判定部１１３は、図７に示すように、コードクローン検出タイミングになるまで待機する（Ｓ２１のＮＯ）。そして、コードクローン検出タイミングになった場合（Ｓ２１のＹＥＳ）、要素数判定部１１３は、Ｓ２３の処理においてまだ抽出していないユニット１３２（以下、未抽出のユニット１３２とも呼ぶ）が存在するか否かを判定する（Ｓ２２）。
【００５４】
その結果、Ｓ２３の処理において未抽出のユニット１３２が存在すると判定した場合（Ｓ２２のＹＥＳ）、要素数判定部１１３は、情報格納領域１３０に記憶されたユニット１３２のうち、未抽出のユニット１３２を１つ抽出する（Ｓ２３）。
【００５５】
その後、要素数判定部１１３は、Ｓ２３の処理で抽出したユニット１３２に含まれる要素に対応する要素数情報１３３を生成する（Ｓ２４）。要素数情報１３３は、各ユニット１３２に含まれる要素の数についての情報である。以下、Ｓ２４の処理の具体例について説明を行う。
【００５６】
［Ｓ２４の処理の詳細］
図１０及び図１１は、Ｓ２４の処理の詳細を説明するフローチャート図である。
【００５７】
要素数判定部１１３は、Ｓ２３の処理で抽出したユニット１３２を解析し、Ｓ２３の処理で抽出したユニット１３２に記述された内容を要素列に変換する（Ｓ５１）。
【００５８】
具体的に、Ｓ２３の処理で抽出されたユニット１３２がユニット１３２ａ（図１６（Ａ）で説明したユニット１３２ａ）である場合、要素数判定部１１３は、例えば、「｛」と「｝」とによって囲まれた各要素（「Ａ」、「Ｔ」、「Ｇ」、「Ｔ」、「Ａ」、「Ｃ」、「Ａ」、「Ｃ」及び「Ｃ」）からなる要素列を生成する。
【００５９】
そして、要素数判定部１１３は、要素数を保存するための空の要素数情報１３３を情報格納領域１３０に記憶する（Ｓ５２）。
【００６０】
その後、要素数判定部１１３は、Ｓ６１の処理においてまだ抽出していない要素（以下、未抽出の要素とも呼ぶ）が存在するか否かを判定する（Ｓ５３）。
【００６１】
その結果、Ｓ５４の処理において未抽出の要素が存在すると判定した場合（Ｓ５３のＹＥＳ）、要素数判定部１１３は、図１１に示すように、Ｓ５１の処理で変換した要素列に含まれる要素のうち、未抽出の要素を１つ抽出する（Ｓ６１）。
【００６２】
続いて、要素数判定部１１３は、Ｓ６１の処理で抽出した要素のハッシュ値を算出する（Ｓ６２）。そして、Ｓ６２の処理で算出したハッシュ値が要素数情報１３３に設定されていない場合（Ｓ６３のＮＯ）、要素数判定部１１３は、Ｓ６２の処理で算出したハッシュ値と、Ｓ６１の処理で抽出した要素の抽出回数の初期値である０とを、Ｓ５２の処理で記憶した要素数情報１３３の少なくとも一部として情報格納領域１３０に記憶する（Ｓ６４）。一方、Ｓ６２の処理で算出したハッシュ値が要素数情報１３３に設定されている場合（Ｓ６３のＹＥＳ）、要素数判定部１１３は、Ｓ６４の処理を行わない。
【００６３】
さらに、要素数判定部１１３は、情報格納領域１３０に記憶された要素数情報１３３のうち、Ｓ６２で算出したハッシュ値に対応する抽出回数に１を加算する（Ｓ６５）。その後、要素数判定部１１３は、Ｓ５３以降の処理を再度行う。
【００６４】
すなわち、要素数判定部１１３は、Ｓ２３の処理で抽出したユニット１３２に含まれる要素数の累計を含む情報を要素数情報１３３として生成する。これにより、情報処理装置１は、生成した要素数情報１３３を参照することで、後述するように、コードクローンの検出対象から除外することが可能なユニット１３２のペアを特定することが可能になる。
【００６５】
一方、Ｓ５４の処理において未抽出の要素が存在しないと判定した場合（Ｓ５３のＹＥＳ）、要素数判定部１１３は、Ｓ５２の処理で記憶した要素数情報１３３における抽出回数の合計値を要素数として特定する（Ｓ５４）。そして、要素数判定部１１３は、Ｓ２４の処理を終了する。以下、Ｓ２４の処理で生成された要素数情報１３３の具体例について説明を行う。
【００６６】
［要素数情報の具体例］
図１７及び図１８は、要素数情報１３３の具体例を説明する図である。図１７は、Ｓ２４の処理で生成された要素数情報１３３の具体例を説明する図である。また、図１７（Ａ）から（Ｅ）に示す要素数情報１３３のそれぞれは、Ｓ２３の処理においてユニット１３２ａからユニット１３２ｅのそれぞれが抽出された場合に生成される要素数情報１３３の具体例である。
【００６７】
具体的に、図１７（Ａ）に示す要素数情報１３３には、ユニット１３２ａに含まれる要素の種類の１つである「Ａ」と、「Ａ」から算出されるハッシュ値である「０ｘ１１」と、ユニット１３２ａから「Ａ」が抽出された回数である「３（回）」とを対応させた情報が設定されている。また、図１７（Ａ）に示す要素数情報１３３には、ユニット１３２ａに含まれる要素の種類の１つである「Ｇ」と、「Ｇ」から算出されるハッシュ値である「０ｘ２ｆ」と、ユニット１３２ａから「Ｇ」が抽出された回数である「１（回）」とを対応させた情報が設定されている。また、図１７（Ａ）に示す要素数情報１３３には、ユニット１３２ａに含まれる要素の種類の１つである「Ｔ」と、「Ｔ」から算出されるハッシュ値である「０ｘ３ａ」と、ユニット１３２ａから「Ｔ」が抽出された回数である「２（回）」とを対応させた情報が設定されている。また、図１７（Ａ）に示す要素数情報１３３には、ユニット１３２ａに含まれる要素の種類の１つである「Ｃ」と、「Ｃ」から算出されるハッシュ値である「０ｘ４９」と、ユニット１３２ａから「Ｃ」が抽出された回数である「３（回）」とを対応させた情報が設定されている。
【００６８】
さらに、図１７（Ａ）に示す要素数情報１３３には、ユニット１３２ａに含まれる要素数として、図１７（Ａ）に示す要素数情報１３３にそれぞれ設定された「３（回）」、「１（回）」、「２（回）」及び「３（回）」の合計回数である「９（回）」が設定されている。図１７（Ｂ）、（Ｃ）、（Ｄ）及び（Ｅ）に含まれる情報については説明を省略する。
【００６９】
図７に戻り、要素数判定部１１３は、Ｓ２４の処理で生成された要素数情報１３３のうち、要素数が最小要素数以上の要素数情報１３３を情報格納領域１３０に記憶する（Ｓ２５）。最小要素数は、コードクローンとして検出される要素の集合（以下、コード片とも呼ぶ）に最低限含まれている必要がある要素の数である。この最小要素数は、例えば、事業者によって予め決定されて情報格納領域１３０に記憶されるものであってよい。なお、図４等で説明した所定数は、例えば、最小要素数であってよい。
【００７０】
具体的に、例えば、最小要素数が５（回）である場合、要素数判定部１１３は、Ｓ２４の処理で生成された要素数情報１３３のうち、要素数が５（回）以上である要素数情報１３３の記憶を行う。そのため、要素数判定部１１３は、例えば、図１８（Ａ）から（Ｄ）に示すように、図１７（Ｃ）で説明した要素数情報１３３を情報格納領域１３０から削除し、図１７（Ａ）、（Ｂ）、（Ｄ）及び（Ｅ）で説明した要素数情報１３３の記憶を維持する。
【００７１】
そして、要素数判定部１１３は、図８に示すように、Ｓ３２の処理においてまだ抽出していないユニット１３２にペア（以下、未抽出のユニット１３２のペアとも呼ぶ）が存在するか否かについての判定を行う（Ｓ３１）。
【００７２】
その結果、Ｓ３２の処理において未抽出のユニット１３２のペアが存在すると判定した場合（Ｓ３１のＹＥＳ）、要素数判定部１１３は、情報格納領域１３０に記憶されたユニット１３２のペアのうち、未抽出のペアを１つ抽出する（Ｓ３２）。
【００７３】
その後、情報処理装置１のユニットペア特定部１１４は、Ｓ３２の処理で抽出したユニット１３２のペアをコードクローンの検出対象とするか否かの判定を行う（Ｓ３３）。以下、Ｓ３３の処理の具体例について説明を行う。
【００７４】
［Ｓ３３の処理の詳細］
図１２から図１４は、Ｓ３３の処理の詳細を説明するフローチャート図である。
【００７５】
ユニットペア特定部１１４は、初期値として０が設定された共通要素数情報１３４を情報格納領域１３０に記憶する（Ｓ７１）。共通要素数情報１３４は、各ユニット１３２のペアに共通して含まれる要素の数についての情報である。
【００７６】
そして、ユニットペア特定部１１４は、Ｓ７３の処理において未抽出の要素が存在するか否かについての判定を行う(Ｓ７２)。
【００７７】
その結果、Ｓ７３の処理において未抽出の要素が存在すると判定した場合（Ｓ７２のＹＥＳ）、ユニットペア特定部１１４は、Ｓ３２の処理で抽出したユニット１３２のペアに含まれる要素を１つ抽出する（Ｓ７３）。
【００７８】
続いて、ユニットペア特定部１１４は、Ｓ７３の処理で抽出した要素のハッシュ値を算出する（Ｓ７４）。そして、ユニットペア特定部１１４は、図１３に示すように、情報格納領域１３０に記憶された要素数情報１３３のうち、Ｓ３２の処理で抽出したユニット１３２のペアに対応する要素数情報１３３のそれぞれに、Ｓ７４の処理で算出したハッシュ値が設定されているか否かを判定する（Ｓ８１）。
【００７９】
その結果、Ｓ７４の処理で算出したハッシュ値が設定されていると判定した場合（Ｓ８２のＹＥＳ）、ユニットペア特定部１１４は、Ｓ３２の処理で抽出したユニット１３２のペアに対応する要素数情報１３３のそれぞれに設定されたハッシュ値に対応する抽出回数のうち、小さい方の抽出回数を特定する（Ｓ８３）。そして、ユニットペア特定部１１４は、この場合、Ｓ８３の処理で特定した抽出回数を、情報格納領域１３０に記憶された共通要素数情報１３４に加算する（Ｓ８４）。
【００８０】
すなわち、ユニットペア特定部１１４は、Ｓ３２の処理で抽出したユニット１３２のペアにおいて、共通して含まれる要素数の累計を共通要素数情報１３４として生成する。これにより、情報処理装置１は、生成した共通要素数情報１３４を参照することで、後述するように、コードクローンの検出対象から除外することが可能なユニット１３２のペアを特定することが可能になる。
【００８１】
一方、Ｓ７４の処理で算出したハッシュ値が設定されていないと判定した場合（Ｓ８２のＮＯ）、ユニットペア特定部１１４は、Ｓ８３及びＳ８４の処理を行わない。その後、ユニットペア特定部１１４は、Ｓ７２以降の処理を再度行う。以下、Ｓ３３の処理で生成された共通要素数情報１３４の具体例について説明を行う。
【００８２】
［共通要素数情報の具体例］
図１９から図２１は、共通要素数情報１３４の具体例を説明する図である。図１９（Ａ）は、Ｓ３２の処理においてユニット１３２ａ及び１３２ｂのペアが抽出された場合に生成される共通要素数情報１３４の具体例であり、図１９（Ｂ）は、Ｓ３２の処理においてユニット１３２ａ及び１３２ｄのペアが抽出された場合に生成される共通要素数情報１３４の具体例である。また、図２０（Ａ）は、Ｓ３２の処理においてユニット１３２ａ及び１３２ｅのペアが抽出された場合に生成される共通要素数情報１３４の具体例であり、図２０（Ｂ）は、Ｓ３２の処理においてユニット１３２ｂ及び１３２ｄのペアが抽出された場合に生成される共通要素数情報１３４の具体例である。さらに、図２１（Ａ）は、Ｓ３２の処理においてユニット１３２ｂ及び１３２ｅのペアが抽出された場合に生成される共通要素数情報１３４の具体例であり、図２１（Ｂ）は、Ｓ３２の処理においてユニット１３２ｄ及び１３２ｅのペアが抽出された場合に生成される共通要素数情報１３４の具体例である。すなわち、図１９から図２１に示す共通要素数情報１３４は、図１８で説明した要素数情報１３３に対応するユニット１３２の各ペアに対応する共通要素数情報１３４である。
【００８３】
具体的に、図１９（Ａ）に示す共通要素数情報１３４には、要素の１つである「Ａ」と、「Ａ」から算出されるハッシュ値である「０ｘ１１」と、ユニット１３２ａから「Ａ」が抽出された回数である「３（回）」と、ユニット１３２ｂから「Ａ」が抽出された回数である「２（回）」と、「３（回）」及び「２（回）」のうちの最小数である「２（回）」とを対応させた情報が設定されている。また、図１９（Ａ）に示す共通要素数情報１３４には、要素の１つである「Ｇ」と、「Ｇ」から算出されるハッシュ値である「０ｘ２ｆ」と、ユニット１３２ａから「Ｇ」が抽出された回数である「１（回）」と、ユニット１３２ｂから「Ｇ」が抽出された回数である「３（回）」と、「１（回）」及び「３（回）」のうちの最小数である「１（回）」とを対応させた情報が設定されている。また、図１９（Ａ）に示す共通要素数情報１３４には、要素の１つである「Ｔ」と、「Ｔ」から算出されるハッシュ値である「０ｘ３ａ」と、ユニット１３２ａから「Ｔ」が抽出された回数である「２（回）」と、ユニット１３２ｂから「Ｔ」が抽出された回数である「２（回）」と、「２（回）」及び「２（回）」のうちの最小数である「２（回）」とを対応させた情報が設定されている。また、図１９（Ａ）に示す共通要素数情報１３４には、要素の１つである「Ｃ」と、「Ｃ」から算出されるハッシュ値である「０ｘ４９」と、ユニット１３２ａから「Ｃ」が抽出された回数である「３（回）」と、ユニット１３２ｂから「Ｃ」が抽出された回数である「３（回）」と、「３（回）」及び「３（回）」のうちの最小数である「３（回）」とを対応させた情報が設定されている。
【００８４】
さらに、図１９（Ａ）に示す共通要素数情報１３４には、ユニット１３２ａとユニット１３２ｂとに共通して含まれる要素数（共通要素数）として、図１９（Ａ）に示す共通要素数情報１３４に設定された「２（回）」、「１（回）」、「２（回）」及び「３（回）」の合計回数である「８（回）」が設定されている。図１９（Ｂ）、図２０（Ａ）、図２０（Ｂ）、図２１（Ａ）及び図２１（Ｂ）に含まれる情報については説明を省略する。
【００８５】
図１２に戻り、Ｓ７３の処理において未抽出の要素が存在しないと判定した場合（Ｓ７２のＮＯ）、ユニットペア特定部１１４は、図１４に示すように、情報格納領域１３０に記憶された共通要素数情報１３４のうち、Ｓ７１の処理で記憶した共通要素数情報１３４に含まれる共通要素数が最小要素数以上であるか否かを判定する（Ｓ９１）。
【００８６】
その結果、Ｓ７１の処理で記憶した共通要素数情報１３４に含まれる共通要素数が最小要素数以上であると判定した場合（Ｓ９２のＹＥＳ）、ユニットペア特定部１１４は、Ｓ３２の処理で抽出したユニット１３２のペアをコードクローンの検出対象として特定する（Ｓ９３）。一方、Ｓ７１の処理で記憶した共通要素数情報１３４に含まれる共通要素数が最小要素数以上でないと判定した場合（Ｓ９２のＮＯ）、ユニットペア特定部１１４は、Ｓ９３の処理を行わない。すなわち、ユニットペア特定部１１４は、この場合、Ｓ３２の処理で抽出したユニット１３２のペアをコードクローンの検出対象として特定しない。その後、情報処理装置１は、Ｓ３３の処理を終了する。
【００８７】
具体的に、図１９（Ａ）で説明した共通要素数情報１３４には、共通要素数として「８（回）」が設定されている。そのため、例えば、最小要素数が５（回）である場合であって、Ｓ３２の処理においてユニット１３２ａ及び１３２ｂのペアが抽出されている場合、ユニットペア特定部１１４は、ユニット１３２ａ及び１３２ｂのペアをコードクローンの検出対象として特定する。
【００８８】
図８に戻り、Ｓ３２の処理で抽出したユニット１３２のペアが検出対象であると判定した場合（Ｓ３４のＹＥＳ）、要素数判定部１１３は、Ｓ３２の処理で抽出したユニット１３２のペアを示す情報を、ユニットペア情報１３５の少なくとも一部として情報格納領域１３０に記憶する（Ｓ３５）。一方、Ｓ３２の処理で抽出したユニット１３２のペアが検出対象でないと判定した場合（Ｓ３４のＮＯ）、要素数判定部１１３は、Ｓ３５の処理を行わない。その後、要素数判定部１１３は、Ｓ３１以降の処理を再度行う。
【００８９】
また、Ｓ３２の処理において未抽出のペアが存在しないと判定した場合（Ｓ３１のＮＯ）、情報処理装置１のコードクローン検出部１１５は、図９に示すように、Ｓ４１以降の処理を行う。なお、以下、Ｓ３１からＳ３５の処理において生成されたユニットペア情報１３５には、ユニット１３２ａ及び１３２ｂのペアと、ユニット１３２ａ及び１３２ｄのペアと、ユニット１３２ｂ及び１３２ｄのペアと、ユニット１３２ｂ及びユニット１３２ｅのペアとを示す情報が含まれているものとして説明を行う。
【００９０】
そして、コードクローン検出部１１５は、情報格納領域１３０に記憶されたユニットペア情報１３５に対応するユニット１３２のペアのそれぞれに対して比較アルゴリズムを適用し、コードクローンを検出する（Ｓ４１）。
【００９１】
具体的に、コードクローン検出部１１５は、Ｓ４１の処理において、例えば、各ペアに対応するユニット１３２における最長共通部分列（ＬＳＣ：Ｌｏｎｇｅｓｔ  Ｃｏｍｍｏｍ  Ｓｕｂｓｅｑｕｅｎｃｅ）を特定する。最長共通部分列は、複数の比較対象のそれぞれにおいて同一の順序によって記述された複数の要素からなる文字列のうち、最長の文字列である。そして、コードクローン検出部１１５は、例えば、情報格納領域１３０に記憶されたユニットペア情報１３５に情報が含まれるユニット１３２のペアのうち、特定した最長共通部分列に含まれる要素数が所定の要素数以上であって、最長共通部分列に含まれない要素の割合が所定の割合以下であるペアを、コードクローンとして特定するものであってよい。なお、所定の要素数及び所定の割合は、事業者によって情報格納領域１３０に予め記憶されるものであってよい。以下、Ｓ４１の処理の具体例について説明を行う。
【００９２】
［Ｓ４１の処理の具体例］
図２２から図２５は、Ｓ４１の処理の具体例について説明する図である。図２２は、ユニット１３２ａ及び１３２ｂがコードクローンであるか否かを判定する場合の要素列の具体例であり、図２３は、ユニット１３２ａ及び１３２ｄがコードクローンであるか否かを判定する場合の要素列の具体例である。また、図２４は、ユニット１３２ｂ及び１３２ｄがコードクローンであるか否かを判定する場合の要素列の具体例であり、図２５は、ユニット１３２ｂ及び１３２ｅがコードクローンであるか否かを判定する場合の要素列の具体例である。
【００９３】
具体的に、図２２に示す例において、ユニット１３２ａとユニット１３２ｂにおける最長共通文字列は、図２２におけるハッチ部分に示すように、「Ｔ」、「Ｇ」、「Ｔ」、「Ａ」、「Ｃ」、「Ａ」及び「Ｃ」であり、要素数が７である。また、図２２に示す例において、ユニット１３２ａ及びユニット１３２ｂに含まれる要素数が１９であり、最長共通文字列に含まれていない要素の要素数が５である。そのため、図２２に示す例において、ユニット１３２ａ及びユニット１３２ｂに含まれる要素数のうち、最長共通文字列に含まれていない要素の要素数の割合は、約２６．３（％）である。
【００９４】
したがって、例えば、Ｓ４１の処理における所定の要素数が５であり、Ｓ４１の処理における所定の割合が３０（％）である場合、コードクローン検出部１１５は、ユニット１３２ａ及びユニット１３２ｂがコードクローンであるとして検出を行う。
【００９５】
一方、図２３に示す例において、ユニット１３２ａとユニット１３２ｄにおける最長共通文字列は、図２３におけるハッチ部分に示すように、「Ａ」、「Ａ」、「Ｇ」及び「Ａ」であり、要素数が４である。また、図２３に示す例において、ユニット１３２ａ及びユニット１３２ｄに含まれる要素数が１８であり、最長共通文字列に含まれていない要素の要素数が１０である。そのため、図２３に示す例において、ユニット１３２ａ及びユニット１３２ｄに含まれる要素数のうち、最長共通文字列に含まれていない要素の要素数の割合は、約５５．６（％）である。
【００９６】
したがって、例えば、Ｓ４１の処理における所定の要素数が５であり、Ｓ４１の処理における所定の割合が３０（％）である場合、コードクローン検出部１１５は、ユニット１３２ａ及びユニット１３２ｄがコードクローンでないものと判定する。
【００９７】
同様に、コードクローン検出部１１５は、図２４に示す例において、ユニット１３２ｂ及びユニット１３２ｄがコードクローンでないものと判定する。また、コードクローン検出部１１５は、図２５に示す例において、ユニット１３２ｂ及びユニット１３２ｅがコードクローンでないものと判定する。
【００９８】
図９に戻り、コードクローン検出部１１５は、Ｓ４１の処理で検出したコードクローンを示す情報をコードクローン情報１３６として情報格納領域１３０に記憶する（Ｓ４２）。
【００９９】
その後、情報処理装置１の結果出力部１１６は、情報格納領域１３０に記憶したコードクローン情報１３６を出力する（Ｓ４３）。具体的に、ユニット１３２ａ及びユニット１３２ｂがコードクローンであるとして検出された場合、結果出力部１１６は、例えば、ユニット１３２ａ及びユニット１３２ｂがコードクローンであることを示すコードクローン情報１３６を操作端末３に出力する。
【０１００】
このように、本実施の形態における情報処理装置１は、ソースコード１３１に含まれる複数のユニット１３２のうち、所定数以上の要素を含む複数のユニット１３２を特定する。そして、情報処理装置１は、特定した複数のユニット１３２における第１ペアごとに、各第１ペアに対応するユニット１３２において共通して含まれる要素数が、所定数以上であるか否かを判定する。その後、情報処理装置１は、第１ペアのうち、要素数が所定数以上であると判定したユニット１３２の第２ペアのそれぞれについて、記述内容が互いに類似するユニット１３２のペアの検出を行う。
【０１０１】
すなわち、例えば、ソースコード１３１に含まれる複数のユニット１３２のうち、所定数以上の要素を含むユニット１３２のみからコードクローンの検出が行われる場合、所定数以上の要素数を含まないユニット１３２を含むペアからは、コードクローンが検出されないものと判断できる。そのため、情報処理装置１は、所定数以上の要素数を含まないユニット１３２を含むペアを、コードクローンの検出を行うユニット１３２のペアから除外する。
【０１０２】
さらに、この場合、共通して含まれる要素数が所定数未満であるユニット１３２のペアからは、コードクローンが検出されないものと判断できる。そのため、情報処理装置１は、共通して含まれる要素数が所定数未満であるユニット１３２のペアを、コードクローンの検出を行うユニット１３２のペアから除外する。
【０１０３】
これにより、情報処理装置１は、コードクローンの検出を行うユニット１３２のペアの数を抑制することが可能になる。そのため、情報処理装置１は、コードクローンの特定を効率的に行うことが可能になる。したがって、情報処理装置１は、コードクローンの特定を高精度に行う方法が採用された場合であっても、コードクローンの特定を短時間に行うことが可能になる。
【０１０４】
以上の実施の形態をまとめると、以下の付記のとおりである。
【０１０５】
（付記１）
ソースコードに含まれる複数の部分コードから、記述内容が互いに類似する部分コードのペアを検出するソースコード解析装置であって、
前記複数の部分コードのうち、所定数以上の要素を含む複数の部分コードを特定する部分コード特定部と、
特定した前記複数の部分コードにおける第１ペアごとに、各第１ペアに対応する部分コードにおいて共通して含まれる前記要素の数が、前記所定数以上であるか否かを判定する要素数判定部と、
前記第１ペアのうち、前記要素の数が前記所定数以上であると判定した前記部分コードの第２ペアのそれぞれについて、前記記述内容が互いに類似する部分コードのペアの検出を行うコードクローン検出部と、を有する、
ことを特徴とするソースコード解析装置。
【０１０６】
（付記２）
付記１において、
前記コードクローン検出部は、
前記第２ペアごとに、各第２ペアに対応する各部分コードにおいて共通して含まれ、同一の順序によって記述された複数の前記要素からなる要素列のうち、最大数の前記要素を含む要素列を特定し、
前記第２ペアのうち、特定した前記要素列に含まれる前記要素の数が前記所定数以上であるペアを、前記記述内容が互いに類似する部分コードのペアとして特定する、
ことを特徴とするソースコード解析装置。
【０１０７】
（付記３）
付記１において、
前記要素は、文字、字句または前記ソースコードにおける行である、
ことを特徴とするソースコード解析装置。
【０１０８】
（付記４）
付記１において、
前記複数の部分コードは、前記ソースコードを分割することにより生成されるコードである、
ことを特徴とするソースコード解析装置。
【０１０９】
（付記５）
付記１において、
前記要素数判定部は、
前記第１ペアごとであって前記要素ごとに、各第１ペアに対応する部分コードにおいて共通して含まれる各要素の数を特定し、
前記第１ペアごとに、特定した前記要素の数の和を算出し、
前記第１ペアごとに、算出した前記和が前記所定数以上であるか否かの判定を行う、
ことを特徴とするソースコード解析装置。
【０１１０】
（付記６）
ソースコードに含まれる複数の部分コードから、記述内容が互いに類似する部分コードのペアを検出するソースコード解析方法であって、
前記複数の部分コードのうち、所定数以上の要素を含む複数の部分コードを特定し、
特定した前記複数の部分コードにおける第１ペアごとに、各第１ペアに対応する部分コードにおいて共通して含まれる前記要素の数が、前記所定数以上であるか否かを判定し、
前記第１ペアのうち、前記要素の数が前記所定数以上であると判定した前記部分コードの第２ペアのそれぞれについて、前記記述内容が互いに類似する部分コードのペアの検出を行う、
ことを特徴とするソースコード解析方法。
【０１１１】
（付記７）
付記６において、
前記判定する工程では、
前記第１ペアごとであって前記要素ごとに、各第１ペアに対応する部分コードにおいて共通して含まれる各要素の数を特定し、
前記第１ペアごとに、特定した前記要素の数の和を算出し、
前記第１ペアごとに、算出した前記和が前記所定数以上であるか否かの判定を行う、
ことを特徴とするソースコード解析方法。
【０１１２】
（付記８）
ソースコードに含まれる複数の部分コードから、記述内容が互いに類似する部分コードのペアを検出する処理をコンピュータに実行させるソースコード解析プログラムであって、
前記複数の部分コードのうち、所定数以上の要素を含む複数の部分コードを特定し、
特定した前記複数の部分コードにおける第１ペアごとに、各第１ペアに対応する部分コードにおいて共通して含まれる前記要素の数が、前記所定数以上であるか否かを判定し、
前記第１ペアのうち、前記要素の数が前記所定数以上であると判定した前記部分コードの第２ペアのそれぞれについて、前記記述内容が互いに類似する部分コードのペアの検出を行う、
処理をコンピュータに実行させることを特徴とするソースコード解析プログラム。
【０１１３】
（付記９）
付記８において、
前記判定する処理では、
前記第１ペアごとであって前記要素ごとに、各第１ペアに対応する部分コードにおいて共通して含まれる各要素の数を特定し、
前記第１ペアごとに、特定した前記要素の数の和を算出し、
前記第１ペアごとに、算出した前記和が前記所定数以上であるか否かの判定を行う、
ことを特徴とするソースコード解析プログラム。
【符号の説明】
【０１１４】
１：情報処理装置            １ａ：記憶装置
３ａ：操作端末              ３ｂ：操作端末
３ｃ：操作端末              １３１：ソースコード
【図１】
2019032688.tif 000003
【図２】
2019032688.tif 000004
【図３】
2019032688.tif 000005
【図４】
2019032688.tif 000006
【図５】
2019032688.tif 000007
【図６】
2019032688.tif 000008
【図７】
2019032688.tif 000009
【図８】
2019032688.tif 000010
【図９】
2019032688.tif 000011
【図１０】
2019032688.tif 000012
【図１１】
2019032688.tif 000013
【図１２】
2019032688.tif 000014
【図１３】
2019032688.tif 000015
【図１４】
2019032688.tif 000016
【図１５】
2019032688.tif 000017
【図１６】
2019032688.tif 000018
【図１７】
2019032688.tif 000019
【図１８】
2019032688.tif 000020
【図１９】
2019032688.tif 000021
【図２０】
2019032688.tif 000022
【図２１】
2019032688.tif 000023
【図２２】
2019032688.tif 000024
【図２３】
2019032688.tif 000025
【図２４】
2019032688.tif 000026
【図２５】
2019032688.tif 000027