(57)【要約】【課題】距離的に離れた場所に複数の制御モジュールが分散して実装されるシステムでもシステム全体でソフトウェアの分析を可能にする。【解決手段】複数の制御モジュールで構成されるデータ処理システムにおいて、データ処理システム全体で共通の時間をカウントするタイマを夫々の制御モジュールに導入し、上位の制御モジュールのタイマによる時刻情報によって下位の制御モジュールのタイマによる時刻情報を同期させる時間同期処理を採用する。例えば、アプリケーション処理に際して、ログを取得すると同時にタイマの時刻を用いたタイムスタンプを付加するログ取得機能を実装する。【選択図】図１
2015035158.tif 000002
【特許請求の範囲】
【請求項１】
相互に通信可能の複数個の制御モジュールを有するデータ処理システムであって、
前記制御モジュールは、通信インタフェース及びタイマを含み、自らが実行するプログラム記述にしたがって、所要のアプリケーション処理、単体ログ生成処理、及び前記タイマによる時刻を同期させる時間同期処理を行い、
前記単体ログ生成処理は、自らが実行するプログラム中で指定されたテストポイントでログ情報と前記タイマの時刻情報に基づくタイムスタンプを生成し、それらを当該テストポイントの属性情報と共に蓄積して単体ログを生成する処理であり、
前記時間同期処理は、上位の制御モジュールのタイマで得られる時刻情報を用いて、下位の制御モジュールのタイマで得られる時刻情報を同期させる処理である、データ処理システム。
【請求項２】
前記時間同期処理は、下位の制御モジュールが上位の制御モジュールからそのタイマの時刻の情報を受け取り、受け取った時刻の情報、及び当該時刻の情報を受け取ったときの自らのタイマの時刻の情報等に基づいて、自らのタイマの時刻を補正する処理である、請求項１記載のデータ処理システム。
【請求項３】
前記タイマの時刻を補正する処理は、自らのタイマそれ自体に時刻書き換えを行う処理である、請求項２に記載のデータ処理システム。
【請求項４】
前記タイマの時刻を補正する処理は、タイムスタンプの生成に当たって自らのタイマから得られる時刻情報を補正する処理である、請求項２に記載のデータ処理システム。
【請求項５】
上位の制御モジュールから下位の制御モジュールまでの通信に要する通信遅延を取得し、実際の送信時刻から受信時刻の差から通信遅延を減算してタイマの時刻誤差を演算し、この時間差を用いてタイマの時刻を補正する、請求項２記載のデータ処理システム。
【請求項６】
外部インタフェース回路は、第１コマンド受信時に自らのタイマから時刻情報を取得する制御を行い、前記第１コマンド出力時のタイマの時刻情報を伴って第２コマンドを出力し、第３コマンドを出力するとき自らのタイマの時刻情報を取得する制御を行い、前記第３コマンドを受信したときの自らのタイマの時刻情報を伴って第４コマンドを出力する、請求項１記載のデータ処理システム。
【請求項７】
上位の制御モジュールからの第１コマンド受信時に自らのタイマから第１の時刻情報を取得すると共に、当該上位の制御モジュールが第２コマンドに伴って出力する前記第１コマンド出力時の上位タイマの第２の時刻情報を取得し、更に、第３コマンドを前記上位の制御モジュールに出力するとき自らのタイマの第３の時刻情報を取得し、前記第３のコマンドを受信した上位の制御モジュールが前記第４コマンドに伴って出力する前記第３コマンドを受信したときの当該上位のタイマの第４の時刻情報を取得し、第４の時刻情報と第１の時刻情報との差分と、第３の時刻情報と第２の時刻情報との差分との和の半分の時間を演算し、演算された情報を、上位の制御モジュールから下位の制御モジュールまでの通信に要する通信遅延として取得し、実際の送信時刻から受信時刻の差から通信遅延を減算してタイマの時刻誤差を演算し、この時間差を用いてタイマの時刻を補正する、請求項６記載のデータ処理システム。
【請求項８】
前記外部インタフェース回路は、前記第１コマンドコマンドを受信したとき自らのタイマから第１の時刻情報を取得し、前記第２コマンドに伴って供給される第２の時刻情報を取得し、第３コマンドを出力するとき自らのタイマの第３の時刻情報を取得し、前記第４コマンドに伴って供給される第４の時刻情報を取得する、同期制御回路を有する、請求項７記載のデータ処理システム。
【請求項９】
前記中央処理装置は、前記外部インタフェース回路が取得した第１乃至第４の時刻情報を利用して前記通信遅延及び前記時刻誤差の演算を行う、請求項８記載のデータ処理システム。
【請求項１０】
前記中央処理装置は、アプリケーション処理の開始前に通信遅延を測定し、測定した通信遅延を用いてタイマの時刻補正を初期的行う処理を制御する、請求項９記載のデータ処理システム。
【請求項１１】
前記中央処理装置は、前記初期的なタイマ時刻補正の後、所定インターバルで発生するタイマ割り込みに基づいて、既に測定された前記通信遅延を用いてタイマの時刻補正を行う処理を制御する、請求項１０記載のデータ処理システム。
【請求項１２】
前記テストポイントの属性情報は、制御モジュールに割り当てられた第１の識別情報、制御モジュールで実行されるプログラム上のテストポイントの位置を示す第２の識別情報、及びテストポイントにおいける処理を示す第３の識別情報である、請求項１記載のデータ処理システム。
【請求項１３】
ログ解析回路を更に有し、
前記ログ解析回路は、前記制御モジュール毎に生成された単体ログを回収し、回収した夫々の単体ログに含まれるタイムスタンプを指標にテストポイントの属性情報、ログ情報、及びタイムスタンプをマージすることによって単体ログの統合を行い、システムログを生成する、請求項１記載のデータ処理システム。
【請求項１４】
前記制御モジュールは車載ネットワークに接続された車載ＥＣＵを構成する、請求項１記載のデータシステム。
【請求項１５】
前記複数の制御モジュールは、エミュレーション対象とされる実機と、前記実機をエミュレーションするエミュレータである、請求項１記載のデータ処理システム。
【請求項１６】
複数の制御モジュールが通信を行いながら動作するデータ処理システムであって、データ処理システム全体で共通の時間をカウントするタイマを夫々の制御モジュールに設け、上位の制御モジュールのタイマによる時刻情報によって下位の制御モジュールのタイマによる時刻情報を同期させる時間同期処理を制御モジュール間で行う、データ処理システム。
【請求項１７】
前記制御モジュールは、アプリケーション処理に際して、ログを取得すると同時にタイマの時刻を用いたタイムスタンプを付加するログ取得処理を行う、請求項１６記載のデータ処理システム。
【請求項１８】
夫々の前記制御モジュールの前記ログ取得機能で取得されたログを集め、集めたログの情報をタイムスタンプに基づいてマージすることによって、システム全体で動作するソフトウェアのシステムログを生成する処理を行うログ解析回路を更に有する、請求項１７記載のデータ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信経路で接続されている複数の制御モジュールによる共同的なデータ処理について統合的な評価を可能にするデータ処理システムに関し、例えば車載ネットワークに複数のＥＣＵ（エレクトロニック・コントロール・ユニット）が接続された車載電子制御システムに適用して有効な技術に関する。
【背景技術】
【０００２】
自動車など様々な機器の電子化によって制御モジュールの総数が増加し、組込みシステムの開発工数が上昇している。この為、ソフトウェアの開発プロセスの見直しが行われている。組込みシステムの開発工程を見たときにシステムの実機検証の工程がシミュレーション主体になっており、この点を改善しようとするものとして、特許文献１乃至特許文献３がある。
【０００３】
特許文献１及び特許文献２は、データバス、アドレスバスを持つプロセッサのソフトウェアを分析するためのシステムについて提案している。当該文献はソフトウェアの任意の場所にアドレス空間の定められた番地にタグ情報を出力するタグステートメントを挿入する。次にプロセッサの外部出力バスにデバッグ装置を接続しプロセッサのバスアクセスを監視する、というものである。ソフトウェアの実行によりタグ情報の出力が行われるとデバッグ装置はバスの監視情報からタグ情報を判別し、取得したタグ情報と時間を記録する。記録したタグ情報と時間を計算手段に移動し解析を行うことでソフトウェアの分析を行う。
【０００４】
特許文献３は、複数のプロセッサで動作するソフトウェアを分析するためのシステムについて提案する。ここで提案されるシステムは、観測対象とする画像処理装置とログ解析を行う外部装置からなる。画像処理装置は１つのメインＣＰＵと１つ以上のサブＣＰＵで構成される。メインＣＰＵはサブＣＰＵに命令を発行し発行時間を記録する。サブＣＰＵは命令の実行時間を記録する。外部装置はメインＣＰＵとサブＣＰＵのログを回収し、命令発行時間と実行時間からメインＣＰＵとサブＣＰＵの動作状況を分析する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−２０４９３４号公報
【特許文献２】特開平０９−２１８８００号公報
【特許文献３】特開２０１２−１９０１９７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明者は、ハードウェアの側面から開発プロセスについて新たな提案を行おうとするものである。実機でソフトウェア評価を行うという点に関し、従来技術は一度に分析できるＣＰＵの数に制限があり、また、ネットワーク構成に制限がある、ことが明らかにされた。
【０００７】
例えば特許文献１及び特許文献２は複数のモジュールを接続することを想定していない。複数接続する場合でもデバッグ装置のポート数などの物理的利用により接続数が制限される。ポート数に問題が無かったとしてもモジュール間の距離が離れるとデバッグ装置との配線長が増えるため接続することが難しくなる。
【０００８】
特許文献３ではメインＣＰＵの命令発行時間を起点に時間を取得するため、メインＣＰＵにサブＣＰＵが繋がる構成（スター型）しか対応できない、サブＣＰＵの下にサブサブＣＰＵを接続するような構成（デイジーチェーン）には適用不可能である。メインＣＰＵとサブＣＰＵのクロック発振器が異なると周波数誤差によりタイマの値がずれるためメインＣＰＵとサブＣＰＵを物理的に遠くに配置することができない。しかも、そのようなずれの修正について検討されていない。
【０００９】
上記並びにその他の課題と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１０】
本願において開示される実施の形態のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１１】
すなわち、複数の制御モジュールで構成されるデータ処理システムにおいて、データ処理システム全体で共通の時間をカウントするタイマを夫々の制御モジュールに導入し、上位の制御モジュールのタイマによる時刻情報によって下位の制御モジュールのタイマによる時刻情報を同期させる時間同期処理を採用する。例えばアプリケーション処理に際して、ログを取得すると同時にタイマの時刻を用いたタイムスタンプを付加するログ取得機能を実装する。各モジュールが出力したログを集めてマージすることでシステム全体で動作するソフトウェアの分析が可能になる。
【発明の効果】
【００１２】
本願において開示される実施の形態のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【００１３】
すなわち、距離的に離れた場所に複数の制御モジュールが分散して実装されるシステムでもシステム全体でソフトウェアの分析が可能になる。
【図面の簡単な説明】
【００１４】
【図１】図１はデータ処理システムの基本的な構成を例示するブロック図である。
【図２】図２はソフトウェア分析の評価手順を例示する説明図である。
【図３】図３はモジュールの構成を例示するブロック図である。
【図４】図４はＳＯＣの構成を例示するブロック図である。
【図５】図５は実施の形態１の実機システムの構成を例示するブロック図である。
【図６】図６は第１のモジュールのソフトウェアのステートチャートである。
【図７】図７は第２のモジュールのソフトウェアのステートチャートである。
【図８】図８は第３のモジュールのソフトウェアのステートチャートである。
【図９】図９は実機評価の手順を例示するフローチャートである。
【図１０】図１０は時間同期処理の通信遅延計測の動作タイミング図である。
【図１１】図１１は時間時処理のクロック誤差補正動作タイミング図である。
【図１２】図１２はモジュール間の時間同期処理の関係を例示する説明図である。
【図１３】図１３はタグテーブルの構成を例示する説明図である。
【図１４】図１４は単体ログセットのマージ処理を例示する説明図である。
【図１５】図１５はシステムログを例示する説明図である。
【図１６】図１６は実施の形態１のシステムログのシーケンス図である。
【図１７】図１７は実施の形態２のシステム評価環境を例示するシステム構成図である。
【図１８】図１８は実施の形態２のシステムログの生成動作を例示するシーケンス図である。
【図１９】図１９は実施の形態３の全体構成を例示するブロック図である。
【図２０】図２０は第２のモジュール５００−２におけるアプリケーション処理Ｓ４０１とクロック誤差補正Ｓ４０５の関係を例示する大差タイミング図である。
【図２１】図２１は自動車のような多数のモジュールがネットワーク構成されるシステムへの適用例を示すシステム構成図である。
【発明を実施するための形態】
【００１５】
１．実施の形態の概要
先ず、本願において開示される実施の形態について概要を説明する。実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００１６】
〔１〕＜複数の制御モジュール間におけるタイマを用いた時間同期処理＞
データ処理システム（２０１）は、相互に通信可能の複数個の制御モジュール（５００−１，５００−２，５００−３）を有する。このデータ処理システムは、前記制御モジュールは、通信インタフェース（４０５，４０７）及びタイマ（４０４）を含み、自らが実行するプログラム記述にしたがって、所要のアプリケーション処理、単体ログ生成処理、及び前記タイマによる時刻を同期させる時間同期処理を行う。前記単体ログ生成処理は、自らが実行するプログラム中で指定されたテストポイントでログ情報と前記タイマの時刻情報に基づくタイムスタンプを生成し、それらを当該テストポイントの属性情報と共に蓄積して単体ログを生成する処理である。前記時間同期処理は、上位の制御モジュールのタイマで得られる時刻情報を用いて、下位の制御モジュールのタイマで得られる時刻情報を同期させる処理である。
【００１７】
これによれば、距離的に離れた場所に複数の制御モジュールが分散していても、夫々の制御モジュールで生成される単体ログのタイムスタンプの時刻を同一時間軸上で同期した時刻とすることができる。したがって、制御モジュール単位の単体ログを夫々のタイムススタンプを指標にマージすることによってデータ処理システム全体についてのシステムログを容易に得ることが可能になる。
【００１８】
〔２〕＜上位及び下位の制御モジュールのタイマの時刻差に基づく補正＞
項１において、前記時間同期処理は、下位の制御モジュールが上位の制御モジュールからそのタイマの時刻の情報（Ｔ１，Ｔ５）を受け取り、受け取った時刻の情報、及び当該時刻の情報を受け取ったときの自らのタイマの時刻の情報（Ｔ２，Ｔ６）等（Ｔ３，Ｔ４、Ｔ７，Ｔ８）に基づいて、自らのタイマの時刻を補正する処理である。
【００１９】
これによれば、相互に下位の制御モジュールのタイマの時刻を上位の制御モジュールのタイマの時刻に同期させることが可能であるから、時刻を動作させることができる制御モジュールの数やネットワーク形態に理論上の制約を受けない。
【００２０】
〔３〕＜タイマそれ自体に時刻書き換えを行ってタイマの時刻補正を行う＞
項２において、前記タイマの時刻を補正する処理は、自らのタイマそれ自体に時刻書き換えを行う処理である。
【００２１】
これにより、タイマの誤差を補正すればタイマから得られた時刻をそのままタイムスタンプに用いることが可能になる。
【００２２】
〔４〕＜タイマから得られる時刻情報を補正してタイマの時刻補正を行う＞
項２において、前記タイマの時刻を補正する処理は、タイムスタンプの生成に当たって自らのタイマから得られる時刻情報を補正する処理である。
【００２３】
これにより、タイマそれ自他に対して時刻の書き換え若しくはプリセットを要しない。但し、タイマから得られた時刻をその都度補正してタイムスタンプに用いることが必要である。
【００２４】
〔５〕＜通信遅延を取得してタイマの時刻誤差を演算＞
項２において、上位の制御モジュールから下位の制御モジュールまでの通信に要する通信遅延（Ｔｄｅｌａｙ）を取得し、実際の送信時刻から受信時刻の差から通信遅延を減算してタイマの時刻誤差（Ｔｄｉｆｆ，Ｔｃｄ）を演算し、この時間差を用いてタイマの時刻を補正する。
【００２５】
これによれば、通信遅延差を考慮して、容易にタイマの時刻補正を行うことができる。
【００２６】
〔６〕＜外部インタフェース＞
項１において、外部インタフェース回路（４０５，４０７）は、第１コマンド（Ｓｙｎｃ）受信時に自らのタイマから時刻情報を取得する制御を行い、前記第１コマンド出力時のタイマの時刻情報を伴って第２コマンド（Ｆｏｌｌｏｗｕｐ）を出力し、第３コマンド（ＤｅｌａｙＲｅｑ）を出力するとき自らのタイマの時刻情報を取得する制御を行い、前記第３コマンドを受信したときの自らのタイマの時刻情報を伴って第４コマンド（ＤｅｌａｙＲｅｓｐ）を出力する。
【００２７】
これによれば、タイマの時刻補正の用いるタイマが刻む時刻を、所定のコマンドの送受信に伴って外部インタフェース回路による制御に基づいて対応するタイマから取得することができる。
【００２８】
〔７〕＜通信遅延を取得してタイマの時刻誤差を演算＞
項６において、下位の制御モジュールは、上位の制御モジュールからの第１コマンド受信時に自らのタイマから第１の時刻情報（Ｔ２）を取得すると共に、当該上位の制御モジュールが第２コマンドに伴って出力する前記第１コマンド出力時の上位タイマの第２の時刻情報（Ｔ１）を取得し、更に、第３コマンドを前記上位の制御モジュールに出力するとき自らのタイマの第３の時刻情報（Ｔ３）を取得し、前記第３のコマンドを受信した上位の制御モジュールが前記第４コマンドに伴って出力する前記第３コマンドを受信したときの当該上位のタイマの第４の時刻情報（Ｔ４）を取得し、第４の時刻情報と第１の時刻情報との差分と、第３の時刻情報と第２の時刻情報との差分との和の半分の時間を演算し、演算された情報を、上位の制御モジュールから下位の制御モジュールまでの通信に要する通信遅延として取得し、実際の送信時刻から受信時刻の差から通信遅延を減算してタイマの時刻誤差を演算し、この時間差を用いてタイマの時刻を補正する。
【００２９】
これによれば、下位の制御モジュールは自らのタイマによる時刻を、上位の制御モジュールのタイマの時刻に容易に同期させることができる。
【００３０】
〔８〕＜コマンド送受信と時刻情報を取得する外部インタフェースの同期エンジン＞
項７において、前記外部インタフェース回路は、前記第１コマンドを受信したとき自らのタイマから第１の時刻情報を取得し、前記第２コマンドに伴って供給される第２の時刻情報を取得し、第３コマンドを出力するとき自らのタイマの第３の時刻情報を取得し、前記第４コマンドに伴って供給される第４の時刻情報を取得する、同期制御回路を有する。
【００３１】
これによれば、中央処理装置に全ての負担をかけずに第１乃至第４の時刻情報を取得することができる。尚、第１乃至第４の時刻情報の取得に割り込みなどの中央処理装置の制御を一部若しくは全部介在させる方式を採用することは妨げられない。
【００３２】
〔９〕＜中央処理装置による前記通信遅延及び前記時刻誤差の演算＞
項８において、前記中央処理装置は、前記外部インタフェース回路が取得した第１乃至第４の時刻情報を利用して前記通信遅延及び前記時刻誤差の演算を行う。
【００３３】
これによれば、前記通信遅延及び前記時刻誤の演算に特別な演算回路を用意することを要しない。
【００３４】
〔１０〕＜アプリケーション処理の開始前に通信遅延測定＞
項９において、前記中央処理装置は、アプリケーション処理（Ｓ４０１）の開始前に通信遅延を測定し、測定した通信遅延を用いてタイマの時刻補正を初期的行う処理（Ｓ４００）を制御する。
【００３５】
これによれば、夫々の制御モジュールで異なるクロック発振器をタイマのクロックに用いるこがネットワーク構成の自由度を確保する上で望ましいという事情を考慮すると、当初非同期のタイマ時刻をアプリケーション処理に先立って同期化することが、その後の個別ログの生成の効率化に資することができる。
【００３６】
〔１１〕＜タイマ割り込みによる、通信遅延を用いたクロック誤差補正＞
項１０において、前記中央処理装置は、前記初期的なタイマ時刻補正の後、所定インターバルで発生するタイマ割り込み（Ｓ６０２−２）に基づいて、既に測定された前記通信遅延を用いてタイマの時刻補正を行う処理を制御する。
【００３７】
これによれば、夫々の制御モジュールで異なるクロック発振器をタイマのクロックに用いるとき、タイマの計数に用いるクロックの全てが同じ周波数で発振することが望ましいが、実際は発振周波数に誤差が含まれるため、タイマの時刻同期が徐々にずれた状態を逐次補正して、無視しえない誤差の発生を未然に防止することができる。
【００３８】
〔１２〕＜属性情報＞
項１において、前記テストポイントの属性情報は、制御モジュールに割り当てられた第１の識別情報、制御モジュールで実行されるプログラム上のテストポイントの位置を示す第２の識別情報、及びテストポイントにおいける処理を示す第３の識別情報である。
【００３９】
これにより、制御モジュール毎に取得した単位ログの情報をテストポイント毎に容易に識別することが可能になる。
【００４０】
〔１３〕＜ログ解析回路；単体ログを回収してテストポイントを指標にマージする＞
請求項１において、データ処理システムはログ解析回路を更に有する。前記ログ解析回路（３０１）は、前記制御モジュール毎に生成された単体ログを回収し、回収した夫々の単体ログに含まれるタイムスタンプを指標にテストポイントの属性情報、ログ情報、及びタイムスタンプをマージすることによって単体ログの統合を行い、システムログを生成する。
【００４１】
これによれば、単体ログからシステムログを容易に生成することでき、データ処理システム全体のソフトウェア分析を効率化することができる。
【００４２】
〔１４〕＜制御モジュールは車載ＥＣＵ＞
項1において、前記制御モジュールは車載ネットワークに接続された車載ＥＣＵを構成する。
【００４３】
これによれば、車載ＥＣＵの車載ネットワーク（８０２，８０３，８０４）全体におけるソフトウェアの開発段階での評価はもとより、特定の実機における故障の評価を容易に行うことが可能になり、車載ＥＣＵシステムの信頼性向上に資することができる。
【００４４】
〔１５〕＜制御モジュールは実機システムとエミュレータ＞
前記複数の制御モジュールは、エミュレーション対象とされる実機（６０５）と、前記実機をエミュレーションするエミュレータ（６０４，６０６）である。
【００４５】
これによれば、実機に対するエミュレータを用いた評価と共に、システムログを用いたタイミング評価を行うことができる。即ち、得エミュレータによるエミュレーション情報を期待値と比較する評価を行うことができる。更に、実機とエミュレータによるエミュレーション動作のシナリオを記述したシステムモデルをシステムログと比較することによってタイミング評価なども可能になる。
【００４６】
〔１６〕＜複数の制御モジュール間におけるタイマを用いた時間同期処理＞
データ処理システム（２０１）は、複数の制御モジュール（５００−１，５００−２，５００−３）が通信を行いながら動作するシステムであって、データ処理システム全体で共通の時間をカウントするタイマ（４０４）を夫々の制御モジュールに設け、上位の制御モジュールのタイマによる時刻情報によって下位の制御モジュールのタイマによる時刻情報を同期させる時間同期処理（Ｓ４００，Ｓ４０５）を制御モジュール間で行う。
【００４７】
これによれば、制御モジュール間で時間同期処理を行うことにより、距離的に離れた場所に複数の制御モジュールが分散していても、夫々の制御モジュールで生成される単体ログのタイムスタンプの時刻を同一時間軸上で同期した時刻とすることができる。
【００４８】
〔１７〕＜ログ取得処理＞
項１６において、前記制御モジュールは、アプリケーション処理に際して、ログを取得すると同時にタイマの時刻を用いたタイムスタンプを付加するログ取得処理（Ｓ４０１）を行う。
【００４９】
これによれば、夫々の制御モジュール単位で取得されるログに、システム全体で同一時間軸上に同期する時刻をタイムススタンプとして付与することができる。
【００５０】
〔１８〕＜システムログの生成処理＞
項１７において、夫々の前記制御モジュールの前記ログ取得機能で取得されたログを集め、集めたログの情報をタイムスタンプに基づいてマージすることで、システム全体で動作するソフトウェアのシステムログを生成する処理を行うログ解析回路（３０１）を更に有する。
【００５１】
これによれば、データ処理システム全体についてのソフトウェア評価を、システムログを用いて容易に行うことが可能になる。
【００５２】
２．実施の形態の詳細
実施の形態について更に詳述する。
【００５３】
《実施の形態１》
図１にはデータ処理システムの基本的な構成が例示される。データ処理システムは後述する実機２０１を一例とする。データ処理システムは複数のデータ処理ユニット若しくは制御ユニットのような制御モジュール（以下単にモジュールとも記す）を有し、特に相互に接続される直列的な信号パスを有する複数のモジュールに着目し、ここでは直列パス５０２，５０３を有する３個のモジュール５００−１，５００−２，５００−３に着目する。直列パス５０２，５０３を有するとは、図示の如くモジュール５００−１，５００−２，５００−３がその他の接続パスを有することを妨げるものではない。
【００５４】
各モジュール５００−１，５００−２，５００−３はプログラム処理回路である中央処理装置（ＣＰＵ)４０１−１，４０１−２，４０１−３、同期タイマ４０４−１，４０４−２，４０４−３、及び通信インタフェース４０５−１，４０７−１，４０５−２，４０７−２，４０５−３，４０７−３を有する。夫々のモジュール５００−１，５００−２，５００−３は自らが実行するプログラム記述にしたがって所要のアプリケーション処理と共に単体ログ生成処理を行い、更に、タイマの時刻即ち計数値を同期させる時間同期処理を行う。
【００５５】
単体ログ生成処理は、夫々のモジュール５００−１，５００−２，５００−３のＣＰＵ４０１−１，４０１−２，４０１−３が、自らが実行するプログラム中で指定されたテストポイントでログ情報と同期タイマ４０４−１，４０４−２，４０４−３の時刻に基づくタイムスタンプを生成し、それらを当該テストポイントの属性情報と共に蓄積していく、モジュール単位で単体ログの生成を行う処理である。
【００５６】
時間同期処理は、夫々の同期タイマ４０４−１，４０４−２，４０４−３で生成されるタイムスタンプの時刻情報を同期させる処理、即ち、夫々の同期タイマ４０４−１，４０４−２，４０４−３で得られる時刻情報が同一時間軸上で刻まれる時刻になることを保証するための処理である。例えば、モジュール５００−２は時間管理の点で上位となるモジュール５００−１からその同期タイマ４０４−１の時刻の情報を受け取り、受け取った時刻の情報、及び当該時刻の情報を受け取ったときの自らの同期タイマ４０４−２の時刻の情報等に基づいて、自らの同期タイマ４０４−２の時刻を補正する処理である。同期タイマ４０４−１，４０４−２，４０４−３の時刻補正は、自らの同期タイマ４０４−１，４０４−２，４０４−３から得られた時刻情報の補正であってもよいし、或いは、自らの同期タイマ４０４−１，４０４−２，４０４−３に対する計数値のプリセットなどによるそれ自体の計数動作の補正であってもよい。同期タイマ４０４−１，４０４−２，４０４−３の時刻を補正する処理は、例えばＣＰＵがパワーオンリセット処理の一貫として、或いは所定の処理ルーチンの先頭などで行えばよい。各モジュール５００−１，５００−２，５００−３における同期タイマ４０４−１，４０４−２，４０４−３のクロック信号周波数が完全同一でないような場合に、一旦補正の処理を行っても経時的に時刻情報の同期に無視し得ない誤差を生ずる場合には、適宜のインターバルで再度補正を行えばよい。
【００５７】
実機としての上記データ処理システムを動作させてモジュール５００−１，５００−２，５００−３の夫々が単体ログを生成し、それによって取得された複数モジュール５００−１，５００−２，５００−３の単体ログのログ情報をタイムスタンプを指標にマージすることによって、実機における複数のモジュールを跨ぐデータ処理の評価を容易に行うことが可能になる。
【００５８】
以下、そのデータ処理システム及びそのデータ処理システムを評価する処理手順について詳述する。
【００５９】
図２にはデータ処理システムの評価手順を全体的に例示する。
【００６０】
ここでは図３に示すモジュール５００が３台で構成されるデータ処理システムとしての実機システム２０１の動作分析を行う場合について説明する。実機システム２０１は図１のデータ処理システムに相当される。図３に例示されるように、モジュール５００はマイクロコンピュータ等のＳＯＣ（システム・オン・チップ。単一の半導体チップで構成されたもの）４００、二次記憶媒体５０１、及びその他デバイス５１０で構成される。
【００６１】
ＳＯＣ４００は図４に示すように外部モジュールと時間同期をとるための同期タイマ４０４、時間同期処理を補助する同期エンジン（同期エンジンＡ４０６、同期エンジンＢ４０８）を内蔵する通信インタフェース（ＩＦ_Ａ４０５、ＩＦ_Ｂ４０７）、二次記憶と通信するためのインタフェースＩＦ_Ｃ４０９、及びＣＰＵ４０１で構成される。同期エンジンＡ４０６，同期エンジンＢ４０７は、特に制限されないが、後で説明する所定のコマンドを送信するとき及び受信するとき、自らのモジュール内の同期タイマの時刻情報を取得して保持する機能を備える。保持した時刻情報は前記時間同期処理に用いる。その利用形態の詳細は後述する。
【００６２】
実機システム２０１における各モジュールの接続関係を図５に示す。図１で説明したように３個のモジュール５００−１，５００−２，５００−３が接続される。第１のモジュール５００−１は通信経路５０２で第２のモジュール５００−２に繋がり、第２のモジュール５００−２は通信経路５０３で第３のモジュール５００−３に繋がる。３台のモジュール５００−１，５００−２，５００−３がデイジーチェーンで繋がるシステムを構築する。
【００６３】
評価の処理手順はソフトウェア実装１００、実機動作２００、及びログ解析３００に分けられる。ソフトウェア実装１００ではソフトウェアの仕様策定や実装を行い、実機動作２００で実機システム２０１を実際に動作させてソフトウェアの単体ログセット２０２を取得する。ログ解析３００では単体ログセット２０２の解析を行いシステムログ３０３や検証結果３０４を生成する。単体ログセット２０２は前述の単体ログのセットである。
【００６４】
ソフトウェア実装１００ではシステム仕様１０１から各モジュール５００に実装されるソースコードの集まりである単体ソースセット１０４とタグテーブル１０５を作成する。システム仕様１０１は実機システム２０１で実現する機能（アプリケーション）を規定したアプリ仕様（アプリケーション仕様）１０２とテスト項目を規定したテスト仕様１０３で構成される。システム仕様１０１から生成される単体ソースセット１０４にはアプリケーションの機能とソフトウェア分析のためのソースコードが含まれる。
【００６５】
各モジュールにおけるアプリ仕様１０２のステートチャートを図６、図７、及び図８に示す。第１のモジュール５００−１に図６、第２のモジュール５００−２に図７、第３のモジュール５００−３に図８のステートチャートが実装される。ここで説明するアプリ仕様１０２は、特に制限されないが、第１のモジュール５００−１が第２のモジュール５００−２にコマンド送信すると、第２のモジュール５００−２を中継して第３のモジュール ５００−３に伝わり、第３のモジュール５００−３はコマンド受信後に発生するイベントによって第１のモジュール５００−１に応答を返すかを選択する動作を定義している。例えば図６において第１のモジュール５００−１のＣＰＵ４０１−１のアイドル状態Ｓ１００においてＩＦ＿Ｂ送信要求があると（Ｓ１０３）、インタフェースＩＦ＿Ｂ４０７−１にＩＦ＿Ｂのインタフェースコマンドを与えて、インタフェースＩＦ＿Ｂ４０７−１によるＩＦ＿Ｂの送信を完了する（Ｓ１０４）。これに応答して、図７の第２のモジュール５００−２はＩＦ＿Ｂ受信要求（Ｓ２０９）があると、インタフェースＩＦ＿Ｂ４０７−２でＩＦ＿Ｂのインタフェースコマンドを受信し（Ｓ２０３）、ＩＦ＿Ｂによるコマンド受信を完了する（Ｓ２１０）。更に、第２のモジュール５００−２においてＩＦ＿Ａ中継送信要求があると（Ｓ２０７）、インタフェースＩＦ＿Ａ４０５−２によるコマンド送信処理（Ｓ２０２）によって当該コマンドがモジュール５００-３に向けて送信完了される（Ｓ２０８）。次いで、図８の第３のモジュール５００−３はＩＦ＿Ａ受信要求（Ｓ３１０）があると、インタフェースＩＦ＿Ａ４０５−２でＩＦ＿Ａのコマンド受信処理（Ｓ３０１）にて当該中継されたコマンドの受信を完了する（Ｓ３０５）。これによって第３のモジュール５００−３はコマンド待ち状態に遷移する（Ｓ３０２）。この後、例えばイベントＡが発生すると（Ｓ３０７）、イベント処理が行われて（Ｓ３０３）、当該イベント処理の終了を通知する送信要求が発生される（Ｓ３０８）。これに応答してインタフェースＩＦ＿Ａ４０５−３にＩＦ＿Ａのインタフェースコマンドを与えて、インタフェースＩＦ＿Ａ４０３−１による前記イベント終了通知の送信を完了する（Ｓ３０９）。以下、第２のモジュール５００−２ではＳ２１１，Ｓ２０４，Ｓ２１２の処理を通じてインタフェースＩＦ＿Ａ４０５−２でイベント処理の終了通知を受信し、この通知を、Ｓ２０５，Ｓ２０１，Ｓ２０６の処理を通じてインタフェースＩＦ＿Ｂ４０７−２から送信する。最後に第１のモジュール５００−１が図６のＳ１０５，Ｓ１０２，Ｓ１０６の処理を通じて前記イベント処理の終了通知を受信する。
【００６６】
単体ソース１０６は時間同期ソース１０７、タグ挿入アプリソース１０８、タグ管理ソース１０９で構成される。時間同期ソース１０７は実機システム２０１を構成するモジュール（５００−１、５００−２、５００−３）の同期タイマ（４０４−１、４０４−２、４０４−３）が全て同じ値になるように調整を行うためのソースである。タグ挿入アプリソース１０８はアプリケーション処理のソースコードにタグステートメントを挿入したものである。タグステートメントはテスト仕様１０１が定義するテストポイントに挿入され、プログラムがタグステートメントに到達するとタグ管理処理を起動しタグ情報を通知する。
【００６７】
タグ情報はネットＩＤ、タグ番号、タグ値で構成される。ネットＩＤはモジュール毎に割り当てられる固有の識別番号で、この実施の形態では第１のモジュール５００−１に１、第２のモジュール５００−２に２、第３のモジュール５００−３に３を静的に割り当てる。ここでは静的に割り当てたが、条件によって動的に割り当てても問題はない。タグ番号、タグ値はテストポイントを識別するための情報である。したがって、ネットＩＤ、タグ番号、及びタグ値で構成されるタグ情報は前記テストポイントの属性情報の一例として位置付けられる。この実施の形態では、図６のＳ１０３、Ｓ１０６、図７のＳ２０５、Ｓ２０７、Ｓ２１０、Ｓ２１２、図８のＳ３０５、Ｓ３０６、Ｓ３０７、Ｓ３０８に対応する部分のソースにタグステートメントを挿入する。
【００６８】
タグ管理ソース１０９はタグ管理処理を実装したソースコードで、タグ情報に同期タイマ４０４の時刻を付加した単体ログを生成し、一次記憶であるＲＡＭ４０２へのバッファリング、二次記憶であるＲＯＭ４０３及び／又は二次記憶媒体５０１に単体ログを退避するなどのタグ情報管理処理を行う。二次記憶媒体５０１はダイナミックランダムアクセスメモリ、スタティックランダムアクセスメモリもしくはメモリカードを含む不揮発性メモリである。
【００６９】
タグテーブル１０５はタグ情報の管理を行うテーブルである。図１３のようにタグ番号、タグ値と変換値の関係を表し、実機評価２０３から得られるタグ情報をタグテーブル１０５の参照によって任意の形式に変換する。変換値はソフトウェアの分析手法によって差し替えができ、この実施の形態では変換値をテキスト形式にしている。
【００７０】
単体ソースセット１０４をコンパイル１１１して実行可能コードセット１１０を得る。実行可能コードセット１１０は各モジュール５００のＣＰＵ４０１で実行可能な形式のバイナリコードの集まりである。実行可能コードセット１１０がＲＯＭ４０３に書き込まれて実機システム２０１が構築される。
【００７１】
実機動作２００では実機システム２０１の実機評価２０３を行い単体ログセット２０２を取得する。
【００７２】
この時、各モジュールは同期エンジンを有するインタフェース（ＩＦ_Ａ４０５、ＩＦ_Ｂ４０７）で繋がっており、実機システム２０１はパワーオンリセットの処理や実機評価２０３の開始後に時間同期処理を行うことで同期タイマ４０４−１、４０４−２、４０４−３が刻む時刻を同期させることができることを特徴とする。各モジュールのＩＦ_Ｃ（４０９−１、４０９−２、４０９−３）には二次記憶媒体（５０１−１、５０１−２、５０１−３）が接続されており、実機評価で取得した単体ログはＲＡＭ４０２にバッファリングされたのち、各モジュールの二次記憶媒体（５０１−１、５０１−２、５０２−３）に保存される。二次記憶媒体（５０１−１、５０１−２、５０２−３）への退避は単体ログの容量がＲＡＭ４０２よりも大きい場合に行う。単体ログがＲＡＭ４０２に収まる場合は二次記憶媒体（５０１−１、５０１−２、５０２−３）への退避を行わなくてもよい。
【００７３】
実機評価の評価手順を図９に示す。実機評価はアプリケーション処理Ｓ４０１と時間同期処理（Ｓ４００、Ｓ４０５）で構成される。時間同期処理は各モジュールの同期タイマの時刻を合わせる処理（すなわち、タイマが刻む時刻を同期させる処理）で、その処理の既存の規格としてイーサーネット（登録商標）におけるIEEE１５８８などがあるが、イーサーネット以外のインタフェースについては規格が存在しないため、ここでは例えばIEEE１５８８のアルゴリズムをベースに同期処理を行う。
【００７４】
時間同期処理について解説を行う。時間同期処理はインタフェースを介して時間情報を送信し受信側の同期タイマ４０４の値を送信側の同期タイマ４０４の値に同期させる処理である。主に通信遅延測定とクロック誤差補正処理で構成される。
【００７５】
時間同期処理の例として第１のモジュール５００−１と第２のモジュール５００−２間の時間同期処理を示す。例では第１のモジュール５００−１が送信側、第２のモジュール５００−２が受信側となり、同期タイマ４０４−２が同期タイマ４０４−１の値と同じになるように処理を行うものとする。第１のモジュール５００−１と第２のモジュール５００−２を接続するインタフェースＩＦ_Ａ４０５には同期エンジンＡ４０６が実装されており、これは、時間同期コマンドの送受信を行ったときの同期タイマ４０４の値を取得することができる。図５の構成では第１のモジュール５００−１は同期コマンドの送受信時刻として同期タイマ４０４−１の時刻を取得し、第２のモジュール５００−２は送受信時刻として同期タイマ４０４−２の時刻を取得できる。
【００７６】
通信遅延測定（Ｓ４００）について説明する。
【００７７】
時間同期処理として、例えば第１のモジュール５００−１の同期タイマ４０４−１の時刻を送信して第２のモジュール５００−２の同期タイマ４０４−２書き換える場合を考える。単純にタイマを書き換えるだけならば同期タイマ４０４−２の時刻は同期タイマ４０４−１の時刻に対して通信遅延時間 Tdelayだけ遅れてしまう。そこで、時間同期処理ではＴdelayの測定を行い、受信側の時間同期の補正値として利用する。
【００７８】
図１０は通信経路５０２における通信遅延測定の手順である。初期状態として同期タイマ４０４−１と同期タイマ４０４−２には異なる値が記録されているとする。第１のモジュール５００−１は最初に同期コマンド（Sync）を送信する。これにより第１のモジュール５００−１は送信時刻Ｔ１、第２のモジュール５００−２は受信時刻Ｔ２を得る。次に第１のモジュール５００−１はフォローアップコマンド（Followup）を送信し、第２のモジュール５００−２に前記送信時刻Ｔ１を通知する。第２のモジュール５００−２はフォローアップコマンド（Followup）受け取るとディレイリクエストコマンド（DelayReq）を発行し、第２のモジュール５００−２は送信時刻Ｔ３、第１のモジュール ５００−１は受信時刻Ｔ４を記録する。
【００７９】
最後に第１のモジュール５００−１がディレイレスポンスコマンド（DelayResp）を発行し第２のモジュール５００−２にＴ４を通知する。これにより第２のモジュール５００−２はＴ１、Ｔ２、Ｔ３、Ｔ４を得る。
【００８０】
通信経路５０２の通信遅延Ｔdelay、すなわち、通信に要した時間は、下記の式１
Ｔdelay=（（Ｔ４−Ｔ１）−（Ｔ３−Ｔ２））／２…式１
で求めることが出来る。ここで通信遅延は送信、受信で同じであるとする。
【００８１】
また、同期タイマ４０４−１と同期タイマ４０４−２の差分（時刻の差）Ｔdiffは、下記の式２
Ｔdiff=Ｔ２−（Ｔ１＋Ｔdelay）…式２
で求められる。同期タイマ４０４−２の時刻にＴdiffの値を減算すれば同期タイマ４０４−１と同値にすることができる。通信遅延測定による同期処理における補正としては、例えば、計数値からＴdiffの値分だけ減算するように同期タイマ４０４−２の計数値をプリセットすればよい。
【００８２】
クロック誤差補正について説明する。
【００８３】
図１１にクロック誤差補正処理の通信を示す。クロック誤差補正処理は同期タイマ４０４毎に異なるクロック発振器を使用することによるクロック周波数誤差の補正を目的としている。実機システムではネットワーク構成の自由度を確保するため、各同期タイマ（４０４−１、４０４−２、４０４−３）が異なるクロック発振器で動作することが望ましい。この時、同期タイマ４０４を駆動するクロック発振器は全て同じ周波数で発振することが望ましいが、実際は発振周波数に誤差が含まれるため同期タイマ４０４のカウント値はカウントを続けていく内にずれてしまう。すなわち、通信遅延測定による同期処理における補正結果がその後誤差を生ずる可能性があるということである。そのためクロック誤差補正処理では周期的に同期コマンド（Sync）、フォローアップコマンド（Foloowup）を送信して同期タイマ４０４の補正を行う。図１１では第１のモジュール５００−１による同期コマンド（Sync）の送信時刻をＴ５、第２のモジュール５００−２による受信時刻をＴ６とすると、カウント誤差Ｔcdは下記の式３
Ｔcd=Ｔ６−（Ｔ５＋Ｔdelay）…式３
となる。第２のモジュール５００−２の同期タイマ４０４−２にＴcdを減算すれば、同期タイマ４０４−１と同値になり、誤差を補正することができる。
【００８４】
誤差補正処理を行う頻度である同期インターバル（Sync Interval）は実装条件によって異なる。クロック発振器の精度が高いならば頻度は少なくて済むが、低いならば頻繁に補正する必要がある。本実施の形態では同期インターバル（Sync Interval）を１秒として実施している。
【００８５】
図１２に本実施の形態における時間同期処理の関係が示される。本実施の形態では第１のモジュール５００−１の同期タイマ４０４−１が基準となり第２のモジュール５００−２、第３のモジュール５００−３の同期タイマ４０４を同期させる。
【００８６】
第１のモジュール５００−１と第２のモジュール５００−２は電源が投入されるとインタフェースＩＦ_Ｂ（４０７−１、４０７−２）の間で前記ステップＳ４００の通信遅延測定を行う。第２のモジュール５００−２は図１０の通信と同期エンジンＢ４０８から送受信時刻Ｔ１、Ｔ２、Ｔ３、Ｔ４を入手する。ＣＰＵ４０１−２は送受信時刻からＴdelay、Ｔdiffを計算する。通信遅延測定が終了すると第２のモジュール５００−２のＣＰＵ４０１−２はＴdiffの値を使用して同期タイマ４０４−２の時刻を同期タイマ４０４−１の時刻に合わせる。
【００８７】
また、第１のモジュール５００−１の同期タイマ４０４−１は周期割り込みによってＣＰＵ４０１−１にクロック誤差補正処理の要求を行う。ＣＰＵ４０１−１は要求を受けると第２のモジュール５００−２に対して図１１の通信によってクロック誤差補正を行う。第２のモジュール５００−２は図１１の通信と同期エンジンＢ ４０８から送受信時刻Ｔ５、Ｔ６を得る。ＣＰＵ４０１−２はＴ５、Ｔ６からＴcdを計算し同期タイマ４０４−２の誤差を補正する。
【００８８】
第３のモジュール５００−３は第２のモジュール５００−２との間で時間同期処理を行い同期タイマ４０４−２と同期タイマ４０４−３を同期させる。第２のモジュール５００−２は第１のモジュール５００−１と同期しているため第３のモジュール５００−３も第１のモジュール５００−１に同期することになる。
【００８９】
図９の評価手順では測定がはじまると通信遅延測定処理Ｓ４００によって通信遅延測定を行って、同期タイマ（４０４−１、４０４−２、４０４−３）の同期を行う。同期が完了するとアプリケーション処理Ｓ４０１を行い、クロック誤差補正処理のためのクロック誤差補正割り込み（Ｓ４０２）がある毎にクロック誤差補正処理Ｓ４０５を行い、ステップＳ４０３で評価終了が判別されるまで、ステップＳ４０１，Ｓ４０２，Ｓ４０３，Ｓ４０５の処理が繰り返される。
【００９０】
第２のモジュール５００−２におけるアプリケーション処理Ｓ４０１とクロック誤差補正Ｓ４０５の関係を図２０に示す。図２０において網掛け表示のタスク（Ｓ６００−３など）がアプリケーション処理Ｓ４０１、白抜き表示のタスク（Ｓ６００−２など）がクロック誤差補正Ｓ４０５を表す。
【００９１】
第２のモジュール５００−２は第１のモジュール５００−１から誤差補正処理受信（Sync/Followup受信）し同期タイマ４０４−２を第１のモジュール５００−１に同期する。また、第２のモジュール５００−２はが第３のモジュール ５００−３に対して誤差補正処理送信（Sync/Followup送信）して、第３のモジュール５００−３の同期タイマ４０４−３を第２のモジュール５００−２に同期させる。
【００９２】
第２のモジュール５００−２のＣＰＵ４０１−２は主にアプリ処理を行い、テストポイントに従って同期タイマ４０４−２の参照（Ｓ６０１−５、Ｓ６０２−３）とログの出力を行う。第１のモジュール５００−１から誤差補正処理受信（Sync/Followup受信）６０１−２するとアプリケーション処理を中断しクロック誤差補正処理を起動して同期タイマ４０４−２の補正処理を行う。
【００９３】
同期タイマ４０４−２は同期インターバル（Sync Interval）が経過するごとにＣＰＵ４０１−２に割り込みをかける（Ｓ６０２−２）。ＣＰＵ４０１−２は割り込みを受け付けると第３のモジュール５００−３に対して誤差補正処理送信（Sync/Followup送信）Ｓ６０１−４，Ｓ６０３−２し、第３のモジュール５００−３の同期タイマ４０４−３を補正する。
【００９４】
各モジュール間で同期処理を行うことで全てのモジュールで、時間軸共通のタイムスタンプを単体ログに付加することができる。
【００９５】
図９に戻って、実機評価終了（Ｓ４０３）すると、各モジュールの二次記憶に蓄積された単体ログを回収する（Ｓ４０４）。本実施の形態ではログ解析器３０１を第１のモジュール５００−１のＩＦ_Ａ４０５−１に接続し、通信によって単体ログを取得する。第３のモジュール５００−３の単体ログは通信経路５０３で第２のモジュール５００−２に送信し、第２のモジュール５００−２の単体ログは通信経路５０２経由で第１のモジュール５００−１に送信する。第１のモジュール ５００−１の単体ログは通信経路５０４経由でログ解析器に送信する。
【００９６】
ログ解析器３０１は実機システム２０１から取得した単体ログセット２０２を並べ替えてマージログ３０２に変換する。マージ作業を図１４に示す。各モジュールの単体ログ（２０２−１、２０２−２、２０２−３）にはタイムスタンプが記録されている。ログ解析器３００１はタイムスタンプを元に時間的に整列するようにテストポイント毎のデータを並べ替える。
【００９７】
次にログ解析器３０１はマージログ３０２のタグテーブル１０５を参照してタグ情報（ネットＩＤ、タグ番号、タグ値）を任意の形式に変換する。テーブル参照の結果を図１５に示す。
【００９８】
最後にシステム仕様１０３とシステムログ３０３を比較してソフトウェアの検証３０７を行う。システムログからソフトウェアの動作を可視化した例を図１６に示す。第１のモジュール５００−１から第３のモジュール５００−３にコマンドが到達し、第３のモジュール５００−３から第１のモジュール５００−１に応答が帰る様子を見ることができる。図１６からわかるように複数のモジュール５００で動作するソフトウェアの動作を時間的な整合性を持って検証することができる。
【００９９】
実施の形態１ではシステムログ３０３を利用してソフトウェア動作の可視化を行ったが、システムログ３０３の利用は可視化に限定されない。図６、７、８のようなシステム仕様１０３のモデルとシステムログ３０３の自動一致検証やシミュレーション結果とシステムログ３０３の比較などにも適用可能である。
【０１００】
実施の形態１では３台のモジュールについて例示したが、実際にはそれより多くのモジュールがデイジーチェーンによる接続がなされており、互いに接続されりモジュール間において本実施の形態に従う時間同期処理が行われる。またシステムを構成する全モジュールがいかなるネットワーク（後述するスター型接続、メッシュ型接続など）が構築されてもよいが、デイジーチェーンによる接続される少なくとも３台のモジュールが含まれていればよい。
【０１０１】
実施の形態１によれば以下の作用効果を得る。
【０１０２】
（１）同期タイマ４０４を導入して全てのモジュールが共通の時刻にアクセスできるようにした。特許文献３の手法ではメインＣＰＵがサブＣＰＵをキックした時間を元にログのマージを行っているためサブＣＰＵが起点となって発生するイベントのログ取得ができなかった。本実施の形態では時刻共通の時計、すなわち同期タイマを使用するため、システムやネットワークの構成に影響を受けずにログの取得ができるようになった。特許文献３の手法ではメインＣＰＵ、サブＣＰＵの関係が必須のためスター型のネットワークしか使用できなかったが、本発明ではツリー型やメッシュ型のネットワークが使用できる。
【０１０３】
（２）タグ情報の取得と同時にタイムスタンプを付加するようにした。特許文献１、２ではタイムスタンプの付加をモジュール外部に接続したデバッグ装置で行っているためモジュール内部にログを蓄積したり、遅延の大きいインタフェースをログ出力に使用すると、イベントの発生時間がずれる問題があった。本発明ではタグ情報の取得と同時にモジュール内の同期タイマによる時刻のタイムスタンプを付加するため、モジュール内部にログを蓄積しても時間がずれることがなくなった。これにより以下の応用が可能になった。
（ア）遅延の大きいインタフェースをログ取得に使用できる。
（イ）各モジュールが分散してもログの出力、蓄積ができる。
（ウ）アプリケーション動作中はログを内部に蓄積し、動作終了後にログを外部転送することができるため、ログ取得がアプリケーション動作に与える影響を小さくできる。
（エ）ログをモジュール内部に蓄積できるのでモジュール間インタフェースで時間同期処理ができればソフトウェアの分析ができる。モジュール間通信の速度など、システムのネットワークに対する要求を緩和することができる。
【０１０４】
（３）時間同期処理で同期タイマの補正を行うようにした。特許文献３の手法では時間同期処理を行わない。そのため、メインＣＰＵが起点となるイベントであってもサブＣＰＵが長期間にわたって動作する場合や、メインＣＰＵとサブＣＰＵが高速で相互に通信するような場合には、ログの時間がずれる問題がある。また、特許文献３の手法では時間同期処理なしではステート状態の遷移などソフトウェアの高速な動作の分析を行うことはできないと考えられる。
【０１０５】
本実施の形態では時間同期処理により高精度に時間を同期するためソフトウェアの高速動作や各モジュールが長時間動作にも適用が可能である。また、時間同期処理により異なるクロック発振器を使用するモジュールでも同期ができるので物理的に距離の離れた所に設置されたモジュールの分析もできるようになる。
【０１０６】
（４）各モジュールが分散して出力したログをログ解析器３０１でマージしてシステムログを作成するようにした。ログの分析はログ解析器で行うため実機システムはログの解析やマージ処理をする必要が無いので、実機システムのアプリケーション処理に影響を与えずに分析ができる。
【０１０７】
《実施の形態２》
実施の形態２はソフトウェア分析にエミュレータン等の検証機材を更に含めることで高精度の検証を可能にするものである。実施の形態２ではシステムの検証環境（システムの開発環境））に実施の形態１で説明した手法を適用した場合について述べる。その検証手順を図１７に示す。検証手順では実機検証システム２０１−２の実機評価２０３−２を行い、期待値一致検証６１１と動作一致検証６１２を行う。
【０１０８】
実機検証システム２０１−２はシステム仕様１０１−２で規定されるターゲットシステム６０５の動作検証を行う実機評価環境である。ターゲットシステム６０５と、ターゲットシステム６０５に接続する機器をエミュレートするエミュレータＡ６０４及びエミュレータＢ６０６と、で構成される。後でその詳細は説明するが、ここでは、ターゲットシステム６０５、エミュレータＡ６０４及びエミュレータＢ６０６を実施の形態１における複数のモジュールに見立てている。ターゲットシステム６０５とエミュレータＡ６０４、エミュレータＢ６０６は実施の形態１に示したソフトウェア分析が行われることによって、動作ログとしてシステムログ３０３−２を出力するものとする。
【０１０９】
期待値一致検証６１１はターゲットシステム６０５の出力を期待値と比較（ブラックボックステスト）する検証である。期待値一致検証６１１ではシステム仕様１０１−２から検証手順を記載したテストシナリオ６０３を作成し、テストシナリオ６０３からテスト用の入力パターン６０８とテストが正常に終了した場合の期待値を記載した出力期待値６０７を生成する。入力パターン６０８を用いて実機検証システム２０１−２の実機評価２０３−２を行い、実機出力６０９を得る。実機出力６０９と出力期待値６０７の期待値一致検証６１１を行うことでターゲットシステム６０５が正常に動作しているかを検証する。
【０１１０】
動作一致検証はターゲットシステム６０５のシステムモデル６００とシステムログ３０３−２を比較することでソフトウェア内部の動作検証（ホワイトボックステスト）を行う。
【０１１１】
システムモデル６００はソフトウェアの動作を表現したデータで、ターゲットモデル６０２とエミュレータモデル６０１で構成される。ターゲットモデル６０２はターゲットシステム６０５の動作を表し、エミュレータモデル６０１は外部に接続する機器の動作を表す。
【０１１２】
システムログ３０３−２には図１７に示すように、ターゲットシステム６０５とエミュレータＡ６０４、エミュレータＢ６０６の動作状況が記録されている。この情報とシステムモデル６００を比較することでターゲットシステム６０５とシステム仕様１０１−２が一致しているかを検証する。
【０１１３】
図１８はエミュレータＡ６０６とエミュレータＢ６０６がターゲットシステム６０５に対してコマンドＡを発行するシーケンスを表している。この時、第１のシナリオＳ５００−１と第２のシナリオＳ５００−２の入出力が同じであり、違いはコマンドの発行タイミングが異なる点のみとする。第１のシナリオＳ５００−１ではエミュレータＡ６０４が先にコマンドＡ（Ｓ５０１−１）を発行し、第２のシナリオＳ５００−２ではエミュレータＢ６０６が先にコマンドＡ（Ｓ５０２−２）を発行する。
【０１１４】
従来のような期待値一致検証６１１は入出力のみを比較するため入出力が同じで動作が異なる第１のシナリオＳ５００−１、第２のシナリオＳ５００−２の違いは検証することができなかった。システムログ３０３−２を取得しターゲットシステム６０５、エミュレータＡ６０４、エミュレータＢ６０６の動作関係を取得すれば、タイミングの異なるテストシナリオの評価ができるようになる。
【０１１５】
実施の形態２によれば以下の作用効果を得る。
【０１１６】
従来手法では期待値一致検証６１１しかできなかったが、ターゲットシステム６０５、エミュレータＡ６０４、エミュレータＢ６０６のシステムログ３０３−２を取得することで動作一致検証６１２が可能になる。図１８で説明したように、動作一致検証６１２によりタイミング依存のイベント評価を行うことができるようになる。
【０１１７】
《実施の形態３》
実施形態３ではＳＤカードのような携帯型記憶媒体を利用して単体ログセット２０２−３を取得する方法について説明する。図１９には実施例３の構成が例示される。
【０１１８】
図１９はロボットアーム７００の評価に発明を適用した場合である。ロボットアーム７００の可動部７０１−１、７０１−２、７０１−３にはモータ制御用の第１制御モジュール７０２−１、第２制御モジュール７０２−２、及び第３制御モジュール７０２−３が組み込まれている。各制御モジュール７０２−１，７０２−２，７０２−３は実施の形態１に示したソフトウェア分析が行われ、単体ログをそれぞれ対応する第１ＳＤカード７０３−１、第２ＳＤカード７０３−２、第３ＳＤカード７０３−３に保存する。開発者はロボットアーム７００の評価終了後にＳＤカード７０３−１、７０３−２、７０３−３を取り外し、パソコン等でデータを読み出すことで単体ログセット２０２−３を取得する。
【０１１９】
特許文献１、２ではモジュールの外部にテストデバイスを接続する必要がある。このようなデバイスは評価中に移動しない対象に対しては適用が容易であるが、ロボットや車のように評価中に移動するものに適用する場合は、設置スペースやテストデバイスが運動に与える影響等の理由により適用することは難しい。
【０１２０】
いままで説明したようにログ情報を取得すると同時にタイムスタンプを付加するため、各モジュールが分散して出力したログのマージや蓄積が可能である。これを利用すれば、ＳＤカードのような小型、携帯可能な記憶媒体にログを一時保存することができる。小型な記憶媒体を使用すれば設置スペースやアームの運動に与える影響が小さいため、そのような制限の下でも適用が容易である。
【０１２１】
また、後から記憶媒体を回収して単体ログを解析に供することができるため、モジュール間の通信速度に影響を受けない。そのため、モジュール間の通信速度が遅く、通信によるログ回収に時間がかかりすぎる場合にも有効である。
【０１２２】
《実施の形態４》
図２１には自動車のような多数のモジュールがネットワークに接続されて構成されているシステムに適用した場合を示す。実施の形態１では１対１のデイジーチェーン接続の場合を例示した。実施例４ではネットワークを構成する場合について示す。図２１の例は自動車８００を制御する多数のＥＣＵ（エレクトロニックコントロールユニット）がネットワークで繋がっている。時間同期処理としては中央制御ＥＣＵ８０１を基準として全てのモジュールが同期する。この時、ネットワークの接続の形態は１対１の接続やデイジーチェーンに限定されず、バス接続８０２、ツリー型ネットワーク８０３、メッシュ型ネットワーク８０４など、ネットワーク形式に依存せずに適用することができる。
【０１２３】
本発明は上記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０１２４】
例えば、図２で説明した単体ソースはシステム検証のための時間同期、タグ管理及びタグ挿入機能をアプリケーション機能と一体に形成されたものとし、図２０の如く動作されるものとした。そのような単体ソースセットを用いたシステム評価を実機システムにおける開発段階の評価だけでなく、故障検出にも用いることも可能である。その場合、実動作では時間同期、タグ管理及びタグ挿入機能の実施を非選択にすることも可能である。例えば、システムに評価モードを設定したときだけ、時間同期、タグ管理及びタグ挿入機能の実施が付加されるようにすればよい。
【０１２５】
また、時間同期の処理では実際に同期タイマの時間設定を補正する場合について説明したが、これに限定されない。例えば、通信遅延測定で測定した同期タイマの差分（時刻の差）Ｔdiffやカウント誤差Ｔcdをデータとして保持していき、タグポイントで取得した同期タイマの時間を差分（時刻の差）Ｔdiffやカウント誤差Ｔcd用いて補正し、補正したン時刻情報を用いてタイムスタンプを形成するようにしてもよい。
【０１２６】
また、ログ解析を一つのモジュールのＣＰＵを用いて行うことも可能である。
【０１２７】
また、ＳＯＣなどのマイクロコンピュータやデータ処理装置は図４の機能構成に限定されず適宜変更可能である。
【符号の説明】
【０１２８】
１００  ソフトウェア実装
１０１  システム仕様
１０２  アプリ仕様（アプリケーション仕様）
１０３  テスト仕様
１０４  単体ソースセット
１０５  タグテーブル
１０６  単体ソース
１０７  時間同期ソース
１０８  タグ挿入アプリソース
１０９  タグ管理ソース
１１１  コンパイル
１１０  実行可能コードセット
２００  実機動作
２０１  実機システム
２０２単体ログセット
２０３  実機評価
３００  ログ解析
３０３  システムログ
３０４  検証結果
４００  ＳＯＣ
４０１（４０１−１，４０１−２，４０１−３）  中央処理装置（ＣＰＵ)
４０４（４０４−１，４０４−２，４０４−３）  同期タイマ
４０５（４０５−１，４０５−２，４０５−３）  通信インタフェース
４０６  同期エンジンＡ
４０７（４０７−１，４０７−２，４０７−３）  通信インタフェース
４０８  同期エンジンＢ
４０９  インタフェース（ＩＦ_Ｃ）Ｉ
５００（５００−１，５００−２，５００−３）  モジュール
５０１  二次記憶媒体
５０２，５０３  直列パス
６００  システムモデル
６０１  エミュレータモデル
６０２  ターゲットモデル
６０３  テストシナリオ
６０４  エミュレータＡ
６０５  ターゲットシステム
６０６  エミュレータＢ
６０７  出力期待値
６０９  実機出力
６１１  期待値一致検証
６１２  動作一致検証
７００  ロボットアーム
７０１−１、７０１−２、７０１−３  ロボットアームの可動部
７０２−１  第１制御モジュール
７０２−２  第２制御モジュール
７０２−３  第３制御モジュール
７０３−１、７０３−２、７０３−３  ＳＤカード
８００  自動車
８０２  バス接続
８０３  ツリー型ネットワーク
８０４  メッシュ型ネットワーク
【図１】
2015035158.tif 000003
【図２】
2015035158.tif 000004
【図３】
2015035158.tif 000005
【図４】
2015035158.tif 000006
【図５】
2015035158.tif 000007
【図６】
2015035158.tif 000008
【図７】
2015035158.tif 000009
【図８】
2015035158.tif 000010
【図９】
2015035158.tif 000011
【図１０】
2015035158.tif 000012
【図１１】
2015035158.tif 000013
【図１２】
2015035158.tif 000014
【図１３】
2015035158.tif 000015
【図１４】
2015035158.tif 000016
【図１５】
2015035158.tif 000017
【図１６】
2015035158.tif 000018
【図１７】
2015035158.tif 000019
【図１８】
2015035158.tif 000020
【図１９】
2015035158.tif 000021
【図２０】
2015035158.tif 000022
【図２１】
2015035158.tif 000023