(57)【特許請求の範囲】
【請求項１】
イベント情報記録プログラムとイベントパターン解析プログラムとが、コンピュータに、記憶部のイベントパターンリストと発生頻度管理テーブルと複数のバッファとを用いて、解析対象プログラムの実行動作を解析させるためのトレースデータ解析方法であって、
前記イベント情報記録プログラムが、前記コンピュータに、前記複数のバッファのうちから選択したバッファに、前記解析対象プログラムの実行時のトレースデータをイベント情報として逐次記録させる工程と、
前記イベントパターン解析プログラムが、前記コンピュータに、前記イベント情報における発生したイベントパターンを前記イベントパターンリストに記憶させるとともに、前記発生したイベントパターン毎の発生頻度を前記発生頻度管理テーブルに記憶させる記憶工程と、
前記イベントパターン解析プログラムが、前記コンピュータに、前記発生頻度の低い前記イベントパターンを含むイベント情報を前記バッファに記録し残すように、前記イベント情報が記録される複数のバッファのうちから前記発生頻度が最も高いイベントパターンを有する前記イベント情報が記録されるバッファを、前記実行時のトレースデータをイベント情報として逐次記録するために選択させる選択工程とを
含むことを特徴とするトレースデータ解析方法。
【請求項２】
イベント情報記録プログラムとイベントパターン解析プログラムとが、コンピュータに、記憶部のイベントパターンリストと発生頻度管理テーブルと複数のバッファとを用いて、解析対象プログラムの実行動作を解析させるためのトレースデータ解析方法であって、
前記イベント情報記録プログラムが、前記コンピュータに、前記複数のバッファのうちから選択したバッファに、前記解析対象プログラム実行時のイベント情報が予め記録されたトレースデータファイルから読込んだ前記イベント情報を逐次記録させる工程と、
前記イベントパターン解析プログラムが、前記コンピュータに、前記読込んだイベント情報における発生したイベントパターンを前記イベントパターンリストに記憶させる記憶工程と、
前記イベントパターン解析プログラムが、前記コンピュータに、前記イベントパターン毎の発生頻度を発生頻度管理テーブルに記憶させるとともに、前記発生頻度の低い前記イベントパターンを含むイベント情報を残すように、前記イベント情報が記録される複数の前記バッファのうちから前記発生頻度が最も高いイベントパターンを含むイベント情報が記録されるバッファを、前記実行時のイベント情報を逐次記録するために選択させる選択工程とを
含むことを特徴とするトレースデータ解析方法。
【請求項３】
請求項１または請求項２に記載のトレースデータ解析方法において、
解析結果表示プログラムが、前記コンピュータに、
前記イベントパターンリストおよび前記発生頻度管理テーブルの情報と前記バッファの情報とを表示させる工程を含む
ことを特徴とするトレースデータ解析方法。
【請求項４】
請求項１または請求項２に記載のトレースデータ解析方法において、
前記イベントパターン解析プログラムが、前記コンピュータに、
前記記憶工程において、同一の前記イベントパターンが発生するまでの時間間隔を前記発生頻度管理テーブルに記憶させ、
前記選択工程において、発生する時間間隔が長い前記イベントパターンを含むイベント情報を残すように、前記複数のバッファのうちから前記イベント情報を逐次記録する前記バッファを選択させる
ことを特徴とするトレースデータ解析方法。
【請求項５】
請求項１または請求項２に記載のトレースデータ解析方法において、
前記イベントパターン解析プログラムが、前記コンピュータに、
前記記憶工程において、同じ前記イベントパターンが発生するイベント回数を前記発生頻度管理テーブルに記憶させ、
前記選択工程において、前記イベント回数が少ない前記イベントパターンを含むイベント情報を残すように、前記複数のバッファのうちから前記イベント情報を逐次記録する前記バッファを選択させる
ことを特徴とするトレースデータ解析方法。
【請求項６】
解析対象プログラムの実行動作を解析するためのイベント情報記録プログラムとイベントパターン解析プログラムとを有するプログラムであって、
前記イベント情報記録プログラムが、コンピュータに、前記解析対象プログラムの実行時のイベント情報を、選択したバッファに逐次記録させる手順、
前記イベントパターン解析プログラムが、前記コンピュータに、前記解析対象プログラムの実行時のイベント情報に同一のイベントパターンが発生する時間間隔を各前記同一のイベントパターン毎に発生頻度管理テーブルに記憶させる手順、および
前記イベントパターン解析プログラムが、前記コンピュータに、前記時間間隔の長い前記イベントパターンを含むイベント情報を残すように、前記イベント情報が記録された複数のバッファのうちから前記時間間隔の最も短い前記イベントパターンを含むイベント情報が記録されるバッファを、前記実行時のイベント情報を逐次記録するために選択させる手順を
実行させるためのプログラム。
【請求項７】
解析対象プログラムの実行動作を解析するためのイベント情報記録プログラムとイベントパターン解析プログラムとを有するプログラムであって、
前記イベント情報記録プログラムが、コンピュータに、前記解析対象プログラムの実行時のイベント情報を、選択したバッファに逐次記録させる手順、
前記イベントパターン解析プログラムが、前記コンピュータに、前記解析対象プログラムの実行時のイベント情報に同じイベントパターンが発生するイベント回数を各前記同じイベントパターン毎に発生頻度管理テーブルに記憶させる手順、および
前記イベントパターン解析プログラムが、前記コンピュータに、前記イベント回数の少ないイベントパターンを含むイベント情報を残すように、前記イベント情報が記録された複数のバッファのうちから前記イベント回数が最も多いイベントパターンを含むイベント情報が記録されるバッファを、前記実行時のイベント情報を逐次記録するために選択させる手順を
実行させるためのプログラム。
【請求項８】
請求項６または請求項７に記載のプログラムにおいて、
前記プログラムは、解析結果表示プログラムを有し、
前記解析結果表示プログラムが、前記コンピュータに、
前記発生頻度管理テーブルの情報と前記バッファの情報とを表示させる手順を
実行させるためのプログラム。
【請求項９】
請求項６または請求項７に記載のプログラムにおいて、
前記イベントパターン解析プログラムが、前記コンピュータに、
前記イベントパターンを記憶部のイベントパターンリストに記憶させる手順を
実行させるためのプログラム。
【請求項１０】
請求項９に記載のプログラムにおいて、
前記プログラムは、解析結果表示プログラムを有し、
前記解析結果表示プログラムが、前記コンピュータに、
前記イベントパターンリストの情報と前記バッファの情報とを表示させる手順を
実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム実行時の再現率の低い不具合の動作解析を行うためのトレースデータ解析方法およびそのプログラムに関する。
【背景技術】
【０００２】
従来、カーナビゲション等の組み込みシステムで不具合が起こった場合、プログラムの動作をトレースして解析を行なっている。
例えば、特許文献１に記載される一般的なトレース方式では、トレースデータを記録するためのメモリを必要とすることから、メモリ容量を超えるトレースデータを記録することができない。なお、メモリを繰り返し使用する場合には、エラーが起きた箇所が上書きされてしまう。
【０００３】
また、トレースデータを解析する場合、トレースデータの中からエラーが起きた箇所を探し出し、エラー箇所である表示対象を指定する必要がある。
【０００４】
一方、特許文献２に記載されるように、Ｎ周期前(Ｎ：自然数)までのトレースデータを常に記録するようにし、故障発生時に自動でトレースデータを取り込み表示させることで故障解析を支援するシステムもある。
【特許文献１】特開平８−１３７７１７号公報(段落００２３、図１、図３等)
【特許文献２】特開２００１−１４０２７号公報(段落００２３、００２６、図２等)
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、従来のプログラム実行時の再現率の低い不具合の動作解析を行う場合、以下の技術課題が挙げられる。
【０００６】
第１の技術課題として、再現率の低い不具合の動作解析を行うためには長時間のトレースを行う必要があるため、イベント情報が多数にのぼり、直ぐにメモリが一杯になってしまう。そのため、トレース用に大容量のメモリが必要となる。
しかし、デバッカや組み込みシステムでは、容易にメモリを増設することができない場合が多く、再現率の低い不具合の解析を行おうとしてもメモリ容量が足りず、動作解析に必要なトレースデータを記録できないという問題がある。
【０００７】
第２の技術課題として、トレースに必要なメモリ容量が有りトレースデータが収集できたとしても、データ量が膨大となるため、トレースデータの中からエラーが起きた箇所を探し出そうにも、不具合発生ポイントがなかなか見つからず、何度も表示対象を繰返し指定する必要があり、作業が非効率的となっている。
【０００８】
第３の技術課題として、トレースに必要なメモリ容量が無い場合、不具合発生のタイミングでトレースデータの取り込み、または、トレースデータの記録を停止させる必要がある。
しかし、一般的に再現率の低い不具合は、タイミングに起因するものが多く、一過性で不具合発生後も正常に動作し続ける場合が多い。このため、自動で判定することが困難で、人手により何度もトレースデータ収集を行う手間が発生し、作業量が膨大となる難点があり、改善が望まれる。
【０００９】
本発明は上記実状に鑑み、プログラムの再現率の低い不具合に対しても少ないメモリで動作解析に必要なトレースデータを記録でき、かつ効率的な動作解析を行い得るトレースデータ解析方法およびそのプログラムの提供を目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成すべく、第１の本発明に関わるトレースデータ解析方法は、イベント情報記録プログラムとイベントパターン解析プログラムとが、コンピュータに、記憶部のイベントパターンリストと発生頻度管理テーブルと複数のバッファとを用いて、解析対象プログラムの実行動作を解析させるためのトレースデータ解析方法であって、イベント情報記録プログラムが、コンピュータに、複数のバッファのうちから選択したバッファに、解析対象プログラムの実行時のトレースデータをイベント情報として逐次記録させる工程と、イベントパターン解析プログラムが、コンピュータに、イベント情報における発生したイベントパターンをイベントパターンリストに記憶させるとともに、発生したイベントパターン毎の発生頻度を発生頻度管理テーブルに記憶させる記憶工程と、イベントパターン解析プログラムが、コンピュータに、発生頻度の低いイベントパターンを含むイベント情報を前記バッファに記録し残すように、イベント情報が記録される複数のバッファのうちから発生頻度が最も高いイベントパターンを有するイベント情報が記録されるバッファを、実行時のトレースデータをイベント情報として逐次記録するために選択させる選択工程とを含んでいる。
【００１１】
第２の本発明に関わるトレースデータ解析方法は、イベント情報記録プログラムとイベントパターン解析プログラムとが、コンピュータに、記憶部のイベントパターンリストと発生頻度管理テーブルと複数のバッファとを用いて、解析対象プログラムの実行動作を解析させるためのトレースデータ解析方法であって、イベント情報記録プログラムが、コンピュータに、複数のバッファのうちから選択したバッファに、解析対象プログラム実行時のイベント情報が予め記録されたトレースデータファイルから読込んだイベント情報を逐次記録させる工程と、イベントパターン解析プログラムが、コンピュータに、読込んだイベント情報における発生したイベントパターンをイベントパターンリストに記憶させる記憶工程と、イベントパターン解析プログラムが、コンピュータに、イベントパターン毎の発生頻度を発生頻度管理テーブルに記憶させるとともに、発生頻度の低い前記イベントパターンを含むイベント情報を残すように、イベント情報が記録される複数の前記バッファのうちから発生頻度が最も高いイベントパターンを含むイベント情報が記録されるバッファを、実行時のイベント情報を逐次記録するために選択させる選択工程とを含んでいる。
【００１２】
第３の本発明に関わるプログラムは、解析対象プログラムの実行動作を解析するためのイベント情報記録プログラムとイベントパターン解析プログラムとを有するプログラムであって、イベント情報記録プログラムが、コンピュータに、解析対象プログラムの実行時のイベント情報を、選択したバッファに逐次記録させる手順、イベントパターン解析プログラムが、コンピュータに、解析対象プログラムの実行時のイベント情報に同一のイベントパターンが発生する時間間隔を各同一のイベントパターン毎に発生頻度管理テーブルに記憶させる手順、およびイベントパターン解析プログラムが、コンピュータに、時間間隔の長いイベントパターンを含むイベント情報を残すように、イベント情報が記録された複数のバッファのうちから時間間隔の最も短いイベントパターンを含むイベント情報が記録されるバッファを、実行時のイベント情報を逐次記録するために選択させる手順を実行させている。
【００１３】
第４の本発明に関わるプログラムは、解析対象プログラムの実行動作を解析するためのイベント情報記録プログラムとイベントパターン解析プログラムとを有するプログラムであって、イベント情報記録プログラムが、コンピュータに、解析対象プログラムの実行時のイベント情報を、選択したバッファに逐次記録させる手順、イベントパターン解析プログラムが、コンピュータに、解析対象プログラムの実行時のイベント情報に同じイベントパターンが発生するイベント回数を各同じイベントパターン毎に発生頻度管理テーブルに記憶させる手順、およびイベントパターン解析プログラムが、コンピュータに、イベント回数の少ないイベントパターンを含むイベント情報を残すように、イベント情報が記録された複数のバッファのうちからイベント回数が最も多いイベントパターンを含むイベント情報が記録されるバッファを、実行時のイベント情報を逐次記録するために選択させる手順を実行させている。
【発明の効果】
【００１４】
本発明によれば、再現率の低い不具合に対しても少ないメモリで動作解析に必要なトレースデータを記録でき、かつ効率的な不具合の動作解析を行い得るトレースデータ解析方法およびそのプログラムを実現できる。
【発明を実施するための最良の形態】
【００１５】
＜＜本発明の概要＞＞
本発明は、プログラムのデバッグ手法の一つとして、プログラムの動作やメモリの変化をイベントとして時系列的に記録し、動作解析を行うトレースを用いている。なお、イベントとはシステム実行上のキッカケともいうべきものであり、例えば、ボタンの押下、タスク実行開始、メッセージ発行等が該当する。
本発明は、プログラムにおいて再現率が低いバグを含む不具合の動作解析を行う場合に有効である。
【００１６】
以下、本発明の実施形態について添付図面を参照して説明する。
＜＜第１実施形態＞＞
【００１７】
図１は、第１実施形態の解析対象プログラム100の実行時の動作をトレースデータ記録システム110にて記録するための構成を示すシステム構成図である。
第１実施形態のトレースデータ記録システム110は、解析対象である解析対象プログラム100のバグ等の不具合に対して、この不具合が発生した箇所のトレースデータを取得する機能を有している。
【００１８】
＜システム構成＞
図１に示すように、トレースデータ記録システム110は、解析対象プログラム100の実行動作を解析するためのイベントパターン解析プログラム120と、解析対象プログラム100の実行時のイベント情報のイベントパターンを含むトレースデータが格納される複数のバッファ170(170a、170b、…、170n)と、解析対象プログラム100の実行時のトレースデータをバッファ170へ逐次記録するイベント情報記録プログラム130と、解析対象となるイベントが登録される解析対象登録テーブル140と、解析対象プログラム100の実行時のイベントパターンを解析するためのイベントパターン解析テーブル150と、解析対象プログラム100の実行時のイベント情報のイベントパターンを含むトレースデータを逐次記録するバッファ170を指定する選択バッファNoテーブル160とを備え構成されている。
【００１９】
なお、バッファ170は、トレースで一般的に用いられている直線状のバッファを論理的に繋げたリングバッファ構造とするが、特にこれに限定されない。
このトレースデータ記録システム110と解析対象プログラム100との間には、解析対象プログラム100が実行されるＯＳ(Operating System)101が介在している。
【００２０】
＜ハードウェア構成＞
図２は、トレースデータ記録システム110を稼動させるハードウェア構成の１例を示す概念図である。
図２に示すように、実施形態のトレースデータ記録システム110が稼働するハードウェアは、組み込みシステム等の解析対象プログラム100が搭載される回路基板のターゲットボード11と、該ターゲットボード11に接続され解析対象プログラム100の動作を解析するためのパソコン10とを備え構成されている。
【００２１】
なお、パソコン10、ターゲットボード11にはそれぞれ通信プログラムが格納されたり、或いは、パソコン10、ターゲットボード11間にデバッガのＩＣＥ(In-Circuit Emulator)(登録商標)等が配設されるが、図２においては、図示を省略している。
パソコン10は、汎用のパーソナルコンピュータであり、ＣＰＵ(Central Processing Unit)と、主記憶装置のメインメモリと、補助記憶装置のメモリと、マウス、キーボード１０ｋ等の入力装置と、プリンタ(図示せず)、ディスプレイ10d等の出力装置とを有している。
【００２２】
パソコン10のメモリには、イベントパターン解析プログラム120がインストールされており、図１に示すトレースデータ記録システム110の稼働時には、ＣＰＵがイベントパターン解析プログラム120をメインメモリにロードし実行するとともに、解析対象登録テーブル140、イベントパターン解析テーブル150等のデータがメインメモリに記憶され、処理が行われる。なお、パソコン10のメモリには、ＯＳが格納されているが、図２においては図示を省略している。  
【００２３】
ターゲットボード11は、例えば、カーナビゲション等の電子機器に格納され、該電子機器を解析対象プログラム100の実行により統括的に制御するものであり、エポキシ樹脂等を含む基板上に、配線パターンが形成されるとともに、各種電子回路と、入出力インターフェース回路と、ＣＰＵ、ＲＯＭ(Read Only Memory)、ＲＡＭ(Random Access Memory)等を有するマイコン(Ｍicrocomputer：マイクロコンピュータ)などが実装されている。
ターゲットボード11のマイコンのＲＯＭには、ＯＳ101、該ＯＳ101上で動作する解析対象プログラム100等が格納されており、組み込みシステムの稼動時には、解析対象プログラム100が、マイコンのＣＰＵによりＲＡＭにロードされ実行される。
【００２４】
また、トレースデータ記録システム110を稼動するためのイベント情報記録プログラム130が、マイコンのＲＯＭに格納されており、トレースデータ記録システム110の稼動時には、マイコンのＣＰＵにより、解析対象プログラム100に加えてイベント情報記録プログラム130がＲＡＭにロードされ実行される。
なお、トレースデータ記録システム110の稼動時、ターゲットボード１１のマイコンのＲＡＭには、図１に示すバッファ170、選択バッファNoテーブル160等の各種データが格納され処理が行なわれる。
【００２５】
＜トレースデータ記録システム110の各部の構成＞
図１に示す解析対象登録テーブル140は、その構成を表す図８に示すように、イベントパターンの解析対象となるイベントを示す解析対象イベントコード141と、イベントパターンの開始のイベントの解析対象イベントコード141を示す解析開始イベントコード142と、イベントパターンの終了のイベントの解析対象イベントコード141を示す解析終了イベントコード143との３つのコードを有している。それぞれのコード141、142、143には、多数、例えば何百のデータが記録されている。
【００２６】
図１に示すイベントパターン解析テーブル150は、その構成を表す図９に示すように、解析開始イベントコード142の発生パターンであるイベントパターンを記憶するイベントパターンリスト151と、イベントパターン毎の発生頻度を記憶する発生頻度管理テーブル152とを有している。
【００２７】
図１に示すイベントパターン解析プログラム120は、イベントの発生パターンであるイベントパターンをイベントパターンリスト151に記憶し、イベントパターン毎の発生頻度を発生頻度管理テーブル152に記憶し、また、発生頻度の低いイベントパターンを含むトレースデータを残すように、バッファ170のうちからトレースデータが逐次記録され更新されるバッファ170を選択し、バッファNoテーブル160に設定する。
ここで、イベントパターンの発生頻度を同一のイベントパターンが発生するまでの時間間隔で求め、時間間隔の長いイベントパターンを含むトレースデータを残すようにしている。
【００２８】
また、時間の取得は、ＲＴＣ(Real Time Clock)の時刻を用いても良いし、タイマを用いたシステム起動からの相対時間を用いても良く、特に限定されない。
例えば、ＲＴＣやタイマが搭載されていないシステムでは、同じイベントパターンが発生するイベント回数を発生頻度としても良い。この場合、回数の少ないイベントパターンを含むトレースデータを残すようにする。
【００２９】
図１に示すイベント情報記録プログラム130は、選択バッファNoテーブル160で指定されるバッファ170(170a、…、170n)に、解析対象プログラム100の実行動作を、イベント情報のイベントパターンを含むトレースデータとして解析対象イベントコード141で逐次記録する機能を有する。ここで、解析対象イベントコード141は、解析対象プログラム100の動作であるイベントを、後記の図７に示すイベントコード対応表600に従いコード化したものである。
【００３０】
＜＜解析対象プログラム100＞＞
次に、解析対象プログラム100の一例を、図３から図６を用いて説明する。
図３は、解析対象プログラム100のシステムが動作するハードウェアを示す斜視図であり、図４は、解析対象プログラム100の処理フローを示す図である。
また、図５は、解析対象プログラム100の動作を示す図であり、図５(ａ)は、解析対象プログラム100のイベントパターンであるパターンＡの動作を示す図であり、図５(ｂ)は、解析対象プログラム100のイベントパターンであるパターンＢの動作を示す図であり、図５(ｃ)は、解析対象プログラム100のイベントパターンであるパターンＣの動作を示す図である。
【００３１】
図６は、図５の解析対象プログラム100の動作をイベントとしてリストで表現した図であり、解析対象プログラム100のイベントパターンであるパターンＡの動作、パターンＢの動作、およびパターンＣの動作と、各イベントパターン毎の発生頻度とを示した図である。
図３に示すように、解析対象プログラム100が動作するシステム300は、光が点滅するランプＡ(312)と、押下動作でランプＡ(312)に光を点滅させるボタンＡ(311)と、光が点滅するランプＢ(322)と、押下動作でランプＢ(322)に光を点滅させるボタンＢ(321)とが搭載されている。    
【００３２】
このシステム300において、解析対象プログラム100は、１回のボタンＡ(311)の押下によりランプＡ(312)が１回点滅し(以下、パターンＡと称す)、１回のボタンＢ(321)の押下によりランプＢ(322)が１回点滅する(以下、パターンＢと称す)ように設計されている。
しかし、希にボタンＡ(311)を押下してもランプＡ(312)が点滅しない不具合(以下、パターンＣと称す)が発生する場合がある。
そこで、この不具合のパターンＣを解析するためのトレースデータの取得方法を、以下説明する。
【００３３】
正常な動作のパターンＡ(410)では、図４に示すように、順番に、割込み処理S150、ボタン種別設定S151、タスクＣ起動S152、タスクＣ(S110)、ボタン種別判定S111、メッセージＡ発行S112、タスクＡ(S120)、ランプＡ点滅S121のルートを通る。
このパターンＡ(410)の動作は、図５(ａ)に示すように、図４を参照し、ボタンＡ押下後、タスクＣが行われ、メッセージＡが発行され、タスクＡが行われ、ランプＡ点滅となる。
【００３４】
図４、図５(ａ)に示すパターンＡ(410)のイベントパターンリスト模式図510は、図６に示すように、順番に、ボタンＡ押下510a、タスクＣ実行開始510b、メッセージＡ発行510c、タスクＡ実行開始510d、ランプＡ点滅510eのルートを通る。
このパターンＡ(410)は、正常動作なので、発生頻度が高いため、発生頻度の表示として、「高」520aが表示される。
【００３５】
正常な動作のパターンＢ(420)では、図４に示すように、順番に、割込み処理S150、ボタン種別設定S151、タスクＣ起動S152、タスクＣ(S110)、ボタン種別判定S111、メッセージＢ発行S113、タスクＢ(S130)、ランプＢ点滅S131のルートを通る。
このパターンＢ(420)の動作は、図５(ｂ)に示すように、図４を参照し、ボタンＢ押下後、タスクＣが行われ、メッセージＢが発行され、タスクＢが行われ、ランプＢ点滅となる。
図４、図５(ｂ)に示すパターンＢ(420)のイベントパターンリスト模式図510は、図６に示すように、順番に、ボタンＢ押下510k、タスクＣ実行開始510l、メッセージＢ発行510m、タスクＢ実行開始510n、ランプＢ点滅510oのルートを通る。
このパターンＢ(420)は、正常動作なので発生頻度が高いため、発生頻度の表示として、「高」520cが表示される。
【００３６】
不具合が発生した動作のパターンＣでは、図４に示すように、順番に、割込み処理S150、ボタン種別設定S151、タスクＣ起動S152、タスクＣ(S110)にまで進行した後、周期割込みが入り、タスクＤ(S140)、周期処理S141の後、ボタンＢ押下がなされ、割込み処理S150、ボタン種別設定S151、タスクＣ起動S152、タスクＣ(S110)、ボタン種別判定S111、メッセージＢ発行S113、タスクＢ(S130)、ランプＢ点滅S131のルートを通る。
この不具合が発生したパターンＣ(430)の動作は、図５(ｃ)に示すように、図４を参照し、ボタンＡ押下後、タスクＣの進行中に、周期割込みが入り(図４参照)、タスクＤが行われる。そして、タスクＤの進行中に、ボタンＢ押下がなされ、パターンＢ(420)に移行し、タスクＣが行われ、メッセージＢが発行され、タスクＢが行われ、ランプＢ点滅となる。
【００３７】
図４、図５(ｃ)に示す不具合が発生した動作のパターンＣ(430)のイベントパターンリスト模式図510は、図６に示すように、ボタンＡ押下510a、タスクＣ実行開始510b、タスクＤ実行開始510q、ボタンＢ押下510f、タスクＣ実行開始510g、メッセージＢ発行510h、タスクＢ実行開始510i、ランプＢ点滅510jのルートを通る。
このパターンＣ(430)は、図５(ｃ)に示すように、周期割込みのタスクＤの進行中にボタンＢ押下がなされ、ボタンＡ押下がなされてもランプＡ点滅がなされない不具合が発生した動作なので、発生頻度が低く、図６に示すように、発生頻度の表示として、「低」(520b)が表示される。
【００３８】
このパターンＣ(430)は、タスクＤ(S140)の割込み(図４、図５(ｃ)参照)により、タスクＣ(S110)の処理タイミングが遅れ、図４に示すように、ボタン種別テーブル390をリードしボタン種別判定S111を行なう前に、ボタンＢ押下がなされ、パターンＢ(420)に書き換えられた(図５(ｃ)、(ｂ)参照)ことが原因で発生した不具合である。
【００３９】
＜イベントコード対応表600＞
図７は、解析対象プログラム100の動作を、イベントコード610aとしてイベントパターン解析プログラム120、イベント情報記録プログラム130等で扱うためのイベントコード対応表600を示す図である。
【００４０】
図７に示すイベントコード対応表600は、各イベントコード610aが、如何なる意味610bを有しているかを表している。例えば、「１１０Ａ」のイベントコード610aは、「ボタンＡ押下」を表し、「１１０Ｂ」のイベントコード610aは、「ボタンＢ押下」を表し、「２２０Ａ」のイベントコード610aは、「タスクＡ実行開始」を表している。以下、同様である。
なお、イベントコード対応表600は、イベントパターン解析プログラム120、イベント情報記録プログラム130の実行時には予め作成されている。
【００４１】
＜解析対象登録テーブル140(図１参照)＞
図８に示すように、解析対象登録テーブル140は、解析対象となる不具合の動作に関係のあるイベントを識別するコードを設定する解析対象イベントコード141と、イベントパターンの開始条件となるイベントを識別するコードを設定する解析開始イベントコード142と、イベントパターンの終了条件となるイベントを識別するコードを設定する解析終了イベントコード143とから構成されるものであり、解析対象とするイベントの情報が設定されている。
【００４２】
ここで、解析対象登録テーブル140は、図１に示す各イベントパターン解析プログラム120がリードし、処理に用いるものであるから、イベントパターン解析プログラム120を実行する前に予め設定しておく必要がある。この設定は、例えば、不具合に関連する解析対象プログラム100のソースコードを熟知した解析対象プログラム100の設計者等のデバック作業者が行う。
【００４３】
図８に示す解析対象イベントコード141に、解析対象プログラム100の解析対象となるイベントのイベントコード(図７参照)を設定し、不具合に関係の無いイベントコードをフィルタリングする。これにより、イベントパターンリスト151(図９参照)がより効率的に作成され、不具合の動作に関係のあるイベントコードが設定される。
【００４４】
図８に示す解析開始イベントコード142には、解析対象プログラム100の処理対象となるイベントパターン(図６参照)の開始条件となるイベントコードを設定する。
例えば、図６に示すように、正常なイベントパターンであるパターンＡ(410)、不具合の発生したイベントパターンであるパターンＣ(430)それぞれの開始条件となるイベントコードのボタンＡ押下510aのイベントコードの「１１０Ａ」(図７参照)が該当する。また、正常なイベントパターンであるパターンＢ(420)の開始条件となるイベントコードのボタンＢ押下510kのイベントコードの「１１０Ｂ」(図７参照)が該当する。
【００４５】
図８に示す解析終了イベントコード143には、イベントパターンの終了条件となるイベントコードを設定するのであるから、例えば、図６に示すように、解析対象プログラム100が扱うイベントパターンのパターンＡ(410)の終了条件となるイベントコードのランプＡ点滅510eのイベントコードの「４４０Ａ」(図７参照)、イベントパターンのパターンＢ(420)の終了条件となるイベントコードのランプＢ点滅510oのイベントコードの「４４０Ｂ」(図７参照)、イベントパターンのパターンＣ(430)の終了条件となるイベントコードのランプＢ点滅510jのイベントコードの「４４０Ｂ」(図７参照)等が該当する。
【００４６】
＜イベントパターン解析テーブル150(図１参照)＞
図９は、イベントパターン解析テーブル150の詳細構造を示したものである。
イベントパターン解析テーブル150は、解析対象プログラム100が実行されることにより、解析対象プログラム100の実行時のログのトレースデータに含まれるイベントパターン等の情報が記録されるものである。
【００４７】
図９に示すように、イベントパターン解析テーブル150におけるイベントパターンリスト151は、通し番号であるidx(711a)と、解析対象のイベントコードを示すイベントコード711bと、イベントコード711b以外の分岐先の候補が有る場合にその分岐先のイベントコードをidx(711a)で示す分岐イベントidx(711c)と、イベントコード711bが次に移行するイベントコードをidx(711a)で示す次イベントidx(711d)と、イベントパターンを識別する番号が記憶されるパターンNo(711e)と、解析中のイベントパターンのどのイベントコードを解析中かをidx(711a)で示す解析中idx(712)とを有し構成されている。
【００４８】
イベントパターンリスト151は、解析対象プログラム100が解析対象とするイベントパターン(図６参照)にあるように、リスト構造でイベントパターンを記憶する。
図９に示すイベントパターンリスト151のイベントコード711bには、図７に示すイベントコード対応表600に示される意味610bで表されるイベントに対応付けられたイベントコード610aを記憶する。
【００４９】
イベントパターンリスト151の分岐イベントidx(711c)は、解析対象プログラム100のイベントパターン(図６参照)において、イベントの遷移先に分岐する場合、例えば、図６に示すように、分岐先となるボタンＡ押下510aとボタンＢ押下510kや、分岐先となるメッセージＡ発行510cとタスクＤ実行開始510qのように、分岐先の候補のイベントコード711bのidx(711a)を記憶し、リストに繋いでいく。
そして、分岐先の候補が無い場合は、(null)を記憶する。
【００５０】
例えば、図９のidx(711a)「３」のイベントコード711bが「３３０Ａ」の「メッセージＡ発行」(図７参照)は、図６のイベントパターンリスト模式図510に示すように、「メッセージＡ発行」510cには、分岐先の候補として、「２２０Ｄ」の「タスクＤ実行開始」510qが有るので、イベントコード711bに「２２０Ｄ」が記憶されるidx(711a)の「１１」を記憶する。
図９に示すイベントパターンリスト151の次イベントidx(711d)には、解析対象プログラム100のイベントパターンにおいて、現イベントの次に行なわれるイベントを表している。なお、解析終了イベントコード143(図８参照)で示されるイベントコード、すなわちイベントパターンの最後の行の場合、(null)を記憶する。
【００５１】
例えば、図６に示すパターンＡ(410)を例示すると、図９のイベントパターンリスト151の１行目を参照し、ボタンＡ押下510aのイベントコード711bは、「１１０Ａ」(図７参照)が記憶され、次イベントidx(711d)には、タスクＣ実行開始510b(図６参照)を表す「２２０Ｃ」(図７参照)が記憶されているidx(711a)「２」が記憶される。
また、図９のイベントパターンリスト151の２行目を参照し、タスクＣ実行開始510b(図６参照)のイベントコード711bは、「２２０Ｃ」(図７参照)が記憶され、次イベントidx(711d)は、メッセージＡ発行510c(図６参照)を表す「３３０Ａ」(図７参照)が記憶されているidx(711a)「３」が記憶される。
【００５２】
また、例えば、図６に示すパターンＡ(410)の場合には、ランプＡ点滅510eがパターンＡ(410)の最後である。図９のイベントパターンリスト151の１行目のidx(711a)の「１」から５行目の「５」はパターンＡ(410)を表しており、５行目のイベントコード711bの「４４０Ａ」は、ランプＡ点滅510e(図７参照)を表しており、イベントパターンの最後であるので、次イベントidx(711d)には、(null)を記憶する。
【００５３】
図９のイベントパターンリスト151のパターンNo(711e)には、イベントパターンを識別するための識別情報、例えば、番号を記憶する。
図８に示す解析終了イベントコード143で表されるイベントコードは、イベントパターンリスト151のイベントパターンの最後の行のイベントコード711bに記憶する。そして、パターンNo(711e)には、イベントパターンを識別するための識別情報、例えば、番号を記憶し、イベントパターンの最後のイベント以外の行では、パターンNo(711e)に、イベントパターンリスト151の一行目から四行目に示されるように、(null)を記憶する。
【００５４】
例えば、イベントパターンリスト151における１列目のidx(711a)「１」〜「５」は、図６に示すパターンＡ(410)を表しており、５行目のidx(711a)「５」のイベントコード711bに、解析終了イベントコード143の「４４０Ａ」(図８参照)が記憶される。そして、イベントパターンＡ(410)を識別するための識別情報「１」が、パターンNo(711e)に記憶され、イベントパターンＡ(410)がパターンNo(711e)に記憶される番号「１」で示されることになる。
【００５５】
図９のイベントパターンリスト151の解析中idx(712)には、解析対象プログラム100のイベントパターンのどのイベントを解析中であるかを、idx(711a)で記憶する。
なお、解析中で無い場合は、(null)を記憶する。
例えば、図９に示す解析中idx(712)には、「７」が記憶されるので、図９に示すイベントパターンリスト150の７行目のidx(711a)「７」のイベントコード711bの「２２０Ｃ」で表される「タスクＣ実行開始」(図７参照)を解析中であることを示している。
【００５６】
図９に示すように、イベントパターン解析テーブル(150)における発生頻度管理テーブル152は、イベントパターン毎の発生頻度を表すパターン毎発生頻度720と、バッファ毎の発生頻度を表すバッファ毎発生頻度730とを有し構成され、イベントパターン毎の発生頻度とバッファ毎の発生頻度を記憶している。
【００５７】
パターン毎発生頻度720は、イベントパターンを識別するパターンＮo(721a)と、該イベントパターン毎の発生時間721bと、該イベントパターンの発生間隔721cから構成される。
発生時間721bは、イベントパターンが発生した時間を記憶するものであり、例えば、電源釦が押下され電源が入れられてからの累積時間等で表される。なお、発生時間721bの起点は、どの様に定めてもよく、特に限定されない。
【００５８】
発生間隔721cには、それぞれのイベントパターンが発生した間の経過時間を記憶する。なお、図９に示す発生時間(721b)、発生間隔(721c)は、ミリ秒の単位を用いて表しているが、これらの単位は任意に選択可能であり限定されない。
ここで、発生時間721bは、発生間隔721cを求めるために用いられ、今回のイベントパターンの発生時間721bと前回の同じイベントパターンの発生時間721bとの差で発生間隔721cが求められる。
なお、発生時間721bの更新は、発生間隔721cを求めた後で行う。
【００５９】
図９に示す発生頻度管理テーブル152のバッファ毎発生頻度730は、各バッファ170(図１参照)を識別するためのバッファＮo(731a)と、バッファ170毎に記録されるトレースデータに含まれるイベントパターンの発生間隔731bとから構成される。
【００６０】
バッファ毎発生頻度730の発生間隔731bには、対応するバッファ170に格納されている最新のイベントパターンの発生頻度を記憶する。なお、ここでは、発生間隔731bに記憶する発生頻度として、同一のイベントパターンの発生間隔の経過時間を用いている。
図９に示す選択バッファNo(160)は、バッファ毎発生頻度730のバッファＮo(731a)に記憶されるバッファ170の発生間隔731中で、最も発生間隔の短いバッファNo(731a)が記憶される。このバッファNo(731a)で指定されるバッファ170は、トレースデータの書込み対象となり、イベントパターンを含むトレースデータが逐次記録される。
【００６１】
そのため、選択バッファNo(160)の更新は、選択バッファ毎発生頻度730の発生間隔731bの中に、パターン毎発生頻度720において更新した発生間隔721cより短い発生間隔が生じた場合に行われる。
すなわち、まず、更新した発生間隔721cのイベントパターンを含むトレースデータを記憶するバッファ170のバッファＮoが、バッファＮo(731a)に記憶され、該バッファ170の発生間隔が発生間隔731bに記憶される。そして、バッファ毎発生頻度730における発生間隔731bの最も短いバッファＮo(731a)が選択され、選択バッファNo(160)に記憶され更新される。
【００６２】
これにより、選択前のバッファ170への書込みが抑止され、より発生間隔721cの長いイベントパターンを含むトレースデータが残るようになる。
例えば、図９に示す例では、バッファ毎発生頻度730のバッファNo(731a)に記憶される「１」、「２」、「３」の３つバッファ170に書込みがなされている。
そして、発生間隔721cの長いイベントパターンを含むトレースデータが記憶される「２」、「３」の２つのバッファ170は、更新が行われず残る。そして、最も発生間隔731bの短いバッファＮo(731a)「１」が、選択バッファNo(160)に記憶され、「１」のバッファ170に、イベントパターンを含むトレースデータが逐次記録され更新が行なわれる。
【００６３】
＜＜イベントパターン解析プログラム120＞＞
次に、解析対象プログラム100の実行時の不具合を解析するイベントパターン解析プログラム120の処理について、図１０に従って説明する。なお、図１０は、イベントパターン解析プログラム120の処理フローを示す流れ図である。
イベントパターン解析プログラム120は、解析対象プログラム100の実行時の１イベント発生毎にこの１イベントに対して処理が行われるものである。すなわち、図１０に示す一つのフローで図９に示すイベントパターン151の１行の書き込みの処理が行なわれる。
なお、トレースデータが既に記憶されたトレースファイルから入力される場合は、トレースファイルからの入力情報の１イベントを取出して処理する場合と同様である。
【００６４】
まず、解析対象プログラム100の実行時、イベントが発生した場合、ＯＳ101(図１、図２参照)からイベントパターン解析プログラム120およびイベント情報記録プログラム130が実行され、その際に、パラメータとして発生したイベントのイベントコードが、イベントパターン解析プログラム120およびイベント情報記録プログラム130に渡される。
【００６５】
こうして、イベントが発生した場合、発生したイベントが解析対象登録テーブル140(図８参照)の解析対象イベントコード141に登録される解析対象イベントか否か、パラメータとして渡されたイベントコードが解析対象イベントコード141(図８参照)と一致するか否かで判断される(図１０のステップS201)。
ここで、解析対象イベントは、予め、不具合に関係する箇所の処理が解るＰＧ(program)設計者等によりトレースデータ記録システム110に入力され、図８に示す解析対象登録テーブル140の解析対象イベントコード141として登録されている。
【００６６】
図１０のステップS201において、解析対象イベントでないと判断された場合(ステップS201でＮo)、処理を終了する。
一方、ステップS201において、解析対象イベントであると判断された場合(ステップS201でＹes)、イベントパターンリスト151(図９参照)にイベントを記録する(ステップS202)。
すなわち、イベントパターンリスト151におけるidx(711a)に通し番号を、イベントコード711bに該イベントのイベントコード対応表600(図７参照)のイベントコード610aを、分岐イベントidx(711c)に該イベント以外の分岐先の候補が有る場合にはその分岐先のidx(711a)の情報をまたは分岐先が無い場合には(null)を、次イベントidx(711d)に次に行われるイベントを表すidx(711a)の情報を、パターンNo(711e)に該イベントが行なわれるイベントパターンの識別情報の番号または(null)をそれぞれ記録する。
【００６７】
続いて、該イベントがイベントパターンの最後か否かを、図８に示す解析対象登録テーブル140の解析終了イベントコード143に登録されているか否かにより、判定する(ステップS203)。
なお、解析対象の解析終了イベントは、予め、エラーに関係する箇所の処理が解るＰＧ(program)設計者等によりトレースデータ記録システム110に入力され、図８に示す解析対象登録テーブル140の解析終了イベントコード143に登録されている。
図１０のステップS203において、イベントパターンの最後でないと判断された場合(図１０のステップS203でＮo)には、処理を終了する。
【００６８】
一方、図１０のステップS203において、該イベントがイベントパターンの最後であると判断された場合(図１０のステップS203でＹes)、図９に示すパターン毎発生頻度720を更新する(ステップS204)。すなわち、図９に示すパターン毎発生頻度720のパターンＮo(721a)に、該イベントパターンのイベントパターンリスト151のパターンNo(711e)に記憶されるデータを記録し、また、パターン毎発生頻度720の発生時間721bに、該イベントパターンが発生した時間を記録し、また、パターン毎発生頻度720の発生間隔721ｃに、該イベントパターンの今回と前回との発生時間の差で求められる経過時間を記録する。
【００６９】
続いて、図９に示すバッファ毎発生頻度730の発生間隔731b中に、パターン毎発生頻度720に更新した発生間隔721cより短い発生間隔はあるか否かを判定する(ステップS205)。
ステップS205において、短い発生間隔がないと判定された場合(図１０のステップS205でＮo)、処理を終了する。
一方、図１０のステップS205において、短い発生間隔が有ると判定された場合(図１０のステップS205でＹes)、図９に示す選択バッファＮｏ(160)が示すバッファ170のバッファ毎発生頻度730(図９参照)の最も短い発生間隔(731b)を、パターン毎発生頻度720の更新した発生間隔721cで更新する(ステップS206)。
【００７０】
続いて、選択バッファＮｏ(160)にバッファ毎発生頻度(730)の中で最も発生間隔(731b)の短いバッファＮｏ(731a)を設定する(ステップS207)。
以上が、イベントパターン解析プログラム120の処理である。
こうして、イベントパターン解析プログラム120の処理で選択バッファNoテーブル(160)に指定されたバッファ170に、イベント情報記録プログラム130の実行により、解析対象プログラム(100)の動作のイベント情報のトレースデータが解析対象イベントコード141用いて逐次記録される。
【００７１】
＜作用効果＞
第１実施形態によれば、解析対象プログラム100の実行時の再現率の低い不具合の動作解析を行う場合に、次の効果が得られる。
第１の効果として、トレースデータを記録するために大容量のメモリが無くても、不具合を含むトレースデータを残すことが可能となる。
【００７２】
第２の効果として、バッファ170には不具合を含むトレースデータが記録される可能性が高いため、従来より短時間で不具合発生ポイントを見つけることが可能となる。
【００７３】
第３の効果として、再現率の低い不具合でも、自動でトレースデータを収集することが可能となる。
【００７４】
＜＜第２実施形態＞＞
次に、第２実施形態について、図１１を参照し説明する。なお、図１１は、第２実施形態に関わる解析対象プログラム100の実行時の動作をトレースデータ記録システム110にて記録するとともに表示するための構成を示すシステム構成図である。
【００７５】
＜システム構成＞
図１１に示すように、第２実施形態は、図１の解析対象プログラム100の代わりに、予め解析対象プログラム100の実行時のイベントパターンを含むトレースデータが記録されたトレースデータファイル200を入力とする。そして、トレースデータ記録システム110に解析結果表示プログラム220を付加した構成である。
これ以外の構成は、第１実施形態と同様であるので、同一の構成要素には同一の符号を付して示し、詳細な説明は省略する。
【００７６】
解析結果表示プログラム220は、図２に示すパソコン10のメモリに格納されており、ＣＰＵによってメインメモリにロードされ実行され、図９に示すイベントパターン解析テーブル150の情報とバッファ170に記録されるトレースデータの情報を、表示装置のパソコン10のディスプレイ１０ｄ(図２参照)に表示する。
なお、ディスプレイ１０ｄに表示される情報は、パソコン10に接続された出力装置の図示しないプリンタで印刷可能であるとともに、磁気記憶媒体等に格納できることは勿論である。
【００７７】
＜作用効果＞
第２実施形態によれば、一般的な方式で記録した解析対象プログラム100の実行動作のトレースデータファイルに対しても解析可能となり、不具合発生ポイントを見つけ易くなる。
また、図９に示すイベントパターン解析テーブル150とバッファ170(図１１参照)に記録されるログのトレースデータの情報が、表示装置のディスプレイ10dに表示されるので、解析対象プログラム100の不具合の解析が容易に行なえる。
【００７８】
以上、第１、第２実施形態に説明したことから、本発明は、解析対象のプログラムの再現率の低い不具合に対して、少ないメモリでも動作解析に必要なトレースデータを記録でき、効率的に解析を行うための解析支援技術を提供することが可能である。
【図面の簡単な説明】
【００７９】
【図１】本発明の第１実施形態に関わる解析対象プログラムの実行時の動作をトレースデータ記録システムにて記録するための構成を示すシステム構成図である。
【図２】第１実施形態のトレースデータ記録システム稼動させるハードウェア構成の１例を示す概念図である。
【図３】第１実施形態の解析対象プログラムのシステムのハードウェアを示す斜視図である。
【図４】第１実施形態の解析対象プログラムの処理フローを示す図である。
【図５】(ａ)は、第１実施形態の解析対象プログラムのパターンＡの動作を示す図であり、(ｂ)は、第１実施形態の解析対象プログラムのパターンＢの動作を示す図であり、 (ｃ)は、第１実施形態の解析対象プログラムのパターンＣの動作を示す図である。
【図６】図５の解析対象プログラムの動作をイベントとしてリストで表現した図である。
【図７】第１実施形態のプログラムの動作をイベントコードとしてプログラムで扱うためのイベントコード対応表を示す図である。
【図８】第１実施形態の解析対象登録テーブルを表した図である。
【図９】第１実施形態のイベントパターン解析テーブルを表した図である。
【図１０】第１実施形態のイベントパターン解析プログラムの処理フローを示す流れ図である。
【図１１】第２実施形態に関わる解析対象プログラムの実行時の動作をトレースデータ記録システムにて記録し表示するための構成を示すシステム構成図である。
【符号の説明】
【００８０】
100    解析対象プログラム
120    イベントパターン解析プログラム(請求項６、請求項７、および請求項９のプログラム)
151    イベントパターンリスト(イベントパターンリスト部)
152    発生頻度管理テーブル(発生頻度管理部)
200    トレースデータファイル(トレースデータ記憶部)
170    バッファ(一時記憶部)
220    解析結果表示プログラム(請求項８、請求項１０のプログラム)
410    パターンＡ(イベントパターン)
420    パターンＢ(イベントパターン)
430    パターンＣ(イベントパターン、発生頻度の低いイベントパターン)
721c    発生間隔(イベントパターン毎の発生頻度)
【図１】
0004906760.tif 000002
【図２】
0004906760.tif 000003
【図３】
0004906760.tif 000004
【図４】
0004906760.tif 000005
【図５】
0004906760.tif 000006
【図６】
0004906760.tif 000007
【図７】
0004906760.tif 000008
【図８】
0004906760.tif 000009
【図９】
0004906760.tif 000010
【図１０】
0004906760.tif 000011
【図１１】
0004906760.tif 000012