静的アナライザーが証明できないことがわかっている特定の契約があります。特定の種類の契約違反エラーを関数全体から除外できますが、これは広すぎます。 baseline.xml機能を使用して特定の違反エラーを除外することはできますが、チーム環境での監査や文書化は本質的に不可能です。要するに一部の契約を静的分析から簡単に除外できますか?
、それは静的アナライザの行き止まりのように見えるサードパーティライブラリで作られた特定の契約もあります
Contract.Requires(DoesHalt() == true, ExcludeFromStaticAnalysis=true);
ような何かを行うことが可能です。私は静的解析のためにそれらを無効にしたいと思います。 1つの好きな例は、.NETグラフライブラリに構築された契約です。グラフ内のどの頂点で検索を開始するかを指定する深さ第1探索関数への引数は、その頂点がグラフのメンバーであることを要求するContract.Requires
を有する。賢明な契約、おそらくデバッグビルドで実行する価値はありますが、静的に証明されるのは遠いです。しかし、私が深さの最初の検索を使用するたびに、静的な違反を無視する方法を見つけなければなりません。 (Contract.Assume
で解決できません)
不確かなものから証明可能なものを分割する機能がなければ、小さなクリーンなコードベースであっても静的解析が単純すぎるほど騒々しくなることがわかります。
「Contract.Requires(DoesHalt()= trueまたはAssumeTrueBecauseYouCantProveThis)」と書かないのはなぜですか? [ここでAssumeTrueBecauseYouCantProvethisは静的なconst値 "true"です。良質の「証明者」は、異端の部分がほんとうに真実であることを喜ばなければならず、その時点で契約の確認作業をやめてください。 –
ランタイムチェッカーは実際にチェックを行う必要があるためです。チェックは常に '||本当です。 –