Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
形式手法の 10 メートル手前 チェシャ猫 (@y_taka_23) Kernel / VM 探検隊 @ 北陸 Part 7 9th Nov. 2024
Slide 2
Slide 2 text
前回(8 月)の Kernel / VM 探検隊
Slide 3
Slide 3 text
r1ru さん (@ri5255) Rust で自作モデル検査器 https://speakerdeck.com/riru/symbolic-model-checker-from-scratch-in-rust
Slide 4
Slide 4 text
かなり 本格的な 解説
Slide 5
Slide 5 text
偶然居合わせたチェシャ猫 「参考文献の著者です」 https://speakerdeck.com/riru/symbolic-model-checker-from-scratch-in-rust?slide=46
Slide 6
Slide 6 text
参考文献の その「先」へ
Slide 7
Slide 7 text
しかし得てして 難しめ
Slide 8
Slide 8 text
「先」だけでなく 「手前」についても
Slide 9
Slide 9 text
勢いと割り切りで
Slide 10
Slide 10 text
手前側 10 メートルを キーワード 10 個で 雰囲気解説
Slide 11
Slide 11 text
仕様を自動的に検証 https://speakerdeck.com/riru/symbolic-model-checker-from-scratch-in-rust?slide=3
Slide 12
Slide 12 text
【残り 10 m】 単体テスト
Slide 13
Slide 13 text
0 を入れると 42 が返る getAnswerOfEverything(0) == 42
Slide 14
Slide 14 text
人間は 「入力と出力の対応」 を記述
Slide 15
Slide 15 text
バグをピンポイントに 引き当てる必要性
Slide 16
Slide 16 text
【残り 9 m】 プロパティベーステスト
Slide 17
Slide 17 text
テストケースは ランダム生成
Slide 18
Slide 18 text
人間は 「関数の性質」 を記述
Slide 19
Slide 19 text
エンコードしてから デコードすると元に戻る decode(encode(x)) == x
Slide 20
Slide 20 text
最適化の前後で 結果が変わらない naiveImpl(x) == optimizedImpl(x)
Slide 21
Slide 21 text
これで確実に テスト可能?
Slide 22
Slide 22 text
近頃はそうでもない
Slide 23
Slide 23 text
【残り 8 m】 非決定性
Slide 24
Slide 24 text
マルチスレッドの タイミング系バグ
Slide 25
Slide 25 text
分散システムの サーバ故障
Slide 26
Slide 26 text
ネットワーク 通信の遅延
Slide 27
Slide 27 text
コントロール不能
Slide 28
Slide 28 text
再現性のあるテスト が書けない
Slide 29
Slide 29 text
ならば何を テストする?
Slide 30
Slide 30 text
【残り 7 m】 グラフ構造
Slide 31
Slide 31 text
二つのスレッド A と B A: 0, B: 0
Slide 32
Slide 32 text
A が 1 step 動いた世界線 A: 0, B: 0 A: 1, B: 0
Slide 33
Slide 33 text
B が 1 step 動いた世界線 A: 0, B: 0 A: 0, B: 1
Slide 34
Slide 34 text
全パターン網羅すると グラフ構造が現れる A: 0, B: 0 A: 1, B: 0 A: 0, B: 1 A: 2, B: 0 A: 1, B: 1 A: 0, B: 2 A: 3, B: 0 A: 2, B: 1 A: 1, B: 2 A: 0, B: 3
Slide 35
Slide 35 text
【残り 6 m】 時相論理
Slide 36
Slide 36 text
グラフを見ると 「時間経過」 が表現できる
Slide 37
Slide 37 text
どう辿っても 「ずっと」成立
Slide 38
Slide 38 text
どう辿っても 「いずれ必ず」成立
Slide 39
Slide 39 text
【残り 5 m】 安全性と活性
Slide 40
Slide 40 text
悪いことが 「ずっと起こらない」 安全性
Slide 41
Slide 41 text
良いことが 「いずれ起こる」 活性
Slide 42
Slide 42 text
両方合わせて仕様
Slide 43
Slide 43 text
なぜ両方?
Slide 44
Slide 44 text
何もしないシステムは 安全だが無意味
Slide 45
Slide 45 text
グラフに対する テストフレームワーク が欲しい
Slide 46
Slide 46 text
【残り 4 m】 モデル検査
Slide 47
Slide 47 text
仕様を グラフの性質 として表現
Slide 48
Slide 48 text
グラフアルゴリズムで 自動的に検査可能
Slide 49
Slide 49 text
アルゴリズムの詳細は r1ru さんのスライド参照 https://speakerdeck.com/riru/symbolic-model-checker-from-scratch-in-rust
Slide 50
Slide 50 text
【残り 3 m】 形式手法
Slide 51
Slide 51 text
数学チックな 検査手法の総称(雑)
Slide 52
Slide 52 text
モデル検査以外にも 定理証明など
Slide 53
Slide 53 text
そうそう
Slide 54
Slide 54 text
「型」も形式手法です
Slide 55
Slide 55 text
【残り 2 m】 モデル検査ツール
Slide 56
Slide 56 text
TLA+ https://lamport.azurewebsites.net/tla/tla.html
Slide 57
Slide 57 text
Alloy https://alloytools.org/
Slide 58
Slide 58 text
SPIN https://spinroot.com/spin/whatispin.html
Slide 59
Slide 59 text
【残り 1 m】 採用事例
Slide 60
Slide 60 text
TLA+ 大人気
Slide 61
Slide 61 text
AWS で使ってる https://www.amazon.science/publications/how-amazon-web-services-uses-formal-methods
Slide 62
Slide 62 text
MS Azure でも使ってる https://github.com/Azure/azure-cosmos-tla
Slide 63
Slide 63 text
難しそう?
Slide 64
Slide 64 text
たかが 10 メートル
Slide 65
Slide 65 text
冬休みの自由研究に
Slide 66
Slide 66 text
自分へのクリスマス プレゼントに
Slide 67
Slide 67 text
お歳暮に
Slide 68
Slide 68 text
モデル検査
Slide 69
Slide 69 text
形式手法
Slide 70
Slide 70 text
おすすめです
Slide 71
Slide 71 text
【残り 0 m】 Presented by チェシャ猫 (@y_taka_23)