JP2014021512A - ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム - Google Patents

ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム Download PDF

Info

Publication number
JP2014021512A
JP2014021512A JP2012156218A JP2012156218A JP2014021512A JP 2014021512 A JP2014021512 A JP 2014021512A JP 2012156218 A JP2012156218 A JP 2012156218A JP 2012156218 A JP2012156218 A JP 2012156218A JP 2014021512 A JP2014021512 A JP 2014021512A
Authority
JP
Japan
Prior art keywords
software
address
execution
status verification
branch
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2012156218A
Other languages
English (en)
Other versions
JP5872975B2 (ja
Inventor
Masafumi Okubo
雅史 大久保
Hiroteru Akaboshi
博輝 赤星
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toyota Motor Corp
GAIA SYSTEM SOLUTIONS Inc
Original Assignee
Toyota Motor Corp
GAIA SYSTEM SOLUTIONS Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toyota Motor Corp, GAIA SYSTEM SOLUTIONS Inc filed Critical Toyota Motor Corp
Priority to JP2012156218A priority Critical patent/JP5872975B2/ja
Publication of JP2014021512A publication Critical patent/JP2014021512A/ja
Application granted granted Critical
Publication of JP5872975B2 publication Critical patent/JP5872975B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】ソフトウェアの検証を、より適切に行うことが可能なソフトウェア実行状況検証装置等を提供すること。
【解決手段】ソフトウェアが実行された際の実行アドレスの変化を記述したトレースデータにおいて特定の分岐が行われた箇所を判別し、該特定の分岐に係る分岐元の実行アドレスと分岐先の実行アドレスとを分離して出力する分離部と、前記分離部により出力された実行アドレスを、ソースコードに変換する変換部と、を備えるソフトウェア実行状況検証装置。
【選択図】図4

Description

本発明は、ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラムに関する。
従来、ソフトウェアスタック上で動作する業務アプリケーションで発生した障害の原因を解析することを支援する障害原因解析支援装置が知られている(例えば、特許文献1参照)。この障害原因解析支援装置は、業務アプリケーションが出力するトレース情報に基づいて、業務アプリケーションを起動したリクエストを特定して抽出したり、業務アプリケーションを動作させていたソフトウェアのコンポーネントを抽出したりする。
一方、近年では、複数のコンピュータが有していた機能を統合して1つのコンピュータに実行させるという動きが、特に車載コンピュータの分野において散見される。このようにソフトウェアの動作環境が変化する場合、ソフトウェアが正常に動作するかどうかを検証する必要性が生じる。
特開2009−205484号公報
ソフトウェアの検証は、一般的に、コンピュータに入力を与え、出力を監視することにより行われる。しかしながら、この手法では、内部的なバグやエラーが存在するにも拘わらず、出力が正しいものであった場合に、ソフトウェアが正常に動作するかどうかを正確に検証することができない。これを解消するために、より多くの入力を与えて出力を監視しようとすると、検証に多くの時間を要することになってしまう。
これに対し、コンピュータのトレース機能や、コンピュータを模擬したエミュレータのトレース機能を用いることで、内部動作をトレースデータとして確認することは可能であるが、ソフトウェアの動作環境が変化する場合には、下記の理由によりソフトウェアが正常に動作するかどうかを正確に検証することができない場合が生じる。
まず、コンピュータのアーキテクチャやOS(オペレーティングシステム)が異なる場合、命令やスタック使用の方法が異なるため、ソースコードに対して生成される命令列が異なるものとなる。また、OSを使用した場合と使用しない場合で命令列は異なるものとなる。このため、命令列を単純に比較することによりソフトウェアの検証を行うのは困難である。
また、近年のコンピュータでは、複数の処理が実行されており、その切替タイミングを予め予測できない場合がある。例えば割り込みによる処理の開始タイミングは、ソフトウェアに記述されているものでは無いため、検証対象のソフトウェアの動作と比較対象のソフトウェアの動作を合致させるのは困難である。この他、動作周波数、パイプライン構造、メモリアクセス速度、バスの混雑度等の相違も、処理の切替タイミングを左右してソフトウェアの検証を困難なものとする。
また、仮に検証対象のソフトウェアと比較対象のソフトウェアが動作するコンピュータのハードウェアが同じであっても、メモリにおける命令コードの格納領域やデータ領域の配置が異なる場合、トレースデータに含まれる実行アドレスの単純比較によりソフトウェアの検証を行うのが困難になる。
一つの側面によれば、ソフトウェアの検証を、より適切に行うことが可能なソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラムを提供することを目的とする。
上記目的を達成するための本発明の一態様は、
ソフトウェアが実行された際の実行アドレスの変化を記述したトレースデータにおいて特定の分岐が行われた箇所を判別し、該特定の分岐に係る分岐元の実行アドレスと分岐先の実行アドレスとを分離して出力する分離部と、
前記分離部により出力された実行アドレスを、ソースコードに変換する変換部と、
を備えるソフトウェア実行状況検証装置である。
この本発明の一態様によれば、ソフトウェアの検証を、より適切に行うことができる。
本発明の一態様において、
前記特定の分岐は、例えば、割り込み発生による分岐を含む。
また、本発明の一態様において、
前記分離部は、前記特定の分岐が行われた分岐先の先頭アドレスと終了アドレスを記述したデータを参照し、前記特定の分岐が行われた箇所を判別するものとしてもよい。
また、本発明の一態様において、
前記変換部により変換されたソースコードを、比較データと比較することにより、前記ソフトウェアが正常に動作したか否かを判定する判定部を備えるものとしてもよい。
本発明の他の態様は、
コンピュータが、
ソフトウェアが実行された際の実行アドレスの変化を記述したトレースデータにおいて特定の分岐が行われた箇所を判別し、該特定の分岐に係る分岐元の実行アドレスと分岐先の実行アドレスとを分離して出力し、
前記出力された実行アドレスを、ソースコードに変換する、
ソフトウェア実行状況検証方法である。
本発明の他の態様は、
コンピュータに、
ソフトウェアが実行された際の実行アドレスの変化を記述したトレースデータにおいて特定の分岐が行われた箇所を判別させ、該特定の分岐に係る分岐元の実行アドレスと分岐先の実行アドレスとを分離して出力させ、
前記出力された実行アドレスを、ソースコードに変換させる、
ソフトウェア実行状況検証プログラムである。
一実施態様によれば、ソフトウェアの検証を、より適切に行うことが可能なソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラムを提供することを提供することができる。
一実施例に係るソフトウェア実行状況検証装置1が検証対象となるソフトウェアが実行された際の実行アドレスの変化等が記述されたトレースデータを取得する場面を簡単に示す図である。 検証対象コンピュータ50とソフトウェア実行状況検証装置1は同体のコンピュータである場合の機能構成例である。 一実施例に係るソフトウェア実行状況検証装置1のハードウェア構成例である。 一実施例に係るソフトウェア実行状況検証装置1の機能構成例である。 2回の割り込み処理が重なる時期に行われた場合に、トレースデータ20が3つのコンテキストに分離される様子を示す図である。 検証対象コンピュータ50がOS無しで動作する場合の解析対象ソフトウェア情報の一例である。 検証対象コンピュータ50がOS無しで動作する場合に、コンテキスト分離部10により実行される処理の流れを示すフローチャートの一例である。 検証対象コンピュータ50がOS有りで動作する場合の解析対象ソフトウェア情報の一例である。 検証対象コンピュータ50がOS有りで動作する場合のOS情報の一例である。 検証対象コンピュータ50がOS有りで動作する場合に、コンテキスト分離部10により実行される処理の流れを示すフローチャートの一例である。 コンテキスト分離部10により生成される分離後トレースデータ24の一部と、ソース対応付け・メモリフィルタ部12により生成される変換データ28とを示す図である。 ソース対応付け・メモリフィルタ部12により実行される処理の流れを示すフローチャートの一例である。 動作判定部14による処理を概念的に示す図である。 動作判定部14による処理の流れを示すフローチャートの一例である。 あるコンピュータ上で動作しているソフトウェアを、他のコンピュータに移植した際に、ソフトウェアの検証が実行される様子を示す図である。 複数のコンピュータ上で動作しているソフトウェアを、一のコンピュータに統合して動作させる際に、ソフトウェアの検証が実行される様子を示す図である。
以下、本発明を実施するための形態について、添付図面を参照しながら実施例を挙げて説明する。
以下、図面を参照し、ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラムの実施例について説明する。
[構成]
図1は、一実施例に係るソフトウェア実行状況検証装置1が検証対象となるソフトウェアが実行された際の実行アドレスの変化等が記述されたトレースデータを取得する場面を簡単に示す図である。
検証対象コンピュータ50は、パーソナルコンピュータ、或いは、自動車等の移動体や携帯電話、プラント、工作機械、各種電子機器等を制御する組み込みコンピュータである。検証対象ソフトウェア52は、検証対象コンピュータ50上で動作するソフトウェアであり、その種類について特段の制約は存在しない。検証対象コンピュータ50は、CPU(Central Processing Unit)やプログラムメモリ等を有し、プログラムカウンタの示す値がバスを介してプログラムメモリに出力され、プログラムメモリからCPUに送信された命令コード(検証対象ソフトウェア52に含まれる)をCPUが実行する。
インサーキットエミュレータ(In-Circuit Emulatorは登録商標)60は、ソフトウェアのデバッグとハードウェアの動作確認を行うことができるデバッガである。インサーキットエミュレータ60は、バスを流れるプログラムカウンタ値を監視することにより、対象コンピュータにおいて実行された命令コードのアドレス(以下、実行アドレスと称する)を実行順に取得する機能や、特定の命令コードが実行される度に指定されたメモリの内容を出力する機能等を有する。インサーキットエミュレータ60は、このような機能により取得されたトレースデータは、ソフトウェア実行状況検証装置1に提供される。
なお、インサーキットエミュレータ60は、独立したハードウェア上で動作するものであってもよいし、ソフトウェア実行状況検証装置1と検証対象コンピュータ50のいずれかで動作するものであってもよい。
また、検証対象コンピュータ50とソフトウェア実行状況検証装置1は同体のコンピュータであってもよい。図2は、検証対象コンピュータ50とソフトウェア実行状況検証装置1は同体のコンピュータである場合の機能構成例である。図2に示すコンピュータ70上では、対象ソフトウェア72、インサーキットエミュレータ部74、ソフトウェア実行状況検証部76等のソフトウェアが動作する。
図3は、一実施例に係るソフトウェア実行状況検証装置1のハードウェア構成例である。ソフトウェア実行状況検証装置1は、例えば、CPUAと、ドライブ装置Bと、メモリ装置Dと、記憶装置Eと、入力装置Fと、表示装置Gと、インターフェース装置Hとを備える。これらの構成要素は、バスやシリアル回線等を介して接続されている。
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等に格納されていてもよい。
メモリ装置Dは、例えば、RAM(Random Access Memory)であり、記憶装置Eは、例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive)である。入力装置Fは、例えば、キーボードやマウス、タッチパネル、タッチパッド、マイク等である。表示装置Gは、例えば、LCD(Liquid Crystal Display)である。インターフェース装置Hは、種々のネットワークにアクセスし、検証対象コンピュータ50等の他のコンピュータとの間で通信を行う。
図4は、一実施例に係るソフトウェア実行状況検証装置1の機能構成例である。ソフトウェア実行状況検証装置1は、CPUAがプログラムを実行することにより機能する機能部として、コンテキスト分離部10と、ソース対応付け・メモリフィルタ部12と、動作判定部14とを備える。なお、これらの機能部は、明確に分離したプログラムによって実現される必要はなく、サブルーチンや関数として他のプログラムによって呼び出されるものであってもよい。また、機能部の一部が、LSI(Large Scale Integrated circuit)、IC(Integrated Circuit)やFPGA(Field Programmable Gate Array)等のハードウェア手段であっても構わない。
また、ソフトウェア実行状況検証装置1は、メモリ装置D等に、分離後トレースデータ24、変換データ28等を生成して処理に使用する。
コンテキスト分離部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は、実行アドレスに命令コードが対応付けられたデータであり、後述するように、更にロード・ストア命令に関してアクセス先の情報等が付与される。
ソース対応付け・メモリフィルタ部12は、コンテキスト分離部10により出力された分離後トレースデータにおける命令コードを、変換用情報26等を参照してソースコードに変換し、変換データ28を出力する。
動作判定部14は、変換データ28を比較対象のデータと比較し、検証対象ソフトウェア52が正常に動作したか否かを判定する。
[処理内容]
以下、これらの機能ブロックの処理について、より詳細に説明する。コンテキスト分離部10は、検証対象コンピュータ50がOS無しで動作する場合と、OS有りで動作する場合とで異なる処理を行う。
〔コンテキスト分離部〕
(1)検証対象コンピュータ50がOS無しで動作する場合
コンテキスト分離部10が利用するアプリ(+OS)情報22は、例えば、図6に例示される解析対象ソフトウェア情報を含む。解析対象ソフトウェア情報は、メインルーチン、割り込み処理A、割り込み処理B毎に、分離後トレースデータ24におけるファイルの出力先、先頭アドレス及び終了アドレス、初期化可能か否かの情報等を含む。解析対象ソフトウェア情報は、例えば、対象ソフトウェアのデバッグ時やコンパイル時に生成された情報に基づき、予め作成されたものである。
図7は、検証対象コンピュータ50がOS無しで動作する場合に、コンテキスト分離部10により実行される処理の流れを示すフローチャートの一例である。図7のフローチャートにおいて、「outfile」はファイルの出力先を示し、「inst」は読み込んだ命令情報を示す符号であり、「m_stack」はファイルの出力先をLIFO(Last In, First Out)で保存するスタックを示す。
まず、コンテキスト分離部10は、outfileの初期データを、メインルーチンに対応する「ファイル00」に設定する(S100)。
次に、コンテキスト分離部10は、トレースデータ20から命令コードを1つ読み込み、instとする(S102)。
次に、コンテキスト分離部10は、読み込んだ命令コードの実行アドレスが、コンテキスト(ここでは割り込み処理)の先頭アドレスであるか否かを判定する(S104)。
読み込んだ命令コードの実行アドレスが、コンテキストの先頭アドレスである場合、コンテキスト分離部10は、outfileをm_stackにプッシュし(S106)、開始されたコンテキストの「出力先」をoutfileに設定し(S108)、outfileにinstを出力する(S110)。
読み込んだ命令コードの実行アドレスが、コンテキストの先頭アドレスでない場合、コンテキスト分離部10は、読み込んだ命令コードの実行アドレスが、コンテキストの終了アドレスであるか否かを判定する(S112)。
読み込んだ命令コードの実行アドレスが、コンテキストの終了アドレスである場合、コンテキスト分離部10は、outfileにinstを出力し(S114)、m_stackからoutfileをポップする(S116)。
読み込んだ命令コードの実行アドレスが、コンテキストの先頭アドレスでも終了アドレスでもない場合、コンテキスト分離部10は、outfileにinstを出力する(S118)。
S104〜S118の処理を実行すると、コンテキスト分離部10は、トレースデータ20から次の命令コードを1つ読み込み、instとする(S120)。
そして、コンテキスト分離部10は、instがNULLであるか否かを判定し(S122)、instがNULLでない場合はS104に戻り、instがNULLである場合は本フローチャートの処理を終了する。
(2)検証対象コンピュータ50がOS有りで動作する場合
コンテキスト分離部10が利用するアプリ(+OS)情報22は、例えば、図8に例示される解析対象ソフトウェア情報や図9に例示されるOS情報を含む。
解析対象ソフトウェア情報は、タスクA、タスクB、タスクC、OS処理毎に、分離後トレースデータ24におけるファイルの出力先、先頭アドレス及び終了アドレス、初期化可能か否かの情報、タスクID等を含む。
OS情報は、タスクIDをもつ変数アドレスA1、スケジューラ出口のアドレスA2、割り込み処理を開始するための割り込みハンドラ毎の先頭アドレスと終了アドレス等を含む。タスクIDをもつ変数アドレスA1は、OSの一機能であるスケジューラが、起床させるタスクのIDを書き込むアドレスである。スケジューラ出口のアドレスA2は、スケジューラがタスクの起床を行うときに実行される命令のアドレスである。
解析対象ソフトウェア情報やOS情報は、例えば、対象ソフトウェアのデバッグ時やコンパイル時に生成された情報に基づき、予め作成されたものである。
図10は、検証対象コンピュータ50がOS有りで動作する場合に、コンテキスト分離部10により実行される処理の流れを示すフローチャートの一例である。図10のフローチャートにおいて、「outfile」はファイルの出力先を示し、「inst」は読み込んだ命令情報を示す符号であり、「m_stack」はファイルの出力先をLIFOで保存するスタックを示す。
まず、コンテキスト分離部10は、outfileの初期データをNULLに設定する(S200)。
次に、コンテキスト分離部10は、トレースデータ20から命令コードを1つ読み込み、instとする(S202)。
次に、コンテキスト分離部10は、読み込んだ命令コードが、タスクIDをもつ変数アドレスA1へのストア命令であるか否かを判定する(S204)。読み込んだ命令コードが、タスクIDをもつ変数アドレスA1へのストア命令である場合、アドレスA1への書込データをタスクIDに設定する(S206)。
次に、コンテキスト分離部10は、読み込んだ命令コードの実行アドレスが、スケジューラ出口のアドレスであるか否かを判定する(S208)。
読み込んだ命令コードの実行アドレスが、スケジューラ出口のアドレスである場合、コンテキスト分離部10は、ラスクIDが示すタスクの「出力先」をoutfileに設定し(S210)、outfileにinstを出力する(S212)。
読み込んだ命令コードの実行アドレスが、スケジューラ出口のアドレスでない場合、コンテキスト分離部10は、読み込んだ命令コードの実行アドレスが、割り込みハンドラの先頭アドレスであるか否かを判定する(S214)。
読み込んだ命令コードの実行アドレスが、割り込みハンドラの先頭アドレスである場合、コンテキスト分離部10は、outfileをm_stackにプッシュし(S216)、開始されたコンテキストの「出力先」をoutfileに設定し(S218)、outfileにinstを出力する(S220)。
読み込んだ命令コードの実行アドレスが、割り込みハンドラの先頭アドレスでない場合、コンテキスト分離部10は、読み込んだ命令コードの実行アドレスが、割り込みハンドラの終了アドレスであるか否かを判定する(S222)。
読み込んだ命令コードの実行アドレスが、割り込みハンドラの終了アドレスである場合、コンテキスト分離部10は、outfileにinstを出力し(S224)、m_stackからoutfileをポップする(S226)。
読み込んだ命令コードの実行アドレスが、割り込みハンドラの先頭アドレスでも終了アドレスでもない場合、コンテキスト分離部10は、読み込んだ命令コードの実行アドレスが、OS処理領域内のアドレスであるか否かを判定する(S228)。読み込んだ命令コードの実行アドレスが、OS処理領域内のアドレスでない場合、コンテキスト分離部10は、outfileにinstを出力する(S230)。
S204〜S230の処理を実行すると、コンテキスト分離部10は、トレースデータ20から次の命令コードを1つ読み込み、instとする(S232)。
そして、コンテキスト分離部10は、instがNULLであるか否かを判定し(S234)、instがNULLでない場合はS204に戻り、instがNULLである場合は本フローチャートの処理を終了する。
〔ソース対応付け・メモリフィルタ部〕
図11は、コンテキスト分離部10により生成される分離後トレースデータ24の一部と、ソース対応付け・メモリフィルタ部12により生成される変換データ28とを示す図である。図11に示すように、分離後トレースデータ24は、コンテキスト毎に抜き出されたトレースデータであり、実行アドレスに命令コードが対応付けられ、更に、ロード・ストア命令に関してはアクセス先のメモリ装置Dのアドレスと、対応するレジスタ番号を含む。ソース対応付け・メモリフィルタ部12が変換データ28の生成のために参照する変換用情報26には、図11に示すソースとオブジェクトの対応表26A、変数情報26B等が含まれる。これらの変換用情報26は、例えば、対象ソフトウェアのデバッグ時やコンパイル時に生成された情報に基づき、予め作成されたものである。
ソースとオブジェクトの対応表26Aにおける「A.c」や「B.c」はファイル名を示し、「100」、「101」、「30」等は各ファイルにおける行番号を示す。また、変数情報26Bは、ソースコードにおける変数名と、検証対象コンピュータ50において変数が格納されるアドレスを対応付けた情報である。
ソース対応付け・メモリフィルタ部12は、これらの情報を参照することにより、分離後トレースデータ24を、「ファイル、行番号、ヒープ領域の変数アクセス」の時系列データに変換する。これによって、検証対象コンピュータ50においてなされた動作が、ソースコードにより表現された動作に変換され、ソフトウェアの検証を容易に行うことを可能とする。なお、変数情報26Bに無いメモリへのアクセスは、スタックへのアクセス等、コンピュータ依存のアクセスであるため、変換データ28に反映させないようにしている。
図12は、ソース対応付け・メモリフィルタ部12により実行される処理の流れを示すフローチャートの一例である。
まず、ソース対応付け・メモリフィルタ部12は、分離後トレースデータ24から命令コードを1つ読み込み、instとする(S300)。
次に、ソース対応付け・メモリフィルタ部12は、命令コードの実行アドレスが、ソースとオブジェクトの対応表26Aにあるか否かを判定する(S302)。命令コードの実行アドレスが、ソースとオブジェクトの対応表26Aにある場合、ソース対応付け・メモリフィルタ部12は、命令コードの実行アドレスに対応するソースコードと行番号を出力する(S304)。
次に、ソース対応付け・メモリフィルタ部12は、ロード・ストア命令に関する付加情報があるか否かを判定する(S306)。ロード・ストア命令に関する付加情報がある場合、ソース対応付け・メモリフィルタ部12は、アクセスタイプ(ロードかストアか)、変数名、レジスタ値を更に出力する(S308)。
次に、ソース対応付け・メモリフィルタ部12は、分離後トレースデータ24から命令コードを1つ読み込み、instとし(S310)、instがNULLであるか否かを判定する(S312)、ソース対応付け・メモリフィルタ部12は、instがNULLでない場合はS302に戻り、instがNULLである場合は本フローチャートの処理を終了する。
〔動作判定部〕
図13は、動作判定部14による処理を概念的に示す図である。図示するように、動作判定部14は、検証対象コンピュータ50において検証対象ソフトウェア52が実行されることにより取得されたトレースデータから生成された変換データ28を、比較対象コンピュータにおいて同じソフトウェアが実行されることにより取得されたトレースデータから生成された比較データと、ソースコード毎に比較することにより、検証対象コンピュータ50において検証対象ソフトウェア52が正常に動作しているか否かを判定する。
ここで、比較データは、正常が動作していることが判明しているソフトウェア環境で、検証対象データ52と同じソフトウェアが動作したときに取得されたトレースデータから生成されたデータである。
図14は、動作判定部14による処理の流れを示すフローチャートの一例である。
まず、動作判定部14は、変換データ28と比較データの(例えばユーザによる)指定を受け付ける(S400)。
次に、動作判定部14は、変換データ28と比較データからソースコードを1つずつ取得する(S402)。
次に、動作判定部14は、ファイル名及び行番号が一致しているか否かを判定する(S404)。
ファイル名及び行番号が一致している場合、動作判定部14は、ロード・ストア命令に関する付加情報があるか否かを判定する(S406)。
ロード・ストア命令に関する付加情報がある場合、動作判定部14は、タイプ、変数名、アクセス先のアドレス、及びレジスタが一致するか否かを判定する(S408)。
タイプ、変数名、アクセス先のアドレス、及びレジスタが一致する場合、動作判定部14は、全てのソースコードについてS404〜S408の比較を行ったか否かを判定する(410)。全てのソースコードについてS404〜S408の比較を行っていない場合、動作判定部14は、S402に戻り、次のソースコードを取得する。
全てのソースコードについてS404〜S408の比較を行った場合、動作判定部14は、検証対象ソフトウェア52が正常に動作したことを出力する(S412)。
一方、S404又はS408において否定的な判定を得た場合、動作判定部14は、エラー出力、すなわち、検証対象ソフトウェア52が正常に動作しなかったことを出力する(S414)。
[適用例]
図15は、あるコンピュータ上で動作しているソフトウェアを、他のコンピュータに移植した際に、ソフトウェアの検証が実行される様子を示す図である。図15に示すように、現在までソフトウェアを実行していたコンピュータAと、これからソフトウェアを移植するコンピュータBのそれぞれからトレースデータ20を取得し、各トレースデータ20に対してコンテキスト分離部10及びソース対応付け・メモリフィルタ部12が処理を行って生成される変換データ同士を比較することにより、コンピュータBで当該ソフトウェアが正常に動作するか否かを事前に検証することができる。
図16は、複数のコンピュータ上で動作しているソフトウェアを、一のコンピュータに統合して動作させる際に、ソフトウェアの検証が実行される様子を示す図である。図16に示すように、現在までソフトウェアを実行していたコンピュータC、Dと、これからソフトウェアを移植するコンピュータEのそれぞれからトレースデータ20を取得し、各トレースデータ20に対してコンテキスト分離部10及びソース対応付け・メモリフィルタ部12が処理を行って生成される変換データ同士を比較することにより、コンピュータEで各ソフトウェアが正常に動作するか否かを事前に検証することができる。
いずれの場合も、ソースコードレベルで比較を行うことができるため、動作環境が異なるにも関わらず、実行されるタイミングやアクセス先のアドレス、変数等が正常であるか否かを検証することができる。また、スタック操作等のソースコード上の記述に無いコンピュータ依存の動作は除外されるため、不要なエラー出力がなされることを抑制することができる。また、図16に示す機能統合時の検証においては、統合時に新たに追加されたコンテキストや比較する必要が無いコンテキスト(OS処理等)を比較対象としないようにすることができるため、過不足無い検証を行うことができる。
[まとめ]
以上説明したソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラムの実施例によれば、ソフトウェアの検証を、より適切に行うことができる。
以上、本発明を実施するための形態について実施例を用いて説明したが、本発明はこうした実施例に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
例えば、上記実施例では、コンテキストが変更される場合の例として割り込み処理の発生やタスクの切り替えを挙げたが、これらの他(或いはこれらに代えて)、サブルーチンによる分岐等を含んでもよい。
1 ソフトウェア実行状況検証装置
10 コンテキスト分離部
12 ソース対応付け・メモリフィルタ部
14 動作判定部
50 検証対象コンピュータ
52 検証対象ソフトウェア
60 インサーキットエミュレータ

