Могу ли я легко исключить некоторые контракты из статического анализа? - PullRequest
4 голосов
/ 19 ноября 2010

Есть определенные контракты, которые я знаю, что статический анализатор не может доказать.Я могу исключить определенные виды ошибок, связанных с нарушением контракта, из всей функции, но это слишком широкое обозначение.Я могу исключить некоторые ошибки нарушения с помощью функциональности baseline.xml, хотя это практически невозможно для аудита или документирования в командной среде.

Короче говоря, возможно ли сделать что-то вроде

Contract.Requires(DoesHalt() == true, ExcludeFromStaticAnalysis=true);

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

Без возможности отделить доказуемые данные от недоказуемых, я считаю, что статический анализ просто слишком шумный, даже с небольшой чистой базой кода.

1 Ответ

0 голосов
/ 29 ноября 2010

Для статического анализа я не знаю, как это сделать.Средство проверки времени выполнения имеет пользовательскую среду выполнения, с которой это было бы возможно, но не для статической проверки.

Что вы можете сделать, это использовать " базовая функциональность ".Это дает вам возможность скрыть все предупреждения, которые статические контролеры дают вам в определенное время.Эти предупреждения собираются в файле XML до тех пор, пока вы не отключите базовые функции.

Это может значительно снизить шум статической проверки для существующей кодовой базы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...