-2

開発から本番まで、コード コントラクトとテストを実際にどのように使用するのが最適かについて、簡潔な推奨事項を得たいと考えています。どちらも異なるパラダイムであり、異なることをテストしていることを理解しています。

メソッド レベルでは、コントラクトは、パラメータが STRING 型である必要があり、渡すために最小長が 3 文字である必要があることを指定できます。単体テストでは、これに一致する任意の文字列について、出力ハッシュが正しいことを確認できます (それが関数の役割であると仮定します)。

コントラクトが失敗することを確認するためのテストが存在する必要がありますか? テストが価値あるものであるためには、反復可能でなければならないため、ファジングを支援するのに適していないことを理解しています. 逆に言えば、DbC はそれを可能にします。

最初は、テストでコントラクトを簡単に確認できると思っていましたが、これによりコントラクトがメソッドの定義の外に移動し、DbC が密結合を強制しようとしていると思いますか?

同様に、契約は開発中にのみ積極的に適用されますか? 実稼働コードでは、ビルドに単体テストの兆候はありませんが、DbC はどうでしょうか? 契約は「無視」されていますか、それともアサーションが実際に露骨に失敗することを許されていますか?

役割が検証であるメソッドに DbC が存在しないというのは本当ですか? たとえば、フロントエンドからの無効な入力が予想されます。DbCは、入力が「クリーン」であると想定される領域内で厳密に定義されていると想定しています。

4

1 に答える 1

1

あなたが推論している線に沿って、さまざまなことにDBCと単体テストを使用します。

単体テストを使用してコントラクトを検証するのではなく、代わりに (あいまいな) ユーザーの動作をシミュレートする「ボット」を作成し、それを使用してアプリでエラー状態をトリガーしようとします。コントラクトは、特にアプリへの入力の順列の数が非常に多い場合に非常に役立ちます。その場合、単体テストだけでは信頼を得ることが非常に難しいためです。

コントラクトを有効にしてコードを本番環境で実行していません。

于 2014-04-15T21:13:54.937 に答える