(57)【要約】【課題】データ競合の問題発生時のログの中から、修正すべき箇所を検出する。【解決手段】検査対象プログラムのデータ競合の問題箇所検出システムとして、情報処理装置に、プロセス又はスレッドをパラレルに実行する検査対象プログラムを実行してデータ競合したときのログを、第１のログとして格納する第１のログ格納手段と、検査対象プログラムのプロセス又はスレッドを個別に逐次実行する個別実行手段と、個別実行手段の実行結果のログを、第２のログとして格納する第２のログ格納手段と、第１のログと前記第２のログを比較してログの差分を抽出する差分抽出手段とを設けた。【選択図】図１
2010237743.tif 000002
【特許請求の範囲】
【請求項１】
プロセス又はスレッドをパラレルに実行する検査対象プログラムを実行してデータ競合したときのログを、第１のログとして格納する第１のログ格納手段と、
前記検査対象プログラムのプロセス又はスレッドを個別に逐次実行する個別実行手段と、
前記個別実行手段の実行結果のログを、第２のログとして格納する第２のログ格納手段と、
前記第１のログと前記第２のログを比較してログの差分を抽出する差分抽出手段と
を備えたことを特徴とする検査対象プログラムのデータ競合の問題箇所検出システム。
【請求項２】
前記差分抽出手段は、抽出した差分箇所に対応するプロセス又はスレッド、及び抽出した差分箇所に対応する前記プロセス又はスレッドの該当位置を特定するプログラム特定手段を有することを特徴とする請求項１記載の問題箇所検出システム。
【請求項３】
前記差分抽出手段は、抽出した差分箇所に対応するソースコード、及び抽出した差分箇所に対応するソースコード上での該当位置を特定するソースコード特定手段を有することを特徴とする請求項１又は２に記載の問題箇所検出システム。
【請求項４】
前記検査対象プログラムをデータフロー解析して、プロセス又はスレッドを実行したときの変数情報の受け渡し関係を解析するデータフロー解析手段を更に有し、
前記検査対象プログラムの問題箇所の検査時に、
前記検査対象プログラムの変数情報毎に、プロセス又はスレッドを実行した最終結果に作用するか否かを解析し、
解析結果に基づいて、抽出した差分から、最終結果に作用しない変数情報に関する差分を除外する
ことを特徴とする請求項１ないし３の何れか一記載の問題箇所検出システム。
【請求項５】
プロセス又はスレッドを実行する複数の順序の組合せを導き出す実行順序決定手段を更に有し、
前記実行順序決定手段の導き出した複数の実行順序に基づいて、前記検査対象プログラムに記述されたプロセス又はスレッドを逐次実行し、実行結果を前記第２のログ格納手段に格納する
ことを特徴とする請求項１ないし４の何れか一記載の問題箇所検出システム。
【請求項６】
抽出したログの差分箇所を作業者に認知可能に提示する提示手段を有し、
前記ログの差分箇所は、経過及び結果の異なるログ、前記ログに対応するプロセス及びプロセスの該当位置、前記ログに対応するスレッド及びスレッドの該当位置、前記プロセス若しくは前記スレッド又は前記ログに対応するソースコード及びソースコードの該当位置の何れか又は組み合わせである
ことを特徴とする請求項１ないし５の何れか一記載の問題箇所検出システム。
【請求項７】
情報処理装置に、プロセス又はスレッドをパラレルに実行するとデータ競合するプログラムである検査対象プログラムを格納し、
前記検査対象プログラムのデータ競合したときのログを、第１のログとして格納し、
前記検査対象プログラムのプロセス又はスレッドを個別に逐次実行して、実行結果のログを、第２のログとして格納し、
情報処理装置を用いて、前記第１のログと前記第２のログを比較してログの差分を抽出し、
抽出したログの差分箇所を作業者に認知可能に提示する
ことを特徴とする検査対象プログラムのデータ競合の問題箇所検出方法。
【請求項８】
前記ログの差分の抽出結果から、抽出した差分箇所に対応するプロセス又はスレッド、及び抽出した差分箇所に対応する前記プロセス又はスレッドの該当位置を特定し、
特定した結果を作業者に認知可能に提示する
ことを特徴とする請求項７記載の問題箇所検出方法。
【請求項９】
前記ログの差分の抽出結果から、抽出した差分箇所に対応するソースコード、及び抽出した差分箇所に対応するソースコード上での該当位置を特定し、
特定した結果を作業者に認知可能に提示する
ことを特徴とする請求項７又は８に記載の問題箇所検出方法。
【請求項１０】
前記検査対象プログラムを情報処理装置を用いてデータフロー解析して、プロセス又はスレッドを実行したときの変数情報の受け渡し関係を解析し、
前記検査対象プログラムの変数情報毎に、プロセス又はスレッドを実行した最終結果に作用するか否かを解析し、
解析結果に基づいて、抽出した差分から、最終結果に作用しない変数情報に関する差分を除外する
ことを特徴とする請求項７ないし９の何れか一記載の問題箇所検出方法。
【請求項１１】
プロセス又はスレッドを実行する複数の順序の組合せを導き出し、
前記導き出した複数の実行順序に基づいて、前記検査対象プログラムに記述されたプロセス又はスレッドを逐次実行し、実行結果を前記第２のログとして格納する
ことを特徴とする請求項７ないし１０の何れか一記載の問題箇所検出方法。
【請求項１２】
作業者に対するログの差分箇所の提示は、経過及び結果の異なるログ、前記ログに対応するプロセス及びプロセスの該当位置、前記ログに対応するスレッド及びスレッドの該当位置、前記プロセス若しくは前記スレッド又は前記ログに対応するソースコード及びソースコードの該当位置の何れか又は組み合わせである
ことを特徴とする請求項７ないし１１の何れか一記載の問題箇所検出方法。
【請求項１３】
情報処理装置の制御部を、
プロセス又はスレッドをパラレルに実行する検査対象プログラムを実行してデータ競合したときのログを、第１のログとして格納する第１のログ格納手段と、
前記検査対象プログラムのプロセス又はスレッドを個別に逐次実行する個別実行手段と、
前記個別実行手段の実行結果のログを、第２のログとして格納する第２のログ格納手段と、
前記第１のログと前記第２のログを比較してログの差分を抽出する差分抽出手段として
機能させることを特徴とする検査対象プログラムのデータ競合の問題箇所検出用プログラム。
【請求項１４】
前記差分抽出手段は、抽出した差分箇所に対応するプロセス又はスレッド、及び抽出した差分箇所に対応する前記プロセス又はスレッドの該当位置を特定するプログラム特定手段を有することを特徴とする請求項１３記載の問題箇所検出用プログラム。
【請求項１５】
前記差分抽出手段は、抽出した差分箇所に対応するソースコード、及び抽出した差分箇所に対応するソースコード上での該当位置を特定するソースコード特定手段を有することを特徴とする請求項１３又は１４に記載の問題箇所検出用プログラム。
【請求項１６】
前記制御部を、前記検査対象プログラムをデータフロー解析して、プロセス又はスレッドを実行したときの変数情報の受け渡し関係を解析するデータフロー解析手段として機能させ、
前記検査対象プログラムの問題箇所の検査時に、
前記検査対象プログラムの変数情報毎に、プロセス又はスレッドを実行した最終結果に作用するか否かを解析し、
解析結果に基づいて、抽出した差分から、最終結果に作用しない変数情報に関する差分を除外する
ことを特徴とする請求項１３ないし１５の何れか一記載の問題箇所検出用プログラム。
【請求項１７】
前記制御部を、プロセス又はスレッドを実行する複数の順序の組合せを導き出す実行順序決定手段として機能させ、
前記実行順序決定手段の導き出した複数の実行順序に基づいて、前記検査対象プログラムに記述されたプロセス又はスレッドを逐次実行し、実行結果を前記第２のログ格納手段に格納する
ことを特徴とする請求項１３ないし１６の何れか一記載の問題箇所検出用プログラム。
【請求項１８】
前記制御部を、抽出したログの差分箇所を作業者に認知可能に提示する提示手段として機能させ、
前記ログの差分箇所は、経過及び結果の異なるログ、前記ログに対応するプロセス及びプロセスの該当位置、前記ログに対応するスレッド及びスレッドの該当位置、前記プロセス若しくは前記スレッド又は前記ログに対応するソースコード及びソースコードの該当位置の何れか又は組み合わせである
ことを特徴とする請求項１３ないし１７の何れか一記載の問題箇所検出用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ競合の問題箇所検出システム、問題箇所検出方法および問題箇所検出用プログラムに関し、 特に問題発生時のログの中から修正すべき箇所を検出できる問題箇所検出システム、問題箇所検出方法および問題箇所検出用プログラムに関する。
【背景技術】
【０００２】
複数のプロセスやスレッドを並行又は並行に動作させる情報処理システムでは、正しく排他制御を行わないとデータ競合の問題が発生する。
【０００３】
ソフトウェアのテスト中・シミュレーション中・運用中にデータ競合の不具合が発見された場合、一般的には人手でログを読んでプログラムの問題箇所を特定していた。ここで、プログラムの問題箇所とは、対象プログラム（対象ソースコード）のうち開発者の期待と異なる記述によって不具合を発生させている箇所であり、問題箇所を修正することで不具合は発生しなくなる。しかし、複数のプロセスやスレッドが影響しあって発生する不具合では、それぞれのプロセス・スレッドのログが混在して出力されるため、ログを解析して問題箇所を特定するのに知識や経験が必要であり、解析に時間がかかった。
【０００４】
関連するプログラム検証システムの一例が、特許文献１に記載されている。図１３に示すように、特許文献１に記載されたプログラム検証システムは、変更検出部と、ソースコード分類部と、モデル生成部と、検証部とから構成されている。このような構成を有するシステムは次のように動作する。すなわち、変更が施された関数と、変更の影響を受ける共有変数を用いた関数とを検出すると共に、変更の影響を受ける部分、制御構造部分、それ以外の部分を検出し、 検出結果に基づいてモデルを生成する。その後、変更前の検証対象プログラムのモデルと変更後の検証対象プログラムのモデルを比較することにより、変更後の検証対象プログラムの検証を行う。
【０００５】
しかし、特許文献１に記載された検証システムでは、検証において不具合が発見された場合、不具合の発生する実行順序を出力することはできるが、そのログを読んで実際の問題箇所を特定する作業は人間にまかされている。 これには知識や経験が必要であり、解析に時間がかかっていた。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７-１１６９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１に記載された検証システムでは、結局、多くの経験及び知識を有する作業者が複数のプロセス・スレッドの動作を把握し、大量のログの中から問題箇所を探す必要がある。
【０００８】
複数のプロセスやスレッドが影響しあって発生するデータ競合の不具合では、それぞれのプロセス・スレッドのログが混在して出力されるため、容易にログの解析ができない。即ち、課題としては、パラレルコンピューティングにおけるデータ競合のログ解析に関して、問題箇所を特定するのに、多大な知識や経験を要し、且つ解析に多大な工数がかかる。
【０００９】
本発明の目的は、データ競合したログを用い、修正すべきデータ競合の問題箇所を検出する問題箇所検出システム、問題箇所検出方法および問題箇所検出用プログラムを提供することにある。
【課題を解決するための手段】
【００１０】
本発明の検査対象プログラムのデータ競合の問題箇所検出システムは、プロセス又はスレッドをパラレルに実行する検査対象プログラムを実行してデータ競合したときのログを、第１のログとして格納する第１のログ格納手段と、前記検査対象プログラムのプロセス又はスレッドを個別に逐次実行する個別実行手段と、前記個別実行手段の実行結果のログを、第２のログとして格納する第２のログ格納手段と、前記第１のログと前記第２のログを比較してログの差分を抽出する差分抽出手段とを備えたことを特徴とする。
【００１１】
また、本発明の検査対象プログラムのデータ競合の問題箇所検出方法は、情報処理装置に、プロセス又はスレッドをパラレルに実行するとデータ競合するプログラムである検査対象プログラムを格納し、前記検査対象プログラムのデータ競合したときのログを、第１のログとして格納し、前記検査対象プログラムのプロセス又はスレッドを個別に逐次実行して、実行結果のログを、第２のログとして格納し、情報処理装置を用いて、前記第１のログと前記第２のログを比較してログの差分を抽出し、  抽出したログの差分箇所を作業者に認知可能に提示することを特徴とする。
【００１２】
また、本発明の検査対象プログラムのデータ競合の問題箇所検出用プログラムは、情報処理装置の制御部を、プロセス又はスレッドをパラレルに実行する検査対象プログラムを実行してデータ競合したときのログを、第１のログとして格納する第１のログ格納手段と、前記検査対象プログラムのプロセス又はスレッドを個別に逐次実行する個別実行手段と、前記個別実行手段の実行結果のログを、第２のログとして格納する第２のログ格納手段と、前記第１のログと前記第２のログを比較してログの差分を抽出する差分抽出手段として機能させることを特徴とする。
【発明の効果】
【００１３】
本発明によれば、データ競合したログの中から、修正すべきデータ競合の問題箇所を検出する問題箇所検出システム、問題箇所検出方法および問題箇所検出用プログラムを提供できる。
【図面の簡単な説明】
【００１４】
【図１】本発明の第１の実施形態の構成を示すブロック図である。
【図２】本発明の第１の実施形態の動作を示すフローチャートである。
【図３】本発明の第２の実施形態の構成を示すブロック図である。
【図４】本発明の第２の実施形態の動作を示すフローチャートである。
【図５】本発明の第３の実施形態の構成を示すブロック図である。
【図６】本発明の第３の実施形態の動作を示すフローチャートである。
【図７】実施例における問題箇所検出システムの構成を示したブロック図である。
【図８】実施例における対照プログラムを例示する説明図である。
【図９】実施例における不具合発生時のログを例示する説明図である。
【図１０】実施例におけるスレッドの逐次実施結果を例示する説明図である。
【図１１】実施例におけるスレッドの逐次実施結果を例示する説明図である。
【図１２】第１のログから第２のログと異なる箇所を抽出した結果を例示する説明図である。
【図１３】特許文献１に記載されたプログラム検証システムを示すブロック図である。
【発明を実施するための形態】
【００１５】
本発明の実施の形態を図１乃至図６に基づいて詳細に説明する。
【００１６】
図１を参照すると、本発明の第１の実施の形態は、対象となるソースコードを格納する対象プログラム格納手段１１０と、複数のプロセス・スレッドを個別に実行可能であるプログラム個別実行手段１２０と、プロセス・スレッドを並列に実行したときの第１のログを格納する第１のログ格納手段１３０と、プロセスを個別に実行したときの第２のログを格納する第２のログ格納手段１４０と、第１のログと第２のログを比較して差分を抽出する差分抽出手段１５０とから構成されている。
【００１７】
これらの手段はそれぞれ概略つぎのように動作する。  
プログラム個別実行手段１２０は、対象プログラム格納手段１１０から検査する対象のソースコードを取得し、ソースコード内に記述されたプロセス・スレッドを個別に分解（置換及び補充）して、分解後のプロセス・スレッドを逐次実行する。個別に逐次実行する順序は、予め定めておいても良いし、作業者が経験等によって指定できるようにしても良い。実行時に得られたログは、第２のログのログとして、第２のログ格納手段１４０に格納される。
【００１８】
差分抽出手段１５０は、第１のログと第２のログを比較して差分箇所を抽出して記憶する。当該記憶された差分箇所は、差分箇所から想定されるデータ競合の問題箇所の候補として、作業者に認知可能に提示される。尚、差分箇所の提示は、差分抽出手段１５０が行なうこととしても良いし、他の提示手段で行なっても良い。  
差分抽出手段１５０には、必要に応じて、抽出した差分箇所に対応するプロセス又はスレッド、及び抽出した差分箇所に対応するプロセス又はスレッドの該当位置を特定するプログラム特定手段と、抽出した差分箇所に対応するソースコード、及び抽出した差分箇所に対応するソースコード上での該当位置を特定するソースコード特定手段を設けても良い。
【００１９】
作業者への提示内容は、第１のログと第２のログとで経過及び結果の異なる差分箇所のログや、差分箇所のログに対応するプロセス及びプロセスの該当位置、差分箇所のログに対応するスレッド及びスレッドの該当位置、差分箇所のプロセス若しくはスレッド又はログに対応するソースコード及びソースコードの該当位置を、作業差の所望する表示形態にして、一つ又は複数の結果を順次切り替え可能に提示する。
【００２０】
次に、図１及び図２のフローチャートを参照して本実施の形態の全体の動作について詳細に説明する。  
あらかじめ、対象プログラム格納手段１１０には対象となるソースコードが格納され、第１のログ格納手段にはプロセスを並列（並行）に実行し不具合が発生した時のログが格納されているものとする。ここで、収集するログにはプロセスのID、実行している箇所に対応するソースコードの行番号、変数の値などを含める。また、同じソースコードを同じ実行順序で複数回動作させた場合には同一のログが出力されるものとする。そのため、不定な中間状態や時刻などの情報はログには含めないようにするか、差分抽出手段１５０で差分の抽出から除外するものとする。
【００２１】
まず、プログラム個別実行手段１２０は、対象プログラム格納手段１１０から対象のソースコードを取得する（図２のステップＡ１）。  
次に、プログラム個別実行手段１２０は、プロセス及びスレッドを個別に実行し、得られたログを第２のログ格納手段１４０に格納する（ステップＡ２）。  
次に、差分抽出手段１５０は、第１のログと第２のログを読み込む（ステップＡ３）。  次に、差分抽出手段１５０は、第１のログと第２のログを比較して差分を抽出する（ステップＡ４）。  
最後に、差分抽出手段１５０は、得られた差分箇所から想定される問題箇所の候補を作業者に対して提示する（ステップＡ５）。  
このときの提示内容は、第１のログと第２のログのいずれかのログの差分箇所であっても、差分箇所に対応するプロセスであっても、 差分箇所に対応するプロセスのソースコードに関する情報であってもよい。
【００２２】
次に、本実施の形態の効果について説明する。本実施の形態では、プロセスを並列（並行）に実行したときの第１のログとプロセスを個別に実行したときの第２のログを読み込んで差分を抽出し、問題箇所の発見に使用可能な情報を提示するため、その箇所を中心にログを確認可能とでき、知識や経験の少ない作業者であっても、効果的に問題箇所の発見が可能となる。
【００２３】
次に、本発明の第２の実施形態について図面を参照して詳細に説明する。
【００２４】
本発明の第２の第２の実施形態は、対象プログラムをデータフロー解析して情報の受け渡し関係を解析するデータフロー解析手段を備える点が前述した第１実施形態と異なる。  具体的には、図３を参照すると、本発明の第２の実施の形態は、第１の実施の形態と同様の対象プログラム格納手段１１０と、 プログラム個別実行手段１２０と、第１のログ格納手段１３０と、第２のログ格納手段１４０と、差分抽出手段１５０と、ソースコードをデータフロー解析して情報の受け渡し関係を解析するデータフロー解析手段１６０ から構成されている。
【００２５】
これらの手段はそれぞれ概略つぎのように動作する。  
予め、対象プログラム格納手段１１０には対象となるソースコードが格納され、第１のログ格納手段にはプロセス・スレッドを並列に実行し不具合が発生した時のログが格納されているものとする。プログラム個別実行手段１２０は、対象プログラム格納手段１１０からソースコードを取得し、 ソースコード内に記述されたプロセス・スレッドを個別に実行する。実行時に得られたログは、第２のログ格納手段１４０に格納される。
【００２６】
データフロー解析手段１６０は、対象プログラム格納手段１１０から検査対象プログラム（ソースコード）を取得し、検査対象プログラムに含まれる変数・関数（情報）がプロセス・スレッドを実行した最終結果に作用するかどうかをソースコードのデータフロー解析で検査する。
【００２７】
差分抽出手段１５０は、第１のログと第２のログを比較して差分を抽出し、得られた差分箇所から想定される問題箇所の候補を選択すると共に、データフロー解析の結果に基づいて実行した最終結果に作用しない変数の関する候補を除外して、問題箇所の候補を作業者に提示する。
【００２８】
次に、図３及び図４のフローチャートを参照して本実施の形態の全体の動作について詳細に説明する。  
まず、プログラム個別実行手段１２０は、対象プログラム格納手段１１０から対象のソースコードを取得し（図４のステップＢ１）、プログラムを個別に実行し、得られたログを第２のログ格納手段１４０に格納する（ステップＢ２）。  
データフロー解析手段１６０は、対象プログラム格納手段１１０から対象のソースコードを取得し、所定の変数が実行した最終結果に作用するか否かをソースコードのデータフロー解析で検査する（ステップＢ３）。  
次に、差分抽出手段１５０は、第１のログと第２のログとデータフロー解析の結果とを読み込み（ステップＢ４）、第１のログと第２のログを比較し、差分を抽出する（ステップＢ５）。この時、データフロー解析の結果を用い、実行した最終結果に作用しない変数は差分として認識しない。
【００２９】
最後に、差分抽出手段１５０は、得られた差分箇所から想定される問題箇所の候補を作業者に提示する（ステップＢ６）。
【００３０】
次に、本実施の形態の効果について説明する。本実施の形態では、第１の実施の形態での効果に加え、問題箇所の候補の提示にデータフロー解析の結果を用いることで、問題箇所の誤検出を低減できる。これは、最終結果に作用しない場合でも、計算の途中で一時的に第１のログと第２のログが異なる値をとることがあり、本実施の形態ではそのような差分を検出の対象から除外するためである。
【００３１】
次に、本発明の第３の実施の形態について図面を参照して詳細に説明する。 本発明の第３の実施の形態は、プロセス・スレッドを個別に実行するための実行順序を決定する実行順序決定手段１７０を備える点が前述した第１の実施の形態と異なる。具体的には、図５を参照すると、第３の実施の形態は、第１実施形態と同様の対象プログラム格納手段１１０と、プログラム個別実行手段１２０と、第１のログ格納手段１３０と、第２のログ格納手段１４０と、差分抽出手段１５０とプロセスを個別に実行するための実行順序を決定する実行順序決定手段１７０から構成されている。
【００３２】
これらの手段はそれぞれ概略つぎのように動作する。  
実行順序決定手段１７０は、対象プログラム格納手段１１０からソースコードを取得し、プロセス・スレッドの実行可能な全ての実行順序を決定する。  
一例としては、実行順序決定手段１７０は、プロセス・スレッドの実行可能な順序をすべて洗い出し、プログラム個別実行手段１２０に渡す。実行順序の洗い出しは、例えば、Ｘ，Ｙ，Ｚという３つのプロセスがある場合、「Ｘ→Ｙ→Ｚ」「Ｘ→Ｚ→Ｙ」「Ｙ→Ｘ→Ｚ」「Ｙ→Ｚ→Ｘ」「Ｚ→Ｘ→Ｙ」「Ｚ→Ｙ→Ｘ」の６種類のプロセス実行順を全て認知し、プログラム個別実行手段１２０に通知可能な情報として実行順序に関する情報として生成する。  
また、他の例では、作業者に所定の作業時間（解析時間）を入力させ、その時間内で後述する処理を含めた全ての処理を実効可能な、できるだけ多くの組み合わせの実行順序を決定して、実行順序に関する情報としても良い。
【００３３】
プログラム個別実行手段１２０は、対象プログラム格納手段１１０からソースコードを取得し、実行順序決定手段１７０から決定された実行順序（実行順序に関する情報）を取得し、洗い出した実行順序に従ってソースコードに記述されたプロセス・スレッドを個別に逐次実行する。実行時に得られたログは、第２のログ格納手段１４０に格納される。  
差分抽出手段１５０は第１のログと第２のログを比較して差分を抽出し、得られた差分箇所から想定される問題箇所の候補を表示する。
【００３４】
次に、図５及び図６のフローチャートを参照して本実施の形態の全体の動作について詳細に説明する。  
まず、実行順序決定手段１７０は、対象プログラム格納手段１１０からソースコードを取得し、プロセス・スレッドの実行順序を決定する（図６のステップＣ１）。
【００３５】
プログラム個別実行手段１２０は、対象プログラム格納手段１１０から対象のソースコードを取得し、 実行順序決定手段１７０から受け取った実行順序に従って、指示された実行順序の全てが完了するまで、ソースコードに記述されたプロセスを個別に実行し、 得られたログを第２のログ格納手段１４０に格納する（ステップＣ２）。  
次に、差分抽出手段１５０は、第１のログと第２のログを読み込み（ステップＣ３）、第１のログと第２のログを比較し比較して差分を抽出する（ステップＣ４）。
【００３６】
最後に、差分抽出手段１５０は、得られた差分箇所から想定される問題箇所の候補を表示する（ステップＣ５）。
【００３７】
次に、本実施の形態の効果について説明する。本実施の形態では、本実施の形態では、第１の実施の形態での効果に加え、実行順序決定手段１７０により、実行順序を指示して、個別にプロセス・スレッドを逐次実行することで、誤検出を低減できる。これは、プロセスの実行の前後関係によって中間状態が異なることがあり、そのような中間状態はどちらも正常な値であると考えられるからである。また、第１のログから、どの実行順序で実行した結果（第２のログ）とも異なるログのみを問題箇所の候補として抽出することで、精度の高い結果を得ることができる。
【実施例】
【００３８】
次に、具体的な実施例を用いて第１の実施の形態を説明する。  
実施例では、図７に示すように、一般的な情報処理装置（コンピュータ）２００を用いて、データ競合に関するプログラムの問題箇所を検出するシステムを実現できる。図７に示された問題箇所検出システムは、補助記憶装置２１０に記憶された各種プログラムがＲＡＭに展開されて制御部に読込まれることによって、補助記憶装置２１０に格納されている対象プログラム２１４の問題箇所を検出するシステムとして動作する。また、制御部は、ＲＡＭに読込まれた各種プログラムに基づいて、プログラム個別実行手段、差分抽出手段、プログラム特定手段、ソースコード特定手段などとして機能する。また、補助記憶装置２１０及びＲＡＭは、対象プログラム格納手段、第１のログ格納手段、第２のログ格納手段として機能する。また、制御部をデータフロー解析手段、実行順序決定手段として、機能するように、プログラムを構成しても良い。
【００３９】
ここで、対象プログラム２１４とは、作業者によって、ソフトウェアのテスト中・シミュレーション中・運用中にデータ競合の不具合が発見された、プロセスやスレッドが並列又は並行的に動作するプログラムであり、問題箇所の修正を要するプログラムである。対象プログラム２１４には、親ソースコード下に、多くの子ソースコードを有し、それぞれのソースコードに基づいて、情報処理装置の制御部がプロセスやスレッドを生成して演算処理する。
【００４０】
問題箇所検出システムとして動作する情報処理装置２００は、入力部やネットワークインタフェースを介して入力された作業者の指示（対象プログラム２１４の選択等）に基づいて、第１のログ及び第２のログを格納し、ログの差分を抽出して、作業者にとって重要であるだろうログの差分箇所から識別した情報を表示部に出力する。  
換言すれば、情報処理装置２００が、補助記憶装置２１０に記録された、制御部を差分抽出手段、プログラム特定手段及びソースコード特定手段として動作させる差分解析プログラム２１１、制御部を抽出したログの差分箇所を作業者に表示部に表示する提示手段として動作させる結果表示プログラム２１２、制御部をプログラム個別実行手段として動作させるログ収集プログラム２１３に基づいて動作することで、データ競合したログの中から、修正すべきデータ競合の問題箇所を検出可能としている。
【００４１】
次に、情報処理装置２００の処理例を示し、本発明を説明する。  
対象のソースコードの一例として図８を示す。当該対象プログラム（ソースコード）にはスレッドＡとスレッドＢがあり、変数Ｘ，Ｙ，Ｚを使用する。このソースコードの動作では、データ競合に関する不具合が発生しており、不具合発生時のログは図９のようになっている。
【００４２】
次に、情報処理装置２００の解析時の動作を説明する。  
制御部は、補助記憶装置２１０に記録されている各種プログラムをＲＡＭに展開して読み込み、プログラム個別実行手段を機能させ、対象プログラムから対象のソースコードを取得する（図２のステップＡ１に該当）。
【００４３】
次に、制御部は、プログラム個別実行手段を機能させ、プロセスやスレッドを個別に逐次実行し、得られたログを第２のとして補助記憶装置に記憶保持する（ステップＡ２に該当）。ここで、実行の際にスレッドＡ→スレッドＢの順に実行した場合、図１０のようなログが得られる。また、スレッドＢ→スレッドＡの順に実行した場合、図１１のようなログが得られる。なお、ここでは、ログの表記として、「：」の左側にスレッド名、「( )」内に変数の値を置いている。
【００４４】
次に、制御部は、差分抽出手段を機能させ、プロセスやスレッドを個別に実行したときのログ（第２のログ）と不具合発生時のログ（第１のログ）を読み込み（ステップＡ３に該当）、２種類のログを比較し、差分を抽出して記憶する（ステップＡ４に該当）。
【００４５】
尚、図９のログと図１０、図１１のログを比較した場合、図１０、図１１のログでは２回目にＸの値を取得する時の逐次実行した場合の変数の値は100もしくは-30だが、問題発生時には0となっていること、２回目にＸの値を更新する時の逐次実行した場合の変数の値は70だが、問題発生時には-30となっていることがわかる。
【００４６】
制御部は、記憶した差分箇所を用い、表示部に、想定される問題箇所の候補を表示する（ステップＡ５に該当）。
【００４７】
図１２は、第１のログから第２のログと異なる箇所を抽出した結果を例示する説明図である。  
作業者に提示される情報には、図１２のように、問題が発生したログの中から、差分であるスレッド及び変数を取得して表示する。図１２に示すように、差分を抽出することで、変数を更新する箇所の中から、問題のある可能性が高い箇所を抽出できたことがわかる。  
図１２を詳しく説明すると、図１２（ａ）に示した結果からは、問題が発生した第１のログの中で、スレッドＢが変数Ｘを取得・更新する箇所に問題がある可能性が高いことがわかり、図１２（ｂ）に示した結果からは、問題が発生した第１のログの中で、スレッドＡが変数Ｘを取得・更新する箇所に問題がある可能性が高いことがわかる。このことから、正しく排他制御を行い、変数Ｘの取得・更新が同時に実行されないようにすることで、この第１のログの取得時に発生したデータ競合の問題は解決できる。尚、変数Ｙ、変数Ｚは変更の必要がないこともわかる。
【００４８】
本実施例では、第１の実施の形態を説明したが、第２及び第３の実施の形態も、同様に一般的な情報処理装置を用いて実現できる。この場合、データフロー解析手段及び実行順序決定手段は、ログ収集プログラムの一部として組み込んでも良いし、それぞれ別のプログラムとして準備しても良い。また、上述のプログラムを、データ競合の問題箇所検出用プログラムとして、一体的に作成しても良く、プログラムの分割及び結合は、作成者の任意でよい。
【００４９】
以上説明したように、本発明によれば、プロセスやスレッドをパラレルに実行したときのログとプロセスを個別に実行したときのログの差分箇所が問題箇所である可能性が高く、 その箇所を中心にログを確認することで問題箇所を早期に発見でき、知識や経験の少ない作業者にとっても、効果的に問題箇所を発見できることとなる。
【００５０】
即ち、上記構成及び動作によって、ログの中から、修正すべきデータ競合の問題箇所を検出する問題箇所検出用プログラム及び問題箇所検出システムを提供でき、また、問題箇所の検出方法を実現できる。
【００５１】
尚、上記説明では、係数（関数）を用いて、データ競合の検出方法を説明したが、データ競合は係数（関数）のみでは無い。例えば、データ競合が、メモリリソースや共有メモリファイル等の競合であっても、本発明は適用できる。
【００５２】
尚、本発明は、上記実施の形態、実施例に限定されるものではない。本発明は、発明の要旨を逸脱しない範囲で、構成や動作の変更を行なっても、同様の効果を奏する。
【産業上の利用可能性】
【００５３】
本発明によれば、データ競合の問題が発生した場合に、問題箇所を発見して修正するといった用途に適用できる。また、データ競合の問題を検出するツールの検査結果表示機能といった用途にも適用可能である。
【符号の説明】
【００５４】
１１０    対象プログラム格納手段
１２０    プログラム個別実行手段
１３０    第１のログ格納手段
１４０    第２のログ格納手段
１５０    差分抽出手段
１６０    データフロー解析手段
１７０    実行順序決定手段
２００    情報処理装置
２１０    補助記憶装置
２１１    差分解析プログラム（差分抽出手段）
２１２    結果表示プログラム（提示手段）
２１３    ログ収集プログラム（個別実行手段）
２１４    対象プログラム（ソースコード）
【図１】
2010237743.tif 000003
【図２】
2010237743.tif 000004
【図３】
2010237743.tif 000005
【図４】
2010237743.tif 000006
【図５】
2010237743.tif 000007
【図６】
2010237743.tif 000008
【図７】
2010237743.tif 000009
【図８】
2010237743.tif 000010
【図９】
2010237743.tif 000011
【図１０】
2010237743.tif 000012
【図１１】
2010237743.tif 000013
【図１２】
2010237743.tif 000014
【図１３】
2010237743.tif 000015