モデル検査のためのコンカレントシステムの仕様記述

Slides:



Advertisements
Similar presentations
紹介担当: 石尾 隆(大阪大学) Q11.  Feature Model によって定義される「プロダクトの集合」 (プロダクトライン)の振舞いを検証する手法の拡張 ◦ 通常の振舞い検証: たとえば Promela を使って,1プロダクトの 振舞いを表現したオートマトンの取りうる状態遷移を調べる ◦
Advertisements

プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
OWL-Sを用いたWebアプリケーションの検査と生成
モデル検査の応用 徳田研究室 西村太一.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
LZ圧縮回路の設計とハード・ソフト 最適分割の検討 電子情報デザイン学科 高性能計算研究室 4回生 中山 和也 2009/2/27.
プログラミング基礎I(再) 山元進.
ラベル付き区間グラフを列挙するBDDとその応用
コンパイラ 2011年10月17日
Ex8. Search for Vacuum Problem(2)
班紹介 描画班一同.
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
アルゴリズムとデータ構造1 2007年6月12日
プログラミング基礎I(再) 山元進.
データ構造と アルゴリズム 理工学部 情報システム工学科 新田直也.
5.チューリングマシンと計算.
5.チューリングマシンと計算.
プログラミング基礎I(再) 山元進.
8.クラスNPと多項式時間帰着.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
情報科学1(G1) 2016年度.
充足可能性判定を利用した モデル検査 土屋達弘 (大阪大学).
データ構造と アルゴリズム 知能情報学部 新田直也.
データ構造とアルゴリズム論 第2章 配列(構造)を使った処理
コンパイラ 2012年10月15日
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
第20章 Flyweight ~同じものを共有して無駄をなくす~
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
CONCURRENT PROGRAMMING
アルゴリズム入門.
チューリング機械 状態の有限集合 ヘッドの方向を表す。 L:1コマ左へ R:1コマ右へ テープ記号の有限集合 入力記号の有限集合 動作関数
型付きアセンブリ言語を用いた安全なカーネル拡張
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
プログラミング言語入門 手続き型言語としてのJava
アルゴリズムとデータ構造 2011年7月4日
独習Java ・ 8.1  例外処理 ・ 8.2  catch ブロックの検索  12月 5日    小笠原 一恵.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2013年7月16日
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
アルゴリズムとプログラミング (Algorithms and Programming)
第3回 アルゴリズムと計算量 2019/2/24.
5.9 メソッドのオーバーロード 5.10 変数の引渡し 2003/11/21 紺野憲一
モデル検査(3) 手続き型言語に基づくモデリング
(1)序論 人工知能とは 歴史 方法論 人工知能の基礎 問題解決 探索 推論 知識.
アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師 山田敬三
モデル検査(5) CTLモデル検査アルゴリズム
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
4 形式的設計検証技術 検証 verification 形式的検証 (4.1.2)
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
5.チューリングマシンと計算.
保守請負時を対象とした 労力見積のためのメトリクスの提案
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
アルゴリズムとデータ構造 2013年7月8日
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
コンパイラ 2012年10月11日
回帰テストにおける実行系列の差分の効率的な検出手法
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
情報数理Ⅱ 第10章 オートマトン 平成28年12月21日.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
ねらい 数値積分を例題に、擬似コードのアルゴリズムをプログラムにする。
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
アルゴリズムとデータ構造 2012年7月9日
Presentation transcript:

モデル検査のためのコンカレントシステムの仕様記述 土屋達弘 (大阪大学)

日本語でよめるモデル検査関連の文献 米田,梶原,土屋,ディペンダブルシステム, 共立出版,2005. 電子情報通信学会ハンドブック/知識ベース, 7群1編「ソフトウェア基礎」 土屋,菊野,”モデル検査入門,” 計測と制御,2009. 他.Amazonで検索

モデル検査とは 形式的検証手法 入力: 設計 + 特性 (仕様) 出力: Yes or No 方法: 状態探索 モデル検査器 状態機械 設計 2007 Turing Award (Clarke, Emerson, Sifakis)  入力: 設計 + 特性 (仕様) 出力: Yes or No 方法: 状態探索 モデル検査器 状態機械 設計 Yes No (+反例) 特性 (仕様)

コンカレントシステムとは 並行に処理が実行されるシステム 通常は停止しない (リアクティブシステム) 講演者の教育経験 大阪大学・大学院前期課程 組込み適塾 プログラムを中心に 講義

