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
#wejs #wejs Elm では、プログラムが あなたをテストする! チェシャ猫 (@y_taka_23) We Are JavaScripters! @23rd (2018/08/21)
Slide 2
Slide 2 text
#wejs #wejs テスト書いてる人?
Slide 3
Slide 3 text
#wejs #wejs テスト「ケース」書いてる人?
Slide 4
Slide 4 text
#wejs #wejs elm-test https://github.com/elm-community/elm-test
Slide 5
Slide 5 text
#wejs #wejs
Slide 6
Slide 6 text
#wejs #wejs elm-test による Fuzzing ● fuzz 関数でランダムデータを生成 ○ いちいちテストケースを書かずに済む ○ データ型を変更しても書き直しにならない ● Property-based Testing ○ 引数 - 結果ではなく、関数が満たす性質を記述 ○ 例:encode して decode すると元に戻る
Slide 7
Slide 7 text
#wejs #wejs
Slide 8
Slide 8 text
#wejs #wejs String だけでは実用性に欠ける?
Slide 9
Slide 9 text
#wejs #wejs Fuzzer のカスタマイズ ● 自作データ型のランダム生成 ○ 基本的な Fuzzer を組み立てて作る ○ 入れ子になったデータ型も扱える ● 複雑な条件に従う Fuzzer も作成可能 ○ Fuzzer 用の部品(コンビネータ)を提供 ○ 例:oneOf, constant, intRange
Slide 10
Slide 10 text
#wejs #wejs
Slide 11
Slide 11 text
#wejs #wejs
Slide 12
Slide 12 text
#wejs #wejs ランダムだと無駄が多いのでは?
Slide 13
Slide 13 text
#wejs #wejs Fuzzer の構成要素 ● Generator ○ frequency 関数で生成の内訳を操作できる ○ コーナーケースになりやすい値を多めに生成 ● Shrinker ○ もっと小さい反例を探すための戦略を定義 ○ Fail が検出されると再帰的に呼び出される
Slide 14
Slide 14 text
#wejs #wejs
Slide 15
Slide 15 text
#wejs #wejs まとめ ● elm-test の Fuzz モジュール ○ テストケースを書かなくとも自動で生成 ● コンビネータとしての Fuzzer ○ ランダムデータの「組み立て」が可能 ● 反例を効率的に探すための仕組み ○ Generator と Shrinker でコーナーケースを生成
Slide 16
Slide 16 text
#wejs #wejs Have a Nice Fuzzer! Presented by チェシャ猫 (@y_taka_23)