(57)【特許請求の範囲】
【請求項１】
プログラムから取得したクラスタ毎に、前記クラスタの規模に応じたクラスタ係数を算出し、
各クラスタから抽出した単語群に含まれる各単語について、各クラスタにおける単語の出現回数と、前記各クラスタのクラスタ係数とを用いて特徴量を算出し、
前記特徴量に応じて前記単語群から選択された単語をクラスタと対応付けて出力する、処理をコンピュータに実行させる分析プログラム。
【請求項２】
前記クラスタ係数を算出する処理は、
前記クラスタに含まれるプログラムの数を求め、
前記プログラムの数を入力とする所定の関数の出力を前記クラスタ係数とする、
請求項１記載の分析プログラム。
【請求項３】
前記特徴量を算出する処理は、
前記単語が出現するクラスタと対応するクラスタ係数の合計値を、前記単語が出現するクラスタの数として前記特徴量を算出する、請求項１又は２記載の分析プログラム。
【請求項４】
コンピュータによる分析方法であって、該コンピュータが、
プログラムから取得したクラスタ毎に、前記クラスタの規模に応じたクラスタ係数を算出し、
各クラスタから抽出した単語群に含まれる各単語について、各クラスタにおける単語の出現回数と、前記各クラスタのクラスタ係数とを用いて特徴量を算出し、
前記特徴量に応じて前記単語群から選択された単語をクラスタと対応付けて出力する、分析方法。
【請求項５】
プログラムから取得したクラスタ毎に、前記クラスタの規模に応じたクラスタ係数を算出するクラスタ係数算出部と、
各クラスタから抽出した単語群に含まれる各単語について、各クラスタにおける単語の出現回数と、前記各クラスタのクラスタ係数とを用いて特徴量を算出する特徴量算出部と、
前記特徴量に応じて前記単語群から選択された単語をクラスタと対応付けて出力する出力部と、を有する分析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアを分析する分析プログラム、分析方法及び分析装置に関する。
【背景技術】
【０００２】
従来から、ソフトウェアの開発・改良・保守等を行う際に、ソフトウェアを構成するプログラムのソースファイル同士がどのように関係しあっているか分析し、機能や業務を実現している部分を見付けるクラスタリングが行われている。クラスタリングでは、ソースファイル同士の依存関係に基づき、ソースファイルにおいて互いに関係しあっている部分をクラスタとして発見する。
【０００３】
また、従来では、得られたクラスタを可視化する技術が知られている。さらに、クラスタを可視化する際、クラスタに含まれる各ソースファイルの識別子から、出現頻度等に応じた特徴的な単語（要約語句）を抽出し、この単語をクラスタの性質を示すラベルとして付与する技術が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−１４８９８７号公報
【特許文献２】特開２０１３−１５２５７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来のクラスタの可視化において、小規模のクラスタと大規模なクラスタに共通して出現する単語は、小規模なクラスタにより大規模なクラスタにおける代表性が薄まり、大規模なクラスタの要約語句として抽出されにくくなる。その結果、本来抽出されるべき特徴的な単語が要約語句として抽出されず、クラスタの意味の把握が困難になる可能性がある。
【０００６】
1つの側面では、クラスタの機能を容易に推測させることが可能な分析プログラム、分析方法及び分析装置を提供することを目的としている。
【課題を解決するための手段】
【０００７】
一様態によれば、プログラムから取得したクラスタ毎に、前記クラスタの規模に応じたクラスタ係数を算出し、各クラスタから抽出した単語群に含まれる各単語について、各クラスタにおける単語の出現回数と、前記各クラスタのクラスタ係数とを用いて特徴量を算出し、前記特徴量に応じて前記単語群から選択された単語をクラスタと対応付けて出力する、処理をコンピュータに実行させる。
【０００８】
上記各処理は、上記各処理を実現する機能部、上記各処理を手順としてコンピュータにより実行させる方法、プログラムを記憶したコンピュータ読み取り可能な記憶媒体とすることもできる。
【発明の効果】
【０００９】
クラスタの機能を容易に推測させることができる。
【図面の簡単な説明】
【００１０】
【図１】分析システムの一例を示す図である。
【図２】分析装置によるソフトウェアの分析を説明する図である。
【図３】分析装置のハードウェア構成の一例を示す図である。
【図４】分析装置の機能構成を説明する図である。
【図５】分析装置の動作を説明するフローチャートである。
【図６】クラスタ係数算出部の処理を説明するフローチャートである。
【図７】特徴量算出部の処理を説明する第一のフローチャートである。
【図８】特徴量算出部の処理を説明する第二のフローチャートである。
【図９】クラスタ情報の一例を示す図である。
【図１０】単語群情報の一例を示す図である。
【図１１】クラスタ係数情報の一例を示す図である。
【図１２】単語出現情報の一例を示す図である。
【図１３】特徴量情報の一例を示す図である。
【図１４】ソフトウェアを可視化する画面データが表示された画面の例を示す図である。
【図１５】ラベルが表示された例を示す図である。
【発明を実施するための形態】
【００１１】
以下に図面を参照して実施形態について説明する。図１は、分析システムの一例を示す図である。
【００１２】
本実施形態の分析システム１００は、分析装置２００と、端末装置３００とを有する。本実施形態の分析システム１００において、分析装置２００と端末装置３００とは、ネットワーク等を介して接続されている。
【００１３】
本実施形態の分析システム１００では、例えば端末装置３００から分析装置２００へ分析対象となるソフトウェアがアップロードされると、分析装置２００は、分析プログラム２１０を実行してソフトウェアの分析を行い、その結果を端末装置３００に出力する。本実施形態の分析装置２００は、分析結果として、例えばソフトウェアの構造を地図の形式で表示させる画面データを端末装置３００に出力しても良い。
【００１４】
具体的には本実施形態の分析装置２００は、ソフトウェアの構造を示す地図において、ソフトウェアのクラスタリングにより得たクラスタを区画とし、クラスタの機能を示す単語を各区画のラベルとして付与することで、クラスタの機能の推測を容易にする。
【００１５】
尚、本実施形態のクラスタリングとは、データ解析の手法の１つであり、プログラムの集合を部分集合（クラスタ）に切り分けて、それぞれの部分集合に含まれるプログラムがある共通の特徴を持つようにする処理である。
【００１６】
以下に、本実施形態の分析装置２００によるソフトウェアの分析について説明する。
【００１７】
図２は、分析装置によるソフトウェアの分析を説明する図である。図２は、ソフトウェア１に含まれるプログラム間の依存関係に基づいてクラスタリングを行い、クラスタＩＤ１〜７の７つのクラスタを取得した例を示している。
【００１８】
ソフトウェア１を構成するプログラムは、ソフトウェア１の設計時において、機能や用途に応じて複数のグループに分類されており、各クラスタには、複数の分類に属するプログラムが含まれる。
【００１９】
図２において、クラスタＩＤ１〜７の各クラスタについて、出現頻度に基づいて特徴的な単語を求める場合を説明する。
【００２０】
図２の例では、クラスタＩＤ１〜３と比較して、クラスタＩＤ４〜７は、小規模なクラスタである。
【００２１】
クラスタＩＤ１のクラスタでは、出現頻度が最も高い単語が単語Ａであり、その次に出現頻度が高い単語が単語Ｂである。よって、クラスタＩＤ１のクラスタでは、単語Ａを特徴的な単語（以下、特徴語）とすることが妥当である。
【００２２】
また、クラスタＩＤ２のクラスタでは、出現する単語が単語Ｃのみであるため、単語Ｃが特徴語となる。クラスタＩＤ３のクラスタも同様に、出現する単語が単語Ｄのみであるため、単語Ｄが特徴語となる。
【００２３】
さらに、クラスタＩＤ４〜７のそれぞれのクラスタにおいても、出現する単語が単語Ａのみであるため、単語Ａが特徴語となる。
【００２４】
ここで、クラスタＩＤ１の特徴語について考える。クラスタＩＤ１については、単語Ａを特徴語とするのが最も妥当である。しかし、図２の例では、例えばｔｆ−ｉｄｆ法等により、単語の出現頻度に基づいた特徴語の抽出を行った場合、単語Ａが特徴語とならない可能性がある。それは、クラスタＩＤ４〜７までの小規模なクラスタにおいて、単語Ａが出現していることにより、単語ＡはクラスタＩＤ１のクラスタに特有な単語ではなく、より一般的な単語として計算されるためである。
【００２５】
単語Ａが一般的な単語とされた場合、ソフトウェア１において最大規模であるクラスタＩＤ１のクラスタの特徴語は、実際のクラスタＩＤ１のクラスタの代表的な機能を表す単語以外の単語となる可能性がある。
【００２６】
すなわち、単純に出現頻度に基づき各クラスタの特徴語を抽出した場合、規模が小さくあまり重要でないと考えられるクラスタに出現する単語の影響により、大規模なクラスタの特徴語と成り得る単語が一般的な単語とされ、特徴語として抽出されない可能性がある。
【００２７】
そこで、本実施形態では、各クラスタの規模に応じた係数を算出し、この係数を用いて各クラスタに出現する単語毎の特徴量を算出し、特徴量の値に応じた単語を各クラスタの特徴語として抽出する。本実施形態では、このように、クラスタの規模を単語の特徴量に反映させることで、小規模なクラスタによる大規模なクラスタの特徴語の抽出に影響を低減させることができる。したがって、本実施形態によれば、クラスタの可視化において、クラスタの機能の表す代表的な単語をクラスタのラベルとすることができ、クラスタの機能の推測を容易にする。
【００２８】
尚、本実施形態のクラスタの規模は、例えば分析対象のプログラムがＪａｖａ（登録商標）言語で記述されている場合には、クラスの数により示されるものとした。
【００２９】
また、本実施形態のおけるプログラムの設計時の分類は、例えばプログラムがＪａｖａ（登録商標）言語で記述されている場合には「パッケージ」に相当し、プログラムがＣ言語等で記述されている場合には「ディレクトリ」に相当する。また分類に属するプログラムは、プログラムがＪａｖａ（登録商標）言語で記述されている場合には「クラス」に相当し、プログラムがＣ言語等で記述されている場合には「ソースファイル」に相当する。
【００３０】
次に、本実施形態の分析装置２００について説明する。図３は、分析装置のハードウェア構成の一例を示す図である。
【００３１】
本実施形態の分析装置２００は、それぞれバスＢで相互に接続されている入力装置２１、出力装置２２、ドライブ装置２３、補助記憶装置２４、メモリ装置２５、演算処理装置２６及びインターフェース装置２７を含む。
【００３２】
入力装置２１はキーボードやマウス等を含み、各種信号を入力するために用いられる。出力装置２２はディスプレイ装置等を含み、各種ウインドウやデータ等を表示するために用いられる。インターフェース装置２７は、モデム、ＬＡＮカード等を含み、ネットワークに接続する為に用いられる。
【００３３】
分析プログラム２１０は、分析装置２００を制御する各種プログラムの少なくとも一部である。分析プログラム２１０は例えば記録媒体２８の配布やネットワークからのダウンロードなどによって提供される。分析プログラム２１０を記録した記録媒体２８は、ＣＤ−ＲＯＭ、フレキシブルディスク、光磁気ディスク等の様に情報を光学的、電気的或いは磁気的に記録する記録媒体、ＲＯＭ、フラッシュメモリ等の様に情報を電気的に記録する半導体メモリ等、様々なタイプの記録媒体を用いることができる。
【００３４】
また、分析プログラム２１０は、分析プログラム２１０を記録した記録媒体２８がドライブ装置２３にセットされるとは記録媒体２８からドライブ装置２３を介して補助記憶装置２４にインストールされる。ネットワークからダウンロードされた分析プログラム２１０は、インターフェース装置２７を介して補助記憶装置２４にインストールされる。
【００３５】
補助記憶装置２４は、インストールされた分析プログラム２１０を格納すると共に、必要なファイル、データ等を格納する。メモリ装置２５は、コンピュータの起動時に補助記憶装置２４から分析プログラム２１０を読み出して格納する。そして、演算処理装置２６はメモリ装置２５に格納された発注プログラムに従って、後述するような各種処理を実現している。
【００３６】
また、本実施形態の端末装置３００は、例えば一般的なコンピュータやタブレット等であり、そのハードウェア構成は分析装置２００と同様であるから説明を省略する。
【００３７】
次に、図４を参照して本実施形態の分析装置２００の機能構成について説明する。図４は、分析装置の機能構成を説明する図である。
【００３８】
本実施形態の分析装置２００は、分析処理部２１０Ａと、記憶領域２２０とを有する。分析処理部２１０Ａは、演算処理装置２６が分析プログラム２１０を実行することで実現される処理部である。記憶領域２２０は、補助記憶装置２４やメモリ装置２５に設けられた記憶領域である。
【００３９】
本実施形態の記憶領域２２０は、ソースコードデータベース２２１、分類情報データベース２２２を有する。また、本実施形態の記憶領域２２０には、後述する分析処理部２１０Ａの処理結果として、クラスタ情報２２３、分類情報２２４、単語群情報２２５、クラスタ係数情報２２６、単語出現情報２２７、特徴量情報２２８が格納される。これらの各種情報の詳細は後述する。
【００４０】
本実施形態のソースコードデータベース２２１には、分析処理部２１０Ａによる分析対象のプログラムのソフトウェアのソースコードが格納される。ソースコードは、例えば端末装置３００から分析装置２００へアップロードされる。
【００４１】
本実施形態の分類情報データベース２２２には、分析対象のソフトウェアの各プログラムと、プログラムが属する分類とを対応付けるための情報が格納される。本実施形態の分類情報データベース２２２は、例えばソースコードと共に端末装置３００からアップロードされても良い。
【００４２】
本実施形態の分類情報データベース２２２には、例えば各プログラムのファイル名と、各プログラムが属するディレクトリとが対応付けられた情報が格納されていても良い。また、本実施形態の分類情報データベース２２２には、例えば各プログラムの分類と、分類毎の命名規約とが対応付けられていても良い。
【００４３】
本実施形態の分析処理部２１０Ａは、ソースコード取得部２１１、クラスタ取得部２１２、分類情報取得部２１３、単語抽出部２１４、クラスタ係数算出部２１５、出現回数格納部２１６、特徴量算出部２１７、単語選択部２１８、画面データ生成部２１９、出力部２３０を有する。
【００４４】
本実施形態のソースコード取得部２１１は、ソースコードデータベース２２１に格納されたソースコードを取得する。
【００４５】
クラスタ取得部２１２は、ソースコードにより記述されたプログラム間の依存関係に基づいてクラスタリングを行い、クラスタを取得する。また、本実施形態のクラスタ取得部２１２は、取得したクラスタを識別するクラスタＩＤと、クラスタに含まれる各プログラムのファイル名とを対応付けたクラスタ情報２２３を生成し、記憶領域２２０に格納する。
【００４６】
分類情報取得部２１３は、分類情報データベース２２２から、分析対象のプログラムと対応する分類情報を取得し、分類情報２２４として記憶領域２２０に格納する。
【００４７】
単語抽出部２１４は、クラスタ情報２２３と分類情報２２４とを照合し、クラスタ毎に、各クラスタに含まれるファイル識別子から単語群を取得し、クラスタＩＤと単語群とを対応付けた単語群情報２２５として記憶領域２２０へ格納する。
【００４８】
クラスタ係数算出部２１５は、各クラスタについて、クラスタのサイズを求め、クラスタのサイズと、予め与えられた所定の関数とを用いてクラスタ係数を算出し、クラスタＩＤと対応付けたクラスタ係数情報２２６を記憶領域２２０に格納する。クラスタ係数算出部２１５の処理の詳細は後述する。
【００４９】
出現回数格納部２１６は、各クラスタにおいて、単語群に含まれる単語毎の出現回数を求め、クラスタＩＤと、単語と、出現回数とを対応付けた単語出現情報２２７として記憶領域２２０に格納する。
【００５０】
特徴量算出部２１７は、単語出現情報２２７とクラスタ係数情報２２６とを参照して、単語毎の特徴量を算出し、特徴量情報２２８として記憶領域２２０に格納する。本実施形態の特徴量算出部２１７は、ｔｆ（Term Frequency）−ｉｄｆ（Inverse Document Frequency）法を用いて特徴量を算出するものであり、ｔｆ値を求めるｔｆ値算出部２３１と、ｉｄｆ値を求めるｉｄｆ値算出部２３２とを有する。ｔｆ値とは、単語の出現頻度を示し、ｉｄｆ値とは逆文書頻度を示す。本実施形態では、ｉｄｆ値を算出する際に、クラスタ係数情報２２６を参照し、この係数を用いてｉｄｆ値を算出する。特徴量算出部２１７の処理の詳細は後述する。
【００５１】
単語選択部２１８は、特徴量情報２２８を参照し、特徴量に応じて単語を選択し、選択した単語をクラスタの特徴語とする。具体的に単語選択部２１８は、特徴量が大きい方から順に、所定数の単語を特徴語に選択する
画面データ生成部２１９は、選択された特徴語をクラスタのラベルとし、ソフトウェアの構造を地図の形式で表示させる画面データを生成する。
【００５２】
出力部２３０は、生成した画面データを端末装置３００へ出力する。尚、出力部２３０が画面データを出力する先は、端末装置３００に限定されない。例えば出力部２３０は、画面データを記録媒体等に出力しても良いし、画面データをネットワーク上の端末装置３００がアクセス可能なサーバ等に出力しても良い。
【００５３】
また、出力部２３０は、例えば分析装置２００内の記憶装置に画面データを格納しておき、分析装置２００が、外部から画面データの取得要求を受け付けたとき、画面データを出力しても良い。さらに、分析装置２００は、自身の出力装置２２に画面データを表示させても良い。
【００５４】
次に、図５を参照して本実施形態の分析装置２００の動作について説明する。図５は、分析装置の動作を説明するフローチャートである。
【００５５】
本実施形態の分析装置２００は、ソースコード取得部２１１により、ソースコードデータベース２２１から分析対象のプログラムのソースコードを取得する（ステップＳ５０１）。続いて、分析装置２００は、クラスタ取得部２１２により、取得したソースコードにより記述されたプログラム間の依存関係に基づいてクラスタリングを行ってクラスタを取得し、クラスタ情報２２３として記憶領域２２０に格納する（ステップＳ５０２）。
【００５６】
続いて分析装置２００は、分類情報取得部２１３により、分類情報データベース２２２から分類情報を取得し、分類情報２２４として記憶領域２２０に格納する（ステップＳ５０３）。
【００５７】
続いて分析装置２００は、単語抽出部２１４により、クラスタ毎に、クラスタに含まれるファイル識別子から単語群を取得し、単語群情報２２５として記憶領域２２０に格納する（ステップＳ５０４）。
【００５８】
具体的には、本実施形態の単語抽出部２１４は、単語群を取得する際に、ファイル識別子を文字が小文字から大文字となった位置、ピリオドやアンダースコアの位置等に区切って単語としても良い。また、本実施形態の単語抽出部２１４は、各プログラムに対応する単語群が予め取得されていた場合には、その単語群を用いて単語群情報２２５を生成しても良い。予め単語群が取得されている場合とは、例えば分析対象のソフトウェア設計書等から単語群を得た場合等である。
【００５９】
続いて分析装置２００は、クラスタ係数算出部２１５により、クラスタ毎にクラスタ係数を算出し、クラスタＩＤと対応付けたクラスタ係数情報２２６として格納する（ステップＳ５０５）。ステップＳ５０５の処理の詳細は後述する。
【００６０】
出現回数格納部２１６により、クラスタ毎に、単語群情報２２５に含まれる単語毎の出現回数を求め、単語出現情報２２７とし格納する（ステップＳ５０６）。
【００６１】
続いて分析装置２００は、特徴量算出部２１７により、クラスタ係数情報２２６と、単語出現情報２２７とを参照して単語毎の特徴量を算出し、特徴量情報２２８として格納する（ステップＳ５０７）。
【００６２】
続いて分析装置２００は、単語選択部２１８により、特徴量情報２２８を参照し、特徴量の値が大きい順に、所定数の単語を選択する（ステップＳ５０８）。本実施形態では、単語選択部２１８により選択された単語が、クラスタの機能と関連の深い単語であると予測されることから、ここで抽出された単語をクラスタの特徴を示す特徴語とする。
【００６３】
続いて分析装置２００は、画面データ生成部２１９により、特徴語をクラスタのラベルとし、ソフトウェアの構造を地図の形式で表示させる画面データを生成する（ステップＳ５０９）。そして、分析装置２００は、出力部２３０により、生成した画面データを端末装置３００へ出力し（ステップＳ５１０）、分析処理を終了する。
【００６４】
次に、図６を参照して、クラスタ係数算出部２１５の処理について説明する。図６は、クラスタ係数算出部の処理を説明するフローチャートである。図６に示す処理は、図５のステップＳ５０５の詳細を示す。
【００６５】
本実施形態のクラスタ係数算出部２１５は、クラスタ情報２２３を参照し、各クラスタのサイズを求める（ステップＳ６０１）。本実施形態では、クラスタに含まれるクラスの数をクラスタのサイズと見なす。
【００６６】
続いて、クラスタ係数算出部２１５は、各クラスタについて、クラスタのサイズに所定の関数を適用し、クラスタ係数を算出する（ステップＳ６０３）。
【００６７】
以下に、本実施形態の所定の関数と、クラスタ係数について説明する。本実施形態のクラスタ係数は、クラスタに含まれるクラス数を入力とする所定の関数によって決定する。所定の関数は、小規模のクラスタ（例えばクラス数が１個程度）の場合には、クラスタ係数が０に近い値となり、大規模のクラスタ（例えばクラス数が１００個以上）の場合には、クラスタ係数が１に近い値であまり変化しないように、単調増加する関数とした。
【００６８】
本実施形態では、後述する特徴量の算出において、個々のクラスタを平等に１つとして扱う代わりに、クラスタのサイズと所定の関数により得られたクラスタ係数を用いることで、小規模なクラスタによるｉｄｆ値への影響を低減させる。
【００６９】
つまり、本実施形態では、例えば小規模のクラスタは、クラスタ１個分ではなく、例えばクラスタ０．１個分相当として計算する、ということになる。
【００７０】
本実施形態ではクラスタｉに含まれるクラス数Ｓｉに対し、所定の関数を適用した値をそのクラスタに対するクラスタ係数Ｆｉとした場合、クラスタ係数Ｆｉは、以下の式（１）のように示される。
【００７１】
【数１】
0006402637.tif 000002
【００７２】
ここで、Ｓｉはクラスタｉのクラスタ規模（すなわちクラスタに含まれるクラス数）、ｔはクラスタ係数Ｆｉの影響を受けない最小のクラスタ規模、関数ｌｏｇ１０は常用対数関数である。
【００７３】
本実施形態では、ｔ＝２０とするが、別の値に設定してもよい。本実施形態では、Ｓｉがｔ以上のクラスタについてはクラスタ係数Ｆｉが１となり、ｉｄｆ値の計算において従来手法と同じ影響度となる。
【００７４】
本実施形態では、以上のようにクラスタ係数を求めることで、クラス数が大きいクラスタほど、クラスタ係数は１又は１に近い値となる。また、クラスタ係数は、クラス数が１に近づくにつれて、その値が急激に小さくなる。つまり、本実施形態では、クラス数の少ないクラスタについては、クラスタ係数がとても小さくなり、それ以外のクラスタにはあまり影響を与えない。
【００７５】
尚、本実施形態の所定の関数は、上述した効果と同様の効果が得られる関数であれば、上に記した以外のものを用いても良い。
【００７６】
続いて、本実施形態のクラスタ係数算出部２１５は、クラスタＩＤと、各クラスタのクラスタ係数とを対応付けて、クラスタ係数情報２２６として記憶領域２２０に格納し（ステップＳ６０３）、処理を終了する。
【００７７】
次に、図７を参照して、本実施形態の特徴量算出部２１７の処理について説明する。図７は、特徴量算出部の処理を説明する第一のフローチャートである。図７に示す処理は、図５のステップＳ５０７の処理の詳細を示す。
【００７８】
本実施形態の特徴量算出部２１７は、クラスタ係数情報２２６を取得し、クラスタ毎のクラスタ係数を読み込む（ステップＳ７０１）。続いて特徴量算出部２１７は、全ての単語について、その単語が出現するクラスタのクラスタ係数を加算した合計値を算出する（ステップＳ７０２）。ステップＳ７０２の処理の詳細は、後述する。
【００７９】
続いて特徴量算出部２１７は、単語毎にｔｆ−ｉｄｆ値を算出する（ステップＳ７０３
）。具体的には、特徴量算出部２１７は、ｔｆ値算出部２３１により算出したｔｆ値と、ｉｄｆ算出部２３２により算出したｉｄｆ値とを掛け合わせ、ｔｆ−ｉｄｆ値を求める。このとき、本実施形態のｉｄｆ値算出部２３２は、処理対象となっている単語が含まれるクラスタの数の代わりに、クラスタ係数の合計値を用いる。
【００８０】
以下に、本実施形態のｉｄｆ値算出部２３２によるｉｄｆ値の算出について説明する。
【００８１】
通常のｉｄｆ値は、下記の式（２）により算出される。
【００８２】
ｉｄｆｉ＝ｌｏｇ（｜Ｄ｜／｜｛ｄ：ｄ∋ｔｉ｝｜）    式（２）
ここで、ｉｄｆｉは、ｉ番目の単語についてのｉｄｆ値であり、｜Ｄ｜は総クラスタ（ドキュメント）数であり、｜｛ｄ：ｄ∋ｔｉ｝｜は、ｉ番目の単語ｔｉを含むクラスタの数である。
【００８３】
この式（２）からわかるように、式（２）では、どのようなクラスタも平等に１つのクラスタとして勘定していることがわかる。
【００８４】
本実施形態では、式（２）におけるｉ番目の単語ｔｉを含むクラスタの数の値を、ステップＳ７０２で算出したクラスタ係数の合計値に置き換える。
【００８５】
本実施形態の特徴量算出部２１７は、ｉｄｆ値算出部２３２において、上述したようにクラスタ係数を適用する以外は、従来のｔｆ−ｉｄｆ法と同様に各単語の特徴量を算出する。
【００８６】
続いて特徴量算出部２１７は、クラスタＩＤと単語と特徴量とを対応付けて、特徴量情報２２８として記憶領域２２０に格納し（ステップＳ７０４）、処理を終了する。
【００８７】
次に、図８を参照し、本実施形態の特徴量算出部２１７によるクラスタ係数の合計値の算出の処理について説明する。図８は、特徴量算出部の処理を説明する第二のフローチャートである。図８の処理は、図７のステップＳ７０２の詳細を示す。
【００８８】
本実施形態の特徴量算出部２１７は、単語群情報２２５における最初の単語を参照する（ステップＳ８０１）。次に特徴量算出部２１７は、単語群情報２２５に含まれる全ての単語について、後述する処理を行ったか否かを判定する（ステップＳ８０２）。後述する処理とは、クラスタ係数の合計値を算出する処理である。
【００８９】
ステップＳ８０２において、全ての単語について、クラスタ係数の合計値を算出する処理を行った場合、特徴量算出部２１７は、この処理を終了し、図７のステップＳ７０３へ進む。
【００９０】
ステップＳ８０２において、全ての単語について上述の処理が行われていない場合、特徴量算出部２１７は、クラスタ情報２２３の最初のクラスタを参照する（ステップＳ８０３）。
【００９１】
続いて特徴量算出部２１７は、全てのクラスタについて、後述するステップＳ８０５からステップＳ８０７の処理を実行したか否かを判定する（ステップＳ８０４）。
【００９２】
ステップＳ８０４において、全てのクラスタについて処理を実行した場合、特徴量算出部２１７は、後述するステップＳ８０８へ進む。
【００９３】
ステップＳ８０４において、全てのクラスタについて処理を実行していない場合、特徴量算出部２１７は、参照しているクラスタ内に、処理対象の単語が含まれるか否かを判定する（ステップＳ８０５）。
【００９４】
ステップＳ８０５において、該当する単語が含まれる場合、特徴量算出部２１７は、図７のステップＳ７０１で取得したクラスタ係数情報２２６のうち、参照しているクラスタと対応するクラスタ係数を、処理対象の単語のクラスタ係数の合計値に加算する（ステップＳ８０６）。
【００９５】
ステップＳ８０５において、該当する単語が含まれない場合、特徴量算出部２１７は、ステップＳ８０７へ進む。
【００９６】
ステップＳ８０５又はステップＳ８０６に続いて、特徴量算出部２１７は、次のクラスタを参照し（ステップＳ８０７）、ステップＳ８０４へ戻る。
【００９７】
ステップＳ８０４において、全てのクラスタについて処理を行った場合、特徴量算出部２１７は、単語群情報２２５の次の単語を参照し（ステップＳ８０８）、ステップＳ８０２へ戻る。
【００９８】
本実施形態の特徴量算出部２１７は、以上の処理により、単語群情報２２５に含まれる全ての単語について、各単語が含まれるクラスタのクラスタ係数の合計値を算出する。このクラスタ係数の合計値は、図７のステップＳ７０３におけるｉｄｆ値算出部２３２によるｉｄｆ値の算出の際に、式（２）の｜｛ｄ：ｄ∋ｔｉ｝｜の値として用いられる。
【００９９】
次に、図９乃至図１３を参照し、本実施形態の分析装置２００の処理について具体的に説明する。図９は、クラスタ情報の一例を示す図である。
【０１００】
本実施形態のクラスタ取得部２１２は、プログラムのクラスタリングを行い、例えば図９に示すクラスタ情報２２３を取得する。
【０１０１】
図９に示すクラスタ情報２２３は、情報の項目として、パッケージを含むクラス名と、クラスタを識別するクラスタＩＤとを有し、両者が対応付けられている。すなわち、クラスタ情報２２３は、設計時の分類を含むプログラムの名前と、クラスタＩＤとが対応付けられた情報である。
【０１０２】
本実施形態では、プログラムがＪａｖａ（登録商標）言語で記述されているため、分類情報はＪａｖａ（登録商標）言語の形式に則ったものとなる。例えばクラス名「com.abc.model.AbstractDataModel」において、「com.abc.model」はパッケージ名であり、「AbstractDataModel」がそのパッケージの中におけるクラス名である。
【０１０３】
図９の例では、Ｊａｖａ（登録商標）言語の形式に則った分類情報によれば、クラスタＩＤ「１」のクラスタには、「com.abc.controller」と「com.abc.model」という２つのパッケージのクラスが存在することがわかる。
【０１０４】
図１０は、単語群情報の一例を示す図である。本実施形態の単語群情報２２５は、クラスタＩＤと、クラスタＩＤと対応付けられた単語群とを有する。
【０１０５】
本実施形態の単語抽出部２１４は、例えば、java.io.FileInputStreamという完全修飾クラス名を持つクラスであれば、「java, io, file, input, stream」という各単語を取り出す。すなわち、本実施形態の単語抽出部２１４は、"."や、あるいは"_"といった記号で区切られた箇所や、記述された大文字小文字の境界でクラス名を分割し、単語を取り出す。
【０１０６】
尚、本実施形態では、クラス（プログラム）に対応する単語群として完全修飾クラス名から切り分けた単語を用いているが、プログラムの仕様書やソースコード中のコメントといった他の情報源からプログラムの内容を表す単語群が得られる場合には、これらの情報源から得た単語を使用してもよい。
【０１０７】
図１０の例では、クラスタＩＤ２２０のクラスタと、クラスタＩＤ１０のクラスタのそれぞれから抽出された単語群を示している。図１０の例では、クラスタＩＤ２２０のクラスタに属する単語群が複数行にわたっている。単語群情報２２５は、このような形式のデータが、全クラスタの分だけ続く。
【０１０８】
図１１は、クラスタ係数情報の一例を示す図である。本実施形態のクラスタ係数情報２２６は、クラスタＩＤと、クラスタ毎に求められたクラスタ係数とが対応付けられている。
【０１０９】
図１１の例では、クラスタＩＤ１１１のクラスタのクラスタ係数が１であり、クラスタＩＤ３７３のクラスタ係数が０．９４７３２７であり、クラスタＩ２２０のクラスタのクラスタ係数が０．８４６１１８である。したがって、これらの３つのクラスタは、比較的規模の大きなクラスタであることがわかる。
【０１１０】
これに対し、クラスタＩＤ１０のクラスタのクラスタ係数は、０．０９３５４３である。したがって、クラスタＩＤ１０のクラスタは、クラスタ数が１に近い小規模なクラスタであることがわかる。
【０１１１】
図１２は、単語出現情報の一例を示す図である。本実施形態の単語出現情報２２７では、クラスタＩＤと、単語と、出現回数とが対応付けられており、各クラスタにおいて、どの単語が何回出現したかを示している。
【０１１２】
図１２の例では、クラスタＩＤ２２０のクラスタにおいて、単語「rawevent」の出現回数は２０回であり、単語「bean」の出現回数は１５回であることがわかる。
【０１１３】
また、図１２では、クラスタＩＤ１０のクラスタにおいて、単語「rawevent」と単語「bean」の出現回数はそれぞれ２回であることがわかる。
【０１１４】
また、この２つの単語は、その他の複数の小規模のクラスタにも出現するものとする。小規模のクラスタとは、例えばクラスタ係数の値が０．１以下のクラスタである。
【０１１５】
本実施形態の特徴量算出部２１７は、この単語出現情報２２７と、クラスタ係数情報２２６とを参照し、ｔｆ値とｉｄｆ値とを算出し、両者を乗算した特徴量を算出する。特徴量の算出は、上述した通りである。
【０１１６】
図１３は、特徴量情報の一例を示す図である。本実施形態の特徴量情報２２８は、クラスタＩＤと、単語と、特徴量とが対応付けられている。
【０１１７】
本実施形態の特徴量は、クラスタの規模に応じたクラスタ係数を用いて算出している。したがって、特徴量の値には、各単語が含まれるクラスタの規模が反映されている。
【０１１８】
本実施形態では、同一のクラスタＩＤにおいて、特徴量の値が大きい単語が、そのクラスタの特徴を示す特徴語として選択される。
【０１１９】
図１３の例では、クラスタＩＤ２２０のクラスタにおいて、単語「rawevent」の特徴量の値が０．２１４４０９で最も大きく、続いて単語「bean」の特徴量の値が０．１８４３０７で次に大きい。
【０１２０】
したがって、本実施形態では、例えば特徴語の数を２つと設定されていた場合には、クラスタＩＤ２２０のクラスタの特徴語は、単語「rawevent」と単語「bean」となる。
【０１２１】
このように、本実施形態では、複数の小規模のクラスタに出現する単語でも、大規模なクラスタの特徴語として選択させることができる。
【０１２２】
以下に、その仕組みを説明する。以下の説明では、ソースコード取得部２１１が取得したプログラムに、クラス数が１つのクラスタが２０個存在し、２０個のクラスタのうち１７個のクラスタに、単語「rawevent」が含まれるものとする。
【０１２３】
この場合、従来の手法では、クラスタの規模に関わらず、全てのクラスタを同等のものとしてｉｄｆ値を算出するため、単語「rawevent」は、「多数のクラスタに出現する一般的な語」として特徴量であるｔｆ−ｉｄｆ値が小さくなる。
【０１２４】
これに対し、本実施形態では、ｉｄｆ値の算出において単語「rawevent」を含むクラスタの数を求める際に、全てのクラスタを平等に１つのクラスタと扱う代わりに、クラスタの規模に応じたクラスタ係数を用いる。
【０１２５】
例えば単語「rawevent」をｉ番目の単語とし、単語「rawevent」が含まれるクラスタ、クラスタＩＤ２２０、クラスタＩＤ３７３、クラスタＩＤ１０の３つであった場合について考える。
【０１２６】
この場合、ｉｄｆ値の算出において、従来では、ｉ番目の単語「rawevent」を含むクラスタの数｜｛ｄ：ｄ∋ｔｉ｝｜は、３である。
【０１２７】
これに対して、本実施形態では、ｉ番目の単語「rawevent」を含むクラスタの数｜｛ｄ：ｄ∋ｔｉ｝｜として、３つのクラスタのそれぞれに対応するクラスタ係数の合計値を用いる。本実施形態では、クラスタＩＤ２２０と対応するクラスタ係数は、０．８４６１１８であり、クラスタＩＤ３７３と対応するクラスタ係数は０．９４７３２８であり、クラスタＩＤ１０と対応するクラスタ係数は、０．０９３５４３である。
【０１２８】
したがって、本実施形態では、ｉ番目の単語「rawevent」を含むクラスタの数｜｛ｄ：ｄ∋ｔｉ｝｜は、０．８４６１１８＋０．９４７３２８＋０．０９３５４３＝１．８８６９８９となる。
【０１２９】
したがって、本実施形態によれば、単語「rawevent」のｉｄｆ値は、従来の手法に比べて大きい値となることがわかる。特に、小規模なクラスタであるクラスタＩＤ１０のクラスタ係数の値が小さいことが、このことの要因となっている。
【０１３０】
このように、本実施形態では、ｉｄｆ値の算出において、ｉ番目の単語が出現するクラスタをカウントする際に、クラスタのカウント値として、各クラスタの規模に対応したクラスタ係数を加算していく。このため、本実施形態では、ｉｄｆ値にクラスタの規模が反映されることになり、結果としてｉ番目の単語の特徴量は、小規模のクラスタに出現した回数の影響を低減させた値となる。よって、本実施形態で、特徴量が大きい単語をクラスタの特徴語とすることで、クラスタの機能を容易に推測させることができる。
【０１３１】
次に、図１４を参照し、選択された特徴語が表示された画面について説明する。図１４は、ソフトウェアを可視化する画面データが表示された画面の例を示す図である。
【０１３２】
図１４は、クラスタリングにより得られたクラスタを、地図を模した形式によって可視化した例を示している。
【０１３３】
図１４において、クラス１つが地図上の建物１つにあたる。また、建物のまとまった区画は、クラスタリングによって発見されたクラスタに相当する。また、図１４において、建物の柄は、クラスの属するパッケージによって分けられている。図１４では、領域Ｗ１内のクラスタは、クラスが１つのクラスタである。また、図１４において、区画Ｋ１がクラスタＩＤ２２０のクラスタに対応し、区画Ｋ２がクラスタＩＤ３７３のクラスタに対応する。
【０１３４】
クラスタＩＤ２２０のクラスタと、クラスタＩＤ３７３のクラスタは、全クラスが同じ柄で描かれており、共通のパッケージに属するクラスからなっていることが分かる。そこで、本実施形態では、クラスタＩＤ２２０のクラスタと、クラスタＩＤ３７３のクラスタのそれぞれには、パッケージの名前に含まれる特徴語「rawevent」と「bean」をラベルとして表示させる。
【０１３５】
図１５は、ラベルが表示された例を示す図である。図１５の例では、区間Ｋ１と区画Ｋ２のそれぞれに、ラベルとして特徴語「rawevent」と「bean」が重畳して表示されている。
【０１３６】
このように、本実施形態では、クラスタと対応する区画に、各クラスタの特徴語をラベルとして表示させることで、機能を用意に推測させることができる。
【０１３７】
開示の技術では、以下に記載する付記のような形態が考えられる。
（付記１）
プログラムから取得したクラスタ毎に、前記クラスタの規模に応じたクラスタ係数を算出し、
各クラスタから抽出した単語群に含まれる各単語について、各クラスタにおける単語の出現回数と、前記各クラスタのクラスタ係数とを用いて特徴量を算出し、
前記特徴量に応じて前記単語群から選択された単語をクラスタと対応付けて出力する、処理をコンピュータに実行させる分析プログラム。
（付記２）
前記クラスタ係数を算出する処理は、
前記クラスタに含まれるプログラムの数を求め、
前記プログラムの数を入力とする所定の関数の出力を前記クラスタ係数とする、
付記１記載の分析プログラム。
（付記３）
前記所定の関数は、
前記プログラムの数が１に近づく程、出力が０に近い値となり、前記プログラムの数が多い程、出力の値が１の近傍で変化が小さくなるように単調増加する関数である、付記２記載の分析プログラム。
（付記４）
前記特徴量を算出する処理は、
前記単語が出現するクラスタと対応するクラスタ係数の合計値を、前記単語が出現するクラスタの数として前記特徴量を算出する、付記１乃至３の何れか一項に記載の分析プログラム。
（付記５）
前記出力する処理は、
前記特徴量が大きい順に所定数の単語を選択し、
前記クラスタと対応する区画に、選択された前記所定数の単語を重畳させて表示装置に表示させる画面データを生成して出力する付記１乃至４の何れか一項に記載の分析プログラム。
（付記６）
コンピュータによる分析方法であって、該コンピュータが、
プログラムから取得したクラスタ毎に、前記クラスタの規模に応じたクラスタ係数を算出し、
各クラスタから抽出した単語群に含まれる各単語について、各クラスタにおける単語の出現回数と、前記各クラスタのクラスタ係数とを用いて特徴量を算出し、
前記特徴量に応じて前記単語群から選択された単語をクラスタと対応付けて出力する、分析方法。
（付記７）
プログラムから取得したクラスタ毎に、前記クラスタの規模に応じたクラスタ係数を算出するクラスタ係数算出部と、
各クラスタから抽出した単語群に含まれる各単語について、各クラスタにおける単語の出現回数と、前記各クラスタのクラスタ係数とを用いて特徴量を算出する特徴量算出部と、
前記特徴量に応じて前記単語群から選択された単語をクラスタと対応付けて出力する出力部と、を有する分析装置。
【０１３８】
本発明は、具体的に開示された実施形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【符号の説明】
【０１３９】
１００  分析システム
２００  分析装置
２１０  分析プログラム
２１２  クラスタ取得部
２１３  分類情報取得部
２１４  単語抽出部
２１５  クラスタ係数算出部
２１６  出現回数格納部
２１７  特徴量算出部
２１８  単語選択部
２１９  画面データ生成部
２２０  記憶領域
２２１  ソースコードデータベース
２２２  分類情報データベース
２２３  クラスタ情報
２２４  分類情報
２２５  単語群情報
２２６  クラスタ係数情報
２２７  単語出現情報
２２８  特徴量情報
２３０  出力部
３００  端末装置
【図１】
0006402637.tif 000003
【図２】
0006402637.tif 000004
【図３】
0006402637.tif 000005
【図４】
0006402637.tif 000006
【図５】
0006402637.tif 000007
【図６】
0006402637.tif 000008
【図７】
0006402637.tif 000009
【図８】
0006402637.tif 000010
【図９】
0006402637.tif 000011
【図１０】
0006402637.tif 000012
【図１１】
0006402637.tif 000013
【図１２】
0006402637.tif 000014
【図１３】
0006402637.tif 000015
【図１４】
0006402637.tif 000016
【図１５】
0006402637.tif 000017