以下に図面を参照して、本発明にかかる分析支援方法、分析支援プログラム、および情報処理装置の実施の形態を詳細に説明する。
(実施の形態1)
図1は、実施の形態1にかかる分析支援システム100のシステム構成例を示す説明図である。図1において、分析支援システム100は、情報処理装置101と、クライアント装置102と、を含む。分析支援システム100において、情報処理装置101およびクライアント装置102は、有線または無線のネットワーク110を介して接続される。ネットワーク110は、例えば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどである。
ここで、情報処理装置101は、ソースコードDB(DataBase)120を有し、ソフトウェアSWの分析を支援するコンピュータである。情報処理装置101は、例えば、サーバである。ソースコードDB120は、ソフトウェアSWのソースコードを記憶する。
ソフトウェアSWは、分析対象となるコンピュータプログラムであり、コンピュータを動作させる命令、手順などを記述したものである。ソフトウェアSWは、複数の要素を含む。要素は、例えば、コンポーネント、モジュール、ソースコード、クラス、関数、データベース、ファイルなどである。
以下の説明では、コンポーネント、モジュール、ソースコード、クラス、関数などを総称して「プログラム」と表記する場合がある。
クライアント装置102は、分析支援システム100のユーザが使用するコンピュータである。分析支援システム100のユーザは、例えば、ソフトウェアSWの開発者や分析者である。クライアント装置102は、例えば、PC(Personal Computer)、タブレットPCなどである。
ここで、ソフトウェアSWの理解を支援する技術として、ソフトウェアSWを小規模な部分集合(いわゆる、クラスタ)に分割する技術がある。具体的には、例えば、ソフトウェアSWに含まれるプログラム同士の依存関係に基づくクラスタリングを行って、互いに関係し合っているプログラムのかたまりをクラスタとして分割するものがある。
なお、既存のクラスタリング技術については、例えば、特開2013−148987号公報を参照することができる。
一方、ソフトウェアSWにおいては、プログラムだけでなく、そこで使用されるデータも重要である。データとは、データベースやファイル等に記録される、業務上のデータ、プログラムの作業ファイルや生成物、動作に必要な設定情報などである。したがって、プログラム同士の関係だけでなく、プログラムとデータとの間の関係も分析することが、ソフトウェアSWの理解のために有用である。
このため、ソフトウェアSWに含まれるプログラムだけでなく、ソフトウェアSWにおいて用いられるデータも含めてクラスタリングを行うことが考えられる。しかし、クラスタリング技術は、各データがどのクラスタに所属しているかによって、そのデータがどの機能において使われているかを示すことはできても、そのデータの使われ方の特徴(性質)までは明らかにしない。
また、プログラムとデータの読み書き関係を表形式にまとめたものとして、CRUD表と呼ばれるものがある。CRUD表は、データベースのテーブルの読み書きの操作、すなわち、どのソースファイルがCreate、Read、Update、Deleteを行っているかを行列形式に表したものである。CRUD表を見ることで、データの使われ方の特徴(性質)を判断することが考えられる。
ところが、一口にデータといっても様々な特徴のものが存在する。例えば、商品や顧客等の情報を格納して随時参照されるマスターデータや、注文や請求といった業務の進行のたびに記録されるトランザクションデータがある。また、プログラムの動作を障害対処等のために記録するログデータ、プログラムの処理途中のデータを記録しておく一時ファイル、システムの動作に必要な情報を指定する設定ファイルなどがある。
こうしたデータの特徴は、CRUD表を見るだけでは見出しがたい。また、元々の設計意図ではなく、実態として現在どのように使われているかが問題である。長らくプログラムの修正や拡張が行われるうちに、実際のデータの使われ方と元々の設計意図との間に乖離が生じることがある。
例えば、マスターデータのはずなのについでにトランザクションデータを一部持たせてしまっている、あるいは、ある業務機能のためのデータとして設計したのに他の機能から参照されるようになっている場合がある。このような場合、設計当初に比べてデータ変更時の影響範囲が拡大して、システム保守上の困難の原因となることが起こり得る。
そこで、本実施の形態では、情報処理装置101は、ソフトウェアSW内のプログラムからデータへのアクセスを依存関係として用いて、プログラム同士の依存関係とともにクラスタリングを適用する。そして、情報処理装置101は、クラスタリングにより得られるクラスタ内のデータについて、クラスタ内外のプログラムからのアクセス状況から当該データの使われ方の特徴を解析する。
(情報処理装置101のハードウェア構成例)
図2は、情報処理装置101のハードウェア構成例を示すブロック図である。図2において、情報処理装置101は、CPU(Central Processing Unit)201と、メモリ202と、I/F(Interface)203と、ディスクドライブ204と、ディスク205と、を有する。また、各構成部は、バス200によってそれぞれ接続される。
ここで、CPU201は、情報処理装置101の全体の制御を司る。メモリ202は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMやROMが各種プログラムを記憶し、RAMがCPU201のワークエリアとして使用される。メモリ202に記憶されるプログラムは、CPU201にロードされることで、コーディングされている処理をCPU201に実行させる。
I/F203は、通信回線を通じてネットワーク110に接続され、ネットワーク110を介して外部のコンピュータ(例えば、図1に示したクライアント装置102)に接続される。そして、I/F203は、ネットワーク110と装置内部とのインターフェースを司り、外部のコンピュータからのデータの入出力を制御する。I/F203には、例えば、モデムやLANアダプタなどを採用することができる。
ディスクドライブ204は、CPU201の制御に従ってディスク205に対するデータのリード/ライトを制御する。ディスク205は、ディスクドライブ204の制御で書き込まれたデータを記憶する。ディスク205としては、例えば、磁気ディスク、光ディスクなどが挙げられる。
なお、情報処理装置101は、上述した構成部のほかに、例えば、SSD(Solid State Drive)、入力装置、ディスプレイ等を有することにしてもよい。また、図1に示したクライアント装置102についても、情報処理装置101と同様のハードウェア構成により実現することができる。ただし、クライアント装置102は、上述した構成部のほかに、例えば、入力装置、ディスプレイ等を有する。
(ソフトウェアSWのクラスタリング結果)
つぎに、実施の形態1において例題として用いるソフトウェアSWのクラスタリング結果について説明する。
図3は、ソフトウェアSWのクラスタリング結果の一例を地図形式で示す説明図(その1)である。図3において、プログラムp1〜p45を含むソフトウェアSWのクラスタリング結果が地図形式で示されている。図3中、各々の建物(p1〜p45,d1,d2)が1つのプログラムまたはデータを表し、複数の建物の入っている区画がクラスタを表す。建物の間にひかれている曲線は依存関係を表す。ただし、図3では、注目しているデータとプログラムとの間の依存関係のみを描画している。
ここでは、クラスタリングによって、ソフトウェアSW全体が5つのクラスタC1〜C5に分割されている。各クラスタC1〜C5は、9つのプログラムを含み、同じクラスタ内の全てのプログラム間に依存関係が存在する。また、クラスタ間をつなぐプログラム間で依存関係が存在するものもある。各クラスタC1〜C5は何らかの機能を実装するものと想定される。
クラスタC1〜C5のうちのクラスタC4は、2つのデータd1,d2を含む。データd1は、クラスタC4とは異なる他のクラスタ内のそれぞれ1つのプログラムから読み出され、かつ、同じクラスタC4内のあるプログラムから読み書きされている。一方、データd2は、同じクラスタC4内のプログラムp30から読み書き両方されているだけで、他のプログラムからのアクセスはない。
なお、データd1は、マスターデータを想定しており、これを読み書き両方しているクラスタC4内のプログラムp29は、マスターメンテナンス用のプログラムであることを想定している。また、データd2は、1つのプログラムが自分だけで用いる一時ファイルであることを想定している。
(依存関係情報の具体例)
つぎに、情報処理装置101が用いる依存関係情報について説明する。依存関係情報は、ソフトウェアSWのプログラム間の依存関係およびプログラム/データ間の依存関係を示す情報である。
図4は、依存関係情報の具体例を示す説明図である。図4において、依存関係情報400は、依存元と依存先と種別とを対応付けて示す情報である。ここで、依存元は、依存元のエンティティ(エンティティ名)を示す。エンティティは、ソフトウェアSW内のプログラム、または、当該プログラムからアクセスされるデータをまとめた総称である。依存先は、依存先のエンティティ(エンティティ名)を示す。
種別は、エンティティ間の依存関係の種別を示す。種別としては、例えば、「CALL」、「READ」、「CREATE」、「UPDATE」、「DELETE」などがある。種別「CALL」は、依存元のプログラムが依存先のプログラムを呼び出すという、プログラム間の依存関係を示す。
また、種別「READ」は、依存元のプログラムが依存先のデータを読み出すという、プログラム/データ間の依存関係を示す。種別「CREATE」は、依存元のプログラムが依存先のデータを生成するという、プログラム/データ間の依存関係を示す。種別「UPDATE」は、依存元のプログラムが依存先のデータを更新するという、プログラム/データ間の依存関係を示す。種別「DELETE」は、依存元のプログラムが依存先のデータを削除するという、プログラム/データ間の依存関係を示す。
(クラスタ情報の具体例)
つぎに、情報処理装置101が用いるクラスタ情報について説明する。クラスタ情報は、ソフトウェアSWのクラスタリング結果を示す情報である。
図5は、クラスタ情報の具体例を示す説明図である。図5において、クラスタ情報500は、エンティティ名とクラスタIDとを対応付けて示す情報である。ここで、エンティティ名は、エンティティ(プログラムまたはデータ)の名称である。クラスタIDは、クラスタを一意に識別する識別子である。
クラスタ情報500によれば、ソフトウェアSW内のプログラムおよび当該プログラムからアクセスされるデータを含む要素群を分割して得られた各クラスタに属するエンティティを特定することができる。なお、図3の例題は、クラスタ情報500が示すクラスタリング結果に対応する。
(情報処理装置101の機能的構成例)
図6は、実施の形態1にかかる情報処理装置101の機能的構成例を示すブロック図である。図6において、情報処理装置101は、取得部601と、分割部602と、第1の算出部603と、第2の算出部604と、出力部605と、を含む構成である。取得部601〜出力部605は制御部となる機能であり、具体的には、例えば、図2に示したメモリ202、ディスク205などの記憶装置に記憶されたプログラムをCPU201に実行させることにより、または、I/F203により、その機能を実現する。各機能部の処理結果は、例えば、メモリ202、ディスク205などの記憶装置に記憶される。
取得部601は、分析対象となるソフトウェアSWを取得する。具体的には、例えば、取得部601は、図1に示したネットワーク110を介して、外部のコンピュータ(例えば、図1に示したクライアント装置102)からソフトウェアSWのソースコードを取得することにしてもよい。
また、取得部601は、例えば、不図示の入力装置を用いたユーザの操作入力により、ソフトウェアSWのソースコードを取得することにしてもよい。取得されたソフトウェアSWは、例えば、図1に示したソースコードDB120に記憶される。なお、ソースコードDB120は、例えば、メモリ202、ディスク205などの記憶装置により実現される。
分割部602は、ソフトウェアSWをクラスタリングする。ここで、クラスタリングとは、例えば、ソフトウェアSWをグラフで表現し、当該グラフをクラスタに分割することである。クラスタは、ソフトウェアSWのグラフを部分グラフに分割したときの、部分グラフまたは部分グラフに属する要素の集合のことである。
具体的には、例えば、分割部602は、ソースコードDB120に記憶されたソフトウェアSWのソースコードを解析して、ソフトウェアSW内のプログラム間の依存関係およびプログラム/データ間の依存関係を示す依存関係情報を生成する。ここで、プログラム間の依存関係は、例えば、コンポーネント、モジュール、ソースコード、クラス、関数などの呼び出し関係、継承関係、包含関係などの関係である。また、プログラム/データ間の依存関係は、プログラムからデータへのアクセス(読み出し、書き込み)の関係である。
より詳細に説明すると、分割部602は、例えば、既存の構文解析技術および静的解析技術により、ソフトウェアSWのソースコードを解析し、ソフトウェアSW内のプログラム間の依存関係およびプログラム/データ間の依存関係を抽出する。これにより、例えば、図4に示したような依存関係情報400を生成することができる。
そして、分割部602は、生成した依存関係情報に基づいて、ソフトウェアSW内のプログラムおよび当該プログラムからアクセスされるデータを含む要素群を複数のクラスタに分割する。これにより、例えば、図5に示したようなクラスタ情報500が分割結果として出力される。
すなわち、分割部602は、プログラムとデータとの間の読み書きの依存関係を、プログラム間の依存関係と同様に考慮して、クラスタリングを行う。したがって、ここで得られるクラスタの単位は、開発者が設計したモジュールやパッケージ等のソフトウェア部品ではなく、プログラム間あるいはプログラムとデータとがどのように依存しているかの実態に即して発見されるものとなる。
以下の説明では、ソフトウェアSW内のプログラムおよび当該プログラムからアクセスされるデータを含む要素群を分割して得られる複数のクラスタを「クラスタC1〜Cn」と表記する場合がある(n:2以上の自然数)。また、クラスタC1〜Cnのうちの任意のクラスタを「クラスタCi」と表記する場合がある(i=1,2,…,n)。
第1の算出部603は、クラスタCi内のデータの基本指標を算出する。ここで、基本指標とは、クラスタCi内のデータが、クラスタCi内外のプログラムからどれだけ読み書きされているかを示す指標である。基本指標は、例えば、RO、WO、RIおよびWIの4種類の指標を含む。
RO(Read/Out)は、クラスタCi内のデータが、クラスタCi外のプログラムから読み出される回数を示す。WO(Write/Out)は、クラスタCi内のデータが、クラスタCi外のプログラムから書き込まれる回数を示す。RI(Read/In)は、クラスタCi内のデータが、クラスタCi内のプログラムから読み出される回数を示す。WI(Write/In)は、クラスタCi内のデータが、クラスタCi内のプログラムから書き込まれる回数を示す。なお、クラスタCi外のプログラムとは、クラスタCiとは異なる他のクラスタ内のプログラムである。
具体的には、例えば、第1の算出部603は、依存関係情報400を参照して、プログラム/データ間の依存関係の関連種別を特定する。プログラム/データ間の依存関係の関連種別は、「READ」または「WRITE」のいずれかである。関連種別「READ」は、プログラムがデータを読み出すという依存関係を示す。関連種別「WRITE」は、プログラムがデータを書き込むという依存関係を示す。
例えば、上述したエンティティ間の依存関係の種別「READ」は、関連種別「READ」に相当する。また、上述したエンティティ間の依存関係の種別「CREATE」、「UPDATE」および「DELETE」は、プログラムがデータを書き込むという依存関係をそれぞれ示しており、関連種別「WRITE」に相当する。
特定されたプログラム/データ間の依存関係の関連種別は、例えば、図7に示すような関連テーブル700に記憶される。ここで、関連テーブル700の記憶内容について説明する。なお、関連テーブル700は、例えば、メモリ202、ディスク205などの記憶装置により実現される。
図7は、関連テーブル700の記憶内容の一例を示す説明図である。図7において、関連テーブル700は、データ名、プログラム名および関連種別のフィールドを有し、各フィールドに情報を設定することで、関連情報(例えば、関連情報700−1〜700−3)をレコードとして記憶する。
ここで、データ名は、ソフトウェアSWで用いられるデータの名称である。プログラム名は、ソフトウェアSWに含まれるプログラムの名称である。関連種別は、プログラム/データ間の依存関係の種別を示す。関連種別「READ」は、プログラムがデータを読み出すという依存関係を示す。関連種別「WRITE」は、プログラムがデータを書き込むという依存関係を示す。
例えば、関連情報700−1は、プログラム名「pkg1.Cls1」のプログラムがデータ名「DATA」のデータを読み出すという依存関係を示す。
そして、第1の算出部603は、例えば、関連テーブル700を参照して、クラスタCi内のデータが、クラスタCi内外のプログラムからどれだけ読み書きされているかを計数することにより、基本指標(RO、WO、RI、WI)を算出する。
算出されたクラスタCi内のデータの基本指標(RO、WO、RI、WI)は、例えば、図8に示すような基本指標テーブル800に記憶される。ここで、基本指標テーブル800の記憶内容について説明する。なお、基本指標テーブル800は、例えば、メモリ202、ディスク205などの記憶装置により実現される。
図8は、基本指標テーブル800の記憶内容の一例を示す説明図(その1)である。図8において、基本指標テーブル800は、データ名、RO、WO、RIおよびWIのフィールドを有し、各フィールドに情報を設定することで、基本指標情報800−1,800−2をレコードとして記憶する。
基本指標情報800−1は、データ名「DATA」のデータのRO「4」、WO「0」、RI「1」およびWI「1」を示す。基本指標情報800−2は、データ名「DATA0」のデータのRO「0」、WO「0」、RI「1」およびWI「1」を示す。
図6の説明に戻り、第2の算出部604は、算出されたクラスタCi内のデータの基本指標に基づいて、当該データの特徴を表す指標値を算出する。具体的には、例えば、第2の算出部604は、図8に示した基本指標テーブル800を参照して、クラスタCi内のデータの応用指標を算出する。
ここで、応用指標は、クラスタCi内のデータの特徴を表す指標であり、分類指標と逸脱指標を含む。分類指標は、データの特徴・性質を分類するための指標である。分類指標は、例えば、グローバルデータパターン指標、内部専用パターン指標、マスターデータパターン指標、ログパターン指標を含む。
グローバルデータパターン指標は、プログラムにおけるグローバル変数のように、ソフトウェアSW全体から読み書きされるデータである度合いを示す指標である。グローバルデータパターン指標が高いと、ソフトウェアSWの様々な部分が当該データに依存していることを意味しており、データの形式や意味を変更する際の影響が大きいことになる。
例えば、第2の算出部604は、クラスタCi内のデータが、クラスタCi外のプログラムから読み出される回数(RO)と、クラスタCi外のプログラムから書き込まれる回数(WO)とに基づいて、グローバルデータパターン指標を算出する。
より具体的には、例えば、第2の算出部604は、下記式(1)を用いて、クラスタCi内のデータのグローバルデータパターン指標を算出することができる。ただし、Iaは、グローバルデータパターン指標である。ROは、クラスタCi内のデータが、クラスタCi外のプログラムから読み出される回数である。WOは、クラスタCi内のデータが、クラスタCi外のプログラムから書き込まれる回数である。
Ia=RO×WO ・・・(1)
内部専用パターン指標は、クラスタCi内のデータが、特定の機能に専用のデータである、すなわち、特定の機能に閉じて使用されるデータであることを示す指標である。データが特定の機能に専用であるときは、ソフトウェアSWの他の部分からの依存が存在しないので、データ形式の変更が他の部分に直接影響を及ぼさず、保守性が良好であるといえる。
内部専用パターン指標は、0または1の2値で表される。内部専用パターン指標「1」は、特定の機能に専用のデータであることを示す。内部専用パターン指標「0」は、特定の機能に専用のデータではないことを示す。
例えば、第2の算出部604は、クラスタCi内のデータが、クラスタCi外のプログラムから読み書きされていない場合は、内部専用パターン指標「1」を算出する。一方、第2の算出部604は、クラスタCi内のデータが、クラスタCi外のプログラムから読み出しまたは書き込みされている場合は、内部専用パターン指標「0」を算出する。
より具体的には、例えば、第2の算出部604は、下記式(2)および(3)を用いて、クラスタCi内のデータの内部専用パターン指標を算出することができる。ただし、Ibは、内部専用パターン指標である。条件1は、「WO=0」かつ「RO=0」である。条件2は、条件1以外である。
条件1のとき ⇒ Ib=1 ・・・(2)
条件2のとき ⇒ Ib=0 ・・・(3)
マスターデータパターン指標は、マスターデータのように、ソフトウェアSWの複数の機能から読み出され、特定のプログラムのみから書き込まれるデータである度合いを示す指標である。特定のプログラムは、例えば、1あるいは少数のマスターメンテナンス用のプログラムである。
すなわち、マスターデータパターン指標は、業務システムにおける商品マスタや顧客マスタのように、ソフトウェアSWの様々な機能から参照されるが、書き込むのはマスターメンテナンス用のプログラムのみであるような使われ方をしている場合に高くなる。
例えば、第2の算出部604は、クラスタCi内のデータが、クラスタCi外のプログラムから書き込まれていない場合は、クラスタCi外のプログラムから読み出される回数(RO)に基づいて、マスターデータパターン指標を算出する。また、第2の算出部604は、クラスタCi内のデータが、クラスタCi外のプログラムから読み書きされておらず、かつ、クラスタCi内のプログラムから書き込まれない場合には、クラスタCi内のプログラムから読み出される回数(Ri)に基づいて、マスターデータパターン指標を算出する。
より具体的には、例えば、第2の算出部604は、下記式(4)〜(6)を用いて、クラスタCi内のデータのマスターデータパターン指標を算出することができる。ただし、Icは、マスターデータパターン指標である。条件1は、「WO=0」かつ「RO>0」である。条件2は、「WO=0」かつ「RO=0」かつ「RI>0」かつ「WI=0」である。条件3は、条件1,2以外である。
条件1のとき ⇒ Ic=RO ・・・(4)
条件2のとき ⇒ Ic=RI ・・・(5)
条件3のとき ⇒ Ic=0 ・・・(6)
ログパターン指標は、ログデータのように、ソフトウェアSWの複数の機能から書き込まれるが、特定の機能のみから読み出される、あるいは、全く読み出されないデータである度合いを示す指標である。例えば、第2の算出部604は、クラスタCi内のデータが、クラスタCi内外のプログラムから読み出される回数(RI,RO)に対する、クラスタCi内外のプログラムから書き込まれる回数(WI,WO)の割合に基づいて、ログパターン指標を算出する。
より具体的には、例えば、第2の算出部604は、下記式(7)を用いて、クラスタCi内のデータのログパターン指標を算出することができる。ただし、Idは、ログパターン指標である。Wは、「WO+WI」である。Rは、「RO+RI」である。RIは、クラスタCi内のデータが、クラスタCi内のプログラムから読み出される回数である。WIは、クラスタCi内のデータが、クラスタCi内のプログラムから書き込まれる回数である。
Id=W/R ・・・(7)
ただし、「R=0」のときは「R=1」とする。
また、逸脱指標は、分類指標によって分類されるデータに近い特徴・性質を持つが、一部に例外的なアクセスを持つ場合に高くなる指標である。逸脱指標は、例えば、内部専用パターン逸脱指標およびマスターデータパターン逸脱指標を含む。
内部専用パターン逸脱指標は、特定の機能に専用のデータであることから逸脱している度合いを示す指標である。内部専用パターン逸脱指標は、特定の機能に専用のデータに近い特徴(性質)を持つが一部に例外的なアクセスが存在する、すなわち、アクセスの多くはクラスタCi内からであるが、クラスタCi外のプログラムからの少数のアクセスを持つような場合に高くなる。
例えば、第2の算出部604は、クラスタCi内のデータが、クラスタCi外のプログラムから読み書きされる回数に対する、クラスタCi内外のプログラムから読み書きされる回数の割合に基づいて、内部専用パターン逸脱指標を算出する。
より具体的には、例えば、第2の算出部604は、下記式(8)および(9)を用いて、クラスタCi内のデータの内部専用パターン逸脱指標を算出することができる。ただし、Ib’は、内部専用パターン逸脱指標である。条件1は、「WO=0」かつ「RO=0」である。条件2は、条件1以外である。
条件1のとき ⇒ Ib’=0 ・・・(8)
条件2のとき ⇒ Ib’=(RI+WI+RO+WO)/(RO+WO)…(9)
マスターデータパターン逸脱指標は、マスターデータのようなデータであることから逸脱している度合いを示す指標である。マスターデータパターン逸脱指標は、マスターデータに近い特徴を持つが一部に例外的なアクセスが存在する、すなわち、クラスタCi外のプログラムからの読み出しが多数あるが、クラスタCi外のプログラムからの書き込みも少数存在する場合に高くなる。
例えば、第2の算出部604は、クラスタCi内のデータが、クラスタCi外のプログラムから書き込まれる回数に対する、クラスタCi外のプログラムから読み書きされる回数の割合に基づいて、マスターデータパターン逸脱指標を算出する。
より具体的には、例えば、第2の算出部604は、下記式(10)および(11)を用いて、クラスタCi内のデータのマスターデータパターン逸脱指標を算出することができる。ただし、Ic’は、マスターデータパターン逸脱指標である。条件1は、「WO=0」である。条件2は、条件1以外である。
条件1のとき ⇒ Ic’=0 ・・・(10)
条件2のとき ⇒ Ic’=(RO+WO)/WO ・・・(11)
算出されたクラスタCi内のデータの応用指標(分類指標、逸脱指標)は、例えば、図9に示すような応用指標テーブル900に記憶される。ここで、応用指標テーブル900の記憶内容について説明する。なお、応用指標テーブル900は、例えば、メモリ202、ディスク205などの記憶装置により実現される。
図9は、応用指標テーブル900の記憶内容の一例を示す説明図(その1)である。図9において、応用指標テーブル900は、データ名、グローバルデータパターン指標、内部専用パターン指標、内部専用パターン逸脱指標、マスターデータパターン指標、マスターデータパターン逸脱指標およびログパターン指標のフィールドを有する。各フィールドに情報を設定することで、応用指標情報900−1,900−2がレコードとして記憶される。
応用指標情報900−1は、データ名「DATA」のデータのグローバルデータパターン指標「0」、内部専用パターン指標「0」、内部専用パターン逸脱指標「1.5」、マスターデータパターン指標「4」、マスターデータパターン逸脱指標「0」およびログパターン指標「0.2」を示す。
また、応用指標情報900−2は、データ名「DATA0」のデータのグローバルデータパターン指標「0」、内部専用パターン指標「1」、内部専用パターン逸脱指標「0」、マスターデータパターン指標「0」、マスターデータパターン逸脱指標「0」およびログパターン指標「1」を示す。
なお、応用指標情報900−1,900−2には、例えば、データ名「DATA」、「DATA0」の各データが、読み出し専用のデータであるか否かの情報や、書き込み専用のデータであるか否かの情報が含まれていてもよい。
出力部605は、クラスタCiのデータの識別情報と対応付けて、算出された当該データの特徴を表す指標値を出力する。データの識別情報は、例えば、データ名である。出力部605の出力形式としては、例えば、I/F203による外部のコンピュータへの送信、メモリ202、ディスク205などの記憶装置への記憶、不図示のディスプレイへの表示、不図示のプリンタへの印刷出力などがある。
具体的には、例えば、出力部605は、分析対象であるソフトウェアSWの識別情報と対応付けて、応用指標テーブル900内の応用指標情報900−1,900−2をクライアント装置102に送信することにしてもよい。この結果、クライアント装置102において、例えば、不図示のディスプレイに応用指標情報900−1,900−2が表示される。
これにより、ユーザ(例えば、ソフトウェアSWの開発者や分析者)は、ソフトウェアSWにおいて用いられる各データの応用指標(分類指標、逸脱指標)を参照して、各データがどのような使われ方をしているかを判断することができる。
例えば、応用指標情報900−1,900−2によれば、マスターデータパターン指標について、データ名「DATA」のデータが「4」、データ名「DATA0」のデータが「0」である。したがって、ユーザは、データ名「DATA」のデータのほうがデータ名「DATA0」のデータよりもマスターデータらしいこと、そしてデータ名「DATA0」のデータは全くマスターデータらしくないことがわかる。
また、内部専用パターン指標について、データ名「DATA」のデータが「0」、データ名「DATA0」のデータが「1」である。したがって、ユーザは、データ名「DATA」のデータは内部専用(特定の機能に専用)ではなく、データ名「DATA0」のデータは内部専用であることがわかる。
また、マスターデータパターン逸脱指標について、データ名「DATA」のデータが「0」、データ名「DATA0」のデータが「0」である。したがって、ユーザは、どちらのデータについても、「マスターデータらしいのに一部にふさわしくないアクセスが存在する」とは認められないことがわかる。
また、内部専用パターン逸脱指標について、データ名「DATA」のデータが「1.5」、データ名「DATA0」のデータが「0」である。データ名「DATA0」のデータは、上述したように内部専用であり逸脱したアクセスは存在しないので「0」という値は妥当である。一方、データ名「DATA」のデータは、クラスタ内外の両方からアクセスされているので「0」より高い値になっているが、クラスタ外からのアクセスが比較的多くクラスタ内からのアクセスが多いわけではない。このため、「内部専用なのに一部例外的なアクセスがある」わけではなく、比較的低い値にとどまっている。
これらのことから、応用指標情報900−1,900−2によれば、ユーザは、データ名「DATA」のデータがマスターデータらしいこと、データ名「DATA0」のデータが特定の機能に専用のデータらしいことを把握することができる。
(情報処理装置101の分析支援処理手順)
つぎに、図10〜図13を用いて、実施の形態1にかかる情報処理装置101の分析支援処理手順について説明する。
図10は、実施の形態1にかかる情報処理装置101の分析支援処理手順の一例を示すフローチャートである。図10のフローチャートにおいて、まず、情報処理装置101は、ソースコードDB120から分析対象となるソフトウェアSWのソースコードを読み込む(ステップS1001)。
つぎに、情報処理装置101は、ソフトウェアSWのソースコードを解析して、ソフトウェアSW内のプログラム間の依存関係およびプログラム/データ間の依存関係を抽出する(ステップS1002)。これにより、ソフトウェアSW内のプログラム間の依存関係およびプログラム/データ間の依存関係を示す依存関係情報が生成される。
そして、情報処理装置101は、抽出したプログラム間の依存関係およびプログラム/データ間の依存関係に基づいて、ソフトウェアSWをクラスタリングする(ステップS1003)。クラスタリングとは、ソフトウェアSW内のプログラムおよび当該プログラムからアクセスされるデータを含む要素群を複数のクラスタに分割して、クラスタ情報(例えば、クラスタ情報500)を分割結果として出力することである。
つぎに、情報処理装置101は、関連テーブル作成処理を実行する(ステップS1004)。関連テーブル作成処理は、例えば、図7に示したような関連テーブル700を作成する処理である。なお、関連テーブル作成処理の具体的な処理手順は、図11を用いて後述する。
つぎに、情報処理装置101は、ソフトウェアSWをクラスタリングした分割結果であるクラスタ情報から、未選択のデータ名を選択する(ステップS1005)。なお、各エンティティがプログラムまたはデータのいずれであるかは、例えば、クラスタ情報のエンティティ名から判別される。
つぎに、情報処理装置101は、選択したデータ名に対応する基本指標、応用指標(分類指標、逸脱指標)を初期化する(ステップS1006)。そして、情報処理装置101は、作成した関連テーブル700から、選択したデータ名に対応する関連情報の集合を抽出する(ステップS1007)。
つぎに、情報処理装置101は、抽出した関連情報の集合に基づいて、選択したデータ名のデータについての基本指標を算出する基本指標算出処理を実行する(ステップS1008)。基本指標算出処理の具体的な処理手順については、図12を用いて後述する。
つぎに、情報処理装置101は、算出した基本指標に基づいて、選択したデータ名のデータについての応用指標(分類指標、逸脱指標)を算出する応用指標算出処理を実行する(ステップS1009)。応用指標算出処理の具体的な処理手順については、図13を用いて後述する。
そして、情報処理装置101は、クラスタ情報から選択していない未選択のデータ名があるか否かを判断する(ステップS1010)。ここで、未選択のデータ名がある場合(ステップS1010:Yes)、情報処理装置101は、ステップS1005に戻る。
一方、未選択のデータ名がない場合(ステップS1010:No)、情報処理装置101は、算出した各データについての応用指標(分類指標、逸脱指標)を出力して(ステップS1011)、本フローチャートによる一連の処理を終了する。
これにより、例えば、ソフトウェアSWの開発者や分析者に対して、ソフトウェアSWにおいて用いられる各データがどのような使われ方をしているのかの実態を把握可能な応用指標(分類指標、逸脱指標)を提示することができる。
<関連テーブル作成処理の具体的処理手順>
つぎに、図10に示したステップS1004の関連テーブル作成処理の具体的な処理手順について説明する。
図11は、関連テーブル作成処理の具体的処理手順の一例を示すフローチャートである。図11のフローチャートにおいて、まず、情報処理装置101は、依存関係情報を参照して、ソフトウェアSW内のプログラム間の依存関係およびプログラム/データ間の依存関係のうちの未選択の依存関係を選択する(ステップS1101)。
つぎに、情報処理装置101は、選択した依存関係が、プログラムからデータへのアクセスを示す依存関係であるか否かを判断する(ステップS1102)。ここで、プログラムからデータへのアクセスを示す依存関係ではない場合(ステップS1102:No)、情報処理装置101は、ステップS1106に移行する。
一方、プログラムからデータへのアクセスを示す依存関係である場合(ステップS1102:Yes)、情報処理装置101は、選択した依存関係の種別がCREATE,UPDATE,DELETEのいずれかであるか否かを判断する(ステップS1103)。
ここで、CREATE,UPDATE,DELETEのいずれでもない場合(ステップS1103:No)、情報処理装置101は、ステップS1105に移行する。一方、CREATE,UPDATE,DELETEのいずれかである場合(ステップS1103:Yes)、情報処理装置101は、選択した依存関係の種別をWRITEに置き換える(ステップS1104)。
そして、情報処理装置101は、選択した依存関係の依存元(プログラム名)、依存先(データ名)、種別(関連種別)を示す関連情報を関連テーブルに登録する(ステップS1105)。つぎに、情報処理装置101は、依存関係情報を参照して、未選択の依存関係があるか否かを判断する(ステップS1106)。
ここで、未選択の依存関係がある場合(ステップS1106:Yes)、情報処理装置101は、ステップS1101に戻る。一方、未選択の依存関係がない場合(ステップS1106:No)、情報処理装置101は、関連テーブル作成処理を呼び出したステップに戻る。
これにより、ソフトウェアSWのプログラム/データ間の依存関係の依存元のプログラム名、依存先のデータ名および関連種別(READまたはWRITE)を示す関連情報を関連テーブルに登録することができる。
<基本指標算出処理の具体的処理手順>
つぎに、図10に示したステップS1008の基本指標算出処理の具体的な処理手順について説明する。
図12は、基本指標算出処理の具体的処理手順の一例を示すフローチャートである。図12のフローチャートにおいて、まず、情報処理装置101は、図10に示したステップS1007において抽出した関連情報の集合から未選択の関連情報を選択する(ステップS1201)。
そして、情報処理装置101は、クラスタ情報を参照して、選択した関連情報が示すデータとプログラムとが同一クラスタに属しているか否かを判断する(ステップS1202)。ここで、同一クラスタに属していない場合(ステップS1202:No)、情報処理装置101は、選択した関連情報の関連種別がREADであるか否かを判断する(ステップS1203)。
ここで、関連種別がREADである場合(ステップS1203:Yes)、情報処理装置101は、選択した関連情報のデータ名のデータについての基本指標ROをインクリメントして(ステップS1204)、ステップS1209に移行する。
一方、関連種別がWRITEである場合(ステップS1203:No)、情報処理装置101は、選択した関連情報のデータ名のデータについての基本指標WOをインクリメントして(ステップS1205)、ステップS1209に移行する。
また、ステップS1202において、同一クラスタに属している場合(ステップS1202:Yes)、情報処理装置101は、選択した関連情報の関連種別がREADであるか否かを判断する(ステップS1206)。
ここで、関連種別がREADである場合(ステップS1206:Yes)、情報処理装置101は、選択した関連情報のデータ名のデータについての基本指標RIをインクリメントして(ステップS1207)、ステップS1209に移行する。
一方、関連種別がWRITEである場合(ステップS1206:No)、情報処理装置101は、選択した関連情報のデータ名のデータについての基本指標WIをインクリメントする(ステップS1208)。そして、情報処理装置101は、関連情報の集合から選択されていない未選択の関連情報があるか否かを判断する(ステップS1209)。
ここで、未選択の関連情報がある場合(ステップS1209:Yes)、情報処理装置101は、ステップS1201に戻る。一方、未選択の関連情報がない場合(ステップS1209:No)、情報処理装置101は、基本指標算出処理を呼び出したステップに戻る。
これにより、ソフトウェアSWにおいて用いられる各データについての基本指標RO,WO,RI,WIを算出することができる。なお、算出された各データについての基本指標RO,WO,RI,WIは、例えば、図8に示したような基本指標テーブル800に記憶される。
<応用指標算出処理の具体的処理手順>
つぎに、図10に示したステップS1009の応用指標算出処理の具体的な処理手順について説明する。
図13は、応用指標算出処理の具体的処理手順の一例を示すフローチャートである。図13のフローチャートにおいて、まず、情報処理装置101は、基本指標テーブル800を参照して、図10に示したステップS1005において選択したデータ名のデータについてのグローバルデータパターン指標を算出する(ステップS1301)。
つぎに、情報処理装置101は、基本指標テーブル800を参照して、選択したデータ名のデータについての内部専用パターン指標を算出する(ステップS1302)。つぎに、情報処理装置101は、基本指標テーブル800を参照して、選択したデータ名のデータについてのマスターデータパターン指標を算出する(ステップS1303)。
つぎに、情報処理装置101は、基本指標テーブル800を参照して、選択したデータ名のデータについてのログパターン指標を算出する(ステップS1304)。つぎに、情報処理装置101は、基本指標テーブル800を参照して、選択したデータ名のデータについての内部専用パターン逸脱指標を算出する(ステップS1305)。
そして、情報処理装置101は、基本指標テーブル800を参照して、選択したデータ名のデータについてのマスターデータパターン逸脱指標を算出して(ステップS1306)、応用指標算出処理を呼び出したステップに戻る。
これにより、ソフトウェアSWにおいて用いられる各データについての応用指標(分類指標、逸脱指標)を算出することができる。なお、算出された各データについての応用指標(分類指標、逸脱指標)は、例えば、図9に示したような応用指標テーブル900に記憶される。
以上説明したように、実施の形態1にかかる情報処理装置101によれば、ソフトウェアSW内のプログラム間の依存関係およびプログラム/データ間の依存関係に基づいて、ソフトウェアSW内のプログラムおよび当該プログラムからアクセスされるデータを含む要素群をクラスタC1〜Cnに分割することができる。分割したクラスタC1〜CnのいずれかのクラスタCi内のデータが、クラスタCi内のプログラムからアクセスされる回数(基本指標RI,WI)と、クラスタCi外のプログラムからアクセスされる回数(基本指標RO,WO)とに基づいて、当該データの特徴を表す指標値(応用指標)を算出することができる。
これにより、ソフトウェアSWにおいて用いられる各データがどのような使われ方をしているのかの実態を把握可能な応用指標(分類指標、逸脱指標)を求めることができる。
また、情報処理装置101によれば、クラスタCi内のデータの識別情報と対応付けて、算出した当該データの特徴を表す指標値を出力することができる。これにより、ソフトウェアSWの開発者や分析者等に対して、ソフトウェアSWにおいて用いられる各データがどのような使われ方をしているのかの実態を把握可能な応用指標(分類指標、逸脱指標)を提示することができる。
また、情報処理装置101によれば、クラスタCi内のデータが、クラスタCi外のプログラムから読み出される回数(RO)と、クラスタCi外のプログラムから書き込まれる回数(WO)とに基づいて、グローバルデータパターン指標を算出することができる。
これにより、プログラムにおけるグローバル変数のように、ソフトウェアSW全体から読み書きされるデータである度合いを示す指標を求めることができる。したがって、ユーザは、グローバルデータパターン指標が高いデータについて、ソフトウェアSWの様々な部分が当該データに依存しており、データの形式や意味を変更する際の影響が大きいことを把握することができる。
また、情報処理装置101によれば、クラスタCi内のデータが、クラスタCi外のプログラムから読み書きされていない場合は、特定の機能に専用のデータであることを示す内部専用パターン指標「1」を算出することができる。
これにより、クラスタCi内のデータが、特定の機能に専用のデータである、すなわち、特定の機能に閉じて使用されるデータであることを示す指標を求めることができる。したがって、ユーザは、内部専用パターン指標が「1」のデータについて、ソフトウェアSWの他の部分からの依存が存在しないため、データ形式の変更が他の部分に直接影響を及ぼさず、保守性が良好であることを把握することができる。
また、情報処理装置101によれば、クラスタCi内のデータが、クラスタCi外のプログラムから書き込まれていない場合は、クラスタCi外のプログラムから読み出される回数(RO)に基づいて、マスターデータパターン指標を算出することができる。また、情報処理装置101によれば、クラスタCi内のデータが、クラスタCi外のプログラムから読み書きされておらず、かつ、クラスタCi内のプログラムから書き込まれない場合には、クラスタCi内のプログラムから読み出される回数(RI)に基づいて、マスターデータパターン指標を算出することができる。
これにより、マスターデータのように、ソフトウェアSWの複数の機能から読み出され、特定のプログラムのみから書き込まれるデータである度合いを示す指標を求めることができる。したがって、ユーザは、マスターデータパターン指標が高いデータについて、ソフトウェアSWの様々な機能から参照されるが、書き込むのは1つあるいは少数のマスターメンテナンス用のプログラムであるような使われ方をしていることを把握することができる。
また、情報処理装置101によれば、クラスタCi内のデータが、クラスタCi内外のプログラムから読み出される回数(RI,RO)に対する、クラスタCi内外のプログラムから書き込まれる回数(WI,WO)の割合に基づいて、ログパターン指標を算出することができる。
これにより、ログデータのように、ソフトウェアSWの複数の機能から書き込まれるが、特定の機能のみから読み出される、あるいは、全く読み出されないデータである度合いを示す指標を求めることができる。
また、情報処理装置101によれば、クラスタCi内のデータが、クラスタCi外のプログラムから読み書きされる回数に対する、クラスタCi内外のプログラムから読み書きされる回数の割合に基づいて、内部専用パターン逸脱指標を算出することができる。
これにより、特定の機能に専用のデータであることから逸脱している度合いを示す指標を求めることができる。したがって、ユーザは、内部専用パターン逸脱指標が高いデータについて、特定の機能に専用のデータに近い特徴(性質)を持つが一部に例外的なアクセスが存在するデータであることを把握することができる。
また、情報処理装置101によれば、クラスタCi内のデータが、クラスタCi外のプログラムから書き込まれる回数に対する、クラスタCi外のプログラムから読み書きされる回数の割合に基づいて、マスターデータパターン逸脱指標を算出することができる。
これにより、マスターデータのようなデータであることから逸脱している度合いを示す指標を求めることができる。したがって、ユーザは、マスターデータパターン逸脱指標が高いデータについて、マスターデータに近い特徴(性質)を持つが一部に例外的なアクセスが存在するデータであることを把握することができる。
これらのことから、実施の形態1にかかる情報処理装置101によれば、ソフトウェアシステムにおけるデータの使われ方の実態を把握することができる。例えば、ユーザは、あるデータが、マスターデータとして使われているか、あるいはログデータのように使われているかといったことを把握することができる。このため、ユーザは、当初の設計時にどういう意図のデータであったかではなく、現にどのように使われているデータであるかを把握することができる。
そして、ユーザは、データがどのような使われ方をしているかということを、ソフトウェアSWの修正や再設計、あるいは、新たなプラットフォームへの移行のための情報として役立てることができる。例えば、ユーザは、依存関係の広範なデータや、特定の機能に専用として設計されたのに他の機能からも使われているデータが認識でき、扱いに注意すべきデータがどれであるかを判別することができる。
(実施の形態2)
つぎに、実施の形態2にかかる情報処理装置101について説明する。実施の形態2では、ソフトウェアSWにおいて用いられるデータについて、既知の分類が存在する場合に、データの特徴を表す指標値(応用指標)から決定される分類と既知の分類とを突き合わせて比較した結果を出力する分析支援方法について説明する。なお、実施の形態1で説明した箇所と同様の箇所については、同一符号を付して図示および説明を省略する。
(ソフトウェアSWのクラスタリング結果)
まず、実施の形態2において例題として用いるソフトウェアSWのクラスタリング結果について説明する。
図14は、ソフトウェアSWのクラスタリング結果の一例を地図形式で示す説明図(その2)である。図14において、プログラムp1〜p45を含むソフトウェアSWのクラスタリング結果が地図形式で示されている。図14中、各々の建物(p1〜p45,d1)が1つのプログラムまたはデータを表し、複数の建物の入っている区画がクラスタを表す。建物の間にひかれている曲線は依存関係を表す。ただし、図14では、注目しているデータとプログラムとの間の依存関係のみを描画している。
ここでは、クラスタリングによって、ソフトウェアSW全体が5つのクラスタC1〜C5に分割されている。各クラスタC1〜C5は、9つのプログラムを含み、同じクラスタ内の全てのプログラム間に依存関係が存在する。また、クラスタ間をつなぐプログラム間で依存関係が存在するものもある。各クラスタC1〜C5は何らかの機能を実装するものと想定される。
クラスタC1〜C5のうちのクラスタC4は、1つのデータd1を含む。データd1は、各クラスタC1〜C5内のプログラムから読み書き両方のアクセスがされている。データd1は、設計時に設定された名称が「GDS_MASTER」であり、商品のマスターデータとして設けられたデータであることが既知であるとする。
この場合、このデータ名「GDS_MASTER」のデータについて、実施の形態1と同様に、基本指標RO,WO,RI,WIを求めると、図15に示すようになる。
図15は、基本指標テーブル800の記憶内容の一例を示す説明図(その2)である。図15において、基本指標テーブル800には、基本指標情報1500−1が記憶されている。基本指標情報1500−1は、データ名「GDS_MASTER」のデータのRO「4」、WO「4」、RI「1」およびWI「1」を示す。
また、このデータ名「GDS_MASTER」のデータについて、実施の形態1と同様に、図15に示した基本指標RO,WO,RI,WIから応用指標(分類指標、逸脱指標)を求めると、図16に示すようになる。
図16は、応用指標テーブル900の記憶内容の一例を示す説明図(その2)である。図16において、応用指標テーブル900には、応用指標情報1600−1が記憶されている。応用指標情報1600−1は、データ名「GDS_MASTER」のデータのグローバルデータパターン指標「16」、内部専用パターン指標「0」、内部専用パターン逸脱指標「1.25」、マスターデータパターン指標「0」、マスターデータパターン逸脱指標「2」およびログパターン指標「1」を示す。
(情報処理装置101の機能的構成例)
つぎに、実施の形態2にかかる情報処理装置101の機能的構成例について説明する。
図17は、実施の形態2にかかる情報処理装置101の機能的構成例を示すブロック図である。図17において、情報処理装置101は、取得部601と、分割部602と、第1の算出部603と、第2の算出部604と、出力部605と、決定部1701と、比較部1702と、を含む構成である。取得部601〜出力部605、決定部1701および比較部1702は制御部となる機能であり、具体的には、例えば、図2に示したメモリ202、ディスク205などの記憶装置に記憶されたプログラムをCPU201に実行させることにより、または、I/F203により、その機能を実現する。各機能部の処理結果は、例えば、メモリ202、ディスク205などの記憶装置に記憶される。
以下、実施の形態1にかかる情報処理装置101の機能部とは異なる機能部について説明する。
決定部1701は、第2の算出部604によって算出されたクラスタCi内のデータの特徴を表す指標値に基づいて、当該データの分類を決定する。具体的には、例えば、決定部1701は、応用指標テーブル900(例えば、図16参照)を参照して、複数の応用指標のうちの値が最大となる応用指標に基づいて、データの分類を決定することにしてもよい。
より詳細に説明すると、例えば、グローバルデータパターン指標の値が最大となる場合、決定部1701は、データの分類を「グローバルデータ」に決定する。また、例えば、マスターデータパターン指標の値が最大となる場合、決定部1701は、データの分類を「マスターデータ」に決定する。例えば、ログパターン指標の値が最大となる場合、決定部1701は、データの分類を「ログデータ」に決定する。
また、例えば、内部専用パターン逸脱指標の値が最大となる場合、決定部1701は、データの分類を「内部専用逸脱」に決定することにしてもよい。「内部専用逸脱」は、特定の機能に専用のデータに近い特徴(性質)を持つが、一部に例外的なアクセスが存在するデータであることを示す分類である。
また、例えば、マスターデータパターン逸脱指標の値が最大となる場合、決定部1701は、データの分類を「マスターデータ逸脱」に決定することにしてもよい。「マスターデータ逸脱」は、マスターデータに近い特徴(性質)を持つが、一部に例外的なアクセスが存在するデータであることを示す分類である。
また、決定部1701は、例えば、内部専用パターン指標が「1」の場合には、他の応用指標の値にかかわらず、データの分類を「内部専用」に決定することにしてもよい。ここで、「内部専用」は、特定の機能に専用のデータであることを示す分類である。
図16に示した応用指標情報1600−1の例では、グローバルデータパターン指標の値が最大となる。この場合、決定部1701は、データ名「GDS_MASTER」のデータの分類を「グローバルデータ」に決定することにしてもよい。
なお、内部専用パターン指標以外の各応用指標に閾値を設けることにしてもよい。そして、複数の応用指標のうちの値が最大となる応用指標の値が閾値未満の場合には、決定部1701は、データの分類を「分類なし」に決定することにしてもよい。これにより、顕著な特徴があらわれていないデータを「分類なし」として判別可能にすることができる。
比較部1702は、決定部1701によって決定されたデータの分類と、当該データの既知の分類とを比較する。ここで、データの既知の分類(以下、「既知分類」という)は、ソフトウェアSWの設計当初のデータの分類である。例えば、データの既知分類は、設計時にどのような用途のデータであるかが既知である場合に設定される。
具体的には、例えば、まず、比較部1702は、命名規約に基づいて、データのデータ名から当該データの既知分類を特定することにしてもよい。一例を挙げると、データ名に「MASTER」が含まれる場合に、決定部1701は、データの既知分類を「マスターデータ」として特定する。そして、比較部1702は、決定されたデータの分類と、特定した当該データの既知分類とを比較する。
また、比較部1702は、例えば、設計情報を参照して、データの既知分類を特定することにしてもよい。ここで、設計情報は、ソフトウェアSWの設計時に用途が既知であるデータの既知分類を示す情報である。設計情報は、例えば、外部のコンピュータ(例えば、クライアント装置102)、または、不図示の入力装置を用いたユーザの操作入力により取得される。
出力部605は、クラスタCi内のデータの識別情報と対応付けて、比較された比較結果を出力する。具体的には、例えば、出力部605は、決定されたデータの分類と既知分類とが不一致の場合に、当該データが元々の設計とは異なる使われ方がされていることを示す警告情報を出力することにしてもよい。
より具体的には、例えば、出力部605は、図18に示すような分類比較結果1800をクライアント装置102に送信することにしてもよい。この結果、クライアント装置102において、例えば、不図示のディスプレイに分類比較結果1800が表示される。ここで、分類比較結果1800の具体例について説明する。
図18は、分類比較結果1800の具体例を示す説明図である。図18において、分類比較結果1800は、データ名と、指標計算による分類と、既知分類と、結果とを対応付けて示す比較結果情報(例えば、比較結果情報1800−1〜1800−3)を含む情報である。
分類比較結果1800によれば、ユーザは、ソフトウェアSWにおいて、各データが元々の設計と異なる使われ方をされているか否かを把握することができる。例えば、比較結果情報1800−1によれば、設計当初はマスターデータとして設計されたデータ名「GDS_MASTER」のデータが、プログラムの修正を重ねるうちに本来の用途と合わない使用がされるようになっていることがわかる。また、例えば、比較結果情報1800−3によれば、特定の機能に専用のデータとして設計されたデータ名「INV_TEMP」のデータが、元々の設計通り特定の機能に専用のデータとして使用されていることがわかる。
(情報処理装置101の分析支援処理手順)
つぎに、図19および図20を用いて、実施の形態2にかかる情報処理装置101の分析支援処理手順について説明する。
図19は、実施の形態2にかかる情報処理装置101の分析支援処理手順の一例を示すフローチャートである。図19のフローチャートにおいて、まず、情報処理装置101は、ソースコードDB120から分析対象となるソフトウェアSWのソースコードを読み込む(ステップS1901)。
つぎに、情報処理装置101は、ソフトウェアSWのソースコードを解析して、ソフトウェアSW内のプログラム間の依存関係およびプログラム/データ間の依存関係を抽出する(ステップS1902)。そして、情報処理装置101は、抽出したプログラム間の依存関係およびプログラム/データ間の依存関係に基づいて、ソフトウェアSWをクラスタリングする(ステップS1903)。
つぎに、情報処理装置101は、関連テーブル作成処理を実行する(ステップS1904)。なお、関連テーブル作成処理の具体的な処理手順は、図11に示した処理手順と同様のため、ここでは図示および説明を省略する。
つぎに、情報処理装置101は、ソフトウェアSWをクラスタリングした分割結果であるクラスタ情報から、未選択のデータ名を選択する(ステップS1905)。つぎに、情報処理装置101は、選択したデータ名に対応する基本指標、応用指標(分類指標、逸脱指標)を初期化する(ステップS1906)。そして、情報処理装置101は、作成した関連テーブル700から、選択したデータ名に対応する関連情報の集合を抽出する(ステップS1907)。
つぎに、情報処理装置101は、抽出した関連情報の集合に基づいて、選択したデータ名のデータについての基本指標を算出する基本指標算出処理を実行する(ステップS1908)。なお、基本指標算出処理の具体的な処理手順については、図12に示した処理手順と同様のため、ここでは図示および説明を省略する。
つぎに、情報処理装置101は、算出した基本指標に基づいて、選択したデータ名のデータについての応用指標(分類指標、逸脱指標)を算出する応用指標算出処理を実行する(ステップS1909)。なお、応用指標算出処理の具体的な処理手順については、図13に示した処理手順と同様のため、ここでは図示および説明を省略する。
そして、情報処理装置101は、クラスタ情報から選択していない未選択のデータ名があるか否かを判断する(ステップS1910)。ここで、未選択のデータ名がある場合(ステップS1910:Yes)、情報処理装置101は、ステップS1905に戻る。
一方、未選択のデータ名がない場合(ステップS1910:No)、情報処理装置101は、各データの応用指標に基づく分類と、当該各データの既知分類とを比較する分類比較処理を実行する(ステップS1911)。分類比較処理の具体的な処理手順については、図20を用いて後述する。
そして、情報処理装置101は、比較した各データについての比較結果情報を含む分類比較結果を出力して(ステップS1912)、本フローチャートによる一連の処理を終了する。
これにより、例えば、ソフトウェアSWの開発者や分析者に対して、ソフトウェアSWにおいて各データが元々の設計と異なる使われ方をされているか否かを示す比較結果情報の一覧を提示することができる。
<分類比較処理の具体的処理手順>
つぎに、図19に示したステップS1911の分類比較処理の具体的な処理手順について説明する。
図20は、分類比較処理の具体的処理手順の一例を示すフローチャートである。図20のフローチャートにおいて、まず、情報処理装置101は、応用指標テーブル900から未選択のデータ名を選択する(ステップS2001)。
そして、情報処理装置101は、選択したデータ名のデータの既知分類を特定する(ステップS2002)。つぎに、情報処理装置101は、応用指標テーブル900内の応用指標の値に基づいて、選択したデータ名のデータの分類を決定する(ステップS2003)。
そして、情報処理装置101は、決定したデータの分類が、特定したデータの既知分類と一致するか否かを判断する(ステップS2004)。ここで、既知分類と一致する場合(ステップS2004:Yes)、情報処理装置101は、選択したデータ名、決定したデータの分類、特定したデータの既知分類と対応付けて、結果「問題なし」を分類比較結果に登録して(ステップS2005)、ステップS2007に移行する。
一方、既知分類と不一致の場合(ステップS2004:No)、情報処理装置101は、選択したデータ名、決定したデータの分類、特定したデータの既知分類と対応付けて、結果「警告」を分類比較結果に登録する(ステップS2006)。そして、情報処理装置101は、応用指標テーブル900から選択していない未選択のデータ名があるか否かを判断する(ステップS2007)。
ここで、未選択のデータ名がある場合(ステップS2007:Yes)、情報処理装置101は、ステップS2001に戻る。一方、未選択のデータ名がない場合(ステップS2007:No)、情報処理装置101は、分類比較処理を呼び出したステップに戻る。これにより、ソフトウェアSWにおいて各データが元々の設計と異なる使われ方をされているか否かを示す比較結果情報の一覧を作成することができる。
以上説明したように、実施の形態2にかかる情報処理装置101によれば、算出したデータの特徴を表す指標値(応用指標)に基づいて、当該データの分類を決定することができる。また、情報処理装置101によれば、決定したデータの分類と、データの既知分類とを比較し、データの識別情報と対応付けて、比較した比較結果を出力することができる。これにより、ソフトウェアSWにおいて各データが元々の設計と異なる使われ方をされているか否かを示す情報をユーザに提示することができる。
また、情報処理装置101によれば、決定したデータの分類とデータの既知分類とが不一致の場合に、当該データが元々の設計とは異なる使われ方がされていることを示す警告情報を出力することができる。これにより、元々の設計と異なる使われ方をされており、扱いに注意すべきデータがどれであるかを見つけやすくすることができる。
なお、本実施の形態で説明した分析支援方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本分析支援プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO(Magneto−Optical disk)、DVD(Digital Versatile Disk)、USB(Universal Serial Bus)メモリ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本分析支援プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)コンピュータが、
ソフトウェア内のプログラム間の依存関係およびプログラム/データ間の依存関係に基づいて、前記ソフトウェア内のプログラムおよび当該プログラムからアクセスされるデータを含む要素群を複数のクラスタに分割し、
分割した前記複数のクラスタのいずれかのクラスタ内のデータが、前記クラスタ内のプログラムからアクセスされる回数と、前記クラスタ外のプログラムからアクセスされる回数とに基づいて、前記データの特徴を表す指標値を算出する、
処理を実行することを特徴とする分析支援方法。
(付記2)前記算出する処理は、
前記クラスタ内のデータが、前記クラスタ外のプログラムから読み出される回数と、前記クラスタ外のプログラムから書き込まれる回数とに基づいて、前記ソフトウェア全体から読み書きされるデータである度合いを示す指標値を算出する、ことを特徴とする付記1に記載の分析支援方法。
(付記3)前記算出する処理は、
前記クラスタ内のデータが、前記クラスタ外のプログラムから読み書きされていない場合は、特定の機能に専用のデータであることを示す指標値を算出する、ことを特徴とする付記1または2に記載の分析支援方法。
(付記4)前記算出する処理は、
前記クラスタ内のデータが、前記クラスタ外のプログラムから書き込まれていない場合は、前記クラスタ外のプログラムから読み出される回数に基づいて、複数の機能から読み出され、特定のプログラムのみから書き込まれるデータである度合いを示す指標値を算出する、ことを特徴とする付記1〜3のいずれか一つに記載の分析支援方法。
(付記5)前記算出する処理は、
前記クラスタ内のデータが、前記クラスタ外のプログラムから読み書きされておらず、かつ、前記クラスタ内のプログラムから書き込まれない場合には、前記クラスタ内のプログラムから読み出される回数に基づいて、複数の機能から読み出され、特定のプログラムのみから書き込まれるデータである度合いを示す指標値を算出する、ことを特徴とする付記1〜4のいずれか一つに記載の分析支援方法。
(付記6)前記算出する処理は、
前記クラスタ内のデータが、前記クラスタ内外のプログラムから読み出される回数に対する、前記クラスタ内外のプログラムから書き込まれる回数の割合に基づいて、複数の機能から書き込まれ、特定の機能のみから読み出される、あるいは、全く読み出されないデータである度合いを示す指標値を算出する、ことを特徴とする付記1〜5のいずれか一つに記載の分析支援方法。
(付記7)前記算出する処理は、
前記クラスタ内のデータが、前記クラスタ外のプログラムから読み書きされる回数に対する、前記クラスタ内外のプログラムから読み書きされる回数の割合に基づいて、特定の機能に専用のデータであることから逸脱している度合いを示す指標値を算出する、ことを特徴とする付記1〜6のいずれか一つに記載の分析支援方法。
(付記8)前記算出する処理は、
前記クラスタ内のデータが、前記クラスタ外のプログラムから書き込まれる回数に対する、前記クラスタ外のプログラムから読み書きされる回数の割合に基づいて、複数の機能から読み出され、特定のプログラムのみから書き込まれるデータであることから逸脱している度合いを示す指標値を算出する、ことを特徴とする付記1〜6のいずれか一つに記載の分析支援方法。
(付記9)前記コンピュータが、
前記クラスタ内のデータの識別情報と対応付けて、算出した前記指標値を出力する、処理を実行することを特徴とする付記1〜8のいずれか一つに記載の分析支援方法。
(付記10)前記コンピュータが、
算出した前記指標値に基づいて、前記データの分類を決定し、
決定した前記データの分類と、前記データの既知の分類とを比較し、
前記データの識別情報と対応付けて、比較した比較結果を出力する、処理を実行することを特徴とする付記1〜9のいずれか一つに記載の分析支援方法。
(付記11)前記出力する処理は、
前記データの分類と前記データの既知の分類とが不一致の場合、当該データが元々の設計とは異なる使われ方がされていることを示す警告情報を出力する、ことを特徴とする付記10に記載の分析支援方法。
(付記12)コンピュータに、
ソフトウェア内のプログラム間の依存関係およびプログラム/データ間の依存関係に基づいて、前記ソフトウェア内のプログラムおよび当該プログラムからアクセスされるデータを含む要素群を複数のクラスタに分割し、
分割した前記複数のクラスタのいずれかのクラスタ内のデータが、前記クラスタ内のプログラムからアクセスされる回数と、前記クラスタ外のプログラムからアクセスされる回数とに基づいて、前記データの特徴を表す指標値を算出する、
処理を実行させることを特徴とする分析支援プログラム。
(付記13)ソフトウェア内のプログラム間の依存関係およびプログラム/データ間の依存関係に基づいて、前記ソフトウェア内のプログラムおよび当該プログラムからアクセスされるデータを含む要素群を複数のクラスタに分割し、
分割した前記複数のクラスタのいずれかのクラスタ内のデータが、前記クラスタ内のプログラムからアクセスされる回数と、前記クラスタ外のプログラムからアクセスされる回数とに基づいて、前記データの特徴を表す指標値を算出する、
制御部を有することを特徴とする情報処理装置。