
- •Архитектуры и модели программ и знаний
- •Требования и цели
- •Спецификация программ
- •Методы и средства спецификации
- •Языки спецификации
- •Язык OBJ3 (Дж. Гоген). Пример (1/2) ftp://www.cs.ucsd.edu/pub/fac/goguen/obj3/ University of California, San Diego
- •Язык OBJ3: Пример (2/2)
- •Монография по языку OBJ и алгебраическим спецификациям
- •Другие подходы к спецификации
- •Автоматический синтез программ по спецификациям (Э. Тыугу, С. Лавров)
- •Связь этапов выработки
- •Почему формальные спецификации и вообще формальные методы до сих пор используются недостаточно?
- •Литература по спецификации программ
- •Вопросы и домашнее задание к лекции 8

Архитектуры и модели программ и знаний
Лекция 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