Я пишу код, который работает как конечный автомат.Итак:
- некоторые функции устанавливают определенное состояние
- другим разрешено выполнение в определенном состоянии.
(На самом деле это немного сложнее, но для простоты это основа.)
В настоящее время я использую утверждения времени выполнения, чтобы проверить, разрешена ли функция втекущее состояние.Это хорошо, потому что это своего рода самодокументирование;Более того, я могу остановиться на отладчике assert и узнать, где находится ошибка.Но недостатком является то, что он требует компиляции кода, и что во время тестирования мне нужно найти пользовательские входные данные для запуска соответствующих утверждений.
Кстати, я знаю, что Windows WDK предоставляет аннотации, такиеas:
__drv_maxIRQL
__drv_setsIRQL
Эти аннотации статически проверяются с использованием PreFAST , который может вызвать ошибку при необходимости.Этот вид статической проверки спецификаций кода - это как раз то, что мне нужно.
Итак, вопрос в том, существуют ли какие-либо инструменты, обеспечивающие аналогичную функциональность для программ, указанных в форме конечных автоматов?