(57)【特許請求の範囲】
【請求項１】
動作中のプログラムの挙動を分析し、前記プログラムのモジュール構成を再構築するために前記モジュールの再分割提案を行うモジュール再分割提案装置であって、
前記プログラムを展開するプログラム展開手段と、
前記プログラム展開手段に展開された前記プログラムを実行する実行手段と、  前記実行手段によって前記プログラムが実行されるとき、前記実行手段によって前記プログラム展開手段に展開されている前記プログラムの命令部位へのアクセスが行われたときの前記命令部位の前記プログラム展開手段上での第１のアドレスを検出する命令アクセス検出手段と、
前記実行手段によって前記プログラムが実行されるとき、前記実行手段によって前記プログラム展開手段に展開されている前記プログラムのデータ部位へのアクセスが行われたときの前記データ部位の前記プログラム展開手段上での第２のアドレスを検出するデータアクセス検出手段と、
前記命令アクセス検出手段によって検出された前記第１のアドレスと、前記データアクセス検出手段によって検出された前記第２のアドレスと、前記プログラムが前記プログラム展開手段により展開される前の原プログラムのシンボルと前記プログラム展開手段により展開された前記プログラムのアドレスとの対応を示す情報からなるシンボルテーブルとに基づいて、前記命令部位と前記データ部位の相関を推定する相関推定手段と、
前記相関推定手段による推定結果を、前記プログラムが前記プログラム展開手段により展開される前の原プログラム上でのモジュール単位にまとめ、前記データ部位を主インデックスとして、前記データ部位を操作した前記命令部位を整列することにより、データ主体のモジュール分割を行ったときの各データ部位を操作する前記命令部位の前記原プログラム上での位置を検出し、前記検出結果に基づいて、前記プログラムのモジュール構成の再構築のためのモジュールの再分割を提案するモジュール再分割提案手段とを備えることを特徴とするモジュール再分割提案装置。
【請求項２】
所定のメモリに展開され、動作中のプログラムの挙動を分析し、前記プログラムのモジュール構成を再構築するためにコンピュータが前記モジュールの再分割提案を行うモジュール再分割提案方法であって、
前記プログラムを前記メモリに展開するプログラム展開ステップと、
前記プログラム展開ステップにおいて展開された前記プログラムを実行する実行ステップと、
前記実行ステップにおいて前記プログラムが実行されるとき、前記実行ステップにおいて前記メモリに展開された前記プログラムの命令部位へのアクセスが行われたときの前記命令部位の前記メモリ上での第１のアドレスを検出する命令アクセス検出ステップと、
前記実行ステップにおいて前記プログラムが実行されるとき、前記実行ステップにおいて前記メモリに展開された前記プログラムのデータ部位へのアクセスが行われたときの前記データ部位の前記メモリ上での第２のアドレスを検出するデータアクセス検出ステップと、
前記命令アクセス検出ステップにおいて検出された前記第１のアドレスと、前記データアクセス検出ステップにおいて検出された前記第２のアドレスと、前記プログラムが前記プログラム展開ステップにより展開される前の原プログラムのシンボルと前記プログラム展開ステップにより展開された前記プログラムのアドレスとの対応を示す情報からなるシンボルテーブルと、に基づいて前記命令部位と前記データ部位の相関を推定する相関推定ステップと、
前記相関推定ステップによる推定結果を、前記プログラムが前記プログラム展開ステップにより展開される前の原プログラム上でのモジュール単位にまとめ、前記データ部位を主インデックスとして、前記データ部位を操作した前記命令部位を整列することにより、データ主体のモジュール分割を行ったときの各データ部位を操作する前記命令部位の前記原プログラム上での位置を検出し、前記検出結果に基づいて、前記プログラムのモジュール構成の再構築のためのモジュールの再分割を提案するモジュール再分割提案ステップとを備えることを特徴とするモジュール再分割提案方法。
【請求項３】
コンピュータに、
プログラムをメモリに展開するプログラム展開機能と、
前記プログラム展開機能において展開された前記プログラムを実行する実行機能と、
前記実行ステップにおいて前記プログラムが実行されるとき、前記実行機能において前記メモリに展開された前記プログラムの命令部位へのアクセスが行われたときの前記命令部位の前記メモリ上での第１のアドレスを検出する命令アクセス検出機能と、
前記実行機能において前記プログラムが実行されるとき、前記実行機能において前記メモリに展開された前記プログラムのデータ部位へのアクセスが行われたときの前記データ部位の前記メモリ上での第２のアドレスを検出するデータアクセス検出機能と、
前記命令アクセス検出機能において検出された前記第１のアドレスと、前記データアクセス検出機能において検出された前記第２のアドレスと、前記プログラムが前記プログラム展開機能により展開される前の原プログラムのシンボルと前記プログラム展開機能により展開された前記プログラムのアドレスとの対応を示す情報からなるシンボルテーブルと、に基づいて前記命令部位と前記データ部位の相関を推定する相関推定機能と、
前記相関推定ステップによる推定結果を、前記プログラムが前記プログラム展開機能により展開される前の原プログラム上でのモジュール単位にまとめ、前記データ部位を主インデックスとして、前記データ部位を操作した前記命令部位を整列することにより、データ主体のモジュール分割を行ったときの各データ部位を操作する前記命令部位の前記原プログラム上での位置を検出し、前記検出結果に基づいて、前記プログラムのモジュール構成の再構築のためのモジュールの再分割を提案するモジュール再分割提案機能とを実現させるためのプログラムが記録されているコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、モジュール再分割提案装置およびモジュール再分割提案方法、並びに記録媒体に関し、特に、プログラムを分析し、プログラムのモジュール構成を再構築するための提案を行うモジュール再分割提案装置およびモジュール再分割提案方法、並びに記録媒体に関する。
【０００２】
【従来の技術】
従来、分散システムなどではデータ主体のオブジェクト分割が望ましいが、このようなオブジェクト分割を行うために既存のシステムのプログラムの分析を行う場合、分析の対象となる現用システムが稼働中であることが多いため、プログラムを静的に分析することにより（例えば、ソースプログラムを分析することにより）、システムのプログラムの再構築を行うための情報を得ていた。
【０００３】
【発明が解決しようとする課題】
しかしながら、プログラムを静的に分析する場合、システムのプログラムの再構築に匹敵するシステム分析の知識と手間が必要になる場合がある課題があった。いわば、システムの一からの再設計にも相当するシステム分析の知識と手間が必要になる場合がある。稼働中の現用システムの情報を有効利用できれば、再構成作業を効率化できるはずである。
【０００４】
本発明はこのような状況に鑑みてなされたものであり、システムが稼働中にシステムのプログラムの情報を取得して、効率的にシステムの再構築のための提案を行うことができるようにするものである。
【０００５】
【課題を解決するための手段】
請求項１に記載のモジュール再分割提案装置は、動作中のプログラムの挙動を分析し、プログラムのモジュール構成を再構築するためにモジュールの再分割提案を行うモジュール再分割提案装置であって、プログラムを展開するプログラム展開手段と、プログラム展開手段に展開されたプログラムを実行する実行手段と、実行手段によってプログラムが実行されるとき、実行手段によってプログラム展開手段に展開されているプログラムの命令部位へのアクセスが行われたときの命令部位のプログラム展開手段上での第１のアドレスを検出する命令アクセス検出手段と、実行手段によってプログラムが実行されるとき、実行手段によってプログラム展開手段に展開されているプログラムのデータ部位へのアクセスが行われたときのデータ部位のプログラム展開手段上での第２のアドレスを検出するデータアクセス検出手段と、命令アクセス検出手段によって検出された第１のアドレスと、データアクセス検出手段によって検出された第２のアドレスとに基づいて、命令部位とデータ部位の相関を推定する相関推定手段と、相関推定手段による推定結果に基づいて、プログラムのモジュール構成の再構築のためのモジュールの再分割を提案するモジュール再分割提案手段とを備えることを特徴とする。
また、プログラムがプログラム展開手段に展開される前の原プログラムのシンボルと、プログラム展開手段に展開されたプログラムのアドレスとの対応を示す情報からなるシンボルテーブルをさらに設け、相関推定手段は、シンボルテーブルの情報に基づいて、原プログラムの命令部位とデータ部位の相関を推定するようにすることができる。
また、モジュール再分割提案手段は、相関推定手段による推定結果を、プログラムがプログラム展開手段に展開される前の原プログラム上でのモジュール単位にまとめ、データ部位を主インデックスとして、データ部位を操作した命令部位を整列することにより、データ主体のモジュール分割を行ったときの各データ部位を操作する命令部位の原プログラム上での位置を検出し、検出結果に基づいて、プログラムのモジュール構成のオブジェクト指向的再構築のためのモジュールの再分割を提案するようにすることができる。
また、モジュール再分割提案手段は、相関推定手段による推定結果を、プログラムがプログラム展開手段に展開される前の原プログラム上でのモジュール単位にまとめ、命令部位を主インデックスとして、命令部位が操作したデータ部位を整列することにより、命令主体のモジュール分割を行ったときの各命令部位が操作するデータ部位の原プログラム上での位置を検出し、検出結果に基づいて、プログラムのモジュール構成の手続き型再構築のためのモジュールの再分割を提案するようにすることができる。
請求項５に記載のモジュール再分割提案方法は、所定のメモリに展開され、動作中のプログラムの挙動を分析し、プログラムのモジュール構成を再構築するためにモジュールの再分割提案を行うモジュール再分割提案方法であって、プログラムをメモリに展開するプログラム展開ステップと、プログラム展開ステップにおいて展開されたプログラムを実行する実行ステップと、実行ステップにおいてプログラムが実行されるとき、実行ステップにおいてメモリに展開されたプログラムの命令部位へのアクセスが行われたときの命令部位のメモリ上での第１のアドレスを検出する命令アクセス検出ステップと、実行ステップにおいてプログラムが実行されるとき、実行ステップにおいてメモリに展開されたプログラムのデータ部位へのアクセスが行われたときのデータ部位のメモリ上での第２のアドレスを検出するデータアクセス検出ステップと、命令アクセス検出ステップにおいて検出された第１のアドレスと、データアクセス検出ステップにおいて検出された第２のアドレスとに基づいて、命令部位とデータ部位の相関を推定する相関推定ステップと、相関推定ステップにおける推定結果に基づいて、プログラムのモジュール構成の再構築のためのモジュールの再分割を提案するモジュール再分割提案ステップとを備えることを特徴とする。  請求項６に記載のコンピュータ読み取り可能な記録媒体は、請求項５に記載の機能を実現させるためのプログラムが記録されていることを特徴とする。
本発明に係るモジュール再分割提案装置およびモジュール再分割提案方法、並びに記録媒体においては、プログラムをメモリに展開し、展開されたプログラムを実行し、プログラムが実行されるとき、メモリに展開されたプログラムの命令部位へのアクセスが行われたときの命令部位のメモリ上での第１のアドレスを検出し、プログラムが実行されるとき、メモリに展開されたプログラムのデータ部位へのアクセスが行われたときのデータ部位のメモリ上での第２のアドレスを検出し、検出された第１のアドレスと、第２のアドレスとに基づいて、命令部位とデータ部位の相関を推定し、推定結果に基づいて、プログラムのモジュール構成の再構築のためのモジュールの再分割を提案する。
【０００６】
【発明の実施の形態】
本発明は、既存のプログラムの動作を外部から観察して得た情報に基づいて、プログラムを再分割するための提案を行うものである。以下、図面を参照して詳細に説明する。
【０００７】
図１は、本発明のモジュール再分割提案装置の一実施の形態の構成例を示すブロック図である。図１に示すように、本実施の形態は、分析対象となるプログラムを格納し、展開するためのプログラム格納部２と、プログラム格納部２に格納されたプログラム（実行形式ファイル）を実行するＣＰＵ（ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）１と、上記分析対象となるプログラムを実行しているＣＰＵ１の命令のアクセス（プログラムの命令部分を読み出して実行したこと）を検出する命令アクセス検出部３と、データのアクセス（プログラムのデータ部分に対する読み出し又は書き込みを行ったこと）を検出するデータアクセス検出部４と、シンボルテーブル５と、命令アクセス検出部３の検出結果と、データアクセス検出部４の検出結果とに基づいて、プログラムのどのデータ部分（以下では適宜単にデータと記載する）に、プログラムのどの命令部分（以下では適宜単にプログラムと記載する）がアクセスしたのかを検出し、これをシンボルテーブル５の情報と合わせて、データとプログラムのモジュールレベルの相関を算出する相関推定部６と、相関推定部６によって算出された相関に基づいて、モジュール分割提案を行うモジュール分割提案部７とから構成されている。
【０００８】
相関推定部６は、例えば、データ毎に、各データにアクセスしたプログラムの命令部分をまとめることによって、モジュール構成をオブジェクト指向型のモジュール構成とするためのモジュール再分割のためのデータとプログラムの相関の推定などを行う。これにより、モジュール分割提案部７は、オブジェクト指向のモジュール分割提案を行うことができる。また、データとプログラムを入れ替えると、手続き指向のモジュール再分割のためのデータとプログラムの相関の推定を行うことができ、モジュール構成を手続き指向のモジュール構成とするためのモジュール分割提案を行うことができる。即ち、プログラム毎に、各プログラムがアクセスしたデータをまとめることにより、手続き指向のモジュール分割提案を行うことができる。この提案は、モジュール分割提案部７により提示される。
【０００９】
通常、このような分析は、プログラムの静的解析によって人間が行うようにしていたが、本実施の形態では、現在動作しているシステムのプログラムの挙動を分析し、その挙動をベースにして新たなモジュール構成を構築するためのモジュール分割を提案する。従って、実際の動作に則したモジュール分割提案を行うことができるとともに、システム解析作業を大幅に効率化することができる。
【００１０】
上述したように、本実施の形態は、プログラムを実行するＣＰＵ１と、ＣＰＵ１が実行しているプログラムを格納しているプログラム格納部２と、ＣＰＵ１の動作を監視する命令アクセス検出部３と、データアクセス検出部４を有している。これらの命令アクセス検出部３とデータアクセス検出部４の検出方法は、ハードウェア的なバス監視であっても良いし、定期的なサンプリング手法などによるソフトウェア的なものであっても良い。このように、ハードウェア的に見る方法と、サンプリングによってどこを実行していたかをソフトウェア的に見る方法があるが、どちらの方法で行っても良い。どちらの方法を選ぶかは、本発明にとって本質的な問題ではない。
【００１１】
また、現在実行しているプログラムについて、プログラムが展開される仮想空間上のアドレスが、元のプログラム（原プログラム）のどの部分に対応していたかを識別するために、原プログラムを構成する例えば「ｍａｉｎ」や「ａ」などの文字列と、それらの文字列が割り付けられた仮想空間上の仮想アドレスとの関係を示す情報が、コンパイラ及びリンカによって生成され、シンボルテーブル５とされる。
【００１２】
即ち、本実施の形態は、プログラム格納部２に展開されたプログラム（実行形式ファイル）における各アドレスが、原プログラム上においてどのようなシンボルを持っていたかを示す情報を保持しているシンボルテーブル５を有し、これを用いて、命令アクセス検出部３及びデータアクセス検出部４が得た各アドレスと、原プログラムとの関係を知ることができる。
【００１３】
例えば、Ｃ言語で書かれた次のようなプログラムがあるとする。
【００１４】
0003763247.tif 000002
【００１５】
このプログラムがコンパイルされて実行形式ファイルになったとき、関数ｍａｉｎの実行命令列、関数ａの実行命令列、データｄａｔａ１などは、仮想空間のどこかに割り付けられるが、その各々のアドレスが原プログラムのどの部分に対応していたかを識別する情報として、「ｍａｉｎ」や「ａ」などの文字列と、それらの文字列が割り付けられたアドレスの関係情報が、コンパイラ及びリンカによって一般に生成される。
【００１６】
ここで、「ｍａｉｎ」や「ａ」などをシンボル、対応表をシンボルテーブルと呼び、多くの場合、実行形式ファイルに結合されている。
【００１７】
これらの情報を用いて、プログラムとデータアクセスの相関を算出する相関推定部６があり、算出された相関に基づいて、モジュール分割提案部７により、モジュール分割提案が出力される。
【００１８】
次に、本実施の形態の動作について説明する。ＣＰＵ１は、プログラム格納部２に展開されたプログラムに従って動作し、プログラムの所定の部分を実行し、また、プログラムのデータに対して読み出し及び書き込みを行う（アクセスする）。この例では、プログラム格納部２には、プログラムの実行時に必要なデータも格納されており、データはプログラムの一部として実行形式ファイルの中に含まれている。
【００１９】
命令アクセス検出部３は、ＣＰＵ１がプログラム格納部２のプログラムの命令部分を読み出して実行したことを検出し、その命令に関する情報（例えば、その命令が展開されている仮想空間上でのアドレス等の命令アクセス情報）を相関推定部６に供給する。データアクセス検出部４は、ＣＰＵ１が、プログラム格納部２の所定のデータにアクセスしたことを検出し、アクセスされたデータに関する情報（例えば、そのデータが展開されている仮想空間上でのアドレス等のデータアクセス情報）を相関推定部６に供給する。
【００２０】
以下、図２のフローチャートを参照して、相関推定部６の動作について説明する。まず、ステップＳ１において、相関推定部６は、命令アクセス検出部３によって得られた命令アクセス情報と、データアクセス検出部４によって得られたデータアクセス情報と、シンボルテーブル５の情報により、命令アクセス検出部３とデータアクセス検出部４によって得られた各情報が、シンボルテーブル単位（即ち、モジュール単位）に総括される。次に、ステップＳ２において、データ領域（データ部分）毎に、各領域（部分）のデータにアクセスするプログラム（命令部分）の検出が行われる。次に、ステップＳ３において、データ部分をインデックスとしたテーブルが生成される。
【００２１】
このように、命令アクセス情報とデータアクセス情報とが原プログラム上でのモジュール構成単位にまとめられる。この実施の形態では、データを主体とし、それに従属するプログラム（命令部分）を検出することにより、オブジェクト指向的モジュール再分割提案が行われる。
【００２２】
即ち、命令アクセス情報とデータアクセス情報に基づいて、データを主インデックスとしてそのデータに対して操作を行ったプログラム（命令部分又は命令部位）を求め、そのプログラムを整列させる。そして、同一データにアクセスするプログラム部分（命令部位）をまとめて１つのモジュールとすることにより、データを主体としたモジュール分割を行うことができる。この場合、データに従属するプログラム（命令部位）が、原プログラム上ではどこにあるのかを検出している。従って、原プログラムにおけるモジュール分割を行うことができる。
【００２３】
この検出結果が、モジュール分割提案部７によりモジュール分割提案として提示される。このモジュール分割提案は、現在のプログラムを、データを主体として再モジュール分割する場合に、プログラムの再構成の提案の意味を持つこととなる。
【００２４】
このように、プログラムのオブジェクト指向型プログラムへの再構成や、現在のシステムで稼働しているプログラムの再構成を、プログラムが動作していることをベースとした動的な情報を検出し、分析することによって行うことにより、プログラムの再構成を、従来の静的分析による再構成に比して大幅に効率化することができる。
【００２５】
次に、本発明の他の実施の形態について説明する。本実施の形態の構成は図１に示した実施の形態の場合と同様であるが、本実施の形態においては、相関推定部６は、命令アクセス検出部３が検出した命令アクセス情報と、データアクセス検出部４が検出したデータアクセス情報とに基づいて、命令アクセス情報を主インデックスとして、それに従属するデータを求めるようにする。これにより、プログラムの手続き型再構成を行うためのモジュール分割提案を行うことができる。
【００２６】
また、本発明のさらに他の実施の形態として、シンボルテーブル５のデータを用いないようにすれば、命令アクセス検出部３及びデータアクセス検出部４の検出結果の可読性は減少するが、現在のプログラム構成にとらわれないプログラムの再構成を行うためのモジュール分割提案を行うことができる。
【００２７】
また、上述したような処理を実行するプログラムは、ＣＤ−ＲＯＭ（ｃｏｍｐａｃｔ  ｄｉｓｃ  ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）、ＤＶＤ（ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｃ）、フロッピディスク、メモリカード等の様々な記録媒体に記録して提供することができる。そして、そのプログラムは、コンピュータの動作を制御し、プログラム制御されたそのコンピュータが上記プログラムにより指令される所定の処理を実行する。
【００２８】
また、上記実施の形態の構成及び動作は例であって、本発明の趣旨を逸脱しない範囲で適宜変更することができることは言うまでもない。
【００２９】
【発明の効果】
以上の如く、本発明に係るモジュール再分割提案装置およびモジュール再分割提案方法、並びに記録媒体によれば、プログラムをメモリに展開し、展開されたプログラムを実行し、プログラムが実行されるとき、メモリに展開されたプログラムの命令部位へのアクセスが行われたときの命令部位のメモリ上での第１のアドレスを検出し、プログラムが実行されるとき、メモリに展開されたプログラムのデータ部位へのアクセスが行われたときのデータ部位のメモリ上での第２のアドレスを検出し、検出された第１のアドレスと、第２のアドレスとに基づいて、命令部位とデータ部位の相関を推定し、推定結果に基づいて、プログラムのモジュール構成の再構築のためのモジュールの再分割を提案するようにしたので、プログラムが動作中に、プログラムの命令部位とデータ部位の相関を推定することができ、プログラムの再構築のためのモジュール再分割提案を効率的に行うことができる。
【図面の簡単な説明】
【図１】本発明のモジュール再分割提案装置の一実施の形態の構成例を示すブロック図である。
【図２】図１の実施の形態の動作を説明するためのフローチャートである。
【符号の説明】
１  ＣＰＵ
２  プログラム格納部
３  命令アクセス検出部
４  データアクセス検出部
５  シンボルテーブル
６  相関推定部
７  モジュール分割提案部
【図１】
0003763247.tif 000003
【図２】
0003763247.tif 000004