【ぷろぱてぃべーすてすと】
プロパティベーステスト とは?
最終更新:
💡 「こうなるはず」という性質から、反例を探す
コードが満たすべき性質を決め、生成したさまざまな入力で確かめるテスト手法です。失敗する入力を探し、小さくして原因を調べやすくする機能もあります。
📌 このページのポイント
- 具体的な入出力の例に加え、入力と結果の関係を性質として確かめる
- 入力の範囲や形を決め、さまざまなデータを自動生成する
- 失敗した入力は縮小し、再現しやすい反例を探す
- 全入力の証明ではなく、例ベースのテストと組み合わせて使う
普通のテストと何が違うの?
例ベースなら「[3,1,2]をソートすると[1,2,3]」と確かめるよね。プロパティベースでは「結果が昇順」「元と同じ要素が同じ個数ある」という性質を決めて、生成したいろいろな配列で確かめるんだ。
データは、ただでたらめに作るの?
失敗した入力が長かったら、調べにくそう。
シュリンクという縮小機能が、失敗する条件を残しながら入力を小さくしようとするよ。たとえば長い配列から[0,-1]まで減ることがある。ただし、あらゆる反例の中で最小のものが必ず得られるという意味ではないんだ。
どんな性質を書けばいいの?
保存して読み直すと元に戻る、同じ処理を2回しても結果が変わらない、単純な参照実装と一致する、などだよ。ソートなら「昇順」だけでは、いつも空配列を返すバグを見逃す。何を守るべきかを考えるのが大切だね。
JavaScriptでも使える?例のテストは残す?
まとめ:ざっくりこれだけ覚えればOK!
「プロパティベーステスト」って出てきたら「性質を決めて、生成した入力で反例を探すテスト」と思えばだいたいOK!
📖 おまけ:英語の意味
「Property-Based Testing」 = 性質に基づくテスト
💬 propertyは、ここではコードが満たすべき性質のこと。入出力の関係などをテストにするんだ。