以下に図面を参照して実施形態について説明する。図1は、分析システムの一例を示す図である。
本実施形態の分析システム100は、分析装置200と、端末装置300とを有する。本実施形態の分析システム100において、分析装置200と端末装置300とは、ネットワーク等を介して接続されている。
本実施形態の分析システム100では、例えば端末装置300から分析装置200へ分析対象となるソフトウェアがアップロードされると、分析装置200は、分析プログラム210を実行してソフトウェアの分析を行い、その結果を端末装置300に出力する。本実施形態の分析装置200は、分析結果として、例えばソフトウェアの構造を地図の形式で表示させる画面データを端末装置300に出力しても良い。
具体的には本実施形態の分析装置200は、ソフトウェアの構造を示す地図において、ソフトウェアのクラスタリングにより得たクラスタを区画とし、クラスタの機能を示す単語を各区画のラベルとして付与することで、クラスタの機能の推測を容易にする。
尚、本実施形態のクラスタリングとは、データ解析の手法の1つであり、プログラムの集合を部分集合(クラスタ)に切り分けて、それぞれの部分集合に含まれるプログラムがある共通の特徴を持つようにする処理である。
以下に、本実施形態の分析装置200によるソフトウェアの分析について説明する。
図2は、分析装置によるソフトウェアの分析を説明する図である。図2は、ソフトウェア1に含まれるプログラム間の依存関係に基づいてクラスタリングを行い、クラスタID1〜7の7つのクラスタを取得した例を示している。
ソフトウェア1を構成するプログラムは、ソフトウェア1の設計時において、機能や用途に応じて複数のグループに分類されており、各クラスタには、複数の分類に属するプログラムが含まれる。
図2において、クラスタID1〜7の各クラスタについて、出現頻度に基づいて特徴的な単語を求める場合を説明する。
図2の例では、クラスタID1〜3と比較して、クラスタID4〜7は、小規模なクラスタである。
クラスタID1のクラスタでは、出現頻度が最も高い単語が単語Aであり、その次に出現頻度が高い単語が単語Bである。よって、クラスタID1のクラスタでは、単語Aを特徴的な単語(以下、特徴語)とすることが妥当である。
また、クラスタID2のクラスタでは、出現する単語が単語Cのみであるため、単語Cが特徴語となる。クラスタID3のクラスタも同様に、出現する単語が単語Dのみであるため、単語Dが特徴語となる。
さらに、クラスタID4〜7のそれぞれのクラスタにおいても、出現する単語が単語Aのみであるため、単語Aが特徴語となる。
ここで、クラスタID1の特徴語について考える。クラスタID1については、単語Aを特徴語とするのが最も妥当である。しかし、図2の例では、例えばtf−idf法等により、単語の出現頻度に基づいた特徴語の抽出を行った場合、単語Aが特徴語とならない可能性がある。それは、クラスタID4〜7までの小規模なクラスタにおいて、単語Aが出現していることにより、単語AはクラスタID1のクラスタに特有な単語ではなく、より一般的な単語として計算されるためである。
単語Aが一般的な単語とされた場合、ソフトウェア1において最大規模であるクラスタID1のクラスタの特徴語は、実際のクラスタID1のクラスタの代表的な機能を表す単語以外の単語となる可能性がある。
すなわち、単純に出現頻度に基づき各クラスタの特徴語を抽出した場合、規模が小さくあまり重要でないと考えられるクラスタに出現する単語の影響により、大規模なクラスタの特徴語と成り得る単語が一般的な単語とされ、特徴語として抽出されない可能性がある。
そこで、本実施形態では、各クラスタの規模に応じた係数を算出し、この係数を用いて各クラスタに出現する単語毎の特徴量を算出し、特徴量の値に応じた単語を各クラスタの特徴語として抽出する。本実施形態では、このように、クラスタの規模を単語の特徴量に反映させることで、小規模なクラスタによる大規模なクラスタの特徴語の抽出に影響を低減させることができる。したがって、本実施形態によれば、クラスタの可視化において、クラスタの機能の表す代表的な単語をクラスタのラベルとすることができ、クラスタの機能の推測を容易にする。
尚、本実施形態のクラスタの規模は、例えば分析対象のプログラムがJava(登録商標)言語で記述されている場合には、クラスの数により示されるものとした。
また、本実施形態のおけるプログラムの設計時の分類は、例えばプログラムがJava(登録商標)言語で記述されている場合には「パッケージ」に相当し、プログラムがC言語等で記述されている場合には「ディレクトリ」に相当する。また分類に属するプログラムは、プログラムがJava(登録商標)言語で記述されている場合には「クラス」に相当し、プログラムがC言語等で記述されている場合には「ソースファイル」に相当する。
次に、本実施形態の分析装置200について説明する。図3は、分析装置のハードウェア構成の一例を示す図である。
本実施形態の分析装置200は、それぞれバスBで相互に接続されている入力装置21、出力装置22、ドライブ装置23、補助記憶装置24、メモリ装置25、演算処理装置26及びインターフェース装置27を含む。
入力装置21はキーボードやマウス等を含み、各種信号を入力するために用いられる。出力装置22はディスプレイ装置等を含み、各種ウインドウやデータ等を表示するために用いられる。インターフェース装置27は、モデム、LANカード等を含み、ネットワークに接続する為に用いられる。
分析プログラム210は、分析装置200を制御する各種プログラムの少なくとも一部である。分析プログラム210は例えば記録媒体28の配布やネットワークからのダウンロードなどによって提供される。分析プログラム210を記録した記録媒体28は、CD−ROM、フレキシブルディスク、光磁気ディスク等の様に情報を光学的、電気的或いは磁気的に記録する記録媒体、ROM、フラッシュメモリ等の様に情報を電気的に記録する半導体メモリ等、様々なタイプの記録媒体を用いることができる。
また、分析プログラム210は、分析プログラム210を記録した記録媒体28がドライブ装置23にセットされるとは記録媒体28からドライブ装置23を介して補助記憶装置24にインストールされる。ネットワークからダウンロードされた分析プログラム210は、インターフェース装置27を介して補助記憶装置24にインストールされる。
補助記憶装置24は、インストールされた分析プログラム210を格納すると共に、必要なファイル、データ等を格納する。メモリ装置25は、コンピュータの起動時に補助記憶装置24から分析プログラム210を読み出して格納する。そして、演算処理装置26はメモリ装置25に格納された発注プログラムに従って、後述するような各種処理を実現している。
また、本実施形態の端末装置300は、例えば一般的なコンピュータやタブレット等であり、そのハードウェア構成は分析装置200と同様であるから説明を省略する。
次に、図4を参照して本実施形態の分析装置200の機能構成について説明する。図4は、分析装置の機能構成を説明する図である。
本実施形態の分析装置200は、分析処理部210Aと、記憶領域220とを有する。分析処理部210Aは、演算処理装置26が分析プログラム210を実行することで実現される処理部である。記憶領域220は、補助記憶装置24やメモリ装置25に設けられた記憶領域である。
本実施形態の記憶領域220は、ソースコードデータベース221、分類情報データベース222を有する。また、本実施形態の記憶領域220には、後述する分析処理部210Aの処理結果として、クラスタ情報223、分類情報224、単語群情報225、クラスタ係数情報226、単語出現情報227、特徴量情報228が格納される。これらの各種情報の詳細は後述する。
本実施形態のソースコードデータベース221には、分析処理部210Aによる分析対象のプログラムのソフトウェアのソースコードが格納される。ソースコードは、例えば端末装置300から分析装置200へアップロードされる。
本実施形態の分類情報データベース222には、分析対象のソフトウェアの各プログラムと、プログラムが属する分類とを対応付けるための情報が格納される。本実施形態の分類情報データベース222は、例えばソースコードと共に端末装置300からアップロードされても良い。
本実施形態の分類情報データベース222には、例えば各プログラムのファイル名と、各プログラムが属するディレクトリとが対応付けられた情報が格納されていても良い。また、本実施形態の分類情報データベース222には、例えば各プログラムの分類と、分類毎の命名規約とが対応付けられていても良い。
本実施形態の分析処理部210Aは、ソースコード取得部211、クラスタ取得部212、分類情報取得部213、単語抽出部214、クラスタ係数算出部215、出現回数格納部216、特徴量算出部217、単語選択部218、画面データ生成部219、出力部230を有する。
本実施形態のソースコード取得部211は、ソースコードデータベース221に格納されたソースコードを取得する。
クラスタ取得部212は、ソースコードにより記述されたプログラム間の依存関係に基づいてクラスタリングを行い、クラスタを取得する。また、本実施形態のクラスタ取得部212は、取得したクラスタを識別するクラスタIDと、クラスタに含まれる各プログラムのファイル名とを対応付けたクラスタ情報223を生成し、記憶領域220に格納する。
分類情報取得部213は、分類情報データベース222から、分析対象のプログラムと対応する分類情報を取得し、分類情報224として記憶領域220に格納する。
単語抽出部214は、クラスタ情報223と分類情報224とを照合し、クラスタ毎に、各クラスタに含まれるファイル識別子から単語群を取得し、クラスタIDと単語群とを対応付けた単語群情報225として記憶領域220へ格納する。
クラスタ係数算出部215は、各クラスタについて、クラスタのサイズを求め、クラスタのサイズと、予め与えられた所定の関数とを用いてクラスタ係数を算出し、クラスタIDと対応付けたクラスタ係数情報226を記憶領域220に格納する。クラスタ係数算出部215の処理の詳細は後述する。
出現回数格納部216は、各クラスタにおいて、単語群に含まれる単語毎の出現回数を求め、クラスタIDと、単語と、出現回数とを対応付けた単語出現情報227として記憶領域220に格納する。
特徴量算出部217は、単語出現情報227とクラスタ係数情報226とを参照して、単語毎の特徴量を算出し、特徴量情報228として記憶領域220に格納する。本実施形態の特徴量算出部217は、tf(Term Frequency)−idf(Inverse Document Frequency)法を用いて特徴量を算出するものであり、tf値を求めるtf値算出部231と、idf値を求めるidf値算出部232とを有する。tf値とは、単語の出現頻度を示し、idf値とは逆文書頻度を示す。本実施形態では、idf値を算出する際に、クラスタ係数情報226を参照し、この係数を用いてidf値を算出する。特徴量算出部217の処理の詳細は後述する。
単語選択部218は、特徴量情報228を参照し、特徴量に応じて単語を選択し、選択した単語をクラスタの特徴語とする。具体的に単語選択部218は、特徴量が大きい方から順に、所定数の単語を特徴語に選択する
画面データ生成部219は、選択された特徴語をクラスタのラベルとし、ソフトウェアの構造を地図の形式で表示させる画面データを生成する。
出力部230は、生成した画面データを端末装置300へ出力する。尚、出力部230が画面データを出力する先は、端末装置300に限定されない。例えば出力部230は、画面データを記録媒体等に出力しても良いし、画面データをネットワーク上の端末装置300がアクセス可能なサーバ等に出力しても良い。
また、出力部230は、例えば分析装置200内の記憶装置に画面データを格納しておき、分析装置200が、外部から画面データの取得要求を受け付けたとき、画面データを出力しても良い。さらに、分析装置200は、自身の出力装置22に画面データを表示させても良い。
次に、図5を参照して本実施形態の分析装置200の動作について説明する。図5は、分析装置の動作を説明するフローチャートである。
本実施形態の分析装置200は、ソースコード取得部211により、ソースコードデータベース221から分析対象のプログラムのソースコードを取得する(ステップS501)。続いて、分析装置200は、クラスタ取得部212により、取得したソースコードにより記述されたプログラム間の依存関係に基づいてクラスタリングを行ってクラスタを取得し、クラスタ情報223として記憶領域220に格納する(ステップS502)。
続いて分析装置200は、分類情報取得部213により、分類情報データベース222から分類情報を取得し、分類情報224として記憶領域220に格納する(ステップS503)。
続いて分析装置200は、単語抽出部214により、クラスタ毎に、クラスタに含まれるファイル識別子から単語群を取得し、単語群情報225として記憶領域220に格納する(ステップS504)。
具体的には、本実施形態の単語抽出部214は、単語群を取得する際に、ファイル識別子を文字が小文字から大文字となった位置、ピリオドやアンダースコアの位置等に区切って単語としても良い。また、本実施形態の単語抽出部214は、各プログラムに対応する単語群が予め取得されていた場合には、その単語群を用いて単語群情報225を生成しても良い。予め単語群が取得されている場合とは、例えば分析対象のソフトウェア設計書等から単語群を得た場合等である。
続いて分析装置200は、クラスタ係数算出部215により、クラスタ毎にクラスタ係数を算出し、クラスタIDと対応付けたクラスタ係数情報226として格納する(ステップS505)。ステップS505の処理の詳細は後述する。
出現回数格納部216により、クラスタ毎に、単語群情報225に含まれる単語毎の出現回数を求め、単語出現情報227とし格納する(ステップS506)。
続いて分析装置200は、特徴量算出部217により、クラスタ係数情報226と、単語出現情報227とを参照して単語毎の特徴量を算出し、特徴量情報228として格納する(ステップS507)。
続いて分析装置200は、単語選択部218により、特徴量情報228を参照し、特徴量の値が大きい順に、所定数の単語を選択する(ステップS508)。本実施形態では、単語選択部218により選択された単語が、クラスタの機能と関連の深い単語であると予測されることから、ここで抽出された単語をクラスタの特徴を示す特徴語とする。
続いて分析装置200は、画面データ生成部219により、特徴語をクラスタのラベルとし、ソフトウェアの構造を地図の形式で表示させる画面データを生成する(ステップS509)。そして、分析装置200は、出力部230により、生成した画面データを端末装置300へ出力し(ステップS510)、分析処理を終了する。
次に、図6を参照して、クラスタ係数算出部215の処理について説明する。図6は、クラスタ係数算出部の処理を説明するフローチャートである。図6に示す処理は、図5のステップS505の詳細を示す。
本実施形態のクラスタ係数算出部215は、クラスタ情報223を参照し、各クラスタのサイズを求める(ステップS601)。本実施形態では、クラスタに含まれるクラスの数をクラスタのサイズと見なす。
続いて、クラスタ係数算出部215は、各クラスタについて、クラスタのサイズに所定の関数を適用し、クラスタ係数を算出する(ステップS603)。
以下に、本実施形態の所定の関数と、クラスタ係数について説明する。本実施形態のクラスタ係数は、クラスタに含まれるクラス数を入力とする所定の関数によって決定する。所定の関数は、小規模のクラスタ(例えばクラス数が1個程度)の場合には、クラスタ係数が0に近い値となり、大規模のクラスタ(例えばクラス数が100個以上)の場合には、クラスタ係数が1に近い値であまり変化しないように、単調増加する関数とした。
本実施形態では、後述する特徴量の算出において、個々のクラスタを平等に1つとして扱う代わりに、クラスタのサイズと所定の関数により得られたクラスタ係数を用いることで、小規模なクラスタによるidf値への影響を低減させる。
つまり、本実施形態では、例えば小規模のクラスタは、クラスタ1個分ではなく、例えばクラスタ0.1個分相当として計算する、ということになる。
本実施形態ではクラスタiに含まれるクラス数Siに対し、所定の関数を適用した値をそのクラスタに対するクラスタ係数Fiとした場合、クラスタ係数Fiは、以下の式(1)のように示される。
ここで、Siはクラスタiのクラスタ規模(すなわちクラスタに含まれるクラス数)、tはクラスタ係数Fiの影響を受けない最小のクラスタ規模、関数log10は常用対数関数である。
本実施形態では、t=20とするが、別の値に設定してもよい。本実施形態では、Siがt以上のクラスタについてはクラスタ係数Fiが1となり、idf値の計算において従来手法と同じ影響度となる。
本実施形態では、以上のようにクラスタ係数を求めることで、クラス数が大きいクラスタほど、クラスタ係数は1又は1に近い値となる。また、クラスタ係数は、クラス数が1に近づくにつれて、その値が急激に小さくなる。つまり、本実施形態では、クラス数の少ないクラスタについては、クラスタ係数がとても小さくなり、それ以外のクラスタにはあまり影響を与えない。
尚、本実施形態の所定の関数は、上述した効果と同様の効果が得られる関数であれば、上に記した以外のものを用いても良い。
続いて、本実施形態のクラスタ係数算出部215は、クラスタIDと、各クラスタのクラスタ係数とを対応付けて、クラスタ係数情報226として記憶領域220に格納し(ステップS603)、処理を終了する。
次に、図7を参照して、本実施形態の特徴量算出部217の処理について説明する。図7は、特徴量算出部の処理を説明する第一のフローチャートである。図7に示す処理は、図5のステップS507の処理の詳細を示す。
本実施形態の特徴量算出部217は、クラスタ係数情報226を取得し、クラスタ毎のクラスタ係数を読み込む(ステップS701)。続いて特徴量算出部217は、全ての単語について、その単語が出現するクラスタのクラスタ係数を加算した合計値を算出する(ステップS702)。ステップS702の処理の詳細は、後述する。
続いて特徴量算出部217は、単語毎にtf−idf値を算出する(ステップS703
)。具体的には、特徴量算出部217は、tf値算出部231により算出したtf値と、idf算出部232により算出したidf値とを掛け合わせ、tf−idf値を求める。このとき、本実施形態のidf値算出部232は、処理対象となっている単語が含まれるクラスタの数の代わりに、クラスタ係数の合計値を用いる。
以下に、本実施形態のidf値算出部232によるidf値の算出について説明する。
通常のidf値は、下記の式(2)により算出される。
idfi=log(|D|/|{d:d∋ti}|) 式(2)
ここで、idfiは、i番目の単語についてのidf値であり、|D|は総クラスタ(ドキュメント)数であり、|{d:d∋ti}|は、i番目の単語tiを含むクラスタの数である。
この式(2)からわかるように、式(2)では、どのようなクラスタも平等に1つのクラスタとして勘定していることがわかる。
本実施形態では、式(2)におけるi番目の単語tiを含むクラスタの数の値を、ステップS702で算出したクラスタ係数の合計値に置き換える。
本実施形態の特徴量算出部217は、idf値算出部232において、上述したようにクラスタ係数を適用する以外は、従来のtf−idf法と同様に各単語の特徴量を算出する。
続いて特徴量算出部217は、クラスタIDと単語と特徴量とを対応付けて、特徴量情報228として記憶領域220に格納し(ステップS704)、処理を終了する。
次に、図8を参照し、本実施形態の特徴量算出部217によるクラスタ係数の合計値の算出の処理について説明する。図8は、特徴量算出部の処理を説明する第二のフローチャートである。図8の処理は、図7のステップS702の詳細を示す。
本実施形態の特徴量算出部217は、単語群情報225における最初の単語を参照する(ステップS801)。次に特徴量算出部217は、単語群情報225に含まれる全ての単語について、後述する処理を行ったか否かを判定する(ステップS802)。後述する処理とは、クラスタ係数の合計値を算出する処理である。
ステップS802において、全ての単語について、クラスタ係数の合計値を算出する処理を行った場合、特徴量算出部217は、この処理を終了し、図7のステップS703へ進む。
ステップS802において、全ての単語について上述の処理が行われていない場合、特徴量算出部217は、クラスタ情報223の最初のクラスタを参照する(ステップS803)。
続いて特徴量算出部217は、全てのクラスタについて、後述するステップS805からステップS807の処理を実行したか否かを判定する(ステップS804)。
ステップS804において、全てのクラスタについて処理を実行した場合、特徴量算出部217は、後述するステップS808へ進む。
ステップS804において、全てのクラスタについて処理を実行していない場合、特徴量算出部217は、参照しているクラスタ内に、処理対象の単語が含まれるか否かを判定する(ステップS805)。
ステップS805において、該当する単語が含まれる場合、特徴量算出部217は、図7のステップS701で取得したクラスタ係数情報226のうち、参照しているクラスタと対応するクラスタ係数を、処理対象の単語のクラスタ係数の合計値に加算する(ステップS806)。
ステップS805において、該当する単語が含まれない場合、特徴量算出部217は、ステップS807へ進む。
ステップS805又はステップS806に続いて、特徴量算出部217は、次のクラスタを参照し(ステップS807)、ステップS804へ戻る。
ステップS804において、全てのクラスタについて処理を行った場合、特徴量算出部217は、単語群情報225の次の単語を参照し(ステップS808)、ステップS802へ戻る。
本実施形態の特徴量算出部217は、以上の処理により、単語群情報225に含まれる全ての単語について、各単語が含まれるクラスタのクラスタ係数の合計値を算出する。このクラスタ係数の合計値は、図7のステップS703におけるidf値算出部232によるidf値の算出の際に、式(2)の|{d:d∋ti}|の値として用いられる。
次に、図9乃至図13を参照し、本実施形態の分析装置200の処理について具体的に説明する。図9は、クラスタ情報の一例を示す図である。
本実施形態のクラスタ取得部212は、プログラムのクラスタリングを行い、例えば図9に示すクラスタ情報223を取得する。
図9に示すクラスタ情報223は、情報の項目として、パッケージを含むクラス名と、クラスタを識別するクラスタIDとを有し、両者が対応付けられている。すなわち、クラスタ情報223は、設計時の分類を含むプログラムの名前と、クラスタIDとが対応付けられた情報である。
本実施形態では、プログラムがJava(登録商標)言語で記述されているため、分類情報はJava(登録商標)言語の形式に則ったものとなる。例えばクラス名「com.abc.model.AbstractDataModel」において、「com.abc.model」はパッケージ名であり、「AbstractDataModel」がそのパッケージの中におけるクラス名である。
図9の例では、Java(登録商標)言語の形式に則った分類情報によれば、クラスタID「1」のクラスタには、「com.abc.controller」と「com.abc.model」という2つのパッケージのクラスが存在することがわかる。
図10は、単語群情報の一例を示す図である。本実施形態の単語群情報225は、クラスタIDと、クラスタIDと対応付けられた単語群とを有する。
本実施形態の単語抽出部214は、例えば、java.io.FileInputStreamという完全修飾クラス名を持つクラスであれば、「java, io, file, input, stream」という各単語を取り出す。すなわち、本実施形態の単語抽出部214は、"."や、あるいは"_"といった記号で区切られた箇所や、記述された大文字小文字の境界でクラス名を分割し、単語を取り出す。
尚、本実施形態では、クラス(プログラム)に対応する単語群として完全修飾クラス名から切り分けた単語を用いているが、プログラムの仕様書やソースコード中のコメントといった他の情報源からプログラムの内容を表す単語群が得られる場合には、これらの情報源から得た単語を使用してもよい。
図10の例では、クラスタID220のクラスタと、クラスタID10のクラスタのそれぞれから抽出された単語群を示している。図10の例では、クラスタID220のクラスタに属する単語群が複数行にわたっている。単語群情報225は、このような形式のデータが、全クラスタの分だけ続く。
図11は、クラスタ係数情報の一例を示す図である。本実施形態のクラスタ係数情報226は、クラスタIDと、クラスタ毎に求められたクラスタ係数とが対応付けられている。
図11の例では、クラスタID111のクラスタのクラスタ係数が1であり、クラスタID373のクラスタ係数が0.947327であり、クラスタI220のクラスタのクラスタ係数が0.846118である。したがって、これらの3つのクラスタは、比較的規模の大きなクラスタであることがわかる。
これに対し、クラスタID10のクラスタのクラスタ係数は、0.093543である。したがって、クラスタID10のクラスタは、クラスタ数が1に近い小規模なクラスタであることがわかる。
図12は、単語出現情報の一例を示す図である。本実施形態の単語出現情報227では、クラスタIDと、単語と、出現回数とが対応付けられており、各クラスタにおいて、どの単語が何回出現したかを示している。
図12の例では、クラスタID220のクラスタにおいて、単語「rawevent」の出現回数は20回であり、単語「bean」の出現回数は15回であることがわかる。
また、図12では、クラスタID10のクラスタにおいて、単語「rawevent」と単語「bean」の出現回数はそれぞれ2回であることがわかる。
また、この2つの単語は、その他の複数の小規模のクラスタにも出現するものとする。小規模のクラスタとは、例えばクラスタ係数の値が0.1以下のクラスタである。
本実施形態の特徴量算出部217は、この単語出現情報227と、クラスタ係数情報226とを参照し、tf値とidf値とを算出し、両者を乗算した特徴量を算出する。特徴量の算出は、上述した通りである。
図13は、特徴量情報の一例を示す図である。本実施形態の特徴量情報228は、クラスタIDと、単語と、特徴量とが対応付けられている。
本実施形態の特徴量は、クラスタの規模に応じたクラスタ係数を用いて算出している。したがって、特徴量の値には、各単語が含まれるクラスタの規模が反映されている。
本実施形態では、同一のクラスタIDにおいて、特徴量の値が大きい単語が、そのクラスタの特徴を示す特徴語として選択される。
図13の例では、クラスタID220のクラスタにおいて、単語「rawevent」の特徴量の値が0.214409で最も大きく、続いて単語「bean」の特徴量の値が0.184307で次に大きい。
したがって、本実施形態では、例えば特徴語の数を2つと設定されていた場合には、クラスタID220のクラスタの特徴語は、単語「rawevent」と単語「bean」となる。
このように、本実施形態では、複数の小規模のクラスタに出現する単語でも、大規模なクラスタの特徴語として選択させることができる。
以下に、その仕組みを説明する。以下の説明では、ソースコード取得部211が取得したプログラムに、クラス数が1つのクラスタが20個存在し、20個のクラスタのうち17個のクラスタに、単語「rawevent」が含まれるものとする。
この場合、従来の手法では、クラスタの規模に関わらず、全てのクラスタを同等のものとしてidf値を算出するため、単語「rawevent」は、「多数のクラスタに出現する一般的な語」として特徴量であるtf−idf値が小さくなる。
これに対し、本実施形態では、idf値の算出において単語「rawevent」を含むクラスタの数を求める際に、全てのクラスタを平等に1つのクラスタと扱う代わりに、クラスタの規模に応じたクラスタ係数を用いる。
例えば単語「rawevent」をi番目の単語とし、単語「rawevent」が含まれるクラスタ、クラスタID220、クラスタID373、クラスタID10の3つであった場合について考える。
この場合、idf値の算出において、従来では、i番目の単語「rawevent」を含むクラスタの数|{d:d∋ti}|は、3である。
これに対して、本実施形態では、i番目の単語「rawevent」を含むクラスタの数|{d:d∋ti}|として、3つのクラスタのそれぞれに対応するクラスタ係数の合計値を用いる。本実施形態では、クラスタID220と対応するクラスタ係数は、0.846118であり、クラスタID373と対応するクラスタ係数は0.947328であり、クラスタID10と対応するクラスタ係数は、0.093543である。
したがって、本実施形態では、i番目の単語「rawevent」を含むクラスタの数|{d:d∋ti}|は、0.846118+0.947328+0.093543=1.886989となる。
したがって、本実施形態によれば、単語「rawevent」のidf値は、従来の手法に比べて大きい値となることがわかる。特に、小規模なクラスタであるクラスタID10のクラスタ係数の値が小さいことが、このことの要因となっている。
このように、本実施形態では、idf値の算出において、i番目の単語が出現するクラスタをカウントする際に、クラスタのカウント値として、各クラスタの規模に対応したクラスタ係数を加算していく。このため、本実施形態では、idf値にクラスタの規模が反映されることになり、結果としてi番目の単語の特徴量は、小規模のクラスタに出現した回数の影響を低減させた値となる。よって、本実施形態で、特徴量が大きい単語をクラスタの特徴語とすることで、クラスタの機能を容易に推測させることができる。
次に、図14を参照し、選択された特徴語が表示された画面について説明する。図14は、ソフトウェアを可視化する画面データが表示された画面の例を示す図である。
図14は、クラスタリングにより得られたクラスタを、地図を模した形式によって可視化した例を示している。
図14において、クラス1つが地図上の建物1つにあたる。また、建物のまとまった区画は、クラスタリングによって発見されたクラスタに相当する。また、図14において、建物の柄は、クラスの属するパッケージによって分けられている。図14では、領域W1内のクラスタは、クラスが1つのクラスタである。また、図14において、区画K1がクラスタID220のクラスタに対応し、区画K2がクラスタID373のクラスタに対応する。
クラスタID220のクラスタと、クラスタID373のクラスタは、全クラスが同じ柄で描かれており、共通のパッケージに属するクラスからなっていることが分かる。そこで、本実施形態では、クラスタID220のクラスタと、クラスタID373のクラスタのそれぞれには、パッケージの名前に含まれる特徴語「rawevent」と「bean」をラベルとして表示させる。
図15は、ラベルが表示された例を示す図である。図15の例では、区間K1と区画K2のそれぞれに、ラベルとして特徴語「rawevent」と「bean」が重畳して表示されている。
このように、本実施形態では、クラスタと対応する区画に、各クラスタの特徴語をラベルとして表示させることで、機能を用意に推測させることができる。
開示の技術では、以下に記載する付記のような形態が考えられる。
(付記1)
プログラムから取得したクラスタ毎に、前記クラスタの規模に応じたクラスタ係数を算出し、
各クラスタから抽出した単語群に含まれる各単語について、各クラスタにおける単語の出現回数と、前記各クラスタのクラスタ係数とを用いて特徴量を算出し、
前記特徴量に応じて前記単語群から選択された単語をクラスタと対応付けて出力する、処理をコンピュータに実行させる分析プログラム。
(付記2)
前記クラスタ係数を算出する処理は、
前記クラスタに含まれるプログラムの数を求め、
前記プログラムの数を入力とする所定の関数の出力を前記クラスタ係数とする、
付記1記載の分析プログラム。
(付記3)
前記所定の関数は、
前記プログラムの数が1に近づく程、出力が0に近い値となり、前記プログラムの数が多い程、出力の値が1の近傍で変化が小さくなるように単調増加する関数である、付記2記載の分析プログラム。
(付記4)
前記特徴量を算出する処理は、
前記単語が出現するクラスタと対応するクラスタ係数の合計値を、前記単語が出現するクラスタの数として前記特徴量を算出する、付記1乃至3の何れか一項に記載の分析プログラム。
(付記5)
前記出力する処理は、
前記特徴量が大きい順に所定数の単語を選択し、
前記クラスタと対応する区画に、選択された前記所定数の単語を重畳させて表示装置に表示させる画面データを生成して出力する付記1乃至4の何れか一項に記載の分析プログラム。
(付記6)
コンピュータによる分析方法であって、該コンピュータが、
プログラムから取得したクラスタ毎に、前記クラスタの規模に応じたクラスタ係数を算出し、
各クラスタから抽出した単語群に含まれる各単語について、各クラスタにおける単語の出現回数と、前記各クラスタのクラスタ係数とを用いて特徴量を算出し、
前記特徴量に応じて前記単語群から選択された単語をクラスタと対応付けて出力する、分析方法。
(付記7)
プログラムから取得したクラスタ毎に、前記クラスタの規模に応じたクラスタ係数を算出するクラスタ係数算出部と、
各クラスタから抽出した単語群に含まれる各単語について、各クラスタにおける単語の出現回数と、前記各クラスタのクラスタ係数とを用いて特徴量を算出する特徴量算出部と、
前記特徴量に応じて前記単語群から選択された単語をクラスタと対応付けて出力する出力部と、を有する分析装置。
本発明は、具体的に開示された実施形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。