21

私があなたに尋ねたい質問は非常に広いですが、同時に非常に具体的です。まず、.net 環境に適用できる回答に主に関心があると言わざるを得ません。

うーん、自分が作るコードのレベルを上げたい。今では主に TDD と静的コード分析を使用して、コードが正しいことを確認しています。最近、コード コントラクトに関する Dino Esposito のスピーチを聞いたので、他の手法と組み合わせて使用​​したいと考えています。Dino を聴きながら、Debug.Assert()とも思い出しましたTrace.Assert()

具体的には、いくつかの質問をします。

  • コントラクトと単体テストを相互に補完するには、どのように記述すればよいですか?
  • すべてのメソッドでコード コントラクトを使用する必要がありますか?それともパブリック メソッドでのみ使用する必要がありますか?
  • の使用を防止する必要がありDebug.Assert()ますか? それらを使用してもよいのはいつですか?(たとえば、.net の不変条件はパブリック メソッド/プロパティの終了時にのみチェックされることに注意してください。したがって、単純な方法でメソッドの途中でいくつかのチェックを行っても問題ありAssert()ませんか?)
  • 百聞は一見に如かずというわけで、これらすべての手法が適切に使用されているオープン ソース プロジェクトをお勧めしていただけませんか?
4

2 に答える 2

4

プレビュー ブログのように、また長い PDF ドキュメントを読むことで、コントラクトを完全に受け入れることができます。

契約は公務のためだけのものではありません。重要なのは、コンパイラがコードについて推論する方法を提供することです。したがって、必要に応じてすべての関数で使用してください。それがあなたに最大の利益をもたらします。パブリック関数でのみ使用することは、トップレベルの関数のみをテストしていると言っているようなものです。それは間違っています。

関数のテスト ケースは、Contract pre/post および invariant 呼び出しが処理を行った後、関数でまだテストが必要なロジックを一掃します。

コードに適した 3 つの使用シナリオと、その問題について明確にします。理想的には、それらを本番コードで実行してから、パフォーマンス テストに基づいてスケール バックできます。

生成されたドキュメントに契約が含まれていることを確認してください。これは素晴らしい利点です。

DevExpress CodeRush と Refactor も気に入っています。プロツール。数回クリックして入力パラメーターを必須コントラクトに変換するなど、コントラクト用の特定のリファクタリングがあります。さらに、一般的にコードの品質を向上させるいくつかの優れたコード分析があります。

ここでコントラクトを使用したコードを確認できます: https://searchcode.com/codesearch/view/14318515/

エンチラーダのベストプラクティス全体は、すべて 1 つのプロジェクトにまとめられています。ええと、私はあなたのマイクロソフトを見ています。ちょっと。

Henk は残りの質問にうまく対応してくれました。

于 2011-09-05T08:56:42.443 に答える
4

コントラクトの(かなり良い)マニュアルを勉強することから始めるべきです。

  • 単体テストの統合に関する章とサンプル コードがあります。Pex リンクをたどると、さらに多くの情報が得られます。
  • 常にすべてのパブリック メンバーでコントラクトを使用します。非公開メンバーの場合: 時々。
  • Debug.Assert() を使用することもできますが、Contracts.Assert() の方がより論理的な選択です。
  • サンプルプロジェクト... 何も知りません。ただし、BCL 用に定義されたコントラクトを見てください。
于 2011-09-04T21:12:41.030 に答える