プロパティベーステスト(Property-Based Testing)
概要
プロパティベーステスト(Property-Based Testing, PBT)は、個別の入出力例ではなく、コードが満たすべき 性質(プロパティ) を宣言し、フレームワークが 大量のランダム入力を自動生成 して反例を探すテスト手法です。QuickCheck(Haskell)に端を発し、多くの言語に実装があります。テスト駆動開発 の例ベーステストを補完します。
例ベーステストとの違い
| 例ベース | プロパティベース | |
|---|---|---|
| 入力 | 手書きの具体例 | 自動生成された多数の入力 |
| 主張 | 特定の出力に等しい | 常に成り立つ性質 |
| 強み | 直感的 | 想定外のエッジケースを発見 |
プロパティの例
- 可逆性:
decode(encode(x)) == x - 冪等性:
f(f(x)) == f(x) - 不変条件:ソート後も要素数・集合は不変
反例の縮小(Shrinking)
失敗を見つけると、フレームワークが入力を 最小の反例 まで縮小してくれるため、デバッグが容易になります。
関連
- Web UI のプロパティテストや、決定論的シミュレーションによるテスト(Antithesis など)も登場
- テスト駆動開発 と組み合わせ、品質を多面的に担保
関連ページ
参考資料(Daily フィード)
- (HN)“Bombadil: Property-based testing for web UIs by Antithesis”