Наша кодовая база имеет большую поточную обработку ограничений, закодированных в комментариях - таких как:
Первые три видны на обоих классах и отдельных участниках.
Я искал любые решения, которые могли по крайней мере частично проверить, что эти ограничения удовлетворены. Я понимаю, что существуют основные ограничения на степень, до которой это может быть сделано автоматически, но даже немного справки от инструмента действительно помогло бы. Я не мог найти никого все же.
Можно ли предложить, чтобы инструмент сделал что-то вдоль этих строк? Возможно, FxCop ruleset, который работает путем кодирования вышеупомянутых ограничений атрибутами?
Я не знаю о любых атрибутах безопасности потоков безопасности, просто потому, что это, как правило, слишком сложно. И «тестирование» резьбового кода (с добавлением дополнительных Debug.assert
и т. Д.) - это распространенная причина Heisenbugs. Вы могли бы посмотреть на « шахматы ? Это не серебряная пуля, но это может быть полезно.
Не уверен, как вы это сделаете во время компиляции, но, возможно, PostSharp можно использовать для определения ограничений, а не оставлять их в комментариях (например, ваши ограничения могут быть указаны как атрибуты методов или класса).
Вы можете попробовать реализовать некоторые пользовательские правила FXCOP (срабатывают с использованием соответствующего атрибута). Это может помочь вам проверить некоторое простое состояние (например, этот класс безопасен в потоке, потому что он не содержит мультипликационного состояния).
Другая проверка, скорее всего, будет сложнее (например, fxcop подтвердит, что при установке поля "x" всегда выполняется так, когда мы держим данный замок) - возможно. Если это важно, я бы предложил посмотреть на SDK FXCOP и увидеть, насколько сложно будет такой тест.
Я обнаружил, что реализация пользовательских правил FXCOP очень полезна, особенно когда мы контролируем структуру классов, которые мы тестируем.