開発から本番まで、コード コントラクトとテストを実際にどのように使用するのが最適かについて、簡潔な推奨事項を得たいと考えています。どちらも異なるパラダイムであり、異なることをテストしていることを理解しています。
メソッド レベルでは、コントラクトは、パラメータが STRING 型である必要があり、渡すために最小長が 3 文字である必要があることを指定できます。単体テストでは、これに一致する任意の文字列について、出力ハッシュが正しいことを確認できます (それが関数の役割であると仮定します)。
コントラクトが失敗することを確認するためのテストが存在する必要がありますか? テストが価値あるものであるためには、反復可能でなければならないため、ファジングを支援するのに適していないことを理解しています. 逆に言えば、DbC はそれを可能にします。
最初は、テストでコントラクトを簡単に確認できると思っていましたが、これによりコントラクトがメソッドの定義の外に移動し、DbC が密結合を強制しようとしていると思いますか?
同様に、契約は開発中にのみ積極的に適用されますか? 実稼働コードでは、ビルドに単体テストの兆候はありませんが、DbC はどうでしょうか? 契約は「無視」されていますか、それともアサーションが実際に露骨に失敗することを許されていますか?
役割が検証であるメソッドに DbC が存在しないというのは本当ですか? たとえば、フロントエンドからの無効な入力が予想されます。DbCは、入力が「クリーン」であると想定される領域内で厳密に定義されていると想定しています。