Есть определенные контракты, которые я знаю, что статический анализатор не может доказать.Я могу исключить определенные виды ошибок, связанных с нарушением контракта, из всей функции, но это слишком широкое обозначение.Я могу исключить некоторые ошибки нарушения с помощью функциональности baseline.xml, хотя это практически невозможно для аудита или документирования в командной среде.
Короче говоря, возможно ли сделать что-то вроде
Contract.Requires(DoesHalt() == true, ExcludeFromStaticAnalysis=true);
Существуют также определенные контракты, заключенные в сторонних библиотеках, которые кажутся тупиковыми для статического анализатора.Я хотел бы отключить их для статического анализа.Один из любимых примеров - контракт, созданный для библиотеки графов .NET.Аргумент функции поиска в глубину, определяющий, с какой вершины графа начинать поиск, имеет Contract.Requires
, который требует, чтобы эта вершина была членом графа.Разумный контракт, возможно, даже стоит выполнить в отладочной сборке, но он далек от статической доказуемости.Тем не менее, каждый раз, когда я использую поиск по глубине, я должен найти способ игнорировать статическое нарушение.(Это не решаемо и с Contract.Assume
)
Без возможности отделить доказуемые данные от недоказуемых, я считаю, что статический анализ просто слишком шумный, даже с небольшой чистой базой кода.