問題タブ [design-by-contract]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 契約による設計: プロトコルを備えたインターフェイスを使用できますか?
私は Design by Contract の概念にかなり慣れていませんが、今のところ、潜在的なバグを簡単に見つけられる点が気に入っています。
ただし、Microsoft.Contracts ライブラリ (これは非常に優れています) を使用して作業しており、障害に遭遇しました。
私がやろうとしていることのこの単純化された例を見てください:
要約すると、プラグインが従うインターフェイスを宣言し、状態を宣言するように要求し、任意の状態で呼び出すことができるものを制限しています。
これは、静的検証とランタイム検証の両方で、呼び出しサイトで機能します。Reset
しかし、私が得続ける警告は、関数と関数の両方に対して「契約:証明されていないことを保証します」ですPrepare
。
私は s を試してみましたが、制約Invariant
を証明するのに役立つとは思われません。Ensures
インターフェイスを介して証明する方法についてのヘルプは役に立ちます。
EDIT1:
これを MyAwesomePlugin クラスに追加すると:
IPlugin としての状態が私のプライベート状態と同じであることをほのめかそうとすると、同じ警告が表示され、さらに「private int? number = null」行が不変条件を証明できないという警告が表示されます。
それが静的コンストラクターの最初の実行可能行であることを考えると、なぜそう言うのかがわかりますが、それが ? を証明しないのはなぜEnsures
ですか?
EDIT2
でマークState
する[ContractPublicPropertyName("State")]
と、「'MyNamespace.State' 型の 'State' という名前のパブリック フィールド/プロパティが見つかりません」というエラーが表示されます。
これは私をより近づけるはずですが、私はまだそこにいません。
.net - Team System なしで Microsoft.Contracts の静的チェッカーを使用できますか?
静的チェッカーを使用して Microsoft.Contacts をインストールできるという Visual Studio Team System の要件とは別に、チーム システムなしで静的チェッカーを実行することは可能ですか? それとも、スタジオのチーム システム コンポーネントによって公開されている API に依存していますか?
また、スタティックチェッカーをチームシステムのコンピュータからプロのコンピュータにコピーすることはライセンス内ですか?
design-by-contract - 契約による設計を行う場合、メンバー関数の不変条件に加えて、前提条件と事後条件が必要ですか?
DbCメソッドでは、関数に事前条件と事後条件がついていることがわかりました。
私が疑問に思っているのは、それがメンバー関数にも当てはまるかどうかです。
たとえば、各パブリック関数の最初と最後で不変条件を使用すると仮定すると、メンバー関数は次のようになります。
編集:(私の例をクリーンアップ)
グローバル/ジェネリック関数のみで事前条件と事後条件を使用し、クラス内で不変条件を使用しても問題ありませんか?
これはやり過ぎのように思えますが、私の例が悪いのかもしれません。
編集:
事後条件は、不変条件のサブセットをチェックしているだけではありませんか?
上記では、 http://www.digitalmars.com/ctg/contract.htmlの指示に従っています。「クラス コンストラクターが完了すると、クラス デストラクタの開始時、public の前に不変式がチェックされます。メンバーが実行され、パブリック関数が終了した後。」
ありがとう。
c# - この契約を証明するには何が必要ですか?
トーナメントでラウンドを実行するアプリケーションがあり、この単純化されたコード構造に関する契約警告が表示されます。
警告は次のとおりです。
私は何が間違っているのですか?どうすればこれを証明できIList<T>
ますか?これは静的アナライザのバグですか?バグレポートをMicrosoftに送信するにはどうすればよいですか?
design-by-contract - 契約による設計を使用する最も広く使用されているオープンソースプロジェクトは何ですか?
エッフェルコミュニティの外で実際に契約による設計がどれだけ使用されているのか知りたいです。契約による設計を使用するアクティブなオープンソースプロジェクトはありますか?
または、質問を1つにまとめると、単一の答えがあります。契約による設計を使用する、最も広く使用されている(Eiffel以外の)オープンソースプロジェクトは何ですか?
design-by-contract - Visual Studio 2010 で Microsoft Contracts の静的チェックを設定するにはどうすればよいですか?
最近 Visual Studio 2010b2 をダウンロードしましたが、Microsoft 契約の静的チェッカーに関するいくつかの質問を再評価したいと思いました。
コードの名前空間を使用してほとんどのコードを再利用System.Diagnostics.Contracts
できましたが、静的チェッカーを有効にする方法がわかりません。追加のプラグインが必要ですか?
VS2010 では、契約による設計は「そのまま機能する」はずだという印象を受けました。
ご協力いただきありがとうございます。
c# - Microsoft.Contracts 名前空間
asp.netのMicrosoft.Contracts名前空間が必要なのは何ですか?
つまり、どのような場合に書くことができますusing Microsoft.Contracts;
か?
java - メソッド入力パラメーターに検証制約を設定するにはどうすればよいですか?
この目標を達成するための一般的な方法は次のとおりです。
この解決策は醜いと思います。メソッドは、有効な入力パラメータコントラクトをチェックするボイラープレートコードですぐにいっぱいになり、メソッドの核心を覆い隠します。
これが私が欲しいものです:
それらのアノテーションがJSR303/ Bean Validation Specのように見える場合、それは私がそれらを借りたためです。残念ながら、これらはこのようには機能しないようです。これらは、インスタンス変数に注釈を付けてから、バリデーターを介してオブジェクトを実行することを目的としています。
多くのJavaの契約による設計フレームワークのうち、私の「欲しい」例に最も近い機能を提供するのはどれですか?スローされる例外は、カプセル化が壊れないように、実行時例外(IllegalArgumentExceptionsなど)である必要があります。
functional-programming - Clojureで契約ごとの設計を具体的に、または関数型言語で一般的にどのように実装できますか?
私が最もよく知っているのはLispバリアント(ClojureまたはSchemeのボーナスポイント)の例であることが望ましいですが、機能言語でのDBCに関するフィードバックは、もちろん、より大きなコミュニティにとって価値があります。
明らかな方法は次のとおりです。
この実装について私が気に入らないのは、コントラクトロジックがコア機能を覆い隠していることです。関数の真の目的は、条件付きチェックで失われます。これは、この質問で提起したのと同じ問題です。Javaのような命令型言語では、ドキュメントに埋め込まれたアノテーションまたはメタデータ/属性を使用して、メソッドの実装からコントラクトを移動できます。
Clojureのメタデータにコントラクトを追加することを検討した人はいますか?高階関数はどのように使用されますか?他にどのようなオプションがありますか?
java - 契約およびクラス不変による設計
dbc(http://en.wikipedia.org/wiki/Design_by_contract)について読んでいます。継承に関連してクラス不変条件を使用する簡単な例を教えてください。