9
猫でもわかる! モデル検査器 SPIN 入門 チェシャ猫 (@y_taka_23) 2014年12月6日 NGK2014B 昼の部 LT

猫でもわかる! モデル検査器 SPIN 入門

  • Upload
    ytaka23

  • View
    813

  • Download
    7

Embed Size (px)

Citation preview

Page 1: 猫でもわかる! モデル検査器 SPIN 入門

猫でもわかる!モデル検査器 SPIN 入門

チェシャ猫 (@y_taka_23)2014年12月6日

NGK2014B 昼の部 LT

Page 2: 猫でもわかる! モデル検査器 SPIN 入門

リソース共有問題● スキャナとプリンタを同時に使用したい● スキャナ・プリンタの使用は一度に 1 人のみ● クライアントが 2 人いる場合

– クライアント A がスキャナを確保– クライアント B がプリンタを確保– A はプリンタの、B はスキャナの解放待ち– 両者ともに動けない (デッドロック)

● 並行プロセスの相互作用による不具合

Page 3: 猫でもわかる! モデル検査器 SPIN 入門

現実はさらに複雑● イレギュラーな挙動

– 突然エラーが発生してプロセスが死ぬ– パケットが通信中に消失・破損する

● プロセス間の複雑な相互作用– 非同期処理と同期処理が混在している– 通信に遅延が発生する

Page 4: 猫でもわかる! モデル検査器 SPIN 入門

あり得る状態を全探索= モデル検査 (Model Checking)

Page 5: 猫でもわかる! モデル検査器 SPIN 入門

Promela / SPIN● Promela (PROcess MEta LAnguage)

– プロセスの振る舞いを記述する DSL– 手続き指向、C 言語風文法

● SPIN (Simple Promela INterpreter)– Promela でモデル化されたシステムを検証– モデルが取り得るすべての状態を全探索

Page 6: 猫でもわかる! モデル検査器 SPIN 入門

非決定的選択● 複数の遷移の可能性を考えられる● システムから制御不可能な要素をモデリング● SPIN は発生し得るすべての分岐を検査

if :: mode == 0 -> input = 0;:: mode == 1 -> input = 0;:: mode == 1 -> input = 1;fi

Page 7: 猫でもわかる! モデル検査器 SPIN 入門

インタリーブ実行● 文ごとに割り込みが発生し得る● 非同期マルチプロセスをモデリング● SPIN は発生し得るすべての実行順序を検査proctype incrementer() { tmp = acc; /* A */ acc = tmp + 1; /* B */}

proctype decrementer() { tmp = acc; /* C */ acc = tmp – 1; /* D */}

Page 8: 猫でもわかる! モデル検査器 SPIN 入門

線形時相論理● LTL (Linear Temporal Logic) とも呼ばれる● 時間的な前後関係を含む条件を検証

– □ … 現在以降の任意の状態で条件が成立– ◇ … 現在以降のある状態で条件が成立

● 例 : リクエストに対しいつかは応答がある

● 例:初期化後は常に有効[] (request => <> response)

[] (initialized => [] active)

Page 9: 猫でもわかる! モデル検査器 SPIN 入門

興味のある人は● Basic Spin Manual

– http://whitewash-net.or.jp/~hs7m-kwgc/spin/Man/Manual_japanese.html

● 書籍『SPIN モデル検査入門』– Mordechai Ben-Ari 著、中島震ら訳

● 名古屋モデル検査勉強会 #2 資料– https://gist.github.com/y-taka-23/8419128

presented by チェシャ猫 (@y_taka_23)