Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Safonov / AMPN_course_8.pptx
Скачиваний:
107
Добавлен:
16.04.2015
Размер:
151.77 Кб
Скачать

Архитектуры и модели программ и знаний

Лекция 8

Выработка требований и целей разработки программ.

Спецификация программ

Сафонов Владимир Олегович

Профессор кафедры информатики Заведующий лабораторией Java-технологии

(http://polyhimnie.math.spbu.ru/jtl)

Санкт-Петербургский государственный университет

Email: vosafonov@gmail.com

WWW: http://www.vladimirsafonov.org

Требования и цели

Начальный этап разработки программной системыВыработка документа (либо формализованного описания), в котором сформулированы технические, финансовые, пользовательские, рыночные и другие требования к будущей программной системе

Документ является соглашением между заказчиком и разработчикомПрактическая форма воплощения данного этапа в фирмах- разработчиках ПО – Marketing Requirements Document (MRD)

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

Если на данном этапе предварительный анализ покажет нецелесообразность разработки нового ПО, разработка выполняться не будетВ последнее время развивается инженерный подход к данному этапу

Requirements Engineering, основанный на использовании формальных методов (языков спецификаций и моделирования, в том числе – математических моделей)

(C) Сафонов В.О. 2012

Спецификация программ

Спецификация – этап жизненного цикла, следующий

за этапами формулировки требований и целей (requirements & goals)

Спецификация – формализованное, внешнее, точное

и полное описание задачи, которую должна решать

разрабатываемая программная система или ее часть

Вкратце: спецификация – это то, ЧТО требуется

выполнить, без описания того, КАК это выполнить

Типичный метод спецификации – математическая

формула, например, fact(n) = 1 * 2 * … * n – формула, специфицирующая функцию факториал, которая может быть реализована многими способамиРеализация алгоритма, представление данных и т.д.

не являются элементами спецификацииПолнота спецификации: принимая во внимание все

варианты входных данных, дополним спецификацию

факториала следующим образом:

При n = 0 fact(n) = 1 (по определению)

(C) Сафонов В.О. 2012

Методы и средства спецификации

Естественный язык (словесная спецификация до сих

пор наиболее распространена)

HIPO-диаграммы (Hierarchical Input-Process-Output –

иерархические схемы вида вход – обработка - выход)

Таблицы решений { (A1, …, An, F(A1, …, An) }

Исчисление программ по Р. Флойду – Ч. Хоару:

P {S} Q A{S}B, B{T}C |- A{S;T} C

Денотационная семантика (D. Scott, J.Donahue и

др.): программа – преобразователь предикатов: P(x1,

… xn) -> Q(x1, …, xn), где xi – свободные глобальные)

переменные

Венский метод - Vienna Definition Method (VDM; IBM

Research): программа – набор взаимодействующих

между собой автоматов

Алгебраическая спецификация (J. Goguen и др.):

программа – коллекция АТД, каждый из которых

специфицируется как многосортная алгебраСети Петри –спецификация асинхронных программ и

компьютерных систем (Литература: Котов В.Е. Сети

Петри. Наука, 1986)

(C) Сафонов В.О. 2012

Языки спецификации

VDM – язык спецификаций на основе понятия автомата

(Оллонгрен Д. Определение языков программирования интерпретирующими автоматами. – М.: Мир, 1980)OBJ, CLEAR, SDL, LARCH – языки алгебраических

спецификаций

CIP/L. Многоуровневый язык широкого спектра. -

Технический университет Мюнхена 1979. – В сб.: Требования и спецификации в разработке программ, М.: Мир, 1984

Ссылки на VDM, Z, LARCH см. в книге: Я. Соммервилл.

Инженерия программ

UML – язык моделирования архитектуры системы и

процесса ее разработки

SDL – язык спецификации телекоммуникационных систем

(стандарт CCITT)

MSC (Message Sequence Charts) – язык спецификации

систем, основанных на передаче и обработке сообщений (например, мобильных устройств связи)

(C) Сафонов В.О. 2012

Язык OBJ3 (Дж. Гоген). Пример (1/2) ftp://www.cs.ucsd.edu/pub/fac/goguen/obj3/ University of California, San Diego

obj NAT is sort Nat . op 0 : -> Nat .

op s_ : Nat -> Nat [prec 1] . endo

obj NATOPS is pr NAT . op 1 : -> Nat .

eq 1 = s 0 .

op _+_ : Nat Nat -> Nat [assoc comm prec 3] . vars M N : Nat .

eq M + 0 = M .

eq M + s N = s(M + N) .

(C) Сафонов В.О. 2012

Язык OBJ3: Пример (2/2)

op _*_ : Nat Nat -> Nat [assoc comm prec 2] . eq M * 0 = 0 .

eq M * s N = M * N + M .

op _**_ : Nat Nat -> Nat [prec 4] . eq M ** 0 = 1 .

eq M ** s N = (M ** N) * M . op _-_ : Nat Nat -> Nat .

eq M - 0 = M . eq 0 - M = 0 .

eq s M - s N = M - N . [ SKIP … ]

[lemma1] cq (N * N)**(M %2) = N ** M if even M . [lemma2] cq N *(N **(M - s 0)) = N ** M if pos M . endo

(C) Сафонов В.О. 2012

Монография по языку OBJ и алгебраическим спецификациям

(C) Сафонов В.О. 2012

Другие подходы к спецификации

Б. Лисков. CLU (M.I.T.):

GCD = proc (int M, N) signals (overflow) requires N > 0;

effects GCD(M, N) = наибольший общий делитель

M, N

- сравните с “Design-by-Contract” (Dr. B. Meyer,

Eiffel)

M. Shaw. ALPHARD (Carnegie-Mellon Univ.):

Спецификация АТД (форм) методом Р. Флойда - Ч. Хоара

Для каждого АТД специфицируются пред- и постусловие для каждой абстрактной операции, а

также абстрактный инвариант и конкретный инвариант – предикат над элементами абстрактной модели (конкретного представления) АТД, истинность которого должна соблюдаться при

каждой операции: например: SP > 0 (условие

корректности представления стека)

Новый проект: Spec# (Microsoft Research, M.

Barnett, R. Leino и др.) – Расширение C# средствами