Claims (6)

  1. ソフトウェアが実行された際の実行アドレスの変化を記述したトレースデータにおいて特定の分岐が行われた箇所を判別し、該特定の分岐に係る分岐元の実行アドレスと分岐先の実行アドレスとを分離して出力する分離部と、
    前記分離部により出力された実行アドレスを、ソースコードに変換する変換部と、
    を備えるソフトウェア実行状況検証装置。
  2. 請求項1記載のソフトウェア実行状況検証装置であって、
    前記特定の分岐は、割り込み発生による分岐を含む、
    ソフトウェア実行状況検証装置。
  3. 請求項1又は2記載のソフトウェア実行状況検証装置であって、
    前記分離部は、前記特定の分岐が行われた分岐先の先頭アドレスと終了アドレスを記述したデータを参照し、前記特定の分岐が行われた箇所を判別する、
    ソフトウェア実行状況検証装置。
  4. 請求項1ないし3のいずれか1項記載のソフトウェア実行状況検証装置であって、
    前記変換部により変換されたソースコードを、比較データと比較することにより、前記ソフトウェアが正常に動作したか否かを判定する判定部を備える、
    ソフトウェア実行状況検証装置。
  5. コンピュータが、
    ソフトウェアが実行された際の実行アドレスの変化を記述したトレースデータにおいて特定の分岐が行われた箇所を判別し、該特定の分岐に係る分岐元の実行アドレスと分岐先の実行アドレスとを分離して出力し、
    前記出力された実行アドレスを、ソースコードに変換する、
    ソフトウェア実行状況検証方法。
  6. コンピュータに、
    ソフトウェアが実行された際の実行アドレスの変化を記述したトレースデータにおいて特定の分岐が行われた箇所を判別させ、該特定の分岐に係る分岐元の実行アドレスと分岐先の実行アドレスとを分離して出力させ、
    前記出力された実行アドレスを、ソースコードに変換させる、
    ソフトウェア実行状況検証プログラム。
