(57)【要約】【課題】ソフトウェアの検証を、より適切に行うことが可能なソフトウェア実行状況検証装置等を提供すること。【解決手段】ソフトウェアが実行された際の実行アドレスの変化を記述したトレースデータにおいて特定の分岐が行われた箇所を判別し、該特定の分岐に係る分岐元の実行アドレスと分岐先の実行アドレスとを分離して出力する分離部と、前記分離部により出力された実行アドレスを、ソースコードに変換する変換部と、を備えるソフトウェア実行状況検証装置。【選択図】図４
2014021512.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアが実行された際の実行アドレスの変化を記述したトレースデータにおいて特定の分岐が行われた箇所を判別し、該特定の分岐に係る分岐元の実行アドレスと分岐先の実行アドレスとを分離して出力する分離部と、
前記分離部により出力された実行アドレスを、ソースコードに変換する変換部と、
を備えるソフトウェア実行状況検証装置。
【請求項２】
請求項１記載のソフトウェア実行状況検証装置であって、
前記特定の分岐は、割り込み発生による分岐を含む、
ソフトウェア実行状況検証装置。
【請求項３】
請求項１又は２記載のソフトウェア実行状況検証装置であって、
前記分離部は、前記特定の分岐が行われた分岐先の先頭アドレスと終了アドレスを記述したデータを参照し、前記特定の分岐が行われた箇所を判別する、
ソフトウェア実行状況検証装置。
【請求項４】
請求項１ないし３のいずれか１項記載のソフトウェア実行状況検証装置であって、
前記変換部により変換されたソースコードを、比較データと比較することにより、前記ソフトウェアが正常に動作したか否かを判定する判定部を備える、
ソフトウェア実行状況検証装置。
【請求項５】
コンピュータが、
ソフトウェアが実行された際の実行アドレスの変化を記述したトレースデータにおいて特定の分岐が行われた箇所を判別し、該特定の分岐に係る分岐元の実行アドレスと分岐先の実行アドレスとを分離して出力し、
前記出力された実行アドレスを、ソースコードに変換する、
ソフトウェア実行状況検証方法。
【請求項６】
コンピュータに、
ソフトウェアが実行された際の実行アドレスの変化を記述したトレースデータにおいて特定の分岐が行われた箇所を判別させ、該特定の分岐に係る分岐元の実行アドレスと分岐先の実行アドレスとを分離して出力させ、
前記出力された実行アドレスを、ソースコードに変換させる、
ソフトウェア実行状況検証プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラムに関する。
【背景技術】
【０００２】
従来、ソフトウェアスタック上で動作する業務アプリケーションで発生した障害の原因を解析することを支援する障害原因解析支援装置が知られている（例えば、特許文献１参照）。この障害原因解析支援装置は、業務アプリケーションが出力するトレース情報に基づいて、業務アプリケーションを起動したリクエストを特定して抽出したり、業務アプリケーションを動作させていたソフトウェアのコンポーネントを抽出したりする。
【０００３】
一方、近年では、複数のコンピュータが有していた機能を統合して１つのコンピュータに実行させるという動きが、特に車載コンピュータの分野において散見される。このようにソフトウェアの動作環境が変化する場合、ソフトウェアが正常に動作するかどうかを検証する必要性が生じる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−２０５４８４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ソフトウェアの検証は、一般的に、コンピュータに入力を与え、出力を監視することにより行われる。しかしながら、この手法では、内部的なバグやエラーが存在するにも拘わらず、出力が正しいものであった場合に、ソフトウェアが正常に動作するかどうかを正確に検証することができない。これを解消するために、より多くの入力を与えて出力を監視しようとすると、検証に多くの時間を要することになってしまう。
【０００６】
これに対し、コンピュータのトレース機能や、コンピュータを模擬したエミュレータのトレース機能を用いることで、内部動作をトレースデータとして確認することは可能であるが、ソフトウェアの動作環境が変化する場合には、下記の理由によりソフトウェアが正常に動作するかどうかを正確に検証することができない場合が生じる。
【０００７】
まず、コンピュータのアーキテクチャやＯＳ（オペレーティングシステム）が異なる場合、命令やスタック使用の方法が異なるため、ソースコードに対して生成される命令列が異なるものとなる。また、ＯＳを使用した場合と使用しない場合で命令列は異なるものとなる。このため、命令列を単純に比較することによりソフトウェアの検証を行うのは困難である。
【０００８】
また、近年のコンピュータでは、複数の処理が実行されており、その切替タイミングを予め予測できない場合がある。例えば割り込みによる処理の開始タイミングは、ソフトウェアに記述されているものでは無いため、検証対象のソフトウェアの動作と比較対象のソフトウェアの動作を合致させるのは困難である。この他、動作周波数、パイプライン構造、メモリアクセス速度、バスの混雑度等の相違も、処理の切替タイミングを左右してソフトウェアの検証を困難なものとする。
【０００９】
また、仮に検証対象のソフトウェアと比較対象のソフトウェアが動作するコンピュータのハードウェアが同じであっても、メモリにおける命令コードの格納領域やデータ領域の配置が異なる場合、トレースデータに含まれる実行アドレスの単純比較によりソフトウェアの検証を行うのが困難になる。
【００１０】
一つの側面によれば、ソフトウェアの検証を、より適切に行うことが可能なソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記目的を達成するための本発明の一態様は、
ソフトウェアが実行された際の実行アドレスの変化を記述したトレースデータにおいて特定の分岐が行われた箇所を判別し、該特定の分岐に係る分岐元の実行アドレスと分岐先の実行アドレスとを分離して出力する分離部と、
前記分離部により出力された実行アドレスを、ソースコードに変換する変換部と、
を備えるソフトウェア実行状況検証装置である。
【００１２】
この本発明の一態様によれば、ソフトウェアの検証を、より適切に行うことができる。
【００１３】
本発明の一態様において、
前記特定の分岐は、例えば、割り込み発生による分岐を含む。
【００１４】
また、本発明の一態様において、
前記分離部は、前記特定の分岐が行われた分岐先の先頭アドレスと終了アドレスを記述したデータを参照し、前記特定の分岐が行われた箇所を判別するものとしてもよい。
【００１５】
また、本発明の一態様において、
前記変換部により変換されたソースコードを、比較データと比較することにより、前記ソフトウェアが正常に動作したか否かを判定する判定部を備えるものとしてもよい。
【００１６】
本発明の他の態様は、
コンピュータが、
ソフトウェアが実行された際の実行アドレスの変化を記述したトレースデータにおいて特定の分岐が行われた箇所を判別し、該特定の分岐に係る分岐元の実行アドレスと分岐先の実行アドレスとを分離して出力し、
前記出力された実行アドレスを、ソースコードに変換する、
ソフトウェア実行状況検証方法である。
【００１７】
本発明の他の態様は、
コンピュータに、
ソフトウェアが実行された際の実行アドレスの変化を記述したトレースデータにおいて特定の分岐が行われた箇所を判別させ、該特定の分岐に係る分岐元の実行アドレスと分岐先の実行アドレスとを分離して出力させ、
前記出力された実行アドレスを、ソースコードに変換させる、
ソフトウェア実行状況検証プログラムである。
【発明の効果】
【００１８】
一実施態様によれば、ソフトウェアの検証を、より適切に行うことが可能なソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラムを提供することを提供することができる。
【図面の簡単な説明】
【００１９】
【図１】一実施例に係るソフトウェア実行状況検証装置１が検証対象となるソフトウェアが実行された際の実行アドレスの変化等が記述されたトレースデータを取得する場面を簡単に示す図である。
【図２】検証対象コンピュータ５０とソフトウェア実行状況検証装置１は同体のコンピュータである場合の機能構成例である。
【図３】一実施例に係るソフトウェア実行状況検証装置１のハードウェア構成例である。
【図４】一実施例に係るソフトウェア実行状況検証装置１の機能構成例である。
【図５】２回の割り込み処理が重なる時期に行われた場合に、トレースデータ２０が３つのコンテキストに分離される様子を示す図である。
【図６】検証対象コンピュータ５０がＯＳ無しで動作する場合の解析対象ソフトウェア情報の一例である。
【図７】検証対象コンピュータ５０がＯＳ無しで動作する場合に、コンテキスト分離部１０により実行される処理の流れを示すフローチャートの一例である。
【図８】検証対象コンピュータ５０がＯＳ有りで動作する場合の解析対象ソフトウェア情報の一例である。
【図９】検証対象コンピュータ５０がＯＳ有りで動作する場合のＯＳ情報の一例である。
【図１０】検証対象コンピュータ５０がＯＳ有りで動作する場合に、コンテキスト分離部１０により実行される処理の流れを示すフローチャートの一例である。
【図１１】コンテキスト分離部１０により生成される分離後トレースデータ２４の一部と、ソース対応付け・メモリフィルタ部１２により生成される変換データ２８とを示す図である。
【図１２】ソース対応付け・メモリフィルタ部１２により実行される処理の流れを示すフローチャートの一例である。
【図１３】動作判定部１４による処理を概念的に示す図である。
【図１４】動作判定部１４による処理の流れを示すフローチャートの一例である。
【図１５】あるコンピュータ上で動作しているソフトウェアを、他のコンピュータに移植した際に、ソフトウェアの検証が実行される様子を示す図である。
【図１６】複数のコンピュータ上で動作しているソフトウェアを、一のコンピュータに統合して動作させる際に、ソフトウェアの検証が実行される様子を示す図である。
【発明を実施するための形態】
【００２０】
以下、本発明を実施するための形態について、添付図面を参照しながら実施例を挙げて説明する。
【実施例】
【００２１】
以下、図面を参照し、ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラムの実施例について説明する。
【００２２】
［構成］
図１は、一実施例に係るソフトウェア実行状況検証装置１が検証対象となるソフトウェアが実行された際の実行アドレスの変化等が記述されたトレースデータを取得する場面を簡単に示す図である。
【００２３】
検証対象コンピュータ５０は、パーソナルコンピュータ、或いは、自動車等の移動体や携帯電話、プラント、工作機械、各種電子機器等を制御する組み込みコンピュータである。検証対象ソフトウェア５２は、検証対象コンピュータ５０上で動作するソフトウェアであり、その種類について特段の制約は存在しない。検証対象コンピュータ５０は、ＣＰＵ（Central  Processing  Unit）やプログラムメモリ等を有し、プログラムカウンタの示す値がバスを介してプログラムメモリに出力され、プログラムメモリからＣＰＵに送信された命令コード（検証対象ソフトウェア５２に含まれる）をＣＰＵが実行する。
【００２４】
インサーキットエミュレータ（In-Circuit  Emulatorは登録商標）６０は、ソフトウェアのデバッグとハードウェアの動作確認を行うことができるデバッガである。インサーキットエミュレータ６０は、バスを流れるプログラムカウンタ値を監視することにより、対象コンピュータにおいて実行された命令コードのアドレス（以下、実行アドレスと称する）を実行順に取得する機能や、特定の命令コードが実行される度に指定されたメモリの内容を出力する機能等を有する。インサーキットエミュレータ６０は、このような機能により取得されたトレースデータは、ソフトウェア実行状況検証装置１に提供される。
【００２５】
なお、インサーキットエミュレータ６０は、独立したハードウェア上で動作するものであってもよいし、ソフトウェア実行状況検証装置１と検証対象コンピュータ５０のいずれかで動作するものであってもよい。
【００２６】
また、検証対象コンピュータ５０とソフトウェア実行状況検証装置１は同体のコンピュータであってもよい。図２は、検証対象コンピュータ５０とソフトウェア実行状況検証装置１は同体のコンピュータである場合の機能構成例である。図２に示すコンピュータ７０上では、対象ソフトウェア７２、インサーキットエミュレータ部７４、ソフトウェア実行状況検証部７６等のソフトウェアが動作する。
【００２７】
図３は、一実施例に係るソフトウェア実行状況検証装置１のハードウェア構成例である。ソフトウェア実行状況検証装置１は、例えば、ＣＰＵＡと、ドライブ装置Ｂと、メモリ装置Ｄと、記憶装置Ｅと、入力装置Ｆと、表示装置Ｇと、インターフェース装置Ｈとを備える。これらの構成要素は、バスやシリアル回線等を介して接続されている。
【００２８】
ＣＰＵＡは、例えば、プログラムカウンタや命令デコーダ、各種演算器、ＬＳＵ（Load  Store  Unit）、汎用レジスタ等を有するプロセッサである。ドライブ装置Ｂは、記憶媒体Ｃからプログラムやデータを読み込み可能な装置である。プログラムを記録した記憶媒体Ｃがドライブ装置Ｂに装着されると、プログラムが記憶媒体Ｃからドライブ装置Ｂを介して記憶装置Ｅにインストールされる。記憶媒体Ｃは、例えば、ＣＤ（Compact  Disc）、ＤＶＤ（Digital  Versatile  Disc）、ＵＳＢ（Universal  Serial  Bus）メモリ等の可搬型の記憶媒体である。プログラムのインストールは、記憶媒体Ｃを用いる他、インターフェース装置Ｈがネットワークを介して他のコンピュータよりダウンロードし、記憶装置Ｅにインストールすることによって行うこともできる。また、ソフトウェア実行状況検証装置１において実行されるプログラムは、ソフトウェア実行状況検証装置１の出荷時に、予め記憶装置ＥやＲＯＭ等に格納されていてもよい。
【００２９】
メモリ装置Ｄは、例えば、ＲＡＭ（Random  Access  Memory）であり、記憶装置Ｅは、例えば、ＨＤＤ（Hard  Disk  Drive）やＳＳＤ（Solid  State  Drive）である。入力装置Ｆは、例えば、キーボードやマウス、タッチパネル、タッチパッド、マイク等である。表示装置Ｇは、例えば、ＬＣＤ（Liquid  Crystal  Display）である。インターフェース装置Ｈは、種々のネットワークにアクセスし、検証対象コンピュータ５０等の他のコンピュータとの間で通信を行う。
【００３０】
図４は、一実施例に係るソフトウェア実行状況検証装置１の機能構成例である。ソフトウェア実行状況検証装置１は、ＣＰＵＡがプログラムを実行することにより機能する機能部として、コンテキスト分離部１０と、ソース対応付け・メモリフィルタ部１２と、動作判定部１４とを備える。なお、これらの機能部は、明確に分離したプログラムによって実現される必要はなく、サブルーチンや関数として他のプログラムによって呼び出されるものであってもよい。また、機能部の一部が、ＬＳＩ（Large  Scale  Integrated  circuit）、ＩＣ（Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）等のハードウェア手段であっても構わない。
【００３１】
また、ソフトウェア実行状況検証装置１は、メモリ装置Ｄ等に、分離後トレースデータ２４、変換データ２８等を生成して処理に使用する。
【００３２】
コンテキスト分離部１０は、インサーキットエミュレータ６０から供給されるトレースデータ２０を、アプリ（＋ＯＳ）情報２２を参照してコンテキストに分離し、分離後トレースデータ２４として出力する。コンテキストとは、例えば、割り込みやタスクの切替等、特定の分岐に係る分岐元の一連の実行アドレスと分岐先の一連の実行アドレスとを分離した場合の、それぞれの一連の実行アドレスを意味する。図５は、２回の割り込み処理が重なる時期に行われた場合に、トレースデータ２０が３つのコンテキスト（分離後トレースデータ２４）に分離される様子を示す図である。図５に示すように、割り込み（１）に係る処理（図５における命令Ｅ、Ｆ、Ｇ（reti））、割り込み（２）に係る処理（図５における命令Ｇ、Ｈ、Ｉ（reti））、それ以外のメインルーチンに係る処理（図５における命令Ａ、Ｂ、Ｃ、Ｄ、Ｈ…は、それぞれが別のコンテキストとして出力される。また、トレースデータ２０は、実行アドレスに命令コードが対応付けられたデータであり、後述するように、更にロード・ストア命令に関してアクセス先の情報等が付与される。
【００３３】
ソース対応付け・メモリフィルタ部１２は、コンテキスト分離部１０により出力された分離後トレースデータにおける命令コードを、変換用情報２６等を参照してソースコードに変換し、変換データ２８を出力する。
【００３４】
動作判定部１４は、変換データ２８を比較対象のデータと比較し、検証対象ソフトウェア５２が正常に動作したか否かを判定する。
【００３５】
［処理内容］
以下、これらの機能ブロックの処理について、より詳細に説明する。コンテキスト分離部１０は、検証対象コンピュータ５０がＯＳ無しで動作する場合と、ＯＳ有りで動作する場合とで異なる処理を行う。
【００３６】
〔コンテキスト分離部〕
（１）検証対象コンピュータ５０がＯＳ無しで動作する場合
コンテキスト分離部１０が利用するアプリ（＋ＯＳ）情報２２は、例えば、図６に例示される解析対象ソフトウェア情報を含む。解析対象ソフトウェア情報は、メインルーチン、割り込み処理Ａ、割り込み処理Ｂ毎に、分離後トレースデータ２４におけるファイルの出力先、先頭アドレス及び終了アドレス、初期化可能か否かの情報等を含む。解析対象ソフトウェア情報は、例えば、対象ソフトウェアのデバッグ時やコンパイル時に生成された情報に基づき、予め作成されたものである。
【００３７】
図７は、検証対象コンピュータ５０がＯＳ無しで動作する場合に、コンテキスト分離部１０により実行される処理の流れを示すフローチャートの一例である。図７のフローチャートにおいて、「outfile」はファイルの出力先を示し、「inst」は読み込んだ命令情報を示す符号であり、「m_stack」はファイルの出力先をＬＩＦＯ（Last  In,  First  Out）で保存するスタックを示す。
【００３８】
まず、コンテキスト分離部１０は、outfileの初期データを、メインルーチンに対応する「ファイル00」に設定する（Ｓ１００）。
【００３９】
次に、コンテキスト分離部１０は、トレースデータ２０から命令コードを１つ読み込み、instとする（Ｓ１０２）。
【００４０】
次に、コンテキスト分離部１０は、読み込んだ命令コードの実行アドレスが、コンテキスト（ここでは割り込み処理）の先頭アドレスであるか否かを判定する（Ｓ１０４）。
【００４１】
読み込んだ命令コードの実行アドレスが、コンテキストの先頭アドレスである場合、コンテキスト分離部１０は、outfileをm_stackにプッシュし（Ｓ１０６）、開始されたコンテキストの「出力先」をoutfileに設定し（Ｓ１０８）、outfileにinstを出力する（Ｓ１１０）。
【００４２】
読み込んだ命令コードの実行アドレスが、コンテキストの先頭アドレスでない場合、コンテキスト分離部１０は、読み込んだ命令コードの実行アドレスが、コンテキストの終了アドレスであるか否かを判定する（Ｓ１１２）。
【００４３】
読み込んだ命令コードの実行アドレスが、コンテキストの終了アドレスである場合、コンテキスト分離部１０は、outfileにinstを出力し（Ｓ１１４）、m_stackからoutfileをポップする（Ｓ１１６）。
【００４４】
読み込んだ命令コードの実行アドレスが、コンテキストの先頭アドレスでも終了アドレスでもない場合、コンテキスト分離部１０は、outfileにinstを出力する（Ｓ１１８）。
【００４５】
Ｓ１０４〜Ｓ１１８の処理を実行すると、コンテキスト分離部１０は、トレースデータ２０から次の命令コードを１つ読み込み、instとする（Ｓ１２０）。
【００４６】
そして、コンテキスト分離部１０は、instがNULLであるか否かを判定し（Ｓ１２２）、instがNULLでない場合はＳ１０４に戻り、instがNULLである場合は本フローチャートの処理を終了する。
【００４７】
（２）検証対象コンピュータ５０がＯＳ有りで動作する場合
コンテキスト分離部１０が利用するアプリ（＋ＯＳ）情報２２は、例えば、図８に例示される解析対象ソフトウェア情報や図９に例示されるＯＳ情報を含む。
【００４８】
解析対象ソフトウェア情報は、タスクＡ、タスクＢ、タスクＣ、ＯＳ処理毎に、分離後トレースデータ２４におけるファイルの出力先、先頭アドレス及び終了アドレス、初期化可能か否かの情報、タスクＩＤ等を含む。
【００４９】
ＯＳ情報は、タスクＩＤをもつ変数アドレスＡ１、スケジューラ出口のアドレスＡ２、割り込み処理を開始するための割り込みハンドラ毎の先頭アドレスと終了アドレス等を含む。タスクＩＤをもつ変数アドレスＡ１は、ＯＳの一機能であるスケジューラが、起床させるタスクのＩＤを書き込むアドレスである。スケジューラ出口のアドレスＡ２は、スケジューラがタスクの起床を行うときに実行される命令のアドレスである。
【００５０】
解析対象ソフトウェア情報やＯＳ情報は、例えば、対象ソフトウェアのデバッグ時やコンパイル時に生成された情報に基づき、予め作成されたものである。
【００５１】
図１０は、検証対象コンピュータ５０がＯＳ有りで動作する場合に、コンテキスト分離部１０により実行される処理の流れを示すフローチャートの一例である。図１０のフローチャートにおいて、「outfile」はファイルの出力先を示し、「inst」は読み込んだ命令情報を示す符号であり、「m_stack」はファイルの出力先をＬＩＦＯで保存するスタックを示す。
【００５２】
まず、コンテキスト分離部１０は、outfileの初期データをNULLに設定する（Ｓ２００）。
【００５３】
次に、コンテキスト分離部１０は、トレースデータ２０から命令コードを１つ読み込み、instとする（Ｓ２０２）。
【００５４】
次に、コンテキスト分離部１０は、読み込んだ命令コードが、タスクＩＤをもつ変数アドレスＡ１へのストア命令であるか否かを判定する（Ｓ２０４）。読み込んだ命令コードが、タスクＩＤをもつ変数アドレスＡ１へのストア命令である場合、アドレスＡ１への書込データをタスクＩＤに設定する（Ｓ２０６）。
【００５５】
次に、コンテキスト分離部１０は、読み込んだ命令コードの実行アドレスが、スケジューラ出口のアドレスであるか否かを判定する（Ｓ２０８）。
【００５６】
読み込んだ命令コードの実行アドレスが、スケジューラ出口のアドレスである場合、コンテキスト分離部１０は、ラスクＩＤが示すタスクの「出力先」をoutfileに設定し（Ｓ２１０）、outfileにinstを出力する（Ｓ２１２）。
【００５７】
読み込んだ命令コードの実行アドレスが、スケジューラ出口のアドレスでない場合、コンテキスト分離部１０は、読み込んだ命令コードの実行アドレスが、割り込みハンドラの先頭アドレスであるか否かを判定する（Ｓ２１４）。
【００５８】
読み込んだ命令コードの実行アドレスが、割り込みハンドラの先頭アドレスである場合、コンテキスト分離部１０は、outfileをm_stackにプッシュし（Ｓ２１６）、開始されたコンテキストの「出力先」をoutfileに設定し（Ｓ２１８）、outfileにinstを出力する（Ｓ２２０）。
【００５９】
読み込んだ命令コードの実行アドレスが、割り込みハンドラの先頭アドレスでない場合、コンテキスト分離部１０は、読み込んだ命令コードの実行アドレスが、割り込みハンドラの終了アドレスであるか否かを判定する（Ｓ２２２）。
【００６０】
読み込んだ命令コードの実行アドレスが、割り込みハンドラの終了アドレスである場合、コンテキスト分離部１０は、outfileにinstを出力し（Ｓ２２４）、m_stackからoutfileをポップする（Ｓ２２６）。
【００６１】
読み込んだ命令コードの実行アドレスが、割り込みハンドラの先頭アドレスでも終了アドレスでもない場合、コンテキスト分離部１０は、読み込んだ命令コードの実行アドレスが、ＯＳ処理領域内のアドレスであるか否かを判定する（Ｓ２２８）。読み込んだ命令コードの実行アドレスが、ＯＳ処理領域内のアドレスでない場合、コンテキスト分離部１０は、outfileにinstを出力する（Ｓ２３０）。
【００６２】
Ｓ２０４〜Ｓ２３０の処理を実行すると、コンテキスト分離部１０は、トレースデータ２０から次の命令コードを１つ読み込み、instとする（Ｓ２３２）。
【００６３】
そして、コンテキスト分離部１０は、instがNULLであるか否かを判定し（Ｓ２３４）、instがNULLでない場合はＳ２０４に戻り、instがNULLである場合は本フローチャートの処理を終了する。
【００６４】
〔ソース対応付け・メモリフィルタ部〕
図１１は、コンテキスト分離部１０により生成される分離後トレースデータ２４の一部と、ソース対応付け・メモリフィルタ部１２により生成される変換データ２８とを示す図である。図１１に示すように、分離後トレースデータ２４は、コンテキスト毎に抜き出されたトレースデータであり、実行アドレスに命令コードが対応付けられ、更に、ロード・ストア命令に関してはアクセス先のメモリ装置Ｄのアドレスと、対応するレジスタ番号を含む。ソース対応付け・メモリフィルタ部１２が変換データ２８の生成のために参照する変換用情報２６には、図１１に示すソースとオブジェクトの対応表２６Ａ、変数情報２６Ｂ等が含まれる。これらの変換用情報２６は、例えば、対象ソフトウェアのデバッグ時やコンパイル時に生成された情報に基づき、予め作成されたものである。
【００６５】
ソースとオブジェクトの対応表２６Ａにおける「Ａ．ｃ」や「Ｂ．ｃ」はファイル名を示し、「１００」、「１０１」、「３０」等は各ファイルにおける行番号を示す。また、変数情報２６Ｂは、ソースコードにおける変数名と、検証対象コンピュータ５０において変数が格納されるアドレスを対応付けた情報である。
【００６６】
ソース対応付け・メモリフィルタ部１２は、これらの情報を参照することにより、分離後トレースデータ２４を、「ファイル、行番号、ヒープ領域の変数アクセス」の時系列データに変換する。これによって、検証対象コンピュータ５０においてなされた動作が、ソースコードにより表現された動作に変換され、ソフトウェアの検証を容易に行うことを可能とする。なお、変数情報２６Ｂに無いメモリへのアクセスは、スタックへのアクセス等、コンピュータ依存のアクセスであるため、変換データ２８に反映させないようにしている。
【００６７】
図１２は、ソース対応付け・メモリフィルタ部１２により実行される処理の流れを示すフローチャートの一例である。
【００６８】
まず、ソース対応付け・メモリフィルタ部１２は、分離後トレースデータ２４から命令コードを１つ読み込み、instとする（Ｓ３００）。
【００６９】
次に、ソース対応付け・メモリフィルタ部１２は、命令コードの実行アドレスが、ソースとオブジェクトの対応表２６Ａにあるか否かを判定する（Ｓ３０２）。命令コードの実行アドレスが、ソースとオブジェクトの対応表２６Ａにある場合、ソース対応付け・メモリフィルタ部１２は、命令コードの実行アドレスに対応するソースコードと行番号を出力する（Ｓ３０４）。
【００７０】
次に、ソース対応付け・メモリフィルタ部１２は、ロード・ストア命令に関する付加情報があるか否かを判定する（Ｓ３０６）。ロード・ストア命令に関する付加情報がある場合、ソース対応付け・メモリフィルタ部１２は、アクセスタイプ（ロードかストアか）、変数名、レジスタ値を更に出力する（Ｓ３０８）。
【００７１】
次に、ソース対応付け・メモリフィルタ部１２は、分離後トレースデータ２４から命令コードを１つ読み込み、instとし（Ｓ３１０）、instがNULLであるか否かを判定する（Ｓ３１２）、ソース対応付け・メモリフィルタ部１２は、instがNULLでない場合はＳ３０２に戻り、instがNULLである場合は本フローチャートの処理を終了する。
【００７２】
〔動作判定部〕
図１３は、動作判定部１４による処理を概念的に示す図である。図示するように、動作判定部１４は、検証対象コンピュータ５０において検証対象ソフトウェア５２が実行されることにより取得されたトレースデータから生成された変換データ２８を、比較対象コンピュータにおいて同じソフトウェアが実行されることにより取得されたトレースデータから生成された比較データと、ソースコード毎に比較することにより、検証対象コンピュータ５０において検証対象ソフトウェア５２が正常に動作しているか否かを判定する。
【００７３】
ここで、比較データは、正常が動作していることが判明しているソフトウェア環境で、検証対象データ５２と同じソフトウェアが動作したときに取得されたトレースデータから生成されたデータである。
【００７４】
図１４は、動作判定部１４による処理の流れを示すフローチャートの一例である。
【００７５】
まず、動作判定部１４は、変換データ２８と比較データの（例えばユーザによる）指定を受け付ける（Ｓ４００）。
【００７６】
次に、動作判定部１４は、変換データ２８と比較データからソースコードを１つずつ取得する（Ｓ４０２）。
【００７７】
次に、動作判定部１４は、ファイル名及び行番号が一致しているか否かを判定する（Ｓ４０４）。
【００７８】
ファイル名及び行番号が一致している場合、動作判定部１４は、ロード・ストア命令に関する付加情報があるか否かを判定する（Ｓ４０６）。
【００７９】
ロード・ストア命令に関する付加情報がある場合、動作判定部１４は、タイプ、変数名、アクセス先のアドレス、及びレジスタが一致するか否かを判定する（Ｓ４０８）。
【００８０】
タイプ、変数名、アクセス先のアドレス、及びレジスタが一致する場合、動作判定部１４は、全てのソースコードについてＳ４０４〜Ｓ４０８の比較を行ったか否かを判定する（４１０）。全てのソースコードについてＳ４０４〜Ｓ４０８の比較を行っていない場合、動作判定部１４は、Ｓ４０２に戻り、次のソースコードを取得する。
【００８１】
全てのソースコードについてＳ４０４〜Ｓ４０８の比較を行った場合、動作判定部１４は、検証対象ソフトウェア５２が正常に動作したことを出力する（Ｓ４１２）。
【００８２】
一方、Ｓ４０４又はＳ４０８において否定的な判定を得た場合、動作判定部１４は、エラー出力、すなわち、検証対象ソフトウェア５２が正常に動作しなかったことを出力する（Ｓ４１４）。
【００８３】
［適用例］
図１５は、あるコンピュータ上で動作しているソフトウェアを、他のコンピュータに移植した際に、ソフトウェアの検証が実行される様子を示す図である。図１５に示すように、現在までソフトウェアを実行していたコンピュータＡと、これからソフトウェアを移植するコンピュータＢのそれぞれからトレースデータ２０を取得し、各トレースデータ２０に対してコンテキスト分離部１０及びソース対応付け・メモリフィルタ部１２が処理を行って生成される変換データ同士を比較することにより、コンピュータＢで当該ソフトウェアが正常に動作するか否かを事前に検証することができる。
【００８４】
図１６は、複数のコンピュータ上で動作しているソフトウェアを、一のコンピュータに統合して動作させる際に、ソフトウェアの検証が実行される様子を示す図である。図１６に示すように、現在までソフトウェアを実行していたコンピュータＣ、Ｄと、これからソフトウェアを移植するコンピュータＥのそれぞれからトレースデータ２０を取得し、各トレースデータ２０に対してコンテキスト分離部１０及びソース対応付け・メモリフィルタ部１２が処理を行って生成される変換データ同士を比較することにより、コンピュータＥで各ソフトウェアが正常に動作するか否かを事前に検証することができる。
【００８５】
いずれの場合も、ソースコードレベルで比較を行うことができるため、動作環境が異なるにも関わらず、実行されるタイミングやアクセス先のアドレス、変数等が正常であるか否かを検証することができる。また、スタック操作等のソースコード上の記述に無いコンピュータ依存の動作は除外されるため、不要なエラー出力がなされることを抑制することができる。また、図１６に示す機能統合時の検証においては、統合時に新たに追加されたコンテキストや比較する必要が無いコンテキスト（ＯＳ処理等）を比較対象としないようにすることができるため、過不足無い検証を行うことができる。
【００８６】
［まとめ］
以上説明したソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラムの実施例によれば、ソフトウェアの検証を、より適切に行うことができる。
【００８７】
以上、本発明を実施するための形態について実施例を用いて説明したが、本発明はこうした実施例に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
【００８８】
例えば、上記実施例では、コンテキストが変更される場合の例として割り込み処理の発生やタスクの切り替えを挙げたが、これらの他（或いはこれらに代えて）、サブルーチンによる分岐等を含んでもよい。
【符号の説明】
【００８９】
１    ソフトウェア実行状況検証装置
１０  コンテキスト分離部
１２  ソース対応付け・メモリフィルタ部
１４  動作判定部
５０  検証対象コンピュータ
５２  検証対象ソフトウェア
６０  インサーキットエミュレータ
【図１】
2014021512.tif 000003
【図２】
2014021512.tif 000004
【図３】
2014021512.tif 000005
【図４】
2014021512.tif 000006
【図５】
2014021512.tif 000007
【図６】
2014021512.tif 000008
【図７】
2014021512.tif 000009
【図８】
2014021512.tif 000010
【図９】
2014021512.tif 000011
【図１０】
2014021512.tif 000012
【図１１】
2014021512.tif 000013
【図１２】
2014021512.tif 000014
【図１３】
2014021512.tif 000015
【図１４】
2014021512.tif 000016
【図１５】
2014021512.tif 000017
【図１６】
2014021512.tif 000018