Лекция 2 Виды формальных спецификаций. Практические задачи курса Виды использования моделей жизненном цикле ПО Фазы жизненного цикла Цель фазы Уточнение в понимании задачи Согласование с заказчиком Прототипирование Оценка реализуемости Проектирование (поиск подходящих решений) Реверс-инженерия ВМиК МГУ. Сентябрь-декабрь 2001 Получить программную систему Понимание организации (legacy) системы Фиксация полученного знания для хранения и передачи А.К.Петренко. Формальные спецификации программ - I. Лекция 2 2 Пример: спецификации для целей прототипирования Фазы жизненного цикла Прототипирование Цель фазы Уточнение в понимании задачи Согласование с заказчиком Оценка реализуемости ВМиК МГУ. Сентябрь-декабрь 2001 А.К.Петренко. Формальные спецификации программ - I. Лекция 2 3 Неформальное описание системы Имеется система, предоставляющая программный интерфейс (ПИ, или Application Program Interface - API) Система реализует «очередь» ВМиК МГУ. Сентябрь-декабрь 2001 А.К.Петренко. Формальные спецификации программ - I. Лекция 2 4 Первый шаг формализации. Выбор терминов (денотатов) Типы данных Операции Очередь - Queue Элемент очереди - Element Поставить в очередь - append Кого обслуживать следующим? - first Кто останется после этого? - rest Константа Пустая очередь - empty ВМиК МГУ. Сентябрь-декабрь 2001 А.К.Петренко. Формальные спецификации программ - I. Лекция 2 5 Alexander Petrenko: Сигнатура (структура) интерфейса - простейший вид спецификации Мы описали структуру, то есть набор элементов, виды связи и соьственно связи между QUEUE элементами. = class type value Element, Queue empty : Queue, append : Element >< Queue -> Queue, first : Queue -~-> Element, rest : Queue -~-> Queue end ВМиК МГУ. Сентябрь-декабрь 2001 А.К.Петренко. Формальные спецификации программ - I. Лекция 2 6 Требования к спецификации. Спецификация должна: быть простой/естественной для реализитора/пользователя/ дизайнера тестов/тестировщика/ менеджера требований-инженера по качеству позволять проверять внутреннюю согласованность/консистентность быть недвусмысленной для объективности анализа быть полной (определена область допустимых значений для всех функций и все сценарии использования) не содержать лишних ограничений на реалиизацию ВМиК МГУ. Сентябрь-декабрь 2001 А.К.Петренко. Формальные спецификации программ - I. Лекция 2 7 Упражнение: Как бы я написал(а) спецификацию очереди Знаю Оцениваю сам Оцениваю по отношению к сформулированным требованиям ВМиК МГУ. Сентябрь-декабрь 2001 А.К.Петренко. Формальные спецификации программ - I. Лекция 2 8 Известные виды спецификаций Алгебраические/аксиоматические Явные/исполнимые/алгоритмические Неявные/неисполнимые/ограничения ВМиК МГУ. Сентябрь-декабрь 2001 А.К.Петренко. Формальные спецификации программ - I. Лекция 2 9 Очередь. Алгебраическая спецификация QUEUE = class type Element, Queue value empty: Queue, append : Element >< Queue -> Queue, first : Queue -~-> Element, rest : Queue -~-> Queue axiom forall e : Element, q : Queue :empty ~= append (e,q), first(append(e, empty)) is e, rest(append(e,empty)) is empty, first(append(e, q)) is if q=empty then e else first(q) end, rest(append(e,q)) is if q=empty then empty else append(rest(q)) end end ВМиК МГУ. Сентябрь-декабрь 2001 А.К.Петренко. Формальные спецификации программ - I. Лекция 2 10 Пример трансформаций типа re-writing … axiom forall e : Element, q : Queue :empty ~= append (e,q), first(append(e, empty)) is e, rest(append(e,empty)) is empty, first(append(e, q)) is if q=empty then e else first(q) end, rest(append(e,q)) is if q=empty then empty else append(e, rest(q)) end end rest(append(a, append (b, empty))) append(a, rest(append (b, empty))) append(a, empty) ВМиК МГУ. Сентябрь-декабрь 2001 А.К.Петренко. Формальные спецификации программ - I. Лекция 2 11 Очередь. Явная спецификация QUEUE = class type Element, Queue = Element-list value empty: Queue, append : Element >< Queue -> Queue, first : Queue -~-> Element, rest : Queue -~-> Queue axiom forall e : Element, q : Queue :empty is <..>, append(e,q) is q ^ <.e.>, first(q) is hd q pre q~=<..>, rest(q) is tl q pre q~=<..> end ВМиК МГУ. Сентябрь-декабрь 2001 А.К.Петренко. Формальные спецификации программ - I. Лекция 2 12 Очередь. Явная спецификация (зеркало) ... axiom forall e : Element, q : Queue :empty is <..>, append(e,q) is <.e.> ^ q, first(q) is q(len q) pre q~=<..> , rest(q) is variable x: Queue = <.q(1).> for i = <.2..len q.> do x:=x ^ q(i) end pre q~=<..> end ВМиК МГУ. Сентябрь-декабрь 2001 А.К.Петренко. Формальные спецификации программ - I. Лекция 2 13 Очередь. Неявная спецификация QUEUE = class type Element, Queue = Element-list value empty: Queue, append : Element >< Queue -> Queue, first : Queue -~-> Element, rest : Queue -~-> Queue axiom forall e : Element, q : Queue :empty is <..>, append(e,q1) as post q1 ^ <.e.> = q2, first(q) as e post hd q= e pre q~=<..>, rest(q1) as q2 post exists e : Element :- <.e.> ^ q1 = q2 pre q~=<..>, end ВМиК МГУ. Сентябрь-декабрь 2001 А.К.Петренко. Формальные спецификации программ - I. Лекция 2 14 Очередь. Неявная спецификация (зеркало) QUEUE = class type Element, Queue = Element-list value empty: Queue, append : Element >< Queue -> Queue, first : Queue -~-> Element, rest : Queue -~-> Queue axiom forall e : Element, q : Queue :empty is <..>, append(e,q1) as q2 post <.e.> ^ q1 = q2, first(q1) as e post exists q2 : Queue :- q2 ^ <.e.> = q1 rest(q1) as q2 post tl q1= q2 pre q1~=<..>, end ВМиК МГУ. Сентябрь-декабрь 2001 А.К.Петренко. Формальные спецификации программ - I. Лекция 2 15 Практические цели курса. Научиться: Строить (абстрактные) модели Изменять уровень абстракции Анализировать модели (проверять ее консистентность) Анализировать согласованность моделей, при помощи: Уточнения (refinement) Тестирования ВМиК МГУ. Сентябрь-декабрь 2001 А.К.Петренко. Формальные спецификации программ - I. Лекция 2 16 Языки и методологии спецификаций Языки Методологии RSL VDM-SL RAISE VDM VDM++ Development process for real-time systems (IFAD) Z Eiffell ADL/ADL2 iContract ВМиК МГУ. Сентябрь-декабрь 2001 Design-by-contract <noname> А.К.Петренко. Формальные спецификации программ - I. Лекция 2 17 Ключевые слова аксиоматические алгебраические денотат жизненный цикл ПО исполнимые спецификации консистентность методология разработки неявные спецификации ограничения программный интерфейс сигнатура тестирование уточнение формальные спецификации программ явные спецификации языки спецификаций ВМиК МГУ. Сентябрь-декабрь 2001 axiomatic algebraic denotate software life-cycle executable specification consistency development method implicit specification constraints Application Program Interface - API signature testing refinement formal specification of software explicit specification specification languages А.К.Петренко. Формальные спецификации программ - I. Лекция 2 18 Дополнительная литература Б.Мейер. Программная инженерия как предмет обучения.- Открытые системы, Июль-Август 2001, стр.8086. ВМиК МГУ. Сентябрь-декабрь 2001 А.К.Петренко. Формальные спецификации программ - I. Лекция 2 19