Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lectures / lecture10.ppt
Скачиваний:
10
Добавлен:
06.06.2015
Размер:
402.94 Кб
Скачать

В программе, находящейся в файле fast_floor.cpp обнаружено две ошибки:

1.При E – bias >= m – 2 (или d >= w) сдвигаемое влево значение выходит за пределы m – 1 битов. В частности, при d = w старшая единица попадает в позицию знака в представлении целого числа, в результате чего результат floor становится отрицательным. В реализации следовало бы запретить использовать функцию floor при d > 0, т.е. при E – bias – p + 1 > 0 из-за экспоненциально растущей погрешности.

2.Ненормализованное сверхмалое число обрабатывается также, как нормализованное (с добавление 1 в разряд p). Тем не менее, это не меняет значение функции floor из-за малости числа. Однако при вычислении других функций результат был бы ошибочным.

8.Язык, технология

иметоды верификации других классов программ

8.1. Класс объектно-ориентированных программ.

Язык. База – язык невзаимодействующих программ. Дополнительно - классы, инкапсуляция, наследование.

class C(x) implements D(y) { invariant <инвариант класса>

 

<поля и методы> < приватные поля и методы >

}

x и y внешние параметры (типы, переменные)

Объект – структура из доступных и приватных полей класса

c.field

A(x, s: y, s’) s. A(x: y)

Вызов метода:

Определение метода:

A(x: y) pre P(x, s) {…} post Q(x, s, y, s’)

class D { invariant ID(s);

A(x: y) pre PD(x, s) {…} post QD(x, s, y, s’) … } class C implements D { invariant IC(s);

A(x: y) pre PC(x, s) {…} post QC(x, s, y, s’)}

IC(s) ID(s) PD(x, s) PC(x, s)

QC(x, s, y, s’) QD(x, s, y, s’)

Спецификация в виде предусловия и постусловия для методов, инвариант класса.

Условия корректности. Формула тотальной корректности для методов. Выполнимость инварианта после вызова любого метода класса. Условия корректности, проверяющие для наследуемых методов ослабление предусловий и усиление постусловий. Проверка усиления инварианта наследуемого класса.

3. Класс простых процессов.

Язык. База язык объектно-ориентированных программ.

Дополнительно: loop {A(s, x: s’, y)},

break.

s – переменные, модифицируемые в цикле.

Спецификация. Инвариант цикла.

Темпоральные свойства.

class C { invariant I(s); A(x: y) pre P(x, s) post Q(x, s, y, s’)} loop { s.A(x: y) }

Пример. Система автоматического управления

Представление программы процесса в форме автомата. Спецификация: инвариант в каждой вершине автомата.

Языковые средства описания процесса

Процесс: машина конечных состояний (автомат) в виде гиперграфа состояний

process <имя процесса>(<аргументы и порты>: <результаты>)

<предусловие> { <тело процесса> } <постусловия на завершающиеся ветви>

Инварианты

Состояния: входное, выходные, внутренние.

Имя состояния

Секция результатов:

<описание результатов> #<имя выходного состояния> |

Фрагмент тела процесса:

<имя входного или внутреннего состояния>: <оператор>

Оператор перехода:

#<имя состояния>

Декомпозиция процессов

Утверждение. Любой алгоритм можно декомпозировать введением всего лишь одного внутреннего состояния

Декомпозиция бесконечного процесса с одним внутренним состоянием:

start A

next B

process A(X x: Y y);

process B(X x, Y y: Y y’);

//предварительное определение процесса A

//предварительное определение процесса B

process C(X x: )

{ start: A(x: Y y) #next next: B(x, y: Y y’) #next

}

Декомпозиция с одним внутренним состоянием:

start

start

A

A

next

next

B

B

stop

stop

А

B

start

 

 

 

 

next

stop

stop

А

 

start

B

 

 

 

next

stop

start

А

B

 

 

 

next

process A(X x: Y y #next : Z z #stop);

// предварительное определение процесса A

process B(X x, Y y: Y y’ #next : Z z #stop);

// предварительное определение процесса B

process G(X x: Z z #stop)

{ start: A(x: Y y #next : z #stop); next: B(x, y: Y y’ #next : z #stop)

}

Декомпозиция без внутренних состояний:

stop

next

B

process B(X x, Y y: Y y’ #next : Z z #stop);

 

 

 

// предварительное определение процесса B

process H(X x, Y y: Z z #stop);

 

{

next:

B(x, y: Y y’ #next : Z z #stop)

}

Соседние файлы в папке lectures