マルチスレッドのプログラム 例:Java プログラム public class MutualExclusion extends Thread { static volatile int t = 1; int id; MutualExclusion(int id) { this.id = id; } public static void main(String[] args) { new MutualExclusion(0).start(); new MutualExclusion(1).start(); public void run() { while (true) { while (t != id); // Critical Section t = 1 - t;

状態遷移モデル 状態遷移モデル 初期状態集合 遷移関係(遷移集合) 状態:(pc0, pc1, t) 0: while (true) { 1: while (t != id); // CS 2: t = 1 - t; } 0,0,0 0,0,1 0,1,0 1,0,0 0,1,1 1,0,1 1,1,0 2,0,0 0,2,1 1,1,1 2,1,0 1,2,1

システムをどう記述するか コード,擬似コード …  数式  分りやすさ 証明のしやすさ モデル検査(自動検証)のしやすさ 数式  分りやすさ t = 1 t = 1 – t 証明のしやすさ モデル検査(自動検証)のしやすさ TLA by Lamport

数式によるシステムの表現 状態とは? 遷移とは? グラフ表現:頂点 数式表現:変数への付値 グラフ表現:頂点 数式表現:変数への付値 例.pc0 = 0, pc1 = 2, t = 1 遷移とは? グラフ表現:辺  数式表現:変数とそのコピーへの付値 例.pc0 = 0, pc1 = 2, t = 1, pc‘0 = 1, pc‘1 = 2, t‘ = 1 プライムつき変数は,次状態に対応 0,0,0 0,0,1 0,1,0 1,0,0 0,1,1 1,0,1 状態:(pc0, pc1, t) 1,1,0 2,0,0 0,2,1 1,1,1 2,1,0 1,2,1

変数と述語 変数 述語 状態変数 プライムつき状態変数 ブール値をもつ式 状態述語: 状態変数上の述語 遷移述語: 状態変数,プライムつき状態変数上の述語

数式表現:状態集合 状態集合Sとは? 例.初期状態集合 状態述語S S = True  sS が付値 I = {(pc0,pc1, t)=(0, 0, 0)} 数式表現 I := pc0=0  pc1=0  t=0 0,0,0 0,0,1 0,1,0 1,0,0 0,1,1 1,0,1 1,1,0 2,0,0 0,2,1 1,1,1 2,1,0 1,2,1

数式表現:遷移関係 遷移関係T (遷移集合) とは? 例.状態変数: x (整数型)のみ 遷移述語T T = True  (s, s’)T が付値 例.状態変数: x (整数型)のみ T := (x  3  x’ = x + 1)  (x > 3  x’ = x) x=0 x=1 x=2 x=3 x=4 x=5 x=6

どう数式表現を得るか? コンカレントシステムの遷移関係を表す数式を,どうやってもとめればよいか? 数式は設計そのもの

動作の表現 コンカレントシステム ひとつひとつの処理 Ti := Guardi  Actioni 並行に処理が実行されるシステム

各処理の表現 Ti := Guardi  Actioni 例.「プロセス0はPCが0のとき,PCを1にする」 T1 := pc0=0  pc’0=1  pc’1=pc1 t’ =t 0: while (true) { 1: while (t != id); // CS 2: t = 1 - t; } 0,0,0 0,0,1 0,1,0 1,0,0 0,1,1 1,0,1 1,1,0 2,0,0 0,2,1 1,1,1 2,1,0 1,2,1

動作全体の表現 各処理iに関する遷移集合 遷移関係全体 遷移関係はtotalでないといけない Ti := Guard1  Action1 T :=T1 T2 …  Tn  ¬(Guard1 … Guardn )pc’0=pc0pc’1=pc1t’=t 遷移関係はtotalでないといけない どの状態についても次状態があること テクニカルな理由による要求 実行できる命令がないなら「次状態 = 現状態」

Stuttering遷移 Stuttering遷移 遷移関係をtotalにする別の方法 同じ状態にとどまる遷移 遷移関係をtotalにする別の方法 T :=T1 T2 …  Tn  pc’0=pc0pc’1=pc1t’=t 遷移を付加しても, 多くの性質は保存される Stuttering遷移: 「次状態 = 現状態」 0,0,0 0,1,0 1,1,0 2,0,0 2,1,0 1,0,0 0,1,1 0,2,1 1,1,1 1,2,1 0,0,1 1,0,1

擬似コード vs. 数式表現 (Bakeryアルゴリズム) P1 { T: a = b + 1; W: wait (a < b || b = 0); C: go to T; } P2 { T: b = a + 1; W: wait (b < a || a = 0);

モデル検査とは 形式的検証手法 入力: 設計 + 特性 (仕様) 出力: Yes or No 方法: 状態探索 モデル検査器 状態機械 設計 (+反例) 特性 (仕様)

モデル検査の簡単な歴史 1980頃 1990年代 1998~ 2000年代中~後 最初の研究成果 Partial Order Reduction -> SPIN BDD (2分決定グラフ) -> SMV 1998~ SAT (充足可能性判定) 2000年代中~後 SMT 状態グラフを作成,探索 記号モデル検査 状態機械を記号的に表現・操作

BDDによる記号モデル検査 (1/2) BDD: ブール式を表現するデータ構造 f = x ¬x y 有限状態に限定すれば, 極めてコンパクトにブール式を表現 高速な演算処理アルゴリズムが存在 有限状態に限定すれば, 状態変数→ブール変数 演算→ブール演算 述語→ブール式 f = x ¬x y x 1 y 1 1

BDDによる記号モデル検査 (1/2) S ブール式の演算で幅優先探索が可能 V: 状態変数集合,T: 遷移関係, S: 状態集合 Exist(T(V, V’)  S(V’)) Sへ0歩か1歩でいける状態集合 S  Exist(T(V, V’)  S(V’))     S  Exist(T, S) Exist(T, S) S

NuSMVモデル検査器 DEFINE T1 := (pc1 = R) & (next(pc1) = W) & (next(a) = b + 1)   & (next(pc2) = pc2) & (next(b) = b); W1 := (pc1 = W) & (a < b | b = 0) & (next(pc1) = C)   & (next(pc2) = pc2) & (next(a) = a) & (next(b) = b);   ・・・ TRANS T1 | W1 | C1 | T2 | W2 | C2 | STUT INIT pc1 = R & pc2 = R & a = 0 & b = 0

SATを利用したモデル検査 充足可能性判定問題(SAT) (拡張版) 例. 入力:ブール値をもつ式 出力:Yes or No 条件:Yes の必要十分条件は, 式をTrueにする変数への値の割り当て (付値 valuation)が存在すること 例. 入力: x, y  Z, (x + y > 2)  ((x < 3)  (y < 2)) 出力: Yes (付値の例 x = 2, y = 1)

SAT Solver / SMT (Satisfiability Modulo Theories) Solver 高速なヒューリステックアルゴリズム MiniSAT, Zchaff, Grasp, … SMT Solver: 「ブール式+背景理論」を扱う Yices, CVC3, Z3,… 種々の背景理論 (組み合わせても良い) 配列,Linear Arithmetic (整数and/or実数の加減算大小比較),ビットベクトル

有界モデル検査 初期状態からk回の状態遷移を検査 I(0)  T(0,1)  …  T(k-1,k)  (P(0)…P(k)) 充足可能 ⇒ 集合P中の状態に到達 I(0): Iの各変数varをvar0に置き換え T(i, i+1):Tの各変数varをvariに, var’をvari+1に置き換え

例. I := x = 1 T := (x  3  x’ = x + 1)  (x > 3  x’ = x) I(0)  T(0,1)  …  T(k-1,k)  (P(0)…P(k)) =  x0 =1  (x0  3  x1 = x0 + 1)  (x0 >3  x1 = x0)  (x1  3  x2 = x1 + 1)  (x1 >3  x2 = x1) …  (xk-1  3  xk = xk-1 + 1)  (xk-1>3  xk = xk-1)  (P(x0) … P(xk)) 充足可能 ⇒集合P中の状態に到達

有界モデル検査の長短 長所 短所 初期状態に近い状態を効率良く検証 充足する場合は速い (Bug Huntingに効果的) メモリの消費量は比較的すくない 短所 時間がかかる 特にコンカレントシステムの場合→ Ogata et al. ATVA’04 完全な検証のためには大きなkが必要 式が大きくなり時間がかかるため検証が困難 十分なkを知るのが困難

上限kの解消: Induction 目的: 性質Qが常に成立するか否かを判定 手法:以下の2条件を示す 初期状態で性質Qがなりたつ I(0)  Q(0) が充足不能 性質Qが成り立っているなら,次状態でも成り立つ Q(0) T(0,1)  Q(1) が充足不能 1, 2 ⇒ Qが常になりたつ

アナログ値の扱い 実時間システム,ハイブリッドシステム アナログの変数値をどう扱うか? 一定時間における増減をひとつの処理とみなす x_ON:= (at = ON)  t:(t  0  10x’ – 10x  t  5x’ – 5x  t)  (at’ = ON) ON  0.1x 0.2

まとめ 数式によるコンカレントシステムの記述と モデル検査 コンカレントシステムの数式表現 BDDによるモデル検査 SAT/SMTソルバによるモデル検査

MODULE main VAR pc1: {R, W, C}; pc2: {R, W, C}; a: 0..10; b: 0..10; DEFINE T1 := (pc1 = R) & (next(pc1) = W) & (next(a) = b + 1) & (next(pc2) = pc2) & (next(b) = b); W1 := (pc1 = W) & (a < b | b = 0) & (next(pc1) = C) & (next(pc2) = pc2) & (next(a) = a) & (next(b) = b); C1 := (pc1 = C) & (next(pc1) = R) & (next(pc2) = pc2) & (next(a) = a) & (next(b) = b); T2 := (pc2 = R) & (next(pc2) = W) & (next(b) = a + 1) & (next(pc1) = pc2) & (next(a) = b); W2 := (pc2 = W) & (b < a | a = 0) & (next(pc2) = C) & (next(pc1) = pc1) & (next(a) = a) & (next(b) = b) ; C2 := (pc2 = C) & (next(pc2) = R) & (next(pc1) = pc1) & (next(a) = a) & (next(b) = b); STUT := (next(pc1) = pc1) & (next(pc2) = pc2) & (next(a) = a) & (next(b) = b); TRANS T1 | W1 | C1 | T2 | W2 | C2 | STUT INIT pc1 = R & pc2 = R & a = 0 & b = 0 SPEC AG !(pc1 = C & pc2 = C)