(57)【要約】  オブジェクト指向言語で記述されたソースコードの視覚化に際して、包含関係や関連を含むクラス間の関係情報でユーザに必要な情報を表示するとともに、実際にプログラムを実行した場合のクラス間関係を明確化することで、ユーザのソフトウェア開発を効果的に支援する。ログ出力部品追加部１０１により、対象プログラムに対してログ出力部品を埋め込んでログを取得できるようにしておき、テスト実行部１０２により、ユーザが着目する機能に関するテストケースでプログラムを実行する。そして、ログ解析部１０３により、テスト実行で得られたログからオブジェクト一覧及びオブジェクト間関係を収集し、オブジェクト構造抽出部１０４により、重要度が高いオブジェクト間関係を抽出してオブジェクト図情報を生成し、表示部１０５により、オブジェクト図を作成し表示する。
2008096632.tif 000002
【特許請求の範囲】
【請求項１】
ログを出力するログ出力部品をオブジェクト指向言語で記述されたソースコードに対して挿入し、ログ取得可能なプログラムに加工するソースコード加工手段と、
前記ソースコード加工手段により加工されたプログラムについてユーザが着目する機能に関するテストケースで実行し、ログを取得するテスト実行手段と、
前記テスト実行手段により取得されたログを解析し、オブジェクトの一覧と該オブジェクト間の関係を収集するログ解析手段と、
前記ログ解析手段により収集されたオブジェクト間の関係をもとに、重要度の高いオブジェクトの組み合わせをつなぎあわせてオブジェクト構造を抽出するオブジェクト構造抽出手段と、
前記オブジェクト構造抽出手段により抽出されたオブジェクト構造をオブジェクト図として表示する表示手段と、
を有することを特徴とするオブジェクト図表示装置。
【請求項２】
前記ログ出力部品は、２つのオブジェクトの識別子名及び関係の種類をログとして出力することを特徴とし、
前記ソースコード加工手段は、ソースコード中で２つのオブジェクトが関係を持つ箇所に前記ログ出力部品を埋め込むことを特徴とし、
前記２つのオブジェクトが関係を持つとは、一方のオブジェクトが他方のオブジェクトに対する処理を実行することを示す
請求項１に記載のオブジェクト図表示装置。
【請求項３】
前記ログ出力部品は、オブジェクトの識別子名及び関係の種類の情報を含む実行時のスタックトレースをそのまま記録することを特徴とする請求項１もしくは２に記載のオブジェクト図表示装置。
【請求項４】
前記オブジェクト構造抽出手段は、関係の種類ごとに定められた重み付け及び関係の数に基づいて、より重みの重い関係がより多く含まれるオブジェクトの組み合わせの重要度を高いと判断し、関係の重みが軽いか関係の数が少ない場合にはオブジェクトの組み合わせの重要度を低いと判断することを特徴とする請求項１から３のいずれか１項に記載のオブジェクト図表示装置。
【請求項５】
前記オブジェクト構造抽出手段は、前記ログ解析手段により収集されたオブジェクトの一覧から同じクラスのオブジェクトをまとめて集計することを特徴とする請求項１から４のいずれか１項に記載のオブジェクト図表示装置。
【請求項６】
前記ソースコードを解析して該ソースコードの静的構造を取得するソースコード解析手段と、
前記オブジェクト構造抽出手段により抽出されたオブジェクト構造と、前記ソースコード解析手段により取得された静的ソースコード構造とを合わせた構造図情報を生成する構造図情報生成手段と、をさらに有し、
前記表示手段は、前記構造図情報生成手段により生成された構造図情報をもとに、前記オブジェクト構造と前記静的ソースコード構造とを重ね合わせて表示することを特徴とする請求項１から５のいずれか１項に記載のオブジェクト図表示装置。
【請求項７】
ログを出力するログ出力部品を、オブジェクト指向言語で記述されたソースコードに対して挿入し、ログ取得可能なプログラムに加工するソースコード加工工程と、
前記ソースコード加工工程により加工されたプログラムについて、ユーザが着目する機能に関するテストケースで実行し、ログを取得するテスト実行工程と、
前記テスト実行工程により取得されたログを解析し、オブジェクトの一覧と該オブジェクト間の関係を収集するログ解析工程と、
前記ログ解析工程により収集されたオブジェクト間の関係をもとに、重要度の高いオブジェクトの組み合わせをつなぎあわせてオブジェクト構造を抽出するオブジェクト構造抽出工程と、
前記オブジェクト構造抽出工程により抽出されたオブジェクト構造をオブジェクト図として表示する表示工程と、
を有することを特徴とするオブジェクト図表示方法。
【請求項８】
前記ログ出力部品は、２つのオブジェクトの識別子名及び関係の種類をログとして出力することを特徴とし、
前記ソースコード加工工程は、ソースコード中で２つのオブジェクトが関係を持つ箇所に前記ログ出力部品を埋め込むことを特徴とし、
前記２つのオブジェクトが関係を持つとは、一方のオブジェクトが他方のオブジェクトに対する処理を実行することを示す
請求項７に記載のオブジェクト図表示方法。
【請求項９】
前記ログ出力部品は、オブジェクトの識別子名及び関係の種類の情報を含む実行時のスタックトレースをそのまま記録することを特徴とする請求項７に記載のオブジェクト図表示方法。
【請求項１０】
前記オブジェクト構造抽出工程は、関係の種類ごとに定められた重み付け及び関係の数に基づいて、より重みの重い関係がより多く含まれるオブジェクトの組み合わせの重要度を高いと判断し、関係の重みが軽いか関係の数が少ない場合にはオブジェクトの組み合わせの重要度を低いと判断することを特徴とする請求項７から９のいずれか１項に記載のオブジェクト図表示方法。
【請求項１１】
前記オブジェクト構造抽出工程は、前記ログ解析工程により収集されたオブジェクトの一覧から同じクラスのオブジェクトをまとめて集計することを特徴とする請求項７から１０のいずれか１項に記載のオブジェクト図表示方法。
【請求項１２】
前記ソースコードを解析して該ソースコードの静的構造を取得するソースコード解析工程と、
前記オブジェクト構造抽出工程により抽出されたオブジェクト構造と、前記ソースコード解析工程により取得された静的ソースコード構造とを合わせた構造図情報を生成する構造図情報生成工程と、をさらに有し、
前記表示工程は、前記構造図情報生成工程により生成された構造図情報をもとに、前記オブジェクト構造と前記静的ソースコード構造とを重ね合わせて表示することを特徴とする請求項７から１１のいずれか１項に記載のオブジェクト図表示方法。
【請求項１３】
ログを出力するログ出力部品を、オブジェクト指向言語で記述されたソースコードに対して挿入し、ログ取得可能なプログラムに加工するソースコード加工機能と、
前記ソースコード加工機能により加工されたプログラムについて、ユーザが着目する機能に関するテストケースで実行し、ログを取得するテスト実行機能と、
前記テスト実行機能により取得されたログを解析し、オブジェクトの一覧と該オブジェクト間の関係を収集するログ解析機能と、
前記ログ解析機能により収集されたオブジェクト間の関係をもとに、重要度の高いオブジェクトの組み合わせをつなぎあわせてオブジェクト構造を抽出するオブジェクト構造抽出機能と、
前記オブジェクト構造抽出機能により抽出されたオブジェクト構造をオブジェクト図として表示する表示機能と、
をコンピュータに実行させることを特徴とするプログラム。
【請求項１４】
前記ログ出力部品は、２つのオブジェクトの識別子名及び関係の種類をログとして出力することを特徴とし、
前記ソースコード加工機能は、ソースコード中で２つのオブジェクトが関係を持つ箇所に前記ログ出力部品を埋め込むことを特徴とし、
前記２つのオブジェクトが関係を持つとは、一方のオブジェクトが他方のオブジェクトに対する処理を実行することを示す
請求項１３に記載のプログラム。
【請求項１５】
前記ログ出力部品は、オブジェクトの識別子名及び関係の種類の情報を含む実行時のスタックトレースをそのまま記録することを特徴とする請求項１３に記載のプログラム。
【請求項１６】
前記オブジェクト構造抽出機能は、関係の種類ごとに定められた重み付け及び関係の数に基づいて、より重みの重い関係がより多く含まれるオブジェクトの組み合わせの重要度を高いと判断し、関係の重みが軽いか関係の数が少ない場合にはオブジェクトの組み合わせの重要度を低いと判断することを特徴とする請求項１３から１５のいずれか１項に記載のプログラム。
【請求項１７】
前記オブジェクト構造抽出機能は、前記ログ解析機能により収集されたオブジェクトの一覧から同じクラスのオブジェクトをまとめて集計することを特徴とする請求項１３から１６のいずれか１項に記載のプログラム。
【請求項１８】
前記ソースコードを解析して該ソースコードの静的構造を取得するソースコード解析機能と、
前記オブジェクト構造抽出機能により抽出されたオブジェクト構造と、前記ソースコード解析機能により取得された静的ソースコード構造とを合わせた構造図情報を生成する構造図情報生成機能と、をさらに有し、
前記表示機能は、前記構造図情報生成機能により生成された構造図情報をもとに、前記オブジェクト構造と前記静的ソースコード構造とを重ね合わせて表示することを特徴とする請求項１３から１７のいずれか１項に記載のプログラム。
【請求項１９】
請求項１３から１８のいずれか１項に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オブジェクト図表示装置、オブジェクト図表示方法、プログラム、及びコンピュータ読み取り可能な記録媒体に関し、特に、ソースコード等からオブジェクト図を表示してソースコードの構造を把握する技術で、ソフトウェア解析に好適に適用される技術に関するものである。
【背景技術】
【０００２】
従来から、オブジェクトを単位として構成されるコンピュータのソフトウェアとして、オブジェクト指向システムが知られている。ここで、オブジェクトとは、現実の世界に存在する各種の実体に対応するソフトウェア上の単位であり、お互いにメッセージを交換することで情報処理の目的を達成するものである。【０００３】
そして、当該オブジェクト指向システムにおいて、複雑なプログラムを開発する場合には、プログラムの内部構造を設計書で記述し、該設計に従って開発を進める。しかし、仕様変更や実装上の問題から設計完了後にも内部構造が変更となることは多く、そのような場合にはソースコードと設計書の内容が乖離してしまう。また、設計書では、全体の構成は記述されていても、 特定の細かい部分の構成は記述されていないことが多い。このため、開発の途中でソースコードの構造を知りたい場合は、あらかじめ用意された設計書だけではなく、ソースコードも直接視覚化できることが便利で望ましい。【０００４】
しかしながら、オブジェクト指向システムにおいて、上記のような開発や修正等の作業を支援する代表的な機能としては、以下のようなものであった。すなわち、与えられたソースコードを静的解析した結果や、プログラム実行時に記録した情報を後で解析した結果として、オブジェクトやそのクラス間の関係や関数呼び出し間の関係を、関係するクラス間を結ぶ等の形でシステム構成図上に表示するというものであった。【０００５】
ところで、例えば特許文献１では、対象プログラム実行の際に得られたログ情報に基づいてシーケンス図情報を生成し、該情報から対象プログラムの実行結果を構造化表示したシーケンス図を表示するシーケンス図表示装置が提案されている。また、例えば特許文献２では、要求文から自然言語解析により抽出されたオブジェクトをもとにクラス図を作成するオブジェクト指向分析設計支援装置が開示されている。また、例えば特許文献３では、対象プログラムを１ステップずつ実行してステップごとにオブジェクトのフィールド情報を取得し、各オブジェクトの状態単位での因果関係を抽出するプログラム解析装置が提案されている。また、例えば特許文献４では、オブジェクト指向言語で記述されたソースコードからオブジェクト図を出力するオブジェクト図表示装置が開示されている。
【特許文献１】特開２００５−９２６０９号公報
【特許文献２】特開２００５−２９３５２６号公報
【特許文献３】特開２００６−１８５２１１号公報
【特許文献４】特開平９−１８５４９７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
先に述べたように、ソフトウェア開発においては、開発人員を増やす場合やリファクタリングを行う際に、ソースコードの構造を視覚化することで効率良くソースコードの内容を把握できる。例えば、Ｊａｖａ（登録商標）等のオブジェクト指向言語からクラス図を作成し表示することは従来から広く行われているが、メソッドやフィールドの一覧、継承関係等は図示できても包含関係や関連を図示することは困難であった。これには２つの理由がある。１つは、プログラムに含まれる参照関係の数が多いことから、全ての参照関係を表示するときには必要な情報が埋もれてしまうという問題である。もう１つは、インタフェースや抽象クラスが参照されている場合、実際にどのクラスとどのクラスが関係を持つのかがわかりにくくなるという問題である。【０００７】
そこで、本発明は、オブジェクト指向言語で記述されたソースコードの視覚化に際して、包含関係や関連を含むクラス間の関係情報でユーザに必要な情報を表示するとともに、実際にプログラムを実行した場合のクラス間関係を明確化することで、ユーザのソフトウェア開発を効果的に支援することを目的とする。
【課題を解決するための手段】
【０００８】
かかる目的を達成するために、本発明は、オブジェクト指向言語で記述されたソースコード及びユーザが着目する機能に関するテストケースの入力から、該着目機能に実質的に関わりのあるオブジェクト及び重要度の高いオブジェクト間関係についてオブジェクト図を作成し表示することを特徴とする。【０００９】
より詳細には、ログを出力するログ出力部品をオブジェクト指向言語で記述されたソースコードに対して挿入し、ログ取得可能なプログラムに加工するソースコード加工手段と、前記ソースコード加工手段により加工されたプログラムについてユーザが着目する機能に関するテストケースで実行し、ログを取得するテスト実行手段と、前記テスト実行手段により取得されたログを解析し、オブジェクトの一覧と該オブジェクト間の関係を収集するログ解析手段と、前記ログ解析手段により収集されたオブジェクト間の関係をもとに、重要度の高いオブジェクトの組み合わせをつなぎあわせてオブジェクト構造を抽出するオブジェクト構造抽出手段と、前記オブジェクト構造抽出手段により抽出されたオブジェクト構造をオブジェクト図として表示する表示手段と、を有することを特徴とする。【００１０】
ソースコード加工手段により、対象プログラムに対しログ出力部品を埋め込んでログを取得できるようにしておき、テスト実行手段により、ユーザが着目する機能に関するテストケースでプログラムを実行する。そして、ログ解析手段により、テスト実行で得られたログから着目機能に関わりのあるオブジェクト一覧及びオブジェクト間関係を収集し、オブジェクト構造抽出手段により、重要度が高いと予測されたオブジェクト間関係を抽出してオブジェクト図情報を生成し、表示手段により、オブジェクト図を作成し表示する。【００１１】
上記構成では、テスト実行の際に生成されたログファイルに含まれるログ情報に基づいてオブジェクト図情報を生成する。ユーザが調べたい動作についてのテストケースを実行し、ログの傾向から重要と思われる情報のみを表示することで、調べたい情報が埋もれてしまうのを防ぐことができる。また、実際に動作しているときの参照関係を取り出すため、ソースコード上でインタフェースや抽象クラスが使われている場合にも実際に関係を持っているオブジェクトがどれなのかを把握できるようになる。【００１２】
また、本発明は、ログを出力するログ出力部品を、オブジェクト指向言語で記述されたソースコードに対して挿入し、ログ取得可能なプログラムに加工するソースコード加工工程と、ソースコード加工工程により加工されたプログラムについて、ユーザが着目する機能に関するテストケースで実行し、ログを取得するテスト実行工程と、テスト実行工程により取得されたログを解析し、オブジェクトの一覧と該オブジェクト間の関係を収集するログ解析工程と、ログ解析工程により収集されたオブジェクト間の関係をもとに、重要度の高いオブジェクトの組み合わせをつなぎあわせてオブジェクト構造を抽出するオブジェクト構造抽出工程と、オブジェクト構造抽出工程により抽出されたオブジェクト構造をオブジェクト図として表示する表示工程と、を有することを特徴とするオブジェクト図表示方法であってもよい。【００１３】
また、本発明は、ログを出力するログ出力部品を、オブジェクト指向言語で記述されたソースコードに対して挿入し、ログ取得可能なプログラムに加工するソースコード加工機能と、ソースコード加工機能により加工されたプログラムについて、ユーザが着目する機能に関するテストケースで実行し、ログを取得するテスト実行機能と、テスト実行機能により取得されたログを解析し、オブジェクトの一覧と該オブジェクト間の関係を収集するログ解析機能と、ログ解析機能により収集されたオブジェクト間の関係をもとに、重要度の高いオブジェクトの組み合わせをつなぎあわせてオブジェクト構造を抽出するオブジェクト構造抽出機能と、オブジェクト構造抽出機能により抽出されたオブジェクト構造をオブジェクト図として表示する表示機能と、をコンピュータに実行させることを特徴とするプログラムであってもよい。【００１４】
また、本発明は、上記プログラムを記録したコンピュータ読み取り可能な記録媒体であってもよい。
【発明の効果】
【００１５】
本発明によれば、オブジェクト指向言語で記述されたソースコードの視覚化に際して、包含関係や関連を含むクラス間の関係情報でユーザに必要な情報を表示するとともに、実際にプログラムを実行した場合のクラス間関係を明確化することで、ユーザのソフトウェア開発の効果的な支援が実現される。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施形態に係るオブジェクト図表示装置の概略構成及び処理の流れを説明するための図である。
【図２】従来技術を用いて、オブジェクト指向言語で記述されたソースコードをクラス図に表示したものである。
【図３】本発明の実施形態におけるログ出力処理を説明するための図である。
【図４】本発明の実施形態におけるログ出力処理を説明するための図である。
【図５】本発明の実施形態において出力されたオブジェクト図の例である。
【図６】本発明の実施形態において出力されたオブジェクト図の例である。
【図７】本発明の実施形態において出力されたオブジェクト図の例である。
【図８】本発明の実施形態において出力されたオブジェクト図の例である。
【図９】本発明の実施形態に係るオブジェクト図表示装置の概略構成及び処理の流れを説明するための図である。
【図１０】本発明の実施形態に係るオブジェクト図表示装置の概略構成及び処理の流れを説明するための図である。
【符号の説明】
【００１７】
１０１    ログ出力部品追加部
１０２    テスト実行部
１０３    ログ解析部
１０４    オブジェクト構造抽出部
１０５    表示部
１０６    クラス図生成部
１０７    ソースコード解析部
１０８    クラス図合成部
２０１    ソースコード・テストケース
２０２    ログ取得可能なプログラム
２０３    ログ
２０４    解析済みログ
２０５    オブジェクト図情報
２０６    クラス図情報
２０７    ソースコード
２０８    静的なクラス情報
２０９    合成クラス図情報
【発明を実施するための最良の形態】
【００１８】
以下、図面を参照しながら、本発明の実施形態のオブジェクト図表示装置について説明する。なお、実施形態は、第１の実施形態から第４の実施形態に分けて述べる。実施形態１は本発明において基本的な処理を行う構成を示し、実施形態２から実施形態４は実施形態１に別の処理を追加したり、別の機能を入れ替えたりする構成を示している。詳細は後述する。【００１９】
本実施形態における入力例として、ここでは書籍販売サービスのプログラムを考える。当該プログラムでは、出版サービスの出版した本を、書籍販売サービスが販売し、配達サービスを利用して配達する。また、家庭用のホームシステムが書籍販売サービスと連携してサービスと仲介する。上記プログラムを既存の手法で視覚化すると図２のようになる。【００２０】
図２はクラス図としてプログラムを視覚化したものであり、クラスの継承関係を矢印で表現している。例えば、「ＤｅｌｉｖｅｒｙＳｔｏｒｅ」、「Ｐｕｂｌｉｓｈｅｒ」、及び「ＢｏｏｋＳｔｏｒｅ」が「ＩＳｅｒｖｅｒ」であることを確認できる。しかし、それ以外のクラス間の関係（関連、依存等）は図示できていない。クラスの継承関係の情報はプログラム中に明記されるため、このような図示が可能であるが、既存の手法を用いて継承以外の関係を自動的かつ適切に図示することは困難であった。【００２１】
［実施形態１］
まず、本発明の第１の実施形態におけるオブジェクト図表示装置の主要な構成とオブジェクト図表示の処理について説明する。図１は、本実施形態のオブジェクト図表示装置の概略構成及び処理の流れを示した図である。本オブジェクト図表示装置は、ログ出力部品追加部１０１、テスト実行部１０２、ログ解析部１０３、オブジェクト構造抽出部１０４、及び表示部１０５を有している。【００２２】
ログ出力部品追加部１０１は、対象となるプログラムに対してログ出力部品（ログを出力するための部品）を挿入する。なお、対象となるプログラムは、ソースコード・テストケース２０１で、オブジェクト指向言語で記述されたソースコード（ユーザが着目する機能に関するテストケースで実行されるもの）が対象となる。また、ログの挿入範囲はユーザが指定できるようにする。ログ出力部品は、２つのオブジェクトが関係を持つ場合に、２つのオブジェクトの識別子名と、オブジェクトが持つ関係の種類とをログとして出力する。ここで、オブジェクトＡとオブジェクトＢが関係を持つとは、オブジェクトＡがオブジェクトＢに対する処理を実行することである。【００２３】
ログ出力部品は、例えば以下の動作が実行される場合に、オブジェクトＡとオブジェクトＢの間に関係があるものとしてログ出力を行う。なお、ログ出力部品に対して、下記以外の動作でオブジェクト間の関係を推測させるものを設定することは可能であり、ログ出力部品の機能は下記に限られない。
・オブジェクトＡがオブジェクトＢを生成する
・オブジェクトＡのフィールドにオブジェクトＢへの参照が代入される
・オブジェクトＡがオブジェクトＢのメソッドを呼び出す
・オブジェクトＡがオブジェクトＢを生成し、さらにオブジェクトＡのフィールドにその参照を代入する【００２４】
図３は本実施形態の入力例の書籍販売サービスのプログラムである。ここで、２、３、４、５、９、１０、１１行目のメソッド呼び出し、１３行目のオブジェクト生成、１４行目のフィールドへの代入の各箇所にログ出力部品を埋め込む。例えば「ｐｕｂｌｉｓｈｅｒ．ｂｕｙ（ｂｏｏｋ）：」の箇所では、ＢｏｏｋＳｔｏｒｅオブジェクトがＰｕｂｌｉｓｈｅｒオブジェクトのｂｕｙメソッドを呼び出しているため、両オブジェクトの関係についてログ出力を行うべくログ出力部品を埋め込む。他の箇所についても上記動作に該当していることから、オブジェクト間の関係をログ出力するためにログ出力部品を埋め込む。【００２５】
なお、実装方法の例としては、ＡＯＰ（Aspect Oriented Program）技術を用いてメソッドの呼び出しやフィールドへの代入部分にアスペクトを挿入することで、 ログを記録することができる。【００２６】
テスト実行部１０２は、ログ出力部品を埋め込んだログ取得可能なプログラム２０２を、着目する機能に関するテストケースで実行する。ログ出力部品を対象プログラムに挿入してあることから、テスト実行後にはログ２０３が得られる。ログの例を図４に示す。先述したように、ログ出力部品は、２つの要素の識別子名と関係の種類とをログとして出力するため、図４においても２つのオブジェクト名とオブジェクト間の関係の種類が表されている。【００２７】
ログ解析部１０３は、取得したログ２０３を読み込み、オブジェクトの一覧とオブジェクト間の関係とを収集して、解析済みログ２０４を得る。 なお、ログ出力部品で必要な情報のみを出力してあれば、出力ファイルの内容をメモリ上に読み込むだけでよい。【００２８】
オブジェクト構造抽出部１０４では、ログ解析部１０３で収集したオブジェクト間関係をつなぎあわせてオブジェクト図情報２０５を生成する。このとき、着目機能にとって重要と予測される関係のみを抽出する。【００２９】
着目機能にとって重要か否かの予測は、例えば以下の点を考慮した関係の重み付けを行ってオブジェクト間関係を点数化し、各関係の点数をもとに行う。
・メソッド呼び出し、オブジェクト生成等の関係の種類により重要度は異なる
・メソッド呼び出しを繰り返し行う場合等は、全体としてオブジェクト間の関係は強い
・汎用的なオブジェクトは通常多数のオブジェクトとの関係を持つが、ひとつひとつの関係は弱くなる【００３０】
また、点数化の一例としては、以下のような計算式が考えられる。
・オブジェクト生成に１０点、フィールドへの代入に５点、メソッド呼び出しに１点の点数を与える
・各オブジェクトについて、点数の合計が１００点となるように点数を正規化する
・全てのオブジェクトの対について、オブジェクト間の関係の点数を合計する
・点数の多い順に関係を選び、選ぶ関係の個数はオブジェクト数Ｎと同数程度とする【００３１】
なお、上述した関係の重み付けやオブジェクト間関係の点数化は、あくまで一例でありこれに限られない。これらの重み付けや点数化は、アウトプットされるオブジェクト図の表示内容に影響する要素であり、ユーザが必要とする情報が表示されるように設定することが可能である。【００３２】
表示部１０５では、オブジェクト構造抽出部１０４で生成されたオブジェクト図情報２０５に基づいて、オブジェクト間を結ぶ線ができるだけ重ならないようにオブジェクトを配置し、オブジェクト図として表示する。【００３３】
次に、本実施形態のオブジェクト図表示処理を、冒頭に入力例として述べた書籍販売サービスのプログラムに適用した具体例について説明する。なお、図５から図８はオブジェクト図であるため、各オブジェクトに下線を付して表示しているが、本明細書では下線を付さずに表記する（但し、図からの引用を意味する意図から「」は付す）。【００３４】
図５は、該書籍販売システムにおいて、「本の一覧を表示し、そのうちの１冊を注文し、注文の一覧を確認する」という機能に着目したテストケースを実施し、そこで取得したログに基づいてオブジェクト図を作成したものである。図５では、単純に「メソッド呼び出し」等の回数を数えて、２回以上の関係があったものに線を引いている。既存の方法ではうまく視覚化できなかったオブジェクト間のつながり方が効果的に視覚化できている。【００３５】
また、図６は、コレクション・クラスを除外し、オブジェクトとコレクション内のオブジェクトに直接関係を結ぶようにした例である。 このことにより、図５では確認できなかった、Ｐｕｂｌｉｓｈｅｒ（「１４：Ｐｕｂｌｉｓｈｅｒ」）とＢｏｏｋ（「１ｃ：Ｂｏｏｋ」、「１ｆ：Ｂｏｏｋ」、「１９：Ｂｏｏｋ」）との関係が可視化されている。【００３６】
図７は、先に述べた関係の重み付け、すなわち、オブジェクト生成やフィールドへの代入に対する点数を高くして計算した例である。これにより、「４：ＢｏｏｋＳｔｏｒｅ」、「１４：Ｐｕｂｌｉｓｈｅｒ」、「ｄ：ＤｅｌｉｖｅｒｙＳｔｏｒｅ」といったサービスが、ＩＰＡｄｄｒｅｓｓ（「２：ＩＰＡｄｄｒｅｓｓ」、「１２：ＩＰＡｄｄｒｅｓｓ」、「ｄ：ＩＰＡｄｄｒｅｓｓ」）を持っているという所有関係が明確化できる。【００３７】
また、図８は、線の集中しているオブジェクトとの関係について、点数を下げるように調整した例である。テキストマイニング等で用いられるＴＦ−ＩＤＦ（Term Frequency-Inverse Document Frequency）の手法を用いて点数を調整することで、「４：ＢｏｏｋＳｔｏｒｅ」等に線が集中しすぎる傾向を軽減することに成功している。なお、図７では点数が最小だった［４：ＢｏｏｋＳｔｏｒｅ］−「２：ＩＰＡｄｄｒｅｓｓ」間の関係については、「２：ＩＰＡｄｄｒｅｓｓ」からの関係が少ないため重要度が高いと判断され、図８でも保存されている。【００３８】
なお、図５から図８までの例ではオブジェクト間の関係を全て通常の線で図示しているが、呼び出しの方向や所有関係等を明記するように改良する、例えば、線種や色、太さ等を使い分けることで、 単に関係があるというだけでなくどのような関係なのかも図示することが可能である。【００３９】
上記実施形態によれば、ソースコードの構造を理解するのに不要な情報を削除することができる。その理由は、着目する機能に関するテストケースを実行し、収集したログを分析することで重要な関係を抽出できるからである。また、インタフェースや抽象クラスが使われている場合にも実際に関係を持っているオブジェクトが把握できる。その理由は、実際に実行したログを元に関係を抽出するからである。【００４０】
［実施形態２］
本発明の第２の実施形態としては、ログ出力部品でオブジェクトの識別や関係の識別を行わず、加工前のスタックトレース等をそのまま記録する構成が考えられる。この場合、ログ解析部１０３（図１）でログの内容を解析し、オブジェクトの識別とオブジェクト間の関係の識別を行う必要がある。なお、図１の構成やオブジェクト構造抽出部の動作については、実施形態１と同様である。【００４１】
ログ出力の機能はプログラミング言語に依存するため複雑な処理ができない場合もあるが、本実施形態によれば、このような場合にログ出力の機能をできるだけ少なくして、対応することができる。【００４２】
［実施形態３］
本発明の第３の実施形態としては、オブジェクト図ではなくクラス図を出力する構成が考えられる。図９に示すように、オブジェクト図の場合（図１）と同様に、着目する機能についてのテストケースを実行し、オブジェクト構造抽出部１０４にて、ログを元にオブジェクト間の関係を抽出する。そして、クラス図生成部１０６により、抽出した結果のうち同じクラスのオブジェクトをまとめて集計して、クラス図情報２０６を生成し、表示部１０５が、クラス図情報２０６をもとにクラス図を作成する。【００４３】
本実施形態によれば、着目する機能を実行した場合のクラス間の継承関係等を把握することが可能となる。【００４４】
［実施形態４］
本発明の第４の実施形態としては、ソースコードを解析した静的なプログラムの構造を、ログを解析して抽出した構造と合わせて表示する構成が考えられる。図１０に示すように、実施形態３の処理（ログ出力部品追加部１０１から表示部１０５における処理）に、ソースコード解析部１０７の処理を加えた構成としている。つまり、ログ出力部品追加部１０１からオブジェクト構造抽出部１０４における処理により、テストケース実行のログからオブジェクト間の関係を抽出してオブジェクト図情報２０５を生成し、ソースコード解析部１０７により、ソースコード２０７を解析して静的なプログラム構造情報を取得する。そして、クラス図合成部１０８により、テスト実行時の関係及び静的なクラス構造を表示可能な合成クラス図情報２０９が生成される。表示部１０５は、生成された合成クラス図情報２０９をもとに図表示する。【００４５】
本実施形態によれば、クラス間の継承関係等と実行時の関係とを重ね合わせて表示することができ、プログラムの理解をさらに助けることが可能となる。【００４６】
なお、上述する実施形態は、本発明の好適な実施形態であり、上記実施形態のみに本発明の範囲を限定するものではなく、本発明の要旨を逸脱しない範囲において種々の変更を施した形態での実施が可能である。【００４７】
すなわち、上記した実施形態のオブジェクト図表示装置は、プログラムの命令により該表示装置内のＣＰＵ等で実行される処理等によって動作する。当該プログラムは、該表示装置の各構成要素に指令を送り、先に述べたような所定の処理、例えば、対象プログラムにログ出力部品を挿入してテストケースを実行し、テスト実行で得られたログからオブジェクト間の関係を抽出してオブジェクト図情報を生成する。このように、上記実施形態のオブジェクト図表示装置における各処理は、プログラム（ソフトウェア）とコンピュータ（ハードウェア）とが協働した具体的手段によって実現されるものである。【００４８】
そして、上記実施形態の機能を実現するソフトウェアのプログラムコードを記録したコンピュータ読み取り可能な記録媒体、すなわち記憶メディアを介して、オブジェクト図表示装置のＣＰＵが記憶メディアに格納されたプログラムコードを読み出し実行することによっても、本発明の目的は達成される。また、プログラムは、記録メディアを介さず、通信回線を通じて直接にオブジェクト図表示装置のＣＰＵにロードし実行することもでき、これによっても同様に本発明の目的は達成される。【００４９】
この場合、記憶メディアから読み出された又は通信回線を通じてロードし実行されたプログラムコード自体が前述の実施形態の処理機能を実現することになる。そして、そのプログラムコードを記憶した記憶メディアは本発明を構成する。なお、プログラムコードを供給するための記憶メディアとしては、例えば、フロッピー（登録商標）ディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、不揮発性のメモリカード、ＲＯＭ、磁気テープ等を用いることができる。
【産業上の利用可能性】
【００５０】
本発明は、オブジェクト図表示装置、オブジェクト図表示方法、プログラム、及びコンピュータ読み取り可能な記録媒体に関し、特に、ソースコード等からオブジェクト図を表示してソースコードの構造を把握する技術で、ソフトウェア解析に好適に適用される。
【図１】
2008096632.tif 000003
【図２】
2008096632.tif 000004
【図３】
2008096632.tif 000005
【図４】
2008096632.tif 000006
【図５】
2008096632.tif 000007
【図６】
2008096632.tif 000008
【図７】
2008096632.tif 000009
【図８】
2008096632.tif 000010
【図９】
2008096632.tif 000011
【図１０】
2008096632.tif 000012
【手続補正書】
【提出日】平成20年7月30日(2008.7.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ログを出力するログ出力部品をオブジェクト指向言語で記述されたソースコードに対して挿入し、ログ取得可能なプログラムに加工するソースコード加工手段と、
前記ソースコード加工手段により加工されたプログラムについてユーザが着目する機能に関するテストケースで実行し、ログを取得するテスト実行手段と、
前記テスト実行手段により取得されたログを解析し、オブジェクトの一覧と該オブジェクト間の関係を収集するログ解析手段と、
前記ログ解析手段により収集されたオブジェクト間の関係をもとに、重要度の高いオブジェクトの組み合わせをつなぎあわせてオブジェクト構造を抽出するオブジェクト構造抽出手段と、
前記オブジェクト構造抽出手段により抽出されたオブジェクト構造をオブジェクト図として表示する表示手段と、
を有することを特徴とするオブジェクト図表示装置。
【請求項２】
前記ログ出力部品は、２つのオブジェクトの識別子名及び関係の種類をログとして出力することを特徴とし、
前記ソースコード加工手段は、ソースコード中で２つのオブジェクトが関係を持つ箇所に前記ログ出力部品を埋め込むことを特徴とし、
前記２つのオブジェクトが関係を持つとは、一方のオブジェクトが他方のオブジェクトに対する処理を実行することを示す
請求項１に記載のオブジェクト図表示装置。
【請求項３】
前記ログ出力部品は、オブジェクトの識別子名及び関係の種類の情報を含む実行時のスタックトレースをそのまま記録することを特徴とする請求項１もしくは２に記載のオブジェクト図表示装置。
【請求項４】
前記オブジェクト構造抽出手段は、関係の種類ごとに定められた重み付け及び関係の数に基づいて、より重みの重い関係がより多く含まれるオブジェクトの組み合わせの重要度を高いと判断し、関係の重みが軽いか関係の数が少ない場合にはオブジェクトの組み合わせの重要度を低いと判断することを特徴とする請求項１から３のいずれか１項に記載のオブジェクト図表示装置。
【請求項５】
前記オブジェクト構造抽出手段は、前記ログ解析手段により収集されたオブジェクトの一覧から同じクラスのオブジェクトをまとめて集計することを特徴とする請求項１から４のいずれか１項に記載のオブジェクト図表示装置。
【請求項６】
前記ソースコードを解析して該ソースコードの静的構造を取得するソースコード解析手段と、
前記オブジェクト構造抽出手段により抽出されたオブジェクト構造と、前記ソースコード解析手段により取得された静的ソースコード構造とを合わせた構造図情報を生成する構造図情報生成手段と、をさらに有し、
前記表示手段は、前記構造図情報生成手段により生成された構造図情報をもとに、前記オブジェクト構造と前記静的ソースコード構造とを重ね合わせて表示することを特徴とする請求項１から５のいずれか１項に記載のオブジェクト図表示装置。
【請求項７】
ログを出力するログ出力部品を、オブジェクト指向言語で記述されたソースコードに対して挿入し、ログ取得可能なプログラムに加工するソースコード加工工程と、
前記ソースコード加工工程により加工されたプログラムについて、ユーザが着目する機能に関するテストケースで実行し、ログを取得するテスト実行工程と、
前記テスト実行工程により取得されたログを解析し、オブジェクトの一覧と該オブジェクト間の関係を収集するログ解析工程と、
前記ログ解析工程により収集されたオブジェクト間の関係をもとに、重要度の高いオブジェクトの組み合わせをつなぎあわせてオブジェクト構造を抽出するオブジェクト構造抽出工程と、
前記オブジェクト構造抽出工程により抽出されたオブジェクト構造をオブジェクト図として表示する表示工程と、
を有することを特徴とするオブジェクト図表示方法。
【請求項８】
前記ログ出力部品は、２つのオブジェクトの識別子名及び関係の種類をログとして出力することを特徴とし、
前記ソースコード加工工程は、ソースコード中で２つのオブジェクトが関係を持つ箇所に前記ログ出力部品を埋め込むことを特徴とし、
前記２つのオブジェクトが関係を持つとは、一方のオブジェクトが他方のオブジェクトに対する処理を実行することを示す
請求項７に記載のオブジェクト図表示方法。
【請求項９】
前記ログ出力部品は、オブジェクトの識別子名及び関係の種類の情報を含む実行時のスタックトレースをそのまま記録することを特徴とする請求項７に記載のオブジェクト図表示方法。
【請求項１０】
前記オブジェクト構造抽出工程は、関係の種類ごとに定められた重み付け及び関係の数に基づいて、より重みの重い関係がより多く含まれるオブジェクトの組み合わせの重要度を高いと判断し、関係の重みが軽いか関係の数が少ない場合にはオブジェクトの組み合わせの重要度を低いと判断することを特徴とする請求項７から９のいずれか１項に記載のオブジェクト図表示方法。
【請求項１１】
前記オブジェクト構造抽出工程は、前記ログ解析工程により収集されたオブジェクトの一覧から同じクラスのオブジェクトをまとめて集計することを特徴とする請求項７から１０のいずれか１項に記載のオブジェクト図表示方法。
【請求項１２】
前記ソースコードを解析して該ソースコードの静的構造を取得するソースコード解析工程と、
前記オブジェクト構造抽出工程により抽出されたオブジェクト構造と、前記ソースコード解析工程により取得された静的ソースコード構造とを合わせた構造図情報を生成する構造図情報生成工程と、をさらに有し、
前記表示工程は、前記構造図情報生成工程により生成された構造図情報をもとに、前記オブジェクト構造と前記静的ソースコード構造とを重ね合わせて表示することを特徴とする請求項７から１１のいずれか１項に記載のオブジェクト図表示方法。
【請求項１３】
ログを出力するログ出力部品を、オブジェクト指向言語で記述されたソースコードに対して挿入し、ログ取得可能なプログラムに加工するソースコード加工機能と、
前記ソースコード加工機能により加工されたプログラムについて、ユーザが着目する機能に関するテストケースで実行し、ログを取得するテスト実行機能と、
前記テスト実行機能により取得されたログを解析し、オブジェクトの一覧と該オブジェクト間の関係を収集するログ解析機能と、
前記ログ解析機能により収集されたオブジェクト間の関係をもとに、重要度の高いオブジェクトの組み合わせをつなぎあわせてオブジェクト構造を抽出するオブジェクト構造抽出機能と、
前記オブジェクト構造抽出機能により抽出されたオブジェクト構造をオブジェクト図として表示する表示機能と、
をコンピュータに実行させることを特徴とするプログラム。
【請求項１４】
前記ログ出力部品は、２つのオブジェクトの識別子名及び関係の種類をログとして出力することを特徴とし、
前記ソースコード加工機能は、ソースコード中で２つのオブジェクトが関係を持つ箇所に前記ログ出力部品を埋め込むことを特徴とし、
前記２つのオブジェクトが関係を持つとは、一方のオブジェクトが他方のオブジェクトに対する処理を実行することを示す
請求項１３に記載のプログラム。
【請求項１５】
前記ログ出力部品は、オブジェクトの識別子名及び関係の種類の情報を含む実行時のスタックトレースをそのまま記録することを特徴とする請求項１３に記載のプログラム。
【請求項１６】
前記オブジェクト構造抽出機能は、関係の種類ごとに定められた重み付け及び関係の数に基づいて、より重みの重い関係がより多く含まれるオブジェクトの組み合わせの重要度を高いと判断し、関係の重みが軽いか関係の数が少ない場合にはオブジェクトの組み合わせの重要度を低いと判断することを特徴とする請求項１３から１５のいずれか１項に記載のプログラム。
【請求項１７】
前記オブジェクト構造抽出機能は、前記ログ解析機能により収集されたオブジェクトの一覧から同じクラスのオブジェクトをまとめて集計することを特徴とする請求項１３から１６のいずれか１項に記載のプログラム。
【請求項１８】
前記ソースコードを解析して該ソースコードの静的構造を取得するソースコード解析機能と、
前記オブジェクト構造抽出機能により抽出されたオブジェクト構造と、前記ソースコード解析機能により取得された静的ソースコード構造とを合わせた構造図情報を生成する構造図情報生成機能と、をさらに有し、
前記表示機能は、前記構造図情報生成機能により生成された構造図情報をもとに、前記オブジェクト構造と前記静的ソースコード構造とを重ね合わせて表示することを特徴とする請求項１３から１７のいずれか１項に記載のプログラム。
【請求項１９】
請求項１３から１８のいずれか１項に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項２０】
オブジェクト指向言語で記述されたソースコード内のオブジェクトの構造をオブジェクト図として表示するオブジェクト図表示装置であって、
ソースコードにログを出力するコードを挿入するソースコード加工手段と、
前記挿入されたソースコードを実行してログを取得するログ取得手段と、
前記ログを解析してオブジェクト間の関係を収集するログ解析手段と、
オブジェクト間の関係の種類に応じた重みと、オブジェクト間の関係の数と、オブジェクトの呼び出し回数との少なくともいずれか一つに基づいて前記オブジェクト間の関係の重要性を評価する評価手段と、
オブジェクトの構造をオブジェクト図として表示するときに前記重要性の低いオブジェクト間の関係を表示しない表示手段と、
を有することを特徴とするオブジェクト図表示装置。
【請求項２１】
オブジェクト指向言語で記述されたソースコード内のオブジェクトの構造をオブジェクト図として表示するためのオブジェクト図表示方法であって、
ソースコードにログを出力するコードを挿入し、
前記挿入されたソースコードを実行してログを取得し、
前記ログを解析してオブジェクト間の関係を収集し、
オブジェクト間の関係の種類に応じた重みと、オブジェクト間の関係の数と、オブジェクトの呼び出し回数との少なくともいずれか一つに基づいて前記オブジェクト間の関係の重要性を評価し、
オブジェクトの構造をオブジェクト図として表示するときに前記重要性の低いオブジェクト間の関係を表示しない
ことを特徴とするオブジェクト図表示方法。
【請求項２２】
オブジェクト指向言語で記述されたソースコード内のオブジェクトの構造をオブジェクト図として表示する処理をコンピュータに実行させるためのプログラムであって、
ソースコードにログを出力するコードを挿入するソースコード加工機能と、
前記挿入されたソースコードを実行してログを取得するログ取得機能と、
前記ログを解析してオブジェクト間の関係を収集するログ解析機能と、
オブジェクト間の関係の種類に応じた重みと、オブジェクト間の関係の数と、オブジェクトの呼び出し回数との少なくともいずれか一つに基づいて前記オブジェクト間の関係の重要性を評価する評価機能と、
オブジェクトの構造をオブジェクト図として表示するときに前記重要性の低いオブジェクト間の関係を表示しない表示機能と
をコンピュータに実行させることを特徴とするプログラム。
【国際調査報告】
2008096632.tif 000013
2008096632.tif 000014
2008096632.tif 000015