JP2015011445A - モデル検査装置 - Google Patents

モデル検査装置 Download PDF

Info

Publication number
JP2015011445A
JP2015011445A JP2013135115A JP2013135115A JP2015011445A JP 2015011445 A JP2015011445 A JP 2015011445A JP 2013135115 A JP2013135115 A JP 2013135115A JP 2013135115 A JP2013135115 A JP 2013135115A JP 2015011445 A JP2015011445 A JP 2015011445A
Authority
JP
Japan
Prior art keywords
inspection
execution
code
model checking
information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2013135115A
Other languages
English (en)
Inventor
陽一郎 古賀
Yoichiro Koga
陽一郎 古賀
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2013135115A priority Critical patent/JP2015011445A/ja
Publication of JP2015011445A publication Critical patent/JP2015011445A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】検査対象の直接改変を不要にするとともに、探索する状態空間を絞り込んで状態の爆発を防止し、現実的な時間内での検査を可能にする。
【解決手段】ルール型検査仕様記憶部は、実行系列における検査ブロックの開始位置及び終了位置を指示する記述である差し込み位置指示情報を有する検査仕様を記憶する。差し込み実行部は、前記差し込み位置指示情報に記述された内容に対応する位置に、検査ブロックの開始位置を指定する情報である検査ブロック開始位置情報、及び検査ブロックの終了位置を指定する情報である検査ブロック終了位置情報を挿入して差し込み後検査対象を生成する。検査実行部は前記検査ブロック開始位置情報及び前記検査ブロック終了位置情報によって囲まれた範囲である検査ブロック内を探索する状態空間として、モデル検査を実行する。
【選択図】図1

Description

