Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

5,438 views

Published on

2014 年の名古屋合同懇親会 (NGK2014B) LT 大会で使用したスライドです。

Published in: Technology
  • Login to see the comments

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

  1. 1. 猫でもわかる! モデル検査器 SPIN 入門 チェシャ猫 (@y_taka_23) 2014年12月6日 NGK2014B 昼の部 LT
  2. 2. リソース共有問題 ● スキャナとプリンタを同時に使用したい ● スキャナ・プリンタの使用は一度に 1 人のみ ● クライアントが 2 人いる場合 – クライアント A がスキャナを確保 – クライアント B がプリンタを確保 – A はプリンタの、B はスキャナの解放待ち – 両者ともに動けない (デッドロック) ● 並行プロセスの相互作用による不具合
  3. 3. 現実はさらに複雑 ● イレギュラーな挙動 – 突然エラーが発生してプロセスが死ぬ – パケットが通信中に消失・破損する ● プロセス間の複雑な相互作用 – 非同期処理と同期処理が混在している – 通信に遅延が発生する
  4. 4. あり得る状態を全探索 = モデル検査 (Model Checking)
  5. 5. Promela / SPIN ● Promela (PROcess MEta LAnguage) – プロセスの振る舞いを記述する DSL – 手続き指向、C 言語風文法 ● SPIN (Simple Promela INterpreter) – Promela でモデル化されたシステムを検証 – モデルが取り得るすべての状態を全探索
  6. 6. 非決定的選択 ● 複数の遷移の可能性を考えられる ● システムから制御不可能な要素をモデリング ● SPIN は発生し得るすべての分岐を検査 if :: mode == 0 -> input = 0; :: mode == 1 -> input = 0; :: mode == 1 -> input = 1; fi
  7. 7. インタリーブ実行 ● 文ごとに割り込みが発生し得る ● 非同期マルチプロセスをモデリング ● SPIN は発生し得るすべての実行順序を検査 proctype incrementer() { tmp = acc; /* A */ acc = tmp + 1; /* B */ } proctype decrementer() { tmp = acc; /* C */ acc = tmp – 1; /* D */ }
  8. 8. 線形時相論理 ● LTL (Linear Temporal Logic) とも呼ばれる ● 時間的な前後関係を含む条件を検証 – □ … 現在以降の任意の状態で条件が成立 – ◇ … 現在以降のある状態で条件が成立 ● 例 : リクエストに対しいつかは応答がある [] (request => <> response) ● 例:初期化後は常に有効 [] (initialized => [] active)
  9. 9. 興味のある人は ● 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)

×