WO2014112304A1 - 排他制御検査装置、排他制御検査方法、排他制御検査プログラム - Google Patents
排他制御検査装置、排他制御検査方法、排他制御検査プログラム Download PDFInfo
- Publication number
- WO2014112304A1 WO2014112304A1 PCT/JP2013/084616 JP2013084616W WO2014112304A1 WO 2014112304 A1 WO2014112304 A1 WO 2014112304A1 JP 2013084616 W JP2013084616 W JP 2013084616W WO 2014112304 A1 WO2014112304 A1 WO 2014112304A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- lock
- lock section
- execution
- exclusive control
- section
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/28—Error detection; Error correction; Monitoring by checking the correct order of processing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
排他制御検査装置は、検査対象となるコンピュータプログラムに含まれるステートメントの実行順序及び実行経路を特定し(S02)、ステートメントの実行順序及び実行経路に基づいてロック区間を特定し(S03)、ロック区間のタイムアウト時間を抽出する(S04)。そして、実行経路の各々についてロック区間の実行に要するクロック数を算出し(S05、S06)、ロック区間の各々についてクロック数の最大値を算出し(S07)、出力する(S11)。
Description
本発明は、排他制御検査装置、排他制御検査方法、排他制御検査プログラムに関するものである。
コンピュータプログラム内のロック区間で用いられる、セマフォのビジー率及び競合率を算出するため、測定対象として指定されたセマフォのロック取得からロック解放までのロック時間、及びセマフォのロック取得待ちからロック取得までのロック解除待ち時間のそれぞれを実時間で測定するロック動作測定方法が知られている(特許文献1参照)。
特許文献1に開示されたロック動作測定方法は、システムを動作させて上記時間を測定するという動的な検査方法であるため、実際に実行されたロック区間やロック解除待ち処理のみを対象としている。そのため実際に実行されなかったロック区間や分岐経路を測定対象とすることができない。よって、実行し得るロック区間の各々について、ロック時間の最大値を把握することはできないため、システムの応答性が悪化するロック区間を特定することができない。つまり、コンピュータプログラムで使用されるロック区間の実行に要する時間(ロック時間)や、競合関係、タイムアウトが発生する状況を把握し、システムに課せられた要求を満足するか検証するという目的を、十分に果たすことができないという課題を、特許文献1に開示されたロック動作測定方法は有している。
本発明は、上記課題に鑑みて成されたものであり、その目的は、コンピュータプログラム中で実行し得るロック区間について、システムの応答性が悪化する可能性がある箇所をユーザに気づかせることができる排他制御検査装置、排他制御検査方法、排他制御検査プログラムを提供することである。
本発明の一態様に係わる排他制御検査装置は、検査対象となるコンピュータプログラムに含まれるステートメントの実行順序及び実行経路を特定し、特定されたステートメントの実行順序及び実行経路に基づいて、コンピュータプログラムに含まれる複数のタスクが利用可能な共有資源に対して排他制御を実行する一群のステートメントからなるロック区間を特定する。そして、特定されたロック区間に含まれる実行経路の各々について、ロック区間の実行に要するクロック数を算出する。そして特定された実行順序及び実行経路、ロック区間、算出されたクロック数などの情報を検査結果として出力する。
本発明の一態様に係わる排他制御検査装置は、ロック区間の各々について、共有資源へのアクセス制限が解除されることを待つことができるタイムアウト時間を抽出し、ロック区間が属するタスクとは異なる他のタスクに属する他のロック区間を競合するタスクであるとして特定し、ロック区間のクロック数の最大値が、他のロック区間のタイムアウト時間よりも大きい場合、他のロック区間がスキップされる可能性があると判断することが好ましい。
図面を参照して、本発明の実施形態を説明する。図面の記載において同一部分には同一符号を付し説明を省略する。
[排他制御検査装置のハードウェア構成]
本発明の実施形態に係わる排他制御検査装置は、例えば車両に搭載される電子制御装置(ECU)により実行されるコンピュータプログラムに含まれる排他制御を検査する処理に適用することができる。
本発明の実施形態に係わる排他制御検査装置は、例えば車両に搭載される電子制御装置(ECU)により実行されるコンピュータプログラムに含まれる排他制御を検査する処理に適用することができる。
コンピュータプログラムの実行において、複数のタスク(アプリケーションを含む)が利用できる共有資源(データ、ファイル、データベースを含む)に対して、複数のタスクからの同時アクセスにより競合が発生する場合、共有資源の整合性を保つために、一方のタスクが共有資源を独占的に利用している間は、他方のタスクは共有資源を利用できないようにする。これを排他制御という。具体的には、一方のタスクが共有資源を使用する一定区間、他方のタスクの起動をロックする。ロックされる他方のタスクは、ロックする一方のタスクがセマフォを解放した後に起動され、共有資源へのアクセスを実行する。
本発明の実施形態に係わる排他制御検査装置は、コンピュータプログラムに含まれる複数のタスクから利用可能な共有資源に対して実行する排他制御を検査する装置である。
図1を参照して、本発明の実施形態に係わる排他制御検査装置のハードウェア構成を説明する。排他制御検査装置のハードウェア構成として、汎用のコンピュータを用いることができる。例えば、排他制御検査装置は、記憶媒体から検査対象のコンピュータプログラム(ソースコードD01)及び検査に必要なデータ(エントリーポイント一覧D02、ロック開始命令/解除命令リストD03、所要クロック数一覧D04を含む)を読み込む入出力装置12と、入出力装置12で読み込んだソースコードD01や解析の中間データを格納する記憶装置14と、各種演算を実行してソースコードD01を解析するCPU(中央処理装置)11と、ユーザが解析に必要な情報を入力するための入力装置13と、CPU11から出力される検査結果(排他制御検査結果D05を含む)を表示する表示装置15と、を備える。検査結果は、入出力装置12を用いて記憶媒体に書き込むことも可能である。記憶装置14としてはメモリ、ハードディスクなどが挙げられ、記憶装置14とCPU(中央処理装置)11との間で、データの入出力が行われる。
記憶装置14に格納されている中間データはCPU11によって更新される。中間データとしては、後述する実行順序/実行経路表T01、ロック区間特定表T02、クロック数合計管理表T03、排他制御構造管理表T04などが挙げられる。
また、排他制御検査装置は、クライアントサーバモデルとしても実現可能である。例えば、コンピュータネットワークを介して汎用のパーソナルコンピュータ(クライアント)をサーバに接続する。これにより、図1に示すCPU11を備えるリモート環境に置かれたサーバを、コンピュータネットワークを介して、クライアントが備える入出力装置12、入力装置13、記憶装置14、あるいは表示装置15に接続することができる。この場合、排他制御検査装置は、主にCPU11(サーバ)により構成され、入出力装置12、入力装置13、記憶装置14、あるいは表示装置15は排他制御検査装置に含まれない。
図2を参照して、CPU11の機能的構成を説明する。CPU11を備えるコンピュータを排他制御検査装置として機能させるためのコンピュータプログラム(排他制御検査プログラム)を、CPU11を備えるコンピュータにインストールして実行する。これにより、CPU11は、以下に示す各情報処理部として機能する。なお、ここでは、ソフトウェアによって排他制御検査装置を実現する例を示すが、もちろん、以下に示す各情報処理を実行するための専用のハードウェアを用意して、排他制御検査装置を構成することも可能である。
CPU11は、ソースコード入力部21、順序経路特定部22、ロック区間特定部23、クロック数算出部24、最大クロック数算出部25、及び検査結果出力部29として機能する。
ソースコード入力部21は、検査対象となるコンピュータプログラム(ソースコードD01)を入出力装置12あるいは入力装置13から読み取り、記憶装置14に格納する。
順序経路特定部22は、ソースコード入力部21により読み取られたコンピュータプログラムに含まれるステートメントの実行順序及び実行経路を特定する。具体的には、入出力装置12あるいは入力装置13から入力されるエントリーポイント一覧D02を用いて、入力装置13から入力されるエントリーポイント(プログラムの開始点)を起点に実行されるステートメントの実行順序及び実行経路を特定する。エントリーポイント一覧D02については、図6を参照して後述する。エントリーポイント一覧D02は、ファイル形式あるいはデータベースとして記憶装置14に記録される。エントリーポイント一覧D02は、CPU11からの指示によって読み出される。順序経路特定部22によって特定されたステートメントの実行順序及び実行経路は、順序経路特定部22によって実行順序/実行経路表T01(図5)に記録される。実行順序/実行経路表T01は、ファイル形式あるいはデータベースとして記憶装置14に記録される。
ロック区間特定部23は、順序経路特定部22により特定されたステートメントの実行順序及び実行経路に基づいて、ロック区間を特定する。「ロック区間」は、コンピュータプログラムに含まれる複数のタスクが利用可能な共有資源に対して排他制御を実行する一群のステートメントからなる。換言すれば、ロック区間とは、一方のタスクが共有資源を排他的に使用する一定区間である。ロック区間において、他方のタスクの起動はロックされ、共有資源の使用が禁止される。
具体的に、ロック区間特定部23は、実行順序/実行経路表T01に記録されたステートメントの実行順序及び実行経路の情報に従って、ロック開始命令から解除命令までの区間(ロック区間)を特定する。ロック区間特定部23は、入出力装置12あるいは入力装置13から入力されるロック開始命令/解除命令リストD03に基づいて、ロック開始命令、およびロック解除命令のステートメントを特定する。ロック開始命令/解除命令リストD03については、図7を参照して後述する。ロック開始命令/解除命令リストD03は、ファイル形式あるいはデータベースとして記憶装置14に記録される。ロック開始命令/解除命令リストD03は、CPU11のロック区間特定部23からの指示によって読み出される。
クロック数算出部24は、ロック区間特定部23により特定されたロック区間に含まれる実行経路の各々について、ロック区間の実行に要するクロック数を算出する。具体的には、入出力装置12あるいは入力装置13から入力される所要クロック数一覧D04に基づいて、ロック区間特定部23により特定されたロック区間に含まれる各ステートメントの実行に要するクロック数を算出する。なお所要クロック数一覧D04には、ステートメントに記述される命令の種類毎に、その命令の実行に必要なクロック数が記録されている。所要クロック数一覧D04については、図8を参照して後述する。所要クロック数一覧D04は、ファイル形式あるいはデータベースとして記憶装置14に記録され、CPU11のクロック数算出部24からの指示によって読み出される。
クロック数算出部24によって算出された各ステートメントの実行に要するクロック数は、クロック数算出部24によってロック区間特定表T02(図10)に記録される。ロック区間特定表T02は、ファイル形式あるいはデータベースとして記憶装置14に記録される。
そして、クロック数算出部24は、実行経路の各々について、各ステートメントの実行に要するクロック数の合計値を算出し、その合計値を、ロック区間特定部23によって特定されたロック区間に関する情報と共にクロック数合計管理表T03(図11)に記録する。クロック数合計管理表T03は、ファイル形式あるいはデータベースとして記憶装置14に記録される。
最大クロック数算出部25は、クロック数合計管理表T03を参照して、ロック区間の各々について、クロック数算出部24により算出されたクロック数の最大値を算出する。具体的には、1つのロック区間に2以上の実行経路が含まれている場合、即ち、1つのロック区間の中で分岐条件のもとで2以上の分岐処理が行われる場合、2以上の実行経路の中で、最も大きなクロック数を抽出する。1つのロック区間に1つの実行経路だけが含まれている場合、クロック数算出部24により算出されたクロック数がそのまま、そのロック区間におけるクロック数の最大値となる。最大クロック数算出部25によって算出されたクロック数の最大値は、最大クロック数算出部25によってクロック数合計管理表T03に記録される。
検査結果出力部29は、少なくとも最大クロック数算出部25により算出されたクロック数の最大値を、排他制御検査結果D05として表示装置15あるいは入出力装置12に挿入された記憶媒体へ出力する。検査結果出力部29により出力されるクロック数の最大値については、図11を参照して後述する。
CPU11は、タイムアウト時間抽出部26、競合ロック区間特定部27、及びタイムアウト判断部28として更に機能する。
タイムアウト時間抽出部26は、ロック区間の各々について、共有資源へのアクセス制限が解除されることを待つことができるタイムアウト時間を抽出する。具体的には、ロック区間に対応するロック開始命令の引数を参照することにより、タイムアウト時間を抽出する。
一方のタスクによる共有資源の使用によって、共有資源の使用が禁止される他方のタスクは、その他方のタスクのロック区間に対応するロック開始命令の引数で設定されたタイムアウト時間だけ、一方のタスクによるセマフォの解放を待つことができる。しかし、タイムアウト時間が経過しても、一方のタスクがセマフォを解放しない場合、他方のタスクは実行せずに、次の処理へスキップする。
競合ロック区間特定部27は、クロック数合計管理表T03を参照して、ロック区間の各々について、ロック区間が属するタスクとは異なる他のタスクに属する他のロック区間を特定する。同一の共有資源を排他的に利用可能な複数のタスクのうち一方のタスクがセマフォを獲得している場合、他方のタスクは同じセマフォを獲得できない。同じセマフォを用いる2以上のロック区間のうち、異なるタスクに属するロック区間は、そのセマフォの獲得について競合することになる。競合ロック区間特定部27は、ロック区間の各々について、セマフォの獲得に関して競合する他のロック区間を特定する。つまり、競合関係にあるロック区間の組合せを特定する。特定された競合関係にあるロック区間の組合せは、競合ロック区間特定部27によって排他制御構造管理表T04(図12)に記録される。排他制御構造管理表T04はファイル形式あるいはデータベースとして記憶装置14に記録される。
タイムアウト判断部28は、クロック数合計管理表T03および排他制御構造管理表T04を参照して、ロック区間のクロック数の最大値と、競合関係にある他のロック区間のタイムアウト時間を取得する。そしてタイムアウト判断部28は、ロック区間のクロック数の最大値が、他のロック区間のタイムアウト時間よりも大きい場合、他のロック区間がスキップされる可能性があると判断する。具体的には、タイムアウト判断部28は、競合関係にある2以上のロック区間のうち、一方のロック区間の実行に要するクロック数の最大値と、他方のロック区間で規定されるタイムアウト時間とを比較する。
クロック数とは、マイコンが行うタイミング制御に用いる内部クロックの数を示す。クロック数に、マイコンの1クロックあたりの実行時間にクロック数を掛け合わせることにより、ロック区間の実行に要する時間が求められる。またタイムアウト時間は、マイコンが行うタイミング制御に用いる内部クロックの数として表現される。そのため、タイムアウト判断部28は、一方のロック区間の実行に要するクロック数の最大値と、クロック数によって表現された他のロック区間のタイムアウト時間とを比較する。
一方のロック区間の実行に要するクロック数の最大値が、他方のロック区間のタイムアウト時間よりも大きい場合、タイムアウト時間が経過しても一方のロック区間がセマフォを解放しないため、他方のロック区間がスキップされてしまう可能性があると、タイムアウト判断部28は判断することができる。
検査結果出力部29は、タイムアウト判断部28による判断結果を、最大クロック数算出部25により算出されたクロック数の最大値と共に、排他制御検査結果D05として出力する。排他制御検査結果D05については、図13を参照して後述する。
[排他制御検査装置により実行される情報処理の手順]
次に、図3~図13を参照して、本発明の実施形態に係わる排他制御検査方法の一例として、図1及び図2に示す排他制御検査装置によって実行される情報処理の手順を説明する。
次に、図3~図13を参照して、本発明の実施形態に係わる排他制御検査方法の一例として、図1及び図2に示す排他制御検査装置によって実行される情報処理の手順を説明する。
先ず、ステップS01において、ソースコード入力部21は、検査対象となるソースコードD01を例えば入出力装置12から読み込み、記憶装置14に格納する。なお、ソースコードD01は、予め入出力装置12を用いてユーザにより排他制御検査装置内に読み込まれ、記憶装置14に格納されていてもよい。この場合、ステップS01の処理は不要である。図4(a)、図4(b)、図4(c)は、読み込まれたソースコードD01として、C言語で記述されたコンピュータプログラムの一例を示す。検査対象となるコンピュータプログラムは、図4(a)、図4(b)、図4(c)に示す3つのファイルに跨って記述されている。図4(a)のファイル名は「File1.c」であり、図4(b)のファイル名は「File2.c」であり、図4(c)のファイル名は「File3.c」である。C言語で記述されたコンピュータプログラムの一例において、各ファイルの左端部に記載された1から始まる連続番号は、各ファイルの「行番号」を示す。
次に、ステップS02において、順序経路特定部22は、エントリーポイント一覧D02を用いて、エントリーポイント(プログラムの開始点)を起点としたコントロールフロー、即ち、ステートメントの実行順序及び実行経路を特定する。
図4(a)、図4(b)、図4(c)に示すコンピュータプログラムには、4つの関数が記述されている。図4(a)の「File1.c」の中に、関数「Task1」が記述されている。関数「Task1」は、2つの関数「Func1」及び関数「Func2」を呼び出して終了する。関数「Func1」及び関数「Func2」は図4(b)の「File2.c」の中に記述されている。図4(c)の「File3.c」の中に、関数「Task2」が記述されている。関数「Task2」は、関数「Func2」を呼び出して終了する。図6に示すように、プログラムの開始点となるエントリーポイントは、「Task1」及び「Task2」である。
図5の表は、図4(a)の関数「Task1」をエントリーポイントとした場合のステートメント(コード)の実行順序及び実行経路の一例を示す。図5の表において、「ステートメントID」は、ソースコードD01内のステートメントに付される「1」から始まる連続番号である。すなわち「ステートメントID」は、ソースコードD01を構成する図4(a)、図4(b)、図4(c)に示す3つのファイルの、各行に記載された実行命令に対して、行番号の順に付される。
各行の記載が空(例えば図4(a)の10行目)、あるいはプログラムのブロック区切り(“{”、“}”などの括弧)のみから構成される行(例えば図4(a)の3、12、15行目など)は、プログラム実行時において実行時間を発生させるものではないものと判断できる。そのため、順序経路特定部22は、このような行を以降の処理の対象から外すため、このような行に対して「ステートメントID」を付していない。もちろん、このような行に対してステートメントIDを付したとしても、以降の処理に影響を及ぼすものではない。プログラム実行時において実行時間を発生させる可能性があるものと判断できる行がすべて処理の対象となるようにステートメントIDが付与されればよいのであって、ステートメントIDの付与の方法は本実施形態の例に限定されるものではない。
「前実行ステートメントID」は、そのステートメントの前に実行されるステートメントに付されたステートメントIDを示す。「次実行ステートメントID」は、そのステートメントの次に実行されるステートメントに付されたステートメントIDを示す。
ステートメントが分岐命令、関数呼出し命令、繰り返し命令である場合には、ジャンプ先のステートメントに対応するステートメントIDが、次実行ステートメントIDとして登録される。ジャンプ先は一般に1つとは限らず、複数個存在する場合もあるため、次実行ステートメントIDとしては、1個または複数個のステートメントIDを順序経路特定部22によって実行順序/実行経路表T01に記録する。ステートメントが分岐命令、関数呼出し命令、繰り返し命令のいずれでもない場合には、ソースコードD01上の、次の行番号の箇所で記載されたステートメントに対応するステートメントIDを、次実行ステートメントIDとして登録する。
前実行ステートメントIDは、ソースコードD01に含まれる全てのステートメントについて次実行ステートメントIDが記録された後に、実行順序/実行経路表T01に登録することができる。例えばソースコードD01のステートメントL01について前実行ステートメントIDを登録する場合、実行順序/実行経路表T01を参照して、ステートメントL01に対応するステートメントIDが次実行ステートメントIDとして記録されているステートメントL02を読み出す。つまり、ステートメントL02の1つ後にステートメントL01が実行されることから、ステートメントL01の1つ前に実行されるステートメントはステートメントL02であることが分かる。そのため、ステートメントL01について前実行ステートメントIDとしては、ステートメントL02に対応するステートメントIDを記録する。ソースコードD01の全てのステートメントについて、同様の作業を繰り返すことにより、全ての前実行ステートメントIDを記録することができる。
なお、ステートメントL01について次実行ステートメントIDが複数記録されている場合には、記録されている次実行ステートメントIDのそれぞれについて同様の処理を繰り返すことにより、前実行ステートメントIDを記録することができる。
順序経路特定部22は、ソースコードD01に含まれるステートメントの中から条件分岐を検出する。条件分岐には、if~else構文、switch~case構文、ループ文(for文、while文)、3項演算子“:”が含まれる。順序経路特定部22は、条件分岐が開始するステートメントを「分岐開始点」と判断し、条件分岐が終了するステートメントを「分岐終了点」と判断する。特定された2以上の「分岐開始点」「分岐終了点」には「分岐ID」を付して識別する。ただし分岐開始点とその分岐開始点に対応する分岐終了点には、対応関係が分かるよう同一の分岐IDを付す。
そして、順序経路特定部22は、分岐開始点と分岐終了点との間にあるステートメントに対して、条件分岐によって生成される2以上の実行経路を特定する。そして、特定された2以上の実行経路には「経路ID」を付して識別する。
図5には、関数「Task1」をエントリーポイントとした場合を例示するが、順序経路特定部22は、関数「Task2」をエントリーポイントとして場合についても、図5と同様にして実行順序及び実行経路を特定する。
なお図5の例では、順序経路特定部22は、分岐開始点にあるステートメントに対して条件分岐によって生成される2以上の実行経路を特定し、一方で、分岐終了点にあるステートメントに対しては実行経路を特定していない。分岐開始点および分岐終了点のステートメントについて実行経路の特定を行うか否かは、本実施形態の例に限定されるものではない。
さらに、図5の例では、条件分岐により複数の実行経路のうちいずれの実行経路を進む場合でも、条件文の評価に際してクロック数が発生するため、条件文を含む条件分岐を表すステートメントは、複数の実行経路に属しているものとして扱っている。このように、順序経路特定部22は、複数の実行経路で実行されるものと判断されるステートメントに対して、対応する複数の実行経路を指し示す複数の経路IDを付す。
上述したようにして、順序経路特定部22は、図5の表に示すようなソースコードD01に含まれるステートメント(コード)の実行順序/実行経路表T01を作成する。
実行順序/実行経路表T01に記録された前実行ステートメントIDおよび次実行ステートメントIDを用いると、ステートメントの上流、および下流で実行されるステートメントを抽出することができる性質に注意する。すなわち、前実行ステートメントIDを参照することで、順次、1つ前に実行されるステートメントを参照できるため、あるステートメントに関して、その上流で実行されるステートメント抽出することができる。また、次実行ステートメントIDを参照することで、順次、1つ後に実行されるステートメントを参照できるため、下流で実行されるステートメントを抽出することができる。
次に、ステップS03~S05に示す情報処理F01を実行する。ステップS03において、ロック区間特定部23は、図7に示すロック開始命令/解除命令リストD03に基づいて、ロック開始命令から解除命令までの区間(ロック区間)を特定する。ステップS04において、タイムアウト時間抽出部26は、特定されたロック区間の各々について、タイムアウト時間を抽出する。ステップS05において、クロック数算出部24は、図8に示す所要クロック数一覧D04に基づいて、ロック区間に含まれる各ステートメントの実行に要するクロック数を算出する。
図7の表は、ロック開始命令/解除命令リストD03の一例を示す。ロック開始命令として「Sem_Lock」が定義され、ロック解除命令として「Sem_UnLock」が定義されている。ソースコードD01の中で用いられる複数のセマフォを識別するためのセマフォIDは、「Sem_Lock」及び「Sem_UnLock」でそれぞれ引用される第1引数によって指定される。また、タイムアウト時間は、「Sem_Lock」で引用される第2引数によって指定される。例えば、図4(a)の4行目に示す「Sem_Lock(ID1,100)」とは、セマフォIDが「ID1」で識別されるセマフォによるロック区間の開始命令を示し、4行目から始まるロック区間のタイムアウト時間が100(クロック数)であることを示す。図4(a)の9行目に示す「Sem_UnLock(ID1)」とは、セマフォIDが「ID1」のセマフォによるロック区間の解除命令を示す。
図8の表は、所要クロック数一覧D04の一例を示す。ステートメントに記述される命令毎に、その命令の実行に必要なクロック数が定義されている。
ここで、ステップS03~S05は並行して実施することができる。図9のフローチャートを参照して、ステップS03~S05に示す情報処理F01の詳細な処理手順の一例を説明する。
先ず、ステップS101において、ロック区間を識別するための区間IDを初期化する。ステップS102において、ソースコードD01に含まれるタスクを識別するためのタスクIDを初期化する。ステップS103へ進み、ステップS102で初期化されたタスクIDで特定される関数「Task1」における最初のステートメント(ステートメントID=1)を読み込む。
ロック区間特定部23は、図7のロック開始命令/解除命令リストD03を参照して、読み込んだステートメントがロック開始命令「Sem_Lock」あるいはロック解除命令「Sem_UnLock」に合致するか否かを判断する。ロック開始命令「Sem_Lock」に合致する場合、ステップS105に進む。ロック解除命令「Sem_UnLock」に合致する場合、ステップS107に進む。ロック開始命令「Sem_Lock」及びロック解除命令「Sem_UnLock」の何れにも合致しない場合、ステップS108に進む。
ステップS105において、区間IDをカウントアップする。ステップS106に進み、ステートメント種別としてのロック開始命令(「開始))、区間ID、セマフォID、及びタイムアウト時間をロック区間特定表T02に記録する。ここで記録するセマフォID、及びタイムアウト時間は、ロック開始命令の第1引数および第2引数を参照することで得られる。その後、ステップS113に進む。
一方、ステップS107において、ステートメント種別としてのロック解除命令(「解除」)、セマフォIDが同じである上流のロック開始命令の区間ID、およびセマフォIDをロック区間特定表T02に記録する。その後、ステップS113に進む。
ステップS107において、セマフォIDは、ロック解除命令の第1引数を参照することで得られる。また、上流のロック開始命令は、実行順序/実行経路表T01の前実行ステートメントIDを使用することにより抽出できる。読み込んだステートメントに対応する前実行ステートメントIDを参照することで、1つ前に実行されるステートメントを抽出できる。そのステートメントがロック開始命令でない場合、前実行ステートメントIDを参照してさらに1つ前に実行されるステートメントを抽出する。同様の作業を繰り返すことにより、最終的に上流のロック開始命令を抽出できる。そこで上流のロック開始命令のセマフォIDが、ロック解除命令のセマフォIDと同じであるか否かを判定する。同じである場合には、上流のロック開始命令の区間IDをロック区間特定表T02に記録する。なお前実行ステートメントIDには、1つ前に実行されるステートメントに対応する複数のステートメントIDが記載される場合があるので、複数の上流のロック開始命令が存在する場合も起こりうる。
ステップS108において、ロック区間特定部23は、読み込んだステートメントが、ロック開始命令からロック解除命令までのロック区間内にあるか否かを判定する。ロック区間内にある場合(ステップS108でYES)、ステップS109に進む。一方、ロック区間内にない場合(ステップS108でNO)、ステップS110に進み、ロック区間特定部23は、ステートメント種別として「区間外」をロック区間特定表T02に記録する。その後、ステップS113へ進む。
ステップS110において、ロック区間特定部23は、ステートメント種別として「区間内」及び区間IDをロック区間特定表T02に記録する。ステップS111に進み、クロック数算出部24は、読み込んだステートメントに記述された総ての命令を抽出する。ステップS112に進み、クロック数算出部24は、図8に示す所要クロック数一覧D04に基づいて、読み込んだステートメントから抽出した総ての命令の実行に必要なクロック数の総和を算出する。これにより、クロック数算出部24は、読み込んだステートメントの実行に要するクロック数を求めることができる。クロック数算出部24は、算出されたクロック数をロック区間特定表T02に記録する。その後、ステップS113へ進む。
ステップS113において、読み込んだステートメントが、ロック区間内の最後のステートメントであるか否かを判断する。ロック区間内の最後のステートメントでない場合(ステップS113でNO)、実行順序/実行経路表T01の次実行ステートメントIDを参照して、次のステートメントを読み込み(S118)、ステップS104へ戻る。一方、読み込んだステートメントが、ロック区間内の最後のステートメントである場合(ステップS113でYES)、ステップS114へ進む。未だ判定していないステートメントがある場合(S114でYES)、ステップS115に進み、未だ判定していないステートメントを読み込み、ステップS104へ戻る。
一方、未だ判定していないステートメントがない場合(S114でNO)、ステップS116に進み、ステップS102で初期化されたタスクIDで特定される関数「Task1」が最後のタスクであるか否かを判断する。最後のタスクでなければ(ステップS116でNO)、タスクIDをインクリメントして(ステップS117)、ステップS103に戻る。そして、関数「Task2」について上記した手順を実行する。一方で、最後のタスクであれば(ステップS116でYES)、図9のフローチャートは終了する。
読み込んだステートメントが、ロック開始命令からロック解除命令までのロック区間内にあるか否かの判定は、実行順序/実行経路表T01の前実行ステートメントIDおよび次実行ステートメントIDを用いて、読み込んだステートメントの上流および下流で実行されるステートメントを検索し、ロック開始命令、ロック解除命令が存在するか否かによって行う。検索して得られたロック開始命令とロック解除命令について、セマフォIDおよび区間IDが同一であれば、読み込んだステートメントは区間IDで指定されるロック区間に含まれているものと、ロック区間特定部23は判断できる。また、一般に、ソースコードD01が条件分岐を含んでいる場合、読み込んだステートメントが複数のロック区間にある場合も起こりうる。
上流および下流で実行されるステートメントの検索には、タスクに含まれる全てのロック開始命令およびロック解除命令について、ロック区間特定表T02への記録が行われている必要があるが、図9のフローチャートの処理では簡略化して表現している。
図10の表は、図9のフローチャートの実行結果の一例として、図4(a)の関数「Task1」についての実行結果を示しており、図4(a)の関数「Task1」についての、ロック区間特定表T02を表す。ステートメントID=2~7の一群のステートメントが、区間ID=1で識別されるロック区間として特定される。区間ID=1のロック区間のロック開始命令「Sem_Lock」と合致するステートメントID=2では、セマフォID=1及びタイムアウト時間=100を記録している。ステートメントID=2~7で実行されるステートメントID=3~6の一群のステートメントには「区間内(区間ID=1)」がそれぞれ記録され、ステートメントID=3~6の一群のステートメントの各々について、ステートメントに含まれる命令のリスト及びステートメントの実行に要するクロック数が記録されている。ロック区間(区間ID=1)のロック解除命令「Sem_UnLock」と合致するステートメントID=7のステートメントに対しては、セマフォID=1が記録されている。なお、ロック区間(区間ID=1)では、1つのロック区間の中に、経路ID(1,1)(1,2)でそれぞれ識別される2つの実行経路に分岐する分岐処理が存在している。
同様にして、ステートメントID=9、10、15、16、14の順番で実行される一群のステートメントが、区間ID=2で識別されるロック区間として特定される。また、ステートメントID=12、13、17、18、14の順番で実行される一群のステートメントが、区間ID=3で識別されるロック区間として特定される。ロック区間(区間ID=2)及びロック区間(区間ID=3)で使用するセマフォ(セマフォID=ID2)は共通している。一方、ロック区間(区間ID=2)及びロック区間(区間ID=3)で使用するセマフォ(セマフォID=ID2)は、ロック区間(区間ID=1)で使用するセマフォ(セマフォID=ID1)とは異なる。なお、ロック区間(区間ID=2)及びロック区間(区間ID=3)は、ステートメントID=8のステートメントを分岐開始点(分岐ID=2)とし、ステートメントID=14のステートメントを分岐終了点(分岐ID=2)とする、それぞれ経路ID(2,1)(2,2)で識別される2つの実行経路の中に存在している。
上述したようにして、ロック区間特定部23およびクロック数算出部24は、実行順序/実行経路表T01を元にして、図10の表に示すようなソースコードD01に含まれるステートメント(コード)のロック区間特定表T02を作成する。このロック区間特定表T02には、ロック区間特定部23が特定したステートメント種別、区間ID、セマフォID、タイムアウト時間が記録される。そして、クロック数算出部24が抽出したステートメント内の命令、もしくはその命令の種別、クロック数が記録される。
図3に戻り、ステップS06において、クロック数算出部24は、ロック区間特定部23により特定されたロック区間に含まれる実行経路の各々について、ロック区間の実行に要するクロック数を算出する。具体的には、図9のステップS112において算出された、各ステートメントの実行に要するクロック数を、記憶装置14に記録されたロック区間特定表T02から読み出し、各ロック区間に含まれる総てのステートメントについてクロック数を合算する。これにより、実行経路の各々について、ロック区間の実行に要するクロック数を算出することができる。この際、ロック区間(ロックID=1)内に2以上の実行経路(経路ID(1,1)(1,2))が存在する場合、実行経路の各々について、ロック区間の実行に要するクロック数を算出する。算出されたロック区間の実行に要するクロック数は、図11に示すクロック数合計管理表T03に記録される。
図11のクロック数合計管理表T03のうち、「区間内ステートメントのクロック数合計」は、関数「Task1」及び関数「Task2」に含まれるロック区間(ロックID=1~4)について、ロック区間の実行に要するクロック数を示す。ロック区間(ロックID=1)に関しては、ロック区間内に2つの実行経路(経路ID(1,1)(1,2))が存在するため、実行経路毎にロック区間の実行に要するクロック数を示す。例えば、図10に示したように、経路ID(1,1)で識別される実行経路には、ステートメントID=3、4の一群のステートメントが含まれる。ステートメントID=3のステートメントの実行に要するクロック数は、「1」であり、ステートメントID=4のステートメントの実行に要するクロック数は、「3」である。よって、図11に示すように、経路ID(1,1)で識別される実行経路について、ロック区間(ロックID=1)の実行に要するクロック数は「1+3」=「4」である。
ステップS07において、最大クロック数算出部25は、クロック数合計管理表T03のうち「区間内ステートメントのクロック数合計」を参照して、ロック区間の各々について、ステップS06において算出されたクロック数の最大値を算出する。図11に示すように、ロック区間(ロックID=1)に関しては、経路ID(1,1)で識別される実行経路のクロック数(=4)と、経路ID(1,2)で識別される実行経路のクロック数(=3)とを比較して、大きい方のクロック数(=4)を選択する。1つのロック区間に1つの実行経路だけが含まれている場合、ステップS06において算出されたクロック数がそのまま、そのロック区間におけるクロック数の最大値となる。
図11に示すように、実施形態に係わる排他制御検査装置は、検査対象となるソースコードD01に含まれる排他制御に関する構造を可視化することができる。換言すれば、ソースコードD01に含まれる排他制御に関する構造として、エントリーポイント、区間ID、セマフォID、経路ID、経路に含まれるステートメントIDを特定することができる。そして、静的な解析方法により、検査対象となるソースコードD01中で実行し得るロック区間の各々について、ロック区間の実行に要するクロック数の最大値を求めることができる。よって、コンピュータプログラム中で実行し得るロック区間について、システムの応答性が悪化する可能性がある箇所を漏れなく特定することができる。
図3に戻り、ステップS08において、競合ロック区間特定部27は、クロック数合計管理表T03を参照して、ロック区間の各々について、ロック区間が属するタスクとは異なる他のタスクに属する他のロック区間を特定する。更に、実施形態では、ソースコードD01の中で、複数種類のセマフォ(セマフォID=ID1及びID2)を用いている。セマフォが異なれば、セマフォの取得に関する競合関係は生じない。このため、同じセマフォを用いているロック区間において、異なるタスクに属するロック区間の組合せを特定する。図12は排他制御構造管理表T04を示す。排他制御構造管理表T04には、競合関係にあるブロック区間の組合せが記録される。ステップS08において、競合ロック区間特定部27により排他制御構造管理表T04は読み出され、あるいは更新される。
ロック区間(ロックID=1)は、関数「Task1」に属し、且つセマフォ(セマフォID=ID1)を使用する。ロック区間(ロックID=2)及びロック区間(ロックID=3)は、関数「Task1」に属し、且つセマフォ(セマフォID=ID2)を使用する。一方、ロック区間(ロックID=4)は、関数「Task2」に属し、且つセマフォ(セマフォID=ID2)を使用する。
よって、ロック区間(ロックID=2)、ロック区間(ロックID=3)、及びロック区間(ロックID=4)は、同一の共有資源に対して同じセマフォ(セマフォID=ID2)を用いて排他制御を実行する。ここでロック区間(ロックID=2)とロック区間(ロックID=4)は、異なるタスク「Task1」、「Task2」に属するため、セマフォID=ID2のセマフォの取得に関して競合関係にある。同様に、ロック区間(ロックID=3)とロック区間(ロックID=4)は、セマフォID=ID2のセマフォの取得に関して競合関係にある。一方、ロック区間(ロックID=2)とロック区間(ロックID=3)は、同じセマフォID=ID2のセマフォを使用するが、同じタスク「Task1」に属するため、セマフォID=ID2のセマフォの取得に関して競合することはない。
ロック区間(ロックID=1)については、その他のロック区間(ロックID=2)、ロック区間(ロックID=3)、ロック区間(ロックID=4)とは使用するセマフォが異なるため競合しない。
上述したように、競合ロック区間特定部27は各ロック区間について、そのロック区間の属するタスク、および使用するセマフォの情報を用いて、その他のロック区間と競合するか否かを特定する。ステップS08の実行後において、排他制御構造管理表T04は、競合ロック区間特定部27が特定した、競合関係にあるブロック区間の組合せに関する情報を格納した状態となる。
次に、ステップS09に進み、タイムアウト判断部28は、ロック区間のクロック数の最大値が、競合する他のロック区間のタイムアウト時間よりも大きいか否かを判断する。具体的には、タイムアウト判断部28は、ロック区間特定表T02に記録された各ロック区間のタイムアウト時間と、排他制御構造管理表T04に記録された競合関係にあるブロック区間の組合せの情報とを参照する。そしてステップS08で特定された競合関係にあるロック区間の組合せのうち、一方のロック区間の実行に要するクロック数の最大値と、他方のロック区間のタイムアウト時間とを対比する。なお、前述したように、タイムアウト時間は、マイコンが行うタイミング制御に用いる内部クロックの数として表現されるため、クロック数の最大値と比較することは可能である。
一方のロック区間の実行に要するクロック数の最大値が、他方のロック区間のタイムアウト時間よりも大きい場合(ステップS09でYES)、タイムアウト判断部28は、他方のロック区間をスキップしてしまう可能性があると判断する(ステップS10)。
一方のロック区間の実行に要するクロック数の最大値が、他方のロック区間のタイムアウト時間よりも小さいあるいは等しい場合(ステップS09でNO)、タイムアウト判断部28は、他方のロック区間をスキップしてしまう可能性があると判断する(ステップS12)。
タイムアウト判断部28は、ステップS09で特定された総てのブロック区間の組合せについて、ステップS09の判断を実行する。
ステップS11に進み、検査結果出力部29は、タイムアウト判断部28による判断結果を、最大クロック数算出部25により算出されたクロック数の最大値と共に、排他制御検査結果D05として出力する。図13は、排他制御検査結果D05の一例を示す表である。例えば、一方のロック区間(ロックID=3)のクロック数の最大値(=6)は、競合する他方のロック区間(ロックID=4)のタイムアウト時間(=5)よりも大きい。つまり、一方のロック区間(ロックID=3)がセマフォID=ID2のセマフォをロックしている間に、他方のロック区間(ロックID=4)はセマフォID=ID2のセマフォを取得することなく、セマフォ解除待ちのまま、タイムアウト時間が経過してしまう可能性がある。そこで、タイムアウト判断部28は、関数「Task1」の実行中にロック区間(ロックID=4)をスキップしてしまう可能性があると判断する。同様に、一方のロック区間(ロックID=4)のクロック数の最大値(=11)は、競合する他方のロック区間(ロックID=2)のタイムアウト時間(=10)よりも大きい。このため、タイムアウト判断部28は、関数「Task2」の実行中にロック区間(ロックID=2)をスキップしてしまう可能性があると判断する。
これに対して、一方のロック区間(ロックID=2)のクロック数の最大値(=5)は、競合する他方のロック区間(ロックID=4)のタイムアウト時間(=5)よりも大きくない。同様に、一方のロック区間(ロックID=4)のクロック数の最大値(=11)は、競合する他方のロック区間(ロックID=3)のタイムアウト時間(=15)よりも大きくない。よって、これらのロック区間の組合せについては、セマフォの解除待ちのまま、タイムアウト時間が経過してしまう可能性はないと判断することができる。なお、図13には、セマフォID=ID1のセマフォを使用するロック区間(ロックID=1)を記載しているが、ソースコードD01の中にセマフォID=ID1のセマフォを使用する他のロック区間が無いため、競合関係は存在しない。
[実施形態による効果]
コンピュータプログラムにおいて、複数のタスクやアプリケーションが同一のリソース(資源)にアクセスする場合、アクセスの競合によるデータ破壊を避けるため、セマフォ等の排他制御により他のタスクからのアクセスを一時的に禁止する処置をとる。すなわち、一方のタスクがリソースを使用する一定区間、他方のタスクの起動をロックする。ロックされるタスクは、ロックするタスクがセマフォを解放した後に起動され、リソースへのアクセスを実行する。ここで、他のタスクからのリソースアクセスをロックする区間(ロック区間)の設定を誤ると、ロックするタスクが不当な時間リソースを占有し、他のタスクの動作を遅くするという問題が発生する。結果的には、タスクの応答時間が延び、システムの動作が鈍くなるという不具合につながる。
コンピュータプログラムにおいて、複数のタスクやアプリケーションが同一のリソース(資源)にアクセスする場合、アクセスの競合によるデータ破壊を避けるため、セマフォ等の排他制御により他のタスクからのアクセスを一時的に禁止する処置をとる。すなわち、一方のタスクがリソースを使用する一定区間、他方のタスクの起動をロックする。ロックされるタスクは、ロックするタスクがセマフォを解放した後に起動され、リソースへのアクセスを実行する。ここで、他のタスクからのリソースアクセスをロックする区間(ロック区間)の設定を誤ると、ロックするタスクが不当な時間リソースを占有し、他のタスクの動作を遅くするという問題が発生する。結果的には、タスクの応答時間が延び、システムの動作が鈍くなるという不具合につながる。
このような問題を避け、システムの応答性を許容範囲内に収めるため、セマフォの開放待ち、即ちロック解除待ちのタイムアウト時間を設定する。タイムアウト時間を超えてもセマフォが解放されない場合に、リソースへのアクセス処理をスキップし、その先の処理を実行する。
しかしながら、レガシーコードの流用や拡張により、ロック区間が想定外に長くなると、設定されたタイムアウト時間に対しロック区間の平均処理時間が長くなり、タイムアウトが頻発するという問題が起きる。また、大規模なソフトウェアでは、ロックの競合関係が把握できず、不適切なタイムアウト時間が設定されてしまうという問題がある。
そこで、実施形態に係わる排他制御検査装置は、順序経路特定部22により、検査対象となるソースコードD01(コンピュータプログラム)に含まれるステートメントの実行順序及び実行経路を特定し、特定されたステートメントの実行順序及び実行経路に基づいて、ロック区間特定部23はコンピュータプログラムに含まれる複数のタスクが利用可能な共有資源に対して排他制御を実行する一群のステートメントからなるロック区間を特定する。そして、特定されたロック区間に含まれる実行経路の各々について、クロック数算出部24はロック区間の実行に要するクロック数を算出する。これにより、排他制御を実行するロック区間の各々についてロック時間の最大値を求めることができる。検査結果出力部29によって、特定された実行順序及び実行経路、ロック区間、算出されたクロック数などの情報が検査結果として出力されるため、コンピュータプログラム中で実行し得るロック区間について、システムの応答性が悪化する可能性がある箇所をユーザに気づかせることができる。これにより、タイムアウト時間を適正化して、システムの応答性を改善することができる。また、コンピュータプログラムを静的な手法により解析することにより、実際に実行されないロック区間やロック解除待ち処理を検査対象とすることができるため、検証の見落としを抑制することができる。
また、排他制御検査装置は、タイムアウト時間抽出部26によってロック区間の各々について、共有資源へのアクセス制限が解除されることを待つことができるロック区間に設定されたタイムアウト時間を抽出し、ロック区間が取得するセマフォ、およびロック区間が属するタスクの情報に基づき、競合ロック区間特定部27によってロック区間の各々について競合関係を形成する他のロック区間を特定する。そして、タイムアウト判断部28は、競合関係を形成する一方のロック区間のクロック数の最大値が、競合関係を形成する他方のロック区間のタイムアウト時間よりも大きい場合、他方のロック区間がスキップされる可能性があると判断し、その判断結果は、検査結果出力部29によって出力される。これにより、例えば、レガシーコードの移植ミスや、分散開発されたソースコードの結合ミスにより、不適切なタイムアウト時間が設定されている箇所を、ユーザに気づかせることができる。よって、タイムアウト時間の適正化を図り、タイムアウトの頻発を抑制することができる。
その他の変形例として、例えば、図3のステップS09及びS10において、スキップしてしまう可能性があると判断した競合関係にあるロック区間の組合せに対して、排他制御検査装置は、一方のロック区間のクロック数の最大値に対する、他方のロック区間のタイムアウト時間の割合を検証優先度として算出して、排他制御検査結果D05として出力してもよい。この割合(検証優先度)が高い程、つまり、100%に近い程、排他制御に関する検証優先度が高まる。スキップしてしまう可能性がある箇所として、複数のロック区間の組合せを特定する情報が出力される場合、検証対象としての優先度をユーザに伝えることができるので、ユーザによる検証作業の効率を高めることができる。検証優先度が100%未満だが極めて100%に近い値のロック区間の組合せを点検することで、レガシーコードの移植ミスや、分散開発されたソースコードの結合ミスにより、不適切なタイムアウト時間が設定されている箇所を、効率よく発見できる。
以上、本発明の実施形態について説明したが、これらの実施形態は本発明の理解を容易にするために記載された単なる例示に過ぎず、本発明は当該実施形態に限定されるものではない。本発明の技術的範囲は、上記実施形態で開示した具体的な技術事項に限らず、そこから容易に導きうる様々な変形、変更、代替技術なども含むものである。この開示から当業者には様々な代替実施の形態、実施例及び運用技術が明らかとなろう。
本出願は、2013年1月21日に出願された日本国特許願第2013-008356号に基づく優先権を主張しており、この出願の全内容が参照により本明細書に組み込まれる。
本発明によれば、コンピュータプログラムを静的な手法により解析し、排他制御を実行するロック区間の各々についてロック時間の最大値を求めることができる。よって、コンピュータプログラム中で実行し得るロック区間について、システムの応答性が悪化する可能性がある箇所をユーザに気づかせることができる。
21 ソースコード入力部
22 順序経路特定部
23 ロック区間特定部
24 クロック数算出部
25 最大クロック数算出部
26 タイムアウト時間抽出部
27 競合ロック区間特定部
28 タイムアウト判断部
29 検査結果出力部
D01 ソースコード(コンピュータプログラム)
D02 エントリーポイント一覧
D03 ロック開始命令/解除命令リスト
D04 所要クロック数一覧
D05 排他制御検査結果
T01 実行順序/実行経路表
T02 ロック区間特定表
T03 クロック数合計管理表
T04 排他制御構造管理表
22 順序経路特定部
23 ロック区間特定部
24 クロック数算出部
25 最大クロック数算出部
26 タイムアウト時間抽出部
27 競合ロック区間特定部
28 タイムアウト判断部
29 検査結果出力部
D01 ソースコード(コンピュータプログラム)
D02 エントリーポイント一覧
D03 ロック開始命令/解除命令リスト
D04 所要クロック数一覧
D05 排他制御検査結果
T01 実行順序/実行経路表
T02 ロック区間特定表
T03 クロック数合計管理表
T04 排他制御構造管理表
Claims (4)
- コンピュータプログラムに含まれる排他制御を検査する排他制御検査装置であって、
検査対象となる前記コンピュータプログラムに含まれるステートメントの実行順序及び実行経路を特定する順序経路特定部と、
前記順序経路特定部により特定された前記ステートメントの実行順序及び実行経路に基づいて、前記コンピュータプログラムに含まれる複数のタスクが利用可能な共有資源に対して排他制御を実行する一群のステートメントからなるロック区間を特定するロック区間特定部と、
前記ロック区間特定部により特定された前記ロック区間に含まれる実行経路の各々について、前記ロック区間の実行に要するクロック数を算出するクロック数算出部と、
前記ロック区間の各々について、前記クロック数算出部により算出された前記クロック数の最大値を算出する最大クロック数算出部と、
前記最大クロック数算出部により算出された前記クロック数の最大値を出力する検査結果出力部と、
を備えることを特徴とする排他制御検査装置。 - 請求項1に記載の排他制御検査装置であって、
前記ロック区間の各々について、前記共有資源へのアクセス制限が解除されることを待つことができるタイムアウト時間を抽出するタイムアウト時間抽出部と、
前記ロック区間の各々について、前記ロック区間が属するタスクとは異なる他のタスクに属する他のロック区間を特定する競合ロック区間特定部と、
前記ロック区間の前記クロック数の最大値が、前記他のロック区間のタイムアウト時間よりも大きい場合、前記他のロック区間がスキップされる可能性があると判断するタイムアウト判断部と、を更に備え、
前記検査結果出力部は、前記タイムアウト判断部による判断結果を出力する
ことを特徴とする排他制御検査装置。 - コンピュータプログラムに含まれる排他制御を検査する排他制御検査方法であって、
検査対象となる前記コンピュータプログラムに含まれるステートメントの実行順序及び実行経路を特定し、
前記ステートメントの実行順序及び実行経路に基づいて、前記コンピュータプログラムに含まれる複数のタスクが利用可能な共有資源に対して排他制御を実行する一群のステートメントからなるロック区間を特定し、
前記ロック区間に含まれる実行経路の各々について、前記ロック区間の実行に要するクロック数を算出し、
前記ロック区間の各々について、前記クロック数の最大値を算出し、
前記クロック数の最大値を出力する
ことを特徴とする排他制御検査方法。 - コンピュータプログラムに含まれる排他制御を検査する排他制御検査プログラムであって、
コンピュータに、
検査対象となる前記コンピュータプログラムに含まれるステートメントの実行順序及び実行経路を特定する機能と、
前記ステートメントの実行順序及び実行経路に基づいて、前記コンピュータプログラムに含まれる複数のタスクが利用可能な共有資源に対して排他制御を実行する一群のステートメントからなるロック区間を特定する機能と、
前記ロック区間に含まれる実行経路の各々について、前記ロック区間の実行に要するクロック数を算出する機能と、
前記ロック区間の各々について、前記クロック数の最大値を算出する機能と、
前記クロック数の最大値を出力する機能と、
を実現させることを特徴とする排他制御検査プログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014557377A JP5979250B2 (ja) | 2013-01-21 | 2013-12-25 | 排他制御検査装置、排他制御検査方法、排他制御検査プログラム |
CN201380069267.XA CN104885061B (zh) | 2013-01-21 | 2013-12-25 | 排他控制检查装置、排他控制检查方法 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013-008356 | 2013-01-21 | ||
JP2013008356 | 2013-01-21 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2014112304A1 true WO2014112304A1 (ja) | 2014-07-24 |
Family
ID=51209406
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/JP2013/084616 WO2014112304A1 (ja) | 2013-01-21 | 2013-12-25 | 排他制御検査装置、排他制御検査方法、排他制御検査プログラム |
Country Status (3)
Country | Link |
---|---|
JP (1) | JP5979250B2 (ja) |
CN (1) | CN104885061B (ja) |
WO (1) | WO2014112304A1 (ja) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07219819A (ja) * | 1993-12-10 | 1995-08-18 | Nec Corp | プログラム評価データ作成方法 |
JP2003316615A (ja) * | 2002-04-26 | 2003-11-07 | Nissan Motor Co Ltd | 演算順序チェック装置およびその方法 |
JP2006331027A (ja) * | 2005-05-25 | 2006-12-07 | Nissan Motor Co Ltd | 検査装置、検査方法、及び検査プログラム |
JP2008090696A (ja) * | 2006-10-04 | 2008-04-17 | Nissan Motor Co Ltd | プログラム解析装置及びプログラム解析方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2073516A1 (en) * | 1991-11-27 | 1993-05-28 | Peter Michael Kogge | Dynamic multi-mode parallel processor array architecture computer system |
US5729676A (en) * | 1993-12-10 | 1998-03-17 | Nec Corporation | Method of generating data for evaluating programs |
US7401334B2 (en) * | 2002-12-20 | 2008-07-15 | International Business Machines Corporation | Method, apparatus and computer program product for managing message flow in a multithreaded, message flow environment |
-
2013
- 2013-12-25 WO PCT/JP2013/084616 patent/WO2014112304A1/ja active Application Filing
- 2013-12-25 CN CN201380069267.XA patent/CN104885061B/zh active Active
- 2013-12-25 JP JP2014557377A patent/JP5979250B2/ja active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07219819A (ja) * | 1993-12-10 | 1995-08-18 | Nec Corp | プログラム評価データ作成方法 |
JP2003316615A (ja) * | 2002-04-26 | 2003-11-07 | Nissan Motor Co Ltd | 演算順序チェック装置およびその方法 |
JP2006331027A (ja) * | 2005-05-25 | 2006-12-07 | Nissan Motor Co Ltd | 検査装置、検査方法、及び検査プログラム |
JP2008090696A (ja) * | 2006-10-04 | 2008-04-17 | Nissan Motor Co Ltd | プログラム解析装置及びプログラム解析方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104885061A (zh) | 2015-09-02 |
JPWO2014112304A1 (ja) | 2017-01-19 |
JP5979250B2 (ja) | 2016-08-24 |
CN104885061B (zh) | 2016-11-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6607565B2 (ja) | セーフティクリティカルソフトウェアのための統合された自動テストケース生成 | |
US9576036B2 (en) | Self-analyzing data processing job to determine data quality issues | |
US8327325B2 (en) | Programmable framework for automatic tuning of software applications | |
US9354867B2 (en) | System and method for identifying, analyzing and integrating risks associated with source code | |
US8997057B1 (en) | Using trace matching to identify and analyze application traces | |
JP5139486B2 (ja) | トレース生成装置、システム、およびそのプログラム | |
KR101106595B1 (ko) | 소프트웨어 테스트의 자동화 장치 및 그 방법 | |
JP2008140162A (ja) | デバッグ情報収集方法 | |
US20120216171A1 (en) | Test management domain asset discovery and analysis | |
JP5979250B2 (ja) | 排他制御検査装置、排他制御検査方法、排他制御検査プログラム | |
US9251028B2 (en) | Managing code instrumentation in a production computer program | |
WO2014112303A1 (ja) | データ更新漏れ検査装置、データ更新漏れ検査方法、データ更新漏れ検査プログラム | |
US9092563B1 (en) | System for discovering bugs using interval algebra query language | |
JP2016219068A (ja) | 情報処理装置、方法、及びプログラム | |
JP6666216B2 (ja) | 電子制御装置、解析システム | |
JP2011181034A (ja) | ソフトウェア実効性能評価システム、ソフトウェア実効性能評価方法、及びプログラム | |
Vögler et al. | Non-intrusive monitoring of stream processing applications | |
WO2014006729A1 (ja) | 情報処理装置、情報処理方法、情報処理プログラム、及び記録媒体 | |
CN110569155A (zh) | 数据处理方法及其系统、电子设备和介质 | |
CN115658551B (zh) | 代码测试方法、存储介质、电子设备和装置 | |
CN112148459B (zh) | 节点关联数据的处理方法、装置、可读介质以及设备 | |
JP2018151803A (ja) | コンピュータプログラムの検査装置および車両制御用コンピュータプログラムの検査を行う車載装置 | |
JP2000099367A (ja) | ソフトウエアの評価装置 | |
JP2010262491A (ja) | ログ集約装置 | |
WO2015045612A1 (ja) | ソフトウェア検査装置、ソフトウェア検査方法、ソフトウェア検査プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 13871917 Country of ref document: EP Kind code of ref document: A1 |
|
ENP | Entry into the national phase |
Ref document number: 2014557377 Country of ref document: JP Kind code of ref document: A |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
122 | Ep: pct application non-entry in european phase |
Ref document number: 13871917 Country of ref document: EP Kind code of ref document: A1 |