(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-12-19
(45)【発行日】2022-12-27
(54)【発明の名称】分析支援プログラム、分析支援方法、分析支援装置および分析支援システム
(51)【国際特許分類】
G06F 8/75 20180101AFI20221220BHJP
【FI】
G06F8/75
(21)【出願番号】P 2019089372
(22)【出願日】2019-05-09
【審査請求日】2022-02-08
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100104190
【氏名又は名称】酒井 昭徳
(72)【発明者】
【氏名】矢野 啓介
【審査官】武田 広太郎
(56)【参考文献】
【文献】特開2013-148987(JP,A)
【文献】特開2017-156896(JP,A)
【文献】特開2015-102878(JP,A)
【文献】米国特許出願公開第2018/0336018(US,A1)
【文献】米国特許出願公開第2016/0202967(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/75
(57)【特許請求の範囲】
【請求項1】
ソフトウェア内のプログラム間の依存関係に基づいて、前記ソフトウェア内のプログラム集合のうち、前記ソフトウェア内の他のプログラムから均等に使用される度合いが高い所定のプログラムを特定し、
前記プログラム集合のうち、特定した前記所定のプログラムを除く残余のプログラムを複数のクラスタに分割して、分割した結果を表示する際に、前記所定のプログラムを、分割した前記残余のプログラムと別途に出力する、
処理をコンピュータに実行させることを特徴とする分析支援プログラム。
【請求項2】
前記特定する処理は、
前記プログラム間のメンバレベルの依存関係から特定される、前記ソフトウェア内の依存元のプログラムから依存先のプログラムへの依存関係に関する重みを用いて、前記プログラム間の依存関係に基づいて、前記依存先のプログラムが他のプログラムから均等に使用される度合いを示す指標値を算出し、
算出した前記指標値に基づいて、前記所定のプログラムを特定する、ことを特徴とする請求項1に記載の分析支援プログラム。
【請求項3】
前記特定する処理は、
前記ソフトウェア内の依存先のプログラムのうち依存元のいずれのプログラムとの依存関係に関する重みが閾値未満となる依存先のプログラムを抽出し、
前記プログラム間の依存関係に基づいて、抽出した前記依存先のプログラムが他のプログラムから均等に使用される度合いを示す指標値を算出し、
算出した前記指標値が閾値以上の場合に、抽出した前記依存先のプログラムを前記所定のプログラムとして特定する、ことを特徴とする請求項2に記載の分析支援プログラム。
【請求項4】
前記算出する処理は、
前記依存先のプログラムへの依存関係を有する依存元のプログラム同士での当該依存関係に関する重みの差をさらに用いて、前記指標値を算出する、ことを特徴とする請求項2または3に記載の分析支援プログラム。
【請求項5】
前記出力する処理は、
前記所定のプログラムを、分割した前記残余のプログラムを配置する領域とは別領域に配置する、ことを特徴とする請求項1~4のいずれか一つに記載の分析支援プログラム。
【請求項6】
前記残余のプログラム間の依存関係に基づいて、前記残余のプログラムを複数のクラスタに分割する、処理を前記コンピュータに実行させることを特徴とする請求項1~5のいずれか一つに記載の分析支援プログラム。
【請求項7】
ソフトウェア内のプログラム間の依存関係に基づいて、前記ソフトウェア内のプログラム集合のうち、前記ソフトウェア内の他のプログラムから均等に使用される度合いが高い所定のプログラムを特定し、
前記プログラム集合のうち、特定した前記所定のプログラムを除く残余のプログラムを複数のクラスタに分割して、分割した結果を表示する際に、前記所定のプログラムを、分割した前記残余のプログラムと別途に出力する、
処理をコンピュータが実行することを特徴とする分析支援方法。
【請求項8】
ソフトウェア内のプログラム間の依存関係に基づいて、前記ソフトウェア内のプログラム集合のうち、前記ソフトウェア内の他のプログラムから均等に使用される度合いが高い所定のプログラムを特定する特定部と、
前記プログラム集合のうち、前記特定部によって特定された前記所定のプログラムを除く残余のプログラムを複数のクラスタに分割する分割部と、
前記分割部によって分割された結果を表示する際に、前記所定のプログラムを、分割した前記残余のプログラムと別途に出力する表示制御部と、
を有することを特徴とする分析支援装置。
【請求項9】
ソフトウェア内のプログラム間の依存関係に基づいて、前記ソフトウェア内のプログラム集合のうち、前記ソフトウェア内の他のプログラムから均等に使用される度合いが高い所定のプログラムを特定する特定部と、
前記プログラム集合のうち、前記特定部によって特定された前記所定のプログラムを除く残余のプログラムを複数のクラスタに分割する分割部と、
前記分割部によって分割された結果を表示する際に、前記所定のプログラムを、分割した前記残余のプログラムと別途に出力する表示制御部と、
を含むことを特徴とする分析支援システム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、分析支援プログラム、分析支援方法、分析支援装置および分析支援システムに関する。
【背景技術】
【0002】
ソフトウェアを開発・改良・保守するためには、ソフトウェアの現状がどうなっているかを理解することが重要である。このような活動を支援するために、例えば、ソフトウェアを構成するソースファイル(あるいは、クラスや関数など)間の依存関係に基づいてクラスタリング技術を適用し、依存関係の密なかたまりを発見して理解に役立てる技術がある。
【0003】
先行技術としては、ソフトウェアを構成する要素群であるエンティティ群について依存関係により特定される関係元のエンティティと関係先のエンティティとを対応付けた対応情報をソフトウェアのソースコードから抽出し、抽出した対応情報により特定される依存関係に関する重みに基づいて、依存関係に関する重みの合計が当該合計の期待値よりも高くなるように、エンティティ群を複数のクラスタに分割するものがある。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来技術では、ソフトウェアクラスタリングの際に、どのプログラム(例えば、クラス)とも特別な関係を持たないプログラムであっても、いずれかのクラスタに分類されて、ソフトウェアの構造を理解することが困難なものとなる場合がある。
【0006】
一つの側面では、本発明は、どのクラスタにも所属させるのが不適当なプログラムがクラスタリングされるのを回避するとともに、当該プログラムを特定可能にすることを目的とする。
【課題を解決するための手段】
【0007】
1つの実施態様では、ソフトウェア内のプログラム間の依存関係に基づいて、前記ソフトウェア内のプログラム集合のうち、前記ソフトウェア内の他のプログラムから均等に使用される度合いが高い所定のプログラムを特定し、前記プログラム集合のうち、特定した前記所定のプログラムを除く残余のプログラムを複数のクラスタに分割して、分割した結果を表示する際に、前記所定のプログラムを、分割した前記残余のプログラムと別途に出力する、分析支援プログラムが提供される。
【発明の効果】
【0008】
本発明の一側面によれば、どのクラスタにも所属させるのが不適当なプログラムがクラスタリングされるのを回避するとともに、当該プログラムを特定可能にすることができるという効果を奏する。
【図面の簡単な説明】
【0009】
【
図1】
図1は、実施の形態にかかる分析支援方法の一実施例を示す説明図である。
【
図2】
図2は、分析支援システム200のシステム構成例を示す説明図である。
【
図3】
図3は、分析支援装置101のハードウェア構成例を示すブロック図である。
【
図4】
図4は、依存関係グラフ情報の具体例を示す説明図である。
【
図5】
図5は、本質度情報の具体例を示す説明図である。
【
図6】
図6は、分析支援装置101の機能的構成例を示すブロック図である。
【
図7】
図7は、使用均等性テーブル700の記憶内容の一例を示す説明図である。
【
図8】
図8は、遍在モジュールテーブル800の記憶内容の一例を示す説明図である。
【
図9】
図9は、分割用依存関係グラフ情報の具体例を示す説明図である。
【
図10】
図10は、遍在モジュールの第1の特定例を示す説明図である。
【
図11】
図11は、遍在モジュールの第2の特定例を示す説明図である。
【
図12】
図12は、遍在モジュールの第3の特定例を示す説明図である。
【
図13】
図13は、遍在モジュールの第4の特定例を示す説明図である。
【
図14】
図14は、ソフトウェア地図画面の画面例を示す説明図である。
【
図15】
図15は、分析支援装置101の分析支援処理手順の一例を示すフローチャートである。
【
図16】
図16は、使用均等性算出処理の具体的処理手順の一例を示すフローチャートである。
【
図17】
図17は、遍在モジュール除去処理の具体的処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0010】
以下に図面を参照して、本発明にかかる分析支援プログラム、分析支援方法、分析支援装置および分析支援システムの実施の形態を詳細に説明する。
【0011】
(実施の形態)
図1は、実施の形態にかかる分析支援方法の一実施例を示す説明図である。
図1において、分析支援装置101は、ソフトウェアSWの分析を支援するコンピュータである。ソフトウェアSWは、分析対象となるコンピュータプログラムであり、コンピュータを動作させる命令、手順などを記述したものである。
【0012】
ソフトウェアSWは、複数の構成要素を含む。構成要素は、例えば、コンポーネント、モジュール、ソースコード、クラス、関数、データベース、ファイルなどの管理上適当な単位である。以下の説明では、コンポーネント、モジュール、ソースコード、クラス、関数などを総称して「プログラム」と表記する場合がある。
【0013】
ソフトウェアSWの理解を支援する技術として、ソフトウェアSWを小規模な部分集合(いわゆる、クラスタ)に分割する技術がある。具体的には、例えば、ソフトウェアSWに含まれるプログラム同士の依存関係に基づくクラスタリングを行って、互いに関係し合っているプログラムのかたまりをクラスタとして分割するものがある。
【0014】
プログラム間の依存関係は、例えば、コンポーネント、モジュール、ソースコード、クラス、関数などの呼び出し関係、継承関係、包含関係や、データアクセス関係などの関係である。なお、ソフトウェアSWを構成するプログラム群(エンティティ群)を複数のクラスタに分割する技術については、例えば、特許文献1(特開2013-148987号公報)を参照することができる。
【0015】
特許文献1で得られる各クラスタは、ソフトウェアSWの機能を実装しているプログラム群であることが期待される。機能とは、外部からのトリガ(例えば、利用者の操作入力)によって引き起こされるソフトウェアシステムの振る舞いである。例えば、業務システムにおいては、「見積を回答する」、「発注を送信する」、「契約情報を検索する」などが挙げられる。
【0016】
また、クラスタリングによる分割結果を可視化することにより、ソフトウェアSWの構成の理解に役立てることができることが知られている。例えば、ソフトウェアクラスタリングの結果を、都市の地図を模した形式として平面上に自動的に配置し可視化する技術がある(例えば、下記非特許文献1参照)。これにより、ソフトウェアSWの構成の実態を依存関係の面から明らかにして、機能がどう構成されているかということや、保守性の良し悪しなどの分析を支援することができる。
【0017】
非特許文献1:Kobayashi et al.,“SArF Map:Visualizing Software Architecture from Feature and Layer Viewpoints,”in 2013 21st International Conference on Program Comprehension (ICPC),2013,pp.430-52.
【0018】
ここで、ソフトウェアクラスタリングの技術的な課題として、遍在モジュール(omnipresent module)が知られている。遍在モジュールは、例えば、ユーティリティクラスのように様々な機能から利用されるクラスであり、どのクラスタに所属させることも不適当なプログラムである。このようなプログラムが、クラスタリングの際に特段の関連性のないいずれかのクラスタに分類されることになると、ノイズのように働いて分割結果の理解の妨げとなる。
【0019】
このため、クラスタリングに先立って遍在モジュールを除去する手順を設け、より良いクラスタリングが行えるようにするものが考えられる。除去する遍在モジュールは、人手でユーティリティクラスを特定したり、プログラムの依存関係から判断したりする。例えば、プログラム間の依存関係のグラフにおいて、ある節点(プログラム)への入次数が平均の3倍以上ならば、そのプログラムを遍在モジュールとみなす技術がある(例えば、下記非特許文献2参照)。
【0020】
非特許文献2:Mancoridis et al.,“Bunch:a clustering tool for the recovery and maintenance of software system structures,”in Software Maintenance,1999.(ICSM ’99) Proceedings.IEEE International Conference on,1999,pp.50-59.
【0021】
一方、遍在モジュールを除去する手順を設けなくとも、良いクラスタリング結果を得るための方式も開発されている。例えば、特許文献1は、クラスタリングに先立って各プログラムへの依存関係について本質度スコアという値を依存関係に基づき計算し、本質度スコアを依存関係、すなわち、グラフの辺の重みとして用いてクラスタリングする。
【0022】
本質度スコアは、多数のプログラムから使用されているほど小さくなり、逆にそのプログラムがただ一つプログラムから使用されているときには大きくなる。さらに、プログラムの中に複数のメンバを持つ構成、例えば、クラスの中に複数のメソッドを持つといった構成をとる言語の場合、クラスとメソッドというプログラム内の階層構造を考慮に入れ、メンバレベルの依存関係の解析によって、ある依存元クラスが当該クラスにとって特別かどうかが数値化される。
【0023】
なお、一般的なオブジェクト指向言語におけるクラスのメンバには、メソッドのほかに、フィールド(変数)がある。以下の説明において、「メソッド」と表記した場合、より一般的なメンバの概念を意味し、フィールドを含むものとしてもよい。
【0024】
例えば、ログ出力クラスのように、大多数のクラス(依存元クラス)から同じメソッド(X.use)を利用される、ユーティリティ的なクラスXがあるとする。一方で、依存元クラスの一部に、クラスXが持つ初期化などを行うメソッド(X.init)を利用するクラスAがあるとする。
【0025】
このようなケースの場合、特許文献1では、初期化を行う唯一のクラスAは、ただ単に機能を利用するだけの大多数のクラスとは別の役割を果たしているとみなして特別扱いされ、重みが強く計算されて一緒のクラスタに入りやすくなる。すなわち、特許文献1では、メソッドレベルで見ても満遍なく均等に使われているクラスに対してはうまく機能せず、依然として必然性の低いクラスタにたまたま所属させられてしまう。このため、非特許文献1のような可視化方式によってクラスタリング結果を可視化する際に、あるクラスがなぜそこに含まれているのかの理解が難しくなるという問題がある。
【0026】
そこで、本実施の形態では、プログラム間の依存関係に基づくクラスタリングにおいて、どのプログラムとも特別な関係を持たないようなプログラムを特定してクラスタリングから除外し、可視化においては、特定したプログラムを、クラスタリングしたプログラムと別途に出力できるようにする。
【0027】
ここで、「どのプログラムとも特別な関係を持たない」とは、メソッド単位で見ても均等に満遍なく使用されることを指す。どのプログラムとも特別な関係を持たないプログラムとしては、例えば、メッセージ文字列等の国際化リソースクラスや、定数定義クラス等が挙げられる。このようなプログラムは、特定の機能やプログラムとの結びつきが薄いため、どのクラスタに入れるのも不適当なものであり、クラスタリングから除外できるようにする。以下、分析支援装置101の処理例について説明する。
【0028】
(1)分析支援装置101は、ソフトウェアSW内のプログラム間の依存関係に基づいて、ソフトウェアSW内のプログラム集合のうち、ソフトウェアSW内の他のプログラムから均等に使用される度合いが高い所定のプログラムを特定する。ここで、ソフトウェアSW内の他のプログラムから均等に使用される度合いが高いプログラムとは、各所から満遍なく使われている度合いが高い、すなわち、どのプログラムとも特別な関係を持たないプログラムである。
【0029】
以下の説明では、ソフトウェアSW内の他のプログラムから均等に使用される度合いを「使用均等性」と表記する場合がある。
【0030】
例えば、あるプログラムが、他の多数のプログラムから使われており、かつ、それらの各々のプログラムから同じような使われ方をしているときに、使用均等性が高いとみなす。換言すれば、依存元のプログラムクラスにごく少数であっても、他とはっきり違う使い方をしているものがあるときには、使用均等性が低いとみなす。
【0031】
具体的には、例えば、分析支援装置101は、プログラム間のメンバレベルの依存関係から特定される、依存元のプログラムから依存先のプログラムへの依存関係に関する重みを取得する。ここで、プログラム間のメンバレベルの依存関係とは、あるプログラム内のメンバと、他のプログラム内のメンバとの依存関係である。メンバは、例えば、メソッドやフィールド(変数)である。
【0032】
プログラム間(依存元のプログラムから依存先のプログラムへの)の依存関係に関する重みは、例えば、依存元のプログラムが役割を果たすために依存先のプログラムとの依存関係がどれだけ本質的かを示す値に相当する。プログラム間の依存関係に関する重みは、例えば、依存先のプログラムが依存元のプログラム専用に使われているほど値が高くなる。プログラム間の依存関係に関する重みとしては、例えば、特許文献1に記載のクラス/メソッドの階層関係を用いた本質度スコアを用いることができる。
【0033】
分析支援装置101は、取得したプログラム間の依存関係に関する重みを参照して、プログラム間の依存関係に基づいて、ソフトウェアSW内のプログラムの使用均等性を定義する。すなわち、「同じような使われ方」の判断に、例えば、プログラム/メソッドの階層関係に基づくプログラム間の依存関係に関する重み(本質度スコア)を利用する。
【0034】
図1の例では、ソフトウェア110内のプログラム間の依存関係に基づいて、ソフトウェア110内のプログラム集合P1~P5のうち、使用均等性が高いプログラムP3が特定された場合を想定する。ソフトウェア110は、ソフトウェアSWの一例である。
【0035】
(2)分析支援装置101は、ソフトウェアSW内のプログラム集合のうち、特定した所定のプログラムを除く残余のプログラムを複数のクラスタに分割して、分割した結果を表示する際に、所定のプログラムを、分割した残余のプログラムと別途に出力する。
【0036】
ここで、複数のクラスタに分割するとは、プログラム間の依存関係に基づくクラスタリングを行って、互いに関係し合っているプログラムのかたまりをクラスタとして分割することである。また、別途に出力するとは、例えば、所定のプログラムを、分割した残余のプログラムとは別の領域や態様で出力することである。
【0037】
図1の例では、プログラム集合P1~P5のうち、特定されたプログラムP3を除く残余のプログラムP1,P2,P4,P5がクラスタC1,C2に分割された場合を想定する。クラスタC1には、プログラムP1,P4が含まれる。クラスタC2には、プログラムP2,P5が含まれる。
【0038】
この場合、分析支援装置101は、例えば、プログラムP1,P2,P4,P5をクラスタC1,C2に分割した結果を表示する際に、プログラムP3を、分割したプログラムP1,P2,P4,P5を配置する領域120とは別領域130に配置する。
図1中、P#を含む図形「□」は、プログラムP#を表すアイコンである。領域120および領域130は、例えば、同一画面内に表示してもよいし、領域120と領域130との対応関係を特定可能な状態で別画面に表示してもよい。
【0039】
なお、残余のプログラムを複数のクラスタに分割する処理は、例えば、分析支援装置101において実行されてもよく、また、分析支援装置101と接続された他のコンピュータが実行することにしてもよい。他のコンピュータで分割する処理を実行した場合は、分析支援装置101は、他のコンピュータから残余のプログラムを複数のクラスタに分割した結果を取得する。
【0040】
このように、分析支援装置101によれば、ソフトウェアクラスタリングの際に、どのクラスタにも所属させるのが不適当なプログラム(遍在モジュール)をあらかじめ除去した上でクラスタリングを実施することができる。このため、特定の機能に属さないクラスがノイズのように働いて分割結果の理解の妨げとなることを防ぐことができる。また、クラスタリングの結果を表示する際に、当該クラスタリングの結果とは別立てに、除去したプログラムを特定可能に可視化することができる。このため、どのプログラムが遍在モジュールとしてクラスタリングから除外されたのかを把握可能にして、ソフトウェア構造の理解を支援することができる。
【0041】
図1の例では、どのクラスタにも所属させるのが不適当なプログラムP3(遍在モジュール)をあらかじめ除去した上でクラスタリングを実施することができる。また、クラスタリングの結果を表示する際に、除去したプログラムP3を、クラスタリングしたプログラムP1,P2,P4,P5を配置する領域120とは別領域130に配置して可視化することができる。これにより、特定の機能に属さないクラスがノイズのように働いて分割結果の理解の妨げとなることを防ぎつつ、遍在モジュールとしてプログラムP3がクラスタリングから除外されたことを把握可能にして、ソフトウェア110の構造の理解を支援することができる。
【0042】
(分析支援システム200のシステム構成例)
つぎに、
図1に示した分析支援装置101を含む分析支援システム200のシステム構成例について説明する。分析支援システム200は、例えば、ソフトウェア資産の開発、維持管理を行うためのコンピュータシステムに適用される。
【0043】
図2は、分析支援システム200のシステム構成例を示す説明図である。
図2において、分析支援システム200は、分析支援装置101と、クライアント装置201と、を含む。分析支援システム200において、分析支援装置101およびクライアント装置201は、有線または無線のネットワーク210を介して接続される。ネットワーク210は、例えば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどである。
【0044】
ここで、分析支援装置101は、ソースコードDB(DataBase)220を有し、ソフトウェアSWの分析を支援する。分析支援装置101は、例えば、サーバである。ソースコードDB220は、分析対象となるソフトウェアSWのソースコードを記憶する。ソースコードDB220には、例えば、ソフトウェアSWのソースコードと対応付けて、後述の
図4に示すような依存関係グラフ情報400や、後述の
図5に示すような本質度情報500が記憶されていてもよい。
【0045】
クライアント装置201は、分析支援システム200のユーザが使用するコンピュータである。例えば、クライアント装置201は、PC(Personal Computer)、タブレットPCなどである。分析支援システム200のユーザは、例えば、ソフトウェアSWの開発者や分析者である。
【0046】
なお、ここでは、分析支援装置101とクライアント装置201とを別体に設けることにしたが、これに限らない。例えば、分析支援装置101は、クライアント装置201により実現されることにしてもよい。
【0047】
(分析支援装置101のハードウェア構成例)
つぎに、分析支援装置101のハードウェア構成例について説明する。
【0048】
図3は、分析支援装置101のハードウェア構成例を示すブロック図である。
図3において、分析支援装置101は、CPU(Central Processing Unit)301と、メモリ302と、ディスクドライブ303と、ディスク304と、通信I/F(Interface)305と、可搬型記録媒体I/F306と、可搬型記録媒体307と、を有する。また、各構成部は、バス300によってそれぞれ接続される。
【0049】
ここで、CPU301は、分析支援装置101の全体の制御を司る。CPU301は、複数のコアを有していてもよい。メモリ302は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMがOS(Operating System)のプログラムを記憶し、ROMがアプリケーションプログラムを記憶し、RAMがCPU301のワークエリアとして使用される。メモリ302に記憶されるプログラムは、CPU301にロードされることで、コーディングされている処理をCPU301に実行させる。
【0050】
ディスクドライブ303は、CPU301の制御に従ってディスク304に対するデータのリード/ライトを制御する。ディスク304は、ディスクドライブ303の制御で書き込まれたデータを記憶する。ディスク304としては、例えば、磁気ディスク、光ディスクなどが挙げられる。
【0051】
通信I/F305は、通信回線を通じてネットワーク210に接続され、ネットワーク210を介して外部のコンピュータ(例えば、
図2に示したクライアント装置201)に接続される。そして、通信I/F305は、ネットワーク210と装置内部とのインターフェースを司り、外部のコンピュータからのデータの入出力を制御する。通信I/F305には、例えば、モデムやLANアダプタなどを採用することができる。
【0052】
可搬型記録媒体I/F306は、CPU301の制御に従って可搬型記録媒体307に対するデータのリード/ライトを制御する。可搬型記録媒体307は、可搬型記録媒体I/F306の制御で書き込まれたデータを記憶する。可搬型記録媒体307としては、例えば、CD(Compact Disc)-ROM、DVD(Digital Versatile Disk)、USB(Universal Serial Bus)メモリなどが挙げられる。
【0053】
なお、分析支援装置101は、上述した構成部のほかに、例えば、SSD(Solid State Drive)、入力装置、ディスプレイ等を有することにしてもよい。また、分析支援装置101は、上述した構成部のうち、例えば、ディスクドライブ303、ディスク304、可搬型記録媒体I/F306、可搬型記録媒体307を有していなくてもよい。また、
図2に示したクライアント装置201についても、分析支援装置101と同様のハードウェア構成により実現することができる。ただし、クライアント装置201は、上述した構成部のほかに、例えば、入力装置、ディスプレイを有する。
【0054】
(依存関係グラフ情報の具体例)
つぎに、分析支援装置101が用いる依存関係グラフ情報について説明する。依存関係グラフ情報は、ソフトウェアSWに含まれるプログラム間の依存関係を示す情報である。ここでは、ソフトウェアSWに含まれるプログラムとして、「クラス」を例に挙げて説明する。
【0055】
図4は、依存関係グラフ情報の具体例を示す説明図である。
図4において、依存関係グラフ情報400は、依存元クラス名と依存先クラス名とを対応付けて表す依存関係情報(例えば、依存関係情報400-1~400-8)を含む。
【0056】
ここで、依存元クラス名は、依存元のクラスの名称である。依存先クラス名は、依存先のクラスの名称である。ただし、
図4では、ソフトウェアSWに含まれるクラス間(プログラム間)の依存関係の一部を抜粋して表示している。
【0057】
例えば、依存関係情報400-1は、依存元クラス名「BusinessProcessFrame」のクラスから、依存先クラス名「ProcessViewerResource」のクラスへの依存関係を示す。
【0058】
(本質度情報の具体例)
つぎに、分析支援装置101が用いる本質度情報について説明する。本質度情報は、ソフトウェアSWに含まれるプログラム間の依存関係に関する本質度を示す情報である。ここでは、
図4に示した依存関係グラフ情報400に対応する本質度情報を例に挙げて説明する。
【0059】
図5は、本質度情報の具体例を示す説明図である。
図5において、本質度情報500は、依存元クラス名と依存先クラス名と本質度とを対応付けて表す本質度スコア情報(例えば、本質度スコア情報500-1~500-8)を含む。
【0060】
ここで、依存元クラス名は、依存元のクラスの名称である。依存先クラス名は、依存先のクラスの名称である。本質度は、依存元のクラスから依存先のクラスへの依存関係に関する本質度スコア(重み)であり、依存元のクラスが役割を果たすために依存先のクラスとの依存関係がどれだけ本質的かを示す。
【0061】
例えば、本質度スコア情報500-1は、依存元クラス名「BusinessProcessFrame」のクラスから、依存先クラス名「ProcessViewerResource」のクラスへの依存関係に関する本質度「0.016」を示す。
【0062】
(分析支援装置101の機能的構成例)
図6は、分析支援装置101の機能的構成例を示すブロック図である。
図6において、分析支援装置101は、取得部601と、特定部602と、分割部603と、表示制御部604と、を含む。具体的には、例えば、取得部601~表示制御部604は、
図3に示したメモリ302、ディスク304、可搬型記録媒体307などの記憶装置に記憶されたプログラムをCPU301に実行させることにより、または、通信I/F305により、その機能を実現する。各機能部の処理結果は、例えば、メモリ302、ディスク304などの記憶装置に記憶される。
【0063】
取得部601は、ソフトウェアSWの依存関係グラフ情報を取得する。ここで、依存関係グラフ情報は、ソフトウェアSW内のプログラム間の依存関係を示す情報であり、例えば、
図4に示した依存関係グラフ情報400である。具体的には、例えば、取得部601は、外部のコンピュータから受信することにより、または、不図示の入力装置を用いたユーザの操作入力により、依存関係グラフ情報400を取得する。
【0064】
ただし、ソフトウェアSWの依存関係グラフ情報は、分析支援装置101において生成されることにしてもよい。具体的には、例えば、分析支援装置101は、ソースコードDB220から、ソフトウェアSWのソースコードを取得する。つぎに、分析支援装置101は、ソフトウェアSWのソースコードを解析して、ソフトウェアSW内のプログラム間の依存関係を示す依存関係情報を生成する。
【0065】
より詳細に説明すると、例えば、分析支援装置101は、例えば、既存の構文解析技術および静的解析技術により、ソフトウェアSWのソースコードを解析し、ソフトウェアSW内のクラス間の依存関係を抽出する。これにより、分析支援装置101は、
図4に示したような依存関係グラフ情報400を生成することができる。
【0066】
また、取得部601は、ソフトウェアSWの本質度情報を取得する。ここで、本質度情報は、ソフトウェアSWに含まれるプログラム間の依存関係に関する本質度(重み)を示す情報であり、例えば、
図5に示した本質度情報500である。具体的には、例えば、取得部601は、外部のコンピュータから受信することにより、または、不図示の入力装置を用いたユーザの操作入力により、本質度情報500を取得する。
【0067】
ただし、ソフトウェアSWの本質度情報は、分析支援装置101において生成されることにしてもよい。具体的には、例えば、分析支援装置101は、ソフトウェアSWのソースコードを解析して、ソフトウェアSW内のクラス間のメソッドレベルの依存関係を示すメソッドレベル依存関係情報を生成する。
【0068】
そして、分析支援装置101は、例えば、下記式(1)を用いて、生成したメソッドレベル依存関係情報から特定されるクラス間のメソッドレベルの依存関係に基づいて、クラス間の依存関係に関する本質度(重み)を算出することができる。
【0069】
【0070】
ただし、上記式(1)において、E(A,B)は、クラスAからクラスBへの依存関係に関する本質度(重み)を示す。miは、クラスAから呼ばれるクラスBのメソッドである。xdin(mi)は、メソッドmiを呼び出す、別のクラスに属するメソッドの数である。iは、メソッドを識別する番号である。mx(B)は、あるクラスBに含まれる、別のクラスから呼ばれるメソッドの数である。クラスAに属するメソッドから呼び出されるクラスBに属するメソッドの集合MABを、MAB={m1,m2,…,mi,…,mn}で表す。nは集合の要素の数でn≧1である。クラスAに属するメソッドがクラスBに属するメソッドを呼び出さない場合にはE(A,B)=0とする。
【0071】
これにより、分析支援装置101は、
図5に示したような本質度情報500を生成することができる。なお、クラス/メソッドの階層関係を用いた本質度を算出する際のより具体的な処理内容については、例えば、特許文献1(特開2013-148987号公報)を参照することができる。
【0072】
特定部602は、ソフトウェアSW内のプログラム間の依存関係に基づいて、ソフトウェアSW内のプログラム集合のうち、使用均等性が高い所定のプログラムを特定する。ここで、使用均等性とは、ソフトウェアSW内の他のプログラムから均等に使用される度合いである。
【0073】
以下の説明では、ソフトウェアSW内のプログラム集合のうち使用均等性が高いプログラムを「遍在モジュール」と表記する場合がある。
【0074】
具体的には、例えば、特定部602は、取得されたソフトウェアSWの本質度情報を用いて、取得されたソフトウェアSWの依存関係グラフ情報に基づいて、ソフトウェアSW内のプログラムの使用均等性スコアを算出する。ここで、使用均等性スコアは、ソフトウェアSW内のプログラムが他のプログラムから均等に使用される度合いを示す指標値である。
【0075】
より詳細に説明すると、例えば、特定部602は、本質度情報500を参照して、ソフトウェアSW内の依存先のクラスのうち、依存元のいずれのクラスとの依存関係に関する本質度(重み)が閾値α未満となるクラスを抽出する。換言すれば、特定部602は、依存先のクラスへの依存関係を持つ全てのクラスの当該依存先のクラスへの本質度に閾値α以上のものが一つでもあれば、その依存先のクラスは遍在モジュールではないと判定する。閾値αは、任意に設定可能であり、例えば、0.15程度の値に設定される。
【0076】
つぎに、特定部602は、依存関係グラフ情報400に基づいて、抽出したクラスの使用均等性スコアを算出する。そして、特定部602は、算出した使用均等性スコアが閾値β以上の場合に、抽出したクラスを遍在モジュールとして特定する。閾値βは、任意に設定可能であり、例えば、0.85程度の値に設定される。
【0077】
使用均等性スコアは、例えば、下記式(2)を用いて算出することができる。ただし、eは、抽出されたクラス(クラスB)の使用均等性スコアである。din(B)は、クラス(クラスB)への依存関係を持つクラスの数である。あるクラスへの依存関係を持つクラスの数は、依存関係グラフ情報から特定される。
【0078】
e=1-1/din(B) ・・・(2)
【0079】
算出された使用均等性スコアは、例えば、
図7に示すような使用均等性テーブル700に記憶される。使用均等性テーブル700は、例えば、
図3に示したメモリ302、ディスク304などの記憶装置により実現される。ここで、使用均等性テーブル700の記憶内容について説明する。
【0080】
図7は、使用均等性テーブル700の記憶内容の一例を示す説明図である。
図7において、使用均等性テーブル700は、クラス名および使用均等性スコアのフィールドを有し、各フィールドに情報を設定することで、使用均等性情報(例えば、使用均等性情報700-1~700-3)をレコードとして記憶する。
【0081】
ここで、クラス名は、クラスの名称である。使用均等性スコアは、他のクラスから均等に使用される度合いを示す指標値である。例えば、使用均等性情報700-1は、クラス名「ProcessViewerResource」のクラスの使用均等性スコア「0.985」を示す。
【0082】
例えば、特定部602は、使用均等性テーブル700を参照して、抽出したクラスのうち使用均等性スコアが閾値β以上のクラスを、遍在モジュールとして特定する。これにより、各所から満遍なく使われているクラスを、遍在モジュールとして特定することができる。
【0083】
特定されたクラスは、例えば、
図8に示すような遍在モジュールテーブル800に記憶される。遍在モジュールテーブル800は、例えば、
図3に示したメモリ302、ディスク304などの記憶装置により実現される。ここで、遍在モジュールテーブル800の記憶内容について説明する。
【0084】
図8は、遍在モジュールテーブル800の記憶内容の一例を示す説明図である。
図8において、遍在モジュールテーブル800は、遍在モジュールとして特定されたクラスのクラス名を記憶する。遍在モジュールテーブル800によれば、ソフトウェアSW内のクラス集合のうち、使用均等性が高いクラスを特定することができる。
【0085】
なお、遍在モジュールテーブル800には、クラス名と対応付けて、当該クラス名の遍在モジュールの使用均等性スコアが記憶されていてもよい。
【0086】
図6の説明に戻り、分割部603は、ソフトウェアSW内のプログラム集合のうち、特定された所定のプログラムを除く残余のプログラムを複数のクラスタに分割する。具体的には、例えば、分割部603は、特定された所定のプログラムを除く残余のプログラム間の依存関係に基づいて、残余のプログラムを複数のクラスタに分割する。
【0087】
より詳細に説明すると、例えば、分割部603は、依存関係グラフ情報400をコピーして分割用依存関係グラフ情報を生成する。つぎに、分割部603は、遍在モジュールテーブル800を参照して、生成した分割用依存関係グラフ情報から、遍在モジュールと他のクラスとの間の依存関係を示す依存関係情報を削除する。
【0088】
ここで、
図9を用いて、分割用依存関係グラフ情報の具体例について説明する。ここでは、
図4に示した依存関係グラフ情報400に対応する分割用依存関係グラフ情報を例に挙げて説明する。
【0089】
図9は、分割用依存関係グラフ情報の具体例を示す説明図である。
図9において、分割用依存関係グラフ情報900は、依存元クラス名と依存先クラス名とを対応付けて表す依存関係情報(例えば、依存関係情報900-1~900-4)を含む。
【0090】
分割用依存関係グラフ情報900は、依存関係グラフ情報400から、遍在モジュールと他のクラスとの間の依存関係を示す依存関係情報(例えば、依存関係情報400-1~400-4)を削除したものに相当する。
【0091】
そして、分割部603は、削除後の分割用依存関係グラフ情報(例えば、分割用依存関係グラフ情報900)を用いて、クラスタリングを行う。この際、分割部603は、例えば、残余のクラス間の依存関係に関する重み(本質度)に基づいて、依存関係に関する重みの合計が当該合計の期待値よりも高くなるように、残余のクラスを複数のクラスタに分割することにしてもよい。
【0092】
クラス間の依存関係に関する重み(本質度)は、例えば、本質度情報500から特定される。なお、本質度を用いてクラスタリングする具体的な処理内容については、例えば、特許文献1(特開2013-148987号公報)を参照することができる。
【0093】
表示制御部604は、ソフトウェアSW内のプログラム集合のうち、特定された所定のプログラムを除く残余のプログラムを複数のクラスタに分割した結果を表示する際に、所定のプログラムを、分割した残余のプログラムと別途に出力する制御を行う。表示制御部604の出力形式としては、例えば、通信I/F305による他のコンピュータへの送信、不図示のディスプレイへの表示、不図示のプリンタへの印刷出力などがある。
【0094】
具体的には、例えば、表示制御部604は、特定された遍在モジュールを除く残余のクラスを複数のクラスタに分割した結果を表示する際に、特定された遍在モジュールを、分割した残余のクラスを配置する領域とは別領域に配置する。
【0095】
より詳細に説明すると、例えば、表示制御部604は、クライアント装置201からの要求に応じて、クラスタリング結果(分割結果)と、遍在モジュールテーブル800とを参照して、ソフトウェア地図画面の画面情報を生成する。ここで、ソフトウェア地図画面は、ソフトウェアクラスタリングの結果を、都市の地図を模した形式として平面上に配置して可視化したものである。そして、表示制御部604は、クライアント装置201に生成した画面情報を送信することにより、クライアント装置201にソフトウェア地図画面を表示する。ソフトウェア地図画面の画面例については、
図14を用いて後述する。
【0096】
なお、上記式(2)の例では、クラスの使用均等性スコアを算出するにあたり、当該クラスへの依存関係を持つクラスの数のみを考慮することにしたが、これに限らない。例えば、あるクラスへの入りの依存関係が「20」あり、閾値αを「0.2」とする。この場合に、20個の本質度のうち、一つだけ「0.19」の値があり、残りの19個が「0.001」のような小さい値ばかりであれば、メソッドの使用に偏りがあるといえる。
【0097】
したがって、このような場合に使用均等性が高いとみなすのは不適当といえる。これは、特定のいくつかのクラスからのみよく使われるようなメソッドがあるときに起こりやすい。そこで、特定部602は、依存先のプログラムへの依存関係を有する依存元のプログラム同士での当該依存関係に関する重み(本質度)の差をさらに用いて、使用均等性スコアを算出することにしてもよい。例えば、特定部602は、クラスの使用均等性スコアを算出するにあたり、当該クラスへの依存関係を持つクラス間で本質度の幅が大きくなるにつれて、使用均等性が低くなるようにしてもよい。
【0098】
具体的には、例えば、特定部602は、下記式(3)を用いて、抽出したクラスの使用均等性スコアを算出することにしてもよい。ただし、eは、抽出されたクラス(クラスB)の使用均等性スコアである。din(B)は、クラス(クラスB)への依存関係を持つクラスの数である。maxEは、クラス(クラスB)への入りの依存関係の本質度の最大値である。minEは、クラス(クラスB)への入りの依存関係の本質度の最小値である。γは、効果を調整するための係数である。γは、「1」としてもよい。
【0099】
e={1-1/din(B)}×γ{1-(maxE-minE)}・・・(3)
【0100】
また、上記式(3)において、本質度の最大値と最小値の幅を示している項(maxE-minE)は、本質度に関する分散や標準偏差などに基づく値に置き換えて、本質度の幅を使用均等性に反映させることにしてもよい。
【0101】
なお、分析支援装置101の各機能部は、分析支援システム200内の複数のコンピュータ(例えば、分析支援装置101とクライアント装置201)により実現されることにしてもよい。例えば、分析支援装置101の各機能部のうち、表示制御部604をクライアント装置201により実現することにしてもよい。この場合、表示制御部604は、例えば、分析支援装置101からクラスタリング結果(分割結果)と、遍在モジュールテーブル800とを取得して、ソフトウェア地図画面を表示することができる。
【0102】
(遍在モジュールの特定例)
つぎに、
図10~
図13を用いて、遍在モジュールの特定例について説明する。ここでは、分析対象となるソフトウェアSWを、オブジェクト指向言語で開発された業務プロセス分析ツールとする。
図10~
図13では、ソフトウェアSWの依存関係グラフの一部を示しながら、遍在モジュールの特定例について説明する。
【0103】
図10は、遍在モジュールの第1の特定例を示す説明図である。
図10において、クラス1001~1067は、依存先のクラス1068への依存関係を持つ依存元のクラス(67クラス)である。以下、依存先のクラス1068が遍在モジュールであるか否かを判定する。ただし、閾値αを「α=0.15」とし、閾値βを「0.85」とする。
【0104】
ここで、依存元である各クラス1001~1067から依存先のクラス1068への依存関係に関する本質度は、クラス間をつなぐ矢印に付した数字であり、
図10中、左から右に降順となっている場合を想定する。すなわち、依存元のクラス1001から依存先のクラス1068への依存関係に関する本質度「0.016」が、最も大きい値である。
【0105】
この場合、特定部602は、依存先のクラス1068について、依存元であるクラス1001~1067との依存関係に関する本質度の全てが閾値α未満のため、依存先のクラス1068の使用均等性スコアを算出する。ここでは、上記式(2)を用いて、依存先のクラス1068の使用均等性スコアを算出する場合を想定する。
【0106】
この場合、依存先のクラス1068の使用均等性スコアeは、「e=0.985(=1-1/67)」となる。この使用均等性スコアeは、閾値βより大きい。したがって、特定部602は、依存先のクラス1068を遍在モジュールとして特定する。この結果、依存先のクラス1068は、遍在モジュールとみなされてクラスタリングから除外される。クラス1068は、国際化文字列リソースを提供するクラスであり、システム上の特定の機能に属さないため、妥当な結果であるといえる。
【0107】
つぎに、遍在モジュールの第2の特定例について説明する。
【0108】
図11は、遍在モジュールの第2の特定例を示す説明図である。
図11において、クラス1101~1182は、依存先のクラス1183への依存関係を持つ依存元のクラス(82クラス)である。以下、依存先のクラス1183が遍在モジュールであるか否かを判定する。ただし、閾値αを「α=0.15」とし、閾値βを「0.85」とする。
【0109】
まず、非特許文献2の方式のように、クラス間の依存関係のグラフにおいて、ある節点(クラス)への入次数が平均の3倍以上ならば、そのクラスを遍在モジュールとみなす場合を想定する。ただし、分析対象となるソフトウェアSWにおいて、入次数の平均の3倍を「12」とする。
【0110】
この場合、依存先のクラス1183への入次数が「82」であり、平均の3倍以上のため、依存先のクラス1183は、遍在モジュールとみなされる。しかし、実際は、依存先のクラス1183は、システムで重要な役割を果たすモデルクラスであり、ユーティリティクラスではないため、不適当な結果である。
【0111】
一方、本実施の形態では、特定部602は、依存先のクラス1183について、依存元であるクラス1101との依存関係に関する本質度「0.160」が閾値α以上のため、依存先のクラス1183は遍在モジュールではないと判定する。すなわち、従来技術では不当に遍在モジュールと判定されてクラスタリングから除去されるのに対して、本実施の形態では除去を免れることができる。
【0112】
つぎに、遍在モジュールの第3の特定例について説明する。
【0113】
図12は、遍在モジュールの第3の特定例を示す説明図である。
図12において、クラス1201~1211は、依存先のクラス1212への依存関係を持つ依存元のクラス(11クラス)である。以下、依存先のクラス1212が遍在モジュールであるか否かを判定する。ただし、閾値αを「α=0.15」とし、閾値βを「0.85」とする。
【0114】
まず、非特許文献2の方式のように、クラス間の依存関係のグラフにおいて、ある節点(クラス)への入次数が平均の3倍以上ならば、そのクラスを遍在モジュールとみなす場合を想定する。この場合、依存先のクラス1212への入次数が「11」であり、平均の3倍未満のため、依存先のクラス1212は、遍在モジュールとみなされない。しかし、実際は、依存先のクラス1212は、入出力処理の記述を簡単にするためのユーティリティクラスであり、特定の業務機能に属さず、様々な業務機能から利用されているものであるため、不適当な結果である。
【0115】
一方、本実施の形態では、特定部602は、依存先のクラス1212について、依存元であるクラス1201~1211との依存関係に関する本質度の全てが閾値α未満のため、依存先のクラス1212の使用均等性スコアを算出する。ここでは、上記式(2)を用いて、依存先のクラス1212の使用均等性スコアを算出する場合を想定する。
【0116】
この場合、依存先のクラス1212の使用均等性スコアeは、「e=0.909(=1-1/11)」となる。この使用均等性スコアeは、閾値βより大きい。したがって、特定部602は、依存先のクラス1212を遍在モジュールとして特定する。この結果、依存先のクラス1212は、遍在モジュールとみなされてクラスタリングから除外される。すなわち、従来技術では遍在モジュールと判定されずにクラスタリングから除去できなかったユーティリティクラスを、本実施の形態では除去することができる。
【0117】
つぎに、遍在モジュールの第4の特定例について説明する。第4の特定例では、上記式(2)および上記式(3)をそれぞれ用いて算出した使用均等性スコアを比較して効果の違いを説明する。
【0118】
図13は、遍在モジュールの第4の特定例を示す説明図である。
図13において、クラス1301~1318は、依存先のクラス1319への依存関係を持つ依存元のクラス(18クラス)である。以下、依存先のクラス1319が遍在モジュールであるか否かを判定する。ただし、閾値αを「α=0.20」とし、閾値βを「0.90」とする。
【0119】
特定部602は、依存先のクラス1319について、依存元であるクラス1301~1318との依存関係に関する本質度の全てが閾値α未満のため、依存先のクラス1319の使用均等性スコアを算出する。ここでは、特定部602は、上記式(2)および上記式(3)をそれぞれ用いて、依存先のクラス1319の使用均等性スコアを算出する。
【0120】
まず、上記式(2)を用いた場合、依存先のクラス1319の使用均等性スコアeは、「e=0.94(=1-1/18)」となる。この使用均等性スコアeは、閾値βより大きい。したがって、特定部602は、依存先のクラス1319を遍在モジュールとして特定する。
【0121】
一方、上記式(3)を用いた場合、γを「γ=1」とすると、「maxE=0.19」、「minE=0.01」のため、依存先のクラス1319の使用均等性スコアeは、「e≒0.77(=(1-1/18)×1×(1-(0.19-0.01)))」となる。この使用均等性スコアeは、閾値β以下である。したがって、特定部602は、依存先のクラス1319を遍在モジュールとして特定しない。
【0122】
図13の例では、依存元のクラス1301からの依存関係の本質度が他のクラスより高い。すなわち、依存元のクラス1301は、他のクラスとは異なる関係にあり、依存先のクラス1319との結びつきが強いため、遍在モジュールとみなされないことが妥当であるといえる。このように、上記式(3)を用いて使用均等性スコアを算出することにより、上記式(2)を用いた場合に比べて、本質度に差があると使用均等性スコアが低くなり、遍在モジュールと判定されにくくなることがわかる。
【0123】
(ソフトウェア地図画面の画面例)
つぎに、
図14を用いて、クライアント装置201のディスプレイ(不図示)に表示されるソフトウェア地図画面の画面例について説明する。ソフトウェア地図画面は、例えば、クライアント装置201からの要求に応じて表示される。
【0124】
図14は、ソフトウェア地図画面の画面例を示す説明図である。
図14において、ソフトウェア地図画面1400は、第1の領域1410と、第2の領域1420とを含む。第1の領域1410には、ソフトウェアSW(遍在モジュールを除く)のクラスタリング結果に基づいて、各クラスタと、各クラスタに属するクラスとが配置されている。
【0125】
第1の領域1410において、色の付された小さな正方形がクラスを表し、それを囲む四角形がクラスタを表している。例えば、クラスタ1411に属するクラスとして、クラス1411-1,1411-2が表示されている。また、第2の領域1420には、クラスタリングから除外された遍在モジュール1421~1423が配置されている。
【0126】
ソフトウェア地図画面1400において、不図示の入力装置を用いたユーザの操作入力により、第1の領域1410内のクラスや第2の領域1420内の遍在モジュールを選択すると、選択されたクラスや遍在モジュールのクラス名などを確認することができる。
【0127】
ソフトウェア地図画面1400によれば、ユーザは、ソフトウェアSWの構成の実態を依存関係の面から明らかにして、機能がどう構成されているかということや、保守性の良し悪しなどの分析を行うことができる。また、クラスタリングの際にどのクラスタ(機能)にも所属させるのが不適当なクラス(遍在モジュール)が除外されている。このため、特定の機能に属さないクラスがノイズのように働いて分割結果の理解の妨げとなることを防ぐことができる。また、クラスタリングから除外したクラスをクラスタリング結果とは別途に出力することで、ユーザは、どのクラスが遍在モジュールとしてクラスタリングから除外されたのかを把握することができる。
【0128】
(分析支援装置101の分析支援処理手順)
つぎに、
図15を用いて、分析支援装置101の分析支援処理手順について説明する。ここでは、ソフトウェアSW内のプログラムとして「クラス」を例に挙げて説明する。
【0129】
図15は、分析支援装置101の分析支援処理手順の一例を示すフローチャートである。
図15のフローチャートにおいて、まず、分析支援装置101は、ソフトウェアSWの依存関係グラフ情報を取得する(ステップS1501)。つぎに、分析支援装置101は、ソフトウェアSWの本質度情報を取得する(ステップS1502)。
【0130】
そして、分析支援装置101は、取得した本質度情報を用いて、取得した依存関係グラフ情報に基づいて、ソフトウェアSW内のプログラムの使用均等性スコアを算出する使用均等性算出処理を実行する(ステップS1503)。使用均等性算出処理の具体的な処理手順については、
図16を用いて後述する。
【0131】
つぎに、分析支援装置101は、算出された使用均等性スコアに基づいて、クラスタリング対象から遍在モジュールを除去する遍在モジュール除去処理を実行する(ステップS1504)。遍在モジュール除去処理の具体的な処理手順については、
図17を用いて後述する。
【0132】
つぎに、分析支援装置101は、ステップS1504において生成された分割用依存関係グラフ情報に基づいて、ソフトウェアSW内のクラス集合のうち遍在モジュールを除去した残余のクラスを複数のクラスタに分割する(ステップS1505)。
【0133】
そして、分析支援装置101は、クラスタリング結果と、ステップS1504において生成された遍在モジュールテーブル800とを参照して、ソフトウェア地図画面を表示して(ステップS1506)、本フローチャートによる一連の処理を終了する。
【0134】
これにより、ソフトウェアSW内のクラス集合のうち使用均等性が高いクラスがクラスタリングされるのを回避するとともに、ソフトウェアSW内のいずれのクラスがクラスタリングから除外されたのかを特定可能にすることができる。
【0135】
つぎに、
図16を用いて、
図15に示したステップS1503の使用均等性算出処理の具体的な処理手順について説明する。
【0136】
図16は、使用均等性算出処理の具体的処理手順の一例を示すフローチャートである。
図16のフローチャートにおいて、まず、分析支援装置101は、取得した依存関係グラフ情報を参照して、未処理の依存先クラスを選択する(ステップS1601)。そして、分析支援装置101は、依存関係グラフ情報を参照して、選択した依存先クラスの依存元クラスの集合を抽出する(ステップS1602)。
【0137】
つぎに、分析支援装置101は、抽出した依存元クラスの集合から未処理の依存元クラスを選択する(ステップS1603)。そして、分析支援装置101は、取得した本質度情報を参照して、選択した依存先クラスと、選択した依存元クラスとの組み合わせに対応する本質度を特定する(ステップS1604)。
【0138】
つぎに、分析支援装置101は、取得した本質度が閾値α以上であるか否かを判断する(ステップS1605)。ここで、本質度が閾値α以上の場合(ステップS1605:Yes)、分析支援装置101は、選択した依存先クラスの使用均等性スコアを「0」として(ステップS1606)、ステップS1609に移行する。
【0139】
一方、本質度が閾値α未満の場合(ステップS1605:No)、分析支援装置101は、抽出した依存元クラスの集合のうち未処理の依存元クラスがあるか否かを判断する(ステップS1607)。ここで、未処理の依存元クラスがある場合(ステップS1607:Yes)、分析支援装置101は、ステップS1603に戻る。
【0140】
一方、未処理の依存元クラスがない場合(ステップS1607:No)、分析支援装置101は、上記式(2)または上記式(3)を用いて、選択した依存先クラスの使用均等性スコアを算出する(ステップS1608)。そして、分析支援装置101は、依存先クラスの使用均等性スコアを、使用均等性テーブル700に記録する(ステップS1609)。
【0141】
つぎに、分析支援装置101は、取得した依存関係グラフ情報を参照して、未処理の依存先クラスがあるか否かを判断する(ステップS1610)。ここで、未処理の依存先クラスがある場合(ステップS1610:Yes)、分析支援装置101は、ステップS1601に戻る。
【0142】
一方、未処理の依存先クラスがない場合(ステップS1610:No)、分析支援装置101は、使用均等性算出処理を呼び出したステップに戻る。これにより、ソフトウェアSW内の依存先クラスについて、他のクラスから均等に使用される度合いを示す使用均等性スコアを算出することができる。
【0143】
つぎに、
図17を用いて、
図15に示したステップS1504の遍在モジュール除去処理の具体的な処理手順について説明する。
【0144】
図17は、遍在モジュール除去処理の具体的処理手順の一例を示すフローチャートである。
図17のフローチャートにおいて、まず、分析支援装置101は、取得した依存関係グラフ情報をコピーして分割用依存関係グラフ情報を生成する(ステップS1701)。つぎに、分析支援装置101は、使用均等性テーブル700から未処理のレコードを選択する(ステップS1702)。
【0145】
そして、分析支援装置101は、選択したレコードを参照して、使用均等性スコアが閾値β以上であるか否かを判断する(ステップS1703)。ここで、使用均等性スコアが閾値β未満の場合(ステップS1703:No)、分析支援装置101は、ステップS1706に移行する。
【0146】
一方、使用均等性スコアが閾値β以上の場合(ステップS1703:Yes)、分析支援装置101は、選択したレコードのクラス名を遍在モジュールテーブル800に記録する(ステップS1704)。そして、分析支援装置101は、遍在モジュールテーブル800に記録したクラス名を参照して、生成した分割用依存関係グラフ情報から、遍在モジュールと他のクラスとの間の依存関係を示す依存関係情報を削除する(ステップS1705)。
【0147】
つぎに、分析支援装置101は、使用均等性テーブル700を参照して、未処理のレコードがあるか否かを判断する(ステップS1706)。ここで、未処理のレコードがある場合(ステップS1706:Yes)、分析支援装置101は、ステップS1702に戻る。一方、未処理のレコードがない場合(ステップS1706:No)、分析支援装置101は、遍在モジュール除去処理を呼び出したステップに戻る。
【0148】
これにより、遍在モジュールと他のクラスとの間の依存関係を削除した分割用依存関係グラフ情報を生成することができる。
【0149】
以上説明したように、実施の形態にかかる分析支援装置101によれば、ソフトウェアSW内のプログラム間の依存関係に基づいて、ソフトウェアSW内のプログラム集合のうち使用均等性が高い所定のプログラム(遍在モジュール)を特定することができる。また、分析支援装置101によれば、プログラム集合のうち、特定した所定のプログラムを除く残余のプログラムを複数のクラスタに分割して、分割した結果を表示する際に、所定のプログラムを、分割した残余のプログラムと別途に出力することができる。具体的には、例えば、分析支援装置101は、特定した所定のプログラムを、分割した残余のプログラムを配置する領域とは別領域に配置することができる。
【0150】
これにより、ソフトウェアクラスタリングの際に、どのクラスタにも所属させるのが不適当なクラス(遍在モジュール)をあらかじめ除去した上でクラスタリングを実施することができる。このため、特定の機能に属さないクラスがノイズのように働いて分割結果の理解の妨げとなることを防ぐことができる。また、クラスタリングの結果を表示する際に、当該クラスタリングの結果とは別立てに、除去した遍在モジュールを特定可能に可視化することができる。このため、どのクラスが遍在モジュールとしてクラスタリングから除外されたのかを把握可能にして、ソフトウェア構造の理解を支援することができる。
【0151】
また、分析支援装置101によれば、ソフトウェアSW内のプログラム間のメンバレベルの依存関係から特定される、依存元のプログラムから依存先のプログラムへの依存関係に関する重み(本質度)を用いて、プログラム間の依存関係に基づいて、依存先のプログラムの使用均等性スコアを算出することができる。そして、分析支援装置101によれば、算出した使用均等性スコアに基づいて、所定のプログラムを特定することができる。
【0152】
これにより、メソッド単位で見ても各所から均等に満遍なく使用され、どのクラスとも特別な関係を持たないクラスを、遍在モジュールとして特定してクラスタリングから除外することができる。
【0153】
また、分析支援装置101によれば、ソフトウェアSW内の依存先のプログラムのうち依存元のいずれのプログラムとの依存関係に関する重み(本質度)が閾値α未満となる依存先のプログラムを抽出することができる。そして、分析支援装置101によれば、プログラム間の依存関係に基づいて、抽出した依存先のプログラムの使用均等性スコアを算出し、算出した使用均等性スコアが閾値β以上の場合に、抽出した依存先のプログラムを遍在モジュールとして特定することができる。
【0154】
これにより、ソフトウェアSW内の依存先のクラスの中から、本質度を用いて特定のクラスとの結びつきの強いクラスを除去した上で、入りの依存関係の数を用いて使用均等性の高さを評価することができる。例えば、あるクラスを利用しているクラス数が多くとも、メソッド呼出の種類に偏りが存在し、一様な使われ方をしているわけでないことが分かれば、他と異なる使い方をしているクラスとの関係を重要とみなして、適切なクラスタに所属させることが可能となる。
【0155】
また、分析支援装置101によれば、依存先のプログラムへの依存関係を有する依存元のプログラム同士での当該依存関係に関する重みの差をさらに用いて、依存先のプログラムの使用均等性スコアを算出することができる。
【0156】
これにより、クラス(依存先)への依存関係を持つクラス間で本質度の幅が大きくなるにつれて、当該クラスの使用均等性が低くなるように評価することができる。このため、例えば、メソッドの使用に偏りがあり、特定のクラスとの結びつきが強いにもかかわらず、遍在モジュールとして特定されるのを防ぐことができる。
【0157】
また、分析支援装置101によれば、ソフトウェアSW内のプログラム集合のうち、特定した所定のプログラムを除く残余のプログラム間の依存関係に基づいて、残余のプログラムを複数のクラスタに分割することができる。
【0158】
これにより、互いに関係し合っているクラス(プログラム)のかたまりをクラスタとして分割して、ソフトウェア構造を明らかにすることができる。
【0159】
これらのことから、実施の形態にかかる分析支援装置101および分析支援システム200によれば、ソフトウェア構造を可視化する際に、特定の機能に属さないクラスを、機能ごとのクラスタとは異なる領域に配置することで、ソフトウェア構造を理解しやすくさせることができる。
【0160】
なお、本実施の形態で説明した分析支援方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本分析支援プログラムは、ハードディスク、フレキシブルディスク、CD-ROM、DVD、USBメモリ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本分析支援プログラムは、インターネット等のネットワークを介して配布してもよい。
【0161】
また、本実施の形態で説明した分析支援装置101は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けICやFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。
【0162】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0163】
(付記1)ソフトウェア内のプログラム間の依存関係に基づいて、前記ソフトウェア内のプログラム集合のうち、前記ソフトウェア内の他のプログラムから均等に使用される度合いが高い所定のプログラムを特定し、
前記プログラム集合のうち、特定した前記所定のプログラムを除く残余のプログラムを複数のクラスタに分割して、分割した結果を表示する際に、前記所定のプログラムを、分割した前記残余のプログラムと別途に出力する、
処理をコンピュータに実行させることを特徴とする分析支援プログラム。
【0164】
(付記2)前記特定する処理は、
前記プログラム間のメンバレベルの依存関係から特定される、前記ソフトウェア内の依存元のプログラムから依存先のプログラムへの依存関係に関する重みを用いて、前記プログラム間の依存関係に基づいて、前記依存先のプログラムが他のプログラムから均等に使用される度合いを示す指標値を算出し、
算出した前記指標値に基づいて、前記所定のプログラムを特定する、ことを特徴とする付記1に記載の分析支援プログラム。
【0165】
(付記3)前記特定する処理は、
前記ソフトウェア内の依存先のプログラムのうち依存元のいずれのプログラムとの依存関係に関する重みが閾値未満となる依存先のプログラムを抽出し、
前記プログラム間の依存関係に基づいて、抽出した前記依存先のプログラムが他のプログラムから均等に使用される度合いを示す指標値を算出し、
算出した前記指標値が閾値以上の場合に、抽出した前記依存先のプログラムを前記所定のプログラムとして特定する、ことを特徴とする付記2に記載の分析支援プログラム。
【0166】
(付記4)前記算出する処理は、
前記依存先のプログラムへの依存関係を有する依存元のプログラム同士での当該依存関係に関する重みの差をさらに用いて、前記指標値を算出する、ことを特徴とする付記2または3に記載の分析支援プログラム。
【0167】
(付記5)前記出力する処理は、
前記所定のプログラムを、分割した前記残余のプログラムを配置する領域とは別領域に配置する、ことを特徴とする付記1~4のいずれか一つに記載の分析支援プログラム。
【0168】
(付記6)前記残余のプログラム間の依存関係に基づいて、前記残余のプログラムを複数のクラスタに分割する、処理を前記コンピュータに実行させることを特徴とする付記1~5のいずれか一つに記載の分析支援プログラム。
【0169】
(付記7)前記プログラム間のメンバレベルの依存関係は、前記ソフトウェア内の依存元のプログラム内のメソッドから依存先のプログラム内のメソッドへの依存関係である、ことを特徴とする付記2に記載の分析支援プログラム。
【0170】
(付記8)ソフトウェア内のプログラム間の依存関係に基づいて、前記ソフトウェア内のプログラム集合のうち、前記ソフトウェア内の他のプログラムから均等に使用される度合いが高い所定のプログラムを特定し、
前記プログラム集合のうち、特定した前記所定のプログラムを除く残余のプログラムを複数のクラスタに分割して、分割した結果を表示する際に、前記所定のプログラムを、分割した前記残余のプログラムと別途に出力する、
処理をコンピュータが実行することを特徴とする分析支援方法。
【0171】
(付記9)ソフトウェア内のプログラム間の依存関係に基づいて、前記ソフトウェア内のプログラム集合のうち、前記ソフトウェア内の他のプログラムから均等に使用される度合いが高い所定のプログラムを特定する特定部と、
前記プログラム集合のうち、前記特定部によって特定された前記所定のプログラムを除く残余のプログラムを複数のクラスタに分割する分割部と、
前記分割部によって分割された結果を表示する際に、前記所定のプログラムを、分割した前記残余のプログラムと別途に出力する表示制御部と、
を有することを特徴とする分析支援装置。
【0172】
(付記10)ソフトウェア内のプログラム間の依存関係に基づいて、前記ソフトウェア内のプログラム集合のうち、前記ソフトウェア内の他のプログラムから均等に使用される度合いが高い所定のプログラムを特定する特定部と、
前記プログラム集合のうち、前記特定部によって特定された前記所定のプログラムを除く残余のプログラムを複数のクラスタに分割する分割部と、
前記分割部によって分割された結果を表示する際に、前記所定のプログラムを、分割した前記残余のプログラムと別途に出力する表示制御部と、
を含むことを特徴とする分析支援システム。
【符号の説明】
【0173】
101 分析支援装置
110,SW ソフトウェア
120 領域
130 別領域
200 分析支援システム
201 クライアント装置
210 ネットワーク
220 ソースコードDB
300 バス
301 CPU
302 メモリ
303 ディスクドライブ
304 ディスク
305 通信I/F
306 可搬型記録媒体I/F
307 可搬型記録媒体
400 依存関係グラフ情報
500 本質度情報
601 取得部
602 特定部
603 分割部
604 表示制御部
700 使用均等性テーブル
800 遍在モジュールテーブル
900 分割用依存関係グラフ情報
1400 ソフトウェア地図画面
1410 第1の領域
1420 第2の領域