Design by Contracts in PHP

13
Design by Contracts (DbC) Sergey Khaletskiy

description

9 April, 2014 - PHP Symfony Meet-up #4 (Symfony BY - https://www.facebook.com/groups/symfony.by/)

Transcript of Design by Contracts in PHP

Page 1: Design by Contracts in PHP

Design by Contracts (DbC)

Sergey Khaletskiy

Page 2: Design by Contracts in PHP

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

Контрактное программирование — это возможность автоматической проверки «формальных, точных и верифицируемых спецификаций программных интерфейсов»

Page 3: Design by Contracts in PHP

● обязанности сторон:– клиент: корректные входные данные

– поставщик: корректная работа и результат

● соблюдение контракта

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

Page 4: Design by Contracts in PHP

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

● Основная идея – объединить программный код и спецификации

● Спецификации (контракты) встраиваются в программу

● В основе лежит логика Хоара

Тройка Хоара: {P}С{Q} ● P и Q – утверждения ● С – часть программы

Page 5: Design by Contracts in PHP

● Документация– предусловия + посусловия + интерфейс

- документирование методов

– инварианты + интерфейс класса – документирование классов

● Тестирование– предусловия и инварианты -

ограничения на генерируемые тесты

Решение проблем

Page 6: Design by Contracts in PHP

Контракт – сугубо декларативное описание требовний.

Задает:● Типы данных● Предусловие (precondition)● Инвариант (invariant)● Постусловие (postcondition)

Контракт

Page 7: Design by Contracts in PHP

● Предусловие● Инвариант● Вызов функции● Инвариант● Постусловие

Последовательность проверки

Page 8: Design by Contracts in PHP

DcP в PHP

Page 9: Design by Contracts in PHP

● PhpDeal

https://github.com/lisachenko/php-deal

DcP в PHP

● PHP-Contract

https://github.com/axiom82/PHP-Contract

Page 10: Design by Contracts in PHP

PHP-Contract

Page 11: Design by Contracts in PHP

PhpDeal предусловия/постусловия

Page 12: Design by Contracts in PHP

PhpDeal инварианты

Page 13: Design by Contracts in PHP

Вопросы