(57)【要約】【課題】ソフトウェア挙動解析システムを構成する各々のCPUシミュレータに対し、同一のデータ、及びソフトウェアを同一タイミングで与えることができるようにする。【解決手段】CPU模擬部７はソフトウェアの実行時にカウントしたCPU命令数と入力情報２１とを、入力記録データ３３としてソフトウェア挙動解析装置１００へ出力する。カウントしたCPU命令数と出力情報１９とを出力記録データ３１としてソフトウェア挙動解析装置１００へ出力する。トレーススケジュール部１１にトレース取得開始指示を送信する。第１のCPU模擬部１５に第１のトレース取得指示２７を、第２のCPU模擬部１７に第２のトレース取得指示２９を送信する。第１のCPU模擬部１５に別の第１のトレース取得指示２７を、第２のCPU模擬部１７に別の第２のトレース取得指示２９を送信する。【選択図】図９
2010182218.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアの実行をシミュレートして該ソフトウェアの挙動を解析することにより、該ソフトウェアに障害があるかどうか検知するソフトウェア挙動解析システムにおいて、
各々が解析対象として入力したソフトウェアの実行をシミュレートする複数のCPUシミュレータと、
前記各々のCPUシミュレータに出力すべきデータ、及びソフトウェアを、予め保持しているデータ、及びソフトウェアの中から選択する出力選択部と、
前記出力選択部により出力が選択された同一のデータ、及び同一のソフトウェアを、前記各々のCPUシミュレータに対し、同一のタイミングで夫々出力するデータ・ソフトウェア出力部と、
を備えるソフトウェア挙動解析システム。
【請求項２】
請求項１記載のソフトウェア挙動解析システムにおいて、
前記各々のCPUシミュレータに出力すべきデータを、前記データ・プログラム出力部に供給するデータ供給装置、
を更に備えるソフトウェア挙動解析システム。
【請求項３】
請求項２記載のソフトウェア挙動解析システムにおいて、
前記データ供給装置が、前記出力選択部に供給するデータを生成するCPUシミュレータを含むシステム模擬装置であるソフトウェア挙動解析システム。
【請求項４】
請求項３記載のソフトウェア挙動解析システムにおいて、
前記システム模擬装置に、ソフトウェアの実行指令を出力するソフトウェア実行指令出力部、
を更に備えるソフトウェア挙動解析システム。
【請求項５】
請求項４記載のソフトウェア挙動解析システムにおいて、
前記システム模擬装置のCPUシミュレータが、前記出力選択部に保持されているソフトウェアの中から解析対象として読み出したソフトウェアに基づいて、所定の処理動作を実行するソフトウェア挙動解析システム。
【請求項６】
ソフトウェアの実行をシミュレートして該ソフトウェアの挙動を解析することにより、該ソフトウェアに障害があるかどうか検知するソフトウェア挙動解析システムにおいて、
各々が解析対象として入力したソフトウェアの実行をシミュレートする複数のCPUシミュレータと、
前記解析対象のソフトウェアに係わるトレース取得開始の指示を受けたことに起因して、前記複数のCPUシミュレータの中から前記トレース取得の処理に適したCPUシミュレータを選択するCPUシミュレータ選択部と、
前記CPUシミュレータ選択部により選択されたCPUシミュレータに対するトレース取得の指示を生成するトレース取得指示生成部と、
前記トレース取得指示生成部により生成されたトレース取得指示に含まれる全てのトレース項目をチェックして、取得が完了しているトレース項目があるかどうか判別する判別部と、
前記判別部により取得が完了しているトレース項目があると判別された場合に、前記トレース取得の指示を前記選択されたCPUシミュレータに出力するトレース取得指示出力部と、
を備えるソフトウェア挙動解析システム。
【請求項７】
請求項６記載のソフトウェア挙動解析システムにおいて、
前記CPUシミュレータ選択部により前記トレース取得の処理に適しているとして選択されるCPUシミュレータが、現在トレース取得の処理を実行中でないCPUシミュレータであるソフトウェア挙動解析システム。
【請求項８】
請求項７記載のソフトウェア挙動解析システムにおいて、
前記複数のCPUシミュレータの中に、現在トレース取得の処理を実行中でないCPUシミュレータが無い場合には、前記CPUシミュレータ選択部は、トレース取得の処理が最も早く終了したCPUシミュレータをトレース取得の処理に適したCPUシミュレータとして選択するようにしたソフトウェア挙動解析システム。
【請求項９】
請求項８記載のソフトウェア挙動解析システムにおいて、
前記トレース取得指示生成部が、
所定の箇所に保持されている、解析対象とされたソフトウェアに係わる解析操作記録を参照することにより、未処理の解析操作記録があるかどうかチェックする第１のステップと、
前記第１のステップにおいて、未処理の解析操作記録があると判断された場合に、該未処理の解析操作記録の中から操作を選択する第２のステップと、
前記第２のステップにおいて選択した操作に対応するプログラムモジュールが、前記未処理の解析操作記録の中にあるかどうかチェックする第３のステップと、
前記第３のステップにおいて前記プログラムモジュールがあると判断された場合に、所定の箇所に保持されている、トレース履歴を参照することにより、前記プログラムモジュールに対する未取得のトレース項目があるかどうかチェックする第４のステップと、
を実行し、前記第４のステップにおいて前記未取得のトレース項目があると判断された場合に、前記トレース取得の指示を生成するようにしたソフトウェア挙動解析システム。
【請求項１０】
請求項９記載のソフトウェア挙動解析システムにおいて、
前記トレース取得指示生成部が、
前記トレース取得の指示を生成する処理が終了すると、所定の箇所に保持されている、トレース項目リストを参照して処理負荷をチェックし、各トレース項目の積算値を合計処理負荷とする第５のステップと、
前記第５のステップにおいて求められた合計処理負荷が、規定値未満であるかどうかチェックする第６のステップと、
を実行し、前記第６のステップにおいて前記合計処理負荷が、前記規定値未満であると判断された場合に、前記第１のステップで示した処理動作に復帰するようにしたソフトウェア挙動解析システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアの実行をシミュレートしてそのソフトウェアの挙動を解析することにより、そのソフトウェアに障害があるかどうか検知するソフトウェア挙動解析システムに関する。
【背景技術】
【０００２】
従来、時間発展する複数の現象をシミュレーションしながら、同時に解析或いは表示するシミュレーション方法に係わる提案が知られている。該提案の概要は、時間発展シミュレーションプログラム、及び解析プログラムの双方のプロセスが、制御プログラムにより起動され、それら双方のプロセスの実行が制御プログラムにより監視される。そして、時間発展シミュレーションプログラムにおける次の時間ステップの計算の開始と、解析プログラムの計算の開始とが制御プログラムにより同期させられた状態で、制御プログラムにより双方のプロセスに対し、データ交換が指示されるようになっている（例えば特許文献１参照）。また、従来、プログラムの状態変更、及び関数呼び出しを全てトレースすることで、ソフトウェアが有する障害から該ソフトウェアに含まれる欠陥を確実に発見する手法も知られている（例えば非特許文献１参照）。また、従来、ソフトウェアの挙動を解析する手法として、ソフトウェアの実行性能の解析を目的としたCPUシミュレータを利用する手法も知られている（例えば非特許文献２、及び非特許文献３参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平9-146917号公報
【非特許文献１】Bil Lewis. “Debugging Backwards in Time”,Lambda Computer Science (2003).
【非特許文献２】Bob Cmelik and David Keppel.  “Shade:A Fast Instruction - Set Simulator for Execution Profiling” , Proceedings ofthe 1994 ACM SIGMETRICS conference on Measurement and modeling of computersystems  (1994) : 128-137.
【非特許文献３】Gary Lauterbach.  “AcceleratingArchitectural Simulation by Parallel Execution of Trace Samples” , SunMicrosystems Laboratories, Inc. Technical Report: TR-93-22 (1993).
【発明の概要】
【発明が解決しようとする課題】
【０００４】
周知のように、ソフトウェアを構成要素として備える計算機システムでは、ソフトウェアに含まれる欠陥に起因する障害（一般に“バグ”と称される。以後該障害を“バグ”と表記する。）を持つことが多々ある。バグの種類は多岐に亘り、例えば、ソフトウェアの機能に関するもの、ソフトウェアの性能に関するもの、ソフトウェアの特定部位に関するもの、ソフトウェアの複数部位に跨るもの、（障害の）原因と（該原因の結果としての）現象とが直接関連するもの、及び該原因と該現象とが間接的に関連するもの等に分類され得る。
【０００５】
バグの解決作業には、欠陥の究明作業と、該究明された欠陥の修正作業とがある。上述したソフトウェアの挙動解析は、該欠陥の究明作業の１つとして位置付けられる。上記ソフトウェアの挙動解析に用いられる手法として、実行情報を出力するプローブ（プログラム中に、情報を出力するためのコードのこと。ソースコードにも、バイナリプログラムにも追加が可能）を挙動解析の対象であるソフトウェアに挿入し、プローブにより実行中のソフトウェアの挙動を記録する情報を出力した後、実行後に出力された情報を解析する手法がある。このときに記録した情報を、“トレース”（ソフトウェアの挙動状態の変遷が分かる情報）と称することがある。また、デバッガ（ソフトウェアの１種。ソフトウェアの駆動状態の監視や制御を行うソフトウェア）や、ICE（In-Circuit Emulator）（機能的にはデバッガと類似しているハードウェア）等のソフトウェアの挙動を監視、及び制御するツールを用いて、実行を途中で停止して実行状態を確認したり記録したりする手法も知られている。これは、作業者がツールを通じてトレースを取得するタイミングを制御する手法であると思料される。
【０００６】
これらの手法は、ソフトウェアの挙動に関する情報の全体から、欠陥や障害に関連する一部の情報を抽出するものであり、ソフトウェアの挙動解析に対して一定の有効性を持つ。しかし、上記手法は、作業者が、プローブの（挙動解析の対象であるソフトウェアにおける）挿入位置や、出力する情報の種別等を検討しながら、繰り返し挙動解析の対象であるソフトウェアを実行する必要があるので、欠陥の特定に時間が掛かるという欠点がある。そこで、上記に鑑みて、該ソフトウェアの挙動に関する全ての情報を取得する手法が提案された。該提案が、上述した特許文献１、非特許文献１、非特許文献２、及び非特許文献３の各々に開示されている技術である。非特許文献１に開示されている手法では、既述のような（挙動解析の対象であるソフトウェアにおける）プローブ挿入位置と、出力する情報の種別に関する作業者の検討は不要であり、且つ、繰り返し作業も不要であるが、記録する情報量が膨大になるので、障害によっては、ハードウェアにおける実行性能や記憶資源の上限が問題になる。そのため、記録範囲に制限を設定する工夫について言及されている。
【０００７】
一方、ソフトウェアの挙動を解析する手法として、非特許文献２、及び非特許文献３に開示されている手法も、ソフトウェアの挙動について、全ての情報を記録しようというものであるが、状態変更や関数呼び出しに関する記録ではなく、CPUによる各命令の実行情報を記録するものである。よって、記録内容はより詳細になるから、非特許文献１に開示されている手法よりも取得できる情報は多いが、実行速度はより遅くなるという問題がある。そのため、非特許文献２では、トレース項目を、作業者の選択に応じて限定するという工夫が施されている。非特許文献３には、トレース対象とするソフトウェアを、一部のサンプル部位に限定する工夫、及び複数の計算機にサンプルを配分して実行時間を短縮する工夫（所謂並列処理による工夫）が開示されている。しかし、これらの手法は、予め作業者が、トレース項目やサンプル部位を特定する必要がある。また、トレースの取得後に、作業者が該トレースの解析を実施することになるので、作業者にとって待ち時間が生じることになる。
【０００８】
特許文献１には、CPUシミュレータに関してではなく、一般のシミュレータに関する工夫が開示されているが、シミュレーションを並列に実行する工夫、及び該シミュレーションと並行して作業者がシミュレーション結果を解析できるようにする工夫が施されている。該工夫を非特許文献３に開示されている手法に適用すれば、トレースの取得処理を並列に実行し、更に、トレース取得と並行してトレースの解析プログラムを動作させ、作業者による解析作業の実施が可能になる。特許文献１には、計算時間や利用者からの指示に応じて計算機に割り当てるシミュレーション処理を変更する工夫についての開示がある。該工夫を非特許文献２に開示されている手法、及び非特許文献３に開示されている手法に適用すると、各トレース項目の取得に係る計算時間や、作業者からの指示に応じて、CPUシミュレータを実行する計算機に割り当てるトレース項目の選択が可能になる。換言すれば、非特許文献２、非特許文献３、及び特許文献１に夫々開示されている手法を単純に組み合わせることが可能であれば、利用者からの指示に従ってCPUシミュレータの実行を複数の計算機資源に割り当て、並列にトレースを取得しつつ、同時に利用者による解析作業の実施が可能になる。
【０００９】
しかし、非特許文献１に開示されている手法には、プローブが全てのトレースを取得した場合のCPUにおけるトレース負荷と、メモリにおける記憶容量の上限値について問題があり、非特許文献２に開示されている手法には、取得するトレース項目を、予め解析担当者が指定する必要があるという問題がある。また、非特許文献１、非特許文献２、及び非特許文献３に夫々開示されている手法には、トレース取得中に、解析担当者が、トレース結果を解析することができないという問題がある。
【００１０】
非特許文献２に開示されている手法に、非特許文献３に夫々開示されている手法、及び特許文献１に開示されている手法を組み合わせる場合には、各CPUシミュレータにより異なるトレース項目を取得するに際しても、同じソフトウェアの挙動を完全に再現できるようにする必要があり、そのためには、各CPUシミュレータが、解析対象であるソフトウェアに対して入力データを与えるタイミングを全く同一にする必要がある。また、計算時間に応じて割り当てられるトレース項目、必ずしも解析担当者が必要とするトレース項目ではないため、障害原因追究の作業時間の短縮には繋がらないという問題と、作業者による各CPUシミュレータに対する計算機資源の割り当て作業を必要とするという問題もある。
【００１１】
換言すれば、ソフトウェアの挙動解析に用いるトレース情報を取得するシステムには、各CPUシミュレータが、同一タイミングで解析対象になっているソフトウェアに対し、入力データを与えるのが困難であるという問題がある。また、上記システムでは、複数のCPUシミュレータを用いて、複数のトレース項目を、解析を必要とする可能性の高い順序で取得できる効率性の高さに対する要求、及び作業者による各CPUシミュレータへのトレース項目の割り当て作業の省略という利便性に対する要求の双方を満たすことは困難であるという問題もあった。
【００１２】
従って本発明の目的は、ソフトウェア挙動解析システムを構成する各々のCPUシミュレータに対し、同一のデータ、及びソフトウェアを同一タイミングで与えることができるようにすることにある。
【００１３】
また、本発明の他の目的は、複数のCPUシミュレータを備えるソフトウェア挙動解析システムにおいて、複数のトレース項目を、ソフトウェアの挙動解析に際し、必要性の高いものから順に取得することができ、且つ、作業者による計算機資源の割り当て作業を省略することができるようにすることにある。
【課題を解決するための手段】
【００１４】
本発明の第１の観点に従うソフトウェア挙動解析システムは、ソフトウェアの実行をシミュレートしてそのソフトウェアの挙動を解析することにより、そのソフトウェアに障害があるかどうか検知するもので、各々が解析対象として入力したソフトウェアの実行をシミュレートする複数のCPUシミュレータと、上記各々のCPUシミュレータに出力すべきデータ、及びソフトウェアを、予め保持しているデータ、及びソフトウェアの中から選択する出力選択部と、上記出力選択部により出力が選択された同一のデータ、及び同一のソフトウェアを、上記各々のCPUシミュレータに対し、同一のタイミングで夫々出力するデータ・ソフトウェア出力部と、を備える。
【００１５】
本発明の第１の観点に係る好適な実施形態では、上記各々のCPUシミュレータに出力すべきデータを、上記データ・プログラム出力部に供給するデータ供給装置、を更に備える。
【００１６】
上記とは別の実施形態では、上記データ供給装置が、上記出力選択部に供給するデータを生成するCPUシミュレータを含むシステム模擬装置である。
【００１７】
また、上記とは別の実施形態では、上記システム模擬装置に、ソフトウェアの実行指令を出力するソフトウェア実行指令出力部、を更に備える。
【００１８】
更に、上記とは別の実施形態では、上記システム模擬装置のCPUシミュレータが、上記出力選択部に保持されているソフトウェアの中から解析対象として読み出したソフトウェアに基づいて、所定の処理動作を実行する。
【００１９】
本発明の第２の観点に従うソフトウェア挙動解析システムは、ソフトウェアの実行をシミュレートしてそのソフトウェアの挙動を解析することにより、そのソフトウェアに障害があるかどうか検知するもので、各々が解析対象として入力したソフトウェアの実行をシミュレートする複数のCPUシミュレータと、上記解析対象のソフトウェアに係わるトレース取得開始の指示を受けたことに起因して、上記複数のCPUシミュレータの中から上記トレース取得の処理に適したCPUシミュレータを選択するCPUシミュレータ選択部と、上記CPUシミュレータ選択部により選択されたCPUシミュレータに対するトレース取得の指示を生成するトレース取得指示生成部と、上記トレース取得指示生成部により生成されたトレース取得指示に含まれる全てのトレース項目をチェックして、取得が完了しているトレース項目があるかどうか判別する判別部と、上記判別部により取得が完了しているトレース項目があると判別された場合に、上記トレース取得の指示を上記選択されたCPUシミュレータに出力するトレース取得指示出力部と、を備える。
【００２０】
本発明の第２の観点に係る好適な実施形態では、上記CPUシミュレータ選択部により上記トレース取得の処理に適しているとして選択されるCPUシミュレータが、現在トレース取得の処理を実行中でないCPUシミュレータである。
【００２１】
上記とは別の実施形態では、上記複数のCPUシミュレータの中に、現在トレース取得の処理を実行中でないCPUシミュレータが無い場合には、上記CPUシミュレータ選択部は、トレース取得の処理が最も早く終了したCPUシミュレータをトレース取得の処理に適したCPUシミュレータとして選択するようにしている。
【００２２】
また、上記とは別の実施形態では、上記トレース取得指示生成部が、所定の箇所に保持されている、解析対象とされたソフトウェアに係わる解析操作記録を参照することにより、未処理の解析操作記録があるかどうかチェックする第１のステップと、上記第１のステップにおいて、未処理の解析操作記録があると判断された場合に、その未処理の解析操作記録の中から操作を選択する第２のステップと、上記第２のステップにおいて選択した操作に対応するプログラムモジュールが、上記未処理の解析操作記録の中にあるかどうかチェックする第３のステップと、上記第３のステップにおいて上記プログラムモジュールがあると判断された場合に、所定の箇所に保持されている、トレース履歴を参照することにより、上記プログラムモジュールに対する未取得のトレース項目があるかどうかチェックする第４のステップと、を実行し、上記第４のステップにおいて上記未取得のトレース項目があると判断された場合に、上記トレース取得の指示を生成するようにしている。
【００２３】
更に、上記とは別の実施形態では、上記トレース取得指示生成部が、上記トレース取得の指示を生成する処理が終了すると、所定の箇所に保持されている、トレース項目リストを参照して処理負荷をチェックし、各トレース項目の積算値を合計処理負荷とする第５のステップと、上記第５のステップにおいて求められた合計処理負荷が、規定値未満であるかどうかチェックする第６のステップと、を実行し、上記第６のステップにおいて上記合計処理負荷が、上記規定値未満であると判断された場合に、上記第１のステップで示した処理動作に復帰するようにしている。
【発明の効果】
【００２４】
本発明によれば、ソフトウェア挙動解析システムを構成する各々のCPUシミュレータに対し、同一のデータ、及びソフトウェアを同一タイミングで与えることができるようにすることができる。
【００２５】
また、本発明によれば、複数のCPUシミュレータを備えるソフトウェア挙動解析システムにおいて、複数のトレース項目を、ソフトウェアの挙動解析に際し、必要性の高いものから順に取得することができ、且つ、作業者による計算機資源の割り当て作業を省略することができるようにすることができる。
【図面の簡単な説明】
【００２６】
【図１】本発明の一実施形態に係るソフトウェア挙動解析システムの全体構成を示す機能ブロック図。
【図２】図１に記載した解析操作記録のデータ構成の一例を示す説明図。
【図３】図１に記載した入力記録データ、及び出力記録データのデータ構成の一例を示す説明図。
【図４】図１に記載したソフトウェア挙動トレースDBのデータ構成の一例を示す説明図。
【図５】図１に記載した解析対象ソフトウェアのデータ構成の一例を示す説明図。
【図６】図１に記載した第１のトレース取得指示、及び第２のトレース取得指示のデータ構成の一例を示す説明図。
【図７】図１に記載したトレース項目リストのデータ構成の一例を示す説明図。
【図８】図１に記載したトレース履歴のデータ構成の一例を示す説明図。
【図９】図１に記載したソフトウェア挙動解析システムを構成する各部の処理動作の一例を示すフローチャート。
【図１０】図１に記載したトレーススケジュール部の処理動作の一例を示すフローチャート。
【図１１】図１０で示したトレーススケジュール部の処理動作の一例を示すフローチャートのサブルーチンを示すフローチャート。
【図１２】図１に記載した第１のCPU模擬部、及び第２のCPU模擬部におけるトレース取得に際しての処理動作の一例を示すフローチャート。
【発明を実施するための形態】
【００２７】
以下、本発明の実施の形態を、図面により詳細に説明する。
【００２８】
図１は、本発明の一実施形態に係るソフトウェア挙動解析システムの全体構成を示す機能ブロック図である。
【００２９】
上記ソフトウェア挙動解析システムは、図１に示すように、ソフトウェア挙動解析装置１００と、システム模擬装置２００と、トレース取得管理装置３００と、第１のCPU模擬装置４００と、第２のCPU模擬装置５００と、を備える。
【００３０】
ソフトウェア挙動解析装置１００は、オペレータ（即ち、解析担当者のこと。以下同じ）が、障害が発生したソフトウェアを解析するに際して使用する装置であり、挙動解析インタフェース部１と、ソフトウェア挙動トレースデータベース（以下、「ソフトウェア挙動DB」と表記する。）３と、を有し、また、解析対象ソフトウェア５、及び解析操作記録２３を保持する。
【００３１】
システム模擬装置２００は、実行対象ソフトウェアを含む、解析対象システム全体を模擬実行する装置であり、CPU模擬部７と、外部環境模擬部９と、を有する。
【００３２】
トレース取得管理装置３００は、複数台のCPU模擬装置（図１では、第１のCPU模擬装置４００、及び第２のCPU模擬装置５００）を用いてソフトウェアの挙動トレースを収集するに際して、最適な収集が可能になるよう、各々のCPU模擬装置（図１では、第１のCPU模擬装置４００、及び第２のCPU模擬装置５００）により収集するトレースの項目を決定する。そして、決定したトレースの項目を、実行トレース指示としてCPU模擬装置（図１では、第１のCPU模擬装置４００、及び第２のCPU模擬装置５００）に伝達するためのトレーススケジュールを決定する。トレース取得管理装置３００は、トレーススケジュール部１１を有し、また、トレース項目リスト１３、及びトレース履歴２５を保持する。
【００３３】
第１のCPU模擬装置４００と、第２のCPU模擬装置５００とは、構成が同一である。即ち、第１のCPU模擬装置４００は、上記（システム模擬装置２００が有する）CPU模擬部７と構成が同一の第１のCPU模擬部１５を、第２のCPU模擬装置５００は、上記CPU模擬部７、及び上記第１のCPU模擬部１５と構成が同一の第２のCPU模擬部１７を、夫々有する。
【００３４】
システム模擬装置２００において、外部環境模擬部９は、CPU模擬部７から出力情報１９が与えられると、該出力情報１９を保持する。上記出力情報１９とは、CPU模擬部７がソフトウェア、即ち、上記（ソフトウェア挙動解析装置１００に保持されている）解析対象ソフトウェア５を実行した結果、得られる情報である。外部環境模擬部９は、また、CPU模擬部７からの情報読み出し要求に応じて、保持している入力情報２１をCPU模擬部７へ与える。上記入力情報２１とは、CPU模擬部７が、上記解析対象ソフトウェア５を実行するに際して必要とする情報のことである。なお、外部環境模擬部９は、システム模擬装置２００の操作部（図示しない）を介して解析担当者から与えられる出力情報１９の提示要求に応じて、該出力情報１９を、例えば、システム模擬装置２００のディスプレイ（図示しない）を通じて可視画像情報として出力したり、スピーカ（図示しない）を通じて音声情報として出力したりすることも可能である。
【００３５】
CPU模擬部７は、上記解析対象ソフトウェア５を、上記ソフトウェア挙動解析装置１００から読み出して実行するものである。CPU模擬部７は、上記解析対象ソフトウェア５を実行するに際し、上記入力情報２１を外部環境模擬部９から読み込むと共に、上記解析対象ソフトウェア５を実行した結果、得られた上記出力情報１９を、外部環境模擬部９に与える。CPU模擬部７は、上記解析対象ソフトウェア５の実行時に、外部環境模擬部９から与えられる上記入力情報２１を時系列順に記録することにより、入力記録データを生成し、保持する。該入力記録データは、図１において、符号３３で示すように、システム模擬装置２００、即ち、CPU模擬部７からソフトウェア挙動解析装置１００へ出力される。CPU模擬部７は、また、上記解析対象ソフトウェア５の実行時に、得られる上記出力情報１９を時系列順に記録することにより、出力記録データを生成し、保持する。該出力記録データは、図１において、符号３１で示すように、システム模擬装置２００、即ち、CPU模擬部７からソフトウェア挙動解析装置１００へ出力される。
【００３６】
なお、上記解析対象ソフトウェア５が、例えば、ディジタルテレビジョン受像機（ディジタルTV受像機）（図示しない）に搭載されているソフトウェアである場合には、該ディジタルTV受像機（図示しない）の付属機器であるリモートコントローラ（リモコン）（図示しない）から出力される各種の指令信号が、上記入力情報２１になる。また、該ディジタルTV受像機（図示しない）が受信したテレビ放送波（TV放送波）も、上記入力情報２１になる場合もある。上記入力情報２１は、予め、静的な情報（データ）として、外部環境模擬部９に保持しておいても良いし、CPU模擬部７による上記解析対象ソフトウェア５の実行時に、解析担当者によるシステム模擬装置２００の操作部（図示しない）の入力操作により、システム模擬装置２００に入力するようにしても良い。或いは、上記ディジタルTV受像機（図示しない）が受信したTV放送波を、上記入力情報２１として、システム模擬装置２００に与えることも想到され得る。
【００３７】
一方、上記出力情報１９としては、TV画面（即ち、上記ディジタルTV受像機のディスプレイ）に表示される画像情報や、電気／音響変換出力部（即ち、上記ディジタルTV受像機のスピーカ）から出力される音声情報等が該当する。
【００３８】
上述したように、上記解析対象ソフトウェア５が、ディジタルTV受像機（図示しない）に搭載されているソフトウェアである場合には、外部環境模擬部９には、上記各種の指令信号や、TV放送波等が、CPU模擬部７への入力情報２１として、保持される。また、CPU模擬部７から出力される画像情報や、音声情報等が、CPU模擬部７からの出力情報１９として、保持される。
【００３９】
トレース取得管理装置３００において、トレーススケジュール部１１は、何れもソフトウェア挙動解析装置１００に保持されている上記解析操作記録２３、ソフトウェア挙動トレースDB３、及び解析対象ソフトウェア５と、何れもトレース取得管理装置３００自身に保持されているトレース項目リスト１３、及びトレース履歴２５と、を夫々参照する。そして、第１のトレース取得指示２７、及び第２のトレース取得指示２９等のトレース指示を、夫々生成する。トレーススケジュール部１１により生成された上記第１のトレース取得指示２７については、トレース取得管理装置３００から第１のCPU模擬装置４００に、また、上記第２のトレース取得指示２９については、トレース取得管理装置３００から第２のCPU模擬装置５００に、夫々与えられる。
【００４０】
トレーススケジュール部１１は、過去に生成したトレース取得指示（例えば、既に説明済みの第１のトレース取得指示２７や、第２のトレース取得指示２９等）に係わる履歴を、トレース履歴２５に記録する。これにより、トレーススケジュール部１１は、該トレース履歴２５を参照することで、同一内容のトレースを重複して取得しないよう、上記トレース取得指示（例えば、上述した第１のトレース取得指示２７や、第２のトレース取得指示２９等）に含めるトレース項目を決定することが可能になる。
【００４１】
第１のCPU模擬装置４００において、第１のCPU模擬部１５は、ソフトウェア挙動解析装置１００から解析対象ソフトウェア５、及び入力記録データ３３を読み込むと共に、トレース取得管理装置３００から第１のトレース取得指示２７を読み込む。上記入力記録データ３３は、第１のCPU模擬部１５が、上記解析対象ソフトウェア５を実行するのに必要なデータである。第１のCPU模擬部１５は、上記入力記録データ３３を用いて上記解析対象ソフトウェア５を実行する。第１のCPU模擬部１５は、また、上記解析対象ソフトウェア５の実行時に、上記解析対象ソフトウェア５の挙動を示すトレースのうちから記録すべきトレース項目を、上記第１のトレース取得指示２７の内容に基づき選択すると共に、該選択したトレース項目を、上記解析対象ソフトウェア５の挙動トレースとして記録する。該記録された挙動トレースは、図１において、符号３５で示すように第１の挙動トレースとして、第１のCPU模擬装置４００からソフトウェア挙動解析装置１００へ出力される。
【００４２】
第２のCPU模擬装置５００も、第１のCPU模擬装置４００におけると同様の処理動作を実行する。即ち、第２のCPU模擬装置５００において、第２のCPU模擬部１７は、ソフトウェア挙動解析装置１００から解析対象ソフトウェア５、及び入力記録データ３３を読み込むと共に、トレース取得管理装置３００から第２のトレース取得指示２９を読み込む。上記入力記録データ３３は、第２のCPU模擬部１７が、上記解析対象ソフトウェア５を実行するのに必要なデータである。第２のCPU模擬部１７は、上記入力記録データ３３を用いて上記解析対象ソフトウェア５を実行する。第２のCPU模擬部１７は、また、上記解析対象ソフトウェア５の実行時に、上記解析対象ソフトウェア５の挙動を示すトレースのうちから記録すべきトレース項目を、上記第２のトレース取得指示２９の内容に基づき選択すると共に、該選択したトレース項目を、上記解析対象ソフトウェア５の挙動トレースとして記録する。該記録された挙動トレースは、図１において、符号３７で示すように第２の挙動トレースとして、第２のCPU模擬装置５００からソフトウェア挙動解析装置１００へ出力される。
【００４３】
ソフトウェア挙動解析装置１００において、ソフトウェア挙動トレースDB３は、第１のCPU模擬装置４００から出力される第１の挙動トレース３５、及び第２のCPU模擬装置５００から出力される第２の挙動トレース３７を、夫々読み込み保持する。ソフトウェア挙動トレースDB３は、挙動解析インタフェース部１からの挙動トレースの読み出し要求に応じて、保持している第１の挙動トレース３５、及び／又は第２の挙動トレース３７を、挙動解析インタフェース１へ出力する。ソフトウェア挙動トレースDB３は、また、（トレース取得管理装置３００の）トレーススケジュール部１１からの挙動トレースの読み出し要求に応じて、保持している第１の挙動トレース３５、及び／又は第２の挙動トレース３７を、上記トレーススケジュール部１１へ出力する。
【００４４】
解析対象ソフトウェア５は、挙動解析インタフェース部１により読み込まれる。解析対象ソフトウェア５４は、また、（トレース取得管理装置３００の）トレーススケジュール部１１、（第１のCPU模擬装置４００の）第１のCPU模擬部１５、（第２のCPU模擬装置５００の）第２のCPU模擬部１７、及び（システム模擬装置２００の）CPU模擬部７により、夫々ソフトウェア挙動解析装置１００から読み出される。
【００４５】
解析操作記録２３は、挙動解析インタフェース部１から出力される。解析操作記録２３は、また、（トレース取得管理装置３００の）トレーススケジュール部１１によりソフトウェア挙動解析装置１００から読み出される共に、必要に応じてトレーススケジュール部１１に読み込まれる。解析操作記録２３には、挙動解析インタフェース部１を通じて解析担当者がソフトウェア挙動解析装置１００に入力した、ソフトウェア挙動解析装置１００（ソフトウェア挙動解析システム）に対する指示の内容が記録される。該指示の内容としては、例えば、ソースコード、変数内容、スレッド等のOS資源状態の表示に係わるもの、CPU負荷等のCPU資源の表示に係わるもの、入出力データの表示に係わるもの等が挙げられる。上記に加えて、時系列に沿った（解析対象ソフトウェア５の）実行による（解析対象ソフトウェア５の）状態変化の再現の実行に係わるものや、該再現時に特定の条件を満たした場合における該再現の実行停止に係わるもの等も挙げられる。
【００４６】
入力記録データ３３は、（システム模擬装置２００の）CPU模擬部７からソフトウェア挙動解析装置１００に出力されるもので、挙動解析インタフェース部１により読み込まれるのみならず、（第１のCPU模擬装置４００の）第１のCPU模擬部１５、及び（第２のCPU模擬装置５００の）第２のCPU模擬部１７により、ソフトウェア挙動解析装置１００から読み出される。
【００４７】
出力記録データ３１は、（システム模擬装置２００の）CPU模擬部７からソフトウェア挙動解析装置１００に出力されるもので、挙動解析インタフェース部１により読み込まれる。
【００４８】
挙動解析インタフェース部１は、解析担当者による該挙動解析インタフェース部１に備えられる操作部（図示しない）の操作を通じてオペレータ（即ち、解析担当者）から与えられる指示に従い、ソフトウェア挙動トレースDB３から第１の挙動トレース３５、及び第２の挙動トレース３７を読み込むと共に、解析操作記録２３、入力記録データ３３、出力記録データ３１、及び解析対象ソフトウェア５を夫々読み込む。そして、上記第１の挙動トレース３５〜出力記録データ３１等の内容を詳細に調査（解析）することにより、解析担当者による上記解析対象ソフトウェア５の挙動の理解や、上記解析対象ソフトウェア５に障害が発生した場合の原因の解析や、発生した障害の対処方法の検討等が行えるような資料を提供する。即ち、挙動解析インタフェース部１は、上記資料等の特定の情報を選別し、解析担当者が視認可能な態様で、例えば、該挙動解析インタフェース部１に備えられる表示部（図示しない）等に表示出力する。
【００４９】
図２は、図１に記載の解析操作記録２３のデータ構成の一例を示す説明図である。
【００５０】
既述の内容から明らかなように、解析操作記録２３は、解析担当者による挙動解析インタフェース部１の操作履歴を示すもので、図２に示すように、日時記録欄４１、操作種別記録欄４３、操作対象記録欄４５、及び処理状況記録欄４７を含む。日時記録欄４１には、解析担当者が挙動解析インタフェース部１を操作した日時に係わる複数の情報が個別に記録される。操作種別記録欄４３には、解析担当者が挙動解析インタフェース部１に対し、どのような内容の指示を与えたかを示す操作種別に係わる複数の情報が個別に記録される。操作対象記録欄４５には、挙動解析インタフェース部１を介してどの解析対象ソフトウェア５に指示を与えたかを示す操作対象に係わる複数の情報が個別に記録される。更に、処理状況記録欄４７には、挙動解析インタフェース部１を介して解析担当者から与えられた指示に基づく、（操作対象である）解析対象ソフトウェア５に対する処理状況がどのようになっているかを示す複数の情報が個別に記録される。
【００５１】
上述した操作種別記録欄４３に個別に記録されている各々の情報は、上記日時記録欄４１に個別に記録されている各々の情報と夫々対応付けがなされており、また、上記操作対象記録欄４５に個別に記録されている各々の情報も、上記操作種別記録欄４３における各々の情報と同様に、上記日時記録欄４１における各々の情報と夫々対応付けがなされている。更に、処理状況記録欄４７に個別に記録されている各々の情報も、上記操作種別記録欄４３における各々の情報や、上記操作対象記録欄４５における各々の情報と同様に、上記日時記録欄４１における各々の情報と夫々対応付けがなされている。なお、日時が“2008年7月23日14時14分8秒”での操作種別は、“ソースコード表示”であり、操作対象は、“モジュールA/ソースファイルa.c”であり、処理状況については、“完了”になっている。これは、解析対象ソフトウェア５に含まれる特定のモジュール（即ち、モジュールA/ソースファイルa.c）に対応するソースファイルを表示するよう、解析担当者が挙動解析インタフェース部１に指示を与えたことを示す。また、日時が“2008年7月23日14時14分54秒”での操作種別は、“変数表示”であり、操作対象は、“モジュールA/ソースファイルa.c/変数B”であり、処理状況については、“完了”になっている。
【００５２】
また、日時が“2008年7月23日14時15分08秒”での操作種別は、“実行停止条件指定”であり、操作対象は、“モジュールE/ソースファイルe.c/78行目”であり、処理状況については、“未処理”になっている。また、日時が“2008年7月23日14時15分45秒”での操作種別は、“スレッド情報表示”であり、操作対象は、“スレッドE/実行モジュールF/実行CPU♯1”であり、処理状況については、“未処理”になっている。また、日時が“2008年7月23日14時16分12秒”での操作種別は、“CPU負荷情報表示”であり、処理状況については、“未処理”になっている。これは、挙動解析インタフェース部１に対し、解析担当者がCPU負荷情報を表示するよう、指示を与えたことを示す。更に、日時が“2008年7月23日15時17分35秒”での操作種別は、“再現実行開始”であり、処理状況については、“未処理”になっている。
【００５３】
図３は、図１に記載の入力記録データ３３、及び出力記録データ３１のデータ構成の一例を示す説明図である。図３において、図３（a）は、上記入力記録データ３３のデータ構成の一例を、また、図３（b）は、上記出力記録データ３１のデータ構成の一例を、夫々示している。
【００５４】
本実施形態において、入力記録データ３３とは、図１で示した（システム模擬装置２００における）CPU模擬部７上で実行されるソフトウェアの入力として記録されるI/Oポートにおける読み出し、及び割り込みを指す。入力記録データ３３は、図３（a）に示すように、種別記録欄４９、アドレス記録欄５１、バイト数記録欄５３、データ記録欄５５、番号記録欄５７、及び入力時刻記録欄５９を含む。種別記録欄４９には、或る入力情報（２１）が、I/Oポートにおける読み出しに係わるものか、それとも、割り込みに係わるものかを示す情報（種別情報）が記録される。アドレス記録欄５１には、或る入力情報（２１）が、何れのアドレスに係わるものかを示す情報が記録される。バイト数記録欄５３には、或る入力情報（２１）のデータ量に係わる情報が記録される。データ記録欄５５には、或る入力情報（２１）が如何なるデータであるかを示す情報が記録される。番号記録欄５７には、或る入力情報（２１）が入力された順番（I/Oポート読み出しの場合は、読み出し処理の順番、割り込みの場合は、割り込み処理の順番）を示すために付与される番号情報が記録される。更に、入力時刻記録欄５９には、或る入力情報（２１）が（システム模擬装置２００の）外部環境模擬部９からCPU模擬部７に入力された時刻を示す情報が記録される。なお、入力時刻は、（システム模擬装置２００の）CPU模擬部７による解析対象ソフトウェア５等の実行開始からの経過時間を算出するための基準になる。該経過時間は、上記CPU模擬部７とは別のCPU模擬部（例えば、第１のCPU模擬部１５や、第２のCPU模擬部１７等）が、上記実行を該経過時間に則して再現することが可能なように、上記CPU模擬部７による解析対象ソフトウェア５等の実行開始からの実行命令数を用いて計測、及び記録されることになる。
【００５５】
上述したアドレス記録欄５１に個別に記録されている各々の情報は、上記種別記録欄４９に個別に記録されている各々の情報と対応付けがなされており、上記バイト数記録欄５３に個別に記録されている各々の情報も、上記アドレス記録欄５１における各々の情報と同様に、上記種別記録欄４９における各々の情報と夫々対応付けがなされている。また、データ記録欄５５に個別に記録されている各々の情報も、上記アドレス記録欄５１における各々の情報や、上記バイト数記録欄５３における各々の情報と同様に、上記種別記録欄４９における各々の情報と夫々対応付けがなされている。また、上記番号記録欄５７に個別に記録されている各々の情報も、上記アドレス記録欄５１における各々の情報や、上記バイト数記録欄５３における各々の情報や、上記データ記録欄５５における各々の情報と同様に、上記種別記録欄４９における各々の情報と夫々対応付けがなされている。更に、上記入力時刻記録欄５９に個別に記録されている各々の情報も、上記アドレス記録欄５１における各々の情報や、上記バイト数記録欄５３における各々の情報や、上記データ記録欄５５における各々の情報や、上記番号記録欄５７における各々の情報と同様に、上記種別記録欄４９における各々の情報と夫々対応付けがなされている。
【００５６】
なお、種別記録欄４９において、一番目の“I/O読み出し”でのアドレスは、アドレス記録欄５１における“0x00C43268”であり、そのバイト数は、バイト数記録欄５３における“4”であり、そのデータは、データ記録欄５５における“0x00000450”であり、その入力時刻は、入力時刻記録欄５９における“35234”である。これは、アドレス“0x00000450”におけるI/Oポート読み出しの記録を示している。種別記録欄４９において、“割り込み”での番号（割り込み処理の順番を示す。）は、番号記録欄５７における“28”であり、その入力時刻は、入力時刻記録欄５９におけ“669183”である。これは、割り込み番号“28”における割り込み発生の記録を示している。
【００５７】
また、種別記録欄４９において、二番目の“I/O読み出し”でのアドレスは、アドレス記録欄５１における“0xA0C474bb”であり、そのバイト数は、バイト数記録欄５３における“1”であり、そのデータは、データ記録欄５５における“0x34”であり、その入力時刻は、入力時刻記録欄５９における“2077633”である。また、種別記録欄４９において、三番目の“I/O読み出し”でのアドレスは、アドレス記録欄５１における“0xA0C474bb”であり、そのバイト数は、バイト数記録欄５３における“1”であり、そのデータは、データ記録欄５５における“0x14”であり、その入力時刻は、入力時刻記録欄５９における“20477742”である。更に、種別記録欄４９において、四番目の“I/O読み出し”でのアドレスは、アドレス記録欄５１における“0x00C432F8”であり、そのバイト数は、バイト数記録欄５３における“4”であり、そのデータは、データ記録欄５５における“0xdfeb3350”であり、その入力時刻は、入力時刻記録欄５９における“121212684”である。
【００５８】
本実施形態において、出力記録データ３１とは、図１で示した（システム模擬装置２００における）CPU模擬部７上で実行されるソフトウェアの出力として記録されるI/Oポートにおける書き込みを指す。図３（b）に示すように、出力記録データ３１も、入力記録データ３３におけると同様に、種別記録欄６１、アドレス記録欄６３、バイト数記録欄６５、データ記録欄６７、及び番号記録欄６９を含み、図３（a）で示した入力時刻記録欄５９に替えて出力時刻記録欄７１、をも含む。種別記録欄６１に個別に記録されている各々の情報と、アドレス記録欄６３、バイト数記録欄６５、データ記録欄６７、番号記録欄６９、及び出力時刻記録欄７１に夫々記録されている各々の情報との対応関係については、図３（a）において説明したのと同様であるので、詳細な説明を省略する。出力時刻記録欄７１に記録される出力時刻とは、或る出力情報（１９）が（システム模擬装置２００の）CPU模擬部７から外部環境模擬部９へ出力された時刻を示す情報である。該出力時刻も、上述した入力時刻と同様に、（システム模擬装置２００の）CPU模擬部７による解析対象ソフトウェア５等の実行開始からの経過時間を算出するための基準になる。
【００５９】
なお、種別記録欄６１において、一番目の“I/O読み出し”でのアドレスは、アドレス記録欄６３における“0x00C43568”であり、そのバイト数は、バイト数記録欄５３における“4”であり、そのデータは、データ記録欄５５における“0x00000450”であり、その出力時刻は、出力時刻記録欄７１における“53234”である。また、種別記録欄６１において、二番目の“I/O読み出し”でのアドレスは、アドレス記録欄６３における“0xA0C43000”であり、そのバイト数は、バイト数記録欄６５における“4”であり、そのデータは、データ記録欄６７における“0xffff3355”であり、その出力時刻は、出力時刻記録欄７１における“432233598”である。
【００６０】
図４は、図１に記載のソフトウェア挙動トレースDB３のデータ構成の一例を示す説明図である。
【００６１】
ソフトウェア挙動トレースDB３は、既述の内容から明らかなように、図１で示した各々のCPU模擬部（システム模擬装置２００のCPU模擬部７を除く、第１のCPU模擬装置４００の第１のCPU模擬部１５、及び第２のCPU模擬装置５００の第２のCPU模擬部１７）から取得された（解析対象ソフトウェア５の）挙動トレースデータを集積したデータベースである。ソフトウェア挙動トレースDB３は、図４に示すように、時刻記録欄７３、項目記録欄７５、及び内容記録欄７７を含む。内容記録欄７７には、アドレス記録欄７９a、サイズ記録欄７９b、値記録欄７９cを含む第１の内容記録欄７９、分岐元アドレス８１a、分岐先アドレス８１bを含む第２の内容記録欄８１、CPU♯記録欄８３a、CPUロード値[%]記録欄８３bを含む第３の内容記録欄８３がある。また、内容記録欄７７には、上記に加えて、CPU♯1記録欄８５a、割り込み頻度[回/sec]記録欄８５bを含む第４の内容記録欄８５、及びスイッチ前タスク記録欄８７a、スイッチ後タスク記録欄８７bを含む第５の内容記録欄８７もある。
【００６２】
時刻記録欄７３に記録される時刻は、図３で示した入力時刻や、出力時刻におけると同様に、上述した経過時間を算出するための基準になる。時刻記録欄７３には、或る挙動トレースが（ソフトウェア挙動解析装置１００に）取得された時刻に係わる情報が、記録される。項目記録欄７５には、或る挙動トレースの、（ソフトウェア挙動解析装置１００に）取得された項目に係わる情報が、記録される。内容記録欄７７には、或る挙動トレースの、（ソフトウェア挙動解析装置１００に）取得された内容に係わる情報が、記録される。上述した項目記録欄７５に個別に記録されている各々の情報は、上記時刻記録欄７３に個別に記録されている各々の情報と夫々対応付けがなされており、上記内容記録欄７７に個別に記録されている各々の情報も、上記項目記録欄７５における各々の情報と同様に、上記時刻記録欄７３における各々の情報と夫々対応付けがなされている。
【００６３】
なお、時刻記録欄７３において、一番目の時刻である“2537”での挙動トレースの項目は、項目記録欄７５における“メモリリード”であり、その内容は、内容記録欄７７において説明した第１の内容記録欄７９で示される内容を有している。即ち、上記挙動トレースのアドレスは、アドレス記録欄７９aにおける“0x40003b76”であり、（上記挙動トレースの）サイズは、サイズ記録欄７９bにおける“4”であり、（上記挙動トレースの）値は、値記録欄７９cにおける“0x00003230”である。換言すれば、上記一番目の時刻に対応する挙動トレースにおいては、メモリリードが発生したことが示されており、該メモリリードが実行されたアドレス、サイズ、及び読み出された値が記録されている。
【００６４】
また、時刻記録欄７３において、二番目の時刻である“2539”での挙動トレースの項目は、項目記録欄７５における“分岐”であり、その内容は、内容記録欄７７において説明した第２の内容記録欄８１で示される内容を有している。即ち、上記挙動トレースの分岐元アドレスは、分岐元アドレス記録欄８１aにおける“0x2b875432”であり、（上記挙動トレースの）分岐先アドレスは、分岐先アドレス記録欄８１bにおける“0x2b87a98a”である。換言すれば、上記二番目の時刻に対応する挙動トレースにおいては、処理分岐が発生したことが示されており、上述したCPU模擬部が保持するプログラムカウンタ（図示しない）の値が、分岐元アドレスから分岐先アドレスに変更されたことが記録されている。
【００６５】
また、時刻記録欄７３において、三番目の時刻である“2540”での挙動トレースの項目は、項目記録欄７５における“メモリライト”であり、その内容は、内容記録欄７７において説明した第１の内容記録欄７９で示される内容を有している。即ち、上記挙動トレースのアドレスは、アドレス記録欄７９aにおける“0x2b874008”であり、（上記挙動トレースの）サイズは、サイズ記録欄７９bにおける“0xdfeb3350”である。換言すれば、上記三番目の時刻に対応する挙動トレースにおいては、メモリライトが発生したことが示されており、特定のアドレスにおけるメモリの値が変更されたことが記録されている。
【００６６】
また、時刻記録欄７３において、四番目の時刻である“23410”での挙動トレースの項目は、項目記録欄７５における“CPUロード”であり、その内容は、内容記録欄７７において説明した第３の内容記録欄８３で示される内容を有している。即ち、上記挙動トレースのCPU♯は、CPU♯記録欄８３aにおける“♯1”であり、（上記挙動トレースの）CPUロード値[%]は、ＣＰＵロード値[%]記録欄８３bにおける“90”である。また、時刻記録欄７３において、五番目の時刻である“33411”での挙動トレースの項目は、項目記録欄７５における“割り込み頻度”であり、その内容は、内容記録欄７７において説明した第４の内容記録欄８５で示される内容を有している。即ち、上記挙動トレースのCPU♯は、CPU♯記録欄８５aにおける“♯1”であり、（上記挙動トレースの）割り込み頻度[回/sec]は、割り込み頻度[回/sec]記録欄８５bにおける“28”である。また、時刻記録欄７３において、六番目の時刻である“548733”での挙動トレースの項目は、項目記録欄７５における“分岐”であり、その内容は、内容記録欄７７において説明した第２の内容記録欄８１で示される内容を有している。即ち、上記挙動トレースの分岐元アドレスは、分岐元アドレス記録欄８１aにおける“0x4002338d”であり、（上記挙動トレースの）分岐先アドレスは、分岐先アドレス記録欄８１bにおける“0x40023430”である。
【００６７】
更に、時刻記録欄７３において、七番目の時刻である“558734”での挙動トレースの項目は、項目記録欄７５における“タスクスイッチ”であり、その内容は、内容記録欄７７において説明した第５の内容記録欄８７で示される内容を有している。即ち、スイッチ前タスクは、スイッチ前タスク記録欄８７aにおける“0x112”であり、（上記挙動トレースの）スイッチ後タスクは、スイッチ後タスク記録欄８７bにおける“0x124”である。図４に記載されている諸々の情報が解析されることで、例えば、図１で示した解析対象ソフトウェア５におけるプログラムの処理流れや、（該解析対象ソフトウェア５に係わる）変数の値の変化を精査することが可能になる。
【００６８】
図５は、図１に記載の解析対象ソフトウェア５のデータ構成の一例を示す説明図である。
【００６９】
解析対象ソフトウェア５は、実行されることを前提として、再利用や分担等の便宜のために、複数個のモジュールに分割されているのが一般的である。即ち、解析対象ソフトウェア５は、図５に示すように、対象モジュール情報記録欄９１、ソースコード記録欄９３、バイナリコード記録欄９５、及びデバッグ情報記録欄９７を含む。対象モジュール情報記録欄９１には、上記分割されている複数個のモジュールの各々を識別するための情報が、記録される。ソースコード記録欄９３には、上記複数個のモジュールの各々のソースコードが、対応するモジュールの処理を記述したものとして記録される。また、バイナリコード記録欄９５には、上記複数個のモジュールの各々のバイナリコードが、上述した各々のCPU模擬部や、情報処理装置のCPU等が実行可能なものとして記録される。更に、デバッグ情報記録欄９７には、上記複数個のモジュールの各々のデバッグ情報が、対応するバイナリコードの構成情報を保持するものとして記録される。
【００７０】
上述したソースコード記録欄９３に個別に記録されている各々のソースコードは、上記対象モジュール記録欄９１に個別に記録されている各々のモジュールに係わる情報と夫々対応付けがなされている。また、上記バイナリコード記録欄９５に個別に記録されている各々のバイナリコードも、上記ソースコード記録欄９３における各々のソースコードと同様に、上記対象モジュール記録欄９１における各々のモジュールに係わる情報と夫々対応付けがなされている。更に、上記デバッグ情報記録欄９７に個別に記録されている各々のデバッグ情報も、上記ソースコード記録欄９３における各々のソースコードや、上記バイナリコード記録欄９５における各々のバイナリコードと同様に、上記対象モジュール記録欄９１における各々のモジュールに係わる情報と夫々対応付けがなされている。なお、本実施形態では、例えば、ライブラリやOSのカーネル等も含めて、ソフトウェア（解析対象ソフトウェア５）の分割単位を広くモジュールと称することにした。
【００７１】
なお、図５で示した対象モジュール記録欄９１では、一番目の対象モジュールとして“モジュールA”が、二番目の対象モジュールとして“モジュールB”が、四番目の対象モジュールとして“モジュールZ”が、五番目の対象モジュールとして“カーネル”が、六番目の対象モジュールとして“ライブラリa”が、夫々記録されている。また、七番目の対象モジュールとして“ライブラリb”が、九番目の対象モジュールとして“ライブラリz”が、夫々記録されている。
【００７２】
図６は、図１に記載の第１のトレース取得指示２７、及び第２のトレース取得指示２９のデータ構成の一例を示す説明図である。
【００７３】
既述の第１のトレース取得指示２７、及び第２のトレース取得指示２９は、図６に示すように、トレース項目記録欄９９、対象モジュール記録欄１０１、及び取得時刻範囲記録欄１０３を含む。トレース項目記録欄９９には、第１のトレース取得指示２７や、第２のトレース取得指示２９に係わるトレース項目が、記録される。また、対象モジュール記録欄１０１には、図５で説明した複数個のモジュールのうちの、第１のトレース取得指示２７や、第２のトレース取得指示２９の対象になっている各々のモジュールを識別するための情報が、記録される。更に、取得時刻範囲記録欄１０３には、第１のトレース取得指示２７や、第２のトレース取得指示２９の対象になっている各々のモジュールを取得すべき時刻の範囲に係わる情報が、記録される。
【００７４】
上述した対象モジュール記録欄１０１に個別に記録されている各々のモジュールを識別するための情報は、上記トレース項目記録欄９９に個別に記録されている各々のトレース項目に係わる情報と夫々対応付けがなされている。また、上記取得時刻範囲記録欄１０３に個別に記録されている各々の取得時刻範囲に係わる情報も、上記対象モジュール記録欄１０１における各々のモジュールを識別するための情報と同様に、上記トレース項目記録欄９９に個別に記録されている各々のトレース項目に係わる情報と夫々対応付けがなされている。
【００７５】
なお、図６で示したトレース項目記録欄９９では、一番目のトレース項目として、“メモリリード”が、対象モジュール記録欄１０１では、一番目の対象モジュールとして“モジュールA”が、取得時刻範囲記録欄１０３では、一番目の取得時刻範囲に係わる情報として、“全範囲”が、夫々記録されている。また、図６で示したトレース項目記録欄９９では、二番目のトレース項目として、“CPUロード”が、対象モジュール記録欄１０１では、二番目の対象モジュールとして“全モジュール”が、取得時刻範囲記録欄１０３では、二番目の取得時刻範囲に係わる情報として、“23410〜42850”が、夫々記録されている。換言すれば、図６に示した例では、上記第１のトレース取得指示２７、第２のトレース取得指示２９として、モジュールAに限定したメモリリードをトレースする指示、及び全モジュールの実行に亘ってCPUロードをトレースする指示の２つが与えられていることになる。なお、指示内容については、単一であっても良いし、二以上であっても差し支えない。
【００７６】
図７は、図１に記載のトレース項目リスト１３のデータ構成の一例を示す説明図である。
【００７７】
トレース項目リスト１３は、既述の内容から明らかなように、（図１で示した）トレーススケジュール部１１が、トレース取得指示（即ち、上述した第１のトレース取得指示２７や、第２のトレース取得指示２９）を生成するに際し利用される。即ち、上記トレース取得指示を生成するのに必要なトレース項目（上記トレース取得指示の生成に適したトレース項目）が、上記トレース項目リスト１３の中からトレーススケジュール部１１により選定される。
【００７８】
上記トレース項目リスト１３は、図７に示すように、分類情報記録欄１０５、項目記録欄１０７、及び負荷情報記録欄１０９を含む。分類情報記録欄１０５には、分類情報、即ち、トレース項目を分類するに際しての情報が、記録される。また、項目記録欄１０７には、図４で説明した項目記録欄７５におけると同様に、或るトレースの、（ソフトウェア挙動解析装置１００に）取得された項目に係わる情報であって、上記分類情報に対応する情報が、記録される。更に、負荷情報記録欄１０９には、上記項目に係わる処理動作のCPU負荷に関する情報が、記録される。
【００７９】
上述した項目記録欄１０７に個別に記録されている各々の項目に係わる情報は、上記分類情報記録欄１０５に個別に記録されている各々の分類情報と夫々対応付けがなされている。また、上記負荷情報記録欄１０９に個別に記録されている各々のCPU負荷に関する情報も、上記項目記録欄１０５における各々の項目に係わる情報と同様に、上記分類情報記録欄１０５に個別に記録されている各々の分類情報と夫々対応付けがなされている。
【００８０】
なお、図７で示した分類情報記録欄１０５では、トレース項目が、ソフトウェア挙動トレースと、CPU状態トレースとに分類されている。そして、ソフトウェア挙動トレース側の項目記録欄１０７において、一番目の項目として、“分岐”が、二番目の項目として、“メモリライト”が、三番目の項目として、“メモリリード”が、四番目の項目として、“タスクスイッチ”が、六番目の項目として、“例外発生”が、夫々記録されている。同じくソフトウェア挙動トレース側の負荷情報記録欄１０９側において、一番目の負荷情報として、“3”が、二番目の負荷情報として、“6”が、三番目の負荷情報として、“7”が、四番目の負荷情報として、“2”が、六番目の負荷情報として、“2”が、夫々記録されている。
【００８１】
一方、CPU状態トレース側の項目記録欄１０７において、一番目の項目として、“CPUロード”が、二番目の項目として、“割り込み頻度”が、三番目の項目として、“CPU動作モード”が、四番目の項目として、“割り込み頻度”が、五番目の項目として、“TLBリファイル頻度”が、夫々記録されている。また、六番目の項目として、“キャッシュヒット率”が、八番目の項目として、“電力消費量”が、夫々記録されている。同じくCPU状態トレース側の負荷情報記録欄１０９側において、一番目の負荷情報として、“3”が、二番目の負荷情報として、“2”が、三番目の負荷情報として、“1”が、四番目の負荷情報として、“2”が、五番目の負荷情報として、“1.5”が、六番目の負荷情報として、“2”が、八番目の負荷情報として、“7”が、夫々記録されている。
【００８２】
上述したソフトウェア挙動トレースは、解析担当者による挙動解析インタフェース部１を利用した解析作業の対象になる情報を取得するためのトレースである。CPU状態トレースは、既述のCPU模擬部において模擬的に実行されるCPUの状態に係わる情報を取得するためのトレースである。CPU状態トレースにより取得された上記CPUの状態に係わる情報は、解析担当者による挙動解析インタフェース部１を利用した解析作業の対象になるだけでなく、トレーススケジュール部１１による上述したようなトレース取得指示（即ち、上述した第１のトレース取得指示２７や、第２のトレース取得指示２９）の生成に使用される。例えば、トレーススケジュール部１１により生成された上記トレース取得指示の内容が、CPUロードのトレースの取得に係わるものであったとすれば、各々の実行時刻におけるCPUロードの値が、ソフトウェア挙動トレースDB３に収集される。トレーススケジュール部１１は、ソフトウェア挙動トレースDB３に収集された上記CPUロード値を参照し、該CPUロード値が一定値を超える期間のみ、又は、一定値を下廻る期間のみ、トレースを収集するような、トレース取得指示（上述した第１のトレース取得指示２７や、第２のトレース取得指示２９）を生成することになる。
【００８３】
図８は、図１に記載のトレース履歴２５のデータ構成の一例を示す説明図である。
【００８４】
上記トレース履歴２５とは、既述の内容から明らかなように、トレーススケジュール部１１により過去に生成されたトレース取得指示の履歴のことである。上記トレース履歴２５は、図８に示すように、CPU模擬装置情報記録欄１１１、トレース項目記録欄１１３、対象モジュール記録欄１１５、取得時刻範囲記録欄１１７、取得開始日時記録欄１１９、及び取得終了日時記録欄１２１を含む。CPU模擬装置情報記録欄１１１には、トレーススケジュール部１１が、過去に生成したトレース取得指示（即ち、第１のトレース取得指示２７や、第２のトレース取得指示２９）の宛先であるCPU模擬装置（即ち、第１のCPU模擬装置４００、及び第２のCPU模擬装置５００）を識別するための情報が、記録される。また、トレース項目記録欄１１３には、第１のトレース取得指示２７や、第２のトレース取得指示２９に係わるトレース項目が、記録される。また、対象モジュール記録欄１１５には、図５で説明した複数個のモジュールのうちの、第１のトレース取得指示２７や、第２のトレース取得指示２９の対象になっている各々のモジュールを識別するための情報が、記録される。また、取得時刻範囲記録欄１１７には、第１のトレース取得指示２７や、第２のトレース取得指示２９の対象になっている各々のモジュールを取得すべき時刻の範囲に係わる情報が、記録される。また、取得開始日時記録欄１１９には、対象モジュール記録欄１１５に記録される各々のモジュールの取得が実際に開始された日時に係わる情報が、記録される。更に、取得終了日時記録欄１２１には、対象モジュール記録欄１１５に記録される各々のモジュールの取得が実際に終了した日時に係わる情報が、記録される。
【００８５】
上述したトレース項目記録欄１１３に個別に記録されている各々のトレース項目に係わる情報は、上記CPU模擬装置情報記録欄１１１に個別に記録されている各々のCPU模擬装置情報と夫々対応付けがなされている。また、上記対象モジュール記録欄１１５に個別に記録されている各々の対象モジュールに係わる情報も、上記トレース項目記録欄１１３における各々のトレース項目に係わる情報と同様に、上記CPU模擬装置情報記録欄１１１と夫々対応付けがなされている。また、上記取得時刻範囲記録欄１１７に個別に記録されている上記各々のモジュールの取得時刻範囲に係わる情報も、上記トレース項目記録欄１１３における各々のトレース項目に係わる情報や、上記対象モジュール記録欄１１５における各々の対象モジュールに係わる情報と同様に、上記CPU模擬装置情報記録欄１１１と夫々対応付けがなされている。
【００８６】
また、上記取得開始日時記録欄１１７に個別に記録されている上記取得開始日時に係わる情報も、上記トレース項目記録欄１１３における各々のトレース項目に係わる情報や、上記対象モジュール記録欄１１５における各々の対象モジュールに係わる情報や、上記取得時刻範囲記録欄１１７における各々の取得時刻範囲に係わる情報と同様に、上記CPU模擬装置情報記録欄１１１と夫々対応付けがなされている。更に、上記取得終了日時記録欄１２１における上記取得終了日時に係わる情報も、上記トレース項目記録欄１１３における各々のトレース項目に係わる情報や、上記対象モジュール記録欄１１５における各々の対象モジュールに係わる情報や、上記取得時刻範囲記録欄１１７における各々の取得時刻範囲に係わる情報や、上記取得開始日時記録欄１１７における各々の取得時刻開始日時に係わる情報と同様に、上記CPU模擬装置情報記録欄１１１と夫々対応付けがなされている。
【００８７】
なお、図８で示したCPU模擬装置情報記録欄１１１では、一番目のCPU模擬装置情報として、“1”が、トレース項目記録欄１１３では、一番目のトレース項目に係わる情報として、“メモリリード”が、対象モジュール記録欄１１５では、一番目の対象モジュールとして“モジュールA”が、夫々記録されている。また、取得時刻範囲記録欄１１７では、一番目の取得時刻範囲に係わる情報として、“全範囲”が、取得開始日時記録欄１１７では、一番目の取得開始日時に係わる情報として、“2008/07/23 16:08”が、取得終了日時記録欄１２１では、一番目の取得終了日時に係わる情報として、“2008/07/23 16:38”が、夫々記録されている。
【００８８】
また、図８で示したCPU模擬装置情報記録欄１１１では、二番目のCPU模擬装置情報として、“1”が、トレース項目記録欄１１３では、二番目のトレース項目に係わる情報として、“分岐”が、対象モジュール記録欄１１５では、二番目の対象モジュールとして“モジュールB”が、夫々記録されている。また、取得時刻範囲記録欄１１７では、二番目の取得時刻範囲に係わる情報として、“全範囲”が、取得開始日時記録欄１１７では、二番目の取得開始日時に係わる情報として、“2008/07/23 16:39”が、取得終了日時記録欄１２１では、二番目の取得終了日時に係わる情報として、“未終了”が、夫々記録されている。
【００８９】
また、図８で示したCPU模擬装置情報記録欄１１１では、三番目のCPU模擬装置情報として、“1”が、トレース項目記録欄１１３では、三番目のトレース項目に係わる情報として、“CPUロード”が、対象モジュール記録欄１１５では、三番目の対象モジュールとして“全モジュール”が、夫々記録されている。また、取得時刻範囲記録欄１１７では、三番目の取得時刻範囲に係わる情報として、“23410〜42850”が、取得開始日時記録欄１１７では、三番目の取得開始日時に係わる情報として、“未開始”が、取得終了日時記録欄１２１では、三番目の取得終了日時に係わる情報として、“未終了”が、夫々記録されている。
【００９０】
また、図８で示したCPU模擬装置情報記録欄１１１では、四番目のCPU模擬装置情報として、“2”が、トレース項目記録欄１１３では、四番目のトレース項目に係わる情報として、“メモリライト”が、対象モジュール記録欄１１５では、四番目の対象モジュールとして“全モジュール”が、夫々記録されている。また、取得時刻範囲記録欄１１７では、四番目の取得時刻範囲に係わる情報として、“全範囲”が、取得開始日時記録欄１１７では、四番目の取得開始日時に係わる情報として、“2008/07/23 16:08“が、取得終了日時記録欄１２１では、四番目の取得終了日時に係わる情報として、“2008/07/23 16:24”が、夫々記録されている。
【００９１】
また、図８で示したCPU模擬装置情報記録欄１１１では、五番目のCPU模擬装置情報として、“2”が、トレース項目記録欄１１３では、五番目のトレース項目に係わる情報として、“分岐”が、対象モジュール記録欄１１５では、五番目の対象モジュールとして“モジュールB”が、夫々記録されている。また、取得時刻範囲記録欄１１７では、五番目の取得時刻範囲に係わる情報として、“23410〜42850”が、取得開始日時記録欄１１７では、五番目の取得開始日時に係わる情報として、“2008/07/23 16:25”が、取得終了日時記録欄１２１では、五番目の取得終了日時に係わる情報として、“未終了”が、夫々記録されている。
【００９２】
更に、図８で示したCPU模擬装置情報記録欄１１１では、六番目のCPU模擬装置情報として、“2”が、トレース項目記録欄１１３では、六番目のトレース項目に係わる情報として、“CPUロード”が、対象モジュール記録欄１１５では、六番目の対象モジュールとして“全モジュール”が、夫々記録されている。また、取得時刻範囲記録欄１１７では、六番目の取得時刻範囲に係わる情報として、“全範囲”が、取得開始日時記録欄１１７では、六番目の取得開始日時に係わる情報として、“未開始“が、取得終了日時記録欄１２１では、六番目の取得終了日時に係わる情報として、“未終了”が、夫々記録されている。
【００９３】
トレーススケジュール部１１は、同一内容のトレースを取得することがないよう、図８で示したトレース履歴２５を参照しながら、生成しようとするトレース取得指示（例えば、第１のトレース取得指示２７や、第２のトレース取得指示２９）に含めようとするトレース項目を決定する。
【００９４】
図９は、図１に記載のソフトウェア挙動解析システムを構成する各部の処理動作の一例を示すフローチャートである。
【００９５】
図９において、まず、（ソフトウェア挙動解析装置１００の）挙動解析インタフェース部１が、解析担当者から与えられた指示に従い、ソフトウェア実行指示を、（システム模擬装置２００の）CPU模擬部７へ送信する（ステップS１３１）。上記ソフトウェア実行指示を受信すると、CPU模擬部７は、ソフトウェアの実行に係わる処理動作を開始する。ここで、実行の対象になるソフトウェアとして、CPU模擬部７は、上述した解析対象ソフトウェア５のバイナリコード（例えば、図５のバイナリコード記録欄９５に記録されているような）を、ソフトウェア挙動解析装置１００から取得する。また、CPU模擬部７が上記（実行の対象になる）ソフトウェアを実行するに際して必要になる入力情報２１については、外部環境模擬部９により生成される。また、CPU模擬部７が、上記（実行の対象になる）ソフトウェアを実行することにより生成される出力情報１９については、外部環境模擬部９へ与えられる。CPU模擬部７は、上記ソフトウェアの実行時に、実行したCPU命令数をカウントすると共に、該カウントしたCPU命令数と、上記入力情報２１とを、入力記録データ３３として、ソフトウェア挙動解析装置１００へ出力する。CPU模擬部７は、また、上記カウントしたCPU命令数と、上記出力情報１９とを、出力記録データ３１として、ソフトウェア挙動解析装置１００へ出力する（ステップS１３２）。
【００９６】
次に、CPU模擬部７は、トレーススケジュール部１１に対し、トレース取得開始指示を送信する。該トレース取得開始指示の受信が、トレーススケジュール部１１における処理動作開始の契機となる（ステップS１３３）。即ち、トレーススケジュール部１１は、第１のCPU模擬装置４００の第１のCPU模擬部１５に対し、第１のトレース取得指示２７を送信し（ステップS１３４）、第２のCPU模擬装置５００の第２のCPU模擬部１７に対し、第２のトレース取得指示２９を送信する（ステップS１３６）。トレーススケジュール部１１は、また、上記第１のCPU模擬部１５に対し、上記とは別の第１のトレース取得指示２７を送信し（ステップS１３５）、上記第２のCPU模擬部１７に対し、上記とは別の第２のトレース取得指示２９を送信する（ステップS１３７）。これにより、第１のCPU模擬部１５におけるトレース取得処理に係わる動作、及び第２のCPU模擬部１７におけるトレース取得処理に係わる動作の進行状況が（トレーススケジュール部１１によって）管理されることになる。
【００９７】
ステップS１３４において上記第１のトレース取得指示２７を受信すると、第１のCPU模擬部１５は、該第１のトレース取得指示２７に基づき、トレース取得に係わる処理動作を実行し（ステップS１３８）、それにより取得した挙動トレースを、挙動解析インタフェース部１へ送信する（ステップS１３９）。第１のCPU模擬部１５は、また、ステップS１３５において上記別の第１のトレース取得指示２７を受信すると、該別の第１のトレース取得指示２７に基づき、トレース取得に係わる処理動作を実行し（ステップS１３８）、それにより取得した挙動トレースを、挙動解析インタフェース部１へ送信する（ステップS１３９）。
【００９８】
一方、第２のCPU模擬部１７は、ステップS１３６においてトレーススケジュール部１１から出力された第２のトレース取得指示２９を受信すると、該第２のトレース取得指示２９に基づき、トレース取得に係わる処理動作を実行し（ステップS１４２）、それにより取得した挙動トレースを、挙動解析インタフェース部１へ送信する（ステップS１４３）。第２のCPU模擬部１７は、また、ステップS１３７においてトレーススケジュール部１１から出力された上記別の第２のトレース取得指示２９を受信すると、該別の第２のトレース取得指示２９に基づき、トレース取得に係わる処理動作を実行し（ステップS１４４）、それにより取得した挙動トレースを、挙動解析インタフェース部１へ送信する（ステップS１４５）。
【００９９】
挙動解析インタフェース部１が、ステップS１３９、及びステップS１４１において夫々第１のCPU模擬部１５から送信される挙動トレースを受信し、また、ステップS１４３、及びステップS１４５において夫々第２のCPU模擬部１７から送信される挙動トレースを受信した後に、トレーススケジュール部１１から送信されるトレース取得完了通知を受信することにより、図９で示したソフトウェア挙動解析システムに係わる一連の処理動作が終了する。
【０１００】
図９で示したソフトウェア挙動解析システムに係わる一連の処理動作と並行して、挙動解析インタフェース部１による処理動作が実行される。該処理動作は、解析担当者から挙動解析インタフェース部１に与えられる指示に基づいて実行されるものであり、何れもソフトウェア挙動解析装置１００内に保持される、解析対象ソフトウェア５、入力記録データ３３、出力記録データ３１、ソフトウェア挙動トレースDB３に係わる情報等の表示に係わる処理動作である。上記のうち、入力記録データ３３、及び出力記録データ３１の表示が可能になるのは、図９においてステップS１３２で示した処理動作が完了した後である。ソフトウェア挙動トレースDC３に係わる情報については、第１のCPU模擬部１５、及び第２のCPU模擬部１７におけるトレース取得のための処理動作の進行の度合に応じて増加していくため、挙動解析インタフェース部１が表示可能な情報についても、トレース取得のための処理動作が進行するのにつれて増加していく。トレーススケジュール部１１は、上述した解析作業に役立つトレース項目を、優先して取得することができるように、各CPU模擬部（即ち、第１のCPU模擬部１５、及び第２のCPU模擬部１７）におけるトレース項目を決定することになる。
【０１０１】
図１０は、図１に記載のトレーススケジュール部１１の処理動作の一例を示すフローチャートである。
【０１０２】
図１０において、トレーススケジュール部１１は、まず、（システム模擬装置２００の）CPU模擬部７からのトレース取得開始指示の送信を受信すべく、待機状態になる（ステップS１５１）。この待機状態において、CPU模擬部７からのトレース取得開始指示を受信すると、トレーススケジュール部１１は、（上述したトレース取得の処理動作を）実行中でないCPU模擬部（例えば、第１のCPU模擬部１５や、第２のCPU模擬部１７）が無いかどうかチェックする処理に移行する（ステップS１５２）。
【０１０３】
該チェックの結果、（トレース取得の処理を）実行中でないCPU模擬部が無いと判断すると（ステップS１５２でYES）、トレーススケジュール部１１は、該CPU模擬部による現在実行中の所定の処理動作が終了するまで待機する。この処理動作は、何れかのCPU模擬部によるトレース取得の処理の終了を待つためのものである（ステップS１５３）。そして、（トレース取得の処理を）実行中でないCPU模擬部があると判断するに到った時点で（ステップS１５２でNO）、トレーススケジュール部１１は、現にトレース取得の処理を実行していないCPU模擬部を選択するための処理を行うことになる。この処理動作は、現にトレース取得の処理を実行していないCPU模擬部を１つだけ選択するためのものである（ステップS１５４）。
【０１０４】
次に、トレーススケジュール部１１は、ステップS１５４で選択した１つのCPU模擬部に対して送信すべきトレース取得指示を生成するための処理動作を実行する。（ステップS１５５）。次に、トレーススケジュール部１１は、上記生成したトレース取得指示の中に含まれる項目をチェックすることにより、全てのトレース項目について収集（取得）が完了したかどうかチェックする処理に移行する（ステップS１５６）。該チェックの結果、全てのトレース項目について収集が完了していると判断すれば（ステップS１５６でYES）、トレーススケジュール部１１は、挙動解析インタフェース部１に対し、トレース取得完了通知を送信する処理を実行することで、図１０で示した一連の処理動作が終了する（ステップS１５８）。一方、該チェックの結果、全てのトレース項目について収集が完了していないと判断すれば（ステップS１５６でNO）、トレーススケジュール部１１は、ステップS１５５で生成したトレース取得指示を、ステップS１５４で選択したCPU模擬部に送信する処理動作を実行すると共に（ステップS１５７）、ステップS１５２で示した処理動作に復帰することになる。
【０１０５】
図１１は、図１０で示したトレーススケジュール部１１の処理動作の一例を示すフローチャートのサブルーチンを示すフローチャートであり、図１０のステップS１５５に記載のトレース取得指示の生成に係わる処理動作の詳細を示したものである。
【０１０６】
図１１において、トレーススケジュール部１１は、まず、ソフトウェア挙動解析装置１００が保持する解析操作記録２３にアクセスし、該解析操作記録２３の中に未処理の解析操作記録２３があるかどうかチェックする（ステップS１６１）。該チェックの結果、未処理の解析操作記録２３があると判断すれば（ステップS１６１でYES）、該未処理の解析操作記録２３より操作を選択する処理を行う（ステップS１６２）。例えば、上記チェックの対象が、図２で示した解析操作記録２３である場合には、上述した操作に関連するモジュールは、モジュールAとなる。次に、トレーススケジュール部１１は、ステップS１６２で選択した操作に関連するモジュールが、該未処理の解析操作記録２３の中にあるかどうかチェックする（ステップS１６３）。該チェックの結果、ステップS１６２で選択した操作に関連するモジュールがあると判断すれば（ステップS１６３でYES）、トレーススケジュール部１１は、次に、トレース履歴２５を参照することにより、該モジュールに対する未取得のトレース項目があるかどうかチェックする（ステップS１６４）。
【０１０７】
該チェックの結果、未取得のトレース項目があると判断すれば（ステップS１６４でYES）、トレーススケジュール部１１は、次に、該モジュールに対する該トレース項目の取得指示を生成するための処理を行う。図６で示した第１のトレース取得指示２７、及び第２のトレース取得指示２９のデータ構成を例に挙げて説明すれば、トレーススケジュール部１１が該処理を行うことにより、トレース項目記録欄９９、対象モジュール記録欄１０１、及び取得時刻範囲記録欄１０３が夫々１行分だけ追加されることになる（ステップS１６５）。ステップS１６５で示した該トレース項目の取得指示を生成するための処理が終了すると、トレーススケジュール部１１は、合計処理負荷が規定値未満かどうかチェックする処理を実行する。
【０１０８】
即ち、まず、図６で示したトレース取得指示（２７、２９）における各トレース項目について、トレース取得管理装置３００に保持されているトレース項目リスト１３（詳細は、図７で示した）を参照して処理負荷をチェックし、各トレース項目の積算値を合計処理負荷とする。次に、上記のようにして求めた合計処理負荷が、上記規定値未満であるかどうかチェックする（ステップS１７２）。該チェックの結果、上記合計処理負荷が、上記規定値未満であると判断すれば（ステップS１７２でYES）、トレーススケジュール部１１は、ステップS１６１で示した処理動作に復帰する。一方、上記合計処理負荷が、上記規定値未満で無いと判断すれば（ステップS１７２でNO）、図１１で示した一連の処理動作は終了することになる。
【０１０９】
一方、ソフトウェア挙動解析装置１００に保持されている上記解析操作記録２３の中に、未処理の解析操作記録２３が無いと判断すれば（ステップS１６１でNO）、トレーススケジュール部１１は、何れもトレース取得管理装置３００に保持されているトレース項目リスト１３、及びトレース履歴２５を参照する。そして、取得を完了していないトレース項目があるかどうかチェックする（ステップS１６９）。該チェックの結果、取得を完了していないトレース項目があると判断すれば（ステップS１６９でYES）、トレーススケジュール部１１は、該トレース項目に係わるトレース取得指示（２７、２９）を生成するための処理を実行する。そして、ステップS１６５での説明と同様に、図６で示したトレース項目記録欄９９、対象モジュール記録欄１０１、及び取得時刻範囲記録欄１０３が夫々１行分だけ追加されることになる（ステップS１７０）。ステップS１７０での処理が終了すると、ステップS１７２で示した処理動作に移行する。
【０１１０】
一方、該チェックの結果、取得を完了していないトレース項目が無いと判断すれば（ステップS１６９でNO）、トレーススケジュール部１１は、全てのトレース項目について収集が完了したことを示す通知を、挙動解析インタフェース部１に発し（ステップS１７１）、図１１で示した一連の処理動作は終了する。
【０１１１】
ステップS１６２で選択した操作に関連するモジュールが、該未処理の解析操作記録２３の中に無いと判断すれば（ステップS１６３でNO）、トレーススケジュール部１１は、次に、トレース履歴２５（詳細は、図８で示した）を参照して、該操作に関連する未取得のトレース項目があるかどうかチェックする（ステップS１６６）。該チェックの結果、上記未取得のトレース項目があると判断すれば（ステップS１６６でYES）、トレーススケジュール部１１は、該トレース項目に係わるトレース取得指示（２７、２９）を生成するための処理を実行する。即ち、トレーススケジュール部１１は、ソフトウェア挙動解析装置１００に保持されているソフトウェア挙動トレースDB３（詳細は、図４で示した）を参照し、該トレース項目に関するトレースから、該トレースの取得時刻範囲を算出する。例えば、上記トレースの項目が、図４で示した“CPUロード”である場合には、トレーススケジュール部１１は、該CPUロード値が規定値を超えている時刻範囲のみに関するトレース取得指示（２７、２９）を生成する。そして、図６で示したトレース項目記録欄９９、対象モジュール記録欄１０１、及び取得時刻範囲記録欄１０３を夫々１行分だけ追加する（ステップS１６７）。ステップS１６７での処理が終了すると、ステップS１７２で示した処理動作に移行する。
【０１１２】
上記操作に関連する未取得のトレース項目の有無のチェックの結果、上記未取得のトレース項目が無いと判断すれば（ステップS１６６でNO）、トレーススケジュール部１１は、該操作の処理が完了したものと判断する。そして、ソフトウェア挙動解析装置１００に保持されている解析操作記録２３（詳細は、図２で示した）の処理状況記録欄４７に、該操作の処理状態が“完了”した旨を記録し（ステップS１６８）、ステップS１７２で示した処理動作に移行する。
【０１１３】
図１２は、図１に記載の第１のCPU模擬部１５、及び第２のCPU模擬部１７におけるトレース取得に際しての処理動作の一例を示すフローチャートである。なお、第１のCPU模擬部１５における上記処理動作、及び第２のCPU模擬部１７における上記処理動作は、同様であるので、以下では、第１のCPU模擬部１５における上記処理動作についてのみ説明し、第２のCPU模擬部１７における上記処理動作については説明を省略する。
【０１１４】
図１２において、まず、第１のCPU模擬部１５は、次に実行すべき命令が（トレーススケジュール部１１から）与えられているかどうかチェックする（ステップS１８１）。該チェックの結果、与えられていると判断すれば（ステップS１８１でYES）、第１のCPU模擬部１５は、ソフトウェア挙動解析装置１００に保持されている入力記録データ３３を参照して、現在まで実行した命令実行数に対応（合致）する入力情報（２１）があるかどうかチェックする（ステップS１８２）。該チェックの結果、上記命令実行数に対応（合致）する入力情報（２１）があると判断すれば（ステップS１８２でYES）、次のステップS１８２で示す該入力情報（２１）に対応する処理を実行するための処理動作に移行する。
【０１１５】
即ち、上記入力情報（２１）が、I/O入力に関する情報であれば、第１のCPU模擬部１５は、I/O読み出し命令を実行する。また、上記入力情報（２１）が、割り込み入力に関する情報であれば、第１のCPU模擬部１５は、第１のCPU模擬装置４００に含まれる割り込みコントローラ（図示しない）の状態変更等の処理を実行する。なお、トレーススケジュール部１１から出力された第１のトレース取得指示２７に、I/O読み出し命令の実行や、割り込みコントローラの状態変更等の処理の実行に関するトレースの取得が含まれている場合には、第１のCPU模擬部１５は、それらのトレースに係わる情報を生成することになる（ステップS１８３）。ステップS１８３で示した処理動作が終了すると、第１のCPU模擬部１５は、次に、命令実行数を加算する処理を実行する。該命令実行数の加算処理により得られた命令実行数の加算値は、既述のステップS１８２での判断に用いられる（ステップS１８５）。ステップS１８５で示した処理動作が終了すると、ステップS１８１で示した処理動作に復帰する。
【０１１６】
ステップS１８１で、次に実行すべき命令が（トレーススケジュール部１１から）与えられていると判断し（ステップS１８１でYES）、且つ、現在まで実行した命令実行数に対応（合致）する入力情報（２１）が無いと判断すれば（ステップS１８２でNO）、第１のCPU模擬部１５は、次の命令を実行する処理動作に移行する。即ち、トレーススケジュール部１１から出力された第１のトレース取得指示２７に、該命令に関するトレースの取得が含まれている場合には、第１のCPU模擬部１５は、ステップS１８３で説明したのと略同様に、それらのトレースに係わる情報を生成し（ステップS１８４）、ステップS１８５で示した処理動作に移行することになる。
【０１１７】
一方、第１のCPU模擬部１５が、次に実行すべき命令が（トレーススケジュール部１１から）与えられていないと判断すれば（ステップS１８１でNO）、直ちに図１２で示した一連の処理動作は終了することになる。
【０１１８】
以上説明したように、本発明の一実施形態によれば、CPU模擬装置（４００、５００）のCPU模擬部（１５、１７）が、実行命令数を参照しながら、入力記録データ３３を処理するので、ソフトウェア挙動解析装置１００では、CPU模擬部（１５、１７）に入力記録データ３３を与えるタイミングを再現しながら、異なるトレース項目を取得することが可能になる。同時に、トレーススケジュール部１１が、ソフトウェア挙動解析装置１００に保持されている解析操作記録２３や、ソフトウェア挙動トレースDB３等の内容を参照しながら、ソフトウェア挙動解析装置１００に保持されている解析対象ソフトウェア５の挙動解析に必要になる可能性の高いトレース項目を判別して、各々のCPU模擬部（１５、１７）に対しトレースの取得を指示するため、解析担当者によるトレース項目の割り当て作業を省略しつつ、効率良くトレースを取得することが可能になる。
【０１１９】
以上、本発明の好適な実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【符号の説明】
【０１２０】
１  挙動解析インタフェース部
３  ソフトウェア挙動トレースデータベース（ソフトウェア挙動DB）
５  解析対象ソフトウェア
７、１５、１７  CPU模擬部
９  外部環境模擬部
１１  トレーススケジュール部
１３  トレース項目リスト
１９  出力情報
２１  入力情報
２３  解析操作記録
２５  トレース履歴
２７  第１のトレース取得指示
２９  第２のトレース取得指示
３１  出力記録データ
３３  入力記録データ
３５  第１の挙動トレース
３７  第２の挙動トレース３７
１００  ソフトウェア挙動解析装置
２００  システム模擬装置
３００  トレース取得管理装置
４００  第１のCPU模擬装置
５００  第２のCPU模擬装置
【図１】
2010182218.tif 000003
【図２】
2010182218.tif 000004
【図３】
2010182218.tif 000005
【図４】
2010182218.tif 000006
【図５】
2010182218.tif 000007
【図６】
2010182218.tif 000008
【図７】
2010182218.tif 000009
【図８】
2010182218.tif 000010
【図９】
2010182218.tif 000011
【図１０】
2010182218.tif 000012
【図１１】
2010182218.tif 000013
【図１２】
2010182218.tif 000014