(57)【特許請求の範囲】
【請求項１】
ソースコードを解析して、該ソースコードに含まれるモジュール間の処理を特定するシーケンス図を作成するシーケンス図作成装置において、
ソースコードを取得するコード取得手段と、
取得したソースコードを解析する解析手段と、
解析結果に基づいて、実行ログを取得するためのログ取得用コードを生成するログ取得用コード生成手段と、
生成したログ取得用コードを含むプログラムを実行して、実行時のログ情報である実行ログ情報を取得する実行ログ情報取得手段と、
取得した実行ログ情報に基づいて、状態及び該状態間の遷移に関するオートマトン情報を抽出するオートマトン情報抽出手段と、
抽出されたオートマトン情報を、シーケンス図を構成するシーケンス図構成要素情報へ変換する変換手段と、
変換されたシーケンス図構成要素情報に基づいてシーケンス図を生成する生成手段と
を備え、
前記解析手段は、
前記ソースコードに基づいて、コール関数及び被コール関数の対応関係に関する対応関係情報を取得するようにしてあり、
前記ログ取得用コード生成手段は、
コール関数及び被コール関数をモジュール単位で分類する分類情報を取得する分類情報取得手段と、
取得した前記対応関係情報から、コール関数と被コール関数とが異なり、コール関数及び被コール関数が異なるモジュールに分類されている対応関係情報のみを抽出する抽出手段と
を備え、
抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合に実行ログを出力する前記ログ取得用コードを生成するようにしてあることを特徴とするシーケンス図作成装置。
【請求項２】
ソースコードを解析して、該ソースコードに含まれるモジュール間の処理を特定するシーケンス図を作成するシーケンス図作成装置において、
ソースコードを取得するコード取得手段と、
取得したソースコードを解析する解析手段と、
解析結果に基づいて、実行ログを取得するためのログ取得用コードを生成するログ取得用コード生成手段と、
生成したログ取得用コードを含むプログラムを実行して、実行時のログ情報である実行ログ情報を取得する実行ログ情報取得手段と、
取得した実行ログ情報に基づいて、状態及び該状態間の遷移に関するオートマトン情報を抽出するオートマトン情報抽出手段と、
抽出されたオートマトン情報を、シーケンス図を構成するシーケンス図構成要素情報へ変換する変換手段と、
変換されたシーケンス図構成要素情報に基づいてシーケンス図を生成する生成手段と
を備え、
前記解析手段は、
前記ソースコードに基づいて、コール関数及び被コール関数の対応関係に関する対応関係情報を取得するようにしてあり、
前記ログ取得用コード生成手段は、
コール関数及び被コール関数をモジュール単位で分類する分類情報を取得する分類情報取得手段と、
取得した前記対応関係情報から、コール関数と被コール関数とが異なり、コール関数及び被コール関数が異なるモジュールに分類されている対応関係情報のみを抽出する抽出手段と
を備え、
抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合及びコール関数にリターンした場合に実行ログを出力する前記ログ取得用コードを生成するようにしてあることを特徴とするシーケンス図作成装置。
【請求項３】
ソースコードを解析して、該ソースコードに含まれるモジュール間の処理を特定するシーケンス図を作成するシーケンス図作成装置において、
ソースコードを取得するコード取得手段と、
取得したソースコードを解析して、コール関数及び被コール関数の対応関係に関する対応関係情報を取得する解析手段と、
コール関数及び被コール関数をモジュール単位で分類する分類情報を取得する分類情報取得手段と、
取得した前記対応関係情報から、コール関数と被コール関数とが異なり、コール関数及び被コール関数が異なるモジュールに分類されている対応関係情報のみを抽出する抽出手段と、
抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合に実行ログを出力するログ取得用コードを生成するログ取得用コード生成手段と、
生成したログ取得用コードを含むプログラムを実行して、実行時のログ情報である実行ログ情報を取得する実行ログ情報取得手段と、
取得した実行ログ情報に基づいて、状態及び該状態間の遷移に関するオートマトン情報を抽出するオートマトン情報抽出手段と、
抽出されたオートマトン情報を、シーケンス図を構成するシーケンス図構成要素情報へ変換する変換手段と、
変換されたシーケンス図構成要素情報に基づいてシーケンス図を生成する生成手段と
を備えることを特徴とするシーケンス図作成装置。
【請求項４】
ソースコードを解析して、該ソースコードに含まれるモジュール間の処理を特定するシーケンス図を作成するシーケンス図作成装置で実行することが可能なシーケンス図作成方法において、
ソースコードを取得し、
取得したソースコードに基づいて、コール関数及び被コール関数の対応関係に関する対応関係情報を取得し、
コール関数及び被コール関数をモジュール単位で分類する分類情報を取得し、
取得した前記対応関係情報から、コール関数と被コール関数とが異なり、コール関数及び被コール関数が異なるモジュールに分類されている対応関係情報のみを抽出し、
抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合に実行ログを出力するログ取得用コードを生成し、
生成したログ取得用コードを含むプログラムを実行して、実行時のログ情報である実行ログ情報を取得し、
取得した実行ログ情報に基づいて、状態及び該状態間の遷移に関するオートマトン情報を抽出し、
抽出されたオートマトン情報を、シーケンス図を構成するシーケンス図構成要素情報へ変換し、
変換されたシーケンス図構成要素情報に基づいてシーケンス図を生成することを特徴とするシーケンス図作成方法。
【請求項５】
ソースコードを解析して、該ソースコードに含まれるモジュール間の処理を特定するシーケンス図を作成するシーケンス図作成装置で実行することが可能なシーケンス図作成方法において、
ソースコードを取得し、
取得したソースコードに基づいて、コール関数及び被コール関数の対応関係に関する対応関係情報を取得し、
コール関数及び被コール関数をモジュール単位で分類する分類情報を取得し、
取得した前記対応関係情報から、コール関数と被コール関数とが異なり、コール関数及び被コール関数が異なるモジュールに分類されている対応関係情報のみを抽出し、
抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合及びコール関数にリターンした場合に実行ログを出力するログ取得用コードを生成し、
生成したログ取得用コードを含むプログラムを実行して、実行時のログ情報である実行ログ情報を取得し、
取得した実行ログ情報に基づいて、状態及び該状態間の遷移に関するオートマトン情報を抽出し、
抽出されたオートマトン情報を、シーケンス図を構成するシーケンス図構成要素情報へ変換し、
変換されたシーケンス図構成要素情報に基づいてシーケンス図を生成することを特徴とするシーケンス図作成方法。
【請求項６】
ソースコードを解析して、該ソースコードに含まれるモジュール間の処理を特定するシーケンス図を作成するシーケンス図作成装置で実行することが可能なコンピュータプログラムにおいて、
前記シーケンス図作成装置を、
ソースコードを取得するコード取得手段、
取得したソースコードを解析する解析手段、
解析結果に基づいて、実行ログを取得するためのログ取得用コードを生成するログ取得用コード生成手段、
生成したログ取得用コードを含むプログラムを実行して、実行時のログ情報である実行ログ情報を取得する実行ログ情報取得手段、
取得した実行ログ情報に基づいて、状態及び該状態間の遷移に関するオートマトン情報を抽出するオートマトン情報抽出手段、
抽出されたオートマトン情報を、シーケンス図を構成するシーケンス図構成要素情報へ変換する変換手段、及び
変換されたシーケンス図構成要素情報に基づいてシーケンス図を生成する生成手段
として機能させ、
前記解析手段を、
前記ソースコードに基づいて、コール関数及び被コール関数の対応関係に関する対応関係情報を取得する手段として機能させ、
前記ログ取得用コード生成手段を、
コール関数及び被コール関数をモジュール単位で分類する分類情報を取得する分類情報取得手段、
取得した前記対応関係情報から、コール関数と被コール関数とが異なり、コール関数及び被コール関数が異なるモジュールに分類されている対応関係情報のみを抽出する抽出手段、及び
抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合に実行ログを出力する前記ログ取得用コードを生成する手段
として機能させることを特徴とするコンピュータプログラム。
【請求項７】
ソースコードを解析して、該ソースコードに含まれるモジュール間の処理を特定するシーケンス図を作成するシーケンス図作成装置で実行することが可能なコンピュータプログラムにおいて、
前記シーケンス図作成装置を、
ソースコードを取得するコード取得手段、
取得したソースコードを解析する解析手段、
解析結果に基づいて、実行ログを取得するためのログ取得用コードを生成するログ取得用コード生成手段、
生成したログ取得用コードを含むプログラムを実行して、実行時のログ情報である実行ログ情報を取得する実行ログ情報取得手段、
取得した実行ログ情報に基づいて、状態及び該状態間の遷移に関するオートマトン情報を抽出するオートマトン情報抽出手段、
抽出されたオートマトン情報を、シーケンス図を構成するシーケンス図構成要素情報へ変換する変換手段、及び
変換されたシーケンス図構成要素情報に基づいてシーケンス図を生成する生成手段
として機能させ、
前記解析手段を、
前記ソースコードに基づいて、コール関数及び被コール関数の対応関係に関する対応関係情報を取得する手段として機能させ、
前記ログ取得用コード生成手段を、
コール関数及び被コール関数をモジュール単位で分類する分類情報を取得する分類情報取得手段、
取得した前記対応関係情報から、コール関数と被コール関数とが異なり、コール関数及び被コール関数が異なるモジュールに分類されている対応関係情報のみを抽出する抽出手段、及び
抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合及びコール関数にリターンした場合に実行ログを出力する前記ログ取得用コードを生成する手段
として機能させることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、大規模のソースコードであっても、特定のユースケース、関心に即してモデル化対象を絞り込んだシーケンス図を作成することができるシーケンス図作成装置、シーケンス図作成方法及びコンピュータプログラムに関する。
【背景技術】
【０００２】
近年、システム開発は規模の増大、多機能化等に伴い、その構造は複雑化の一途をたどっている。このような大規模システムの生産性及び品質の向上を図るために、様々なシステム開発手法が提案されている。例えばモデル駆動型開発（Ｍｏｄｅｌ−Ｄｒｉｖｅｎ  Ｄｅｖｅｌｏｐｍｅｎｔ）では、分析段階、設計段階等の成果物をモデルとして記述することで、プログラムの生産性向上を図ると共に、バグ等の発生確率を低減して品質の向上を図っている。
【０００３】
モデル駆動型開発では、適切なモデルさえ記述できれば生産性、品質の向上を図ることができるが、実際にはモデル化すること自体が困難なケースが多い。特にシステムの振る舞いをモデル化することは困難であり、効率的なシステム開発の阻害要因の一つとなっている。
【０００４】
斯かる問題点を解決するべく、例えば特許文献１では、ソースコードに含まれる関数の呼び出し及び戻りをトレースし、関数に関係する機能ブロックの情報を含むトレース結果に基づいて、機能ブロック間の呼び出し及び戻りを表現するシーケンス図を作成するシーケンス図作成装置が開示されている。ソースコードに基づいて機能間の処理の流れを把握することができ、モデル化を正確に行うことが可能となる。
【０００５】
また、特許文献２では、プログラム実行時に生成されたログファイルに含まれるログ情報に基づいて、プログラムに含まれる各オブジェクトを時系列に対応付けて構造化した構造化情報を生成し、構造化情報に基づくシーケンス図を生成して表示するシーケンス図表示装置が開示されている。ログ情報に基づいてシーケンス図を生成することから、実行プラグラムに相当するシーケンス図を生成することができる。
【特許文献１】特開２００４−０９４４９６号公報
【特許文献２】特開２００５−０９２６０９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、特許文献１に開示されているシーケンス図作成装置は、ソースコードに基づいてシーケンス図を作成していることから、大規模システムである場合にはソースコードの解析結果が複雑であり、しかもユースケース、関心の対象等に即してモデル化対象を絞り込むことができない。また、差分開発によって使用されないコードが含まれていた場合であっても、それらが混在したままモデル化されるため、作成されたシーケンス図が複雑であり、システムの解析を行うことが困難であるという問題点があった。
【０００７】
また、特許文献２に開示されているシーケンス図表示装置では、繰り返し、分岐等の構造を抽出することができない。したがって、ログ情報が膨大である場合には、巨大で複雑なシーケンス図が生成され、システムの解析を行うことが困難であるという問題点があった。
【０００８】
本発明は斯かる事情に鑑みてなされたものであり、大規模なソースコードであっても、繰り返し、分岐等を検出しつつ必要な部分のみモデル化したシーケンス図を生成することができるシーケンス図作成装置、シーケンス図作成方法及びコンピュータプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するために第１発明に係るシーケンス図作成装置は、ソースコードを解析して、該ソースコードに含まれるモジュール間の処理を特定するシーケンス図を作成するシーケンス図作成装置において、ソースコードを取得するコード取得手段と、取得したソースコードを解析する解析手段と、解析結果に基づいて、実行ログを取得するためのログ取得用コードを生成するログ取得用コード生成手段と、生成したログ取得用コードを含むプログラムを実行して、実行時のログ情報である実行ログ情報を取得する実行ログ情報取得手段と、取得した実行ログ情報に基づいて、状態及び該状態間の遷移に関するオートマトン情報を抽出するオートマトン情報抽出手段と、抽出されたオートマトン情報を、シーケンス図を構成するシーケンス図構成要素情報へ変換する変換手段と、変換されたシーケンス図構成要素情報に基づいてシーケンス図を生成する生成手段とを備え、前記解析手段は、前記ソースコードに基づいて、コール関数及び被コール関数の対応関係に関する対応関係情報を取得するようにしてあり、前記ログ取得用コード生成手段は、コール関数及び被コール関数をモジュール単位で分類する分類情報を取得する分類情報取得手段と、取得した前記対応関係情報から、コール関数と被コール関数とが異なり、コール関数及び被コール関数が異なるモジュールに分類されている対応関係情報のみを抽出する抽出手段とを備え、抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合に実行ログを出力する前記ログ取得用コードを生成するようにしてあることを特徴とする。
【００１１】
また、第２発明に係るシーケンス図作成装置は、ソースコードを解析して、該ソースコードに含まれるモジュール間の処理を特定するシーケンス図を作成するシーケンス図作成装置において、ソースコードを取得するコード取得手段と、取得したソースコードを解析する解析手段と、解析結果に基づいて、実行ログを取得するためのログ取得用コードを生成するログ取得用コード生成手段と、生成したログ取得用コードを含むプログラムを実行して、実行時のログ情報である実行ログ情報を取得する実行ログ情報取得手段と、取得した実行ログ情報に基づいて、状態及び該状態間の遷移に関するオートマトン情報を抽出するオートマトン情報抽出手段と、抽出されたオートマトン情報を、シーケンス図を構成するシーケンス図構成要素情報へ変換する変換手段と、変換されたシーケンス図構成要素情報に基づいてシーケンス図を生成する生成手段とを備え、前記解析手段は、前記ソースコードに基づいて、コール関数及び被コール関数の対応関係に関する対応関係情報を取得するようにしてあり、前記ログ取得用コード生成手段は、コール関数及び被コール関数をモジュール単位で分類する分類情報を取得する分類情報取得手段と、取得した前記対応関係情報から、コール関数と被コール関数とが異なり、コール関数及び被コール関数が異なるモジュールに分類されている対応関係情報のみを抽出する抽出手段とを備え、抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合及びコール関数にリターンした場合に実行ログを出力する前記ログ取得用コードを生成するようにしてあることを特徴とする。
【００１２】
上記目的を達成するために第３発明に係るシーケンス図作成装置は、ソースコードを解析して、該ソースコードに含まれるモジュール間の処理を特定するシーケンス図を作成するシーケンス図作成装置において、ソースコードを取得するコード取得手段と、取得したソースコードを解析して、コール関数及び被コール関数の対応関係に関する対応関係情報を取得する解析手段と、コール関数及び被コール関数をモジュール単位で分類する分類情報を取得する分類情報取得手段と、取得した前記対応関係情報から、コール関数と被コール関数とが異なり、コール関数及び被コール関数が異なるモジュールに分類されている対応関係情報のみを抽出する抽出手段と、抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合に実行ログを出力するログ取得用コードを生成するログ取得用コード生成手段と、生成したログ取得用コードを含むプログラムを実行して、実行時のログ情報である実行ログ情報を取得する実行ログ情報取得手段と、取得した実行ログ情報に基づいて、状態及び該状態間の遷移に関するオートマトン情報を抽出するオートマトン情報抽出手段と、抽出されたオートマトン情報を、シーケンス図を構成するシーケンス図構成要素情報へ変換する変換手段と、変換されたシーケンス図構成要素情報に基づいてシーケンス図を生成する生成手段とを備えることを特徴とする。
【００１３】
上記目的を達成するために第４発明に係るシーケンス図作成方法は、ソースコードを解析して、該ソースコードに含まれるモジュール間の処理を特定するシーケンス図を作成するシーケンス図作成装置で実行することが可能なシーケンス図作成方法において、ソースコードを取得し、取得したソースコードに基づいて、コール関数及び被コール関数の対応関係に関する対応関係情報を取得し、コール関数及び被コール関数をモジュール単位で分類する分類情報を取得し、取得した前記対応関係情報から、コール関数と被コール関数とが異なり、コール関数及び被コール関数が異なるモジュールに分類されている対応関係情報のみを抽出し、抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合に実行ログを出力するログ取得用コードを生成し、生成したログ取得用コードを含むプログラムを実行して、実行時のログ情報である実行ログ情報を取得し、取得した実行ログ情報に基づいて、状態及び該状態間の遷移に関するオートマトン情報を抽出し、抽出されたオートマトン情報を、シーケンス図を構成するシーケンス図構成要素情報へ変換し、変換されたシーケンス図構成要素情報に基づいてシーケンス図を生成することを特徴とする。
【００１５】
また、第５発明に係るシーケンス図作成方法は、ソースコードを解析して、該ソースコードに含まれるモジュール間の処理を特定するシーケンス図を作成するシーケンス図作成装置で実行することが可能なシーケンス図作成方法において、ソースコードを取得し、取得したソースコードに基づいて、コール関数及び被コール関数の対応関係に関する対応関係情報を取得し、コール関数及び被コール関数をモジュール単位で分類する分類情報を取得し、取得した前記対応関係情報から、コール関数と被コール関数とが異なり、コール関数及び被コール関数が異なるモジュールに分類されている対応関係情報のみを抽出し、抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合及びコール関数にリターンした場合に実行ログを出力するログ取得用コードを生成し、生成したログ取得用コードを含むプログラムを実行して、実行時のログ情報である実行ログ情報を取得し、取得した実行ログ情報に基づいて、状態及び該状態間の遷移に関するオートマトン情報を抽出し、抽出されたオートマトン情報を、シーケンス図を構成するシーケンス図構成要素情報へ変換し、変換されたシーケンス図構成要素情報に基づいてシーケンス図を生成することを特徴とする。
【００１６】
上記目的を達成するために第６発明に係るコンピュータプログラムは、ソースコードを解析して、該ソースコードに含まれるモジュール間の処理を特定するシーケンス図を作成するシーケンス図作成装置で実行することが可能なコンピュータプログラムにおいて、前記シーケンス図作成装置を、ソースコードを取得するコード取得手段、取得したソースコードを解析する解析手段、解析結果に基づいて、実行ログを取得するためのログ取得用コードを生成するログ取得用コード生成手段、生成したログ取得用コードを含むプログラムを実行して、実行時のログ情報である実行ログ情報を取得する実行ログ情報取得手段、取得した実行ログ情報に基づいて、状態及び該状態間の遷移に関するオートマトン情報を抽出するオートマトン情報抽出手段、抽出されたオートマトン情報を、シーケンス図を構成するシーケンス図構成要素情報へ変換する変換手段、及び変換されたシーケンス図構成要素情報に基づいてシーケンス図を生成する生成手段として機能させ、前記解析手段を、前記ソースコードに基づいて、コール関数及び被コール関数の対応関係に関する対応関係情報を取得する手段として機能させ、前記ログ取得用コード生成手段を、コール関数及び被コール関数をモジュール単位で分類する分類情報を取得する分類情報取得手段、取得した前記対応関係情報から、コール関数と被コール関数とが異なり、コール関数及び被コール関数が異なるモジュールに分類されている対応関係情報のみを抽出する抽出手段、及び抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合に実行ログを出力する前記ログ取得用コードを生成する手段として機能させることを特徴とする。
【００１８】
また、第７発明に係るコンピュータプログラムは、ソースコードを解析して、該ソースコードに含まれるモジュール間の処理を特定するシーケンス図を作成するシーケンス図作成装置で実行することが可能なコンピュータプログラムにおいて、前記シーケンス図作成装置を、ソースコードを取得するコード取得手段、取得したソースコードを解析する解析手段、解析結果に基づいて、実行ログを取得するためのログ取得用コードを生成するログ取得用コード生成手段、生成したログ取得用コードを含むプログラムを実行して、実行時のログ情報である実行ログ情報を取得する実行ログ情報取得手段、取得した実行ログ情報に基づいて、状態及び該状態間の遷移に関するオートマトン情報を抽出するオートマトン情報抽出手段、抽出されたオートマトン情報を、シーケンス図を構成するシーケンス図構成要素情報へ変換する変換手段、及び変換されたシーケンス図構成要素情報に基づいてシーケンス図を生成する生成手段として機能させ、前記解析手段を、前記ソースコードに基づいて、コール関数及び被コール関数の対応関係に関する対応関係情報を取得する手段として機能させ、前記ログ取得用コード生成手段を、コール関数及び被コール関数をモジュール単位で分類する分類情報を取得する分類情報取得手段、取得した前記対応関係情報から、コール関数と被コール関数とが異なり、コール関数及び被コール関数が異なるモジュールに分類されている対応関係情報のみを抽出する抽出手段、及び抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合及びコール関数にリターンした場合に実行ログを出力する前記ログ取得用コードを生成する手段として機能させることを特徴とする。
【００１９】
第１発明、第４発明及び第６発明では、ソースコードを解析して、該ソースコードに含まれるモジュール間の処理を特定するシーケンス図を作成する。ソースコードを取得し、取得したソースコードを解析する。解析結果に基づいて、実行ログを取得するためのログ取得用コードを生成し、生成したログ取得用コードを含むプログラムを実行して、実行時のログ情報である実行ログ情報を取得する。取得した実行ログ情報に基づいて、状態及び該状態間の遷移に関するオートマトン情報を抽出し、抽出されたオートマトン情報を、シーケンス図を構成するシーケンス図構成要素情報へ変換し、変換されたシーケンス図構成要素情報に基づいてシーケンス図を生成する。ソースコードに基づいて解析することから、モデル化を意識する必要が無く、実行ログ情報に基づいてシーケンス図として表示する必要がある部分に関する実行ログを取得することで、必要最小限の構造を有するシーケンス図を容易に作成することができる。したがって、ソースコードが大規模で複雑な構造を有する場合であっても、構造が簡素なシーケンス図を作成することができ、シーケンス図に基づくシステム解析により、ボトルネックの発生箇所の特定等、システムの問題点を明確にすることが可能となる。
【００２０】
また、ソースコードに基づいて、コール関数及び被コール関数の対応関係に関する対応関係情報を取得し、コール関数及び被コール関数をモジュール単位で分類する分類情報を取得する。取得した対応関係情報から、コール関数と被コール関数とが異なり、コール関数及び被コール関数が異なるモジュールに分類されている対応関係情報のみを抽出し、抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合に実行ログを出力するログ取得用コードを生成する。モジュール単位でコール関数及び被コール関数の対応関係を特定することができ、モジュール間のプロセス遷移ログを確実に取得することができる。したがって、モデル化を意識することなく、シーケンス図として表示する必要がある部分に関する実行ログを取得することができ、必要最小限の構造を有するシーケンス図を容易に作成することが可能となる。
【００２１】
第２発明、第５発明及び第７発明では、ソースコードに基づいて、コール関数及び被コール関数の対応関係に関する対応関係情報を取得し、コール関数及び被コール関数をモジュール単位で分類する分類情報を取得する。取得した対応関係情報から、コール関数と被コール関数とが異なり、コール関数及び被コール関数が異なるモジュールに分類されている対応関係情報のみを抽出し、抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合及びコール関数にリターンした場合に実行ログを出力するログ取得用コードを生成する。モジュール単位でコール関数及び被コール関数の対応関係を特定するとともに、コール関数のリターン実行タイミングについても特定することができ、モジュール間のプロセス遷移ログ及び所定の関数が実行されているタイミングを確実に取得することができる。したがって、モデル化を意識することなく、シーケンス図として表示する必要がある部分に関する実行ログをより精緻に取得することができ、モジュールの実行オカレンスを含むシーケンス図を容易に作成することが可能となる。
【００２２】
第３発明では、ソースコードを解析して、該ソースコードに含まれるモジュール間の処理を特定するシーケンス図を作成する。ソースコードを取得し、取得したソースコードを解析して、コール関数及び被コール関数の対応関係に関する対応関係情報を取得する。コール関数及び被コール関数をモジュール単位で分類する分類情報を取得し、取得した対応関係情報から、コール関数と被コール関数とが異なり、コール関数及び被コール関数が異なるモジュールに分類されている対応関係情報のみを抽出する。抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合に実行ログを出力するログ取得用コードを生成し、生成したログ取得用コードを含むプログラムを実行して、実行時のログ情報である実行ログ情報を取得する。取得した実行ログ情報に基づいて、状態及び該状態間の遷移に関するオートマトン情報を抽出し、抽出されたオートマトン情報を、シーケンス図を構成するシーケンス図構成要素情報へ変換して、変換されたシーケンス図構成要素情報に基づいてシーケンス図を生成する。ソースコードに基づいて解析することから、モデル化を意識する必要が無く、実行ログ情報に基づいてシーケンス図として表示する必要がある部分に関する実行ログを取得することで、必要最小限の構造を有するシーケンス図を容易に作成することができる。したがって、ソースコードが大規模で複雑な構造を有する場合であっても、構造が簡素なシーケンス図を作成することができ、シーケンス図に基づくシステム解析により、ボトルネックの発生箇所の特定等、システムの問題点を明確にすることが可能となる。
【００２３】
なお、後述する実施の形態では、コード取得手段は、ＣＰＵ１１のステップＳ４０１及びＳ１２０１の処理が、解析手段は、ＣＰＵ１１のステップＳ４０４乃至ステップＳ４０９、及びステップＳ１２０４乃至ステップＳ１２０９の処理が、ログ取得用コード生成手段は、ＣＰＵ１１のステップＳ４１０及びステップＳ１２１０の処理が、実行ログ情報取得手段は、ＣＰＵ１１のステップＳ４１１及びステップＳ１２１１の処理が、オートマトン情報抽出手段は、ＣＰＵ１１のステップＳ４１２及びステップＳ１２１２の処理が、変換手段は、ＣＰＵ１１のステップＳ４１３及びステップＳ１２１３の処理が、生成手段は、ＣＰＵ１１のステップＳ４１４及びステップＳ１２１４の処理が、それぞれ該当する。また、分類情報取得手段は、ＣＰＵ１１のステップＳ４０３及びステップＳ１２０３の処理が、抽出手段は、ＣＰＵ１１のステップＳ４０７及びステップＳ１２０７の処理が、それぞれ該当する。
【発明の効果】
【００２４】
本発明によれば、ソースコードに基づいて解析することから、モデル化を意識する必要が無く、実行ログ情報に基づいてシーケンス図として表示する必要がある部分に関する実行ログを取得することで、必要最小限の構造を有するシーケンス図を容易に作成することができる。したがって、ソースコードが大規模で複雑な構造を有する場合であっても、構造が簡素なシーケンス図を作成することができ、シーケンス図に基づくシステム解析により、ボトルネックの発生箇所の特定等、システムの問題点を明確にすることが可能となる。
【発明を実施するための最良の形態】
【００２５】
以下、本発明の実施の形態に係るシーケンス図作成装置について、図面に基づいて具体的に説明する。以下の実施の形態は、特許請求の範囲に記載された発明を限定するものではなく、実施の形態の中で説明されている特徴的事項の組み合わせの全てが解決手段の必須事項であるとは限らないことは言うまでもない。
【００２６】
また、本発明は多くの異なる態様にて実施することが可能であり、実施の形態の記載内容に限定して解釈されるべきものではない。実施の形態を通じて同じ要素には同一の符号を付している。
【００２７】
以下の実施の形態では、コンピュータシステムにコンピュータプログラムを導入したシーケンス図作成装置又は方法について説明するが、当業者であれば明らかな通り、本発明はその一部をコンピュータで実行することが可能なコンピュータプログラムとして実施することができる。したがって、本発明は、シーケンス図作成装置というハードウェアとしての実施の形態、ソフトウェアとしての実施の形態、又はソフトウェアとハードウェアとの組み合わせの実施の形態をとることができる。コンピュータプログラムは、ハードディスク、ＤＶＤ、ＣＤ、光記憶装置、磁気記憶装置等の任意のコンピュータで読み取ることが可能な記録媒体に記録することができる。
【００２８】
（実施の形態１）
図１は、本発明の実施の形態１に係るシーケンス図作成装置の構成例を示すブロック図である。本発明の実施の形態１に係るシーケンス図作成装置１は、少なくともＣＰＵ（中央演算装置）１１、メモリ１２、記憶装置１３、Ｉ／Ｏインタフェース１４、通信インタフェース１５、ビデオインタフェース１６、可搬型ディスクドライブ１７及び上述したハードウェアを接続する内部バス１８で構成されている。
【００２９】
ＣＰＵ１１は、内部バス１８を介してシーケンス図作成装置１の上述したようなハードウェア各部と接続されており、上述したハードウェア各部の動作を制御するとともに、記憶装置１３に記憶されているコンピュータプログラム１００に従って、種々のソフトウェア的機能を実行する。メモリ１２は、ＳＲＡＭ、ＳＤＲＡＭ等の揮発性メモリで構成され、コンピュータプログラム１００の実行時にロードモジュールが展開され、コンピュータプログラム１００の実行時に発生する一時的なデータ等を記憶する。
【００３０】
記憶装置１３は、内蔵される固定型記憶装置（ハードディスク）、ＲＯＭ等で構成されている。記憶装置１３に記憶されているコンピュータプログラム１００は、プログラム及びデータ等の情報を記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体９０から、可搬型ディスクドライブ１７によりダウンロードされ、実行時には記憶装置１３からメモリ１２へ展開して実行される。もちろん、通信インタフェース１５を介してネットワーク２に接続されている外部のコンピュータからダウンロードされたコンピュータプログラムであっても良い。
【００３１】
また記憶装置１３は、実行対象となるプログラムのソースコード情報を例えばテキストデータとして記憶している。さらに、ソースコードに含まれる関数（コール関数及び被コール関数）を所定のモジュール単位に分類した分類情報を記憶する分類情報記憶部１３１を備えている。
【００３２】
図２は、本発明の実施の形態１に係るシーケンス図作成装置１の分類情報記憶部１３１のデータ構成の例示図である。図２に示すように、分類情報記憶部１３１には、実行単位となりうるモジュール名と、モジュール名に対応付けた関数群が記憶してある。また、「モジュール外」とは、シーケンス図を作成する対象から除外するべき関数を示す項目である。
【００３３】
通信インタフェース１５は内部バス１８に接続されており、インターネット、ＬＡＮ、ＷＡＮ等の外部のネットワーク２に接続されることにより、外部のコンピュータ等とデータ送受信を行うことが可能となっている。
【００３４】
Ｉ／Ｏインタフェース１４は、キーボード２１、マウス２２等のデータ入力媒体と接続され、データの入力を受け付ける。また、ビデオインタフェース１６は、ＣＲＴモニタ、ＬＣＤ等の表示装置２３と接続され、所定の画像を表示する。
【００３５】
図３は、本発明の実施の形態１に係るシーケンス図作成装置１の機能ブロック図である。コード取得手段３０１は、記憶装置１３に記憶されている、シーケンス図作成対象となる部分を含むコンピュータプログラムのソースコードを取得する。具体的には、記憶装置１３から読み出してメモリ１２へ展開する。解析手段３０２は、取得したソースコードを静的に解析する。具体的には、ソースコードに基づいて、包含されているコール関数（呼び出し側の関数）及び被コール関数（呼び出される側の関数）の対応関係に関する対応関係情報を取得する。
【００３６】
ログ取得用コード生成手段３０３は、解析手段３０２での解析結果に基づいて、実行ログを取得するためのログ取得用コードを生成する。具体的には、分類情報記憶部１３１に記憶してある分類情報を読み出し、対応関係情報のうち、コール関数と被コール関数とが異なり、コール関数及び被コール関数が異なるモジュールに分類されている対応関係情報のみを抽出し、抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合に実行ログを出力するようコーディングされたログ取得用コードを生成する。
【００３７】
実行ログ情報取得手段３０４は、生成したログ取得用コードを含むプログラムをコンパイル等することにより実行モジュール化し、実行モジュールを実行した場合に取得することができるログ情報である実行ログ情報を取得する。
【００３８】
オートマトン情報抽出手段３０５は、取得した実行ログ情報に基づいて、状態及び該状態間の遷移に関するオートマトン情報を抽出し、変換手段３０６は、抽出されたオートマトン情報を、シーケンス図を構成するシーケンス図構成要素情報へ変換する。生成手段３０７は、変換されたシーケンス図構成要素情報に基づいてシーケンス図を生成する。
【００３９】
上述した構成のシーケンス図作成装置１の処理の流れについて説明する。図４は、本発明の実施の形態１に係るシーケンス図作成装置１のＣＰＵ１１の処理手順を示すフローチャートである。
【００４０】
シーケンス図作成装置１のＣＰＵ１１は、記憶装置１３に記憶されている、シーケンス図作成対象となる部分を含むコンピュータプログラムのソースコードを取得する（ステップＳ４０１）。具体的には、記憶装置１３からソースコードを示すテキストデータを読み出してメモリ１２へ展開する。ＣＰＵ１１は、取得したソースコードを解析して、包含されているコール関数及び被コール関数の対応関係に関する対応関係情報を取得する（ステップＳ４０２）。
【００４１】
図５は、本発明の実施の形態１に係るシーケンス図作成装置１のソースコードに基づく対応関係情報取得の例示図である。図５（ａ）には変数、式、ブロック、繰り返し等の制御構造等を略したソースコードが示されている。例えば‘ｆｉｌｅ０’では、コール関数ｆ０に対して被コール関数ｆ０、ｆ７が記載されていることを示している。
【００４２】
図５（ｂ）は、対応関係情報のデータ構成の例示図である。図５（ｂ）の例では、関数の対応関係の組み合わせごとに識別情報であるコールサイトＩＤが付与され、コールサイトＩＤごとにコール関数、被コール関数及びコール関数のソースコード上での位置を示すコール場所が記憶される。なお、コール場所は、ソースコードにおけるファイル名と、該ファイルにおける何番目の文字かを示す文字番号とで、コール関数の位置を明示している。例えば（ｆｉｌｅ０、２０５）は、‘ｆｉｌｅ０’の２０５番目の文字からコール関数ｆ０が記載されていることを示している。
【００４３】
ＣＰＵ１１は、記憶装置１３の分類情報記憶部１３１に記憶してある分類情報を読み出し（ステップＳ４０３）、取得した対応関係情報の中から一の対応関係情報を選択する（ステップＳ４０４）。ＣＰＵ１１は、選択された対応関係情報につき、コール関数が被コール関数と等しいか否かを判断する（ステップＳ４０５）。
【００４４】
ＣＰＵ１１が、コール関数が被コール関数と異なると判断した場合（ステップＳ４０５：ＮＯ）、ＣＰＵ１１は、コール関数の属するモジュールが、被コール関数の属するモジュールと等しいか否かを判断する（ステップＳ４０６）。ＣＰＵ１１が、コール関数の属するモジュールが、被コール関数の属するモジュールと異なると判断した場合（ステップＳ４０６：ＮＯ）、ＣＰＵ１１は、選択された対応関係情報を抽出する（ステップＳ４０７）。
【００４５】
ＣＰＵ１１が、コール関数が被コール関数と等しいと判断した場合（ステップＳ４０５：ＹＥＳ）、ＣＰＵ１１は、ステップＳ４０６及びＳ４０７を、ＣＰＵ１１が、コール関数の属するモジュールが、被コール関数の属するモジュールと等しいと判断した場合（ステップＳ４０６：ＹＥＳ）、ＣＰＵ１１は、ステップＳ４０７を、それぞれスキップし、全ての対応関係情報が選択されたか否かを判断する（ステップＳ４０８）。ＣＰＵ１１が、未選択である対応関係情報が存在すると判断した場合（ステップＳ４０８：ＮＯ）、ＣＰＵ１１は、次の対応関係情報を選択して（ステップＳ４０９）、処理をステップＳ４０５へ戻して上述の処理を繰り返す。
【００４６】
図６は、本発明の実施の形態１に係るシーケンス図作成装置１の対応関係情報の抽出処理の例示図である。図６（ａ）は、図２に示す分類情報である。図６（ｂ）は、図５（ｂ）に示す対応関係情報である。具体的な処理として、まず対応関係情報において、コール関数と被コール関数とが一致しているコールサイトＩＤを削除する。図６の例では、コールサイトＩＤ‘ｃ０’、‘ｃ５’を削除する。
【００４７】
次に分類情報に基づいて、コール関数が属するモジュールと被コール関数が属するモジュールとが一致しているコールサイトＩＤを削除する。図６の例では、コールサイトＩＤ‘ｃ３’、‘ｃ６’、‘ｃ９’、‘ｃ１０’を削除する。また、被コール関数がモジュール外である‘ｆ７’であるコールサイトＩＤ、すなわちコールサイトＩＤ‘ｃ１’もシーケンス図作成には不要であるので削除する。
【００４８】
結局、図６（ｃ）に示すように、コールサイトＩＤ‘ｃ２’、‘ｃ４’、‘ｃ７’、‘ｃ８’の対応関係情報のみが抽出される。これらの関数の関係をモジュール単位で表示することで、必要最小限のシーケンス図を作成することができる。
【００４９】
図４に戻って、シーケンス図作成装置１のＣＰＵ１１が、全ての対応関係情報が選択されたと判断した場合（ステップＳ４０８：ＹＥＳ）、ＣＰＵ１１は、抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合に実行ログを出力するようコーディングされたログ取得用コードを生成する（ステップＳ４１０）。
【００５０】
図７は、本発明の実施の形態１に係るシーケンス図作成装置１のログ取得用コードの具体的な生成方法を示す例示図である。図７（ａ）は、図５（ａ）に示す取得したソースコードを示しており、図７（ｂ）は、図６（ｃ）で抽出された対応関係情報を示している。抽出された対応関係情報を含むソースコードが実行された場合に実行ログを出力するように、文字列出力関数ｔｌｏｇ（）を、ソースコードの対応関係情報に対応する位置に挿入する。なお、文字列出力関数ｔｌｏｇ（）の引数はコールサイトＩＤであり、実行ログとしてコールサイトＩＤが出力される。
【００５１】
図７（ｃ）は、文字列出力関数ｔｌｏｇ（）を、ソースコードに埋め込んだ状態を示す例示図である。図７（ｃ）に示すように、抽出された対応関係情報に相当する部分に文字列出力関数ｔｌｏｇ（）が埋め込まれており、該ソースコード部分が実行された場合、引数であるコールサイトＩＤが実行ログとして出力される。具体的にはコールサイトｃｘのコール関数ｆｙ（）を、（ｔｌｏｇ（ｃｘ）、ｆｙ（））に変換される。なお、ｘ、ｙは０以上の整数である。
【００５２】
図４に戻って、シーケンス図作成装置１のＣＰＵ１１は、生成したログ取得用コードを含むプログラムをコンパイル等することにより実行モジュール化し、実行モジュールを実行した場合に取得することができるログ情報である実行ログ情報を取得する（ステップＳ４１１）。本実施の形態１では、実行されたコールサイトＩＤを実行ログ情報を示す文字列として出力する。
【００５３】
ＣＰＵ１１は、取得した実行ログ情報に基づいて、状態及び該状態間の遷移に関するオートマトン情報を抽出する（ステップＳ４１２）。図８は、本発明の実施の形態１に係るシーケンス図作成装置１の実行ログ情報に基づくオートマトン情報抽出の手順を示す概念図である。
【００５４】
図８（ａ）は、実行ログ情報の例示図である。図８（ａ）に示すように、実行ログ情報は、コールサイトＩＤの順列として取得することができる。取得した実行ログ情報から、まずは図８（ｂ）に示すように重複しない要素を抽出する。本実施の形態１では、４つのコールサイトＩＤが抽出されている。
【００５５】
そして、抽出された各要素ｑｉに対して開始エッジｑｉｓ及び終了エッジｑｉｅを生成して、一組のラベルｑｉを対応付ける。図８（ｃ）は、４つのコールサイトＩＤに対して、それぞれエッジを生成してラベル付けをした結果を示している。
【００５６】
次に、取得した実行ログ情報から、隣接する要素の組み合わせが重複しない実行ログ情報を抽出する。本実施の形態１では、図８（ｄ）に示すように５種類の組み合わせに集約される。
【００５７】
そして、各組み合わせ（ｑｉ、ｑｊ）に対して、終了エッジｑｉｅ及び開始エッジｑｉｓを生成して、一組のラベルεを対応付ける。図８（ｅ）は、５つの組み合わせに対して、それぞれエッジを生成してラベル付けをした結果を示している。
【００５８】
最後に、図８（ｃ）に示すエッジの集合と、図８（ｅ）に示すエッジの集合との和集合を求めることで、図８（ｆ）に示すオートマトンを構成することができる。このように実行ログ情報に基づいて構成されたオートマトン情報を抽出することで、シーケンス図作成時に不要な要素が入り込むことを事前に排除することができる。
【００５９】
図４に戻って、シーケンス図作成装置１のＣＰＵ１１は、抽出されたオートマトン情報を、シーケンス図を構成するシーケンス図構成要素情報へ変換する（ステップＳ４１３）。図９は、本発明の実施の形態１に係るシーケンス図作成装置１のオートマトン情報からシーケンス図構成要素情報へ変換する正規化処理の例示図である。
【００６０】
図９（ａ）に示すようにオートマトンが構成されているので、開始状態ｃ７ｓが残るように他の状態を除去する。まず状態ｃ２ｓ、ｃ２ｅ、ｃ８ｓ、ｃ８ｅ、ｃ４ｓを除去することで、図９（ｂ）に示す図まで簡素化することができる。さらに中間状態ｃ７ｅを除去することにより、図９（ｃ）に示すように、２つの状態間の遷移を示す図にまで簡素化することができる。
【００６１】
そして、状態を１つで表現するべく状態ｃ４ｅを除去することで、図９（ｄ）に示すように正規表現することができる状態まで簡素化して表現することができ、図９（ｅ）に示すように正規表現することで、シーケンス図の構成要素を特定することができる。
【００６２】
オートマトンを正規化する方法は特に限定されるものではなく、上述のような状態除去法を用いる場合、簡素な正規表現を得ることができない場合も生じうる。そこで、例えば式（１）のような関係式を用いて、簡素な表現に変換する。
【００６３】
ｒ（ｓ｜ｔ）＝ｒｓ｜ｒｔ
（ｓ｜ｔ）ｒ＝ｓｒ｜ｔｒ
（ｒ＊｜ｓ＊）＊＝（ｒ＊ｓ＊）＊＝（ｒ｜ｓ）＊
・・・（１）
【００６４】
例えば図９（ｅ）に示す正規表現（ｃ７ｃ２｜ｃ７ｃ８ｃ４）＊は、式（１）の第一式を用いることで（ｃ７（ｃ２｜ｃ８ｃ４））＊と変換することができる。変換された簡素な正規表現を、式（２）に示す変換規則を用いることで、シーケンス図構成要素情報に変換することができる。なお、式（２）において‘Ｍｏｄｕｌｅ’とは、対応関係情報を用いて関数をモジュール名に対応付ける手続きを意味している。
【００６５】
Ｔｒａｎｓ（ｃ）＝＜Ｍｏｄｕｌｅ（コール関数（ｃ））、被コール関数（ｃ）、Ｍｏｄｕｌｅ（被コール関数（ｃ））＞
Ｔｒａｎｓ（ｒ＊）＝ｌｏｏｐ（Ｔｒａｎｓ（ｒ））
Ｔｒａｎｓ（ｒ？）＝ｏｐｔ（Ｔｒａｎｓ（ｒ））
Ｔｒａｎｓ（ｒｓ）＝ｓｔｒｉｃｔ（Ｔｒａｎｓ（ｒ），Ｔｒａｎｓ（ｓ））
Ｔｒａｎｓ（ｒ｜ｓ）＝ａｌｔ（Ｔｒａｎｓ（ｒ），Ｔｒａｎｓ（ｓ））
・・・（２）
【００６６】
図１０は、本発明の実施の形態１に係るシーケンス図作成装置１において、求めた正規表現（ｃ７（ｃ２｜ｃ８ｃ４））＊を、式（２）に従って変換したシーケンス図構成要素情報の例示図である。図１０において、‘ｓｔｒｉｃｔ’はモジュールを実行する順序の定義を、‘ｌｏｏｐ’は繰り返し処理を、‘ａｌｔ’は２種類の状態遷移のいずれか一方を実行することを、それぞれ意味している。なお、図示されてはいないが、‘ｏｐｔ’は実行する場合としない場合とが存在するオプション処理を、意味している。
【００６７】
図４に戻って、シーケンス図作成装置１のＣＰＵ１１は、変換されたシーケンス図構成要素情報に基づいてシーケンス図を生成する（ステップＳ４１４）。図１１は、本発明の実施の形態１に係るシーケンス図作成装置１において変換された、図１０に示すシーケンス図構成要素情報に基づいて生成したシーケンス図の例示図である。
【００６８】
図１１に示すように、図１０でのシーケンス図構成要素情報における‘ｓｔｒｉｃｔ’、‘ｌｏｏｐ’、‘ａｌｔ’で定義された関係に従って、それぞれモジュールｍ０、ｍ１、ｍ２間のコール関係を示す図としてシーケンス図が生成される。具体的には、‘ｌｏｏｐ’が先頭にあることから、以下の処理はすべて繰り返し処理を前提としていることがわかり、関数ｆ１の次に、関数ｆ６又は関数ｆ２、ｆ０のいずれかが実行されるようシーケンス図が生成される。
【００６９】
以上のように本実施の形態１によれば、ソースコードに基づいてシーケンス図構成要素情報を特定することができるので、モデル化を意識した情報を取得する必要が無い。また、シーケンス図として表示する必要がある部分のみ実行ログを取得することができるので、必要最小限の構造を有するシーケンス図を容易に作成することができる。したがって、ソースコードが複雑な構造を有する場合であっても、構造が簡素であり明確なシーケンス図を作成することができ、シーケンス図に基づくシステム解析により、ボトルネックの発生箇所の特定等、システムの問題点を明確にすることが可能となる。
【００７０】
（実施の形態２）
本発明の実施の形態２に係るシーケンス図作成装置１の構成及び機能ブロック図は、実施の形態１と同様であることから、同一の符号を付することにより詳細な説明は省略する。実施の形態２では、コール関数のリターンを追加することにより、各モジュールの実行オカレンスを付加したシーケンス図を作成することができる点で実施の形態１とは相違する。
【００７１】
ログ取得用コード生成手段３０３は、解析手段３０２での解析結果に基づいて、実行ログを取得するためのログ取得用コードを生成する。具体的には、分類情報記憶部１３１に記憶してある分類情報を読み出し、対応関係情報のうち、コール関数と被コール関数とが異なり、コール関数及び被コール関数が異なるモジュールに分類されている対応関係情報のみを抽出し、抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合及びコール関数がリターンされた場合に実行ログを出力するようコーディングされたログ取得用コードを生成する。したがって、実行ログ情報取得手段３０４で取得する実行ログ情報には、関数リターンも記録されており、オートマトンの構造も実施の形態１よりは複雑になる。
【００７２】
図１２は、本発明の実施の形態２に係るシーケンス図作成装置１のＣＰＵ１１の処理手順を示すフローチャートである。シーケンス図作成装置１のＣＰＵ１１は、記憶装置１３に記憶されている、シーケンス図作成対象となる部分を含むコンピュータプログラムのソースコードを取得する（ステップＳ１２０１）。具体的には、記憶装置１３からソースコードを示すテキストデータを読み出してメモリ１２へ展開する。ＣＰＵ１１は、取得したソースコードを解析して、包含されているコール関数及び被コール関数の対応関係に関する対応関係情報を取得する（ステップＳ１２０２）。
【００７３】
ＣＰＵ１１は、記憶装置１３の分類情報記憶部１３１に記憶してある分類情報を読み出し（ステップＳ１２０３）、取得した対応関係情報の中から一の対応関係情報を選択する（ステップＳ１２０４）。ＣＰＵ１１は、選択された対応関係情報につき、コール関数が被コール関数と等しいか否かを判断する（ステップＳ１２０５）。
【００７４】
ＣＰＵ１１が、コール関数が被コール関数と異なると判断した場合（ステップＳ１２０５：ＮＯ）、ＣＰＵ１１は、コール関数の属するモジュールが、被コール関数の属するモジュールと等しいか否かを判断する（ステップＳ１２０６）。ＣＰＵ１１が、コール関数の属するモジュールが、被コール関数の属するモジュールと異なると判断した場合（ステップＳ１２０６：ＮＯ）、ＣＰＵ１１は、選択された対応関係情報を抽出する（ステップＳ１２０７）。
【００７５】
ＣＰＵ１１が、コール関数が被コール関数と等しいと判断した場合（ステップＳ１２０５：ＹＥＳ）、ＣＰＵ１１は、ステップＳ１２０６及びＳ１２０７を、ＣＰＵ１１が、コール関数の属するモジュールが、被コール関数の属するモジュールと等しいと判断した場合（ステップＳ１２０６：ＹＥＳ）、ＣＰＵ１１は、ステップＳ１２０７を、それぞれスキップし、全ての対応関係情報が選択されたか否かを判断する（ステップＳ１２０８）。ＣＰＵ１１が、未選択である対応関係情報が存在すると判断した場合（ステップＳ１２０８：ＮＯ）、ＣＰＵ１１は、次の対応関係情報を選択して（ステップＳ１２０９）、処理をステップＳ１２０５へ戻して上述の処理を繰り返す。
【００７６】
ＣＰＵ１１が、全ての対応関係情報が選択されたと判断した場合（ステップＳ１２０８：ＹＥＳ）、ＣＰＵ１１は、抽出された対応関係情報に含まれるコール関数にて被コール関数が呼び出された場合、及びコール関数がリターンした場合に実行ログを出力するようコーディングされたログ取得用コードを生成する（ステップＳ１２１０）。
【００７７】
図１３は、本発明の実施の形態２に係るシーケンス図作成装置１のログ取得用コードの具体的な生成方法を示す例示図である。図１３（ａ）は、取得したソースコードを示しており、図１３（ｂ）は、抽出された対応関係情報を示している。ソースコード及び対応関係情報は実施の形態１と同様であるが、ソースコードに挿入する文字列出力関数が追加されている。
【００７８】
すなわち、図１３（ｃ）に示すように、抽出された対応関係情報を含むソースコードが実行された場合に実行ログを出力するように、文字列出力関数ｔｌｏｇ（）を、ソースコードの対応関係情報に対応する位置に挿入するとともに、コール関数のリターンが実行された場合に実行ログを出力するように、文字列出力関数ｒｌｏｇ（）も、ソースコードの対応関係情報に対応する位置に挿入する。具体的にはコールサイトｃｘのコール関数ｆｙ（）を、（ｔｌｏｇ（ｃｘ）、ｔｙ＝ｆｙ（）、ｒｌｏｇ（ｃｘ）、ｔｙ）に変換される。なお、ｘ、ｙは０以上の整数であり、ｔｙはコール関数ｆｙと同じ型を有する変数である。
【００７９】
図１２に戻って、シーケンス図作成装置１のＣＰＵ１１は、生成したログ取得用コードを含むプログラムをコンパイル等することにより実行モジュール化し、実行モジュールを実行した場合に取得することができるログ情報である実行ログ情報を取得する（ステップＳ１２１１）。本実施の形態２では、実行ログ情報として、実行されたコールサイトＩＤ及びコール関数のリターンを示すリターンＩＤを文字列として出力する。すなわち、ｔｌｏｇ（ｃｘ）はｃｘを出力し、ｒｌｏｇ（ｃｘ）はｒｘを出力する。
【００８０】
ＣＰＵ１１は、取得した実行ログ情報に基づいて、状態及び該状態間の遷移に関するオートマトン情報を抽出する（ステップＳ１２１２）。図１４及び図１５は、本発明の実施の形態２に係るシーケンス図作成装置１の実行ログ情報に基づくオートマトン情報抽出の手順を示す概念図である。
【００８１】
図１４（ａ）は、実行ログ情報の例示図である。図１４（ａ）に示すように、実行ログ情報は、コールサイトＩＤ及びリターンＩＤの順列として取得することができる。取得した実行ログ情報から、まずは図１４（ｂ）に示すように重複しない要素を抽出する。本実施の形態２では、４つのコールサイトＩＤ及び４つのリターンＩＤが抽出されている。
【００８２】
そして、抽出された各要素ｑｉに対して開始エッジｑｉｓ及び終了エッジｑｉｅを生成して、一組のラベルｑｉを対応付ける。図１４（ｃ）は、４つのコールサイトＩＤ及び４つのリターンＩＤに対して、それぞれエッジを生成してラベル付けをした結果を示している。
【００８３】
次に、取得した実行ログ情報から、隣接する要素の組み合わせが重複しない実行ログ情報を抽出する。本実施の形態２では、図１４（ｄ）に示すように９種類の組み合わせに集約される。
【００８４】
そして、各組み合わせ（ｑｉ、ｑｊ）に対して、終了エッジｑｉｅ及び開始エッジｑｉｓを生成して、一組のラベルεを対応付ける。図１４（ｅ）は、９つの組み合わせに対して、それぞれエッジを生成してラベル付けをした結果を示している。
【００８５】
最後に、図１４（ｃ）に示すエッジの集合と、図１４（ｅ）に示すエッジの集合との和集合を図１５（ａ）に示すように求める。求めた和集合に基づいて、図１５（ｂ）に示すオートマトンを構成することができる。このように実行ログ情報に基づいて構成されたオートマトン情報を抽出することで、シーケンス図作成時に不要な要素が入り込むことを事前に排除することができる。
【００８６】
図１２に戻って、シーケンス図作成装置１のＣＰＵ１１は、抽出されたオートマトン情報を、シーケンス図を構成するシーケンス図構成要素情報へ変換する（ステップＳ１２１３）。図１６は、本発明の実施の形態２に係るシーケンス図作成装置１のオートマトン情報からシーケンス図構成要素情報へ変換する正規化処理の例示図である。
【００８７】
図１６（ａ）に示すようにオートマトンが構成されているので、開始状態ｃ７ｓが残るように他の状態を除去する。まず状態ｒ７ｅ、ｃ２ｓ、ｃ２ｅ、ｒ２ｓ、ｒ２ｅ、ｃ８ｓ、ｃ８ｅ、ｃ４ｓ、ｃ４ｅ、ｒ４ｓ、ｒ４ｅ、ｒ８ｓ、ｒ８ｅを除去することで、図１６（ｂ）に示す図まで簡素化することができる。さらに中間状態ｃ７ｅを除去することにより、図１６（ｃ）に示すように、２つの状態間の遷移を示す図にまで簡素化することができる。
【００８８】
そして、状態を１つで表現するべく状態ｒ７ｓを除去することで、図１６（ｄ）に示すように正規表現することができる状態まで簡素化して表現することができ、図１６（ｅ）に示すように正規表現することで、シーケンス図の構成要素を特定することができる。
【００８９】
オートマトンを正規化する方法は特に限定されるものではなく、上述のような状態除去法を用いる場合、簡素な正規表現を得ることができない場合も生じうる。そこで、例えば実施の形態１と同様、式（１）に示す関係式を用いて、簡素な表現に変換する。
【００９０】
例えば図１６（ｅ）に示す正規表現（ｃ７ｃ２ｒ２ｒ７｜ｃ７ｃ８ｃ４ｒ４ｒ８ｒ７）＊は、式（１）の第一式を用いることで（ｃ７（ｃ２ｒ２ｒ７｜ｃ８ｃ４ｒ４ｒ８ｒ７））＊へ変換することができ、第二式を用いることで、（ｃ７（ｃ２ｒ２｜ｃ８ｃ４ｒ４ｒ８）ｒ７）＊へ変換することができる。変換された簡素な正規表現を、実施の形態１と同様、式（３）に示す変換規則を用いることで、シーケンス図構成要素情報に変換する。なお、式（３）において‘Ｍｏｄｕｌｅ’とは、対応関係情報を用いて関数をモジュール名に対応付ける手続きを意味している。
【００９１】
Ｔｒａｎｓ（ｃ）＝＜Ｍｏｄｕｌｅ（コール関数（ｃ））、被コール関数（ｃ）、Ｍｏｄｕｌｅ（被コール関数（ｃ））＞
Ｔｒａｎｓ（ｒ）＝＜Ｍｏｄｕｌｅ（コール関数（ｃ））、被コール関数（ｃ）：ｒｅｔｕｒｎ、Ｍｏｄｕｌｅ（被コール関数（ｃ））＞
Ｔｒａｎｓ（ｒ＊）＝ｌｏｏｐ（Ｔｒａｎｓ（ｒ））
Ｔｒａｎｓ（ｒ？）＝ｏｐｔ（Ｔｒａｎｓ（ｒ））
Ｔｒａｎｓ（ｒｓ）＝ｓｔｒｉｃｔ（Ｔｒａｎｓ（ｒ），Ｔｒａｎｓ（ｓ））
Ｔｒａｎｓ（ｒ｜ｓ）＝ａｌｔ（Ｔｒａｎｓ（ｒ），Ｔｒａｎｓ（ｓ））
・・・（３）
【００９２】
図１７は、本発明の実施の形態２に係るシーケンス図作成装置において、求めた正規表現（ｃ７（ｃ２ｒ２｜ｃ８ｃ４ｒ４ｒ８）ｒ７）＊を、式（３）に従って変換したシーケンス図構成要素情報の例示図である。図１７において、‘ｓｔｒｉｃｔ’はモジュール間を遷移するコール関数の定義を、‘ｌｏｏｐ’は繰り返し処理を、‘ａｌｔ’は２種類の状態遷移のいずれか一方を実行することを、それぞれ意味している。
【００９３】
図１２に戻って、シーケンス図作成装置１のＣＰＵ１１は、変換されたシーケンス図構成要素情報に基づいてシーケンス図を生成する（ステップＳ１２１４）。図１８は、本発明の実施の形態２に係るシーケンス図作成装置１において変換された、図１７に示すシーケンス図構成要素情報に基づいて作成したシーケンス図の例示図である。
【００９４】
図１８に示すように、図１７でのシーケンス図構成要素情報における‘ｓｔｒｉｃｔ’、‘ｌｏｏｐ’、‘ａｌｔ’で定義された関係に従って、それぞれモジュールｍ０、ｍ１、ｍ２間のコール関係を示す図としてシーケンス図が生成される。具体的には、‘ｌｏｏｐ’が先頭にあることから、以下の処理はすべて繰り返し処理を前提としていることがわかり、関数ｆ１の次に、関数ｆ６又は関数ｆ２、ｆ０のいずれかが実行されるようシーケンス図が生成される。
【００９５】
また、実施の形態１とは異なり、関数ごとにリターンのタイミングを特定することができるので、シーケンス図にモジュールの実行オカレンス（図１８の長方形部分）をモジュールごとに記載することができる。これにより、どの関数がどのようなタイミングでコール／リターンしているかを容易に視認することができる。
【００９６】
以上のように本実施の形態２によれば、モジュール単位でコール関数及び被コール関数の対応関係を特定するとともに、コール関数のリターン実行タイミングについても特定することができ、モジュール間のプロセス遷移ログ及び所定の関数が実行されているタイミングを確実に取得することができる。したがって、モデル化を意識することなく、シーケンス図として表示する必要がある部分のみの実行ログをより精緻に取得することができ、モジュールの動作タイミングを含むシーケンス図を容易に作成することが可能となる。
【００９７】
なお、上述した実施の形態１及び２では、処理によっては複数のモジュールを１つのモジュールとして表し、モジュール内部の処理を回帰呼び出しとしてシーケンス図を作成する方が好ましい場合も生じうる。例えば実施の形態１にて、モジュールｍ０とｍ１とを１つのモジュールｍ３で表示する場合、分類情報記憶部１３１に記憶されるデータ構成も変化する。
【００９８】
図１９は、複数のモジュールを一体化した場合の分類情報記憶部１３１のデータ構成の例示図である。図１９に示すように、モジュールｍ０とｍ１との上位階層に、両者をまとめたモジュールｍ３を設定している。ｍ３に基づいて実施の形態１と同様の処理を実行してシーケンス図を作成した場合、コール関数ｆ１についてはシーケンス図の作成対象から除外される。
【００９９】
しかし、実施の形態１の処理により図１１に示すシーケンス図を作成した後では、コール関数ｆ１を回帰呼び出し関数として残すことができる。図２０は、複数のモジュールを一体化した場合のシーケンス図の例示図である。
【０１００】
図２０（ａ）は、モジュールｍ０とｍ１を一体化したモジュールｍ３を用いた場合、コール関数ｆ１が回帰呼び出し関数となることは自明であり、シーケンス図にも回帰呼び出し関数として残すことができる。図２０（ｂ）に示すようにモジュールｍ０とｍ１が一体化されることにより、‘ａｌｔ’内の区別も不要となり、選択範囲を明示する破線も消去されている。したがって、シーケンス図として一層簡素化した状態で作成することができ、特にソースコードが大規模である場合には、シーケンス図に表されるモジュール数を減少することができ、シーケンス図の構造を簡素化することにより視認性の向上を図ることができる。
【０１０１】
なお、本発明は上記実施例に限定されるものではなく、本発明の趣旨の範囲内であれば多種々の変更、改良等が可能である。例えばシーケンス図作成装置１を１つのコンピュータで構成しても良いし、複数のコンピュータをネットワークを介してデータ通信可能に接続されたネットワークコンピューティング環境で構成されても良い。これらの変更、改良等は当業者にとって自明であり、該変更、改良等を加えた形態も当然に本発明の技術的範囲に含まれる。
【図面の簡単な説明】
【０１０２】
【図１】本発明の実施の形態１に係るシーケンス図作成装置の構成例を示すブロック図である。
【図２】本発明の実施の形態１に係るシーケンス図作成装置の分類情報記憶部のデータ構成の例示図である。
【図３】本発明の実施の形態１に係るシーケンス図作成装置の機能ブロック図である。
【図４】本発明の実施の形態１に係るシーケンス図作成装置のＣＰＵの処理手順を示すフローチャートである。
【図５】本発明の実施の形態１に係るシーケンス図作成装置のソースコードに基づく対応関係情報取得の例示図である。
【図６】本発明の実施の形態１に係るシーケンス図作成装置の対応関係情報の抽出処理の例示図である。
【図７】本発明の実施の形態１に係るシーケンス図作成装置のログ取得用コードの具体的な生成方法を示す例示図である。
【図８】本発明の実施の形態１に係るシーケンス図作成装置の実行ログ情報に基づくオートマトン情報抽出の手順を示す概念図である。
【図９】本発明の実施の形態１に係るシーケンス図作成装置のオートマトン情報からシーケンス図構成要素情報へ変換する正規化処理の例示図である。
【図１０】本発明の実施の形態１に係るシーケンス図作成装置において、求めた正規表現を変換したシーケンス図構成要素情報の例示図である。
【図１１】本発明の実施の形態１に係るシーケンス図作成装置において変換されたシーケンス図構成要素情報に基づいて作成したシーケンス図の例示図である。
【図１２】本発明の実施の形態２に係るシーケンス図作成装置のＣＰＵの処理手順を示すフローチャートである。
【図１３】本発明の実施の形態２に係るシーケンス図作成装置のログ取得用コードの具体的な生成方法を示す例示図である。
【図１４】本発明の実施の形態２に係るシーケンス図作成装置の実行ログ情報に基づくオートマトン情報抽出の手順を示す概念図である。
【図１５】本発明の実施の形態２に係るシーケンス図作成装置の実行ログ情報に基づくオートマトン情報抽出の手順を示す概念図である。
【図１６】本発明の実施の形態２に係るシーケンス図作成装置のオートマトン情報からシーケンス図構成要素情報へ変換する正規化処理の例示図である。
【図１７】本発明の実施の形態２に係るシーケンス図作成装置において、求めた正規表現を変換したシーケンス図構成要素情報の例示図である。
【図１８】本発明の実施の形態２に係るシーケンス図作成装置において変換されたシーケンス図構成要素情報に基づいて作成したシーケンス図の例示図である。
【図１９】複数のモジュールを一体化した場合の分類情報記憶部のデータ構成の例示図である。
【図２０】複数のモジュールを一体化した場合のシーケンス図の例示図である。
【符号の説明】
【０１０３】
１  シーケンス図作成装置
１１  ＣＰＵ
１２  メモリ
１３  記憶装置
１４  Ｉ／Ｏインタフェース
１５  通信インタフェース
１６  ビデオインタフェース
１７  可搬型ディスクドライブ
１８  内部バス
２３  表示装置
９０  可搬型記録媒体
１００  コンピュータプログラム
１３１  分類情報記憶部
【図１】
0005203806.tif 000002
【図２】
0005203806.tif 000003
【図３】
0005203806.tif 000004
【図４】
0005203806.tif 000005
【図５】
0005203806.tif 000006
【図６】
0005203806.tif 000007
【図７】
0005203806.tif 000008
【図８】
0005203806.tif 000009
【図９】
0005203806.tif 000010
【図１０】
0005203806.tif 000011
【図１１】
0005203806.tif 000012
【図１２】
0005203806.tif 000013
【図１３】
0005203806.tif 000014
【図１４】
0005203806.tif 000015
【図１５】
0005203806.tif 000016
【図１６】
0005203806.tif 000017
【図１７】
0005203806.tif 000018
【図１８】
0005203806.tif 000019
【図１９】
0005203806.tif 000020
【図２０】
0005203806.tif 000021