問題タブ [code-contracts]
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# - Microsoft Code Contracts と CI ビルド サーバー
私たちは .NET 4 に移行しており、新しい Design By Contract 機能の実装に非常に関心があります。
私たちが知っているように、Code ContractエンジンにはCode Contract アドイン
と VS Ultimate または Premium (静的チェック用) のインストールが必要です。
ここに私の質問があります:
- CI ビルド サーバー (TeamCity) に VS をインストールせずに、コード コントラクトの書き換えを使用できますか?
- コントラクト チェックを実行する msbuild タスクはありますか?
- CI ビルドで Code Contract の検証を使用しますか?
.net - Sandcastleはコードコントラクトをサポートしていますか?
私のライブラリはコードコントラクトを使用しています。
サンドキャッスルによって生成されたドキュメントにこれらの契約を組み込む方法はありますか?
c# - デフォルト(タイプ)を使用すると、契約の形式が正しくないのはなぜですか?
コード コントラクトを使用するコードをコンパイルすると、理解できない非常に奇妙なエラーが発生します。
次のエラーで失敗します。
不正な契約。メソッド '<ProjectName>.ObjectInvariant' での代入後に不変が見つかりました。
コードが次のように変更された場合:
それはうまくコンパイルされます。
私の何が問題なのdefault(Guid)
ですか?
validation - Microsoft Code Contracts はユーザー入力の検証には適していませんか?
Enterprise Library Validation Application Block はユーザー入力の検証を目的としていますが、Code Contracts はプログラマーのエラーを防ぐためのものであると、SO の別の場所で書かれているのを見たことがあります。この意見を支持しますか?なんで?
c#-4.0 - コントラクトクラスは抽象クラスである必要があります
次のコードは私に警告を与えますContract class 'FooContracts' should be an abstract class
。私がオンラインで読んだすべての例(たとえば、http: //www.infoq.com/articles/code-contracts-csharp)から、これは機能するはずです(おそらくコンパイラの警告なしで)。
私はVisualStudio2010を使用しておりCode Contracts
、プロジェクトのプロパティのセクションに次の設定があります。
- ランタイムコントラクトチェックを実行します(に設定
Full
) - 静的コントラクトチェックを実行します(の下
Static Checking
) - バックグラウンドでチェックイン
CONTRACTS_FULL
また、 ReSharperをシャットダウンするためのコンパイルシンボルを定義しました。
警告なしにこのコンパイルを行うための何かが欠けていますか?
code-contracts - コード契約。生成されたコードの警告をどのように抑制しますか?
Linq2Sql コードの静的チェックをオフにするにはどうすればよいですか?
oop - エッフェル:前提条件を緩め、事後条件を厳しくしますか?
エッフェルでは「前提条件を緩め、事後条件を厳しくする」と言われていますが、どういう意味かわかりません。これは、サブクラス化によってどのようにメリットがありますか?
ありがとうございました
c# - C# コード コントラクトで純粋な関数を使用する場合の静的検証の制限は?
コード コントラクトを使用した配列ベースのスタックの次の部分的な実装を静的に検証しようとしています。メソッドPop()
は純粋な関数IsNotEmpty()
を使用して、後続の配列アクセスが下限以上になるようにします。静的ベリファイアは失敗し、前提条件を追加するよう提案しますContract.Requires(0 <= this.top)
。
検証者が、与えられたコントラクトの下限に関して配列アクセスが有効であることを証明できない理由を誰でも説明できますIsNotEmpty()
か?
最初はContract.Requires(IsNotEmpty())
、サブクラスが をオーバーライドする可能性があるため、このアプローチは正しくないのではないかと考えましたIsNotEmpty()
。ただし、クラスを としてマークすると、ベリファイアは配列アクセスが有効であることを証明できませんsealed
。
更新:IsNotEmpty()
読み取り専用のプロパティに変更すると、検証は期待どおりに成功します。これは疑問を投げかけます:読み取り専用プロパティと純粋な関数はどのように/なぜ異なる方法で扱われるのでしょうか?
metrics - Design-By-Contract のメトリクスを使用した経験があるか、またはコード ベースでの Design-By-Contract の使用状況を測定するためのメトリクスを推奨できますか?
現在、さまざまなコンポーネントを開発している約 60 人の開発者からなるソフトウェア開発グループに Design-by-Contract を導入しています。まず、C# と Java の Design-By-Contract ポリシーを定義しました。進行状況を測定するために、キーワード (コメントと文字列リテラルを除く) を単純に検索して、クラスの数とコントラクト アサーション (前提条件、事後条件、および不変条件) の数を数えています。したがって、次の 2 つの統計があります。
- コンポーネントごとのコントラクト アサーションの数
- コンポーネントごとのクラスごとのコントラクト アサーションの平均数
Design-By-Contract のメトリクスを使用した経験があるか、またはコード ベースでの Design-By-Contract の使用状況を測定するためのメトリクスを推奨できますか?
c# - Resharper とコード コントラクトがうまく連携しない
私は Resharper 5.x を使用してコンパイル時の分析を行っていますが、通常は非常に優れていますが、ロジックにコード コントラクトを適用していないようです。次のようなものがありますが、マークされた行で問題が発生しています。
[1] は、「可能性のある 'System.InvalidOperationException'」で強調表示されます。チェックをオフにせずにこのエラーを取り除く方法はありますか?