(57)【要約】【課題】どのクラスタにも所属させるのが不適当なプログラムがクラスタリングされるのを回避するとともに、当該プログラムを特定可能にすること。【解決手段】ソフトウェア地図画面１４００は、第１の領域１４１０と、第２の領域１４２０とを含む。第１の領域１４１０には、ソフトウェアＳＷ内のクラス集合のうち遍在モジュールを除く残余のクラスのクラスタリング結果に基づいて、各クラスタと、各クラスタに属するクラスとが配置されている。第１の領域１４１０において、色の付された小さな正方形がクラスを表し、それを囲む四角形がクラスタを表している。また、第２の領域１４２０には、クラスタリングから除外された遍在モジュール１４２１〜１４２３が配置されている。【選択図】図１４
2020187390.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェア内のプログラム間の依存関係に基づいて、前記ソフトウェア内のプログラム集合のうち、前記ソフトウェア内の他のプログラムから均等に使用される度合いが高い所定のプログラムを特定し、
前記プログラム集合のうち、特定した前記所定のプログラムを除く残余のプログラムを複数のクラスタに分割して、分割した結果を表示する際に、前記所定のプログラムを、分割した前記残余のプログラムと別途に出力する、
処理をコンピュータに実行させることを特徴とする分析支援プログラム。
【請求項２】
前記特定する処理は、
前記プログラム間のメンバレベルの依存関係から特定される、前記ソフトウェア内の依存元のプログラムから依存先のプログラムへの依存関係に関する重みを用いて、前記プログラム間の依存関係に基づいて、前記依存先のプログラムが他のプログラムから均等に使用される度合いを示す指標値を算出し、
算出した前記指標値に基づいて、前記所定のプログラムを特定する、ことを特徴とする請求項１に記載の分析支援プログラム。
【請求項３】
前記特定する処理は、
前記ソフトウェア内の依存先のプログラムのうち依存元のいずれのプログラムとの依存関係に関する重みが閾値未満となる依存先のプログラムを抽出し、
前記プログラム間の依存関係に基づいて、抽出した前記依存先のプログラムが他のプログラムから均等に使用される度合いを示す指標値を算出し、
算出した前記指標値が閾値以上の場合に、抽出した前記依存先のプログラムを前記所定のプログラムとして特定する、ことを特徴とする請求項２に記載の分析支援プログラム。
【請求項４】
前記算出する処理は、
前記依存先のプログラムへの依存関係を有する依存元のプログラム同士での当該依存関係に関する重みの差をさらに用いて、前記指標値を算出する、ことを特徴とする請求項２または３に記載の分析支援プログラム。
【請求項５】
前記出力する処理は、
前記所定のプログラムを、分割した前記残余のプログラムを配置する領域とは別領域に配置する、ことを特徴とする請求項１〜４のいずれか一つに記載の分析支援プログラム。
【請求項６】
前記残余のプログラム間の依存関係に基づいて、前記残余のプログラムを複数のクラスタに分割する、処理を前記コンピュータに実行させることを特徴とする請求項１〜５のいずれか一つに記載の分析支援プログラム。
【請求項７】
ソフトウェア内のプログラム間の依存関係に基づいて、前記ソフトウェア内のプログラム集合のうち、前記ソフトウェア内の他のプログラムから均等に使用される度合いが高い所定のプログラムを特定し、
前記プログラム集合のうち、特定した前記所定のプログラムを除く残余のプログラムを複数のクラスタに分割して、分割した結果を表示する際に、前記所定のプログラムを、分割した前記残余のプログラムと別途に出力する、
処理をコンピュータが実行することを特徴とする分析支援方法。
【請求項８】
ソフトウェア内のプログラム間の依存関係に基づいて、前記ソフトウェア内のプログラム集合のうち、前記ソフトウェア内の他のプログラムから均等に使用される度合いが高い所定のプログラムを特定する特定部と、
前記プログラム集合のうち、前記特定部によって特定された前記所定のプログラムを除く残余のプログラムを複数のクラスタに分割する分割部と、
前記分割部によって分割された結果を表示する際に、前記所定のプログラムを、分割した前記残余のプログラムと別途に出力する表示制御部と、
を有することを特徴とする分析支援装置。
【請求項９】
ソフトウェア内のプログラム間の依存関係に基づいて、前記ソフトウェア内のプログラム集合のうち、前記ソフトウェア内の他のプログラムから均等に使用される度合いが高い所定のプログラムを特定する特定部と、
前記プログラム集合のうち、前記特定部によって特定された前記所定のプログラムを除く残余のプログラムを複数のクラスタに分割する分割部と、
前記分割部によって分割された結果を表示する際に、前記所定のプログラムを、分割した前記残余のプログラムと別途に出力する表示制御部と、
を含むことを特徴とする分析支援システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分析支援プログラム、分析支援方法、分析支援装置および分析支援システムに関する。
【背景技術】
【０００２】
ソフトウェアを開発・改良・保守するためには、ソフトウェアの現状がどうなっているかを理解することが重要である。このような活動を支援するために、例えば、ソフトウェアを構成するソースファイル（あるいは、クラスや関数など）間の依存関係に基づいてクラスタリング技術を適用し、依存関係の密なかたまりを発見して理解に役立てる技術がある。
【０００３】
先行技術としては、ソフトウェアを構成する要素群であるエンティティ群について依存関係により特定される関係元のエンティティと関係先のエンティティとを対応付けた対応情報をソフトウェアのソースコードから抽出し、抽出した対応情報により特定される依存関係に関する重みに基づいて、依存関係に関する重みの合計が当該合計の期待値よりも高くなるように、エンティティ群を複数のクラスタに分割するものがある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−１４８９８７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術では、ソフトウェアクラスタリングの際に、どのプログラム（例えば、クラス）とも特別な関係を持たないプログラムであっても、いずれかのクラスタに分類されて、ソフトウェアの構造を理解することが困難なものとなる場合がある。
【０００６】
一つの側面では、本発明は、どのクラスタにも所属させるのが不適当なプログラムがクラスタリングされるのを回避するとともに、当該プログラムを特定可能にすることを目的とする。
【課題を解決するための手段】
【０００７】
１つの実施態様では、ソフトウェア内のプログラム間の依存関係に基づいて、前記ソフトウェア内のプログラム集合のうち、前記ソフトウェア内の他のプログラムから均等に使用される度合いが高い所定のプログラムを特定し、前記プログラム集合のうち、特定した前記所定のプログラムを除く残余のプログラムを複数のクラスタに分割して、分割した結果を表示する際に、前記所定のプログラムを、分割した前記残余のプログラムと別途に出力する、分析支援プログラムが提供される。
【発明の効果】
【０００８】
本発明の一側面によれば、どのクラスタにも所属させるのが不適当なプログラムがクラスタリングされるのを回避するとともに、当該プログラムを特定可能にすることができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態にかかる分析支援方法の一実施例を示す説明図である。
【図２】図２は、分析支援システム２００のシステム構成例を示す説明図である。
【図３】図３は、分析支援装置１０１のハードウェア構成例を示すブロック図である。
【図４】図４は、依存関係グラフ情報の具体例を示す説明図である。
【図５】図５は、本質度情報の具体例を示す説明図である。
【図６】図６は、分析支援装置１０１の機能的構成例を示すブロック図である。
【図７】図７は、使用均等性テーブル７００の記憶内容の一例を示す説明図である。
【図８】図８は、遍在モジュールテーブル８００の記憶内容の一例を示す説明図である。
【図９】図９は、分割用依存関係グラフ情報の具体例を示す説明図である。
【図１０】図１０は、遍在モジュールの第１の特定例を示す説明図である。
【図１１】図１１は、遍在モジュールの第２の特定例を示す説明図である。
【図１２】図１２は、遍在モジュールの第３の特定例を示す説明図である。
【図１３】図１３は、遍在モジュールの第４の特定例を示す説明図である。
【図１４】図１４は、ソフトウェア地図画面の画面例を示す説明図である。
【図１５】図１５は、分析支援装置１０１の分析支援処理手順の一例を示すフローチャートである。
【図１６】図１６は、使用均等性算出処理の具体的処理手順の一例を示すフローチャートである。
【図１７】図１７は、遍在モジュール除去処理の具体的処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に図面を参照して、本発明にかかる分析支援プログラム、分析支援方法、分析支援装置および分析支援システムの実施の形態を詳細に説明する。
【００１１】
（実施の形態）
図１は、実施の形態にかかる分析支援方法の一実施例を示す説明図である。図１において、分析支援装置１０１は、ソフトウェアＳＷの分析を支援するコンピュータである。ソフトウェアＳＷは、分析対象となるコンピュータプログラムであり、コンピュータを動作させる命令、手順などを記述したものである。
【００１２】
ソフトウェアＳＷは、複数の構成要素を含む。構成要素は、例えば、コンポーネント、モジュール、ソースコード、クラス、関数、データベース、ファイルなどの管理上適当な単位である。以下の説明では、コンポーネント、モジュール、ソースコード、クラス、関数などを総称して「プログラム」と表記する場合がある。
【００１３】
ソフトウェアＳＷの理解を支援する技術として、ソフトウェアＳＷを小規模な部分集合（いわゆる、クラスタ）に分割する技術がある。具体的には、例えば、ソフトウェアＳＷに含まれるプログラム同士の依存関係に基づくクラスタリングを行って、互いに関係し合っているプログラムのかたまりをクラスタとして分割するものがある。
【００１４】
プログラム間の依存関係は、例えば、コンポーネント、モジュール、ソースコード、クラス、関数などの呼び出し関係、継承関係、包含関係や、データアクセス関係などの関係である。なお、ソフトウェアＳＷを構成するプログラム群（エンティティ群）を複数のクラスタに分割する技術については、例えば、特許文献１（特開２０１３−１４８９８７号公報）を参照することができる。
【００１５】
特許文献１で得られる各クラスタは、ソフトウェアＳＷの機能を実装しているプログラム群であることが期待される。機能とは、外部からのトリガ（例えば、利用者の操作入力）によって引き起こされるソフトウェアシステムの振る舞いである。例えば、業務システムにおいては、「見積を回答する」、「発注を送信する」、「契約情報を検索する」などが挙げられる。
【００１６】
また、クラスタリングによる分割結果を可視化することにより、ソフトウェアＳＷの構成の理解に役立てることができることが知られている。例えば、ソフトウェアクラスタリングの結果を、都市の地図を模した形式として平面上に自動的に配置し可視化する技術がある（例えば、下記非特許文献１参照）。これにより、ソフトウェアＳＷの構成の実態を依存関係の面から明らかにして、機能がどう構成されているかということや、保守性の良し悪しなどの分析を支援することができる。
【００１７】
非特許文献１：Ｋｏｂａｙａｓｈｉ  ｅｔ  ａｌ．，“ＳＡｒＦ  Ｍａｐ：Ｖｉｓｕａｌｉｚｉｎｇ  Ｓｏｆｔｗａｒｅ  Ａｒｃｈｉｔｅｃｔｕｒｅ  ｆｒｏｍ  Ｆｅａｔｕｒｅ  ａｎｄ  Ｌａｙｅｒ  Ｖｉｅｗｐｏｉｎｔｓ，”ｉｎ  ２０１３  ２１ｓｔ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｐｒｏｇｒａｍ  Ｃｏｍｐｒｅｈｅｎｓｉｏｎ  （ＩＣＰＣ），２０１３，ｐｐ．４３０−５２．
【００１８】
ここで、ソフトウェアクラスタリングの技術的な課題として、遍在モジュール（ｏｍｎｉｐｒｅｓｅｎｔ  ｍｏｄｕｌｅ）が知られている。遍在モジュールは、例えば、ユーティリティクラスのように様々な機能から利用されるクラスであり、どのクラスタに所属させることも不適当なプログラムである。このようなプログラムが、クラスタリングの際に特段の関連性のないいずれかのクラスタに分類されることになると、ノイズのように働いて分割結果の理解の妨げとなる。
【００１９】
このため、クラスタリングに先立って遍在モジュールを除去する手順を設け、より良いクラスタリングが行えるようにするものが考えられる。除去する遍在モジュールは、人手でユーティリティクラスを特定したり、プログラムの依存関係から判断したりする。例えば、プログラム間の依存関係のグラフにおいて、ある節点（プログラム）への入次数が平均の３倍以上ならば、そのプログラムを遍在モジュールとみなす技術がある（例えば、下記非特許文献２参照）。
【００２０】
非特許文献２：Ｍａｎｃｏｒｉｄｉｓ  ｅｔ  ａｌ．，“Ｂｕｎｃｈ：ａ  ｃｌｕｓｔｅｒｉｎｇ  ｔｏｏｌ  ｆｏｒ  ｔｈｅ  ｒｅｃｏｖｅｒｙ  ａｎｄ  ｍａｉｎｔｅｎａｎｃｅ  ｏｆ  ｓｏｆｔｗａｒｅ  ｓｙｓｔｅｍ  ｓｔｒｕｃｔｕｒｅｓ，”ｉｎ  Ｓｏｆｔｗａｒｅ  Ｍａｉｎｔｅｎａｎｃｅ，１９９９．（ＩＣＳＭ  ’９９）  Ｐｒｏｃｅｅｄｉｎｇｓ．ＩＥＥＥ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ，１９９９，ｐｐ．５０−５９．
【００２１】
一方、遍在モジュールを除去する手順を設けなくとも、良いクラスタリング結果を得るための方式も開発されている。例えば、特許文献１は、クラスタリングに先立って各プログラムへの依存関係について本質度スコアという値を依存関係に基づき計算し、本質度スコアを依存関係、すなわち、グラフの辺の重みとして用いてクラスタリングする。
【００２２】
本質度スコアは、多数のプログラムから使用されているほど小さくなり、逆にそのプログラムがただ一つプログラムから使用されているときには大きくなる。さらに、プログラムの中に複数のメンバを持つ構成、例えば、クラスの中に複数のメソッドを持つといった構成をとる言語の場合、クラスとメソッドというプログラム内の階層構造を考慮に入れ、メンバレベルの依存関係の解析によって、ある依存元クラスが当該クラスにとって特別かどうかが数値化される。
【００２３】
なお、一般的なオブジェクト指向言語におけるクラスのメンバには、メソッドのほかに、フィールド（変数）がある。以下の説明において、「メソッド」と表記した場合、より一般的なメンバの概念を意味し、フィールドを含むものとしてもよい。
【００２４】
例えば、ログ出力クラスのように、大多数のクラス（依存元クラス）から同じメソッド（Ｘ．ｕｓｅ）を利用される、ユーティリティ的なクラスＸがあるとする。一方で、依存元クラスの一部に、クラスＸが持つ初期化などを行うメソッド（Ｘ．ｉｎｉｔ）を利用するクラスＡがあるとする。
【００２５】
このようなケースの場合、特許文献１では、初期化を行う唯一のクラスＡは、ただ単に機能を利用するだけの大多数のクラスとは別の役割を果たしているとみなして特別扱いされ、重みが強く計算されて一緒のクラスタに入りやすくなる。すなわち、特許文献１では、メソッドレベルで見ても満遍なく均等に使われているクラスに対してはうまく機能せず、依然として必然性の低いクラスタにたまたま所属させられてしまう。このため、非特許文献１のような可視化方式によってクラスタリング結果を可視化する際に、あるクラスがなぜそこに含まれているのかの理解が難しくなるという問題がある。
【００２６】
そこで、本実施の形態では、プログラム間の依存関係に基づくクラスタリングにおいて、どのプログラムとも特別な関係を持たないようなプログラムを特定してクラスタリングから除外し、可視化においては、特定したプログラムを、クラスタリングしたプログラムと別途に出力できるようにする。
【００２７】
ここで、「どのプログラムとも特別な関係を持たない」とは、メソッド単位で見ても均等に満遍なく使用されることを指す。どのプログラムとも特別な関係を持たないプログラムとしては、例えば、メッセージ文字列等の国際化リソースクラスや、定数定義クラス等が挙げられる。このようなプログラムは、特定の機能やプログラムとの結びつきが薄いため、どのクラスタに入れるのも不適当なものであり、クラスタリングから除外できるようにする。以下、分析支援装置１０１の処理例について説明する。
【００２８】
（１）分析支援装置１０１は、ソフトウェアＳＷ内のプログラム間の依存関係に基づいて、ソフトウェアＳＷ内のプログラム集合のうち、ソフトウェアＳＷ内の他のプログラムから均等に使用される度合いが高い所定のプログラムを特定する。ここで、ソフトウェアＳＷ内の他のプログラムから均等に使用される度合いが高いプログラムとは、各所から満遍なく使われている度合いが高い、すなわち、どのプログラムとも特別な関係を持たないプログラムである。
【００２９】
以下の説明では、ソフトウェアＳＷ内の他のプログラムから均等に使用される度合いを「使用均等性」と表記する場合がある。
【００３０】
例えば、あるプログラムが、他の多数のプログラムから使われており、かつ、それらの各々のプログラムから同じような使われ方をしているときに、使用均等性が高いとみなす。換言すれば、依存元のプログラムクラスにごく少数であっても、他とはっきり違う使い方をしているものがあるときには、使用均等性が低いとみなす。
【００３１】
具体的には、例えば、分析支援装置１０１は、プログラム間のメンバレベルの依存関係から特定される、依存元のプログラムから依存先のプログラムへの依存関係に関する重みを取得する。ここで、プログラム間のメンバレベルの依存関係とは、あるプログラム内のメンバと、他のプログラム内のメンバとの依存関係である。メンバは、例えば、メソッドやフィールド（変数）である。
【００３２】
プログラム間（依存元のプログラムから依存先のプログラムへの）の依存関係に関する重みは、例えば、依存元のプログラムが役割を果たすために依存先のプログラムとの依存関係がどれだけ本質的かを示す値に相当する。プログラム間の依存関係に関する重みは、例えば、依存先のプログラムが依存元のプログラム専用に使われているほど値が高くなる。プログラム間の依存関係に関する重みとしては、例えば、特許文献１に記載のクラス／メソッドの階層関係を用いた本質度スコアを用いることができる。
【００３３】
分析支援装置１０１は、取得したプログラム間の依存関係に関する重みを参照して、プログラム間の依存関係に基づいて、ソフトウェアＳＷ内のプログラムの使用均等性を定義する。すなわち、「同じような使われ方」の判断に、例えば、プログラム／メソッドの階層関係に基づくプログラム間の依存関係に関する重み（本質度スコア）を利用する。
【００３４】
図１の例では、ソフトウェア１１０内のプログラム間の依存関係に基づいて、ソフトウェア１１０内のプログラム集合Ｐ１〜Ｐ５のうち、使用均等性が高いプログラムＰ３が特定された場合を想定する。ソフトウェア１１０は、ソフトウェアＳＷの一例である。
【００３５】
（２）分析支援装置１０１は、ソフトウェアＳＷ内のプログラム集合のうち、特定した所定のプログラムを除く残余のプログラムを複数のクラスタに分割して、分割した結果を表示する際に、所定のプログラムを、分割した残余のプログラムと別途に出力する。
【００３６】
ここで、複数のクラスタに分割するとは、プログラム間の依存関係に基づくクラスタリングを行って、互いに関係し合っているプログラムのかたまりをクラスタとして分割することである。また、別途に出力するとは、例えば、所定のプログラムを、分割した残余のプログラムとは別の領域や態様で出力することである。
【００３７】
図１の例では、プログラム集合Ｐ１〜Ｐ５のうち、特定されたプログラムＰ３を除く残余のプログラムＰ１，Ｐ２，Ｐ４，Ｐ５がクラスタＣ１，Ｃ２に分割された場合を想定する。クラスタＣ１には、プログラムＰ１，Ｐ４が含まれる。クラスタＣ２には、プログラムＰ２，Ｐ５が含まれる。
【００３８】
この場合、分析支援装置１０１は、例えば、プログラムＰ１，Ｐ２，Ｐ４，Ｐ５をクラスタＣ１，Ｃ２に分割した結果を表示する際に、プログラムＰ３を、分割したプログラムＰ１，Ｐ２，Ｐ４，Ｐ５を配置する領域１２０とは別領域１３０に配置する。図１中、Ｐ＃を含む図形「□」は、プログラムＰ＃を表すアイコンである。領域１２０および領域１３０は、例えば、同一画面内に表示してもよいし、領域１２０と領域１３０との対応関係を特定可能な状態で別画面に表示してもよい。
【００３９】
なお、残余のプログラムを複数のクラスタに分割する処理は、例えば、分析支援装置１０１において実行されてもよく、また、分析支援装置１０１と接続された他のコンピュータが実行することにしてもよい。他のコンピュータで分割する処理を実行した場合は、分析支援装置１０１は、他のコンピュータから残余のプログラムを複数のクラスタに分割した結果を取得する。
【００４０】
このように、分析支援装置１０１によれば、ソフトウェアクラスタリングの際に、どのクラスタにも所属させるのが不適当なプログラム（遍在モジュール）をあらかじめ除去した上でクラスタリングを実施することができる。このため、特定の機能に属さないクラスがノイズのように働いて分割結果の理解の妨げとなることを防ぐことができる。また、クラスタリングの結果を表示する際に、当該クラスタリングの結果とは別立てに、除去したプログラムを特定可能に可視化することができる。このため、どのプログラムが遍在モジュールとしてクラスタリングから除外されたのかを把握可能にして、ソフトウェア構造の理解を支援することができる。
【００４１】
図１の例では、どのクラスタにも所属させるのが不適当なプログラムＰ３（遍在モジュール）をあらかじめ除去した上でクラスタリングを実施することができる。また、クラスタリングの結果を表示する際に、除去したプログラムＰ３を、クラスタリングしたプログラムＰ１，Ｐ２，Ｐ４，Ｐ５を配置する領域１２０とは別領域１３０に配置して可視化することができる。これにより、特定の機能に属さないクラスがノイズのように働いて分割結果の理解の妨げとなることを防ぎつつ、遍在モジュールとしてプログラムＰ３がクラスタリングから除外されたことを把握可能にして、ソフトウェア１１０の構造の理解を支援することができる。
【００４２】
（分析支援システム２００のシステム構成例）
つぎに、図１に示した分析支援装置１０１を含む分析支援システム２００のシステム構成例について説明する。分析支援システム２００は、例えば、ソフトウェア資産の開発、維持管理を行うためのコンピュータシステムに適用される。
【００４３】
図２は、分析支援システム２００のシステム構成例を示す説明図である。図２において、分析支援システム２００は、分析支援装置１０１と、クライアント装置２０１と、を含む。分析支援システム２００において、分析支援装置１０１およびクライアント装置２０１は、有線または無線のネットワーク２１０を介して接続される。ネットワーク２１０は、例えば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどである。
【００４４】
ここで、分析支援装置１０１は、ソースコードＤＢ（ＤａｔａＢａｓｅ）２２０を有し、ソフトウェアＳＷの分析を支援する。分析支援装置１０１は、例えば、サーバである。ソースコードＤＢ２２０は、分析対象となるソフトウェアＳＷのソースコードを記憶する。ソースコードＤＢ２２０には、例えば、ソフトウェアＳＷのソースコードと対応付けて、後述の図４に示すような依存関係グラフ情報４００や、後述の図５に示すような本質度情報５００が記憶されていてもよい。
【００４５】
クライアント装置２０１は、分析支援システム２００のユーザが使用するコンピュータである。例えば、クライアント装置２０１は、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）、タブレットＰＣなどである。分析支援システム２００のユーザは、例えば、ソフトウェアＳＷの開発者や分析者である。
【００４６】
なお、ここでは、分析支援装置１０１とクライアント装置２０１とを別体に設けることにしたが、これに限らない。例えば、分析支援装置１０１は、クライアント装置２０１により実現されることにしてもよい。
【００４７】
（分析支援装置１０１のハードウェア構成例）
つぎに、分析支援装置１０１のハードウェア構成例について説明する。
【００４８】
図３は、分析支援装置１０１のハードウェア構成例を示すブロック図である。図３において、分析支援装置１０１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３０１と、メモリ３０２と、ディスクドライブ３０３と、ディスク３０４と、通信Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）３０５と、可搬型記録媒体Ｉ／Ｆ３０６と、可搬型記録媒体３０７と、を有する。また、各構成部は、バス３００によってそれぞれ接続される。
【００４９】
ここで、ＣＰＵ３０１は、分析支援装置１０１の全体の制御を司る。ＣＰＵ３０１は、複数のコアを有していてもよい。メモリ３０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有する。具体的には、例えば、フラッシュＲＯＭがＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のプログラムを記憶し、ＲＯＭがアプリケーションプログラムを記憶し、ＲＡＭがＣＰＵ３０１のワークエリアとして使用される。メモリ３０２に記憶されるプログラムは、ＣＰＵ３０１にロードされることで、コーディングされている処理をＣＰＵ３０１に実行させる。
【００５０】
ディスクドライブ３０３は、ＣＰＵ３０１の制御に従ってディスク３０４に対するデータのリード／ライトを制御する。ディスク３０４は、ディスクドライブ３０３の制御で書き込まれたデータを記憶する。ディスク３０４としては、例えば、磁気ディスク、光ディスクなどが挙げられる。
【００５１】
通信Ｉ／Ｆ３０５は、通信回線を通じてネットワーク２１０に接続され、ネットワーク２１０を介して外部のコンピュータ（例えば、図２に示したクライアント装置２０１）に接続される。そして、通信Ｉ／Ｆ３０５は、ネットワーク２１０と装置内部とのインターフェースを司り、外部のコンピュータからのデータの入出力を制御する。通信Ｉ／Ｆ３０５には、例えば、モデムやＬＡＮアダプタなどを採用することができる。
【００５２】
可搬型記録媒体Ｉ／Ｆ３０６は、ＣＰＵ３０１の制御に従って可搬型記録媒体３０７に対するデータのリード／ライトを制御する。可搬型記録媒体３０７は、可搬型記録媒体Ｉ／Ｆ３０６の制御で書き込まれたデータを記憶する。可搬型記録媒体３０７としては、例えば、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）−ＲＯＭ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）メモリなどが挙げられる。
【００５３】
なお、分析支援装置１０１は、上述した構成部のほかに、例えば、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、入力装置、ディスプレイ等を有することにしてもよい。また、分析支援装置１０１は、上述した構成部のうち、例えば、ディスクドライブ３０３、ディスク３０４、可搬型記録媒体Ｉ／Ｆ３０６、可搬型記録媒体３０７を有していなくてもよい。また、図２に示したクライアント装置２０１についても、分析支援装置１０１と同様のハードウェア構成により実現することができる。ただし、クライアント装置２０１は、上述した構成部のほかに、例えば、入力装置、ディスプレイを有する。
【００５４】
（依存関係グラフ情報の具体例）
つぎに、分析支援装置１０１が用いる依存関係グラフ情報について説明する。依存関係グラフ情報は、ソフトウェアＳＷに含まれるプログラム間の依存関係を示す情報である。ここでは、ソフトウェアＳＷに含まれるプログラムとして、「クラス」を例に挙げて説明する。
【００５５】
図４は、依存関係グラフ情報の具体例を示す説明図である。図４において、依存関係グラフ情報４００は、依存元クラス名と依存先クラス名とを対応付けて表す依存関係情報（例えば、依存関係情報４００−１〜４００−８）を含む。
【００５６】
ここで、依存元クラス名は、依存元のクラスの名称である。依存先クラス名は、依存先のクラスの名称である。ただし、図４では、ソフトウェアＳＷに含まれるクラス間（プログラム間）の依存関係の一部を抜粋して表示している。
【００５７】
例えば、依存関係情報４００−１は、依存元クラス名「ＢｕｓｉｎｅｓｓＰｒｏｃｅｓｓＦｒａｍｅ」のクラスから、依存先クラス名「ＰｒｏｃｅｓｓＶｉｅｗｅｒＲｅｓｏｕｒｃｅ」のクラスへの依存関係を示す。
【００５８】
（本質度情報の具体例）
つぎに、分析支援装置１０１が用いる本質度情報について説明する。本質度情報は、ソフトウェアＳＷに含まれるプログラム間の依存関係に関する本質度を示す情報である。ここでは、図４に示した依存関係グラフ情報４００に対応する本質度情報を例に挙げて説明する。
【００５９】
図５は、本質度情報の具体例を示す説明図である。図５において、本質度情報５００は、依存元クラス名と依存先クラス名と本質度とを対応付けて表す本質度スコア情報（例えば、本質度スコア情報５００−１〜５００−８）を含む。
【００６０】
ここで、依存元クラス名は、依存元のクラスの名称である。依存先クラス名は、依存先のクラスの名称である。本質度は、依存元のクラスから依存先のクラスへの依存関係に関する本質度スコア（重み）であり、依存元のクラスが役割を果たすために依存先のクラスとの依存関係がどれだけ本質的かを示す。
【００６１】
例えば、本質度スコア情報５００−１は、依存元クラス名「ＢｕｓｉｎｅｓｓＰｒｏｃｅｓｓＦｒａｍｅ」のクラスから、依存先クラス名「ＰｒｏｃｅｓｓＶｉｅｗｅｒＲｅｓｏｕｒｃｅ」のクラスへの依存関係に関する本質度「０．０１６」を示す。
【００６２】
（分析支援装置１０１の機能的構成例）
図６は、分析支援装置１０１の機能的構成例を示すブロック図である。図６において、分析支援装置１０１は、取得部６０１と、特定部６０２と、分割部６０３と、表示制御部６０４と、を含む。具体的には、例えば、取得部６０１〜表示制御部６０４は、図３に示したメモリ３０２、ディスク３０４、可搬型記録媒体３０７などの記憶装置に記憶されたプログラムをＣＰＵ３０１に実行させることにより、または、通信Ｉ／Ｆ３０５により、その機能を実現する。各機能部の処理結果は、例えば、メモリ３０２、ディスク３０４などの記憶装置に記憶される。
【００６３】
取得部６０１は、ソフトウェアＳＷの依存関係グラフ情報を取得する。ここで、依存関係グラフ情報は、ソフトウェアＳＷ内のプログラム間の依存関係を示す情報であり、例えば、図４に示した依存関係グラフ情報４００である。具体的には、例えば、取得部６０１は、外部のコンピュータから受信することにより、または、不図示の入力装置を用いたユーザの操作入力により、依存関係グラフ情報４００を取得する。
【００６４】
ただし、ソフトウェアＳＷの依存関係グラフ情報は、分析支援装置１０１において生成されることにしてもよい。具体的には、例えば、分析支援装置１０１は、ソースコードＤＢ２２０から、ソフトウェアＳＷのソースコードを取得する。つぎに、分析支援装置１０１は、ソフトウェアＳＷのソースコードを解析して、ソフトウェアＳＷ内のプログラム間の依存関係を示す依存関係情報を生成する。
【００６５】
より詳細に説明すると、例えば、分析支援装置１０１は、例えば、既存の構文解析技術および静的解析技術により、ソフトウェアＳＷのソースコードを解析し、ソフトウェアＳＷ内のクラス間の依存関係を抽出する。これにより、分析支援装置１０１は、図４に示したような依存関係グラフ情報４００を生成することができる。
【００６６】
また、取得部６０１は、ソフトウェアＳＷの本質度情報を取得する。ここで、本質度情報は、ソフトウェアＳＷに含まれるプログラム間の依存関係に関する本質度（重み）を示す情報であり、例えば、図５に示した本質度情報５００である。具体的には、例えば、取得部６０１は、外部のコンピュータから受信することにより、または、不図示の入力装置を用いたユーザの操作入力により、本質度情報５００を取得する。
【００６７】
ただし、ソフトウェアＳＷの本質度情報は、分析支援装置１０１において生成されることにしてもよい。具体的には、例えば、分析支援装置１０１は、ソフトウェアＳＷのソースコードを解析して、ソフトウェアＳＷ内のクラス間のメソッドレベルの依存関係を示すメソッドレベル依存関係情報を生成する。
【００６８】
そして、分析支援装置１０１は、例えば、下記式（１）を用いて、生成したメソッドレベル依存関係情報から特定されるクラス間のメソッドレベルの依存関係に基づいて、クラス間の依存関係に関する本質度（重み）を算出することができる。
【００６９】
【数１】
2020187390.tif 000003
【００７０】
ただし、上記式（１）において、Ｅ（Ａ，Ｂ）は、クラスＡからクラスＢへの依存関係に関する本質度（重み）を示す。ｍiは、クラスＡから呼ばれるクラスＢのメソッドである。ｘｄin（ｍi）は、メソッドｍiを呼び出す、別のクラスに属するメソッドの数である。ｉは、メソッドを識別する番号である。ｍｘ（Ｂ）は、あるクラスＢに含まれる、別のクラスから呼ばれるメソッドの数である。クラスＡに属するメソッドから呼び出されるクラスＢに属するメソッドの集合ＭABを、ＭAB＝｛ｍ1，ｍ2，…，ｍi，…，ｍn｝で表す。ｎは集合の要素の数でｎ≧１である。クラスＡに属するメソッドがクラスＢに属するメソッドを呼び出さない場合にはＥ（Ａ，Ｂ）＝０とする。
【００７１】
これにより、分析支援装置１０１は、図５に示したような本質度情報５００を生成することができる。なお、クラス／メソッドの階層関係を用いた本質度を算出する際のより具体的な処理内容については、例えば、特許文献１（特開２０１３−１４８９８７号公報）を参照することができる。
【００７２】
特定部６０２は、ソフトウェアＳＷ内のプログラム間の依存関係に基づいて、ソフトウェアＳＷ内のプログラム集合のうち、使用均等性が高い所定のプログラムを特定する。ここで、使用均等性とは、ソフトウェアＳＷ内の他のプログラムから均等に使用される度合いである。
【００７３】
以下の説明では、ソフトウェアＳＷ内のプログラム集合のうち使用均等性が高いプログラムを「遍在モジュール」と表記する場合がある。
【００７４】
具体的には、例えば、特定部６０２は、取得されたソフトウェアＳＷの本質度情報を用いて、取得されたソフトウェアＳＷの依存関係グラフ情報に基づいて、ソフトウェアＳＷ内のプログラムの使用均等性スコアを算出する。ここで、使用均等性スコアは、ソフトウェアＳＷ内のプログラムが他のプログラムから均等に使用される度合いを示す指標値である。
【００７５】
より詳細に説明すると、例えば、特定部６０２は、本質度情報５００を参照して、ソフトウェアＳＷ内の依存先のクラスのうち、依存元のいずれのクラスとの依存関係に関する本質度（重み）が閾値α未満となるクラスを抽出する。換言すれば、特定部６０２は、依存先のクラスへの依存関係を持つ全てのクラスの当該依存先のクラスへの本質度に閾値α以上のものが一つでもあれば、その依存先のクラスは遍在モジュールではないと判定する。閾値αは、任意に設定可能であり、例えば、０．１５程度の値に設定される。
【００７６】
つぎに、特定部６０２は、依存関係グラフ情報４００に基づいて、抽出したクラスの使用均等性スコアを算出する。そして、特定部６０２は、算出した使用均等性スコアが閾値β以上の場合に、抽出したクラスを遍在モジュールとして特定する。閾値βは、任意に設定可能であり、例えば、０．８５程度の値に設定される。
【００７７】
使用均等性スコアは、例えば、下記式（２）を用いて算出することができる。ただし、ｅは、抽出されたクラス（クラスＢ）の使用均等性スコアである。ｄin（Ｂ）は、クラス（クラスＢ）への依存関係を持つクラスの数である。あるクラスへの依存関係を持つクラスの数は、依存関係グラフ情報から特定される。
【００７８】
ｅ＝１−１／ｄin（Ｂ）      ・・・（２）
【００７９】
算出された使用均等性スコアは、例えば、図７に示すような使用均等性テーブル７００に記憶される。使用均等性テーブル７００は、例えば、図３に示したメモリ３０２、ディスク３０４などの記憶装置により実現される。ここで、使用均等性テーブル７００の記憶内容について説明する。
【００８０】
図７は、使用均等性テーブル７００の記憶内容の一例を示す説明図である。図７において、使用均等性テーブル７００は、クラス名および使用均等性スコアのフィールドを有し、各フィールドに情報を設定することで、使用均等性情報（例えば、使用均等性情報７００−１〜７００−３）をレコードとして記憶する。
【００８１】
ここで、クラス名は、クラスの名称である。使用均等性スコアは、他のクラスから均等に使用される度合いを示す指標値である。例えば、使用均等性情報７００−１は、クラス名「ＰｒｏｃｅｓｓＶｉｅｗｅｒＲｅｓｏｕｒｃｅ」のクラスの使用均等性スコア「０．９８５」を示す。
【００８２】
例えば、特定部６０２は、使用均等性テーブル７００を参照して、抽出したクラスのうち使用均等性スコアが閾値β以上のクラスを、遍在モジュールとして特定する。これにより、各所から満遍なく使われているクラスを、遍在モジュールとして特定することができる。
【００８３】
特定されたクラスは、例えば、図８に示すような遍在モジュールテーブル８００に記憶される。遍在モジュールテーブル８００は、例えば、図３に示したメモリ３０２、ディスク３０４などの記憶装置により実現される。ここで、遍在モジュールテーブル８００の記憶内容について説明する。
【００８４】
図８は、遍在モジュールテーブル８００の記憶内容の一例を示す説明図である。図８において、遍在モジュールテーブル８００は、遍在モジュールとして特定されたクラスのクラス名を記憶する。遍在モジュールテーブル８００によれば、ソフトウェアＳＷ内のクラス集合のうち、使用均等性が高いクラスを特定することができる。
【００８５】
なお、遍在モジュールテーブル８００には、クラス名と対応付けて、当該クラス名の遍在モジュールの使用均等性スコアが記憶されていてもよい。
【００８６】
図６の説明に戻り、分割部６０３は、ソフトウェアＳＷ内のプログラム集合のうち、特定された所定のプログラムを除く残余のプログラムを複数のクラスタに分割する。具体的には、例えば、分割部６０３は、特定された所定のプログラムを除く残余のプログラム間の依存関係に基づいて、残余のプログラムを複数のクラスタに分割する。
【００８７】
より詳細に説明すると、例えば、分割部６０３は、依存関係グラフ情報４００をコピーして分割用依存関係グラフ情報を生成する。つぎに、分割部６０３は、遍在モジュールテーブル８００を参照して、生成した分割用依存関係グラフ情報から、遍在モジュールと他のクラスとの間の依存関係を示す依存関係情報を削除する。
【００８８】
ここで、図９を用いて、分割用依存関係グラフ情報の具体例について説明する。ここでは、図４に示した依存関係グラフ情報４００に対応する分割用依存関係グラフ情報を例に挙げて説明する。
【００８９】
図９は、分割用依存関係グラフ情報の具体例を示す説明図である。図９において、分割用依存関係グラフ情報９００は、依存元クラス名と依存先クラス名とを対応付けて表す依存関係情報（例えば、依存関係情報９００−１〜９００−４）を含む。
【００９０】
分割用依存関係グラフ情報９００は、依存関係グラフ情報４００から、遍在モジュールと他のクラスとの間の依存関係を示す依存関係情報（例えば、依存関係情報４００−１〜４００−４）を削除したものに相当する。
【００９１】
そして、分割部６０３は、削除後の分割用依存関係グラフ情報（例えば、分割用依存関係グラフ情報９００）を用いて、クラスタリングを行う。この際、分割部６０３は、例えば、残余のクラス間の依存関係に関する重み（本質度）に基づいて、依存関係に関する重みの合計が当該合計の期待値よりも高くなるように、残余のクラスを複数のクラスタに分割することにしてもよい。
【００９２】
クラス間の依存関係に関する重み（本質度）は、例えば、本質度情報５００から特定される。なお、本質度を用いてクラスタリングする具体的な処理内容については、例えば、特許文献１（特開２０１３−１４８９８７号公報）を参照することができる。
【００９３】
表示制御部６０４は、ソフトウェアＳＷ内のプログラム集合のうち、特定された所定のプログラムを除く残余のプログラムを複数のクラスタに分割した結果を表示する際に、所定のプログラムを、分割した残余のプログラムと別途に出力する制御を行う。表示制御部６０４の出力形式としては、例えば、通信Ｉ／Ｆ３０５による他のコンピュータへの送信、不図示のディスプレイへの表示、不図示のプリンタへの印刷出力などがある。
【００９４】
具体的には、例えば、表示制御部６０４は、特定された遍在モジュールを除く残余のクラスを複数のクラスタに分割した結果を表示する際に、特定された遍在モジュールを、分割した残余のクラスを配置する領域とは別領域に配置する。
【００９５】
より詳細に説明すると、例えば、表示制御部６０４は、クライアント装置２０１からの要求に応じて、クラスタリング結果（分割結果）と、遍在モジュールテーブル８００とを参照して、ソフトウェア地図画面の画面情報を生成する。ここで、ソフトウェア地図画面は、ソフトウェアクラスタリングの結果を、都市の地図を模した形式として平面上に配置して可視化したものである。そして、表示制御部６０４は、クライアント装置２０１に生成した画面情報を送信することにより、クライアント装置２０１にソフトウェア地図画面を表示する。ソフトウェア地図画面の画面例については、図１４を用いて後述する。
【００９６】
なお、上記式（２）の例では、クラスの使用均等性スコアを算出するにあたり、当該クラスへの依存関係を持つクラスの数のみを考慮することにしたが、これに限らない。例えば、あるクラスへの入りの依存関係が「２０」あり、閾値αを「０．２」とする。この場合に、２０個の本質度のうち、一つだけ「０．１９」の値があり、残りの１９個が「０．００１」のような小さい値ばかりであれば、メソッドの使用に偏りがあるといえる。
【００９７】
したがって、このような場合に使用均等性が高いとみなすのは不適当といえる。これは、特定のいくつかのクラスからのみよく使われるようなメソッドがあるときに起こりやすい。そこで、特定部６０２は、依存先のプログラムへの依存関係を有する依存元のプログラム同士での当該依存関係に関する重み（本質度）の差をさらに用いて、使用均等性スコアを算出することにしてもよい。例えば、特定部６０２は、クラスの使用均等性スコアを算出するにあたり、当該クラスへの依存関係を持つクラス間で本質度の幅が大きくなるにつれて、使用均等性が低くなるようにしてもよい。
【００９８】
具体的には、例えば、特定部６０２は、下記式（３）を用いて、抽出したクラスの使用均等性スコアを算出することにしてもよい。ただし、ｅは、抽出されたクラス（クラスＢ）の使用均等性スコアである。ｄin（Ｂ）は、クラス（クラスＢ）への依存関係を持つクラスの数である。ｍａｘＥは、クラス（クラスＢ）への入りの依存関係の本質度の最大値である。ｍｉｎＥは、クラス（クラスＢ）への入りの依存関係の本質度の最小値である。γは、効果を調整するための係数である。γは、「１」としてもよい。
【００９９】
ｅ＝｛１−１／ｄin（Ｂ）｝×γ｛１−（ｍａｘＥ−ｍｉｎＥ）｝・・・（３）
【０１００】
また、上記式（３）において、本質度の最大値と最小値の幅を示している項（ｍａｘＥ−ｍｉｎＥ）は、本質度に関する分散や標準偏差などに基づく値に置き換えて、本質度の幅を使用均等性に反映させることにしてもよい。
【０１０１】
なお、分析支援装置１０１の各機能部は、分析支援システム２００内の複数のコンピュータ（例えば、分析支援装置１０１とクライアント装置２０１）により実現されることにしてもよい。例えば、分析支援装置１０１の各機能部のうち、表示制御部６０４をクライアント装置２０１により実現することにしてもよい。この場合、表示制御部６０４は、例えば、分析支援装置１０１からクラスタリング結果（分割結果）と、遍在モジュールテーブル８００とを取得して、ソフトウェア地図画面を表示することができる。
【０１０２】
（遍在モジュールの特定例）
つぎに、図１０〜図１３を用いて、遍在モジュールの特定例について説明する。ここでは、分析対象となるソフトウェアＳＷを、オブジェクト指向言語で開発された業務プロセス分析ツールとする。図１０〜図１３では、ソフトウェアＳＷの依存関係グラフの一部を示しながら、遍在モジュールの特定例について説明する。
【０１０３】
図１０は、遍在モジュールの第１の特定例を示す説明図である。図１０において、クラス１００１〜１０６７は、依存先のクラス１０６８への依存関係を持つ依存元のクラス（６７クラス）である。以下、依存先のクラス１０６８が遍在モジュールであるか否かを判定する。ただし、閾値αを「α＝０．１５」とし、閾値βを「０．８５」とする。
【０１０４】
ここで、依存元である各クラス１００１〜１０６７から依存先のクラス１０６８への依存関係に関する本質度は、クラス間をつなぐ矢印に付した数字であり、図１０中、左から右に降順となっている場合を想定する。すなわち、依存元のクラス１００１から依存先のクラス１０６８への依存関係に関する本質度「０．０１６」が、最も大きい値である。
【０１０５】
この場合、特定部６０２は、依存先のクラス１０６８について、依存元であるクラス１００１〜１０６７との依存関係に関する本質度の全てが閾値α未満のため、依存先のクラス１０６８の使用均等性スコアを算出する。ここでは、上記式（２）を用いて、依存先のクラス１０６８の使用均等性スコアを算出する場合を想定する。
【０１０６】
この場合、依存先のクラス１０６８の使用均等性スコアｅは、「ｅ＝０．９８５（＝１−１／６７）」となる。この使用均等性スコアｅは、閾値βより大きい。したがって、特定部６０２は、依存先のクラス１０６８を遍在モジュールとして特定する。この結果、依存先のクラス１０６８は、遍在モジュールとみなされてクラスタリングから除外される。クラス１０６８は、国際化文字列リソースを提供するクラスであり、システム上の特定の機能に属さないため、妥当な結果であるといえる。
【０１０７】
つぎに、遍在モジュールの第２の特定例について説明する。
【０１０８】
図１１は、遍在モジュールの第２の特定例を示す説明図である。図１１において、クラス１１０１〜１１８２は、依存先のクラス１１８３への依存関係を持つ依存元のクラス（８２クラス）である。以下、依存先のクラス１１８３が遍在モジュールであるか否かを判定する。ただし、閾値αを「α＝０．１５」とし、閾値βを「０．８５」とする。
【０１０９】
まず、非特許文献２の方式のように、クラス間の依存関係のグラフにおいて、ある節点（クラス）への入次数が平均の３倍以上ならば、そのクラスを遍在モジュールとみなす場合を想定する。ただし、分析対象となるソフトウェアＳＷにおいて、入次数の平均の３倍を「１２」とする。
【０１１０】
この場合、依存先のクラス１１８３への入次数が「８２」であり、平均の３倍以上のため、依存先のクラス１１８３は、遍在モジュールとみなされる。しかし、実際は、依存先のクラス１１８３は、システムで重要な役割を果たすモデルクラスであり、ユーティリティクラスではないため、不適当な結果である。
【０１１１】
一方、本実施の形態では、特定部６０２は、依存先のクラス１１８３について、依存元であるクラス１１０１との依存関係に関する本質度「０．１６０」が閾値α以上のため、依存先のクラス１１８３は遍在モジュールではないと判定する。すなわち、従来技術では不当に遍在モジュールと判定されてクラスタリングから除去されるのに対して、本実施の形態では除去を免れることができる。
【０１１２】
つぎに、遍在モジュールの第３の特定例について説明する。
【０１１３】
図１２は、遍在モジュールの第３の特定例を示す説明図である。図１２において、クラス１２０１〜１２１１は、依存先のクラス１２１２への依存関係を持つ依存元のクラス（１１クラス）である。以下、依存先のクラス１２１２が遍在モジュールであるか否かを判定する。ただし、閾値αを「α＝０．１５」とし、閾値βを「０．８５」とする。
【０１１４】
まず、非特許文献２の方式のように、クラス間の依存関係のグラフにおいて、ある節点（クラス）への入次数が平均の３倍以上ならば、そのクラスを遍在モジュールとみなす場合を想定する。この場合、依存先のクラス１２１２への入次数が「１１」であり、平均の３倍未満のため、依存先のクラス１２１２は、遍在モジュールとみなされない。しかし、実際は、依存先のクラス１２１２は、入出力処理の記述を簡単にするためのユーティリティクラスであり、特定の業務機能に属さず、様々な業務機能から利用されているものであるため、不適当な結果である。
【０１１５】
一方、本実施の形態では、特定部６０２は、依存先のクラス１２１２について、依存元であるクラス１２０１〜１２１１との依存関係に関する本質度の全てが閾値α未満のため、依存先のクラス１２１２の使用均等性スコアを算出する。ここでは、上記式（２）を用いて、依存先のクラス１２１２の使用均等性スコアを算出する場合を想定する。
【０１１６】
この場合、依存先のクラス１２１２の使用均等性スコアｅは、「ｅ＝０．９０９（＝１−１／１１）」となる。この使用均等性スコアｅは、閾値βより大きい。したがって、特定部６０２は、依存先のクラス１２１２を遍在モジュールとして特定する。この結果、依存先のクラス１２１２は、遍在モジュールとみなされてクラスタリングから除外される。すなわち、従来技術では遍在モジュールと判定されずにクラスタリングから除去できなかったユーティリティクラスを、本実施の形態では除去することができる。
【０１１７】
つぎに、遍在モジュールの第４の特定例について説明する。第４の特定例では、上記式（２）および上記式（３）をそれぞれ用いて算出した使用均等性スコアを比較して効果の違いを説明する。
【０１１８】
図１３は、遍在モジュールの第４の特定例を示す説明図である。図１３において、クラス１３０１〜１３１８は、依存先のクラス１３１９への依存関係を持つ依存元のクラス（１８クラス）である。以下、依存先のクラス１３１９が遍在モジュールであるか否かを判定する。ただし、閾値αを「α＝０．２０」とし、閾値βを「０．９０」とする。
【０１１９】
特定部６０２は、依存先のクラス１３１９について、依存元であるクラス１３０１〜１３１８との依存関係に関する本質度の全てが閾値α未満のため、依存先のクラス１３１９の使用均等性スコアを算出する。ここでは、特定部６０２は、上記式（２）および上記式（３）をそれぞれ用いて、依存先のクラス１３１９の使用均等性スコアを算出する。
【０１２０】
まず、上記式（２）を用いた場合、依存先のクラス１３１９の使用均等性スコアｅは、「ｅ＝０．９４（＝１−１／１８）」となる。この使用均等性スコアｅは、閾値βより大きい。したがって、特定部６０２は、依存先のクラス１３１９を遍在モジュールとして特定する。
【０１２１】
一方、上記式（３）を用いた場合、γを「γ＝１」とすると、「ｍａｘＥ＝０．１９」、「ｍｉｎＥ＝０．０１」のため、依存先のクラス１３１９の使用均等性スコアｅは、「ｅ≒０．７７（＝（１−１／１８）×１×（１−（０．１９−０．０１）））」となる。この使用均等性スコアｅは、閾値β以下である。したがって、特定部６０２は、依存先のクラス１３１９を遍在モジュールとして特定しない。
【０１２２】
図１３の例では、依存元のクラス１３０１からの依存関係の本質度が他のクラスより高い。すなわち、依存元のクラス１３０１は、他のクラスとは異なる関係にあり、依存先のクラス１３１９との結びつきが強いため、遍在モジュールとみなされないことが妥当であるといえる。このように、上記式（３）を用いて使用均等性スコアを算出することにより、上記式（２）を用いた場合に比べて、本質度に差があると使用均等性スコアが低くなり、遍在モジュールと判定されにくくなることがわかる。
【０１２３】
（ソフトウェア地図画面の画面例）
つぎに、図１４を用いて、クライアント装置２０１のディスプレイ（不図示）に表示されるソフトウェア地図画面の画面例について説明する。ソフトウェア地図画面は、例えば、クライアント装置２０１からの要求に応じて表示される。
【０１２４】
図１４は、ソフトウェア地図画面の画面例を示す説明図である。図１４において、ソフトウェア地図画面１４００は、第１の領域１４１０と、第２の領域１４２０とを含む。第１の領域１４１０には、ソフトウェアＳＷ（遍在モジュールを除く）のクラスタリング結果に基づいて、各クラスタと、各クラスタに属するクラスとが配置されている。
【０１２５】
第１の領域１４１０において、色の付された小さな正方形がクラスを表し、それを囲む四角形がクラスタを表している。例えば、クラスタ１４１１に属するクラスとして、クラス１４１１−１，１４１１−２が表示されている。また、第２の領域１４２０には、クラスタリングから除外された遍在モジュール１４２１〜１４２３が配置されている。
【０１２６】
ソフトウェア地図画面１４００において、不図示の入力装置を用いたユーザの操作入力により、第１の領域１４１０内のクラスや第２の領域１４２０内の遍在モジュールを選択すると、選択されたクラスや遍在モジュールのクラス名などを確認することができる。
【０１２７】
ソフトウェア地図画面１４００によれば、ユーザは、ソフトウェアＳＷの構成の実態を依存関係の面から明らかにして、機能がどう構成されているかということや、保守性の良し悪しなどの分析を行うことができる。また、クラスタリングの際にどのクラスタ（機能）にも所属させるのが不適当なクラス（遍在モジュール）が除外されている。このため、特定の機能に属さないクラスがノイズのように働いて分割結果の理解の妨げとなることを防ぐことができる。また、クラスタリングから除外したクラスをクラスタリング結果とは別途に出力することで、ユーザは、どのクラスが遍在モジュールとしてクラスタリングから除外されたのかを把握することができる。
【０１２８】
（分析支援装置１０１の分析支援処理手順）
つぎに、図１５を用いて、分析支援装置１０１の分析支援処理手順について説明する。ここでは、ソフトウェアＳＷ内のプログラムとして「クラス」を例に挙げて説明する。
【０１２９】
図１５は、分析支援装置１０１の分析支援処理手順の一例を示すフローチャートである。図１５のフローチャートにおいて、まず、分析支援装置１０１は、ソフトウェアＳＷの依存関係グラフ情報を取得する（ステップＳ１５０１）。つぎに、分析支援装置１０１は、ソフトウェアＳＷの本質度情報を取得する（ステップＳ１５０２）。
【０１３０】
そして、分析支援装置１０１は、取得した本質度情報を用いて、取得した依存関係グラフ情報に基づいて、ソフトウェアＳＷ内のプログラムの使用均等性スコアを算出する使用均等性算出処理を実行する（ステップＳ１５０３）。使用均等性算出処理の具体的な処理手順については、図１６を用いて後述する。
【０１３１】
つぎに、分析支援装置１０１は、算出された使用均等性スコアに基づいて、クラスタリング対象から遍在モジュールを除去する遍在モジュール除去処理を実行する（ステップＳ１５０４）。遍在モジュール除去処理の具体的な処理手順については、図１７を用いて後述する。
【０１３２】
つぎに、分析支援装置１０１は、ステップＳ１５０４において生成された分割用依存関係グラフ情報に基づいて、ソフトウェアＳＷ内のクラス集合のうち遍在モジュールを除去した残余のクラスを複数のクラスタに分割する（ステップＳ１５０５）。
【０１３３】
そして、分析支援装置１０１は、クラスタリング結果と、ステップＳ１５０４において生成された遍在モジュールテーブル８００とを参照して、ソフトウェア地図画面を表示して（ステップＳ１５０６）、本フローチャートによる一連の処理を終了する。
【０１３４】
これにより、ソフトウェアＳＷ内のクラス集合のうち使用均等性が高いクラスがクラスタリングされるのを回避するとともに、ソフトウェアＳＷ内のいずれのクラスがクラスタリングから除外されたのかを特定可能にすることができる。
【０１３５】
つぎに、図１６を用いて、図１５に示したステップＳ１５０３の使用均等性算出処理の具体的な処理手順について説明する。
【０１３６】
図１６は、使用均等性算出処理の具体的処理手順の一例を示すフローチャートである。図１６のフローチャートにおいて、まず、分析支援装置１０１は、取得した依存関係グラフ情報を参照して、未処理の依存先クラスを選択する（ステップＳ１６０１）。そして、分析支援装置１０１は、依存関係グラフ情報を参照して、選択した依存先クラスの依存元クラスの集合を抽出する（ステップＳ１６０２）。
【０１３７】
つぎに、分析支援装置１０１は、抽出した依存元クラスの集合から未処理の依存元クラスを選択する（ステップＳ１６０３）。そして、分析支援装置１０１は、取得した本質度情報を参照して、選択した依存先クラスと、選択した依存元クラスとの組み合わせに対応する本質度を特定する（ステップＳ１６０４）。
【０１３８】
つぎに、分析支援装置１０１は、取得した本質度が閾値α以上であるか否かを判断する（ステップＳ１６０５）。ここで、本質度が閾値α以上の場合（ステップＳ１６０５：Ｙｅｓ）、分析支援装置１０１は、選択した依存先クラスの使用均等性スコアを「０」として（ステップＳ１６０６）、ステップＳ１６０９に移行する。
【０１３９】
一方、本質度が閾値α未満の場合（ステップＳ１６０５：Ｎｏ）、分析支援装置１０１は、抽出した依存元クラスの集合のうち未処理の依存元クラスがあるか否かを判断する（ステップＳ１６０７）。ここで、未処理の依存元クラスがある場合（ステップＳ１６０７：Ｙｅｓ）、分析支援装置１０１は、ステップＳ１６０３に戻る。
【０１４０】
一方、未処理の依存元クラスがない場合（ステップＳ１６０７：Ｎｏ）、分析支援装置１０１は、上記式（２）または上記式（３）を用いて、選択した依存先クラスの使用均等性スコアを算出する（ステップＳ１６０８）。そして、分析支援装置１０１は、依存先クラスの使用均等性スコアを、使用均等性テーブル７００に記録する（ステップＳ１６０９）。
【０１４１】
つぎに、分析支援装置１０１は、取得した依存関係グラフ情報を参照して、未処理の依存先クラスがあるか否かを判断する（ステップＳ１６１０）。ここで、未処理の依存先クラスがある場合（ステップＳ１６１０：Ｙｅｓ）、分析支援装置１０１は、ステップＳ１６０１に戻る。
【０１４２】
一方、未処理の依存先クラスがない場合（ステップＳ１６１０：Ｎｏ）、分析支援装置１０１は、使用均等性算出処理を呼び出したステップに戻る。これにより、ソフトウェアＳＷ内の依存先クラスについて、他のクラスから均等に使用される度合いを示す使用均等性スコアを算出することができる。
【０１４３】
つぎに、図１７を用いて、図１５に示したステップＳ１５０４の遍在モジュール除去処理の具体的な処理手順について説明する。
【０１４４】
図１７は、遍在モジュール除去処理の具体的処理手順の一例を示すフローチャートである。図１７のフローチャートにおいて、まず、分析支援装置１０１は、取得した依存関係グラフ情報をコピーして分割用依存関係グラフ情報を生成する（ステップＳ１７０１）。つぎに、分析支援装置１０１は、使用均等性テーブル７００から未処理のレコードを選択する（ステップＳ１７０２）。
【０１４５】
そして、分析支援装置１０１は、選択したレコードを参照して、使用均等性スコアが閾値β以上であるか否かを判断する（ステップＳ１７０３）。ここで、使用均等性スコアが閾値β未満の場合（ステップＳ１７０３：Ｎｏ）、分析支援装置１０１は、ステップＳ１７０６に移行する。
【０１４６】
一方、使用均等性スコアが閾値β以上の場合（ステップＳ１７０３：Ｙｅｓ）、分析支援装置１０１は、選択したレコードのクラス名を遍在モジュールテーブル８００に記録する（ステップＳ１７０４）。そして、分析支援装置１０１は、遍在モジュールテーブル８００に記録したクラス名を参照して、生成した分割用依存関係グラフ情報から、遍在モジュールと他のクラスとの間の依存関係を示す依存関係情報を削除する（ステップＳ１７０５）。
【０１４７】
つぎに、分析支援装置１０１は、使用均等性テーブル７００を参照して、未処理のレコードがあるか否かを判断する（ステップＳ１７０６）。ここで、未処理のレコードがある場合（ステップＳ１７０６：Ｙｅｓ）、分析支援装置１０１は、ステップＳ１７０２に戻る。一方、未処理のレコードがない場合（ステップＳ１７０６：Ｎｏ）、分析支援装置１０１は、遍在モジュール除去処理を呼び出したステップに戻る。
【０１４８】
これにより、遍在モジュールと他のクラスとの間の依存関係を削除した分割用依存関係グラフ情報を生成することができる。
【０１４９】
以上説明したように、実施の形態にかかる分析支援装置１０１によれば、ソフトウェアＳＷ内のプログラム間の依存関係に基づいて、ソフトウェアＳＷ内のプログラム集合のうち使用均等性が高い所定のプログラム（遍在モジュール）を特定することができる。また、分析支援装置１０１によれば、プログラム集合のうち、特定した所定のプログラムを除く残余のプログラムを複数のクラスタに分割して、分割した結果を表示する際に、所定のプログラムを、分割した残余のプログラムと別途に出力することができる。具体的には、例えば、分析支援装置１０１は、特定した所定のプログラムを、分割した残余のプログラムを配置する領域とは別領域に配置することができる。
【０１５０】
これにより、ソフトウェアクラスタリングの際に、どのクラスタにも所属させるのが不適当なクラス（遍在モジュール）をあらかじめ除去した上でクラスタリングを実施することができる。このため、特定の機能に属さないクラスがノイズのように働いて分割結果の理解の妨げとなることを防ぐことができる。また、クラスタリングの結果を表示する際に、当該クラスタリングの結果とは別立てに、除去した遍在モジュールを特定可能に可視化することができる。このため、どのクラスが遍在モジュールとしてクラスタリングから除外されたのかを把握可能にして、ソフトウェア構造の理解を支援することができる。
【０１５１】
また、分析支援装置１０１によれば、ソフトウェアＳＷ内のプログラム間のメンバレベルの依存関係から特定される、依存元のプログラムから依存先のプログラムへの依存関係に関する重み（本質度）を用いて、プログラム間の依存関係に基づいて、依存先のプログラムの使用均等性スコアを算出することができる。そして、分析支援装置１０１によれば、算出した使用均等性スコアに基づいて、所定のプログラムを特定することができる。
【０１５２】
これにより、メソッド単位で見ても各所から均等に満遍なく使用され、どのクラスとも特別な関係を持たないクラスを、遍在モジュールとして特定してクラスタリングから除外することができる。
【０１５３】
また、分析支援装置１０１によれば、ソフトウェアＳＷ内の依存先のプログラムのうち依存元のいずれのプログラムとの依存関係に関する重み（本質度）が閾値α未満となる依存先のプログラムを抽出することができる。そして、分析支援装置１０１によれば、プログラム間の依存関係に基づいて、抽出した依存先のプログラムの使用均等性スコアを算出し、算出した使用均等性スコアが閾値β以上の場合に、抽出した依存先のプログラムを遍在モジュールとして特定することができる。
【０１５４】
これにより、ソフトウェアＳＷ内の依存先のクラスの中から、本質度を用いて特定のクラスとの結びつきの強いクラスを除去した上で、入りの依存関係の数を用いて使用均等性の高さを評価することができる。例えば、あるクラスを利用しているクラス数が多くとも、メソッド呼出の種類に偏りが存在し、一様な使われ方をしているわけでないことが分かれば、他と異なる使い方をしているクラスとの関係を重要とみなして、適切なクラスタに所属させることが可能となる。
【０１５５】
また、分析支援装置１０１によれば、依存先のプログラムへの依存関係を有する依存元のプログラム同士での当該依存関係に関する重みの差をさらに用いて、依存先のプログラムの使用均等性スコアを算出することができる。
【０１５６】
これにより、クラス（依存先）への依存関係を持つクラス間で本質度の幅が大きくなるにつれて、当該クラスの使用均等性が低くなるように評価することができる。このため、例えば、メソッドの使用に偏りがあり、特定のクラスとの結びつきが強いにもかかわらず、遍在モジュールとして特定されるのを防ぐことができる。
【０１５７】
また、分析支援装置１０１によれば、ソフトウェアＳＷ内のプログラム集合のうち、特定した所定のプログラムを除く残余のプログラム間の依存関係に基づいて、残余のプログラムを複数のクラスタに分割することができる。
【０１５８】
これにより、互いに関係し合っているクラス（プログラム）のかたまりをクラスタとして分割して、ソフトウェア構造を明らかにすることができる。
【０１５９】
これらのことから、実施の形態にかかる分析支援装置１０１および分析支援システム２００によれば、ソフトウェア構造を可視化する際に、特定の機能に属さないクラスを、機能ごとのクラスタとは異なる領域に配置することで、ソフトウェア構造を理解しやすくさせることができる。
【０１６０】
なお、本実施の形態で説明した分析支援方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本分析支援プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ、ＵＳＢメモリ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本分析支援プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１６１】
また、本実施の形態で説明した分析支援装置１０１は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣやＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。
【０１６２】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１６３】
（付記１）ソフトウェア内のプログラム間の依存関係に基づいて、前記ソフトウェア内のプログラム集合のうち、前記ソフトウェア内の他のプログラムから均等に使用される度合いが高い所定のプログラムを特定し、
前記プログラム集合のうち、特定した前記所定のプログラムを除く残余のプログラムを複数のクラスタに分割して、分割した結果を表示する際に、前記所定のプログラムを、分割した前記残余のプログラムと別途に出力する、
処理をコンピュータに実行させることを特徴とする分析支援プログラム。
【０１６４】
（付記２）前記特定する処理は、
前記プログラム間のメンバレベルの依存関係から特定される、前記ソフトウェア内の依存元のプログラムから依存先のプログラムへの依存関係に関する重みを用いて、前記プログラム間の依存関係に基づいて、前記依存先のプログラムが他のプログラムから均等に使用される度合いを示す指標値を算出し、
算出した前記指標値に基づいて、前記所定のプログラムを特定する、ことを特徴とする付記１に記載の分析支援プログラム。
【０１６５】
（付記３）前記特定する処理は、
前記ソフトウェア内の依存先のプログラムのうち依存元のいずれのプログラムとの依存関係に関する重みが閾値未満となる依存先のプログラムを抽出し、
前記プログラム間の依存関係に基づいて、抽出した前記依存先のプログラムが他のプログラムから均等に使用される度合いを示す指標値を算出し、
算出した前記指標値が閾値以上の場合に、抽出した前記依存先のプログラムを前記所定のプログラムとして特定する、ことを特徴とする付記２に記載の分析支援プログラム。
【０１６６】
（付記４）前記算出する処理は、
前記依存先のプログラムへの依存関係を有する依存元のプログラム同士での当該依存関係に関する重みの差をさらに用いて、前記指標値を算出する、ことを特徴とする付記２または３に記載の分析支援プログラム。
【０１６７】
（付記５）前記出力する処理は、
前記所定のプログラムを、分割した前記残余のプログラムを配置する領域とは別領域に配置する、ことを特徴とする付記１〜４のいずれか一つに記載の分析支援プログラム。
【０１６８】
（付記６）前記残余のプログラム間の依存関係に基づいて、前記残余のプログラムを複数のクラスタに分割する、処理を前記コンピュータに実行させることを特徴とする付記１〜５のいずれか一つに記載の分析支援プログラム。
【０１６９】
（付記７）前記プログラム間のメンバレベルの依存関係は、前記ソフトウェア内の依存元のプログラム内のメソッドから依存先のプログラム内のメソッドへの依存関係である、ことを特徴とする付記２に記載の分析支援プログラム。
【０１７０】
（付記８）ソフトウェア内のプログラム間の依存関係に基づいて、前記ソフトウェア内のプログラム集合のうち、前記ソフトウェア内の他のプログラムから均等に使用される度合いが高い所定のプログラムを特定し、
前記プログラム集合のうち、特定した前記所定のプログラムを除く残余のプログラムを複数のクラスタに分割して、分割した結果を表示する際に、前記所定のプログラムを、分割した前記残余のプログラムと別途に出力する、
処理をコンピュータが実行することを特徴とする分析支援方法。
【０１７１】
（付記９）ソフトウェア内のプログラム間の依存関係に基づいて、前記ソフトウェア内のプログラム集合のうち、前記ソフトウェア内の他のプログラムから均等に使用される度合いが高い所定のプログラムを特定する特定部と、
前記プログラム集合のうち、前記特定部によって特定された前記所定のプログラムを除く残余のプログラムを複数のクラスタに分割する分割部と、
前記分割部によって分割された結果を表示する際に、前記所定のプログラムを、分割した前記残余のプログラムと別途に出力する表示制御部と、
を有することを特徴とする分析支援装置。
【０１７２】
（付記１０）ソフトウェア内のプログラム間の依存関係に基づいて、前記ソフトウェア内のプログラム集合のうち、前記ソフトウェア内の他のプログラムから均等に使用される度合いが高い所定のプログラムを特定する特定部と、
前記プログラム集合のうち、前記特定部によって特定された前記所定のプログラムを除く残余のプログラムを複数のクラスタに分割する分割部と、
前記分割部によって分割された結果を表示する際に、前記所定のプログラムを、分割した前記残余のプログラムと別途に出力する表示制御部と、
を含むことを特徴とする分析支援システム。
【符号の説明】
【０１７３】
１０１  分析支援装置
１１０，ＳＷ  ソフトウェア
１２０  領域
１３０  別領域
２００  分析支援システム
２０１  クライアント装置
２１０  ネットワーク
２２０  ソースコードＤＢ
３００  バス
３０１  ＣＰＵ
３０２  メモリ
３０３  ディスクドライブ
３０４  ディスク
３０５  通信Ｉ／Ｆ
３０６  可搬型記録媒体Ｉ／Ｆ
３０７  可搬型記録媒体
４００  依存関係グラフ情報
５００  本質度情報
６０１  取得部
６０２  特定部
６０３  分割部
６０４  表示制御部
７００  使用均等性テーブル
８００  遍在モジュールテーブル
９００  分割用依存関係グラフ情報
１４００  ソフトウェア地図画面
１４１０  第１の領域
１４２０  第２の領域
【図１】
2020187390.tif 000004
【図２】
2020187390.tif 000005
【図３】
2020187390.tif 000006
【図４】
2020187390.tif 000007
【図５】
2020187390.tif 000008
【図６】
2020187390.tif 000009
【図７】
2020187390.tif 000010
【図８】
2020187390.tif 000011
【図９】
2020187390.tif 000012
【図１０】
2020187390.tif 000013
【図１１】
2020187390.tif 000014
【図１２】
2020187390.tif 000015
【図１３】
2020187390.tif 000016
【図１４】
2020187390.tif 000017
【図１５】
2020187390.tif 000018
【図１６】
2020187390.tif 000019
【図１７】
2020187390.tif 000020