Статический анализ кода / Кодовые аннотации - PullRequest
1 голос
/ 12 марта 2012

Я пишу код, который работает как конечный автомат.Итак:

  • некоторые функции устанавливают определенное состояние
  • другим разрешено выполнение в определенном состоянии.

(На самом деле это немного сложнее, но для простоты это основа.)

В настоящее время я использую утверждения времени выполнения, чтобы проверить, разрешена ли функция втекущее состояние.Это хорошо, потому что это своего рода самодокументирование;Более того, я могу остановиться на отладчике assert и узнать, где находится ошибка.Но недостатком является то, что он требует компиляции кода, и что во время тестирования мне нужно найти пользовательские входные данные для запуска соответствующих утверждений.

Кстати, я знаю, что Windows WDK предоставляет аннотации, такиеas:

__drv_maxIRQL
__drv_setsIRQL

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

Итак, вопрос в том, существуют ли какие-либо инструменты, обеспечивающие аналогичную функциональность для программ, указанных в форме конечных автоматов?

1 Ответ

2 голосов
/ 13 марта 2012

Плагин Frama-C Aoraï делает более или менее точно то, что вы описываете для программ на Си, с возможностью статической проверки.Он основан не на PreFAST, а на сопоставимых инструментах проверки с платформы Frama-C.

...