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)