本明細書に記載の実施の形態は、モデル検査装置に関する。
モデル検査は、デッドロック、ライブロック、リソース競合などの排他制御系の問題を検出できる強力な技術である。デッドロックとは、2つ以上のプロセスが資源開放を待ち、結果としてどの処理も先に進めなくなっている状態をいい、ライブロックとは、資源獲得の処理が進行しているにも関わらず、どのプロセスも資源が獲得できない状態をいう。モデル検査は、検査対象が取りうる状態(状態空間)を網羅的に探索して上記のような問題の有無を調べる技術である。
特開2009−134360号公報
モデル検査は、現実には以下の要因から運用面のハードルが高いという問題がある。特に大規模なモデルを検査対象にした際にここで挙げる問題が顕著に表れる。
(1)検査対象の改変
モデル検査を実行する場合、検査対象の一部を検査するためであっても、検査対象全体を改変する必要があったため、手間が掛かってしまう。すなわち、検査したい範囲が元々の状態空間のごく一部であるにも関わらず、検査のために多くの変更が必要となるのである。単純化のための変更が多岐に亘り、手間がかかる煩雑な作業になる
また、単純化された範囲と、その意図(検査対象本来の振る舞いなのか、モデル検査装置の探索範囲を絞りたいのか)が非常に分かりにくいという問題があった。さらに単純化により本来の実行系列が失われる虞があった。
(2)状態爆発
実用的なソフトウェアやアプリケーションは取りうる状態が非常に多いため、探索する状態空間が大きすぎて、モデル検査装置にかけても現実的な時間内に検査が終わらないという問題があった。
本発明の一の実施の形態は、検査対象の直接改変を不要にするとともに、探索する状態空間を限定し、特定の範囲だけを網羅的に探索することで状態の爆発を防止し、現実的な時間内での検査を可能にする技術を提供することを目的とする。
本発明の一の実施の形態はモデル検査装置として提案される。モデル検査装置は、第1の記憶手段と、第2の記憶手段と、第1の実行手段と、第2の実行手段とを有する。
第1の記憶手段は、モデル検査の対象となるコードである検査対象を記憶する。第2の記憶手段は、実行系列における検査ブロックの開始位置及び終了位置を指示する記述である差し込み位置指示情報を有する検査仕様を記憶する。第1の実行手段は、前記差し込み位置指示情報に記述された内容に対応する位置に、検査ブロックの開始位置を指定する情報である検査ブロック開始位置情報、及び検査ブロックの終了位置を指定する情報である検査ブロック終了位置情報を挿入して、差し込み後検査対象を生成する。第2の実行手段は、前記差し込み後検査対象を読み取り、前記検査ブロック開始位置情報及び前記検査ブロック終了位置情報によって囲まれた範囲である検査ブロック内を探索する状態空間として、モデル検査を実行する。
第1の実施の形態に係るモデル検査装置の構成例を示す機能ブロック図 ルール型検査仕様のデータ構成例を示す図 差し替え内容指定部が表明を含む態様の、ルール型検査仕様のデータ構成例を示す図 検査対象の例を示す図 図4に示した検査対象から生成された差し込み後検査対象の例を示す図 図5で使用した記号の意味を示した図 図5に示した差し込み後検査対象において形成された検査ブロックを示す図 検査対象が作る状態空間が、各実行系列の検査ブロック内のコードが作る状態空間に限定される例を示す図 モデル検査装置1の主たる動作の一例を示したフローチャート 差し込み後検査対象生成処理の一例を示したフローチャート モデル検査実行処理の一例を示したフローチャート 第1の実施の形態の実施例の構成例を示した機能ブロック図 実施例におけるルール型検査仕様の例を示す図 実施例におけるバイトコードの例を示す図 バイトコードをアスペクトコンパイラが変換して出力した検査対象バイトコードの例を示す図 実施したテストの内容を示す図 図16に示したテストの結果を示す図
以下、図面を参照して本発明の実施の形態に係るモデル検査装置を説明する。
[0.用語の定義]
本明細書で使用する用語の定義を述べる。
[0.1.モデル検査]
「モデル検査」とは、検査対象の取りうる状態を網羅的に探索して、デッドロック/ライブロックなどの並列処理特有の問題を検出する技術をいう。
[0.2.モデル検査装置(モデル検査器)]
「モデル検査装置(モデル検査器)」とは、上記モデル検査技術を実装したツール、又はそのツールを実装した装置をいう。
[0.3.実行系列(Sequence)]
「実行系列(Sequence)」とは、並列して動作することができる処理(コード)の流れをいう。モデル検査では複数の実行系列のあらゆる実行順が考慮される。
[0.4.原子化]
「原子化」とは直列に実行される一連の処理のブロックをまとめて1つの処理とみなすこと.をいう。原子化された処理ブロックの実行中は他のプロセスが割り込むことはできないものとして扱われる。
[0.5.プロセス]
「プロセス」とは、実行系列を実行する主体をいう。
[0.6.検査対象]
「検査対象」とは、並列実行可能な複数の実行系列、それらを実行するプロセスの集合、及び複数のプロセスから参照される可能性のある変数の集合をいう。
[0.7.状態]
「状態」とは、各プロセスの実行位置のスナップショットとその時の変数の値をいう。
[0.8.状態]
「状態空間」とは、検査対象が取りうる全ての状態の集合をいう。状態空間の規模は、並列して実行されるプロセスの数と、実行系列の規模、変数の取りうる値の範囲、プロセス間の通信量に従って増大する。
[0.9.探索範囲]
「探索範囲」とは、モデル検査装置が上記の状態空間の中で実際に探索して問題の有無を確認する範囲をいう。探索範囲は状態空間の部分空間である。一般的なモデル検査装置はPartial Order Reductionという技術を実装しており、問題を取りこぼさない範囲で探索範囲を狭める処理を行う。
[0.10.状態爆発]
「状態爆発」とは、モデル検査装置が探索する状態空間の規模が巨大すぎて現実的な時間内に検証が終わらない状態をいう。
[0.11.ルール型検査仕様]
「ルール型検査仕様」とは、検査対象とは独立して定義された、検査範囲と検査内容を指示するための記述(コード)をいう。「ルール型検査仕様」は、差し込み位置指定部と、差し替え内容部によって構成される。
[0.12.差し込み位置指定部]
「差し込み位置指定部」とは、実行系列の一部を代替処理に置き換える際の、置き換え箇所を指定するルールをいう。ルールベースで記述し、1つのルールで実行系列中の複数の該当箇所に作用させる。
[0.13.差し替え内容]
「差し替え内容」とは、差し込み位置で指定した実行系列中の部分領域を上書き(置換)する具体的な内容をいう。例えば、「差し替え内容」はDo nothing、簡略化した代替処理、或いは元の処理をそのまま呼び出すコードなどである。
[0.14.表明文]
「表明文」とは、アサーションコード(Assert.equals, Assert.true)をいう。「表明文」は差し替え内容の一部として書かれる。モデル検査装置が探索中にこの表明文に相当するコードを実行し、その実行結果がエラーの場合は検査失敗とみなされる。
[0.15.差し込み装置]
「差し込み装置」とは、ルール型検査仕様を検査対象に挿し込む装置をいう。「差し込み装置」は、ルール型検査仕様の差し込み位置指定部で指定された実行系列上の特定の箇所に差し替え内容を差し込む処理を行う。また、「差し込み装置」は、モデル検査装置をプロセススコープで制御するコード(例:ENTER_EXPLORE. EXIT_EXPLORE)で差し替え内容を囲い込む。
[0.16.ENTER_EXPLORE]
「ENTER_EXPLORE」は、モデル検査装置に探索開始を指示する制御コードである。
[0.17.EXIT_EXPLORE]
「EXIT_EXPLORE」とは、モデル検査装置に探索終了を指示する制御コードである。
[0.18.探索モード]
「探索モード」とは、モデル検査装置がもつ、検査対象が取りうる状態の網羅的な探索を行うかどうかの設定をいう。探索モードは、プロセススコープで管理する。探索モードがOFFであると、他のプロセスに制御が移る(状態が変わる)可能性があってもモデル検査装置は考慮しない。探索モードがONであると、他のプロセスに制御が移る可能性がある場合、あらゆる可能性をモデル検査装置は考慮する。
[0.19.検査ブロック]
「検査ブロック」とは、ENTER_EXPLOREとEXIT_EXPLOREで囲い込まれた実行系列中のコードの集まりをいう。本特許で使用するモデル検査装置の探索範囲を実行系列別に分解して見たものに相当する。
[0.20.ソフトウェアモデル検査]
「ソフトウェアモデル検査」とは、ソースコードをコンパイルして得た実行可能なバイトコードを対象にしたモデル検査技術をいう。
[0.21.ソフトウェアモデル検査装置]
「ソフトウェアモデル検査装置」とは、上記ソフトウェアモデル検査技術を実装したツール、若しくはそのようなツールを搭載した装置をいう。
[0.21.JPF]
「JPF」とは、Java Path Finderをいい、ソフトウェアモデル検査装置の1種である。「JPF」は、Javaバイトコードを対象に、検査対象の取りうる状態を網羅的に探索する。元々はJavaソースコードをpromelaコードに変換していたが、状態爆発で行き詰まったため、現在はバックトラック機能をもったJVMそのもののスタブとして実装されている。
[0.22.Java, javac]
「Java」とは、プログラミング言語の一種をいい, 「javac」はそのコンパイラをいう。
[0.23.JVM]
「JVM」とは、Java仮想マシンをいい, Javaプログラムを実行する環境である。
[0.24.アスペクト指向プログラミング]
「アスペクト指向プログラミング」とは、ソースコードを横断的な側面から捉えて共通処理を挿し込むプログラミング技術をいう。本発明では、ルール型検査仕様を記述するために利用する。
[0.25.アスペクトコンパイラ]
「アスペクトコンパイラ」とは、上記アスペクト指向プログラミング技術を実装するコンパイラをいう。本発明では差し込み装置として利用される。
[0.26.AspectJ , ajc]
「AspectJ」とはJava向けのアスペクトコンパイラの一種をいい、「ajc」とは、AspectJのコンパイラをいう。ajcでコンパイルしたプログラムはJVM上で実行できる。
[1.第1の実施の形態]
本発明の第1の実施の形態について説明する。本発明の第1の実施の形態は、モデル検査装置として提案される。
モデル検査装置は、デッドロック、ライブロック、リソース競合などの排他制御系の問題を検出する技術であるモデル検査を実行する装置である。このモデル検査装置は、コンピュータ、ワークステーションなどの情報処理装置であって、この情報処理装置は、演算処理装置(CPU)、主メモリ(RAM)、読み出し専用メモリ(ROM)、入出力装置(I/O)、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
[1.1.第1の実施の形態に係るモデル検査装置の構成例]
図1に第1の実施の形態に係るモデル検査装置の構成例を示す機能ブロック図を掲げる。なお、機能ブロック図中に示す構成要素は、モデル検査装置の機能を機能ごとにまとめてブロックとして捉えたものであり、モデル検査装置が各構成要素に対応する基板、装置、回路、部品などの物理的構成要素を備えていなければならないことを意味するわけではない。また、「接続されている」とは、データ、情報、命令などの送受信、受け取り、受け渡しなどが可能な状態になっていることをいい、互いに配線で連結されているような物理的な接続に限られる意味ではない。本明細書中の他の機能ブロック図の説明についても同様である。
図1に示すモデル検査装置1は、検査対象記憶部10と、この検査対象記憶部10に接続された差し込み実行部20と、この差し込み実行部20へ接続するルール型検査仕様記憶部30と、差し込み実行部20に接続された差し込み後検査対象記憶部40と、この差し込み後検査対象記憶部40に接続された検査実行部50とを有している。以下にモデル検査装置1の各構成要素について説明する。検査対象記憶部10は第1の記憶手段に相当し、差し込み実行部20は第1の実行手段に相当し、ルール型検査仕様記憶部30は第2の記憶手段に相当し、検査実行部50は第2の実行手段に相当する。
[1.1.1.検査対象記憶部]
検査対象記憶部10は、モデル検査の対象であるコードを記憶する機能を有する。コードは後述する差し込み実行部20によりルール型検査仕様に基づいた、上記コードの変更が可能なものであればどのようなものでも良い。本実施の形態では、検査対象記憶部10は、コンパイラがソースコードを実行可能な形式に変換したコードであるバイトコードであるものとして説明する。
[1.1.2.ルール型検査仕様記憶部]
ルール型検査仕様記憶部30は、ルール型検査仕様を記憶する機能を有する。ルール型検査仕様は、差し込み実行部20に実行系列における検査ブロックの開始位置及び終了位置を指示する記述である。図2に、ルール型検査仕様のデータ構成例を示す図を掲げる。ルール型検査仕様200は、差し込み位置指定部201と差し替え内容指定部202とを有する。差し込み位置指定部201は、検査対象中の命令文、関数などの記述の中で、検査ブロックの開始位置及び終了位置とした記述を指定するコード(記述)である。差し替え内容指定部202は、差し込み位置指定部201によって特定された検査ブロック内のコードに挿し込むオリジナル・コード、置き換えコード(該当する部分を空処理に置き換えるコードを含む)を指定する記述である。
なお、差し替え内容指定部202は、「表明文」を含んでいても良い。「表明文」とは、システムの状態をチェックするコードで,モデル記述の中に埋め込まれるプログラマが調べたい性質を表明文として挿入すればよい。図3に、差し替え内容指定部202が表明文203を含む態様のルール型検査仕様200のデータ構成例を示す。
[1.1.3.差し込み実行部]
差し込み実行部20は、ルール型検査仕様記憶部30に記憶されたルール型検査仕様200を参照して、ルール型検査仕様200の差し込み位置指定部201の内容に一致する検査対象の位置(箇所)に、検査ブロックの開始位置を指定する情報である検査ブロック開始位置情報、及び検査ブロックの終了位置を指定する情報である検査ブロック終了位置情報を、検査対象に挿入し、この検査ブロックの開始位置及び終了位置によって囲まれた範囲である検査ブロック内に、ルール型検査仕様200の差し替え内容指定部202で指定されている内容を挿入し、若しくは置換して、差し込み後検査対象を生成する機能を有する。
図4に検査対象の例を模式的に示す図を掲げる。この検査対象400は実行系列1から実行系列NまでのN個の実行系列を有している。但し、図4では、実行系列3から実行系列N−1については図示を省略した。
実行系列1は、処理J_A1から処理J_A7までの7個の処理を含んでいる。処理J_A1以前に行われる処理及びJ_A5以降に行われる処理については図示を省略している。実行系列1において、処理J_A1実行後に処理J_A2に移行する。処理J_A2実行後は分岐して処理J_A3又は処理J_A6に進む。処理J_A3実行後は処理J_A4、処理J_A5の順に進む。一方、処理J_A6実行後は処理J_A7、処理J_A5の順に進む。
実行系列2は、処理J_B1から処理J_B6までの6個の処理を含んでいる。処理J_B1以前に行われる処理及びJ_B5以降に行われる処理については図示を省略している。実行系列2において、処理J_B1実行後、処理J_B2、処理J_B3、処理J_B4の順に移行する。処理J_B4実行後は分岐して処理J_B5又は処理J_B6に進む。処理J_B6の実行後は処理J_B2に戻る。
実行系列Nは、処理J_N1から処理J_N7までの7個の処理を含んでいる。処理J_N1以前に行われる処理及びJ_N5以降に行われる処理については図示を省略している。実行系列Nにおいて、処理J_N1実行後、処理J_N2、処理J_N3の順に移行する。処理J_N3実行後は分岐して処理J_N4又は処理J_N6に進む。処理J_N4実行後は処理J_N5に進む。一方、処理J_N6実行後は処理J_N7に進み、処理J_N7実行後は分岐して処理J_N2又は処理J_N6に戻る。
次に、図4に示した検査対象400に対して、差し込み実行部20が生成した差し込み後検査対象500の例を示す。図5は図4に示した検査対象400から生成された差し込み後検査対象500の例を示す図である。また、図6に、図5で使用している記号の意味を示す。
図6に示す差し込み後検査対象500の実行系列1において、処理J_A1の後に検査ブロック開始位置情報である制御コード「ENTRY_EXPLORE」が挿し込まれているとともに、処理J_A5の前に検査ブロック終了位置情報である制御コード「EXIT_EXPLORE」が挿し込まれている。その他の処理については削除、置換などは行われていない。
実行系列2において、処理J_B1の後に検査ブロック開始位置情報である制御コード「ENTRY_EXPLORE」が挿し込まれているとともに、処理J_B5の前に検査ブロック終了位置情報である制御コード「EXIT_EXPLORE」が挿し込まれている。その他の処理については削除、置換などは行われていない。
実行系列Nにおいて、処理J_N1の後に検査ブロック開始位置情報である制御コード「ENTRY_EXPLORE」が挿し込まれているとともに、処理J_N5の前に検査ブロック終了位置情報である制御コード「EXIT_EXPLORE」が挿し込まれている。また、元の実行系列Nに含まれていた処理J_N2、処理J_N3、処理J_N4、処理J_N6、処理J_N7は、置き換えコード、表明、置き換えコードに置換されている。
図7に、図5に示した差し込み後検査対象500において形成された検査ブロックを示す。実行系列1、実行系列2、実行系列Nのそれぞれに検査ブロックBLOCK_1、BLOCK_2、BLOCK_Nが形成されている。図示しなかった他の実行系列2から実行系列N−1においても同様に検査ブロックが形成され、後述する検査実行部50はこれら検査ブロックによって形成される状態空間に探索の範囲を限定してモデル検査を実行することになる。
[1.1.4.差し込み後検査対象記憶部]
差し込み後検査対象記憶部40は、差し込み実行部20によって生成された差し込み後検査対象を記憶する機能を有する。
[1.1.5.検査実行部]
検査実行部50は、差し込み後検査対象記憶部40から差し込み後検査対象を読み出し、差し込み実行部20によって指定された探索範囲である前記検査ブロック開始位置情報及び前記検査ブロック終了位置情報によって囲まれた範囲を探索する状態空間として、モデル検査を実行し、検査条件を満たさないシステムの動作シーケンスの例を検査結果出力60(反例)として出力する機能を有する。
検査実行部50には、従来のモデル検査装置に比べて、探査モードという新たな設定をプロセススコープで追加されている。検査実行部50は、探索モードを切り替える制御コード(ENTER_EXPLORE, EXIT_EXPLORE)を読み取り、この制御コードに応じて動作することができる。
検査実行部50は、各プロセス(実行系列)の初期の探索モードをOFFに設定しておく。
検査実行部50は、差し込み後検査対象を読み取っていき、ENTER_EXPLOREを検出すると、これをトリガにして各プロセスの探索モードにONにし、探索範囲内での探索を実行する。また、検査実行部50は、さらに差し込み後検査対象を読み取っていき、EXIT_EXPLOREコードを検出すると、探索モードをOFFに戻す。これにより、検査実行部50の探索範囲を各実行系列の検査ブロック内のコードが作る状態空間に限定することができる。検査実行部50が探索する状態空間は、差し込み後検査対象500全体が作る状態空間ではなく、各実行系列の検査ブロックBLOCK_1、BLOCK_2、…、BLOCK_N内のコードが作る状態空間に限定される様子を図8に示した。
なお、探索モードは、検査対象が取りうる状態の網羅的な探索を行うかどうかの設定である。探索モードがOFF状態であれば、検査実行部50は他のプロセスに制御が移る(状態が変わる)可能性があっても考慮しない。一方、探索モードがON状態であると、他のプロセスに制御が移る可能性がある場合、検査実行部50はあらゆる可能性を考慮する。
また、検査ブロックは、ENTER_EXPLORE、EXIT_EXPLOREで囲い込まれた実行系列中のコードの固まりであり、検査実行部50が、検査対象が取りうる状態を網羅的に探索する範囲である。
[2.モデル検査装置の動作]
次にモデル検査装置1の動作を説明する。図9にモデル検査装置1の主たる動作の一例を示したフローチャートを示す。
まず、モデル検査装置1は、検査対象の入力を受け付け、検査対象を検査対象記憶部10に記憶させる(S10)。
次にモデル検査装置1は、ルール型検査仕様の入力を受け付け、ルール型検査仕様をルール型検査仕様記憶部30に記憶させる(S20)。
次にモデル検査装置1、より詳しくは差し込み実行部20は、検査対象及びルール型検査仕様を読み取り、差し込み後検査対象を生成する処理である差し込み後検査対象生成処理を実行する(S30)。差し込み後検査対象生成処理の結果として生成された差し込み後検査対象は、差し込み後検査対象記憶部40に記憶される。
次にモデル検査装置1、より詳しくはモデル検査実行部50は、差し込み後検査対象を読み取り、差し込み後検査対象に含まれる各実行系列の検査ブロックを探索範囲とする探索を実行し、探索結果を生成するモデル検査実行処理を実行する(S40)。
次にモデル検査装置1、より詳しくはモデル検査実行部50はステップS40で生成された探索結果を出力する(S50)。
以上でモデル検査装置1による検査対象のモデル検査が終了する。
[2.1.差し込み後検査対象生成処理]
前述の図9に示したステップS30である差し込み後検査対象生成処理について詳述する。図10は、差し込み後検査対象生成処理の一例を示したフローチャートである。
差し込み後検査対象生成処理では、モデル検査装置1、より詳しくは差し込み実行部20は検査対象から一行(若しくは一命令文)を読み込む(S110)。次にモデル検査装置1、より詳しくは差し込み実行部20は直前のステップS110において読み込んだデータが、ルール型検査仕様200の差し込み位置指定部201で記述されている内容と一致するか否かを判定する(S120)。
ステップS110において読み込んだデータが、ルール型検査仕様200の差し込み位置指定部201で記述されている内容と一致しないと判定した場合(S120、No)、モデル検査装置1、より詳しくは差し込み実行部20は後述するステップS150に進む。一方、ステップS120において、ステップS110において読み込んだデータが、ルール型検査仕様200の差し込み位置指定部201で記述されている内容と一致すると判定した場合(S120、Yes)、モデル検査装置1、より詳しくは差し込み実行部20は検査ブロック開始位置情報及び検査ブロック終了位置情報を当該差し込み位置指定部201で指定された箇所に挿入する(S130)。
次にモデル検査装置1、より詳しくは差し込み実行部20は直前のステップS120で一致すると判定したルール型検査仕様200の差し替え内容指定部202に記述された内容を、前記検査ブロック開始位置情報及び検査ブロック終了位置情報の間に含まれる領域である検査ブロック内に挿入若しくは置換する(S140)。なお、差し替え内容指定部202に記述された内容に表明が含まれている場合は、ここで表明が検査対象に書き込まれる。
次にモデル検査装置1、より詳しくは差し込み実行部20は検査対象内の全ての行(命令文など)を読み取ったか否かを判定する(S160)。検査対象内の全ての行(命令文など)を読み取っていないと判定した場合(S160, No)、モデル検査装置1、より詳しくは差し込み実行部20は検査対象から新たな一行を読み込み、ステップS120に処理を移行する(S170)。一方、検査対象内の全ての行(命令文など)を読み取ったと判定した場合(S160, Yes)、モデル検査装置1、より詳しくは差し込み実行部20は、検査ブロック開始位置情報及び検査ブロック終了位置情報、及び差し替え内容指定部202に記述された内容が書き込まれた検査対象を差し込み後検査対象として出力(S160)し、その後差し込み実行処理を終了する。
以上で差し込み後検査対象生成処理の説明を終了する。
[2.2.モデル検査実行処理]
前述の図9に示したステップS40であるモデル検査実行処理について詳述する。図11は、モデル検査実行処理の一例を示したフローチャートである。
モデル検査実行処理(S40)において、モデル検査装置1、より詳しくは検査実行部50は、差し込み後検査対象から命令(コード)を一行読み込む(S210)。次にモデル検査装置1、より詳しくは検査実行部50は、直前のステップS210で読み込んだ命令(コード)が検査ブロック開始位置情報か否かを判定する(S220)。ステップS210で読み込んだ命令(コード)が検査ブロック開始位置情報ではないと判定した場合(S220, No)、モデル検査装置1、より詳しくは検査実行部50はステップS210に戻り、差し込み後検査対象から新たな命令(コード)を一行読み込む(S210)。一方、ステップS210で読み込んだ命令(コード)が検査ブロック開始位置情報であると判定した場合(S220, Yes)、モデル検査装置1、より詳しくは検査実行部50は現プロセスの探索モードをONに切り替え(S230)、差し込み後検査対象から次の一行を読み込む(S240)。次にモデル検査装置1、より詳しくは検査実行部50は状態を記憶する(S250)。次にモデル検査装置1、より詳しくは検査実行部50は、問題を検出したか否かを判定する(S260)。問題を検出したと判定した場合(S260、Yes)、モデル検査装置1、より詳しくは検査実行部50は検査結果を生成し(S310)、モデル検査実行処理を終了する。この場合、モデル検査実行処理は異常終了となる。一方、ステップS260において問題を検出しなかったと判定した場合(S260、No)、モデル検査装置1、より詳しくは検査実行部50は制御を他のプロセス(実行系列)に切り替える(S270)。なお、図11では示していないが、プロセスごとに本ワークフロー(モデル検査実行処理)が存在し、プロセスの切り換え後は前回中断した位置(基本的にステップS270 ,ただし初めて実行するプロセスはステップS210)から、そのプロセスについてのモデル検査実行処理を再開する。選択肢が複数存在する場合はバックトラック機能により、検査実行部50は全選択肢について実行パスを探索する。
次にモデル検査装置1、より詳しくは検査実行部50は、直前のステップS240で読み込んだ命令(コード)が検査ブロック終了位置情報か否かを判定する(S280)。ステップS240で読み込んだ命令(コード)が検査ブロック終了位置情報ではないと判定した場合(S280, No)、モデル検査装置1、より詳しくは検査実行部50はステップS240に戻り、モデル検査実行処理を続行する。一方、ステップS240で読み込んだ命令(コード)が検査ブロック終了位置情報であると判定した場合(S280, Yes)、モデル検査装置1、より詳しくは検査実行部50は現プロセスの探索モードをOFFに切り替える(S290)。
次にモデル検査装置1、より詳しくは検査実行部50は差し込み後検査対象に含まれる、指定された全ての探索範囲の探索を終えたか否かを判定する(S300)。指定された全ての探索範囲の探索を終えていないと判定した場合(S300 , No)、モデル検査装置1、より詳しくは検査実行部50はステップS210に戻りモデル検査実行処理を続行する。一方、指定された全ての探索範囲の探索を終えたと判定した場合(S300, Yes)、モデル検査装置1、より詳しくは検査実行部50は検査結果を生成し(S310)、モデル検査実行処理を終了する。
以上でモデル検査実行処理の説明を終了する。
[3.実施例]
第1の実施の形態の実施例を説明する。図12は第1の実施の形態の実施例の構成例を示した機能ブロック図である。実施例に係るモデル検査装置1_1は、テストコード或いはソースコードを記憶するソースコード記憶部121と、ソースコード記憶部121に接続されたJavaコンパイラ(javac)122と、Javaコンパイラ(javac)122に接続されたバイトコード記憶部123と、バイトコード記憶部123に接続されたアスペクトコンパイラ(ajc)124と、このアスペクトコンパイラ124へ接続された検査用アスペクト記憶部125と、このアスペクトコンパイラ124が接続している検査対象バイトコード記憶部126と、この検査対象バイトコード記憶部126に接続している改良型ジャバパスファインダ(Java Path Finder ; JPF)127とを有している。
ジャバコンパイラ122は、ソースコード又はテストコードをコンパイルしてバイトコードを生成し、このバイトコードはバイトコード記憶部123に記憶される。バイトコード記憶部123は検査対象記憶部10に対応する構成要素である。検査用アスペクト記憶部125はルール型検査仕様記憶部30に対応する構成要素である。検査用アスペクト記憶部125は、ルール型検査仕様200に相当する検査用アスペクトを記憶する。検査用アスペクトは、差し込み位置指定部201に相当する置き換えルールと、差し替え内容指定部202に相当する置き換え内容と、表明文を有している。
アスペクトコンパイラ124は、バイトコードを改良型ジャバパスファインダ127が検査可能なコードに変換するとともに、検査用アスペクトを参照して、検査ブロック開始位置情報に相当する制御コード、検査ブロック終了位置開始情報に相当する制御コード、置き換え内容、表明文を前記コードに挿入して、検査対象バイトコードを生成する。生成された検査対象バイトコードは検査対象バイトコード記憶部126に記憶される。
改良型ジャバパスファインダ127は、スレッド単位の原始性制御を行い、検査ブロックの検出を行い、検査ブロックによって限定された状態空間を探索して、検査結果128を出力する。
図13に実施例におけるルール型検査仕様200の例を示す。この例では、ルール型検査仕様200は差し込み位置指定部201に相当するコードと、差し替え内容指定部202に相当するコードとを有しており、この差し替え内容指定部202は表明文を含んでいる。この例ではexecutionとaroundにより、中身の完全な置き換えを指示している。図14にバイトコードの例を示す。このバイトコード1400のコード群1401が前記の差し替え内容指定部202に置き換えられる部分となる。図15にバイトコード1400をアスペクトコンパイラ124が変換して出力した検査対象バイトコードの例を示す。検査対象バイトコード1500に含まれているコード1501において、改良型ジャバパスファインダ127はメソッドajc$around$as3_VerifyAspect$2$204afd7a(new RecordSaver.AjcClosure1(arrayOfObject));のInvokeコード/ReturnコードをENTER_EXPLORE, EXIT_EXPLOREと解釈することにより、検査ブロックによる状態空間の限定が行われる。
本実施例のテスト結果を述べる。本発明者は図16に示すような、それぞれが適用観点が異なる8種類のテストを実施した。なお、「xxx_Threadpool」は、スレッドプールを使用するテストコードを使用すること意味し、「xxx_軽量版」は、スレッドプールによる実装をThread#start, #joinに置き換えたテストコードを使用することを意味する。
図17に、上記図16に示したテストの結果を示す。ここで「改良型1」は、改良型ジャバパスファインダ127としてシステムスコープで原子性を強制する機能を、探索範囲を指定する目的に使用したJPFを使用したことを示す。また「改良型2」は、改良型ジャバパスファインダ127としてスレッドスコープで切り替える探索モードを実装したJPFを使用したことを示す。図17中、「中断」と表示されている状態数、検査時間の欄はテスト実行開始後30分待っても検査結果出力が行われないので検査を中断したことを示している。
このテスト結果から、本実施例によれば検査実行者などが検査対象を直接改変する作業を行うこと無く、探索する状態空間を絞り込んで状態の爆発を防止し、現実的な時間内での検査を可能にできることが確認できた。
[4.本実施の形態の利点]
本実施形態に係るモデル検査装置によれば、検査対象と独立して記述したルール型検査仕様により、検査実行者が検査対象に直接手を加えること無く、探索範囲を制御するコードと検査内容を検査対象に埋め込むことができ、その結果探索する状態空間をさらに限定して目的の検査を実行することが可能となる。
[5.まとめ、その他]
以上、本発明の実施の形態を説明したが、本発明はこれらに限定されるものではなく、発明の趣旨を逸脱しない範囲内において、種々の変更、追加、組み合わせ等が可能である。
1・・・モデル検査装置; 10・・・検査対象記憶部; 20・・・差し込み実行部; 30・・・ルール型検査仕様記憶部; 40・・・差し込み後検査対象記憶部; 50・・・検査実行部; 200・・・ルール型検査仕様; 201・・・差し込み位置指定部; 202・・・差し替え内容指定部; 203・・・表明文;

