Upload
sergei-khaletskiy
View
1.190
Download
0
Embed Size (px)
DESCRIPTION
9 April, 2014 - PHP Symfony Meet-up #4 (Symfony BY - https://www.facebook.com/groups/symfony.by/)
Citation preview
Design by Contracts (DbC)
Sergey Khaletskiy
Контрактное программирование
Контрактное программирование — это возможность автоматической проверки «формальных, точных и верифицируемых спецификаций программных интерфейсов»
● обязанности сторон:– клиент: корректные входные данные
– поставщик: корректная работа и результат
● соблюдение контракта
Контрактное программирование
Контрактное программирование
● Основная идея – объединить программный код и спецификации
● Спецификации (контракты) встраиваются в программу
● В основе лежит логика Хоара
Тройка Хоара: {P}С{Q} ● P и Q – утверждения ● С – часть программы
● Документация– предусловия + посусловия + интерфейс
- документирование методов
– инварианты + интерфейс класса – документирование классов
● Тестирование– предусловия и инварианты -
ограничения на генерируемые тесты
Решение проблем
Контракт – сугубо декларативное описание требовний.
Задает:● Типы данных● Предусловие (precondition)● Инвариант (invariant)● Постусловие (postcondition)
Контракт
● Предусловие● Инвариант● Вызов функции● Инвариант● Постусловие
Последовательность проверки
DcP в PHP
● PhpDeal
https://github.com/lisachenko/php-deal
DcP в PHP
● PHP-Contract
https://github.com/axiom82/PHP-Contract
PHP-Contract
PhpDeal предусловия/постусловия
PhpDeal инварианты
Вопросы