(57)【要約】【課題】  対象プログラム記述や実行順序以外の事項の違いを考慮して、デバッグに有益な情報を提供するログ解析方法、プログラムを提供する。【解決手段】  同一のプログラム１ａを複数回（ｉ＝１〜３）繰り返し実行することにより、発生したイベント２ａ，２ｂを、実行回ごとに発生順序に従ってそれぞれ記録された複数のログ１〜３を生成する。すべての発生順序において記録されたイベントに関するプログラムの記述（ｆ，ｇ）が複数のログ１〜３間で、各々、共通する場合、プログラムの記述及び該記述の実行の際に用いられるデータ（引数）に基づいて、各イベントの発生確率を、発生順序１〜３ごとに、計算する。そして、上記発生確率に基づいて、各ログの特徴となるイベントに関する情報を出力する。【選択図】      図１
2005025786.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの実行により発生した一連のイベントが前記イベントの発生順序に従って、記録されたログを解析するログ解析方法であって、
前記イベントに関するプログラム記述の実行の際に参照可能であるメモリ領域を指定する指定ステップと、
指定されたメモリ領域に対する参照処理を伴うことに基づいて、前記一連のイベントの各イベントを分類するステップと、
参照処理を伴うメモリ領域ごとに、分類されたイベントを、前記イベントの発生順序に従って、記録した分類ログを複数生成するステップと、
生成された複数の分類ログをそれぞれ構成するイベントに基づいて、前記イベントを前記発生順序に従って記録したイベント列を生成するステップと、
前記イベント列のイベントと、前記複数の分類ログのそれぞれを構成するイベントとをそれぞれ比較し比較結果に基づいて、前記複数の分類ログを複数の変換ログに変換するステップと、
前記イベント列のイベントに関するプログラムの記述に基づいて、前記イベントの発生確率を前記発生順序ごとに、計算するステップと、
計算された発生確率に基づいて、発生頻度の低さを示す稀少度を計算する希少度計算ステップと、
計算された稀少度に基づいて、前記複数のログの各変換ログの特徴となるイベントに関する情報を出力するステップとを有することを特徴とするログ解析方法。
【請求項２】
前記指定ステップにおける指定は、イベントに関する所定のプログラム記述の実行の際に参照されるメモリ領域に対するものであることを特徴とする請求項１に記載のログ解析方法。
【請求項３】
前記指定ステップにおける指定は、領域の大きさが共通する複数のメモリ領域に対するものであることを特徴とする請求項１に記載のログ解析方法。
【請求項４】
前記希少度計算ステップにより計算された、前記発生順序のすべてにおける希少度に基づいて、前記複数の変換ログにおける変換ログの特徴を示す変換ログの特徴度を、前記変換ログごとに計算する特徴度計算ステップと、
前記特徴度計算ステップにより計算された、前記複数の変換ログの各々の特徴度を出力するステップとを有することを特徴とする請求項１乃至３のうちいずれか１つの請求項に記載のログ解析方法。
【請求項５】
プログラムの実行により発生した一連のイベントが前記イベントの発生順序に従って、記録されたログを解析するログ解析プログラムであって、コンピュータに、
前記イベントに関するプログラム記述の実行の際に参照可能であるメモリ領域を指定する指定ステップと、
指定されたメモリ領域に対する参照処理を伴うことに基づいて、前記一連のイベントの各イベントを分類するステップと、
参照処理を伴うメモリ領域ごとに、分類されたイベントを、前記イベントの発生順序に従って、記録した分類ログを複数生成するステップと、
生成された複数の分類ログをそれぞれ構成するイベントに基づいて、前記イベントを前記発生順序に従って記録したイベント列を生成するステップと、
前記イベント列のイベントと、前記複数の分類ログのそれぞれを構成するイベントとをそれぞれ比較し比較結果に基づいて、前記複数の分類ログを複数の変換ログに変換するステップと、
前記イベント列のイベントに関するプログラムの記述に基づいて、前記イベントの発生確率を前記発生順序ごとに、計算するステップと、
計算された発生確率に基づいて、発生頻度の低さを示す稀少度を計算する希少度計算ステップと、
計算された稀少度に基づいて、前記複数のログの各変換ログの特徴となるイベントに関する情報を出力するステップとを有する処理を実行させるためのログ解析プログラム。
【請求項６】
前記指定ステップにおける指定は、イベントに関する所定のプログラム記述の実行の際に参照されるメモリ領域に対するものであることを特徴とする請求項５に記載のログ解析プログラム。
【請求項７】
前記指定ステップにおける指定は、領域の大きさが共通する複数のメモリ領域に対するものであることを特徴とする請求項５に記載のログ解析プログラム。
【請求項８】
前記希少度計算ステップにより計算された、前記発生順序のすべてにおける希少度に基づいて、前記複数の変換ログにおける変換ログの特徴を示す変換ログの特徴度を、前記変換ログごとに計算する特徴度計算ステップと、
前記特徴度計算ステップにより計算された、前記複数の変換ログの各々の特徴度を出力するステップとを有する処理を実行させるための請求項５乃至７のうちいずれか１つの請求項に記載のログ解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの実行により得られたログを解析する方法、プログラムに関する。
【背景技術】
【０００２】
近年、ソフトウェア開発の分野において、対象プログラムの動作確認やいわゆるデバッグ作業のために、対象プログラムの実行動作により得られたログを利用するケースが増加している。具体的には、記録したイベントの情報からなるログを専用のビューアで表示してデバッグ作業の一助とするようなログベースのデバッグ手法が普及してきている。
【０００３】
収集するログの例としては、オペレーティングシステム（ＯＳ）を通じて一連のシステムコールの発行履歴を記録したものであったり、ハードウェア（あるいはエミュレータ）により一連のメモリアクセスの履歴を記録したものなどが挙げられる。これらにおいて、システムコールやメモリアクセスがイベントに相当する。
【０００４】
対象プログラムの実行動作により得られたログを用いてデバッグを行う場合、従来では次の２つの手法が知られている。
【０００５】
（１）１つの異常動作ログを丹念に調査してバグの原因を探す。
【０００６】
（２）正常動作した場合のログと異常動作した場合のログとを比較して違いを探し出し、これを集中的に調査する。
【０００７】
上記（１）については、ログ中においてどの箇所を重点的に調査すれば良いかなどの指針が無いので、ログの量が増大すると、これに応じてデバッグ作業にも手間がかかり、また熟練を要するという問題点がある。
【０００８】
上記（２）については、正常動作と異常動作の単純な違いだけに着目すると、その着目すべき箇所が多くなり過ぎて効率的なデバッグに繋がらないという問題点がある。
【０００９】
そこで、対象プログラムの実行時において発生した一連のイベントを記録した複数のログから特徴的なログを抽出し、関連するプログラムのコードを優先的に調査することにより、デバッグ効率の向上を実現する方式が提案されている（特願２００１−０６０６９９号、岡本渉、植木克彦他、“探針型デバッグ手法の提案”、“信学技報、Vol.100,No186,pp1-8(2000-7)岡本渉他、”探針型デバッグ手法の実現（１）−概要と評価”62回情報処理全国大会２Ｚ−２（2001-03）、田村文隆他、“探針型デバッグ手法の実現（２）−アルゴリズム”、６２回情報処理全国大会２Ｚ−２（2001-03）。
【００１０】
この提案では、対象プログラムの実行等において発生した一連のイベントの発生確率を計算して、動作ログの特徴を抽出している。そして、デバッグ作業者が、この動作ログの特徴となるイベントに関する情報を精密に調べることにより、プログラムのデバッグ作業を効率的なものとしている。
【００１１】
この際、従来技術では、イベントについては、デバッグ環境全体で予め定義されており、識別可能な事象としている。そして、実行されるプログラム記述の違い、実行順序の違いを考慮して、動作ログの特徴を抽出している。
【発明の開示】
【発明が解決しようとする課題】
【００１２】
一方、対象プログラムの実行時において、種々のデータのやりとりも行われており、ログとしてデータを記録することも可能である。このため、プログラム記述の違い、実行順序の違いに加えて、データの違いも考慮して動作ログの特徴を抽出することができれば、デバッグ作業に都合が良い。即ち、プログラム記述や実行順序の違いを考慮しただけでは、ログの特徴が抽出できない場合でも、データの違いを考慮すれば、ログの特徴が抽出できる可能性がある。
【００１３】
この場合、データの違いをどのように考慮するか重要となる。以下に例を用いて説明する。例えば、ｆ、ｇ、ｈは例えば、対象プログラムにおいて、実行される関数とする。対象プログラムを実行した結果、一連のイベントが発生し、動作ログが、上記イベントの発生順序に従って、以下のように記録されたものとする
。
【００１４】
ログ１：ｆ（−２）ｇ（１０）ｈ（１４）
ログ２：ｆ（１１）ｇ（１５）ｈ（１８）
ログ２：ｆ（１２）ｇ（１６）ｈ（１９）
ここで、かっこ内の数は、例えば、引数とする。引数をデータとして、データの違いを考慮して、ログの特徴を考える場合、単純に各ログを比較しても、各イベントの発生頻度が同じか、同程度となってしまい、ログの特徴を抽出することが困難な場合がある。一方、データの違いを考慮しない場合には、上述の例のように、プログラム記述、実行順序が同一となっている（ｆ、ｇ、ｈ）ようなときには、実際にバグがあっても、対処できない場合もある。
【００１５】
また、対象プログラムの実行時において、関数記述の実行で、メモリ領域にアクセスすることも考えられる。このため、データの違いの場合と同様に、メモリ領域へのアクセスの違いも考慮してログの特徴を抽出することができれば、デバッグ作業に都合が良い。
【００１６】
本発明はこのような事情を考慮してなされたものであり、対象プログラム記述や実行順序に加え、これら以外の事項の違いを考慮して、対象プログラムのデバッグに有益な情報を提供することができるログ解析方法、プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１７】
上記課題を解決するために、本発明は、同一のプログラムを複数回繰り返し実行することにより、発生したイベントを、実行回ごとに発生順序に従ってそれぞれ記録された複数のログを生成し、すべての発生順序において記録されたイベントに関するプログラムの記述が前記複数のログ間で、各々、共通する場合、前記
プログラムの記述及び該記述の実行の際に用いられるデータに基づいて、前記各イベントの発生確率を、前記発生順序ごとに、計算し、前記発生確率に基づいて、各ログの特徴となるイベントに関する情報を出力することを特徴とするものである。
【００１８】
また、本発明は、前記発生確率に基づいて、発生頻度の低さを示す稀少度を計算し、前記稀少度に基づいて、各ログの特徴となるイベントに関する情報を出力することもできる。
【００１９】
また、本発明は、前記複数のログをそれぞれ構成するイベントに基づいて、イベントを前記発生順序で記録したイベント列を生成し、前記イベント列のイベントと、前記各ログを構成するイベントとをそれぞれ比較し、比較結果に基づいて、前記複数のログをそれぞれ変換ログに変換し、前記イベントに関する前記プログラムの記述に基づいて、前記各イベントの発生確率を前記発生順序ごとに計算し、計算された発生確率に基づいて、発生頻度の低さを示す稀少度を計算し、計算された稀少度に基づいて、変換ログの特徴が存在するか否かを判定する判定する。そして、前記判定による判定結果に基づいて、前記プログラムの記述及び該記述の実行の際に用いられるデータに基づいて、前記各イベントの発生確率を、前記発生順序ごとに、計算することが好ましい。
【００２０】
また、本発明は、プログラムの実行により発生した一連のイベントが発生順序に従って、記録されたログを解析する際に、前記イベントに関するプログラム記述の実行の際に参照可能であるメモリ領域を指定し、前記指定されたメモリ領域に対する参照処理を伴うか否かに基づいて、各イベントを分類し、参照処理を伴うメモリ領域ごとに、分類されたイベントを、発生順序に従って、記録した複数の分類ログを生成し、前記各分類ログをそれぞれ構成するイベントに基づいて、イベントを前記発生順序で記録したイベント列を生成し、前記イベント列のイベントと、前記各分類ログを構成するイベントとをそれぞれ比較し、比較結果に基づいて、前記各分類ログをそれぞれ変換ログに変換し、前記イベントに関するプログラムの記述に基づいて、前記各イベントの発生確率を前記発生順序ごとに、計算し、前記発生確率に基づいて、発生頻度の低さを示す稀少度を計算し、前記稀少度に基づいて、各変換ログの特徴となるイベントに関する情報を出力することを特徴とするものである。
【００２１】
この際、前記メモリ領域を指定として、イベントに関する所定のプログラム記述の実行の際に参照されるメモリ領域に対して指定することができる。また、前記メモリ領域を指定として、領域の大きさが共通する複数のメモリ領域に対して指定することもできる。
【００２２】
また、本発明は、計算された各イベントの発生確率に基づいて、各変換ログの特徴度をそれぞれ計算し、前記各変換ログの特徴度を出力することもできる。
【発明の効果】
【００２３】
以上説明したように、本発明によれば、プログラム記述やイベント発生順序（プログラム記述実行順序）に加えて、データやメモリ領域への参照も考慮して、発生確率や稀少度を計算し、これらの発生確率や稀少度に基づいて、ログ特徴を抽出することができるので、プログラム記述や発生順序を考慮してもログ特徴が抽出できない場合でも、速やかに、ログ特徴を抽出することが可能となる。
【００２４】
従って、従来技術に比べて、作業者にとって一層デバッグ作業に効率的なログ解析方法、プログラムを提供することが可能となる。
【発明を実施するための最良の形態】
【００２５】
図１は、本発明の第１の概念を説明するための図である。この図を用いて、本発明の第１概念を説明する。
【００２６】
本発明の第１のログ解析方法は、先ず、同一のプログラム（プログラム１ａ）を複数回（３回）繰り返し実行することにより、発生したイベント（イベント２ａ，２ｂ等）を、実行回（ｉ＝１〜３）ごとに発生順序に従ってそれぞれ記録された複数のログ（ログ１，ログ２、ログ３）を生成するステップを有する。
【００２７】
そして、ログ解析方法は、すべての発生順序（発生順序１，２，３．．）において記録されたイベントに関するプログラムの記述（ｆ、ｇ等）が前記複数のログ間で、各々、共通する場合、前記プログラムの記述及び該記述の実行の際に用いられるデータ（ｆやｇの引数、（１０）、（２０）等）に基づいて、前記各イベント（イベント２ａ，２ｂ等）の発生確率を、前記発生順序（発生順序１，２，３）ごとに、計算するステップを有する。
【００２８】
そして、ログ解析方法は、前記発生確率に基づいて、各ログの特徴となるイベントに関する情報（ログ２，発生順序２番目のイベント、発生確率１５％）を出力するステップを有する。上述した概念に基づいて、本発明の実施の形態１について説明する。
【００２９】
また、図２は、本発明の第２の概念を説明するための図である。本発明に係るログ解析方法は、プログラム（３ａ）の実行により発生した一連のイベント（４ａ，４ｂ，４ｃ等）が発生順序に従って、記録されたログ（５）を解析するログ解析方法であって、前記イベントに関するプログラム記述の実行の際に参照可能であるメモリ領域（ａ１，ａ２，ａ３）を指定するステップと、指定されたメモリ領域（ａ１，ａ２，ａ３）に対する参照処理を伴うか否かに基づいて、各イベントを分類するステップと、参照処理を伴うメモリ領域（ａ１，ａ２，ａ３）ごとに、分類されたイベント（４ａ，４ｂ，４ｃ等）を、発生順序に従って、記録した複数の分類ログ（分類ログ１、分類ログ２、分類ログ３）を生成するステップと、前記各分類ログ（分類ログ１、分類ログ２、分類ログ３）をそれぞれ構成するイベント（ｆ（ａ１）、ｇ（ａ１）、ｈ（ａ１）、ｆ（ａ２）、ｇ（ａ２）、ｈ（ａ２）、ｆ（ａ３）、ｇ（ａ３）．．．）に基づいて、イベントを所定の順序で記録した所定のイベント列（６）を生成するステップと、所定のイベント列のイベントと、前記各分類ログを構成するイベントとをそれぞれ比較し、比較結果に基づいて、前記各分類ログ（分類ログ１、分類ログ２、分類ログ３）をそれぞれ変換ログ（変換ログ１、変換ログ２、変換ログ３）に変換するステップと、前記イベントに関するプログラムの記述（ｆ、ｇ等）に基づいて、前記各イベントの発生確率を前記発生順序ごとに、計算するステップと、前記発生確率に基づいて、発生頻度の低さを示す稀少度を計算するステップと、前記稀少度に基づいて、各ログの特徴となるイベントに関する情報（変換ログ３，発生順序３番目のイベント、発生確率３３％）を出力するステップとを有する。上述した概念に基づいて、本発明の実施の形態２について説明する。
【００３０】
実施の形態１．
（ログ解析装置の構成）
図３は、実施の形態１であるログ解析装置の構成を示すブロック図である。本装置は、デバッグの対象プログラム（以下、対象プログラム）の動作により出力されたログを入力し、デバッグ作業者（ユーザ）から与えられた種々の指定条件に応じて、ログを解析して、ログの特徴となる情報を出力する装置である。
【００３１】
ログ解析装置は、作業者がログを入力する入力部１０と、複数のログを生成するログ生成部１１と、イベント列生成部１２と、ログ変換部１３と、イベント発生確率計算部１４と、稀少度計算部１５と、稀少度判定部１６と、出力部１７とを有する。
【００３２】
入力部１０には、対象プログラムの実行時において成立した一連のイベントが発生順序に従って、記録されたログが入力される。ここで、対象プログラムの種別、数量等は任意であり、実行環境も任意である。
【００３３】
ログを準備するための対象プログラムの実行は、図示しないデバッガによる。イベントの収集・記録処理は、デバッガに組み込まれ、或いはデバッガとは別構成で協調動作する「トレーサ」により行なわれる。トレーサは対象プログラムの実行動作を追跡し、そのデバッグ実行動作単位（シーケンス）ごとに、成立（発生）した一連のイベントを発生順序に従ってログとして記録する。
【００３４】
ログ生成部１１は、入力部１０により入力されたログから、複数のログを生成する。例えば、同一のプログラムを複数回繰り返し実行することにより、発生したイベントを発生順序に従って記録されたログが入力部１０に入力された場合、ログ生成部１１は、入力されたログに基づいて、発生したイベントを実行回ごとに発生順序に従ってそれぞれ記録された複数のログを生成する。
【００３５】
イベント列生成部１２は、ログ生成部１１により生成された複数のログのイベントの傾向に基づいて、イベントを発生順序で記録したイベント列を生成する。
【００３６】
ログ変換部１３は、イベント列生成部１２により生成されたイベント列を用いることで、ログ生成部１１により生成された複数のログについて変換処理を行うことにより、複数の変換ログを生成する。具体的な処理は後述する。
【００３７】
イベント発生確率計算部１４は、前記イベントに関するプログラムの記述に基づいて、各イベントの発生確率を発生順序ごとに計算する。詳細な処理は後述する。
【００３８】
稀少度計算部１５は、イベント発生確率計算部１４により計算された各イベントについての発生確率に基づいて、各イベントについての稀少度を計算する。稀少度とは、そのイベントが発生したこと、あるいは発生しなかったことがどれだけ珍しい現象であるかを示す。例えば、稀少度の値が大きくなるほどそのイベントは（発生又は非発生が）珍しいということになる。本実施形態はこのような稀少度の値をログ特徴の根拠としている。
【００３９】
稀少度判定部１６は、稀少度計算部１５により計算された稀少度に基づいて、変換ログの特徴が存在するか否かを判定する。
【００４０】
出力部１７は、稀少度判定部１６により特徴が存在すると判定された場合には、変換ログの特徴となるイベントに関する情報を出力する。例えば、この情報として、変換ログ名、変換ログの内容、上述したイベントの発生順序、発生確率、稀少度等が出力される。
【００４１】
また、ログ解析装置は、データ値分類部１８を有する。データ値分類部１８は、稀少度判定部１６により特徴が存在しないと判断された場合、イベントに関するプログラムの記述の実行の際に用いられるデータに基づいて、各イベントについて、それぞれ、所定の分類基準に従って、分類情報を生成する。そして、データ値分類部１８は、各イベントに対して、生成された分類情報を付与する。
【００４２】
そして、上述したイベント発生確率計算部１４は、イベントに関するプログラムの記述と、与えられた分類情報に基づいて、イベントの発生確率を発生順序ごとに計算する。具体的な処理については、後述する。
【００４３】
そして、上述した稀少度計算部１５は、計算された発生確率に基づいて、発生頻度（又は非発生頻度）の低さを示す稀少度を計算する。上述した稀少度判定部１６は、稀少度計算部１５により計算された稀少度に基づいて、ログの特徴が存在するか否かを判定する。上述した出力部１７は、計算された稀少度に基づいて、各ログの特徴となるイベントに関する情報を出力する。
【００４４】
（ログ解析方法）  
図４は、上述した構成を有するログ解析装置を用いたログ解析方法を説明するためのフローチャート図である。
【００４５】
この対象プログラムについては、本実施の形態では、特に限定しない。このため、どのような言語で上記対象プログラムを記載した場合にも適用できるが、本実施の形態では、その一例として、図６に示すようなＣ言語で記載された対象プログラムを実行させた場合のログの解析方法を具体例として用いながら、説明する。
【００４６】
図６に示すプログラムでは、関数main 内で、関数f と関数k を、引数が0, 4, 8, 12, 16 の5 通りで呼び出している。関数f と関数kはともに、関数g 及び関数h を使い、テーブルprice とテーブルfee のデータを参照しながら、tax 値を計算している。即ち、同一プログラムを複数回（引数が0, 4, 8, 12, 16 ）繰り返して実行している。
【００４７】
ここで、上述したように、ｆ、ｇ、ｈ、ｋは対象プログラムの記述（関数記述）である。これらの関数は、実行時に参照した引数と関連づけられている。そして、イベントとは、デバッグ環境全体で予め定義されているものであり、識別可能な事象をいう。例えば、マウスが押されたとか、キー操作がされた等の事象である。そして、イベントが発生するためには、イベントごとにプログラム記述が必要であり、イベントの発生により、プログラム記述が実行され、必要に応じて引数データが参照される。
【００４８】
イベントの記録の仕方には種々の仕方があるが、本明細書では、その一例として、発生したイベントに関連する情報であるプログラムの記述や引数等を用いて記録することにより、イベントを記録する場合について説明する。
【００４９】
以下、上記イベントが記録されていることは、イベントに関する情報（プログラム記述や引数等）が記録されていることをいう。
【００５０】
先ず、ステップＳ１０では、作業者は、対象プログラムの動作により出力されたログを入力部１０により入力する。例えば、図に示すプログラムを複数回繰り返し実行する（ｍａｉｎ関数のｉを０、４，８，１２，１６に変えて実行）ことにより、発生したイベントを発生順序ごとに記録したログがデバッグから出力されたとする。この場合には、作業者は、上記ログを入力部１０により入力する。
【００５１】
ステップＳ１５では、ログ生成部１１は、入力されたログから複数のログを生成する。この処理について具体的に説明する。上記ログが入力部１０により入力された場合を考える。ログ生成部１１は、上記ログに基づいて、各イベントを、実行回（ｉ＝０、４，８，１２，１６）ごとに発生順序に従って、それぞれ記録された複数のログを生成する。このようにして生成された複数のログを図７に示す。図７において、実行回１（ｉ＝０）のとき発生したイベントを発生順序に従って、記録したログをログ１としている。同様にして、実行回２〜５のとき発生したイベントを発生順序に従って、記録したログをログ２〜５としている。
【００５２】
ステップＳ２０では、イベント列生成部１２は、複数のログ中のイベントの傾向に基づいて、イベントを発生順序で記録したイベント列を生成する。具体的には、イベント列生成部１２は、複数のログ中のイベントに関する情報（関数記述等）の傾向に基づいて、イベントに関する情報（関数記述等）を発生順序で記録したイベント列を生成する。
【００５３】
この処理について、図を用いて具体的に説明する。図７に示すように、各ログ（ログ１〜５）においては、各イベントがその発生順序で記録されている。そして、例えば、これらの複数のログは出力部１７に送られ、出力部１７から出力される。これにより、作業者は、複数のログ中のイベントの傾向がわかる。そして、作業者は、例えば、入力部１０により、イベントに関するプログラム関数記述を上記発生順序で記録されたイベント列（f g h g h g h g h k g h g h g h g h）を指定し、上記イベント列を生成する旨を入力する。
【００５４】
なお、イベント列は、後述する変換ログに変換するための基準となるものであるが、変換された変換ログの特徴が判定できるようにできれば、イベント列の指定の仕方については、特に本実施の形態では、限定しない。
【００５５】
そして、入力されたイベント列の生成の旨に基づいて、イベント列生成部１２は、イベント列を生成する。イベント列生成部１２により生成されたイベント列と、上記複数のログは、ログ変換部１３へ送られる。
【００５６】
ステップＳ３０では、ログ変換部１３は、生成されたイベント列のイベント（イベントに関する情報）と、各ログを構成するイベント（イベントに関する情報）とをそれぞれ比較し、比較結果に基づいて、各ログをそれぞれ変換ログに変換する。図７に示す複数のログを用いた具体的な処理を以下に示す。
【００５７】
ログ変換部１３は、発生順序ごとに、イベント列の各イベントに関するプログラム記述と、各ログの各イベントに関するプログラム記述とを比較する。そして、ログ変換部１３は、記述が一致する場合には、その記述を用いて変換ログのイベントに関する情報とする。そして、ある発生順序で、ログ中にイベントが記録されていない場合には、その旨を示す情報を変換ログのイベントに関する情報とする。
【００５８】
例えば、ログ１の発生順序２番目のイベントに関する関数記述はｇである。一方、イベント列の発生順序２番目のイベントに関する関数記述は、ｇである。このため、ログ変換部１３は、変換ログ１の発生順序２番目のイベントに関する情報として、ｇを用いる。
【００５９】
例えば、あるログの発生順序ｎ番目のイベントが記録されておらず、イベント列の発生順序ｎ番目のイベントに関する関数記述がｆである場合には、ログ変換部１３は、上記あるログの変換ログの発生順序ｎ番目のイベントに関する情報として、例えば、−マークを用いる。
【００６０】
ログ変換部１３は、上記変換処理により、イベントに関する情報を発生順序に従って記録することにより、変換ログを生成する。
【００６１】
ログ１〜５について上述のようにして変換処理した変換ログを図８に示す。図７に示す各ログについては、イベント列のイベントに関する関数記述が全て記録されているので、ログ変換部１３は、各ログに対する変換ログとして、f g h g h g h g h k g h g h g h g hを生成する。
【００６２】
一方、例えば、ログ５の代わりに、f g h g h g h g （  ）g h g h g h g hのように途中で関数ｋを用いたイベントが発生していないようなログ５Ｘが存在する場合には、各ログに対する変換ログは、図９に示すようになる。
【００６３】
なお、ログ変換部１３による変換処理は、他にも種々の方法があり、本実施の形態では、上述の方法に特に限定しない。そして、ログ変換部１３により生成された各変換ログは、イベント発生確率計算部１４へ送られる。また、ログ変換部１３は、各変換ログの内容を、図示しないレジスタ等に保持しておく。
【００６４】
ステップＳ４０では、イベント発生確率計算部１４は、イベントに関するプログラムの記述に基づいて、各イベントの発生確率を発生順序ごとに計算する。この各イベントとは、上記イベント列に記録された各イベントである。
【００６５】
イベント発生確率計算部１４は、ログ変換部１３が生成した各変換ログのイベントに関する情報を全て参照し、各発生順序において、イベントが発生したか否かを調べる。そして、イベント発生確率計算部１４は、各発生順序において、イベントの発生確率を計算する。この発生確率は、ある発生順序において、イベントが発生する確率を示すので、この発生確率や後述する稀少度により、イベントの発生が珍しいか否かを判断できる。
【００６６】
図８を用いて説明する。図８においては、イベント列の発生順序１番目の関数ｆを用いたイベント（以下、イベントｆという）が発生している変換ログ数は、５つであり、当該イベントｆの発生確率は、５（イベントｆが発生している変換ログ数）／５（全ての変換ログ数）となる。このようにして、イベント列の全ての発生順序について、イベントの発生確率を計算した結果を図１０に示す。図１０に示すように、各イベントの発生確率は、すべて１となる。
【００６７】
なお、例えば、図９に示すように、変換ログ５でなく、変換ログ５Ｘが用いられている場合には、イベント列の発生順序１０番目のイベントｋが発生しているのは、５つの変換ログ中４つであり、発生順序１０番目のイベントｋの発生確率は、４／５となる。このようにして、図９の場合の変換ログに対して、イベント列の全ての発生順序について、イベントの発生確率を計算した結果を図１１に示す。そして、各イベントの発生確率は、稀少度計算部１５に送られる。また、イベント発生確率計算部１４は、各イベントの発生確率を、図示しないレジスタ等に保持しておく。
【００６８】
ステップＳ５０では、稀少度計算部１５は、イベント発生確率計算部１４により計算された各イベントについての発生確率に基づいて、イベントの発生頻度の低さ又はイベントの非発生の頻度の低さを示す稀少度を計算する。
【００６９】
ここで、イベントの稀少度とは、そのイベントが発生したこと、発生しなかったことが、どれだけ珍しい現象であるかを示す。稀少度の定義の仕方には、種々の方法があり、本実施の形態では、特に限定しない。ここでは、その一例として、以下に示す式により、稀少度を定義し、稀少度の値が大きくなるほどそのイベントは（発生又は非発生）が珍しいということとする。
【００７０】
ある発生順序におけるイベントの発生確率をｐとしたとき、そのイベントが発生したことがどれだけ珍しいかを示す稀少度Ｒ１（発生頻度の低さ）は、そのイベントの発生確率をｐとして、例えば、以下の式で与えられる。
【００７１】
Ｒ１＝−ｌｏｇ（ｐ）
ここで、ｌｏｇは自然対数である。
【００７２】
一方、ある発生順序におけるイベントの発生確率をｐとしたとき、そのイベントが発生していないことがどれだけ珍しいかを示す稀少度Ｒ２（非発生頻度の低さ）は、そのイベントの発生確率をｐとして、例えば、以下の式で与えられる。
【００７３】
Ｒ２＝−ｌｏｇ（１−ｐ）
ここで、ｌｏｇは自然対数である。
【００７４】
そして、稀少度計算部１５は、変換ログにおいて、発生順序ごとに、イベントが発生している場合には、稀少度Ｒ１を計算し、イベントが発生していない場合には、稀少度Ｒ２を計算する。これらの計算結果は、変換ログ、発生順序と対応づけられる。このようにして図８に示す複数の変換ログに対して、稀少度を計算した結果を図１２に示す。図に示すように、変換ログ1〜5の全ての発生順序に対して、稀少度は、0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 と、全て0 となる。
【００７５】
一方、図９に示す複数の変換ログに対して、稀少度を計算した結果を図１３に示す。図に示すように、稀少度は、変換ログ1〜４の全ての発生順序に対して 0 0 0 0 0 0 0 0 0 0 0.1 0 0 0 0 0 0 0 となるが、変換ログ５Ｘの全ての発生順序に対しては、0 0 0 0 0 0 0 0 0 0 0.7 0 0 0 0 0 0 0 となる。変換ログ及び発生順序と対応づけられた稀少度は、稀少度判定部１６に送られる。
【００７６】
ステップＳ６０では、稀少度判定部１６は、稀少度計算部１５により計算された各イベントの稀少度に基づいて、各変換ログの特徴が存在するか否かを判定する。存在する場合には、ステップＳ１２０へ移行する。存在しない場合には、ステップＳ７０へ移行する。
【００７７】
図８に示す変換ログ1〜5の場合について先ず説明する。稀少度判定部１６は、各変換ログの発生順序に対して、計算された稀少度は、図１２に示すように、全て０であるので、各イベントが発生した頻度は高く、各イベントが発生したことは、あまり珍しくないということになる。この場合には、稀少度判定部１６は、各変換ログの特徴は存在しないと判定する。
【００７８】
これに対して、図９に示す変換ログ（１，２，３，４，５Ｘ）の場合について考える。この場合、各変換ログにおいては、発生順序１０番目以外の稀少度は、０である。一方、発生順序１０番目の稀少度は、変換ログ１〜４は、０．１であり、変換ログ５Ｘについては、０．７である。稀少度の高い値をもつ変換ログが存在するので、稀少度判定部１６は、変換ログの特徴があると判定し、変換ログ５Ｘの発生順序１０番目のイベントｋが発生しなかったことが特徴と判定する。
【００７９】
特徴があると判定した場合には、稀少度判定部１６は、変換ログ５Ｘの特徴（変換ログ５Ｘの発生順序１０番目のイベントｋが発生しなかったこと）の旨を出力部１７へ送る。また、稀少度判定部１６は、ログ変換部１３から、上記変換ログ（５Ｘ）の内容を読み出し、出力部１７へ送る。また、稀少度判定部１６は、上記変換ログの特徴となる発生順序（１０番目）のイベント（イベントｋ）の発生確率をイベント発生確率計算部１４から読み出し、出力部１７へ送る。また、稀少度判定部１６は、上記変換ログの特徴となる発生順序（１０番目）のイベント（イベントｋ）の稀少度も出力部１７へ送る。
【００８０】
ステップＳ１２０にて、出力部１７は、変換ログ名、変換ログの内容、発生順序、イベント、発生確率（又は非発生確率）、稀少度等を出力する。例えば、上述の場合には、出力部１７は、稀少度判定部１６から送られてきた情報（変換ログ５Ｘの特徴（変換ログ５Ｘの発生順序１０番目のイベントｋが発生しなかったこと）の旨、変換ログ（５Ｘ）の内容、上記変換ログ（５Ｘ）の特徴となる発生順序（１０番目）、その発生順序のイベント（イベントｋ）の発生確率、稀少度）を出力する。稀少度判定部１６は、変換ログの特徴が存在しないと判断した場合には、その旨をデータ値分類部１８に知らせる。
【００８１】
ステップＳ７０では、データ値分類部１８は、稀少度判定部１６により特徴が存在しないと判定された場合、イベントに関するプログラムの記述の実行の際に用いられるデータに基づいて、各イベントについて、それぞれ、所定の分類基準に従って、分類情報を生成する。そして、データ値分類部１８は、各イベントに対して、生成された分類情報を付与する。
【００８２】
図７を用いて具体的に説明する。データ値分類部１８は、所定の分類基準として、例えば、引数のデータ値が０以上であるか０未満であるかの基準に従って、分類情報を生成する。例えば、データ値分類部１８は、図７に示すログ１の発生順序５番目のイベント発生に用いられる関数ｈの引数値７０は、０以上であるので、０以上である旨を示す分類情報（＋マーク）を生成する。そして、データ値分類部１８は、その分類情報をログ１の発生順序５番目のイベント発生に用いられる関数ｈに与える。
【００８３】
同じようにして、データ値分類部１８は、ログ３の発生順序９番目のイベント発生に用いられる関数ｈの引数値−１０は、０未満であるので、０未満である旨を示す分類情報（−マーク）を生成する。そして、データ分類部は、その分類情報をログ３の発生順序９番目のイベント発生に用いられる関数ｈに与える。
【００８４】
このようにして、各イベントの発生に用いられる関数に分類情報を与えた後のログ結果を図１４に示す。
【００８５】
なお、分類基準については、ログ特徴が存在するような分類基準であれば本実施の形態では、特に限定しない。例えば、データ値を統計処理した結果に基づいて、分類基準を定めたり、プログラムのソースコードを用いた境界値分析等を用いることで、分類基準を定めることも可能である。また、複数の分類基準を設定し、データ値分類部１８は、複数の分類基準に従って、分類情報を生成することも可能である。
【００８６】
そして、データ値分類部１８は、分類情報が与えられた各ログをイベント発生確率計算部１４に送る。なお、データ値分類部１８は、分類情報が与えられた各ログを、図示しないレジスタ等に保持しておく。 
ステップＳ８０では、イベント発生確率計算部１４は、イベントに関するプログラムの記述（ｆ、ｇ、ｈ、ｋ）と、与えられた分類情報（＋、−）に基づいて、イベントの発生確率を発生順序ごとに計算する。
【００８７】
図１４を用いて説明する。図１４において、イベント発生確率計算部１４は、発生順序１番目のイベントの発生確率を以下のように計算する。即ち、分類情報＋が与えられた関数ｆを用いたイベント（以下、イベントｆ＋という）が発生しているログ数は、５つであり、当該イベントｆ＋の発生確率は、５（イベントｆ＋が発生しているログ数）／５（全ログ数）となる。
【００８８】
一方、発生順序９番目のイベントの発生確率を以下のように計算する。即ち、分類情報＋が与えられた関数ｈを用いたイベント（以下、イベントｈ＋という）が発生しているログ数は、４つであり、当該イベントｈ＋の発生確率は、４（イベントｈ＋が発生しているログ数／５（全てのログ数）となる。
【００８９】
このようにして、全ての発生順序について、各イベントの発生確率を計算すると、図１５に示すようになる。イベント発生確率計算部１４は、各イベントの発生確率を稀少度計算部１５に送る。なお、イベント発生確率計算部１４は、各イベントの発生確率を図示しないレジスタ等に保持しておく。 
ステップＳ９０では、稀少度計算部１５は、イベント発生確率計算部１４により計算された各イベントについての発生確率に基づいて、発生頻度の低さ又は非発生の頻度の低さを示す稀少度を計算する。イベントの稀少度Ｒ１，Ｒ２は、例えば、ステップＳ５０で示した式で表せる。
【００９０】
例えば、図１４に示すようなログ１、２，４，５において、発生順序（１〜１８）において、イベントが発生した場合には、稀少度Ｒ１、イベントが発生しなかった場合には、稀少度Ｒ２を計算すると、図１６に示すように、発生順序に対して、稀少度は、0 0 0 0 0 0 0 0 0.1 0 0 0 0 0 0 0 0 0 となる。
【００９１】
一方、ログ３において、発生順序（１〜１８）において、イベントが発生した場合には、稀少度Ｒ１、イベントが発生しなかった場合には、稀少度Ｒ２を計算すると、図16に示すように、発生順序に対して、0 0 0 0 0 0 0 0 0 0 0.7 0 0 0 0 0 0 0 となる。計算された各稀少度は、ログ及び発生順序と対応づけられて、稀少度判定部１６に送られる。
【００９２】
ステップＳ１００では、稀少度判定部１６は、稀少度計算部１５により計算された各イベントの稀少度に基づいて、各ログの特徴が存在するか否かを判定する。存在する場合には、ステップＳ１２０へ移行する。存在しない場合には、ステップＳ１１０へ移行する。
【００９３】
図１４に示すログ1〜5の場合について説明する。各ログにおいては、発生順序９番目以外の稀少度は、０である。一方、発生順序９番目の稀少度は、ログ１、２，４，５は、０．１であり、ログ３については、０．７である。ログ３の発生順序９番目の稀少度は高いので、稀少度判定部１６はログの特徴があると判定し、ログ３の発生順序９番目のイベントｈ＋が発生しなかったことが特徴と判定する。
【００９４】
特徴があると判定した場合には、稀少度判定部１６は、ログ３の特徴（ログ３の発生順序９番目のイベントｈ＋が発生しなかったこと）の旨を出力部１７へ送る。また、稀少度判定部１６は、データ値分類部１８から、分類情報が与えられたログ３の内容を読み出し、出力部１７へ送る。また、稀少度判定部１６は、ログ３の特徴となる発生順序（９番目）のイベント（イベントｈ＋）の発生確率をイベント発生確率計算部１４から読み出し、出力部１７へ送る。また、稀少度判定部１６は、上記ログ３の特徴となる発生順序（９番目）のイベント（イベントｈ＋）の稀少度も出力部１７へ送る。なお、特徴がないと判定された場合には、その旨が出力部１７に送られる。
【００９５】
ステップＳ１１０では、出力部１７は、特徴がない旨を出力する。これにより、作業者は、別のログを入力したり、分類基準を変更する旨を入力する等の動作
を行うことになる。
【００９６】
ステップＳ１２０にて、出力部１７は、ログ名、ログの内容、発生順序、イベント、発生確率（又は非発生確率）、稀少度等を出力する。例えば、上述の場合には、出力部１７は、稀少度判定部１６から送られてきた情報（ログ３の特徴（ログ３の発生順序９番目のイベントｈ＋が発生しなかったこと）の旨、ログ（３）の内容、上記ログ３の特徴となる発生順序（９番目）、その発生順序のイベント（イベントｈ＋）の発生確率、稀少度）を出力する。
【００９７】
これにより、ログを精査する作業者に有益なデバッグ支援情報が提供される。作業者は、上述した特徴を考慮してログ３の精査を行えばよいという指針を得ることができ、デバッグ作業を効率的に行うことができる。例えば、作業者は、ログ３について、９番目のイベントｈ＋が発生しなかったことから、ログ３に関するプログラム実行において、イベント発生に関する関数のうち、発生順序９番目に登場する関数ｈの引数に０未満のデータ値が用いられることに関して、デバッグ作業を行えば、デバッグを解消できる可能性が高く、デバッグ作業を効率的に行える。
【００９８】
なお、ログを解析する第１の処理として、以下のステップＳ１０からＳ６０までの処理では、データ値（引数値）を考慮しないで、ログ解析を行う。関数の違いや、その関数の実行順序（イベントの発生順序）の違いをデータの違いに優先して考慮してログ解析を行うことで、ログの特徴を正しく抽出できるからである。
【００９９】
（作用効果）
本実施の形態によれば、先ず、イベントに関するプログラム記述に基づいて、発生順序ごとに、イベントの発生確率や稀少度を計算し、発生順序ごとに、イベントの発生、発生しないことが珍しい（特徴的か）を判定して、変換ログの特徴が存在するか否かを判定する。そして、特徴が存在すれば、その特徴となるイベントに関する情報が出力される。
【０１００】
このように、本実施の形態では、先ず、プログラム記述の実行の際に用いられるデータを考慮しないで、計算された稀少度に基づいて、変換ログの特徴が存在するか否かを判定し、特徴が存在しない場合でも、再度、入力するログを考えたり、ログの解析方法を考えたりせず、以下のようにして効率的にログを解析することができる。
【０１０１】
即ち、上記特徴が存在しない場合でも、イベントに関するプログラムの記述及び該記述の実行の際に用いられるデータに基づいて、前記各イベントの発生確率を、前記発生順序ごとに、計算し、発生確率又は稀少度に基づいて、各ログの特徴となるイベントに関する情報を出力することができる。このため、プログラム記述やイベント発生順序（プログラム記述実行順序）に加えて、データも考慮して、発生確率や稀少度を計算し、これらの発生確率や稀少度に基づいて、ログ特徴を抽出することができるので、プログラム記述や発生順序を考慮してもログ特徴が抽出できない場合でも、速やかに、ログ特徴を抽出することが可能となる。
【０１０２】
従って、従来技術に比べて、作業者にとって一層デバッグ作業に効率的なログ解析装置、方法を提供することが可能となる。
【０１０３】
（実施の形態１の変形例１）
なお、ログ解析装置は、すべての発生順序において記録されたイベントに関するプログラム記述が上記複数のログ間で共通するか否かを判定する判定部（図示せず）を設けるようにしてもよい。
【０１０４】
そして、ステップＳ１０の後、判定部（図示せず）が、複数のログについて、上記判定を行い、共通する場合（例えば、図７のケースのような場合であって、複数のログ１〜５において、すべての発生順序１〜１８でプログラム記述（ｆ、ｇ等）が共通している場合である）には、ステップＳ１０からステップＳ６０の処理を行わず、ステップＳ７０からＳ１２０の処理を行うようにしてもよい。この場合には、プログラム記述だけを考慮してログ解析しても、ログの特徴が抽出できないからである。一方、共通しない場合には、ステップＳ２０からＳ６０の処理を行うようにする。
【０１０５】
（実施の形態１の変形例２）
ログ解析装置は、特徴度計算部（図示せず）を設けても良い。特徴度計算部は、計算された各イベントの発生確率に基づいて、各ログ（変換ログ等）の特徴度を計算することができる。上述のフローチャート図においては、例えば、ステップＳ８０で各イベントについての発生確率について計算した後、以下の処理を行うようにしてもよい。
【０１０６】
即ち、各イベントについての発生確率が特徴度計算部へ送られる。特徴度計算部は、各ログの発生順序に対して、イベントが発生している場合には、イベントの発生確率を、イベントが発生していない場合には、１−発生確率（非発生確率）を与えたマトリックスを生成する（図１７）。
【０１０７】
そして、特徴度計算部は、図１７に示すように、各ログごとに、各発生順序に与えられた発生確率又は非発生確率を乗算することで、特徴度を計算する。例えば、図１７のような場合では、ログ１，２、４，５は、０．８であるのに対して、ログ３は０，２となる。このため、この特徴度が出力されれば、ログ３が特徴ログと作業者が判断できる。
【０１０８】
同様に、上述のフローチャート図において、ステップＳ４０で各イベントについての発生確率について計算した後、上記特徴度計算部による各変換ログの特徴度の計算を行って、その特徴度が出力部１７により出力されるようにしても良い。また、特徴計算部は、計算された各稀少度に基づいて、各ログの特徴度を計算することも可能である。
【０１０９】
上述のフローチャート図においては、例えば、ステップＳ９０で各稀少度について計算した後、以下の処理を行うようにしてもよい。図１８を用いて具体的に説明する。稀少度計算部１５により計算された各稀少度が特徴度計算部へ送られる。特徴度計算部は、各ログごとに、各発生順序に与えられた稀少度を加算することで、特徴度を計算する。
【０１１０】
例えば、図１８のような場合では、ログ１，２、４，５は、０．１であるのに対して、ログ３は０，７となる。このため、この特徴度が出力されれば、ログ３が特徴ログと作業者が判断できる。
【０１１１】
同様に、上述のフローチャート図において、ステップＳ５０で各イベントについての発生確率について計算した後、上記特徴度計算部による各変換ログの特徴度の計算を行って、その特徴度が出力部１７により出力されるようにしても良い。このような特徴度計算部による計算結果を用いれば、ログの特徴を速やかに作業者が知ることができる。
【０１１２】
実施の形態２．
実施の形態２では、プログラムの記述や実行順序を考慮してもログ特徴が抽出できない場合でも、メモリ領域への参照も考慮して、ログ解析を行うことで、ログ特徴を抽出するログ解析装置、方法を提供することを目的としている。
【０１１３】
図１９は、実施の形態２であるログ解析装置の構成を示す図である。図において、実施の形態１の構成と同一構成については同一符号を付してその説明を省略する。実施の形態２のログ解析装置の構成において、実施の形態１のログ解析装置の構成と異なる点は、以下の点にある。
【０１１４】
ログ解析装置は、ログ生成部１１を有せず、領域指定部２０、ログ分類部２１、分類ログ生成部２２、特徴度計算部１９を有する。
【０１１５】
領域指定部２０を用いて、イベント発生に用いられるプログラム記述の実行の際に参照可能であるメモリ領域を作業者が指定する。例えば、作業者が対象プログラム中で用いられている配列変数を指定する。これは、その配列変数のメモリ領域に対して、どのような関数が実行の際に参照したかについて、ログとして記録される。このため、例えば、所定の配列変数にバグがありそうだという情報を予め取得している場合には、作業者は、上記配列変数を領域指定部２０を用いて指定することで、後述するログ解析により、デバッグ作業に有効な情報が得られる可能性があるからである。
【０１１６】
ログ分類部２１は、指定されたメモリ領域に対する参照処理を伴うか否かに基づいて、各イベントを分類する。分類ログ生成部２２は、参照処理を伴うメモリ領域ごとに、分類されたイベントを、発生順序に従って、記録した複数の分類ログを生成する。具体的な処理は後述する。特徴計算部は、稀少度計算部１５により計算された各稀少度に基づいて、各ログの特徴度を計算する。  
（ログ解析方法）
図２０は、上述したログ解析装置を用いたログ解析方法を示すフローチャート図である。本実施の形態では、一例として、図２１に示すようなＣ言語で記載された対象プログラムを実行させた場合に得られるログの解析方法を具体例として用いながら、説明する。
【０１１７】
上記対象プログラムにおいては、関数main から、関数init、clean、calc をそれぞれ12 回（i=１〜12）、3 回（i=４，８，１２）、4 回（i=３，６，９、１２）呼び出している。本プログラムでは、関数init、関数cleanがあるメモリ領域を参照した場合、そのメモリ領域に対して、関数ｃalcは参照してはいけないのだが、i=12 の時にvals〔１２〕のメモリ領域に対して参照してしまっている。以下、このバグを見つけるのに有効な情報をログ特徴として出力する処理を具体例として用いながら、実施の形態２のログ解析方法について説明する。
【０１１８】
先ず、実施の形態１で示すステップＳ１０で、作業者は、対象プログラムの実行により発生した一連のイベントが発生順序に従って、記録されたログを入力部１０により入力する。図２１に示す対象プログラムを実行した結果のログを図２２に示す。実行結果として、このようなログしか得られなかった場合、又は予め、所定の配列変数への参照段階にバグがありそうだという情報を取得していたような場合には、その旨を作業者が入力部１０により入力する。これにより、上記その旨が各部に送られ、上述した実施の形態１の処理ではなく、以下のような処理が行われる。このようなログに対しては、従来技術や、実施の形態１のログ解析方法ではログ特徴を抽出できないからである。
【０１１９】
ステップＳ２００では、作業者は、プログラム中で用いられている所定の配列変数の領域（以下、単に配列変数という）を領域指定部２０を用いて、指定する。
【０１２０】
図２２に示すログが得られたような場合には、例えば、作業者は、領域指定部２０を用いて配列変数vals[1]〜[12]（プログラムにおいてどの関数や記述コードも共通に参照できるグローバル配列変数） を指定する。指定された全ての配列変数及び入力されたログは、ログ分類部２１へ送られる。
【０１２１】
ステップＳ２１０では、ログ分類部２１は、各イベントの発生にあたって、領域指定部２０により指定された配列変数に対する参照処理を伴うか否かに基づいて、ログ中の各イベントを分類する。図２２を用いて説明する。
【０１２２】
例えば、配列変数vals[1]の参照処理を伴うイベントに関するプログラム記述は、init；vals[1]であり、配列変数vals[２]の参照処理を伴うイベントに関するプログラム記述は、init；vals[２]であり、配列変数vals[３]の参照処理を伴うイベントに関するプログラム記述は、init；vals[３]、calc；vals[3]であり、．．．のようにして、ログ分類部２１は、参照している配列変数vals[ｉ]（ｉ＝１から１２）に基づいて、各イベントを分類する。
【０１２３】
ステップＳ２２０では、分類ログ生成部２２は、分類されたイベントを、発生順序に従って、記録した複数の分類ログを生成する。図２２を用いて具体的に説明する。分類ログ生成部２２は、ステップＳ２１０にて分類された各イベントに基づいて、配列変数vals[1]の参照処理を伴うイベントに関するプログラム記述を、発生順序に従って、記録したログである分類ログ１を生成する。同様にして、分類ログ生成部２２は、配列変数vals[2]の参照処理を伴うイベントに関するプログラム記述を、発生順序に従って、記録したログである分類ログ２を生成する。このようにして、分類ログ生成部２２は、複数の分類ログ１〜１２を生成する（図２３）。そして、分類ログ生成部２２は、生成した複数の分類ログをログ変換部１３へ送る。
【０１２４】
ステップＳ２３０では、ログ変換部１３は、各分類ログを、それぞれ、変換ログに変換する。先ず、分類ログ生成部２２から複数の分類ログがログ変換部１３へ送られると、ログ変換部１３は、イベント列生成部１２に対して、所定のイベント列を生成するように指示する。イベント列生成部１２は、分類ログ生成部２２により生成された複数の分類ログのイベント（イベントに関する情報）の傾向に基づいて、イベント列を生成する。例えば、図２３のような場合には、イベント列生成部１２は、各分類ログに記録されているイベントに関するプログラム記述を発生順序に記録したイベント列（ｉｎｉｔ；ｖａｌｓ，ｃｌｅａｎ；ｖａｌｓ，ｃａｌｃ；ｖａｌｓ）を生成する。
【０１２５】
ログ変換部１３は、発生順序ごとに、イベント列の各イベントに関するプログラム記述と、各分類ログの各イベントに関するプログラム記述とを比較する。そして、ログ変換部１３は、記述が一致する場合には、その記述を用いて変換ログのイベントに関する情報とする。そして、ある発生順序で、分類ログ中にイベントが記録されていない場合には、その旨を示す情報を変換ログのイベントに関する情報とする。
【０１２６】
例えば、分類ログ１の記録順序１番目のイベントに関する記述はｉｎｉｔ；ｖａｌｓであり（配列数は考慮しない）、イベント列の発生順序１番目のイベントに関する記述は、ｉｎｉｔ；ｖａｌｓである。このため、ログ変換部１３は、変換ログ１の発生順序１番目のイベントに関する情報として、ｉｎｉｔ；ｖａｌｓを用いる。
【０１２７】
また、例えば、分類ログ１の記録順序２番目のイベントが記録されておらず、イベント列の発生順序２番目のイベントに関する記述は、ｃｌｅａｎ；ｖａｌｓである場合には、ログ変換部１３は、例えば、変換ログ１の発生順序２番目のイベントに関する情報として、イベントは存在しない旨を示す−マークを用いる。
【０１２８】
また、分類ログ３の記録順序２番目のイベントに関する記述はｃａｌｃ；ｖａｌｓである場合、イベント列の発生順序２番目のイベントに関する記述ｃｌｅａｎ；ｖａｌｓとは一致しないが、イベント列の発生順序３番目のイベントに関する記述ｃａｌｃ；ｖａｌｓと一致するので、ログ変換部１３は、変換ログ３の発生順序３番目のイベントに関する情報として、ｃａｌｃ；ｖａｌｓを用いる。この場合、ログ変換部１３は、変換ログ３の発生順序２番目のイベントに関する情報として、イベントは存在しない旨を示す−マークを用いる。
【０１２９】
このような変換規則に従って、ログ変換部１３が、分類ログ１〜５についてそれぞれ変換処理した変換ログ１〜５を図２４に示す。
【０１３０】
なお、ログ変換部１３による変換処理は、他にも種々の方法があり、本実施の形態では、上述の方法に特に限定しない。生成された各変換ログはイベント発生確率計算部１４に送られる。また、ログ変換部１３は、各変換ログの内容は、図示しないレジスタ等に保持しておく。
【０１３１】
ステップＳ２４０では、イベント発生確率計算部１４は、イベントに関する前記プログラムの記述に基づいて、各イベントの発生確率を発生順序ごとに計算する。図２４を用いて説明する。図２４においては、イベント列の発生順序１番目のｉｎｉｔ；ｖａｌｓを用いたイベント（以下、イベントｉｎｉｔ）が発生している変換ログ数は、１２つであり、当該イベントｉｎｉｔの発生確率は、１２（イベントが発生している変換ログ数）／１２（全ての変換ログ数）となる。イベント列の発生順序２番目のｃｌｅａｎ；ｖａｌｓを用いたイベント（以下、イベントｃｌｅａｎ）が発生している変換ログ数は、３つであり、当該イベントの発生確率は、３（イベントが発生している変換ログ数）／１２（全てのログ変換数）となる。
【０１３２】
イベント列の発生順序３番目のｃａｌｃ；ｖａｌｓを用いたイベント（以下、イベントｃａｌｃ）が発生している変換ログ数は、４つであり、当該イベントの発生確率は、４（イベントが発生している変換ログ数）／１２（全ての変換ログ数）となる。
【０１３３】
このようにして計算された各イベントの発生確率を図２５に示す。計算された各イベントの発生確率は、稀少度計算部１５へ送られる。なお、イベント発生確率計算部１４は、各イベントの発生確率を、図示しないレジスタ等に保持しておく。
【０１３４】
ステップＳ２５０では、稀少度計算部１５は、イベント発生確率計算部１４により計算された各イベントについての発生確率に基づいて、発生頻度の低さ又は非発生の頻度の低さを示す稀少度を計算する。
【０１３５】
例えば、図２４に示すような変換ログ１〜１２において、発生順序（１〜３）において、ステップＳ５０と同様にして、イベントが発生した場合には、稀少度Ｒ１、イベントが発生しなかった場合には、稀少度Ｒ２を計算すると、変換ログ1〜１２の全ての発生順序（１〜３）に対して、稀少度は、図２６に示す結果となる。計算された各稀少度は、変換ログ及び発生順序と対応づけられて、稀少度判定部１６に送られる。
【０１３６】
ステップＳ２５５では、稀少度判定部１６は、稀少度計算部１５により計算された各イベントの稀少度に基づいて、各変換ログの特徴が存在するか否かを判定する。存在する場合には、ステップＳ２５７へ移行する。存在しない場合には、ステップＳ２６０へ移行する。
【０１３７】
存在する場合には、ステップＳ２５７にて、変換ログの特徴となるイベントに関する情報が出力部１７にて出力される。ここで、特徴となるイベントに関する情報は、実施の形態１の場合と同様に、各部から稀少度判定部１６を介して、出力部１７に送られる。
【０１３８】
図２６の場合には、特徴といえる稀少度（値の大きな稀少度）と、特徴といえない稀少度（値の小さな稀少度）が同等の割合で混在しているので、例えば、稀少度判定部１６は、特徴が存在しないと判定する。存在しない場合には、稀少度判定部１６は、その旨と、ログ及び発生順序と対応づけられた稀少度とを特徴度計算部１９へ送る。
【０１３９】
ステップＳ２６０では、特徴度計算部１９は、計算された各稀少度に基づいて、各ログの特徴度を計算する。図２６を用いて具体的に説明する。稀少度計算部１５により計算された各稀少度が特徴度計算部１９へ送られる。なお、特徴度計算部１９には、ログ変換部１３から全ての変換ログの内容が送られ、イベント発生確率計算部１４から各イベントの発生確率も送られる。
【０１４０】
特徴度計算部１９は、例えば、各ログごとに、各発生順序に与えられた稀少度の総和をとることで、特徴度を計算する。例えば、図２６のような場合では、変換ログ１の特徴度は、０（発生順序１の稀少度）＋０．１２（発生順序２の稀少度）＋０．１７（発生順序３の稀少度）＝０．２９となる。このようにして計算された、すべての変換ログ１〜１２の特徴を図２７に示す。特徴度計算部１９は、計算された各特徴度のうち、最大の特徴度を有する変換ログ、変換ログの内容、発生順序における稀少度、特徴度を出力部１７に送る。図２７に示す場合には、変換ログ１２の特徴度が１．０８と他の変換ログの特徴度と比較して高いので、変換ログ１２に関する情報が出力部１７に送られる。
【０１４１】
ステップＳ２６５では、出力部１７では、最大の特徴度を有する変換ログに関する情報（最大の特徴度を有する変換ログ名、上記変換ログの特徴度、変換ログの内容（ログに記録されているイベント）、各発生順序の稀少度等）が出力される。なお、最大の特徴度を有する変換ログが存在しない場合（全ての変換ログの特徴度が０のような場合）には、出力部１７に、特徴度計算部からすべての変換ログに関する情報が送られ、出力部１７で、すべての変換ログに関する情報が出力されるようにしてもよい。
【０１４２】
これにより、ログを精査する作業者に有益なデバッグ支援情報が提供される。作業者は、上述した特徴を考慮して変換ログ１２の精査を行えばよいという指針を得ることができ、デバッグ作業を効率的に行うことができる。
【０１４３】
なお、領域指定部２０７ では、vals[1]〜vals[12] までの領域を指定したが、代わりに関数calc で参照されるvals[i] を指定して、vals[3]、vals[6]、vals[9]、vals[12] の領域を指定することも可能である。例えば、ステップＳ２６５で、最大の特徴度が他の特徴度と比較して、差が少ないような場合や、全ての特徴度の値が同じような場合には、ステップＳ２００で、作業者は、別の配列領域を指定し、上述の処理（ステップＳ２００からＳ２６５）を行うことも可能である。
【０１４４】
また、実施の形態１の変形例２と同じようにして、特徴度計算部１９は、計算された各イベントの発生確率に基づいて、各変換ログの特徴度を計算することもできる。例えば、特徴度計算部１９は、各変換ログの発生順序に対して、イベントが発生している場合には、イベントの発生確率を、イベントが発生していない場合には、１−発生確率（非発生確率）を与えたマトリックスを生成する（図２８）。
【０１４５】
そして、特徴度計算部１９は、実施の形態１の変形例２と同様にして、各変換ログごとに、各発生順序に与えられた発生確率又は非発生確率を乗算することで、特徴度を計算する。そして、計算された特徴度のうち、最小の特徴度の変換ログに関する情報を出力部１７に出力するようにしてもよい。
【０１４６】
また、実施の形態１と同様に、全ての発生順序において、記録されたイベントに関するプログラム記述が複数の分類ログ間で各々共通する場合には、メモリ領域に格納されたデータを考慮し、ステップＳ７０からステップＳ１２０の処理を行うことも可能である。
【０１４７】
（作用効果）
本実施の形態では、発生したイベントに関するプログラム記述の実行の際に参照可能であるメモリ領域を指定し、参照処理を伴うメモリ領域ごとに、分類されたイベントを、発生順序に従って、記録した複数の分類ログを生成する。そして、分類ログが変換ログに変換された後、前記イベントに関するプログラムの記述に基づいて、前記各イベントの発生確率を前記発生順序ごとに、計算して、発生確率又は稀少度に基づいて、各変換ログの特徴となるイベントに関する情報を出力することができる。このため、プログラム記述やイベント発生順序（プログラム記述実行順序）に加えて、メモリ領域に対する参照処理も考慮して、発生確率や稀少度を計算し、これらの発生確率や稀少度に基づいて、ログ特徴を抽出することができるので、プログラム記述や発生順序を考慮してもログ特徴が抽出できない場合でも、速やかに、ログ特徴を抽出することが可能となる。
【０１４８】
従って、従来技術に比べて、作業者にとって一層デバッグ作業に効率的なログ解析装置、方法を提供することが可能となる。
【０１４９】
（実施の形態２の適用例１）
適用例１では、領域指定部２０による指定として、イベントに関する所定プログラム記述の実行の際に参照されるメモリ領域に対する指定を作業者が行った場合について以下に説明する。
【０１５０】
領域指定部２０を用いて作業者は、イベント発生に用いられる所定のプログラム記述の実行の際に参照されるメモリ領域を指定する。例えば、対象プログラム中で用いられている所定の関数の引数として用いられる変数を指定する。このように指定するのは、以下の理由のためである。即ち、その変数のメモリ領域に対して、どのような関数記述等が参照したかについて、ログとして記録される。このため、所定関数の引数として用いられる変数の使い方にバグがありそうだという情報を予め取得している場合には、作業者は、上記変数を領域指定部２０を用いて指定することで、後述するログ解析により、ログ特徴が抽出できる可能性が高くなるからである。
【０１５１】
（ログ解析方法）
上述した適用例１に係るログ解析装置を用いたログ解析方法について、以下に説明する。
【０１５２】
先ず、作業者は、プログラムの実行により出力されたログを取得する。例えば、対象プログラムとして、図２９に示すプログラムについて考える。本プログラムでは、class A 型の変数a1 とa3 に関し、変数a1 については関数mainと関数gで参照しており、変数a3 については関数main で参照している。また、class A 型の変数a2 を関数f と関数gで参照している。
【０１５３】
対象プログラム実行時にトレーサ等により記録されたログを図３０に示す。このログにおいては、イベント発生に用いられるプログラム記述と、その記述の実行時に参照したメモリ領域と、メモリ領域に格納したデータ値が発生順序に従って、記録されている。例えば、発生順序３番目のイベントに関する記録は、「a1.height = 10;a1:0x10010, a1.height:0x10010 = 10」である。ここで、３番目のイベントの発生にあたって、プログラム記述「a1.height = 10;」を実行したこと、先頭アドレスが0x10010 である変数a1 を参照したことと、先頭アドレスが0x10010 であるa1.height にデータ値10 を格納したことが記録されている。
【０１５４】
適用例１に係るログ解析方法について、図２０に示すフローチャート図を用いて以下に説明する。ステップＳ２００では、作業者は、プログラム中で用いられている所定の変数の領域（以下、単に変数という）を領域指定部２０を用いて、指定する。
【０１５５】
図３０に示すログが得られたような場合において、作業者は、例えば、関数gの引数であるA 型の変数「「a」を指定した場合について考える。図２９に示すプログラムでは、関数gの引数であるA 型の変数は、ログ中の内容（g(a1); a1:0x10010、g(a2); a2:0x10020）から変数ａ１，ａ２であるとわかるので、作業者は、領域指定部２０を用いて、変数領域a1:0x10010、変数領域a２:0x100２0を指定する。
【０１５６】
なお、作業者が「ｇ（（a）」を指定することで、自動的に変数ａ１，ａ２を指定できるようにしてもよい。即ち、領域指定部２０に、ログ内容が送られる。そして、作業者のｇ（（a）の指定に基づいて、領域指定部２０は、ログ内容を探索して、変数領域a1:0x10010、変数領域a２:0x100２0を指定するようにしてもよい。指定された全ての変数及び入力されたログは、ログ分類部２１へ送られる。
【０１５７】
ステップＳ２１０では、ログ分類部２１は、各イベントの発生にあたって、領域指定部２０により指定された変数に対する参照処理を伴うか否かに基づいて、ログ中の各イベントを分類する。図３０を用いて説明する。
【０１５８】
例えば、ログにおいて、変数ａ１の参照処理を伴うイベントに関するプログラム記述は、図に示すA a1、a1.height、a１.width、ｇ（a1）、area＝a1.height*a１.widthであり、また、変数ａ２の参照処理を伴うイベントに関するプログラムの記述は、A a２、a２.height、a2.width、ｇ（a２）、area＝a２.height*a2.widthであるようにして、ログ分類部２１は、変数ａ１、ａ２への参照処理に基づいて、各イベントを分類する。
【０１５９】
ステップＳ２２０では、分類ログ生成部２２は、分類されたイベントを、発生順序に従って、記録した複数の分類ログを生成する。図３０を用いて具体的に説明する。分類ログ生成部２２は、ステップＳ２１０にて分類された各イベントに対して、変数ａ１の参照処理を伴うイベントに関するプログラム記述を、発生順序に従って、記録したログである分類ログ１を生成する。同様にして、分類ログ生成部２２は、分類ログ２を生成する。生成された複数の分類ログの一例を図３１、図３２に示す。分類ログの形態としては、いずれの形態でもよい。そして、分類ログ生成部２２は、生成した複数の分類ログをログ変換部１３へ送る。
【０１６０】
そして、以下、ステップＳ２３０以下の処理が行われる。各処理の方法は、実施の形態２で説明したとおりである。この際、イベントの識別にあたっては、データ値の違いは考慮しない。
【０１６１】
図３２に示す場合では、ステップＳ２３０にて、イベント列をA a、a.height、a.width、ｇ、area＝a.height*a.widtｈとし、実施の形態２で示したように、分類ログを変換ログに変換し、各イベントの発生確率や稀少度を計算し、ログの特徴を出力するようにしてもよい。図３２の場合には、全てのイベントの発生確率は、１なので、Ｓ２６０では、すべての変換ログの特徴度は、０となり、出力部１７にすべての変換ログに関する情報が出力されても、作業者は、変換ログの特徴はないと判断できる。その後、実施の形態１のように、引数（ａ１，ａ２）のデータ値を考慮して、ステップＳ７０以下の処理を行うようにしてもよい。なお、ステップＳ２２０の後、各分類ログの内容を出力部１７により出力させ、プログラム記述上の特徴の有無を出力させるようにしてもよい。
【０１６２】
（実施の形態２の適用例２）
適用例２では、領域指定部２０による指定として、領域の大きさが共通する複数のメモリ領域に対する指定を作業者が行った場合について以下に説明する。
【０１６３】
領域指定部２０により作業者は、領域の大きさが共通する複数のメモリ領域を指定することができる。例えば、整数型変数領域、文字型変数領域等を指定することができる。ここでは、一例として、class  Ａ型変数領域を指定した場合について考える。
【０１６４】
（ログ解析方法）
上述した適用例２に係るログ解析装置を用いたログ解析方法について、以下に説明する。
【０１６５】
先ず、作業者は、プログラムの実行により出力されたログを取得する。対象プログラム、プログラム実行時に記録されたログは、適用例１の場合と同じものを考える。適用例２に係るログ解析方法について、図２０に示すフローチャート図を用いて以下に説明する。
【０１６６】
ステップＳ２００では、作業者は、プログラム中で用いられている所定の変数の領域（以下、単に変数という）を領域指定部２０を用いて、指定する。
【０１６７】
図３０に示すログが得られたような場合には、作業者は、例えば、class  Ａ型変数領域を指定した場合について考える。図２９に示すプログラムでは、class  A 型の変数は、ログ中の内容（Ａ  a1; a1:0x10010、Ａ  a2; a2:0x10020、Ａ  a３; a2:0x10030、）から変数ａ１，ａ２，ａ３であるとわかるので、作業者は、領域指定部２０を用いて、変数領域a1:0x10010、変数領域a２:0x10020，変数領域a３:0x10030を指定する。
【０１６８】
なお、適用例１と同じく、作業者が「class A型」を指定することで、自動的に変数ａ１，ａ２、ａ３を指定できるようにしてもよい。即ち、領域指定部２０に、ログ内容が送られる。そして、作業者の指定に基づいて、領域指定部２０は、ログ内容を探索して、変数領域a1:0x10010、変数領域a２:0x10020，変数領域a３:0x10030，を指定するようにしてもよい。指定された全ての変数及び入力されたログは、ログ分類部２１へ送られる。
【０１６９】
ステップＳ２１０では、ログ分類部２１は、各イベントの発生にあたって、領域指定部２０により指定された変数に対する参照処理を伴うか否かに基づいて、ログ中の各イベントを分類する。図３０を用いて説明する。
【０１７０】
図３０に示すログにおいて、変数ａ１の参照処理を伴うイベントに関するプログラム記述は、図に示すA a1、a1.height、a１.width、ｇ（a1）、area＝a1.height*a１.widthであり、また、変数ａ２の参照処理を伴うイベントに関するプログラムの記述は、A a２、a２.height、a2.width、ｇ（a２）、area＝a２.height*a2.widthであり、変数ａ３の参照処理を伴うイベントに関するプログラムの記述は、A a３、a３.height、area＝a３.height*a３.widthであるようにして、ログ分類部２１は、変数ａ１、ａ２、ａ３への参照処理に基づいて、各イベントを分類する。
【０１７１】
ステップＳ２２０では、分類ログ生成部２２は、分類されたイベントを、発生順序に従って、記録した複数の分類ログ（１〜３）を生成する。生成された複数の分類ログの一例を図３３、図３４に示す。分類ログの形態としては、いずれの形態でもよい。そして、分類ログ生成部２２は、生成した複数の分類ログをログ変換部１３へ送る。そして、以下、ステップＳ２３０以下の処理が行われる。各処理の方法は、実施の形態２で説明したとおりである。
【０１７２】
この際、イベントの識別にあたっては、データ値の違いは考慮しない。図３４に示す場合では、ステップＳ２３０にて、イベント列をA a、a.height、a.width、ｇ、area＝a.height*a.widtｈとし、実施の形態２で示したように、分類ログを変換ログに変換し、各イベントの発生確率や稀少度を計算し、ログの特徴を出力するようにしてもよい。図の場合には、稀少度判定部１６により、変換ログの特徴が存在すると判断される（又は出力部１７により変換ログ３の特徴度が最大である旨が出力される）。即ち、作業者は、変換ログ３で、ａ．ｗｉｄｔｈを用いたイベントと、ｇを用いたイベントが非発生なのが珍しいことがわかる。
【０１７３】
そして、作業者は、変換ログ３を調べ、ｇを用いたイベントが非発生なのは、areaを計算するのに、関数ｇを使わずに、メイン関数の中で計算しているので、プログラミングに間違いはないと判断する。一方、作業者は、ａ．ｗｉｄｔｈを用いたイベントが発生していないのは、areaを計算するのに、ｈｅｉｇｈｔの値しか設定されていないので、プログラミングに間違いがあると判断できる。なお、ステップＳ２２０の後、各分類ログを出力部１７により出力させ、プログラム記述上の特徴の有無を出力させるようにしてもよい。
【０１７４】
（実施の形態２の変形例）
なお、稀少度判定部１６は、ログの特徴を判定する場合に、所定の基準値に従って、ログの特徴が存在するか否かを判定することも可能である。この所定の基準値は、作業者が入力部１０により入力することで、稀少度判定部１６が保持するようにできる。例えば、図２０に示すステップＳ２５５では、所定の基準値０．６以上である稀少度を有するログが存在する場合には、ログの特徴と判定することも可能である。
【０１７５】
また、ログ解析装置は、ソート部を設けるようにしてもよい。即ち、ソート部は、稀少度計算部１５により計算された稀少度のうち、上記所定の基準値を超える稀少度が複数あるような場合には、稀少度の高い順にソートする。そして、ソート部は、ソートした稀少度の高い順に、イベントに関する情報を出力部１７に出力させるようにしてもよい。これにより、作業者は、ソートされた順にデバッグの作業を行うことができ、デバッグ作業の効率化が図れる。
【０１７６】
また、ソート部は、特徴度計算部により計算された各特徴度のうち、所定の基準値を超える特徴度が複数あるような場合には、特徴度の高い順にソートすることも可能である。そして、ソート部は、ソートした特徴度の高い順にログに関する情報を出力部１７に出力させるようにしてもよい。
【０１７７】
（ログ解析プログラムの実施の形態）
なお、上記ログ解析方法で説明したステップは、コンピュータで、ログ解析プログラムを実行することで実現できる。
【０１７８】
このコンピュータの構成を図３５に示す。コンピュータは、種々のデータ等、ログ解析プログラム１，ログ解析プログラム２を格納するハードディスク１００と、ハードディスク１００から読み出したデータやＣＰＵ１３０による演算結果を一時的に格納するメモリ１２０と、種々の演算処理を行うＣＰＵ１３０と、所定のデータを入出力する入出力部１１０と、これらのデバイスを相互に接続するバス１４０とを有する。以下、ログ解析プログラム１，ログ解析プログラム２の場合に分けて説明する。
【０１７９】
（ログ解析プログラム１）
入出力部１１０は、所定のデータを入出力するものであり、例えば、データの内容を表示するディスプレイ装置、各種のデータをキー操作により入力するためのキーボードやマウス、データ情報を印字するプリンタ装置等の入出力デバイスがあげられる。
【０１８０】
入出力部１１０は、入力部１１０ａ及び出力部１１０ｂの機能を有する。作業者は、入力部１１０ａを用いて、図示しないデバッガから出力されたログを入力する。出力部１１０ｂは、各イベントの発生確率又は稀少度に基づいて、各ログや各変換ログの特徴となるイベントに関する情報を出力する。
【０１８１】
ＣＰＵ１３０は、ハードデスク１００にインストールされたログ解析プログラム１を実行することにより、種々の処理部として機能するものである。具体的には、ＣＰＵ１３０は、同一のデバッグ対象プログラム（以下、対象プログラム）を複数回繰り返し実行することにより、発生したイベントを、実行回ごとに発生順序に従ってそれぞれ記録された複数のログを生成するログ生成部１３０ｇと、上記複数のログをそれぞれ構成するイベントに基づいて、イベントを前記発生順序で記録したイベント列を生成するイベント列生成部１３０ａと、前記イベント列のイベントと、前記各ログを構成するイベントとをそれぞれ比較し、比較結果に基づいて、前記複数のログをそれぞれ変換ログに変換するログ変換部１３０ｂと、前記イベントに関する前記対象プログラムの記述に基づいて、前記各イベントの発生確率を前記発生順序ごとに計算するイベント発生確率計算部１３０ｃと、計算された発生確率に基づいて、発生頻度の低さを示す稀少度を計算する稀少度計算部１３０ｄと、計算された稀少度に基づいて、変換ログの特徴が存在するか否かを判定する稀少度判定部１３０ｅとして機能する。また、ＣＰＵ１３０は、データ値分類部１３０ｉの機能も有する。
【０１８２】
データ値分類部１３０ｉは、稀少度判定部１３０ｅにより特徴が存在しないと判断された場合、イベントに関するプログラムの記述の実行の際に用いられるデータに基づいて、各イベントについて、それぞれ、所定の分類基準に従って、分類情報を生成する。そして、データ値分類部１３０ｉは、各イベントに対して、生成された分類情報を付与する。
【０１８３】
そして、上述したイベント発生確率計算部１３０ｃは、イベントに関するプログラムの記述と、与えられた分類情報に基づいて、イベントの発生確率を発生順序ごとに計算する機能も有する。そして、上述した稀少度計算部１３０ｄは、計算された発生確率に基づいて、発生頻度の低さを示す稀少度を計算する機能も有する。上述した稀少度判定部１３０ｅは、稀少度計算部１３０ｄにより計算された稀少度に基づいて、ログの特徴が存在するか否かを判定する機能も有する。
【０１８４】
上記構成を有するコンピュータのハードウェアにインストールされたログ解析プログラム１は、本実施の形態では、以下の手順により実行することができる。先ず、作業者は、対象プログラムの動作により出力されたログを入力部１１０ａにより入力する。すると、入力部１１０ａにより入力された旨がバス１４０を介して（以下、バスを介しては省略する）ＣＰＵ１３０に送られる。ＣＰＵ１３０は、ハードウェア１００からログ解析プログラム１を読み出し解読することで、上述したＣＰＵ１３０の各部の機能を実行可能な状態に設定する。
【０１８５】
次に、ＣＰＵ１３０（ログ生成部１３０ｇ）は、入力されたログから複数のログを生成する。具体的には、入力されたログは、ＣＰＵ１３０に送られる。ＣＰＵ１３０（ログ生成部１３０ｇ）は、入力されたログに基づいて、同一の対象プログラムを複数回繰り返し実行することにより、発生したイベントを、実行回ごとに発生順序に従ってそれぞれ記録された複数のログを生成する。
【０１８６】
次に、ＣＰＵ１３０（イベント列生成部１３０ａ）は、ログ生成部１３０ｇにより生成された複数のログ中のイベントの傾向に基づいて、イベントを発生順序で記録したイベント列を生成する。
【０１８７】
次に、ＣＰＵ１３０（ログ変換部１３０ｂ）は、生成されたイベント列のイベント（イベントに関する情報）と、各ログを構成するイベント（イベントに関する情報）とをそれぞれ比較し、比較結果に基づいて、各ログをそれぞれ変換ログに変換する。
【０１８８】
次に、ＣＰＵ１３０（イベント発生確率計算部１３０ｃ）は、イベントに関する対象プログラムの記述に基づいて、各イベントの発生確率を発生順序ごとに計算する。
【０１８９】
次に、ＣＰＵ１３０（稀少度計算部１３０ｅ）は、イベント発生確率計算部１３０ｃにより計算された各イベントについての発生確率に基づいて、イベントの発生頻度の低さ又はイベントの非発生の頻度の低さを示す稀少度を計算する。
【０１９０】
次に、ＣＰＵ１３０（稀少度判定部１３０ｅ）は、稀少度計算部１３０ｄにより計算された各イベントの稀少度に基づいて、各変換ログの特徴が存在するか否かを判定する。存在すると判定された場合には、その旨が出力部１１０ｂに送られる。出力部１１０ｂは、各変換ログの特徴となるイベントに関する情報を出力する。一方、存在しないと判定された場合には、ＣＰＵ１３０（データ値分類部１３０ｉ）は、イベントに関する対象プログラムの記述の実行の際に用いられるデータに基づいて、各イベントについて、それぞれ、所定の分類基準に従って、分類情報を生成する。そして、データ値分類部１３０ｉは、各イベントに対して、生成された分類情報を付与する。
【０１９１】
次に、ＣＰＵ１３０（イベント発生確率計算部１３０ｃ）は、イベントに関する対象プログラムの記述と、与えられた分類情報に基づいて、イベントの発生確率を発生順序ごとに計算する。
【０１９２】
次に、ＣＰＵ１３０（稀少度計算部１３０ｄ）は、イベント発生確率計算部１３０ｃにより計算された各イベントについての発生確率に基づいて、発生頻度の低さ又は非発生の頻度の低さを示す稀少度を計算する。
【０１９３】
次に、ＣＰＵ１３０（稀少度判定部１３０ｅ）は、稀少度計算部１３０ｄにより計算された各イベントの稀少度に基づいて、各ログの特徴が存在するか否かを判定する。存在しない場合には、その旨が出力部１１０ｂに送られ、出力部１１０ｂは、特徴がない旨を出力する。一方、存在する場合には、ＣＰＵ１３０は、ログの特徴となるイベントに関す
る情報を出力部１１０ｂに送り、出力部１１０ｂは、送られた情報を出力する。
【０１９４】
なお、ＣＰＵ１３０は、すべての発生順序において記録されたイベントに関するプログラム記述が上記複数のログ間で共通するか否かを判定する判定部（図示せず）の機能を有するようにしてもよい。
【０１９５】
そして、作業者によるログ入力の後、ＣＰＵ１３０（判定部）が、複数のログにおいて、それぞれ、上記判定を行い、共通する場合には、ＣＰＵ（データ値分類部１３０ｉ）による分類情報の生成処理以降の処理を行うようにしてもよい。一方、共通しない場合には、ＣＰＵ１３０がログ生成部１３０ｇによる処理から稀少度判定部１３０ｅによる判定処理を行うようにしてもよい（図４のステップＳ１５からステップＳ６０）。
【０１９６】
また、ＣＰＵ１３０は、計算された各イベントの発生確率に基づいて、各変換ログの特徴の程度を示す特徴度を計算する特徴度計算部１３０ｊの機能も有するようにしてもよい。ＣＰＵ１３０（特徴度計算部１３０ｊ）は、計算された各イベントの発生確率に基づいて、各ログの特徴度を計算する。ＣＰＵ１３０（特徴度計算部１３０ｊ）は計算した各ログの特徴度を出力部１１０ｂへ送る。出力部１１０ｂは、各変換ログの特徴度を出力する。
【０１９７】
このような本実施の形態に係るログ解析プログラムによれば、対象プログラム記述やイベント発生順序（対象プログラム記述実行順序）に加えて、データも考慮して、発生確率や稀少度を計算し、これらの発生確率や稀少度に基づいて、ログ特徴を抽出することができるので、対象プログラム記述や発生順序を考慮してもログ特徴が抽出できない場合でも、速やかに、ログ特徴を抽出することが可能となるという作用効果を奏するログ解析装置、ログ解析方法を汎用コンピュータで容易に実現することができる。
【０１９８】
（ログ解析プログラム２）
入出力部１１０は、入力部１１０ａ及び出力部１１０ｂの機能を有する。作業者は、入力部１１０ａを用いて、図示しないデバッガから出力されたログを入力する。
【０１９９】
ここで、入出力部１１０は、イベントに関する対象プログラム記述の実行の際に参照可能であるメモリ１２０の領域を指定する領域指定部１１０ｃの機能を有する。
【０２００】
作業者は、入出力部１１０（領域指定部１１０）を用いて、イベントに関する所定の対象プログラム記述の実行の際に参照されるメモリ１２０の領域や、領域の大きさが共通する複数のメモリ１２０の領域を指定することができる。
【０２０１】
出力部１１０ｂは、各イベントの発生確率又は稀少度に基づいて、各ログや各変換ログの特徴となるイベントに関する情報を出力する。また、出力部１１０ｂは、特徴度計算部１３０ｊにより計算された各変換ログの特徴度を出力する。
【０２０２】
ＣＰＵ１３０は、領域指定部１１０ｃによる指定入力により、指定されたメモリ領域に対する参照処理を伴うか否かに基づいて、各イベントを分類するログ分類部１３０ｆと、参照処理を伴うメモリ領域ごとに、分類されたイベントを、発生順序に従って、記録した複数の分類ログを生成する分類ログ生成部１３０ｈと、各分類ログをそれぞれ構成するイベントに基づいて、イベントを発生順序で記録したイベント列を生成するイベント列生成部１３０ａと、イベント列のイベントと、前記各分類ログを構成するイベントとをそれぞれ比較し、比較結果に基づいて、前記各分類ログをそれぞれ変換ログに変換するログ変換部１３０ｂと、イベントに関する対象プログラムの記述に基づいて、各イベントの発生確率を前記発生順序ごとに、計算するイベント発生確率計算部１３０ｃと、発生確率に基づいて、発生頻度の低さを示す稀少度を計算する稀少度計算部１３０ｄの機能を有する。また、ＣＰＵ１３０は、計算された各イベントの発生確率に基づいて、各変換ログの特徴度を示す特徴度をそれぞれ計算する特徴度計算部１３０ｊの機能を有する。
【０２０３】
上記構成を有するコンピュータのハードウェア１００にインストールされたログ解析プログラム２は、本実施の形態では、以下の手順により実行することができる。
【０２０４】
先ず、作業者は、対象プログラムの動作により出力されたログを入力部１１０ａにより入力する。すると、入力部１１０ａにより入力された旨がバス１４０を介して（以下、バスを介しては省略する）ＣＰＵ１３０に送られる。ＣＰＵ１３０は、ハードウェア１００からログ解析プログラム２を読み出し、上述したＣＰＵ１３０の各部の機能を実行可能な状態に設定する。
【０２０５】
次に、作業者は、対象プログラム中で用いられている所定の変数の領域を入出力部１１０（領域指定部１１０ｃ）を用いて、入力（指定）する。次に、ＣＰＵ１３０（ログ分類部１３０ｆ）は、各イベントの発生にあたって、領域指定部１１０ｃにより指定された変数に対する参照処理を伴うか否かに基づいて、ログ中の各イベントを分類する。
【０２０６】
次に、ＣＰＵ１３０（分類ログ生成部１３０ｈ）は、分類されたイベントを、発生順序に従って、記録した複数の分類ログを生成する。次に、ＣＰＵ１３０（ログ変換部１３０ｂ）は、各分類ログを、それぞれ、変換ログに変換する。このＣＰＵ１３０の処理について、以下に詳細に説明する。
【０２０７】
先ず、ログ変換部１３０ｂは、イベント列生成部１３０ａに、所定のイベント列を生成するように指示する。イベント列生成部１３０ａは、ログ生成部１３０ｇにより生成された複数のログのイベント（イベントに関する情報）の傾向に基づいて、イベント列を生成する。
【０２０８】
ログ変換部１３０ｂは、発生順序ごとに、イベント列の各イベントに関する対象プログラム記述と、各ログの各イベントに関する対象プログラム記述とを比較する。そして、ログ変換部１３０ｂは、記述が一致する場合には、その記述を用いて変換ログのイベントに関する情報とする。そして、ある発生順序で、ログ中にイベントが記録されていない場合には、その旨を示す情報を変換ログのイベントに関する情報とする。
【０２０９】
次に、ＣＰＵ１３０（イベント発生確率計算部１３０ｃ）は、イベントに関する上記対象プログラムの記述に基づいて、各イベントの発生確率を発生順序ごとに計算する。
【０２１０】
次にＣＰＵ１３０（稀少度計算部１３０ｄ）は、イベント発生確率計算部１３０ｃにより計算された各イベントについての発生確率に基づいて、発生頻度の低さ又は非発生の頻度の低さを示す稀少度を計算する。
【０２１１】
次にＣＰＵ１３０（稀少度判定部１３０ｅ）は、稀少度計算部１３０ｄにより計算された各イベントの稀少度に基づいて、各変換ログの特徴が存在するか否かを判定する。存在する場合には、ＣＰＵ１３０は変換ログの特徴となるイベントに関する情報を出力部１１０ｂに送り、上記情報を出力するように指示する。出力部１１０ｂは、上記情報を出力する。
【０２１２】
存在しない場合には、ＣＰＵ１３０（特徴度計算部１３０ｊ）は、計算された各稀少度に基づいて、各ログの特徴度を計算する。計算された各ログの特徴度は出力部１１０ｂに送られ、上記特徴度を出力するように、ＣＰＵ１３０は出力部１１０ｂに対して指示する。出力部１１０ｂは、各ログの特徴度を出力する。なお、ＣＰＵ１３０（特徴度計算部１３０ｊ）は、計算された各イベントの発生確率に基づいて、各変換ログの特徴度を計算することもできる。
【０２１３】
このような本実施の形態に係るログ解析プログラムによれば、対象プログラム記述やイベント発生順序（対象プログラム記述実行順序）に加えて、イベント発生時のメモリ領域への参照も考慮して、発生確率や稀少度を計算し、これらの発生確率や稀少度に基づいて、ログ特徴を抽出することができるので、対象プログラム記述や発生順序を考慮してもログ特徴が抽出できない場合でも、速やかに、ログ特徴を抽出することが可能となるという作用効果を奏するログ解析装置、ログ解析方法を汎用コンピュータで容易に実現することができる。なお、上述したログ解析プログラム１，２は、それぞれ、別々の構成として説明したが、１つのプログラムとして、実現するようにしてもよい。
【０２１４】
また、ログ解析プログラムは、記録媒体に記録することができる。この記録媒体は、図３６に示すように、例えば、フレキシブルディスク４００、コンパクトディスク５００、ＩＣチップ６００、カセットテープ７００等があげられる。このようなログ解析プログラムを記録した記録媒体によれば、ログ解析プログラムの保存、運搬、販売等を容易に行うことができる。
【０２１５】
なお、この発明の実施の形態で例示した構成は一例であって、それ以外の構成を排除する趣旨のものではなく、例示した構成の一部を他のもので置き換えたり、例示した構成の一部を省いたり、例示した構成に別の機能あるいは要素を付加したり、それらを組み合わせたりすることなどによって得られる別の構成も可能である。また、例示した構成と論理的に等価な別の構成、例示した構成と論理的に等価な部分を含む別の構成、例示した構成の要部と論理的に等価な別の構成なども可能である。また、例示した構成と同一もしくは類似の目的を達成する別の構成、例示した構成と同一もしくは類似の効果を奏する別の構成なども可能である。また、この発明の実施の形態で例示した各種構成部分についての各種バリエーションは、適宜組み合わせて実施することが可能である。
【０２１６】
また、この発明の実施の形態は、個別装置としての発明、関連を持つ２以上の装置についての発明、システム全体としての発明、個別装置内部の構成部分についての発明、またはそれらに対応する方法の発明等、種々の観点、段階、概念またはカテゴリに係る発明を包含・内在するものである。従って、この発明の実施の形態に開示した内容からは、例示した構成に限定されることなく発明を抽出することができるものである。
【図面の簡単な説明】
【０２１７】
【図１】本発明の第１概念を説明するための図である。
【図２】本発明の第２概念を説明するための図である。
【図３】実施の形態１に係るログ解析装置の構成を示す図である。
【図４】実施の形態１のログ解析方法を説明するためのフローチャート図である。
【図５】実施の形態１のログ解析方法を説明するためのフローチャート図である。
【図６】実施の形態１のログ解析方法を説明するための対象プログラムの一例である。
【図７】実施の形態１のログ生成部により生成された複数のログの一例を示す図である。
【図８】実施の形態１であるログ変換部により変換された複数の変換ログの一例を示す図である。
【図９】実施の形態１であるログ変換部により変換された複数の変換ログの一例を示す図である。
【図１０】実施の形態１であるイベント発生確率計算部により計算された発生確率を、発生順序及びイベントと対応づけて示す図である。
【図１１】実施の形態１であるイベント発生確率計算部により計算された発生確率を、発生順序及びイベントと対応づけて示す図である。
【図１２】実施の形態１である稀少度計算部により計算された稀少度を、発生順序及び変換ログと対応づけて示す図である。
【図１３】実施の形態１である稀少度計算部により計算された稀少度を、発生順序及び変換ログと対応づけて示す図である。
【図１４】実施の形態１であるデータ値分類部により分類情報が与えられた各ログの記録内容を示す図である。
【図１５】実施の形態１であるイベント発生確率計算部により計算された発生確率を、発生順序及びイベントと対応づけて示す図である。
【図１６】実施の形態１である稀少度計算部により計算された稀少度を、発生順序及びログと対応づけて示す図である。
【図１７】実施の形態１の変形例２の特徴度計算部の計算処理を説明するための補足図である。
【図１８】実施の形態１の変形例２の特徴度計算部の計算処理を説明するための補足図である。
【図１９】実施の形態２に係るログ解析装置の構成を示す図である。
【図２０】実施の形態２のログ解析方法を説明するためのフローチャート図である。
【図２１】実施の形態２のログ解析方法を説明するための対象プログラムの一例である。
【図２２】実施の形態２のログ解析方法の説明で用いる対象プログラムを実行した結果得られたログの記録内容を示す図である。
【図２３】実施の形態２の分類ログ生成部により生成された複数の分類ログを示す図である。
【図２４】実施の形態２のログ変換部により得られた複数の変換ログを示す図である。
【図２５】実施の形態２であるイベント発生確率計算部により計算された発生確率を、発生順序及びイベントと対応づけて示す図である。
【図２６】実施の形態２である稀少度計算部により計算された稀少度を、発生順序及び変換ログと対応づけて示す図である。
【図２７】実施の形態２の特徴度計算部により計算された各変換ログの特徴度を示す図である。
【図２８】実施の形態２の特徴度計算部による計算処理を説明するための補足図である。
【図２９】実施の形態２の適用例１のログ解析方法を説明するための対象プログラムの一例である。
【図３０】実施の形態２の適用例１のログ解析方法の説明で用いる対象プログラムを実行した結果得られたログの記録内容を示す図である。
【図３１】実施の形態２の適用例１の分類ログ生成部により生成された複数の分類ログを示す図である。
【図３２】実施の形態２の適用例１の分類ログ生成部により生成された複数の分類ログを示す図である。
【図３３】実施の形態２の適用例２の分類ログ生成部により生成された複数の分類ログを示す図である。
【図３４】実施の形態２の適用例２の分類ログ生成部により生成された複数の分類ログを示す図である。
【図３５】実施の形態１，２におけるログ解析プログラムをインストールしたコンピュータの構成を示す図である。
【図３６】実施の形態１，２におけるログ解析プログラムを格納した記録媒体を示した図である。
【符号の説明】
【０２１８】
１ａ，３ａ  対象プログラム、２ａ，２ｂ，４ａ，４ｂ，４ｃ  イベント、５  ログ、６  イベント列、１０，１１０ａ  入力部、１１，１３０ｇ  ログ生成部、１２，１３０ａ  イベント列生成部、１３，１３０ｂ  ログ変換部、１４，１３０ｃ  イベント発生確率計算部、１５，１３０ｄ  稀少度計算部、１６，１３０ｅ  稀少度判定部、１７，１１０ｂ  出力部、１８，１３０ｉ  データ値分類部、１９，１３０ｊ  特徴度計算部、２０，１１０ｃ  領域指定部、２１，１３０ｆ  ログ分類部、２２，１３０ｈ  分類ログ生成部、１００  ハードディスク、１００ａ，１００ｂ  ログ解析プログラム、１１０  入出力部、１２０  メモリ、１３０  ＣＰＵ、１４０  バス、４００  フレキシブルディスク、５００  コンパクトディスク、６００  ＩＣチップ、７００  カセットテープ
【図１】
2005025786.tif 000003
【図２】
2005025786.tif 000004
【図３】
2005025786.tif 000005
【図４】
2005025786.tif 000006
【図５】
2005025786.tif 000007
【図６】
2005025786.tif 000008
【図７】
2005025786.tif 000009
【図８】
2005025786.tif 000010
【図９】
2005025786.tif 000011
【図１０】
2005025786.tif 000012
【図１１】
2005025786.tif 000013
【図１２】
2005025786.tif 000014
【図１３】
2005025786.tif 000015
【図１４】
2005025786.tif 000016
【図１５】
2005025786.tif 000017
【図１６】
2005025786.tif 000018
【図１７】
2005025786.tif 000019
【図１８】
2005025786.tif 000020
【図１９】
2005025786.tif 000021
【図２０】
2005025786.tif 000022
【図２１】
2005025786.tif 000023
【図２２】
2005025786.tif 000024
【図２３】
2005025786.tif 000025
【図２４】
2005025786.tif 000026
【図２５】
2005025786.tif 000027
【図２６】
2005025786.tif 000028
【図２７】
2005025786.tif 000029
【図２８】
2005025786.tif 000030
【図２９】
2005025786.tif 000031
【図３０】
2005025786.tif 000032
【図３１】
2005025786.tif 000033
【図３２】
2005025786.tif 000034
【図３３】
2005025786.tif 000035
【図３４】
2005025786.tif 000036
【図３５】
2005025786.tif 000037
【図３６】
2005025786.tif 000038