спецификации в(C)стилеСафоновDesignВ.О. 2012 -by-Contract

Проект Spec#: http://research.microsoft.com/spe csharp

Язык программирования Spec#. Spec# - расширение объектно-ориентированного языка C#. Он расширяет систему типов “нелулевыми типами” и контролируемыми исключениями . Поддерживает контракты методов в форме предусловий, постусловий и объектных инвариантов

Компилятор Spec#. Интегрирован в среду Microsoft Visual Studio.NET. Компилятор статически обрабатывает ненулевые типы, генерирует проверки времени выполнения для контрактов и инвариантов, сохраняет контракты в метаданных для их использования другими инструментами

Статический верификатор программ Spec#. Данная компонента (под кодовым названием Boogie) генерирует условия логической (формальной) верификации для программ на Spec#. Внутри нее используется система доказательства теорем Simplify (разработанная HP Research на Java), которая

анализирует условия верификации для доказательства

соответствия реализации программы этим условиям или

обнаружения ошибок в реализации программы

Spec# работает в среде Visual Studio.NET как add-in

(расширение)

 

Может рассматриваться как один из первых

верифицирующих компиляторов (verifying compilers – C.A.R.

Hoare)

(C) Сафонов В.О. 2012

 

Spec#: пример

public StringBuilder Append(char[ ] value, int startIndex, int charCount );

requires value == null ==> startIndex == 0 && charCount == 0

otherwise ArgumentNullException; requires 0 <= startIndex

otherwise ArgumentOutOfRangeException; requires 0 <= charCount;

requires value == null ||

startIndex + charCount <= value.Length;

(C) Сафонов В.О. 2012

Spec#: объектные инварианты

class C { private int x;

private int y; invariant x < y;

 

public C() { x = 0; y = 1; }

{

public void M()

int t = 100 / (y – x);

 

x = x + 1;

 

P(t);

}

y = y + 1;

}

(C) Сафонов В.О. 2012

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