Claims (3)

  1. モデル検査の対象となるコードである検査対象を記憶する第1の記憶手段と、
    実行系列における検査ブロックの開始位置及び終了位置を指示する記述である差し込み位置指示情報を有する検査仕様を記憶する第2の記憶手段と、
    前記差し込み位置指示情報に記述された内容に対応する位置に、検査ブロックの開始位置を指定する情報である検査ブロック開始位置情報、及び検査ブロックの終了位置を指定する情報である検査ブロック終了位置情報を挿入して、差し込み後検査対象を生成する第1の実行手段と、
    前記差し込み後検査対象を読み取り、前記検査ブロック開始位置情報及び前記検査ブロック終了位置情報によって囲まれた範囲である検査ブロック内を探索する状態空間として、モデル検査を実行する第2の実行手段と
    を有するモデル検査装置。
  2. 前記検査仕様は、前記検査ブロック内のコードに挿し込むコードを指定する記述である差し込み内容指定情報をさらに有する、請求項1に記載のモデル検査装置。
  3. 前記差し込み内容指定情報は、その実行結果がエラーの場合は検査失敗とみなされるコードである表明文を含んでいる、請求項2に記載のモデル検査装置。
JP2013135115A 2013-06-27 2013-06-27 モデル検査装置 Pending JP2015011445A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013135115A JP2015011445A (ja) 2013-06-27 2013-06-27 モデル検査装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013135115A JP2015011445A (ja) 2013-06-27 2013-06-27 モデル検査装置

