property-based-testing について
生成入力を使って、振る舞いの性質に対する反例を探すテストスキルです。適用の判断、性質とオラクルの定義、生成テストと例示テストの併用を支援します。
主な機能
- 01性質と入力範囲の明確化
- 02反例の種類の特定
- 03観測可能なオラクルの選択
- 04ドメインに基づく入力生成
- 05例示テストの網羅性維持
活用シーン
- 01往復変換の不変条件の確認
- 02権限や状態に関する法則のテスト
- 03幅広い入力での不具合発見
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ liaoann/ skills --skill property-based-testingインストール後、Claude Code で/property-based-testingを入力して読み込まれたか確認します。
同梱ファイルexamples.mdoracles.md
詳細
プロパティベーステスト
生成した入力を使って、多数の入力にわたって成り立つべき動作に対する未知の反例を探します。
例ベーステストは既知のシナリオを確認します。プロパティベーステストは、明示したプロパティに対する未知の失敗を探します。
ガード条件
プロパティベーステストを推奨または作成する前に、次の内容を明示してください。
- 成り立つべきプロパティ。
- 生成する入力またはアクションの範囲。
- このテストで明らかになる可能性がある未知の反例の種類。
- オラクル:動作が誤っているとテストがどのように判断するか。
いずれかが欠けている場合は、例ベーステストを使用してください。
コードが権限、状態機械、パーサー、シリアライザー、マイグレーション、またはその他の広範な入力を扱う領域に関わるというだけで、このスキルを呼び出さないでください。こうした領域が適しているのは、具体的なプロパティを明示できる場合に限られます。
WRONG: This touches permissions, so use property-based testing.
RIGHT: For all resources and actions, a narrower role must not allow more than a broader role.
プロパティを設計する
プロパティでは、外部から観測可能な動作、またはドメイン不変条件を記述する必要があります。
適切なプロパティの形式:往復性、冪等性、可換性、保存性、単調性、部分集合または権限に関する法則、オラクルとの比較、状態不変条件、モデルとの比較。
不適切なプロパティは、実装をそのままなぞるもの、プライベートな呼び出しを検証するもの、またはコードの制御フローを言い換えるだけのものです。
オラクルの種類、ジェネレーターのガイダンス、反例の扱いについては、oracles.md を参照してください。適切なプロパティの例と不適切なプロパティの例については、examples.md を参照してください。
公開動作を通じて実装する
プロパティベーステストでは、例ベーステストと同じ公開インターフェースを使用してください。テスト名またはアサーションメッセージにプロパティ名を含めてください。無作為なデータの塊ではなく、ドメインの概念に基づいてジェネレーターを作成してください。選択したオラクルを使ってアサートしてください。フレームワークで必要な場合は、決定的に再実行できるよう設定してください。
プライベートな呼び出し、内部の分岐、または偶発的な実装構造をアサートしないでください。
例ベーステストと組み合わせる
プロパティベーステストは例ベーステストの代わりにはなりません。
典型的なビジネスケース、境界値の例、実際のバグに基づく回帰ケース、エラーメッセージ、ユーザー向け出力には例ベーステストを使用してください。手動で選んだ例では範囲が狭すぎる、広範な動作上の法則にはプロパティベーステストを使用してください。
完了条件
テスト設計で、プロパティ、生成する入力またはアクションの範囲、未知の反例の種類、オラクルを明示し、ジェネレーターが意味のある有効な入力または意図的に無効な入力を生成し、失敗時に決定的なシードまたは保存された反例によって再現できる実用的な反例が提示され、例ベーステストでも典型的なケース、回帰ケース、正確なメッセージ、ユーザー向けの詳細が引き続き網羅されている場合に限り、このスキルは完了です。