31
1 モモモモモモモモモモモモモモモモモモモモモモモ モモモモ ( モモモモ )

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

  • Upload
    khoi

  • View
    49

  • Download
    1

Embed Size (px)

DESCRIPTION

モデル検査のためのコンカレントシステムの仕様記述. 土屋達弘 ( 大阪大学 ). 日本語でよめるモデル検査関連の文献. 米田,梶原,土屋,ディペンダブルシステム, 共立出版, 2005. 電子情報通信学会ハンドブック/知識ベース, 7群1編「ソフトウェア基礎」 土屋,菊野, ” モデル検査入門 , ” 計測と制御, 2009. 他. Amazon で 検索. モデル検査とは. 形式的検証手法 2007 Turing Award (Clarke, Emerson, Sifakis )  入力 : 設計 + 特性 ( 仕様 ) - PowerPoint PPT Presentation

Citation preview

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

1

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

土屋達弘 ( 大阪大学 )

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

日本語でよめるモデル検査関連の文献 米田,梶原,土屋,ディペンダブルシステム,

共立出版, 2005. 電子情報通信学会ハンドブック/知識ベース,

7群1編「ソフトウェア基礎」 土屋,菊野,”モデル検査入門 ,” 計測と制御,

2009. 他. Amazon で検索

2

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

3

モデル検査とは 形式的検証手法

2007 Turing Award   (Clarke, Emerson, Sifakis)  入力 : 設計 + 特性 ( 仕様 ) 出力 : Yes or No 方法 : 状態探索

特性 ( 仕様 )

状態機械 状態機械

モデル検査器

Yes

No( +反例 )

設計

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

コンカレントシステムとは

並行に処理が実行されるシステム 通常は停止しない ( リアクティブシステム )

講演者の教育経験 大阪大学・大学院前期課程 組込み適塾

プログラムを中心に講義

4

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

マルチスレッドのプログラム例: Java プログラム

5

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 Sectiont = 1 - t;

}}

}

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

0: while (true) {1: while (t != id);

// CS2: t = 1 - t;

} }

状態遷移モデル

状態遷移モデル 初期状態集合 遷移関係 ( 遷移集合 )

6

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

状態: (pc0, pc1, t)

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

システムをどう記述するか

コード,擬似コード

… 数式

分りやすさ t = 1 t = 1 – t

証明のしやすさ モデル検査(自動検証)のしやすさ

7

TLA by Lamport

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

数式によるシステムの表現

状態とは? グラフ表現 : 頂点 数式表現 : 変数への付値

例. pc0 = 0, pc1 = 2, t = 1

遷移とは? グラフ表現 : 辺  数式表現 : 変数とそのコピーへ

の付値 例. pc0 = 0, pc1 = 2, t = 1, pc‘0 = 1, pc‘1 = 2, t‘ = 1 プライムつき変数は,次状態に対応

8

状態: (pc0, pc1, t)

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

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

変数と述語

変数 状態変数 プライムつき状態変数

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

述語

9

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

10

数式表現:状態集合

状態集合 S とは? 状態述語 S  S = True sS が付値

状態集合 S と状態述語 S を同一視

例.初期状態集合 I = {(pc0,pc1, t)=(0, 0, 0)}

数式表現I := pc0=0 pc1=0 t=0

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

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

数式表現:遷移関係

遷移関係 T   ( 遷移集合 ) とは? 遷移述語 T

T = True (s, s’)T が付値

例.状態変数 : x ( 整数型 ) のみ T := (x 3 x’ = x + 1) (x > 3 x’ = x)

11

x=0 x=1 x=2 x=3 x=4 x=5 x=6

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

どう数式表現を得るか?

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

数式は設計そのもの

12

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

動作の表現

コンカレントシステム 並行に処理が実行されるシステム

ひとつひとつの処理 Ti := Guardi Actioni

Guard: アクションが起こり得る条件を表す状態述語

Action: 処理による変数値の変化を表す遷移述語

13

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

各処理の表現

Ti := Guardi Actioni

Guardi: アクションが起こり得る条件を表す状態述語

Actioni: 処理による変数値の変化を表す遷移述語

例.「プロセス 0 は PC が 0 のとき, PC を 1にする」

T1 := pc0=0 pc’0=1 pc’1=pc1 t’ =t

14

0: while (true) {1: while (t != id);

// CS2: t = 1 - t;

} }

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

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

動作全体の表現

