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
Property-Based Testing in Rust @matsu7874 2020/06/30 Shinjuku.rs
Slide 2
Slide 2 text
自己紹介 matsu7874 ● フォルシア株式会社 ○ Webエンジニア ○ インメモリデータベース開発(Rust)
Slide 3
Slide 3 text
目次 ● 課題 ● Property-Based Testingとは ● サンプルプログラム ● QuickCheck ● Proptest ● まとめ
Slide 4
Slide 4 text
課題 ● テストコードのメンテナンスが高コスト ● テスト用のオブジェクト作成が面倒
Slide 5
Slide 5 text
Property-Based Testingとは ● 満たすべき性質に注目して検証するテスト手法 ○ 例 ■ vec == reverse(reverse(vec)) ■ add(a, b) == add(b, a) ● 多くの入力を自動生成し、それぞれの入力で仕様が 満たされていることを確認する。 ● 入力と期待する出力の組を与えるのは、 Example-Based Testing。
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
検索クエリを表す構造体 サンプルプログラム
Slide 11
Slide 11 text
荷物を適合判定するメソッド サンプルプログラム
Slide 12
Slide 12 text
荷物の集合から検索する関数 サンプルプログラム
Slide 13
Slide 13 text
QuickCheck
Slide 14
Slide 14 text
QuickCheckは古参 QuickCheck
Slide 15
Slide 15 text
QuickCheckは型から自動生成 ● HaskellのQuickCheckのRust移植版 ● 型情報から入力値を生成する ○ Arbitrary Trait ■ 標準的な型には実装済み ● usize, Vec
, Stringなど ■ 独自定義の型にはTraitの実装が必要 QuickCheck
Slide 16
Slide 16 text
自動生成するための Arbitrary Trait QuickCheck
Slide 17
Slide 17 text
QuickCheckを使ったテスト QuickCheck
Slide 18
Slide 18 text
Proptest
Slide 19
Slide 19 text
Proptestは後発 Proptest
Slide 20
Slide 20 text
Proptestは値の範囲指定ができる ● Hypothesis inspired ● 型に加えて値の範囲が指定できる ● 入力に依存関係があるケースも定義できる Proptest
Slide 21
Slide 21 text
Proptestを使ったテスト Proptest
Slide 22
Slide 22 text
Proptestは QuickCheckの上位互換ではない Proptest
Slide 23
Slide 23 text
まとめ ● Property-Based Testing ○ 性質に注目するテスト手法 ○ 大量の入力を自動生成して検証する ● QuickCheck ○ 型から入力を自動生成 ○ 一般的なアルゴリズムの検証に使いやすい ● Proptest ○ QuickCheckより高機能 ■ 入力の依存関係が定義できる ○ ドメイン固有のロジックに使いやすい