(57)【要約】【課題】プロダクトの分類の精度を向上させること。【解決手段】プロダクトを構成するテキストファイルを複数用いて、複数のプロダクトを類似したプロダクトごとに分類する分類システムにおいて、設計書クラスタリング部が、複数の設計書それぞれに含まれる文字列の間の類似度を算出し、算出した類似度に基づいて複数のプロダクトのクラスタリングを行う。ソースコードクラスタリング部が、複数のソースコードそれぞれに含まれる文字列の間の類似度を算出し、算出した類似度に基づいて複数のプロダクトのクラスタリングを行う。閾値決定部が、設計書クラスタリング部、ソースコードクラスタリング部の結果を用いて閾値を決定し、複数のプロダクトを第１及び第２プロダクト群に分類する。クラスタ合成部が、閾値決定部によって分類された第１プロダクト群と第２プロダクト群とを第３プロダクト群として統合する。【選択図】        図１
2012252519.tif 000002
【特許請求の範囲】
【請求項１】
プロダクトを構成するテキストファイルを複数用いて、複数のプロダクトを類似したプロダクトごとに分類する分類システムであって、
複数のテキストファイルそれぞれに含まれる文字列の間の類似度を算出し、算出した類似度に基づいて前記複数のプロダクトのクラスタリングを行う第１のクラスタリング部と、
前記第１のクラスタリング部によって用いられたテキストファイルとは異なる種類の複数のテキストファイルそれぞれに含まれる文字列の間の類似度を算出し、算出した類似度に基づいて前記複数のプロダクトのクラスタリングを行う第２のクラスタリング部と、
前記第１のクラスタリング部、第２のクラスタリング部の結果を用いて閾値を決定し、前記複数のプロダクトを第１及び第２プロダクト群に分類する閾値決定部と、
前記閾値決定部によって分類された第１プロダクト群と、前記閾値決定部によって分類された第２プロダクト群とを第３プロダクト群として統合する統合部と、
を有することを特徴とする分類システム。
【請求項２】
前記第１のクラスタリング部は、前記複数のプロダクトそれぞれの設計書に含まれる単語の出現頻度を用いて類似度を算出し、算出した類似度に基づいて前記複数のプロダクトのクラスタリングを行い、
前記第２のクラスタリング部は、前記複数のプロダクトそれぞれのソースコードに含まれるコードクローンを用いて類似度を算出し、算出した類似度に基づいて前記複数のプロダクトのクラスタリングを行うことを特徴とする請求項１に記載の分類システム。
【請求項３】
前記第２のクラスタリング部は、前記複数のプロダクトそれぞれのソースコードに異なる記述言語で記述されたコードが含まれていた場合には、記述言語ごとに前記類似度を算出し、算出した記述言語ごとの類似度を合成した合成類似度に基づいて前記複数のプロダクトのクラスタリングを行うことを特徴とする請求項２に記載の分類システム。
【請求項４】
前記統合部は、前記閾値決定部によって３種類以上のプロダクト群が分類された場合に、当該３種類以上のプロダクト群を累積的に統合して前記第３プロダクト群とすることを特徴とする請求項１〜３のいずれか一つに記載の分類システム。
【請求項５】
プロダクトを構成するテキストファイルを複数用いて、複数のプロダクトを類似したプロダクトごとに分類する分類システムによって実行される分類方法であって、
複数のテキストファイルそれぞれに含まれる文字列の間の類似度を算出し、算出した類似度に基づいて前記複数のプロダクトのクラスタリングを行う第１のクラスタリング工程と、
前記第１のクラスタリング工程によって用いられたテキストファイルとは異なる種類の複数のテキストファイルそれぞれに含まれる文字列の間の類似度を算出し、算出した類似度に基づいて前記複数のプロダクトのクラスタリングを行う第２のクラスタリング工程と、
前記第１のクラスタリング工程、第２のクラスタリング工程の結果を用いて閾値を決定し、前記複数のプロダクトを第１及び第２プロダクト群に分類する閾値決定工程と、
前記閾値決定工程によって分類された第１プロダクト群と、前記閾値決定工程によって分類された第２プロダクト群とを第３プロダクト群として統合する統合工程と、
を含んだことを特徴とする分類方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、分類システム及び分類方法に関する。
【背景技術】
【０００２】
従来、企業などにおいては、部門ごとに個別に最適化されたアプリケーションから企業全体のＩＴシステムの最適化を目指すというアプリケーション統合の動きが進んでいる。特に、近年、クラウドコンピューティングの進展に伴い、クラウド環境上へ既存アプリケーションを移行しようとする企業が増えており、そのこともアプリケーション統合への関心を高めている。
【０００３】
ここで、クラウド環境上へ既存アプリケーションを移行しようとした場合に、既存アプリケーションをそのままクラウド環境上に乗せただけでは、類似性の高い機能が分散実装されてしまう可能性があり、メンテナンス性の観点で問題がある。このような問題を解決するには、既存アプリケーションに対して共通性分析を行って共通機能を切り出し、共通基盤として利用可能とすることが重要である。また、近年、再利用性を高めるための開発手法としてプロダクトライン開発が注目されているが、ここでも要求定義をプロダクトに共通な要求と可変な要求とを分けて管理することが重要とされており、共通性分析が行われている。なお、ここでいうプロダクトとは、製作物、具体的には、ある目的のために構成されたアプリケーションなどである。
【０００４】
このような共通性分析においては、分析対象とするプロダクト群を共通性が高いグループにあらかじめ絞り込むこと(以下、スコーピングと記す)が有効である。しかしながら、その分析を人手で行うことは困難であるため、大規模かつ多数のプロダクトを対象としたスコーピング分析を行うための技術が必要である。 
【０００５】
そこで、近年、プロダクトのソースコード又は設計書を利用したスコーピング分析が知られている。例えば、ソースコードを利用したスコーピング分析としては、プロダクト間のコードクローンを求め、全体の中でコードクローンが占める割合を類似度とする。そして、類似度から距離を求め、これに対して階層クラスタリングを適用することで、プロダクト間の類似度に基づく樹状図を得る技術が知られている。また、ソースコードを利用したスコーピング分析としては、ソースコードに含まれる関数名，変数名，型名等の識別子を用いてプロダクト群を分類する技術や、コードクローンとＤＩＦＦを組み合わせて用いることで、行単位での類似性を求める技術、異なるソフトウェア間をコードクローンによって解析する技術などが知られている。
【０００６】
また、例えば、設計書を利用したスコーピング分析としては、設計書から単語を抽出し、ＴＦ（Term Frequency）−ＩＤＦ（Inverse Document Frequency）ベースの重みを持つ単語ベクトルを生成する。そして、プロダクト毎に得た単語ベクトル間の距離を求め、これに対して階層的クラスタリングを適用することで、プロダクト間の類似度に基づく樹状図を得る技術が知られている。これに類似した技術としては、例えば、開発文書に階層的クラスタリング法を適用し、ＧＵＲＵというソフトウェアライブラリの検索システムに応用した技術や、ＳＶＭ(Support Vector Machine)を用いた教師有り学習によりソフトウェアをトピックに分類する技術なども知られている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００３−２１６４２５号公報
【非特許文献】
【０００８】
【非特許文献１】川口真司,パンカジ・ガーグ,松下誠,井上克郎: MUDABlue:ソフトウェアリポジトリ自動分類システム, 電子情報通信学会論文誌 D-I, Vol.J88-D-I, No. 8, pp.1217-1225 (2005).
【非特許文献２】山本哲男,松下誠,神谷年洋,井上克郎:ソフトウェアシステムの類似度とその計測ツール SMMT,電子情報通信学会論文誌 D-I, Vol. J85-D-I, No. 6,pp.503-511 (2002).
【非特許文献３】吉村健太郎,ガネサン・ダルマリンガム,ムーティック・ディルク:プロダクトライン導入に向けたレガシーソフトウェアの共通性・可変性分析法, 情報処理学会論文誌, Vol. 48, No. 8, pp.2482-2491 (2007).
【非特許文献４】Maarek, Y. S., Berry, D. M. and Kaiser, G. E.: An information retrieval approach for automatically constructing software libraries, IEEE Transactions on Software Engineering, Vol. 17, No. 8, pp.800.813 (1991).
【非特許文献５】Ugurel, S., Krovetz, R., Giles, C. L., Pennock, D. M., Glover, E. J. and Zha, H.: What's the code? automatic classification of source code archives, Proc. of the 8th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, pp.632.638 (2002).
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、上述した従来技術では、プロダクトの分類の精度に一定の限界があった。例えば、ソースコードを利用した技術では、同一の記述言語でしか分析できないため、プロダクトの分類の精度に一定の限界があった。また、ソースコードを利用した技術では、機能が同じでも実装が異なる場合、ソースコードの流用部分が少ないため、正しく分類できず、プロダクトの分類の精度に一定の限界があった。また、例えば、設計書を利用した技術では、機能が異なっても、分野などが同じであれば使われている言葉の種類が同じ傾向を持つため、正しく分類できず、プロダクトの分類の精度に一定の限界があった。
【００１０】
そこで、本願は、上述した従来技術の問題に鑑みてなされたものであって、プロダクトの分類の精度を向上させる分類システム及び分類方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上述した課題を解決し、目的を達成するため、本願のシステムは、プロダクトを構成するテキストファイルを複数用いて、複数のプロダクトを類似したプロダクトごとに分類する分類システムであって、複数のテキストファイルそれぞれに含まれる文字列の間の類似度を算出し、算出した類似度に基づいて前記複数のプロダクトのクラスタリングを行う第１のクラスタリング部と、前記第１のクラスタリング部によって用いられたテキストファイルとは異なる種類の複数のテキストファイルそれぞれに含まれる文字列の間の類似度を算出し、算出した類似度に基づいて前記複数のプロダクトのクラスタリングを行う第２のクラスタリング部と、前記第１のクラスタリング部、第２のクラスタリング部の結果を用いて閾値を決定し、前記複数のプロダクトを第１及び第２プロダクト群に分類する閾値決定部と、前記閾値決定部によって分類された第１プロダクト群と、前記閾値決定部によって分類された第２プロダクト群とを第３プロダクト群として統合する統合部とを有することを特徴とする。
【発明の効果】
【００１２】
本願のシステムは、プロダクトの分類の精度を向上させることを可能にする。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施例１に係る分類システムの構成の一例を説明するための図である。
【図２】図２は、実施例１に係る設計書クラスタリング部によるプロダクトの分類の処理結果の一例を示す図である。
【図３】図３は、実施例１に係るソースコードクラスタリング部によるプロダクトの分類の処理結果の一例を示す図である。
【図４】図４は、実施例１に係る閾値決定部による閾値の決定処理の一例を説明するための図である。
【図５】図５は、実施例１に係る設計書クラスタリング部によって生成された樹状図からのプロダクトの分類の一例を示す図である。
【図６】図６は、実施例１に係るソースコードクラスタリング部によって生成された樹状図からのプロダクトの分類の一例を示す図である。
【図７】図７は、実施例１に係るクラスタ合成部による処理の一例を説明するための図である。
【図８】図８は、実施例１に係る設計書クラスタリング部による分類処理の手順を示すフローチャートである。
【図９】図９は、実施例１に係るソースコードクラスタリング部による分類処理の手順を示すフローチャートである。
【図１０】図１０は、実施例１に係るクラスタ合成部による処理の手順を示すフローチャートである。
【図１１】図１１は、実施例２に係る分類システムの構成の一例を説明するための図である。
【図１２】図１２は、実施例２に係るクラスタ合成部による処理の手順を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下に添付図面を参照して、本願の分類システム及び分類方法の実施例を詳細に説明する。なお、本願の分類システム及び分類方法は、以下の実施例により限定されるものではない。
【実施例１】
【００１５】
［実施例１に係る分類システムの構成］
実施例１に係る分類システムの構成について説明する。図１は、実施例１に係る分類システム１０の構成の一例を説明するための図である。図１に示すように、実施例１に係る分類システム１０は、プロダクトアーカイブ１と、設計書クラスタリング部２と、ソースコードクラスタリング部３と、閾値決定部４と、クラスタ合成部５とを有し、設計書クラスタリング部２によって分類されたプロダクト群と、ソースコードクラスタリング部３によって分類されたプロダクト群とを統合した合成クラスタを出力する。なお、以下、本実施例にて記述される「プロダクト」とは、製作物、具体的には、ある目的のために構成されたアプリケーションそのものを示し、ファイルにより構成される。
【００１６】
プロダクトアーカイブ１は、プロダクトを構成するテキストファイルを記憶する。例えば、プロダクトアーカイブ１は、図１に示すように、プロダクトＰのソースコードＰ及び設計書Ｐや、プロダクトＱのソースコードＱ及び設計書Ｑなどを記憶する。なお、ここでいう設計書とは、要件定義書、基本設計書及び機能設計書などのソフトウェア開発の上流工程で作成された設計書を示す。また、図１においては、２つのプロダクト（プロダクトＰ及びプロダクトＱ）のみが示されているが、実際には、プロダクトアーカイブ１は、多数のプロダクトについて、該プロダクトを構成するテキストファイルを記憶する。また、以下では、プロダクトＰとプロダクトＱとをそれぞれの設計書及びソースコードの類似性に基づいて分類する場合を一例として説明する。
【００１７】
設計書クラスタリング部２は、複数のプロダクトをそれぞれ構成するテキストファイルに含まれる文字列の類似度を算出し、算出した類似度に基づいて複数のプロダクトのクラスタリングを行う。具体的には、設計書クラスタリング部２は、複数のプロダクトそれぞれの設計書に含まれる単語の出現頻度を用いて類似度を算出し、算出した類似度に基づいて前記複数のプロダクトのクラスタリングを行う。例えば、設計書クラスタリング部２は、プロダクトアーカイブ１から設計書Ｐを読み出し、読み出した設計書Ｐから単語を抽出し、抽出した単語を用いて、設計書Ｐの単語ベクトルＷ（Ｐ）（以下、太字Ｗは、単語ベクトルを示す）を生成する。同様に、設計書クラスタリング部２は、プロダクトアーカイブ１から設計書Ｑを読み出し、読み出した設計書Ｑから単語を抽出し、抽出した単語を用いて、設計書Ｑの単語ベクトルＷ（Ｑ）を生成する。そして、設計書クラスタリング部２は、生成したＷ（Ｐ）とＷ（Ｑ）との距離を、設計書Ｐと設計書Ｑとの類似度として算出する。ここで、単語ベクトルとは、文書に出現する各単語の出現頻度に基づく数値を基底とするベクトルである。すなわち、設計書クラスタリング部２は、類似性を比較する設計書Ｐと設計書Ｑとを、それぞれの設計書に含まれる単語の出現頻度により仮想空間上の座標で表現し、座標間の距離によって類似度を算出する。以下、設計書クラスタリング部２による単語ベクトル間の距離算出の一例を示す。
【００１８】
例えば、設計書クラスタリング部２は、まず、プロダクトアーカイブ１から設計書Ｐを読み出し、読み出した設計書Ｐに前処理を実行する。一例を挙げると、設計書クラスタリング部２は、読み出した設計書Ｐに含まれる半角文字を全て全角文字に変換したり、アルファベットの小文字を大文字に変換したりする。そして、設計書クラスタリング部２は、文字を変換した設計書Ｐに対して形態素解析を実行することで、単語を抽出する。ここで、設計書クラスタリング部２は、単語として名詞のみを抽出するとともに、「＜」や「＝」などを含む単語を不要語として除去する。
【００１９】
その後、設計書クラスタリング部２は、以下に示す式（１）及び式（２）により、単語ベクトルＷ（Ｐ）の単語ｔに関する成分ｗ（ｔ,Ｐ）を算出する。なお、式（１）の「ｔｆ（ｔ,Ｐ）」は、設計書Ｐにおける単語ｔの出現頻度を示す。また、式（２）の「Ｎ」は、全プロダクトの数を示す。また、式（２）の「ｄｆ（ｔ）」は、単語ｔが出現するプロダクトの数を示す。
【００２０】
【数１】
2012252519.tif 000003
【００２１】
【数２】
2012252519.tif 000004
【００２２】
すなわち、設計書クラスタリング部２は、式（１）及び式（２）に示すように、ＴＦ−ＩＤＦの重みを考慮して単語ベクトルＷ（Ｐ）を生成する。このことにより、設計書Ｐに出現する特定の単語がどのくらい特徴的であるかを反映させた単語ベクトルＷ（Ｐ）を生成することができる。設計書クラスタリング部２は、設計書Ｐから抽出した全ての単語に関する成分を算出して、単語ベクトルＷ（Ｐ）を生成する。なお、単語ベクトルの次元数を考慮して、単語ベクトルの生成に用いる成分を任意に選択してもよい。例えば、単語ごとにベクトルの成分の値の最大値を算出して、上位２００位に入る単語の成分以外を除去して、２００次元のベクトルを生成する場合であってもよい。
【００２３】
同様に、設計書クラスタリング部２は、単語ベクトルＷ（Ｑ）を生成する。そして、設計書クラスタリング部２は、生成した単語ベクトルＷ（Ｐ）とＷ（Ｑ）とを用いた以下の式（３）により、プロダクトＰとＱとの類似度を算出する。なお、式（３）の「Ｄd（Ｐ,Ｑ）」は、プロダクトＰとＱとのコサイン距離を示す。
【００２４】
【数３】
2012252519.tif 000005
【００２５】
式（３）に示すように、設計書クラスタリング部２は、単語ベクトルＷ（Ｐ）とＷ（Ｑ）とを用いたコサイン距離を類似度として算出する。すなわち、設計書クラスタリング部２は、類似性の高いプロダクト間の距離は短く、類似性の低いプロダクト間の距離は長くなるコサイン距離を算出する。
【００２６】
そして、設計書クラスタリング部２は、算出したコサイン距離を用いてプロダクトを階層的クラスタリングによりクラスタリングする。図２は、実施例１に係る設計書クラスタリング部２によるプロダクトの分類の処理結果の一例を示す図である。ここで、図２においては、２７個のプロダクト（Ａ０１〜Ａ１０、Ｂ０１〜Ｂ０３、Ｂ０５、Ｂ０６、Ｃ０１〜Ｃ０７、Ｄ０１〜Ｄ０３、Ｅ０１、Ｅ０２）を対象とし、単連結法を用いて生成した樹状図を示す。また、図２に示す「Ｈｅｉｇｈｔ」は、距離を示す。
【００２７】
例えば、設計書クラスタリング部２は、図２に示すように、プロダクト間のコサイン距離を、プロダクト間を結ぶ線の長さで表現した樹状図を生成することで、設計書の類似性に基づいたプロダクトのクラスタリングを行う。
【００２８】
図１に戻って、ソースコードクラスタリング部３は、設計書クラスタリング部２によって用いられたテキストファイルとは異なる種類のテキストファイルに含まれる文字列の類似度を算出し、算出した類似度に基づいて複数のプロダクトのクラスタリングを行う。具体的には、ソースコードクラスタリング部３は、複数のプロダクトそれぞれのソースコードに含まれるコードクローンを用いて類似度を算出し、算出した類似度に基づいて複数のプロダクトのクラスタリングを行う。
【００２９】
例えば、ソースコードクラスタリング部３は、プロダクトアーカイブ１からソースコードＰとソースコードＱとを読み出し、ソースコードＰ上にあるソースコードＱとのコードクローンを抽出する。一例を挙げると、ソースコードクラスタリング部３は、ＣＣＦｉｎｄｅｒＸを用いてコードクローンを抽出する。ＣＣＦｉｎｄｅｒＸは、Java（登録商標）、C/C++、COBOL、VB、C#に対応したコードクローン検出ツールであり、ソースコードをトークン（字句）に切り分け、ユーザ定義名（識別子）の対応付けを行ったうえで個別のパラメータに置き換えてソースコードの比較を行う。すなわち、ＣＣＦｉｎｄｅｒＸを用いることで、改行位置が異なったり、変数名が書き換えられたりしているようなソースコードからもコードクローンを抽出することが可能である。同様に、ソースコードクラスタリング部３は、プロダクトアーカイブ１からソースコードＰとソースコードＱとを読み出し、ソースコードＱ上にあるソースコードＰとのコードクローンを抽出する。
【００３０】
そして、ソースコードクラスタリング部３は、以下に示す式（４）により、所定の記述言語Ｌiに関するプロダクトＰ、Ｑ間のトークンを単位とした類似度Ｓi（Ｐ,Ｑ）を算出する。なお、式（４）の「ＴＣp」は、ソースコードＰ上にあるソースコードＱとのコードクローンに含まれるトークン数を示す。また、式（４）の「ＴＣQ」は、ソースコードＱ上にあるソースコードＰとのコードクローンに含まれるトークン数を示す。また、式（４）の「Ｔp」は、ソースコードＰの全トークン数を示す。また、式（４）の「ＴQ」は、ソースコードＱの全トークン数を示す。
【００３１】
【数４】
2012252519.tif 000006
【００３２】
すなわち、ソースコードクラスタリング部３は、式（４）に示すように、ソースコードＰの全トークン数とソースコードＱの全トークン数とを加算したトークン数に対する、ソースコードＰ上にあるソースコードＱとのコードクローンに含まれるトークン数とソースコードＱ上にあるソースコードＰとのコードクローンに含まれるトークン数とを加算したトークン数の割合を、ソースコードＰとソースコードＱとの類似度Ｓi（Ｐ,Ｑ）として算出する。
【００３３】
ここで、複数のプロダクトそれぞれのソースコードに異なる記述言語で記述されたコードが含まれていた場合には、ソースコードクラスタリング部３は、記述言語ごとに類似度を算出し、算出した記述言語ごとの類似度を合成した合成類似度に基づいて複数のプロダクトのクラスタリングを行う。具体的には、ソースコードクラスタリング部３は、分析対象となるプロダクトに含まれる記述言語の集合をＬ＝{Ｌ1,Ｌ2,・・・,Ｌn}とする。そして、ソースコードクラスタリング部３は、式（４）を用いて各記述言語の類似度を算出し、算出した類似度を成分とした類似度ベクトルＳ（Ｐ,Ｑ）（以下、太字Ｓは、類似度ベクトルを示す）を、以下の式（５）のように定義する。
【００３４】
【数５】
2012252519.tif 000007
【００３５】
そして、ソースコードクラスタリング部３は、分析対象となるソースコードに含まれる全ての記述言語を考慮した類似度である合成類似度Ｓ（Ｐ,Ｑ）を、以下に示す式（６）により算出する。
【００３６】
【数６】
2012252519.tif 000008
【００３７】
すなわち、ソースコードクラスタリング部３は、式（６）に示すように、類似度ベクトルＳ（Ｐ,Ｑ）の絶対値を記述言語数の平方根で割った値を合成類似度Ｓ（Ｐ,Ｑ）として算出する。
【００３８】
その後、ソースコードクラスタリング部３は、合成類似度Ｓ（Ｐ,Ｑ）を用いた以下の式（７）により、分析対象となるプロダクトに含まれる全ての記述言語を考慮したソースコードＰ、Ｑ間の距離である合成距離Ｄs（Ｐ,Ｑ）を算出する。
【００３９】
【数７】
2012252519.tif 000009
【００４０】
式（７）に示すように、ソースコードクラスタリング部３は、「１」から合成類似度Ｓ（Ｐ,Ｑ）を減算した値を合成距離Ｄs（Ｐ,Ｑ）として算出する。すなわち、ソースコードクラスタリング部３は、合成類似度Ｓ（Ｐ,Ｑ）の値が高いほど合成距離Ｄs（Ｐ,Ｑ）が「０」に近くなり、合成類似度Ｓ（Ｐ,Ｑ）の値が低いほど合成距離Ｄs（Ｐ,Ｑ）が「１」に近くなる合成距離Ｄs（Ｐ,Ｑ）を算出する。
【００４１】
そして、ソースコードクラスタリング部３は、算出した合成距離を用いてプロダクトを階層的クラスタリングによりクラスタリングする。図３は、実施例１に係るソースコードクラスタリング部３によるプロダクトの分類の処理結果の一例を示す図である。ここで、図３においては、２７個のプロダクト（Ａ０１〜Ａ１０、Ｂ０１〜Ｂ０３、Ｂ０５、Ｂ０６、Ｃ０１〜Ｃ０７、Ｄ０１〜Ｄ０３、Ｅ０１、Ｅ０２）を対象とし、単連結法を用いて生成した樹状図を示す。また、図３に示す「Ｈｅｉｇｈｔ」は、距離を示す。
【００４２】
例えば、ソースコードクラスタリング部３は、図３に示すように、プロダクト間の合成距離を、プロダクト間を結ぶ線の長さで表現した樹状図を生成することで、ソースコードの類似性に基づくプロダクトのクラスタリングを行う。
【００４３】
図１に戻って、閾値決定部４は、設計書クラスタリング部２、ソースコードクラスタリング部３の結果を用いて閾値を決定し、複数のプロダクトを第１及び第２プロダクト群に分類する。具体的には、閾値決定部４は、まず、設計書クラスタリング部２及びソースコードクラスタリング部３によって生成された樹状図からプロダクトを分類するための閾値を決定する。例えば、閾値決定部４は、操作者からの閾値の入力処理を受付けることで、樹状図からプロダクトを分類するための閾値を決定する。図４は、実施例１に係る閾値決定部４による閾値の決定処理の一例を説明するための図である。ここで、図４においては、図示しない表示部に表示されたＧＵＩ（Graphical User Interface）を参照しながら、操作者が閾値の入力操作を行い、閾値を決定する場合について示す。また、図４においては、図２に示す樹状図に対する閾値を決定する場合について示す。
【００４４】
例えば、操作者は、図４に示すプルダウンから「設計書による樹状図」を選択することで、設計書クラスタリング部２によって生成された樹状図を表示部に表示させる。そして、操作者は、「ＵＰ」及び「ＤＯＷＮ」を操作することで閾値を示すラインを樹状図上で上下させ、所望の位置にラインを設定した後に「決定」の入力操作を行う。これにより、閾値決定部４は、設計書クラスタリング部２によって生成された樹状図からプロダクトを分類するための閾値を決定する。
【００４５】
なお、閾値決定部４は、樹状図からプロダクトを分類するための閾値を自動で決定する場合であってもよい。かかる場合には、閾値決定部４は、全てのプロダクト間の距離に応じて、閾値を自動で決定する。
【００４６】
そして、閾値決定部４は、決定した閾値を用いて、第１プロダクト群及び第２プロダクト群を分類する。図５は、実施例１に係る設計書クラスタリング部２によって生成された樹状図からのプロダクトの分類の一例を示す図である。図５においては、図２に示す樹状図からのプロダクトの分類の一例を示す。例えば、図５に示すように、閾値決定部４は、閾値を決定すると、決定した閾値と樹状図における線との交点の「Ｈｅｉｇｈｔ」よりも低い位置で連結されたプロダクトを一つのクラスタとして分類する。
【００４７】
すなわち、図５に示すように、閾値決定部４は、閾値を「０．３５」と決定すると、プロダクト「Ａ０１」及び「Ａ０２」をクラスタＣd1として分類し、プロダクト「Ａ０３」〜「Ａ１０」及び「Ｄ０１」〜「Ｄ０３」をクラスタＣd2として分類し、プロダクト「Ｃ０１」〜「Ｃ０７」をクラスタＣd3として分類し、プロダクト「Ｂ０１」、「Ｂ０３」、「Ｂ０５」及び「Ｂ０６」をクラスタＣd4として分類する。また、閾値決定部４は、「Ｂ０２」、「Ｅ０１」及び「Ｅ０２」をそれぞれ単独のクラスタとして分類する。
【００４８】
図６は、実施例１に係るソースコードクラスタリング部３によって生成された樹状図からのプロダクトの分類の一例を示す図である。図６においては、図３に示す樹状図からのプロダクトの分類の一例を示す。例えば、図６に示すように、閾値決定部４は、を決定すると、決定した閾値と樹状図における線との交点の「Ｈｅｉｇｈｔ」よりも低い位置で連結されたプロダクトを一つのクラスタとして分類する。
【００４９】
すなわち、図６に示すように、閾値決定部４は、閾値を「０．９５」と決定すると、プロダクト「Ａ０１」及び「Ａ０２」をクラスタＣs1として分類し、プロダクト「Ａ０４」〜「Ａ０９」をクラスタＣs2として分類し、プロダクト「Ｂ０３」、「Ｂ０５」及び「Ｂ０６」をクラスタＣs3として分類し、プロダクト「Ｃ０１」〜「Ｃ０４」をクラスタＣs4として分類し、プロダクト「Ｃ０６」及び「Ｃ０７」をクラスタＣs5として分類し、プロダクト「Ｄ０１」〜「Ｄ０３」をクラスタＣs6として分類する。また、閾値決定部４は、「Ｂ０２」、「Ａ０３」、「Ｂ０１」、「Ｅ０１」、「Ａ１０」、「Ｅ０２」及び「Ｃ０５」をそれぞれ孤立プロダクトとして分類する。
【００５０】
図１に戻って、クラスタ合成部５は、閾値決定部４によって分類された第１プロダクト群と、第２プロダクト群とを第３プロダクト群として統合する。具体的には、クラスタ合成部５は、ソースコードクラスタリング部３と閾値決定部４によって分類された第２プロダクト群を基本とし、第２プロダクト群に含まれるクラスタが、設計書クラスタリング部２と閾値決定部４によって分類された第１プロダクト群に含まれる同じクラスタに包含されるかどうかを基準として、新しい分類結果である第３プロダクト群を生成する。より具体的には、クラスタ合成部５は、ソースコードクラスタリング部３によって分類された複数のクラスタＣｓにおいて、設計書クラスタリング部２によって同一のクラスタＣｄに分類されたプロダクトを含むクラスタＣｓを統合する。
【００５１】
図７は、実施例１に係るクラスタ合成部５による処理の一例を説明するための図である。図７においては、ソースコードクラスタリング部３によって分類されたクラスタＣs1〜Ｃs3をベースとして、設計書クラスタリング部２によって分類されたクラスタＣd1〜Ｃd3の分類結果を組み合わせる場合について示す。
【００５２】
例えば、クラスタ合成部５は、図７に示すクラスタＣs1に含まれるプロダクトＡ及びＢを包含するクラスタＣdがあるか否かを判定する。同様に、クラスタ合成部５は、図７に示すクラスタＣs2に含まれるプロダクトＣ及びＤを包含するクラスタＣdがあるか否かを判定する。また同様に、クラスタ合成部５は、図７に示すクラスタＣs3に含まれるプロダクトＥ及びＦを包含するクラスタＣdがあるか否かを判定する。
【００５３】
ここで、図７のＣd1がプロダクトＡ〜Ｄを含んでいることから、クラスタ合成部５は、図７に示すように、Ｃs1とＣs2とを統合した合成結果Ｃ1を出力する。一方、Ｃs3に含まれるプロダクトＥ及びＦを包含するクラスタＣdがないことから、クラスタ合成部５は、図７に示すように、Ｃs3をそのまま合成結果Ｃ2として出力する。
【００５４】
［実施例１に係る分類システムによる処理の手順］
次に、実施例１に係る分類システム１０による処理の手順について、図８〜１０を用いて説明する。図８は、実施例１に係る設計書クラスタリング部２による分類処理の手順を示すフローチャートである。プロダクトの分類コマンドが実行されると、設計書クラスタリング部２は、図８に示すように、プロダクトアーカイブ１から分析対象となるプロダクト群の設計書を抽出する（ステップＳ１０１）。
【００５５】
そして、設計書クラスタリング部２は、分析対象を選択し（ステップＳ１０２）、選択した分析対象の設計書からテキストデータを抽出する（ステップＳ１０３）。その後、設計書クラスタリング部２は、抽出したテキストデータに含まれる文字に対して、半角文字を全角文字に変換したり、小文字を大文字に変換したりする前処理を実行する（ステップＳ１０４）。
【００５６】
続いて、設計書クラスタリング部２は、テキストデータを形態素解析して、単語を抽出する（ステップＳ１０５）。そして、設計書クラスタリング部２は、抽出した各単語について、ＴＦ−ＩＤＦベースの重みを算出し、単語ベクトルを生成して（ステップＳ１０６）、全ての設計書に対して処理を実行したか否かを判定する（ステップＳ１０７）。
【００５７】
ここで、全ての設計書に対して処理を実行していないと判定した場合には（ステップＳ１０７否定）、設計書クラスタリング部２は、ステップＳ１０２に戻って、分析対象を選択する。一方、全ての設計書に対して処理を実行したと判定した場合には（ステップＳ１０７肯定）、設計書クラスタリング部２は、全ての単語ベクトルの組に対してコサイン距離を算出する（ステップＳ１０８）。
【００５８】
その後、設計書クラスタリング部２は、得られた距離群に対して、階層クラスタリング法を適用することで樹状図を生成する（ステップＳ１０９）。
【００５９】
図９は、実施例１に係るソースコードクラスタリング部３による分類処理の手順を示すフローチャートである。プロダクトの分類コマンドが実行されると、ソースコードクラスタリング部３は、図９に示すように、プロダクトアーカイブ１から分析対象となるプロダクト群のソースコードを抽出する（ステップＳ２０１）。
【００６０】
そして、ソースコードクラスタリング部３は、分析対象となるソースコードの組を選択し（ステップＳ２０２）、記述言語を選択する（ステップＳ２０３）。その後、ソースコードクラスタリング部３は、ＣＣＦｉｎｄｅｒＸを用いて、コードクローンを抽出して（ステップＳ２０４）、コードクローンのトークンを単位とした類似度を算出して（ステップＳ２０５）、全ての記述言語に対して処理を実行したか否かを判定する（ステップＳ２０６）。
【００６１】
ここで、全ての記述言語に対して処理を実行していないと判定した場合には（ステップＳ２０６否定）、ソースコードクラスタリング部３は、ステップＳ２０３に戻って、記述言語を選択する。一方、全ての記述言語に対して処理を実行したと判定した場合には（ステップＳ２０６肯定）、ソースコードクラスタリング部３は、全ての記述言語の合成類似度を算出する（ステップＳ２０７）。
【００６２】
その後、ソースコードクラスタリング部３は、合成距離を算出して（ステップＳ２０８）、全ての組み合わせに対して処理を実行したか否かを判定する（ステップＳ２０９）。ここで、全ての組み合せに対して処理を実行していないと判定した場合には（ステップＳ２０９否定）、ソースコードクラスタリング部３は、ステップＳ２０２に戻って、分析対象となるソースコードの組を選択する。
【００６３】
一方、全ての組み合せに対して処理を実行したと判定した場合には（ステップＳ２０９肯定）、ソースコードクラスタリング部３は、得られた距離群に対して、階層クラスタリング法を適用することで樹状図を生成する（ステップＳ２１０）。
【００６４】
図１０は、実施例１に係るクラスタ合成部５による処理の手順を示すフローチャートである。なお、クラスタ合成部５による処理は、以下に記すことを前提として実行される。すなわち、プロダクトの集合を「Ｓp」とし、「Ｓp」に対するソースコードによる分類を「Ｃs=｛Ｃs1, Ｃs2,・・・Ｃsm｝」とした場合に、以下に示す式（８）〜（１０）を満たすことを前提とする。
【００６５】
【数８】
2012252519.tif 000010
【００６６】
【数９】
2012252519.tif 000011
【００６７】
【数１０】
2012252519.tif 000012
【００６８】
すなわち、式（８）〜（１０）に示すように、クラスタ合成部５による処理は、分類されたクラスタ間でプロダクトが重複せず、ＣsiがＳpに含まれおり、Ｃsの要素であるＣsi(i＝１〜ｍ）の全ての和がＳpと同一であることを前提として実行される。同様に、「Ｓp」に対する設計書による分類を「Ｃd=｛Ｃd1, Ｃd2,・・・Ｃdm｝」とした場合に、以下に示す式（１１）〜（１３）を満たすことを前提とする。
【００６９】
【数１１】
2012252519.tif 000013
【００７０】
【数１２】
2012252519.tif 000014
【００７１】
【数１３】
2012252519.tif 000015
【００７２】
すなわち、式（１１）〜（１３）に示すように、クラスタ合成部５による処理は、分類されたクラスタ間でプロダクトが重複せず、ＣdiがＳpに含まれおり、Ｃdの要素であるＣdi(i＝１〜ｍ）の全ての和がＳpと同一であることを前提として実行される。
【００７３】
上述した前提により２つのクラスタＣs及びＣdが得られると、クラスタ合成部５は、図１０に示すように、空集合「Ｃ’s＝｛｝」を用意する（ステップＳ３０１）。そして、クラスタ合成部５は、「Ｃs」の要素を１つ取り出し、「Ｃsi」とし（ステップＳ３０２）、以下に示す式（１４）を満たす「ｊ」が存在するか否かを判定する（ステップＳ３０３）。
【００７４】
【数１４】
2012252519.tif 000016
【００７５】
すなわち、クラスタ合成部５は、式（１４）に示すように、「Ｃsi」を包含する「Ｃdj」が存在するか否かを判定する。ここで、式（１４）を満たす「ｊ」が存在すると判定した場合には（ステップＳ３０３肯定）、クラスタ合成部５は、式（１７）を条件として、空の集合「Ｃ’s」を式（１５）とし、「Ｃs」を式（１６）とする（ステップＳ３０４）。
【００７６】
【数１５】
2012252519.tif 000017
【００７７】
【数１６】
2012252519.tif 000018
【００７８】
【数１７】
2012252519.tif 000019
【００７９】
一方、式（１４）を満たす「ｊ」が存在しないと判定した場合には（ステップＳ３０３否定）、クラスタ合成部５は、空の集合「Ｃ’s」を式（１８）とし、「Ｃs」を式（１９）とする（ステップＳ３０５）。
【００８０】
【数１８】
2012252519.tif 000020
【００８１】
【数１９】
2012252519.tif 000021
【００８２】
そして、クラスタ合成部５は、「Ｃs」が空になったか否かを判定する（ステップＳ３０６）。ここで、「Ｃs」が空になっていないと判定した場合には（ステップＳ３０６否定）、クラスタ合成部５は、ステップＳ３０２に戻って、「Ｃs」の要素を１つ取り出し、「Ｃsi」とする。一方、「Ｃs」が空になったと判定した場合には（ステップＳ３０６肯定）、クラスタ合成部５は、処理を終了する。
【００８３】
［実施例１の効果］
上述したように、実施例１によれば、プロダクトを構成するテキストファイルを複数用いて、複数のプロダクトを類似したプロダクトごとに分類する分類システム１０において、設計書クラスタリング部２が、複数の設計書それぞれに含まれる文字列の間の類似度を算出し、算出した類似度に基づいて複数のプロダクトのクラスタリングを行う。そして、ソースコードクラスタリング部３が、設計書クラスタリング部２によって用いられた設計書とは異なる種類の複数のソースコードそれぞれに含まれる文字列の間の類似度を算出し、算出した類似度に基づいて複数のプロダクトのクラスタリングを行う。そして、閾値決定部４が、設計書クラスタリング部２、ソースコードクラスタリング部３の結果を用いて閾値を決定し、複数のプロダクトを第１及び第２プロダクト群に分類する。そして、クラスタ合成部５が、閾値決定部４によって分類された第１プロダクト群と、閾値決定部４によって分類された第２プロダクト群とを第３プロダクト群として統合する。従って、実施例１に係る分類システムは、設計書及びソースコードの類似性を考慮したプロダクトの分類ができ、プロダクトの分類の精度を向上させることを可能にする。
【００８４】
また、実施例１によれば、設計書クラスタリング部２は、複数のプロダクトそれぞれの設計書に含まれる単語の出現頻度を用いて類似度を算出し、算出した類似度に基づいて複数のプロダクトのクラスタリングを行う。そして、ソースコードクラスタリング部３は、複数のプロダクトそれぞれのソースコードに含まれるコードクローンを用いて類似度を算出し、算出した類似度に基づいて複数のプロダクトのクラスタリングを行う。従って、実施例１に係る分類システム１０は、ソースコードにおいて、機能が変らず実装が変っている場合や、異なる機能だが設計書に記述する際の言葉が似ている場合などでも、正しく分類することができ、プロダクトの分類の精度をより向上させることを可能にする。
【００８５】
また、実施例１によれば、ソースコードクラスタリング部３は、複数のプロダクトそれぞれのソースコードに異なる記述言語で記述されたコードが含まれていた場合には、記述言語ごとに類似度を算出し、算出した記述言語ごとの類似度を合成した合成類似度に基づいて複数のプロダクトのクラスタリングを行う。従って、実施例１に係る分類システム１０は、１つのプロダクトが複数の記述言語で記載されている場合にも正しく分類することができ、プロダクトの分類の精度をさらに向上させることを可能にする。
【実施例２】
【００８６】
上述した実施例１では、設計書及びソースコードの２つの指標に基づいてプロダクトを分類する場合について説明した。実施例２では、３つ以上（ｎ個）の指標に基づいてプロダクトを分類する場合について説明する。
【００８７】
［実施例２に係る分類システムの構成］
実施例２に係る分類システムの構成について説明する。図１１は、実施例２に係る分類システム１０ａの構成の一例を説明するための図である。図１１に示すように、実施例２に係る分類システム１０ａは、プロダクトアーカイブ１ａと、指標１クラスタリング部２１〜指標ｎクラスタリング部２ｎと、閾値決定部４と、クラスタ合成部５ａとを有する。
【００８８】
プロダクトアーカイブ１ａは、プロダクトごとに、当該プロダクトを構成する３つ以上のファイルを記憶する。例えば、プロダクトアーカイブ１ａは、図１１に示すように、プロダクトＰを構成するファイルとして、指標１から見たＰの関連部〜指標ｎから見たＰの関連部を記憶する。同様に、プロダクトアーカイブ１ａは、図１１に示すように、プロダクトＱを構成するファイルとして、指標１から見たＱの関連部〜指標ｎから見たＱの関連部を記憶する。なお、プロダクトアーカイブ１ａによって記憶されるファイルとしては、テキストファイルの他に、例えば、バイナリファイルなどがある。
【００８９】
指標１クラスタリング部２１は、指標１から見たＰの関連部及び指標１から見たＱの関連部から指標１によって得られる類似度を算出し、算出した類似度に基づいてプロダクトＰとプロダクトＱとを分類する。同様に、指標２クラスタリング部２２〜指標ｎクラスタリング部２ｎは、各指標から見たＰの関連部及びＱの関連部から各指標によって得られる類似度を算出し、算出した類似度に基づいてプロダクトＰとプロダクトＱとをそれぞれ分類する。
【００９０】
すなわち、指標１クラスタリング部２１〜指標ｎクラスタリング部２ｎは、各指標に基づいて樹状図を生成する。そして、閾値決定部４は、複数の樹状図に対して、それぞれ閾値を決定して、プロダクト群をそれぞれ分類する。
【００９１】
クラスタ合成部５ａは、閾値決定部４によって分類されたｎ個の分類結果を累積的に統合する。具体的には、クラスタ合成部５ａは、ｎ個の分類結果からベースとなる分類結果と統合する分類結果とを選択し、１つの合成クラスタを出力する。そして、クラスタ合成部５ａは、出力した合成クラスタをベースとなる分類結果として、その他の分類結果をさらに統合する。このように、クラスタ合成部５ａは、ｎ個の分類結果を累積的に統合して、１つの合成クラスタを出力する。
【００９２】
［実施例２に係る分類システムによる処理の手順］
次に、実施例２に係る分類システム１０ａによる処理の手順について、図１２を用いて説明する。図１２は、実施例２に係るクラスタ合成部５ａによる処理の手順を示すフローチャートである。なお、図１２におけるステップＳ４０３は、図１０に示す処理の手順に相当する。
【００９３】
プロダクトの分類コマンドが実行されると、クラスタ合成部５ａは、図１２に示すように、指標１クラスタリング部２１から得られた樹状図と、閾値によって決められた分類をベースとなる分類「Ｃs」とする（ステップＳ４０１）。そして、クラスタ合成部５ａは、組み合わせる分類を選択して、「Ｃd」とする（ステップＳ４０２）。その後、クラスタ合成部５ａは、２つの分類を合成して（ステップＳ４０３）、得られた分類を新たな「Ｃs」とし（ステップＳ４０４）、全ての指標に対して処理を実行したか否かを判定する（ステップＳ４０５）。
【００９４】
ここで、全ての指標に対して処理を実行していないと判定した場合には（ステップＳ４０５否定）、クラスタ合成部５ａは、ステップＳ４０２に戻って、組み合わせる分類を選択して、「Ｃd」とする。一方、全ての指標に対して処理を実行したと判定した場合には（ステップＳ４０５肯定）、クラスタ合成部５ａは、得られた「Ｃs」を合成クラスタとして出力して（ステップＳ４０６）、処理を終了する。
【００９５】
［実施例２の効果］
上述したように、実施例２によれば、指標１クラスタリング部２１〜指標ｎクラスタリング部２ｎは、種類の異なる複数のファイルについて、指標に基づく類似度をそれぞれ算出し、算出した類似度それぞれに基づいて、クラスタリングを行う。そして、閾値決定部４は、指標１クラスタリング部２１〜指標ｎクラスタリング部２ｎによるクラスタリング結果を用いて閾値を決定して、複数のプロダクトをそれぞれプロダクト群に分類する。そして、クラスタ合成部５ａは、閾値決定部４によって分類された複数のプロダクト群を累積的に統合して合成クラスタとする。従って、実施例２に係る分類システムは、３つ以上の指標を用いてプロダクトを分類することができ、プロダクトの分類の精度を向上させることを可能にする。
【実施例３】
【００９６】
これまで実施例１及び２について説明したが、本願の技術は実施例１及び２に限定されるものではない。すなわち、実施例１及び２は、その他の様々な形態で実施されることが可能であり、種々の省略、置き換え、変更を行うことができる。
【００９７】
[システム構成等]
例えば、各装置の分散・統合の具体的形態（例えば、図１の形態）は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合することができる。一例を挙げると、設計書クラスタリング部２とソースコードクラスタリング部３とをクラスタリング部として統合してよい。
【００９８】
また、クラスタ合成部５を分類システム１０の外部装置としてネットワーク経由で接続するようにしてもよく、或いは、設計書クラスタリング部２とソースコードクラスタリング部３とを別々の装置が有し、ネットワークに接続されて協働することで、上述した分類システム１０の機能を実現するようにしてもよい。
【００９９】
これらの実施例やその変形は、本願が開示する技術に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【０１００】
１  プロダクトアーカイブ
２  設計書クラスタリング部
３  ソースコードクラスタリング部
４  閾値決定部
５  クラスタ合成部
１０  分類システム
【図１】
2012252519.tif 000022
【図２】
2012252519.tif 000023
【図３】
2012252519.tif 000024
【図４】
2012252519.tif 000025
【図５】
2012252519.tif 000026
【図６】
2012252519.tif 000027
【図７】
2012252519.tif 000028
【図８】
2012252519.tif 000029
【図９】
2012252519.tif 000030
【図１０】
2012252519.tif 000031
【図１１】
2012252519.tif 000032
【図１２】
2012252519.tif 000033