Publications (1)

Publication Number Publication Date
JP2015011445A true JP2015011445A (ja) 2015-01-19

Family

ID=52304574

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013135115A Pending JP2015011445A (ja) 2013-06-27 2013-06-27 モデル検査装置

Country Status (1)

Country Link
JP (1) JP2015011445A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112597029A (zh) * 2020-12-26 2021-04-02 中国农业银行股份有限公司 一种规范检查系统、方法、设备及介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0561722A (ja) * 1991-09-02 1993-03-12 Nec Corp 実行情報採取方式

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0561722A (ja) * 1991-09-02 1993-03-12 Nec Corp 実行情報採取方式

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
古賀陽一郎,外1名: "AOPを応用した実用的なソフトウェアモデル検査手法", 情報処理学会研究報告 研究報告 ソフトウェア工学(SE) NO.178, JPN6017001851, 15 December 2012 (2012-12-15), JP, pages 1 - 8 *
田村雅成,外2名: "モデル変換と振る舞い検証を活用した組み込み制御ソフトウェア設計法", 情報処理学会研究報告 研究報告 システムLSI設計技術(SLDM) NO.160, JPN6017001852, 15 April 2013 (2013-04-15), JP, pages 1 - 6 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112597029A (zh) * 2020-12-26 2021-04-02 中国农业银行股份有限公司 一种规范检查系统、方法、设备及介质