JP2012156218A 2012-07-12 2012-07-12 ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム Active JP5872975B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012156218A JP5872975B2 (ja) 2012-07-12 2012-07-12 ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012156218A JP5872975B2 (ja) 2012-07-12 2012-07-12 ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム

Publications (2)

Publication Number Publication Date
JP2014021512A true JP2014021512A (ja) 2014-02-03
JP5872975B2 JP5872975B2 (ja) 2016-03-01

Family

ID=50196371

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012156218A Active JP5872975B2 (ja) 2012-07-12 2012-07-12 ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム

Country Status (1)

Country Link
JP (1) JP5872975B2 (ja)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0916432A (ja) * 1995-06-27 1997-01-17 Nec Commun Syst Ltd トレースデータ解析システム
JP2002342113A (ja) * 2001-05-15 2002-11-29 Hitachi Ltd プログラム実行状況表示方法及びその実施装置並びにその処理プログラム

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0916432A (ja) * 1995-06-27 1997-01-17 Nec Commun Syst Ltd トレースデータ解析システム
JP2002342113A (ja) * 2001-05-15 2002-11-29 Hitachi Ltd プログラム実行状況表示方法及びその実施装置並びにその処理プログラム

Also Published As

Publication number Publication date
JP5872975B2 (ja) 2016-03-01

