0% нашли этот документ полезным (0 голосов)
68 просмотров12 страниц

DDD Contracts

Документ рассматривает подход контрактного программирования, включая основные идеи, элементы контрактов и их применение для документирования, тестирования и статического анализа кода.

Загружено:

Chris Madsen
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
0% нашли этот документ полезным (0 голосов)
68 просмотров12 страниц

DDD Contracts

Документ рассматривает подход контрактного программирования, включая основные идеи, элементы контрактов и их применение для документирования, тестирования и статического анализа кода.

Загружено:

Chris Madsen
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd

Контрактное программирование

 Контрактное программирование
(программирование по
контракту, Design by Contracts,
DbC) – подход к созданию
программ высокого качества
 Автор подхода – проф. Бертран
Мейер
 Впервые введено в языке
программирования Eiffel
 1985 год

Ицыксон В.М. Технологии разработки ПО © 2011-12


 Основная идея – объединить
программный код и спецификации
 Спецификации (контракты) встраиваются
в программу
 В основе лежит логика Хоара
 Тройка Хоара: {P}С{Q}
◦ P и Q – утверждения
◦ С – часть программы

Ицыксон В.М. Технологии разработки ПО © 2011-12


 В терминах контрактного
программирования метод (или функция)
обязуется выполнить контракт:
◦ Если на вход поступили данные
удовлетворяющие входному
∙ условию
контракта, то метод гарантирует соблюдение
выходного условия
◦ Если входные данные НЕ удовлетворяют
первому условию, то ничего не гарантируется
◦ При этом соблюдаются некоторые обобщенные
условия

Ицыксон В.М. Технологии разработки ПО © 2011-12


 Входное условие называется предусловием
(precondition)
 Выходное условие – постусловием
(postcondition)
 Дополнительно обеспечивается поддержка
инвариантов.
 Инвариант (invariant) – условие, которое не
должно нарушаться из-за выполнения метода,
т.е. должно гарантироваться выполнение
инварианта до и после выполнения метода
◦ Во время выполнения инвариант может быть временно
нарушен!

Ицыксон В.М. Технологии разработки ПО © 2011-12


 Пример 1. Метод, вычисляющий корни
квадратного уравнения a∙x²+b∙x+c=0
 Предусловие:
◦ a≠0
 Постусловие:
◦ Вариант 1:
 a∙x1²+b∙x1 +c=0;
 a∙x2²+b∙x2 +c=0
◦ Вариант 2:
 x1 + x2 = -b/a;
 x1 ∙x2 = c/a.

Ицыксон В.М. Технологии разработки ПО © 2011-12


 Пример 2. Снятие денег в банкомате
◦ Balance – сумма на счете клиента
◦ Cash – сумма, которую клиент хочет снять
◦ Amount – денежный запас банкомата
 Предусловия:
◦ Cash > 0;
◦ Cash ≤ 10000;
 Постусловия:
◦ Balance = old(Balance) – Cash;
◦ Amount = old(Amount) – Cash;
 Инвариант:
◦ Amount ≥ 0;
◦ Balance ≥ - 1000;

Ицыксон В.М. Технологии разработки ПО © 2011-12


 В ООП языках программирования
контракты могут являться часть
объектной модели.
 При наследовании:
◦ Предусловия у наследников могут быть
ослаблены
◦ Постусловия у наследников могут быть усилены
◦ Инварианты у наследников могут быть усилены

Ицыксон В.М. Технологии разработки ПО © 2011-12


 Проверка всех условий во время
исполнения
◦ В случае нарушения – останов
◦ Возможность отключения проверок в релизах
 Статические проверки
◦ Вывод с помощью дедуктивных методов
◦ Проверка контрактов с помощью методов
статического анализа

Ицыксон В.М. Технологии разработки ПО © 2011-12


 Документирование
◦ Предусловия + постусловия + интерфейс
класса – документирование методов
◦ Инварианты + интерфейс класса –
документирование классов
 Тестирование
◦ Контракты могут служить основой для
автоматизированного тестирования:
 Предусловия и инварианты – ограничения на
генерируемые тесты
 Постусловия и инварианты – основа для
построения тестовых оракулов.

Ицыксон В.М. Технологии разработки ПО © 2011-12


 Контракты задаются с помощью
выражений логики первого порядка с
использованием:
◦ целочисленной арифметики
◦ вещественной арифметики
◦ И.т.п
 Контракты – сугубо декларативное
описание требовний

Ицыксон В.М. Технологии разработки ПО © 2011-12


 Языки со встроенной поддержкой
◦ Eiffel
◦ SPEC#
◦ Fortress
◦ D
◦ …
 Языки с добавленной поддержкой
◦ C# (Code Contracts)
◦ Java (JML, Modern Jass, CoFoJa и т.п.)
◦ ADA
◦ C/C++ (DbC средствами препроцессора)
◦ …

Ицыксон В.М. Технологии разработки ПО © 2011-12

Вам также может понравиться