JP2015011445A - モデル検査装置 - Google Patents
モデル検査装置 Download PDFInfo
- 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
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
【解決手段】ルール型検査仕様記憶部は、実行系列における検査ブロックの開始位置及び終了位置を指示する記述である差し込み位置指示情報を有する検査仕様を記憶する。差し込み実行部は、前記差し込み位置指示情報に記述された内容に対応する位置に、検査ブロックの開始位置を指定する情報である検査ブロック開始位置情報、及び検査ブロックの終了位置を指定する情報である検査ブロック終了位置情報を挿入して差し込み後検査対象を生成する。検査実行部は前記検査ブロック開始位置情報及び前記検査ブロック終了位置情報によって囲まれた範囲である検査ブロック内を探索する状態空間として、モデル検査を実行する。
【選択図】図1
Description
(1)検査対象の改変
モデル検査を実行する場合、検査対象の一部を検査するためであっても、検査対象全体を改変する必要があったため、手間が掛かってしまう。すなわち、検査したい範囲が元々の状態空間のごく一部であるにも関わらず、検査のために多くの変更が必要となるのである。単純化のための変更が多岐に亘り、手間がかかる煩雑な作業になる
また、単純化された範囲と、その意図(検査対象本来の振る舞いなのか、モデル検査装置の探索範囲を絞りたいのか)が非常に分かりにくいという問題があった。さらに単純化により本来の実行系列が失われる虞があった。
(2)状態爆発
実用的なソフトウェアやアプリケーションは取りうる状態が非常に多いため、探索する状態空間が大きすぎて、モデル検査装置にかけても現実的な時間内に検査が終わらないという問題があった。
[0.用語の定義]
本明細書で使用する用語の定義を述べる。
「モデル検査」とは、検査対象の取りうる状態を網羅的に探索して、デッドロック/ライブロックなどの並列処理特有の問題を検出する技術をいう。
「モデル検査装置(モデル検査器)」とは、上記モデル検査技術を実装したツール、又はそのツールを実装した装置をいう。
「実行系列(Sequence)」とは、並列して動作することができる処理(コード)の流れをいう。モデル検査では複数の実行系列のあらゆる実行順が考慮される。
「原子化」とは直列に実行される一連の処理のブロックをまとめて1つの処理とみなすこと.をいう。原子化された処理ブロックの実行中は他のプロセスが割り込むことはできないものとして扱われる。
「プロセス」とは、実行系列を実行する主体をいう。
「検査対象」とは、並列実行可能な複数の実行系列、それらを実行するプロセスの集合、及び複数のプロセスから参照される可能性のある変数の集合をいう。
「状態」とは、各プロセスの実行位置のスナップショットとその時の変数の値をいう。
「状態空間」とは、検査対象が取りうる全ての状態の集合をいう。状態空間の規模は、並列して実行されるプロセスの数と、実行系列の規模、変数の取りうる値の範囲、プロセス間の通信量に従って増大する。
「探索範囲」とは、モデル検査装置が上記の状態空間の中で実際に探索して問題の有無を確認する範囲をいう。探索範囲は状態空間の部分空間である。一般的なモデル検査装置はPartial Order Reductionという技術を実装しており、問題を取りこぼさない範囲で探索範囲を狭める処理を行う。
「状態爆発」とは、モデル検査装置が探索する状態空間の規模が巨大すぎて現実的な時間内に検証が終わらない状態をいう。
「ルール型検査仕様」とは、検査対象とは独立して定義された、検査範囲と検査内容を指示するための記述(コード)をいう。「ルール型検査仕様」は、差し込み位置指定部と、差し替え内容部によって構成される。
「差し込み位置指定部」とは、実行系列の一部を代替処理に置き換える際の、置き換え箇所を指定するルールをいう。ルールベースで記述し、1つのルールで実行系列中の複数の該当箇所に作用させる。
「差し替え内容」とは、差し込み位置で指定した実行系列中の部分領域を上書き(置換)する具体的な内容をいう。例えば、「差し替え内容」はDo nothing、簡略化した代替処理、或いは元の処理をそのまま呼び出すコードなどである。
「表明文」とは、アサーションコード(Assert.equals, Assert.true)をいう。「表明文」は差し替え内容の一部として書かれる。モデル検査装置が探索中にこの表明文に相当するコードを実行し、その実行結果がエラーの場合は検査失敗とみなされる。
「差し込み装置」とは、ルール型検査仕様を検査対象に挿し込む装置をいう。「差し込み装置」は、ルール型検査仕様の差し込み位置指定部で指定された実行系列上の特定の箇所に差し替え内容を差し込む処理を行う。また、「差し込み装置」は、モデル検査装置をプロセススコープで制御するコード(例:ENTER_EXPLORE. EXIT_EXPLORE)で差し替え内容を囲い込む。
「ENTER_EXPLORE」は、モデル検査装置に探索開始を指示する制御コードである。
「EXIT_EXPLORE」とは、モデル検査装置に探索終了を指示する制御コードである。
「探索モード」とは、モデル検査装置がもつ、検査対象が取りうる状態の網羅的な探索を行うかどうかの設定をいう。探索モードは、プロセススコープで管理する。探索モードがOFFであると、他のプロセスに制御が移る(状態が変わる)可能性があってもモデル検査装置は考慮しない。探索モードがONであると、他のプロセスに制御が移る可能性がある場合、あらゆる可能性をモデル検査装置は考慮する。
「検査ブロック」とは、ENTER_EXPLOREとEXIT_EXPLOREで囲い込まれた実行系列中のコードの集まりをいう。本特許で使用するモデル検査装置の探索範囲を実行系列別に分解して見たものに相当する。
「ソフトウェアモデル検査」とは、ソースコードをコンパイルして得た実行可能なバイトコードを対象にしたモデル検査技術をいう。
「ソフトウェアモデル検査装置」とは、上記ソフトウェアモデル検査技術を実装したツール、若しくはそのようなツールを搭載した装置をいう。
「JPF」とは、Java Path Finderをいい、ソフトウェアモデル検査装置の1種である。「JPF」は、Javaバイトコードを対象に、検査対象の取りうる状態を網羅的に探索する。元々はJavaソースコードをpromelaコードに変換していたが、状態爆発で行き詰まったため、現在はバックトラック機能をもったJVMそのもののスタブとして実装されている。
「Java」とは、プログラミング言語の一種をいい, 「javac」はそのコンパイラをいう。
「JVM」とは、Java仮想マシンをいい, Javaプログラムを実行する環境である。
「アスペクト指向プログラミング」とは、ソースコードを横断的な側面から捉えて共通処理を挿し込むプログラミング技術をいう。本発明では、ルール型検査仕様を記述するために利用する。
「アスペクトコンパイラ」とは、上記アスペクト指向プログラミング技術を実装するコンパイラをいう。本発明では差し込み装置として利用される。
「AspectJ」とはJava向けのアスペクトコンパイラの一種をいい、「ajc」とは、AspectJのコンパイラをいう。ajcでコンパイルしたプログラムはJVM上で実行できる。
本発明の第1の実施の形態について説明する。本発明の第1の実施の形態は、モデル検査装置として提案される。
モデル検査装置は、デッドロック、ライブロック、リソース競合などの排他制御系の問題を検出する技術であるモデル検査を実行する装置である。このモデル検査装置は、コンピュータ、ワークステーションなどの情報処理装置であって、この情報処理装置は、演算処理装置(CPU)、主メモリ(RAM)、読み出し専用メモリ(ROM)、入出力装置(I/O)、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
図1に第1の実施の形態に係るモデル検査装置の構成例を示す機能ブロック図を掲げる。なお、機能ブロック図中に示す構成要素は、モデル検査装置の機能を機能ごとにまとめてブロックとして捉えたものであり、モデル検査装置が各構成要素に対応する基板、装置、回路、部品などの物理的構成要素を備えていなければならないことを意味するわけではない。また、「接続されている」とは、データ、情報、命令などの送受信、受け取り、受け渡しなどが可能な状態になっていることをいい、互いに配線で連結されているような物理的な接続に限られる意味ではない。本明細書中の他の機能ブロック図の説明についても同様である。
検査対象記憶部10は、モデル検査の対象であるコードを記憶する機能を有する。コードは後述する差し込み実行部20によりルール型検査仕様に基づいた、上記コードの変更が可能なものであればどのようなものでも良い。本実施の形態では、検査対象記憶部10は、コンパイラがソースコードを実行可能な形式に変換したコードであるバイトコードであるものとして説明する。
ルール型検査仕様記憶部30は、ルール型検査仕様を記憶する機能を有する。ルール型検査仕様は、差し込み実行部20に実行系列における検査ブロックの開始位置及び終了位置を指示する記述である。図2に、ルール型検査仕様のデータ構成例を示す図を掲げる。ルール型検査仕様200は、差し込み位置指定部201と差し替え内容指定部202とを有する。差し込み位置指定部201は、検査対象中の命令文、関数などの記述の中で、検査ブロックの開始位置及び終了位置とした記述を指定するコード(記述)である。差し替え内容指定部202は、差し込み位置指定部201によって特定された検査ブロック内のコードに挿し込むオリジナル・コード、置き換えコード(該当する部分を空処理に置き換えるコードを含む)を指定する記述である。
差し込み実行部20は、ルール型検査仕様記憶部30に記憶されたルール型検査仕様200を参照して、ルール型検査仕様200の差し込み位置指定部201の内容に一致する検査対象の位置(箇所)に、検査ブロックの開始位置を指定する情報である検査ブロック開始位置情報、及び検査ブロックの終了位置を指定する情報である検査ブロック終了位置情報を、検査対象に挿入し、この検査ブロックの開始位置及び終了位置によって囲まれた範囲である検査ブロック内に、ルール型検査仕様200の差し替え内容指定部202で指定されている内容を挿入し、若しくは置換して、差し込み後検査対象を生成する機能を有する。
差し込み後検査対象記憶部40は、差し込み実行部20によって生成された差し込み後検査対象を記憶する機能を有する。
検査実行部50は、差し込み後検査対象記憶部40から差し込み後検査対象を読み出し、差し込み実行部20によって指定された探索範囲である前記検査ブロック開始位置情報及び前記検査ブロック終了位置情報によって囲まれた範囲を探索する状態空間として、モデル検査を実行し、検査条件を満たさないシステムの動作シーケンスの例を検査結果出力60(反例)として出力する機能を有する。
検査実行部50は、各プロセス(実行系列)の初期の探索モードをOFFに設定しておく。
次にモデル検査装置1の動作を説明する。図9にモデル検査装置1の主たる動作の一例を示したフローチャートを示す。
まず、モデル検査装置1は、検査対象の入力を受け付け、検査対象を検査対象記憶部10に記憶させる(S10)。
次にモデル検査装置1は、ルール型検査仕様の入力を受け付け、ルール型検査仕様をルール型検査仕様記憶部30に記憶させる(S20)。
以上でモデル検査装置1による検査対象のモデル検査が終了する。
前述の図9に示したステップS30である差し込み後検査対象生成処理について詳述する。図10は、差し込み後検査対象生成処理の一例を示したフローチャートである。
以上で差し込み後検査対象生成処理の説明を終了する。
前述の図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の実施の形態の実施例を説明する。図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とを有している。
本実施形態に係るモデル検査装置によれば、検査対象と独立して記述したルール型検査仕様により、検査実行者が検査対象に直接手を加えること無く、探索範囲を制御するコードと検査内容を検査対象に埋め込むことができ、その結果探索する状態空間をさらに限定して目的の検査を実行することが可能となる。
以上、本発明の実施の形態を説明したが、本発明はこれらに限定されるものではなく、発明の趣旨を逸脱しない範囲内において、種々の変更、追加、組み合わせ等が可能である。
Claims (3)
- モデル検査の対象となるコードである検査対象を記憶する第1の記憶手段と、
実行系列における検査ブロックの開始位置及び終了位置を指示する記述である差し込み位置指示情報を有する検査仕様を記憶する第2の記憶手段と、
前記差し込み位置指示情報に記述された内容に対応する位置に、検査ブロックの開始位置を指定する情報である検査ブロック開始位置情報、及び検査ブロックの終了位置を指定する情報である検査ブロック終了位置情報を挿入して、差し込み後検査対象を生成する第1の実行手段と、
前記差し込み後検査対象を読み取り、前記検査ブロック開始位置情報及び前記検査ブロック終了位置情報によって囲まれた範囲である検査ブロック内を探索する状態空間として、モデル検査を実行する第2の実行手段と
を有するモデル検査装置。 - 前記検査仕様は、前記検査ブロック内のコードに挿し込むコードを指定する記述である差し込み内容指定情報をさらに有する、請求項1に記載のモデル検査装置。
- 前記差し込み内容指定情報は、その実行結果がエラーの場合は検査失敗とみなされるコードである表明文を含んでいる、請求項2に記載のモデル検査装置。
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112597029A (zh) * | 2020-12-26 | 2021-04-02 | 中国农业银行股份有限公司 | 一种规范检查系统、方法、设备及介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0561722A (ja) * | 1991-09-02 | 1993-03-12 | Nec Corp | 実行情報採取方式 |
-
2013
- 2013-06-27 JP JP2013135115A patent/JP2015011445A/ja active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0561722A (ja) * | 1991-09-02 | 1993-03-12 | Nec Corp | 実行情報採取方式 |
Non-Patent Citations (2)
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)
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 |