各処理 i に関する遷移集合 Ti := Guard1 Action1

遷移関係全体T :=T1 T2 … Tn

¬(Guard1 … Guardn )pc’0=pc0pc’1=pc1t’=t

遷移関係は total でないといけない どの状態についても次状態があること テクニカルな理由による要求

15

実行できる命令がないなら「次状態 = 現状態」

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

Stuttering 遷移 Stuttering 遷移

同じ状態にとどまる遷移 遷移関係を total にする別の方法

T :=T1 T2 … Tn pc’0=pc0pc’1=pc1t’=t

遷移を付加しても,多くの性質は保存される

16

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

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

擬似コード vs. 数式表現(Bakery アルゴリズム )

17

a = 0;b = 0;

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);C: go to T;}

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

18

モデル検査とは 形式的検証手法

入力 : 設計 + 特性 ( 仕様 ) 出力 : Yes or No 方法 : 状態探索

特性 ( 仕様 )

状態機械 状態機械

モデル検査器

Yes

No( +反例 )

設計

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

モデル検査の簡単な歴史

1980 頃 最初の研究成果

1990 年代 Partial Order Reduction -> SPIN BDD (2 分決定グラフ ) -> SMV

1998~ SAT (充足可能性判定 )

2000 年代中~後 SMT

19

記号モデル検査状態機械を記号的に表現・操作

状態グラフを作成,探索

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

20

BDD による記号モデル検査 (1/2)

BDD: ブール式を表現するデータ構造 極めてコンパクトにブール式を表現 高速な演算処理アルゴリズムが存在

有限状態に限定すれば, 状態変数→ブール変数 演算→ブール演算 述語→ブール式

x

y

0 1

0

1

10

f = x ¬x y

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

21

S Exist(T, S)

BDD による記号モデル検査 (1/2)

ブール式の演算で幅優先探索が可能V: 状態変数集合, T : 遷移関係 , S: 状態集合

S へ1歩でいける状態集合 Exist(T(V, V’) S(V’))

S へ 0歩か 1歩でいける状態集合 S Exist(T(V, V’) S(V’))     

Exist(T, S) S

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

22

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

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

SAT を利用したモデル検査

充足可能性判定問題 (SAT)  (拡張版) 入力:ブール値をもつ式 出力: Yes or No 条件: Yes の必要十分条件は,

式を True にする変数への値の割り当て( 付値 valuation) が存在すること

例. 入力 : x, y Z, (x + y > 2) ((x < 3) (y <

2)) 出力 : Yes ( 付値の例 x = 2, y = 1)

23

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

SAT Solver /SMT (Satisfiability Modulo Theories) Solver SAT Solver: ブール式の充足可能性判定器

高速なヒューリステックアルゴリズム MiniSAT, Zchaff, Grasp, …

SMT Solver: 「ブール式+背景理論」を扱う

Yices, CVC3, Z3,… 種々の背景理論 (組み合わせても良い)

配列, Linear Arithmetic ( 整数 and/or 実数の加減算大小比較 ) ,ビットベクトル

24

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

有界モデル検査

初期状態から k回の状態遷移を検査 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 に置き換え

25

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

例. 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))

26

充足可能 ⇒集合 P 中の状態に到達

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

27

有界モデル検査の長短

長所 初期状態に近い状態を効率良く検証 充足する場合は速い ( Bug Hunting に効果的) メモリの消費量は比較的すくない

短所 時間がかかる

特にコンカレントシステムの場合→  Ogata et al. ATVA’04

完全な検証のためには大きな k が必要 式が大きくなり時間がかかるため検証が困難 十分な k を知るのが困難

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

上限 kの解消 : Induction 目的 : 性質 Q が常に成立するか否かを判定 手法 :以下の 2 条件を示す

1. 初期状態で性質 Q がなりたつ I(0) Q(0)

が充足不能 2. 性質 Q が成り立っているなら,次状態でも成り

立つ Q(0) T(0,1) Q(1)

が充足不能 1, 2 ⇒ Q が常になりたつ

28

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

アナログ値の扱い

実時間システム,ハイブリッドシステム アナログの変数値をどう扱うか?

一定時間における増減をひとつの処理とみなすx_ON:= (at = ON)

t:(t 0 10x’ – 10x t 5x’ – 5x t)

(at’ = ON)

29

0.1x 0.2

ON

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

まとめ

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

30

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

31

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)