Хотелось бы узнать, можно ли сделать какой-либо предварительный обработанный срез с помощью Frama-C, и я играю с некоторыми примерами, чтобы понять, как это можно достичь.Понимание результатов резки Frama-C
У меня есть этот простой пример, который, кажется, приводит к неточному срезу, и я не могу понять, почему. Вот функция, я хотел бы порезать:
int f(int a){
int x;
if(a == 0)
x = 0;
else if(a != 0)
x = 1;
return x;
}
Если я использую эту спецификацию:
/*@ requires a == 0;
@ ensures \old(a) == a;
@ ensures \result == 0;
*/
затем Frama-C возвращает следующий фрагмент (который является точным), используя «е -slice -Возвращение»критерий и е в качестве точки входа:
/*@ ensures \result ≡ 0; */
int f(void){
int x;
x = 0;
return x;
}
Но при использовании этой спецификации:
/*@ requires a != 0;
@ ensures \old(a) == a;
@ ensures \result == 1;
*/
тогда все инструкции (& аннотаций) остаются (когда я ждал этого кусочка быть возвращено:
/*@ ensures \result ≡ 1; */
int f(void){
int x;
x = 1;
return x;
}
)
В последнем случае, это срез неточный? В этом случае, что может быть причиной?
С уважением,
Romain
Edit: я написал "еще, если (а = 0!) ...", но проблема остается "еще ..."
Спасибо за ваш ответ (я согласился с ним, кстати, извините, я не знал, что вам нужно и как это сделать, newb spotted =))! Я посмотрел руководство по анализу стоимости, но я не могу понять, почему -уровень должен быть как минимум 3 (почему не только 2)? Не могли бы вы объяснить это кратко? – roo
@roo Опция '-slevel' дает анализ значений лицензии для наложения состояний памяти, например, одного состояния памяти для' a <0' и другого для 'a> 0'. Эффект заключается в том, что условие 'a! = 0' было« представлено »с интервалами в конце концов. Но ваша функция также содержит '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' = Вероятно, это является причиной того, что '-slevel 2' недостаточно. Но нет оснований пытаться использовать только правильное значение для '-slevel', если оно достаточно точное и не использует слишком много времени. Следовательно, '-уровень 10'. –