Similar Documents

Publication Publication Date Title
US9519495B2 (en) Timed API rules for runtime verification
EP3120247B1 (en) Framework for user-mode crash reporting
Fasano et al. Sok: Enabling security analyses of embedded systems via rehosting
US20140372985A1 (en) API Rules Verification Platform
US9977758B1 (en) Device profiling for tuning OpenCL applications on programmable integrated circuits
JP2016207231A (ja) 命令エミュレーションプロセッサ、方法、およびシステム
US9367427B2 (en) Embedding and executing trace functions in code to gather trace data
US20130159977A1 (en) Open kernel trace aggregation
Ma et al. Debugging in the brave new world of reconfigurable hardware
CN114356683A (zh) 覆盖率融合方法、装置、计算机设备及存储介质
Maus et al. Vx86: x86 assembler simulated in C powered by automated theorem proving
CN104346275A (zh) 内存测试系统及方法
Lin et al. Virtual device farms for mobile app testing at scale: A pursuit for fidelity, efficiency, and accessibility
JP5872975B2 (ja) ソフトウェア実行状況検証装置、ソフトウェア実行状況検証方法、及びソフトウェア実行状況検証プログラム
Srinivasan et al. Towards rehosting embedded applications as linux applications
US20160077950A1 (en) Methods, circuits, apparatus, systems and associated software modules for evaluating code behavior
JP2019179284A (ja) シミュレーションシステム、及びシミュレーションプログラム
US20100077383A1 (en) Simulation method and storage medium for storing program
US11182316B2 (en) Program interrupt code conversion
JP2013161219A (ja) コード生成装置、及びコード生成プログラム
JP5545133B2 (ja) 静的解析処理システム、方法、およびプログラム
CN112559336A (zh) 自适应调试异构计算芯片的方法、装置、系统及主板芯片
JP5757167B2 (ja) 判定作業支援システム、判定作業支援方法、及びプログラム
US20150106602A1 (en) Randomly branching using hardware watchpoints
US20240143485A1 (en) Presubmit Test Run Minimization Analysis Using Runtime Isolation Guarantees

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20141017

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150508

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150526

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150724

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20151222

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160114

R151 Written notification of patent or utility model registration

Ref document number: 5872975

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250