Similar Documents

Publication Publication Date Title
US8589892B2 (en) Verification of speculative execution
Thacker et al. Automatic abstraction for verification of cyber-physical systems
Schlich Model checking of software for microcontrollers
US8607208B1 (en) System and methods for object code hot updates
US9720793B2 (en) Implementing processor functional verification by generating and running constrained random irritator tests for multiple processor system and processor core with multiple threads
JP7042270B2 (ja) セルフデバッギング
JP2010039536A (ja) プログラム変換装置、プログラム変換方法およびプログラム変換プログラム
US20170220455A1 (en) Test case generation using a constraint graph solver
US8868976B2 (en) System-level testcase generation
US11204859B2 (en) Partial-results post-silicon hardware exerciser
Pereira et al. SMT‐based context‐bounded model checking for CUDA programs
US8397217B2 (en) Integrating templates into tests
US20160062875A1 (en) Method for altering execution of a program, debugger, and computer-readable medium
US9092567B2 (en) Systems and methods for analyzing transactions in a computer system
US8438000B2 (en) Dynamic generation of tests
US9218273B2 (en) Automatic generation of a resource reconfiguring test
Dan et al. Modeling and analysis of remote memory access programming
Skinner et al. LiveSim: A fast hot reload simulator for HDLs
US20110320784A1 (en) Verification of processor architectures allowing for self modifying code
US9417871B2 (en) Automatic generation of certificate of origin (COO) for software systems
JP2015011445A (ja) モデル検査装置
US20110225400A1 (en) Device for Testing a Multitasking Computation Architecture and Corresponding Test Method
US8554522B2 (en) Detection of design redundancy
JP5387521B2 (ja) 論理検証シナリオ生成装置、及び、論理検証シナリオ生成プログラム
JP2007257397A (ja) 競合状態検出処理追加プログラム、競合状態検出処理追加装置、競合状態検出処理追加方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160328

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170118

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170131

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170322

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20170725