🕌

Property Based Testについてざっくり調べてみた

2023/11/16に公開

知るきっかけとなった記事はこちら
https://zenn.dev/msksgm/articles/20221007-kotlin-prop

Oracle さんがめっちゃ分かりやすい記事をだしていたので、
この記事では本当にざっくりとした情報に留めます
https://blogs.oracle.com/otnjp/post/know-for-sure-with-property-based-testing-ja

ざっくり

  • 関数の入力値に着目
  • ランダムにデータを生成して行うテスト
  • データ生成にあたり、入力値(プロパティ)の性質を定義する
  • エッジケースや境界条件もカバーしやすい

設計・実装してこれでいけるでしょ、、、からのテストやってみたら全然カバーできてない
というのはあるあるだと思うんですが、精度を上げつつ保守もしやすくなるというわけですね

どうやってやるの

言語ごとにライブラリがあるのでそれを使いましょう

Java, Kotlin: jpwik
Haskell: QuickCheck
Scala: scalaprops、ScalaCheck
JavaScript, TypeScript: fast-check
Python: hypothesis
Go: gopter

考慮しておいたほうがいいこと

ランダムなデータ生成はされる一方で再現性も担保しておきたい
なので、ランダムシードを管理しておくなどの工夫が必要そう

あとはビジネスルールとか特定のドメイン知識的なものについては
どうやって表現するかとか、そこらへんの工夫も必要そう
(テスト設計に熟練してるわけじゃないので、ほんと気がする程度の解像度ですが、、)

Discussion