特許第5872975号(P5872975)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ トヨタ自動車株式会社の特許一覧 ▶ 株式会社ガイア・システム・ソリューションの特許一覧

特許5872975ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム
<>
  • 特許5872975-ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム 図000002
  • 特許5872975-ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム 図000003
  • 特許5872975-ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム 図000004
  • 特許5872975-ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム 図000005
  • 特許5872975-ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム 図000006
  • 特許5872975-ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム 図000007
  • 特許5872975-ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム 図000008
  • 特許5872975-ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム 図000009
  • 特許5872975-ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム 図000010
  • 特許5872975-ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム 図000011
  • 特許5872975-ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム 図000012
  • 特許5872975-ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム 図000013
  • 特許5872975-ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム 図000014
  • 特許5872975-ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム 図000015
  • 特許5872975-ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム 図000016
  • 特許5872975-ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム 図000017
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5872975
(24)【登録日】2016年1月22日
(45)【発行日】2016年3月1日
(54)【発明の名称】ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム
(51)【国際特許分類】
   G06F 11/28 20060101AFI20160216BHJP
【FI】
   G06F11/28 340A
   G06F11/28 310D
【請求項の数】5
【全頁数】15
(21)【出願番号】特願2012-156218(P2012-156218)
(22)【出願日】2012年7月12日
(65)【公開番号】特開2014-21512(P2014-21512A)
(43)【公開日】2014年2月3日
【審査請求日】2014年10月17日
(73)【特許権者】
【識別番号】000003207
【氏名又は名称】トヨタ自動車株式会社
(73)【特許権者】
【識別番号】307008266
【氏名又は名称】株式会社ガイア・システム・ソリューション
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】大久保 雅史
(72)【発明者】
【氏名】赤星 博輝
【審査官】 多胡 滋
(56)【参考文献】
【文献】 特開2002−342113(JP,A)
【文献】 特開平09−016432(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/28
G06F 11/36
(57)【特許請求の範囲】
【請求項1】
ソフトウェアが実行された際の実行アドレスの変化を記述したトレースデータにおいて特定の分岐が行われた箇所を判別し、該特定の分岐に係る分岐元の実行アドレスと分岐先の実行アドレスとを分離して出力する分離部と、
前記分離部により出力された実行アドレスを、ソースコードに変換する変換部と、
前記変換部により変換されたソースコードを、比較データと比較することにより、前記ソフトウェアが正常に動作したか否かを判定する判定部と、
を備えるソフトウェア実行状況検証装置。
【請求項2】
請求項1記載のソフトウェア実行状況検証装置であって、
前記特定の分岐は、割り込み発生による分岐を含む、
ソフトウェア実行状況検証装置。
【請求項3】
請求項1又は2記載のソフトウェア実行状況検証装置であって、
前記分離部は、前記特定の分岐が行われた分岐先の先頭アドレスと終了アドレスを記述したデータを参照し、前記特定の分岐が行われた箇所を判別する、
ソフトウェア実行状況検証装置。
【請求項4】
コンピュータが、
ソフトウェアが実行された際の実行アドレスの変化を記述したトレースデータにおいて特定の分岐が行われた箇所を判別し、該特定の分岐に係る分岐元の実行アドレスと分岐先の実行アドレスとを分離して出力し、
前記出力された実行アドレスを、ソースコードに変換し、
該ソースコードを、比較データと比較することにより、前記ソフトウェアが正常に動作したか否かを判定する、
ソフトウェア実行状況検証方法。
【請求項5】
コンピュータに、
ソフトウェアが実行された際の実行アドレスの変化を記述したトレースデータにおいて特定の分岐が行われた箇所を判別させ、該特定の分岐に係る分岐元の実行アドレスと分岐先の実行アドレスとを分離して出力させ、
前記出力された実行アドレスを、ソースコードに変換させ、
該ソースコードを、比較データと比較させることにより、前記ソフトウェアが正常に動作したか否かを判定させる、
ソフトウェア実行状況検証プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラムに関する。
【背景技術】
【0002】
従来、ソフトウェアスタック上で動作する業務アプリケーションで発生した障害の原因を解析することを支援する障害原因解析支援装置が知られている(例えば、特許文献1参照)。この障害原因解析支援装置は、業務アプリケーションが出力するトレース情報に基づいて、業務アプリケーションを起動したリクエストを特定して抽出したり、業務アプリケーションを動作させていたソフトウェアのコンポーネントを抽出したりする。
【0003】
一方、近年では、複数のコンピュータが有していた機能を統合して1つのコンピュータに実行させるという動きが、特に車載コンピュータの分野において散見される。このようにソフトウェアの動作環境が変化する場合、ソフトウェアが正常に動作するかどうかを検証する必要性が生じる。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2009−205484号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
ソフトウェアの検証は、一般的に、コンピュータに入力を与え、出力を監視することにより行われる。しかしながら、この手法では、内部的なバグやエラーが存在するにも拘わらず、出力が正しいものであった場合に、ソフトウェアが正常に動作するかどうかを正確に検証することができない。これを解消するために、より多くの入力を与えて出力を監視しようとすると、検証に多くの時間を要することになってしまう。
【0006】
これに対し、コンピュータのトレース機能や、コンピュータを模擬したエミュレータのトレース機能を用いることで、内部動作をトレースデータとして確認することは可能であるが、ソフトウェアの動作環境が変化する場合には、下記の理由によりソフトウェアが正常に動作するかどうかを正確に検証することができない場合が生じる。
【0007】
まず、コンピュータのアーキテクチャやOS(オペレーティングシステム)が異なる場合、命令やスタック使用の方法が異なるため、ソースコードに対して生成される命令列が異なるものとなる。また、OSを使用した場合と使用しない場合で命令列は異なるものとなる。このため、命令列を単純に比較することによりソフトウェアの検証を行うのは困難である。
【0008】
また、近年のコンピュータでは、複数の処理が実行されており、その切替タイミングを予め予測できない場合がある。例えば割り込みによる処理の開始タイミングは、ソフトウェアに記述されているものでは無いため、検証対象のソフトウェアの動作と比較対象のソフトウェアの動作を合致させるのは困難である。この他、動作周波数、パイプライン構造、メモリアクセス速度、バスの混雑度等の相違も、処理の切替タイミングを左右してソフトウェアの検証を困難なものとする。
【0009】
また、仮に検証対象のソフトウェアと比較対象のソフトウェアが動作するコンピュータのハードウェアが同じであっても、メモリにおける命令コードの格納領域やデータ領域の配置が異なる場合、トレースデータに含まれる実行アドレスの単純比較によりソフトウェアの検証を行うのが困難になる。
【0010】
一つの側面によれば、ソフトウェアの検証を、より適切に行うことが可能なソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラムを提供することを目的とする。
【課題を解決するための手段】
【0011】
上記目的を達成するための本発明の一態様は、
ソフトウェアが実行された際の実行アドレスの変化を記述したトレースデータにおいて特定の分岐が行われた箇所を判別し、該特定の分岐に係る分岐元の実行アドレスと分岐先の実行アドレスとを分離して出力する分離部と、
前記分離部により出力された実行アドレスを、ソースコードに変換する変換部と、
前記変換部により変換されたソースコードを、比較データと比較することにより、前記ソフトウェアが正常に動作したか否かを判定する判定部と、
を備えるソフトウェア実行状況検証装置である。
【0012】
この本発明の一態様によれば、ソフトウェアの検証を、より適切に行うことができる。
【0013】
本発明の一態様において、
前記特定の分岐は、例えば、割り込み発生による分岐を含む。
【0014】
また、本発明の一態様において、
前記分離部は、前記特定の分岐が行われた分岐先の先頭アドレスと終了アドレスを記述したデータを参照し、前記特定の分岐が行われた箇所を判別するものとしてもよい。
【0016】
本発明の他の態様は、
コンピュータが、
ソフトウェアが実行された際の実行アドレスの変化を記述したトレースデータにおいて特定の分岐が行われた箇所を判別し、該特定の分岐に係る分岐元の実行アドレスと分岐先の実行アドレスとを分離して出力し、
前記出力された実行アドレスを、ソースコードに変換し、
該ソースコードを、比較データと比較することにより、前記ソフトウェアが正常に動作したか否かを判定する、
ソフトウェア実行状況検証方法である。
【0017】
本発明の他の態様は、
コンピュータに、
ソフトウェアが実行された際の実行アドレスの変化を記述したトレースデータにおいて特定の分岐が行われた箇所を判別させ、該特定の分岐に係る分岐元の実行アドレスと分岐先の実行アドレスとを分離して出力させ、
前記出力された実行アドレスを、ソースコードに変換させ、
該ソースコードを、比較データと比較させることにより、前記ソフトウェアが正常に動作したか否かを判定させる、
ソフトウェア実行状況検証プログラムである。
【発明の効果】
【0018】
一実施態様によれば、ソフトウェアの検証を、より適切に行うことが可能なソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラムを提供することを提供することができる。
【図面の簡単な説明】
【0019】
図1】一実施例に係るソフトウェア実行状況検証装置1が検証対象となるソフトウェアが実行された際の実行アドレスの変化等が記述されたトレースデータを取得する場面を簡単に示す図である。
図2】検証対象コンピュータ50とソフトウェア実行状況検証装置1は同体のコンピュータである場合の機能構成例である。
図3】一実施例に係るソフトウェア実行状況検証装置1のハードウェア構成例である。
図4】一実施例に係るソフトウェア実行状況検証装置1の機能構成例である。
図5】2回の割り込み処理が重なる時期に行われた場合に、トレースデータ20が3つのコンテキストに分離される様子を示す図である。
図6】検証対象コンピュータ50がOS無しで動作する場合の解析対象ソフトウェア情報の一例である。
図7】検証対象コンピュータ50がOS無しで動作する場合に、コンテキスト分離部10により実行される処理の流れを示すフローチャートの一例である。
図8】検証対象コンピュータ50がOS有りで動作する場合の解析対象ソフトウェア情報の一例である。
図9】検証対象コンピュータ50がOS有りで動作する場合のOS情報の一例である。
図10】検証対象コンピュータ50がOS有りで動作する場合に、コンテキスト分離部10により実行される処理の流れを示すフローチャートの一例である。
図11】コンテキスト分離部10により生成される分離後トレースデータ24の一部と、ソース対応付け・メモリフィルタ部12により生成される変換データ28とを示す図である。
図12】ソース対応付け・メモリフィルタ部12により実行される処理の流れを示すフローチャートの一例である。
図13】動作判定部14による処理を概念的に示す図である。
図14】動作判定部14による処理の流れを示すフローチャートの一例である。
図15】あるコンピュータ上で動作しているソフトウェアを、他のコンピュータに移植した際に、ソフトウェアの検証が実行される様子を示す図である。
図16】複数のコンピュータ上で動作しているソフトウェアを、一のコンピュータに統合して動作させる際に、ソフトウェアの検証が実行される様子を示す図である。
【発明を実施するための形態】
【0020】
以下、本発明を実施するための形態について、添付図面を参照しながら実施例を挙げて説明する。
【実施例】
【0021】
以下、図面を参照し、ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラムの実施例について説明する。
【0022】
[構成]
図1は、一実施例に係るソフトウェア実行状況検証装置1が検証対象となるソフトウェアが実行された際の実行アドレスの変化等が記述されたトレースデータを取得する場面を簡単に示す図である。
【0023】
検証対象コンピュータ50は、パーソナルコンピュータ、或いは、自動車等の移動体や携帯電話、プラント、工作機械、各種電子機器等を制御する組み込みコンピュータである。検証対象ソフトウェア52は、検証対象コンピュータ50上で動作するソフトウェアであり、その種類について特段の制約は存在しない。検証対象コンピュータ50は、CPU(Central Processing Unit)やプログラムメモリ等を有し、プログラムカウンタの示す値がバスを介してプログラムメモリに出力され、プログラムメモリからCPUに送信された命令コード(検証対象ソフトウェア52に含まれる)をCPUが実行する。
【0024】
インサーキットエミュレータ(In-Circuit Emulatorは登録商標)60は、ソフトウェアのデバッグとハードウェアの動作確認を行うことができるデバッガである。インサーキットエミュレータ60は、バスを流れるプログラムカウンタ値を監視することにより、対象コンピュータにおいて実行された命令コードのアドレス(以下、実行アドレスと称する)を実行順に取得する機能や、特定の命令コードが実行される度に指定されたメモリの内容を出力する機能等を有する。インサーキットエミュレータ60は、このような機能により取得されたトレースデータは、ソフトウェア実行状況検証装置1に提供される。
【0025】
なお、インサーキットエミュレータ60は、独立したハードウェア上で動作するものであってもよいし、ソフトウェア実行状況検証装置1と検証対象コンピュータ50のいずれかで動作するものであってもよい。
【0026】
また、検証対象コンピュータ50とソフトウェア実行状況検証装置1は同体のコンピュータであってもよい。図2は、検証対象コンピュータ50とソフトウェア実行状況検証装置1は同体のコンピュータである場合の機能構成例である。図2に示すコンピュータ70上では、対象ソフトウェア72、インサーキットエミュレータ部74、ソフトウェア実行状況検証部76等のソフトウェアが動作する。
【0027】
図3は、一実施例に係るソフトウェア実行状況検証装置1のハードウェア構成例である。ソフトウェア実行状況検証装置1は、例えば、CPUAと、ドライブ装置Bと、メモリ装置Dと、記憶装置Eと、入力装置Fと、表示装置Gと、インターフェース装置Hとを備える。これらの構成要素は、バスやシリアル回線等を介して接続されている。
【0028】
CPUAは、例えば、プログラムカウンタや命令デコーダ、各種演算器、LSU(Load Store Unit)、汎用レジスタ等を有するプロセッサである。ドライブ装置Bは、記憶媒体Cからプログラムやデータを読み込み可能な装置である。プログラムを記録した記憶媒体Cがドライブ装置Bに装着されると、プログラムが記憶媒体Cからドライブ装置Bを介して記憶装置Eにインストールされる。記憶媒体Cは、例えば、CD(Compact Disc)、DVD(Digital Versatile Disc)、USB(Universal Serial Bus)メモリ等の可搬型の記憶媒体である。プログラムのインストールは、記憶媒体Cを用いる他、インターフェース装置Hがネットワークを介して他のコンピュータよりダウンロードし、記憶装置Eにインストールすることによって行うこともできる。また、ソフトウェア実行状況検証装置1において実行されるプログラムは、ソフトウェア実行状況検証装置1の出荷時に、予め記憶装置EやROM等に格納されていてもよい。
【0029】
メモリ装置Dは、例えば、RAM(Random Access Memory)であり、記憶装置Eは、例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive)である。入力装置Fは、例えば、キーボードやマウス、タッチパネル、タッチパッド、マイク等である。表示装置Gは、例えば、LCD(Liquid Crystal Display)である。インターフェース装置Hは、種々のネットワークにアクセスし、検証対象コンピュータ50等の他のコンピュータとの間で通信を行う。
【0030】
図4は、一実施例に係るソフトウェア実行状況検証装置1の機能構成例である。ソフトウェア実行状況検証装置1は、CPUAがプログラムを実行することにより機能する機能部として、コンテキスト分離部10と、ソース対応付け・メモリフィルタ部12と、動作判定部14とを備える。なお、これらの機能部は、明確に分離したプログラムによって実現される必要はなく、サブルーチンや関数として他のプログラムによって呼び出されるものであってもよい。また、機能部の一部が、LSI(Large Scale Integrated circuit)、IC(Integrated Circuit)やFPGA(Field Programmable Gate Array)等のハードウェア手段であっても構わない。
【0031】
また、ソフトウェア実行状況検証装置1は、メモリ装置D等に、分離後トレースデータ24、変換データ28等を生成して処理に使用する。
【0032】
コンテキスト分離部10は、インサーキットエミュレータ60から供給されるトレースデータ20を、アプリ(+OS)情報22を参照してコンテキストに分離し、分離後トレースデータ24として出力する。コンテキストとは、例えば、割り込みやタスクの切替等、特定の分岐に係る分岐元の一連の実行アドレスと分岐先の一連の実行アドレスとを分離した場合の、それぞれの一連の実行アドレスを意味する。図5は、2回の割り込み処理が重なる時期に行われた場合に、トレースデータ20が3つのコンテキスト(分離後トレースデータ24)に分離される様子を示す図である。図5に示すように、割り込み(1)に係る処理(図5における命令E、F、G(reti))、割り込み(2)に係る処理(図5における命令G、H、I(reti))、それ以外のメインルーチンに係る処理(図5における命令A、B、C、D、H…は、それぞれが別のコンテキストとして出力される。また、トレースデータ20は、実行アドレスに命令コードが対応付けられたデータであり、後述するように、更にロード・ストア命令に関してアクセス先の情報等が付与される。
【0033】
ソース対応付け・メモリフィルタ部12は、コンテキスト分離部10により出力された分離後トレースデータにおける命令コードを、変換用情報26等を参照してソースコードに変換し、変換データ28を出力する。
【0034】
動作判定部14は、変換データ28を比較対象のデータと比較し、検証対象ソフトウェア52が正常に動作したか否かを判定する。
【0035】
[処理内容]
以下、これらの機能ブロックの処理について、より詳細に説明する。コンテキスト分離部10は、検証対象コンピュータ50がOS無しで動作する場合と、OS有りで動作する場合とで異なる処理を行う。
【0036】
〔コンテキスト分離部〕
(1)検証対象コンピュータ50がOS無しで動作する場合
コンテキスト分離部10が利用するアプリ(+OS)情報22は、例えば、図6に例示される解析対象ソフトウェア情報を含む。解析対象ソフトウェア情報は、メインルーチン、割り込み処理A、割り込み処理B毎に、分離後トレースデータ24におけるファイルの出力先、先頭アドレス及び終了アドレス、初期化可能か否かの情報等を含む。解析対象ソフトウェア情報は、例えば、対象ソフトウェアのデバッグ時やコンパイル時に生成された情報に基づき、予め作成されたものである。
【0037】
図7は、検証対象コンピュータ50がOS無しで動作する場合に、コンテキスト分離部10により実行される処理の流れを示すフローチャートの一例である。図7のフローチャートにおいて、「outfile」はファイルの出力先を示し、「inst」は読み込んだ命令情報を示す符号であり、「m_stack」はファイルの出力先をLIFO(Last In, First Out)で保存するスタックを示す。
【0038】
まず、コンテキスト分離部10は、outfileの初期データを、メインルーチンに対応する「ファイル00」に設定する(S100)。
【0039】
次に、コンテキスト分離部10は、トレースデータ20から命令コードを1つ読み込み、instとする(S102)。
【0040】
次に、コンテキスト分離部10は、読み込んだ命令コードの実行アドレスが、コンテキスト(ここでは割り込み処理)の先頭アドレスであるか否かを判定する(S104)。
【0041】
読み込んだ命令コードの実行アドレスが、コンテキストの先頭アドレスである場合、コンテキスト分離部10は、outfileをm_stackにプッシュし(S106)、開始されたコンテキストの「出力先」をoutfileに設定し(S108)、outfileにinstを出力する(S110)。
【0042】
読み込んだ命令コードの実行アドレスが、コンテキストの先頭アドレスでない場合、コンテキスト分離部10は、読み込んだ命令コードの実行アドレスが、コンテキストの終了アドレスであるか否かを判定する(S112)。
【0043】
読み込んだ命令コードの実行アドレスが、コンテキストの終了アドレスである場合、コンテキスト分離部10は、outfileにinstを出力し(S114)、m_stackからoutfileをポップする(S116)。
【0044】
読み込んだ命令コードの実行アドレスが、コンテキストの先頭アドレスでも終了アドレスでもない場合、コンテキスト分離部10は、outfileにinstを出力する(S118)。
【0045】
S104〜S118の処理を実行すると、コンテキスト分離部10は、トレースデータ20から次の命令コードを1つ読み込み、instとする(S120)。
【0046】
そして、コンテキスト分離部10は、instがNULLであるか否かを判定し(S122)、instがNULLでない場合はS104に戻り、instがNULLである場合は本フローチャートの処理を終了する。
【0047】
(2)検証対象コンピュータ50がOS有りで動作する場合
コンテキスト分離部10が利用するアプリ(+OS)情報22は、例えば、図8に例示される解析対象ソフトウェア情報や図9に例示されるOS情報を含む。
【0048】
解析対象ソフトウェア情報は、タスクA、タスクB、タスクC、OS処理毎に、分離後トレースデータ24におけるファイルの出力先、先頭アドレス及び終了アドレス、初期化可能か否かの情報、タスクID等を含む。
【0049】
OS情報は、タスクIDをもつ変数アドレスA1、スケジューラ出口のアドレスA2、割り込み処理を開始するための割り込みハンドラ毎の先頭アドレスと終了アドレス等を含む。タスクIDをもつ変数アドレスA1は、OSの一機能であるスケジューラが、起床させるタスクのIDを書き込むアドレスである。スケジューラ出口のアドレスA2は、スケジューラがタスクの起床を行うときに実行される命令のアドレスである。
【0050】
解析対象ソフトウェア情報やOS情報は、例えば、対象ソフトウェアのデバッグ時やコンパイル時に生成された情報に基づき、予め作成されたものである。
【0051】
図10は、検証対象コンピュータ50がOS有りで動作する場合に、コンテキスト分離部10により実行される処理の流れを示すフローチャートの一例である。図10のフローチャートにおいて、「outfile」はファイルの出力先を示し、「inst」は読み込んだ命令情報を示す符号であり、「m_stack」はファイルの出力先をLIFOで保存するスタックを示す。
【0052】
まず、コンテキスト分離部10は、outfileの初期データをNULLに設定する(S200)。
【0053】
次に、コンテキスト分離部10は、トレースデータ20から命令コードを1つ読み込み、instとする(S202)。
【0054】
次に、コンテキスト分離部10は、読み込んだ命令コードが、タスクIDをもつ変数アドレスA1へのストア命令であるか否かを判定する(S204)。読み込んだ命令コードが、タスクIDをもつ変数アドレスA1へのストア命令である場合、アドレスA1への書込データをタスクIDに設定する(S206)。
【0055】
次に、コンテキスト分離部10は、読み込んだ命令コードの実行アドレスが、スケジューラ出口のアドレスであるか否かを判定する(S208)。
【0056】
読み込んだ命令コードの実行アドレスが、スケジューラ出口のアドレスである場合、コンテキスト分離部10は、ラスクIDが示すタスクの「出力先」をoutfileに設定し(S210)、outfileにinstを出力する(S212)。
【0057】
読み込んだ命令コードの実行アドレスが、スケジューラ出口のアドレスでない場合、コンテキスト分離部10は、読み込んだ命令コードの実行アドレスが、割り込みハンドラの先頭アドレスであるか否かを判定する(S214)。
【0058】
読み込んだ命令コードの実行アドレスが、割り込みハンドラの先頭アドレスである場合、コンテキスト分離部10は、outfileをm_stackにプッシュし(S216)、開始されたコンテキストの「出力先」をoutfileに設定し(S218)、outfileにinstを出力する(S220)。
【0059】
読み込んだ命令コードの実行アドレスが、割り込みハンドラの先頭アドレスでない場合、コンテキスト分離部10は、読み込んだ命令コードの実行アドレスが、割り込みハンドラの終了アドレスであるか否かを判定する(S222)。
【0060】
読み込んだ命令コードの実行アドレスが、割り込みハンドラの終了アドレスである場合、コンテキスト分離部10は、outfileにinstを出力し(S224)、m_stackからoutfileをポップする(S226)。
【0061】
読み込んだ命令コードの実行アドレスが、割り込みハンドラの先頭アドレスでも終了アドレスでもない場合、コンテキスト分離部10は、読み込んだ命令コードの実行アドレスが、OS処理領域内のアドレスであるか否かを判定する(S228)。読み込んだ命令コードの実行アドレスが、OS処理領域内のアドレスでない場合、コンテキスト分離部10は、outfileにinstを出力する(S230)。
【0062】
S204〜S230の処理を実行すると、コンテキスト分離部10は、トレースデータ20から次の命令コードを1つ読み込み、instとする(S232)。
【0063】
そして、コンテキスト分離部10は、instがNULLであるか否かを判定し(S234)、instがNULLでない場合はS204に戻り、instがNULLである場合は本フローチャートの処理を終了する。
【0064】
〔ソース対応付け・メモリフィルタ部〕
図11は、コンテキスト分離部10により生成される分離後トレースデータ24の一部と、ソース対応付け・メモリフィルタ部12により生成される変換データ28とを示す図である。図11に示すように、分離後トレースデータ24は、コンテキスト毎に抜き出されたトレースデータであり、実行アドレスに命令コードが対応付けられ、更に、ロード・ストア命令に関してはアクセス先のメモリ装置Dのアドレスと、対応するレジスタ番号を含む。ソース対応付け・メモリフィルタ部12が変換データ28の生成のために参照する変換用情報26には、図11に示すソースとオブジェクトの対応表26A、変数情報26B等が含まれる。これらの変換用情報26は、例えば、対象ソフトウェアのデバッグ時やコンパイル時に生成された情報に基づき、予め作成されたものである。
【0065】
ソースとオブジェクトの対応表26Aにおける「A.c」や「B.c」はファイル名を示し、「100」、「101」、「30」等は各ファイルにおける行番号を示す。また、変数情報26Bは、ソースコードにおける変数名と、検証対象コンピュータ50において変数が格納されるアドレスを対応付けた情報である。
【0066】
ソース対応付け・メモリフィルタ部12は、これらの情報を参照することにより、分離後トレースデータ24を、「ファイル、行番号、ヒープ領域の変数アクセス」の時系列データに変換する。これによって、検証対象コンピュータ50においてなされた動作が、ソースコードにより表現された動作に変換され、ソフトウェアの検証を容易に行うことを可能とする。なお、変数情報26Bに無いメモリへのアクセスは、スタックへのアクセス等、コンピュータ依存のアクセスであるため、変換データ28に反映させないようにしている。
【0067】
図12は、ソース対応付け・メモリフィルタ部12により実行される処理の流れを示すフローチャートの一例である。
【0068】
まず、ソース対応付け・メモリフィルタ部12は、分離後トレースデータ24から命令コードを1つ読み込み、instとする(S300)。
【0069】
次に、ソース対応付け・メモリフィルタ部12は、命令コードの実行アドレスが、ソースとオブジェクトの対応表26Aにあるか否かを判定する(S302)。命令コードの実行アドレスが、ソースとオブジェクトの対応表26Aにある場合、ソース対応付け・メモリフィルタ部12は、命令コードの実行アドレスに対応するソースコードと行番号を出力する(S304)。
【0070】
次に、ソース対応付け・メモリフィルタ部12は、ロード・ストア命令に関する付加情報があるか否かを判定する(S306)。ロード・ストア命令に関する付加情報がある場合、ソース対応付け・メモリフィルタ部12は、アクセスタイプ(ロードかストアか)、変数名、レジスタ値を更に出力する(S308)。
【0071】
次に、ソース対応付け・メモリフィルタ部12は、分離後トレースデータ24から命令コードを1つ読み込み、instとし(S310)、instがNULLであるか否かを判定する(S312)、ソース対応付け・メモリフィルタ部12は、instがNULLでない場合はS302に戻り、instがNULLである場合は本フローチャートの処理を終了する。
【0072】
〔動作判定部〕
図13は、動作判定部14による処理を概念的に示す図である。図示するように、動作判定部14は、検証対象コンピュータ50において検証対象ソフトウェア52が実行されることにより取得されたトレースデータから生成された変換データ28を、比較対象コンピュータにおいて同じソフトウェアが実行されることにより取得されたトレースデータから生成された比較データと、ソースコード毎に比較することにより、検証対象コンピュータ50において検証対象ソフトウェア52が正常に動作しているか否かを判定する。
【0073】
ここで、比較データは、正常が動作していることが判明しているソフトウェア環境で、検証対象データ52と同じソフトウェアが動作したときに取得されたトレースデータから生成されたデータである。
【0074】
図14は、動作判定部14による処理の流れを示すフローチャートの一例である。
【0075】
まず、動作判定部14は、変換データ28と比較データの(例えばユーザによる)指定を受け付ける(S400)。
【0076】
次に、動作判定部14は、変換データ28と比較データからソースコードを1つずつ取得する(S402)。
【0077】
次に、動作判定部14は、ファイル名及び行番号が一致しているか否かを判定する(S404)。
【0078】
ファイル名及び行番号が一致している場合、動作判定部14は、ロード・ストア命令に関する付加情報があるか否かを判定する(S406)。
【0079】
ロード・ストア命令に関する付加情報がある場合、動作判定部14は、タイプ、変数名、アクセス先のアドレス、及びレジスタが一致するか否かを判定する(S408)。
【0080】
タイプ、変数名、アクセス先のアドレス、及びレジスタが一致する場合、動作判定部14は、全てのソースコードについてS404〜S408の比較を行ったか否かを判定する(410)。全てのソースコードについてS404〜S408の比較を行っていない場合、動作判定部14は、S402に戻り、次のソースコードを取得する。
【0081】
全てのソースコードについてS404〜S408の比較を行った場合、動作判定部14は、検証対象ソフトウェア52が正常に動作したことを出力する(S412)。
【0082】
一方、S404又はS408において否定的な判定を得た場合、動作判定部14は、エラー出力、すなわち、検証対象ソフトウェア52が正常に動作しなかったことを出力する(S414)。
【0083】
[適用例]
図15は、あるコンピュータ上で動作しているソフトウェアを、他のコンピュータに移植した際に、ソフトウェアの検証が実行される様子を示す図である。図15に示すように、現在までソフトウェアを実行していたコンピュータAと、これからソフトウェアを移植するコンピュータBのそれぞれからトレースデータ20を取得し、各トレースデータ20に対してコンテキスト分離部10及びソース対応付け・メモリフィルタ部12が処理を行って生成される変換データ同士を比較することにより、コンピュータBで当該ソフトウェアが正常に動作するか否かを事前に検証することができる。
【0084】
図16は、複数のコンピュータ上で動作しているソフトウェアを、一のコンピュータに統合して動作させる際に、ソフトウェアの検証が実行される様子を示す図である。図16に示すように、現在までソフトウェアを実行していたコンピュータC、Dと、これからソフトウェアを移植するコンピュータEのそれぞれからトレースデータ20を取得し、各トレースデータ20に対してコンテキスト分離部10及びソース対応付け・メモリフィルタ部12が処理を行って生成される変換データ同士を比較することにより、コンピュータEで各ソフトウェアが正常に動作するか否かを事前に検証することができる。
【0085】
いずれの場合も、ソースコードレベルで比較を行うことができるため、動作環境が異なるにも関わらず、実行されるタイミングやアクセス先のアドレス、変数等が正常であるか否かを検証することができる。また、スタック操作等のソースコード上の記述に無いコンピュータ依存の動作は除外されるため、不要なエラー出力がなされることを抑制することができる。また、図16に示す機能統合時の検証においては、統合時に新たに追加されたコンテキストや比較する必要が無いコンテキスト(OS処理等)を比較対象としないようにすることができるため、過不足無い検証を行うことができる。
【0086】
[まとめ]
以上説明したソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラムの実施例によれば、ソフトウェアの検証を、より適切に行うことができる。
【0087】
以上、本発明を実施するための形態について実施例を用いて説明したが、本発明はこうした実施例に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
【0088】
例えば、上記実施例では、コンテキストが変更される場合の例として割り込み処理の発生やタスクの切り替えを挙げたが、これらの他(或いはこれらに代えて)、サブルーチンによる分岐等を含んでもよい。
【符号の説明】
【0089】
1 ソフトウェア実行状況検証装置
10 コンテキスト分離部
12 ソース対応付け・メモリフィルタ部
14 動作判定部
50 検証対象コンピュータ
52 検証対象ソフトウェア
60 インサーキットエミュレータ
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16