Я пытаюсь использовать Frama-c
, чтобы проверить некоторые свойства функции C, которая у меня есть.Функция довольно большая, и есть несколько промежуточных переменных, которые мне нужно проверить.(Я слежу за этим и этим руководством)
Моя программа имеет следующую структуру:
- По всему объему 15 операторов returnпрограмма.
Переменным, которые мне нужно проверить, являются назначенные значения в нескольких местах программы, в зависимости от пути программы.
my_function(){
intermediate var 1=xx;
//@assert var 1>some_value;
intermediate var 2=yy;
return var 4;
intermediate var 1=xx;
//@assert var 1>some_value;
return var 4;
intermediate var 2=xx;
intermediate var 1=yy;
//@assert var 1>some_value;
return var 4;
}
Объяснение : Мне нужно проверить определенные свойства, связанные с вар 1, вар 2 и вар 4. Я пробовал 2 подхода.
- использовать assert всякий раз, когда вар 1 установлен, как указано выше.
Проблема в том, что Frama-C проверяет только первое утверждение.
использовать аннотации в начале.
/*@ requires \valid(var 1);
ensures var 1 > some_value;
*/
В этом случае Frama-C возвращает ошибку.
Вопрос : Как проверить свойства для промежуточных задач?Есть ли пример программы?
* Я не включил свою исходную функцию, так как она очень длинная.