SlideShare une entreprise Scribd logo
1  sur  35
Контракт с
дьяволом
Олег Блохин
SmartStepGroup
SmartStepGroup
Внедряем инженерные практики XP
Ставим процессы
Предположения – источник
ошибок в коде
Утверждения
while( thereIsEnemyUnitsAround() )
{
gameContext.SelectUnit(killingStrategy);
var unit = gameContext.GetSelectedUnit();
unit.Kill()
}
Утверждения
while( thereIsEnemyUnitsAround() )
{
gameContext.SelectUnit(killingStrategy);
var unit = gameContext.GetSelectedUnit();
if (unit != null) {
unit.Kill()
}
}
Утверждения
while( thereIsEnemyUnitsAround() )
{
gameContext.SelectUnit(killingStrategy);
var unit = gameContext.GetSelectedUnit();
if (unit == null) {
throw new BusinessException(“…”);
}
unit.Kill()
}
Утверждения
while( thereIsEnemyUnitsAround() )
{
gameContext.SelectUnit(killingStrategy);
var unit = gameContext.GetSelectedUnit();
Assert.NotNull(unit);
unit.Kill()
}
Контракты ≠ Assert
Корректность не существует
без спецификации
Контракты методов
метод(параметры):
Условия применимости (параметры, состояние)
Тело метода
Гарантии
Контракты методов
public void MoveUnit(player, unit, destination)
Require {
playerCanMove(player);
unitIsOnBoard(unit);
} { /* код вашего метода */ }
Ensure {
getDestination(unit) == destination;
}
Контракты методов
public void MoveUnit(player, unit, destination)
Require {
playerCanMove(player);
unitIsOnBoard(unit);
unitIsAbleToMove(player, unit);
destinationIsAchievable(unit, destination);
} { //… }
Ensure {
!playerCanMove(player);
getDestination(unit) == destination;
}
Контракты – не защитное
программирование
Инварианты классов
class Board {
private Player player1;
private Player player2;
private Player currentPlayer;
Board(player1, player2) {
this.player1 = player1;
this.player2 = player2;
this.currentPlayer = player1;
}
public MakeTurn(...){...}
Invariant {
CurrentPlayerAlwaysGameParticipant:
currentPlayer == player1 || currentPlayer == player2
}
}
Документация, исполняемая
вместе с кодом
–
не устаревает
Преимущества
Неустаревающая спецификация
Корректность
Осознанность решений
Уменьшение страха
Отказ от защитного программирования
Недостатки
Надо больше думать
Поддержка корректности спецификации
Надо явно обеспечить надёжность
Требует внедрения
Как применить?
Контракты есть для вашего языка
Если нет – вы всё равно можете их
использовать
Если боитесь – выберите ту часть, которая
вам кажется безопасной
Уровни срабатывания
Машина разработчика
Сборка для тестирования
Продакшн
Итог
Корректность не существует без
спецификации
Контракт – исполняемая спецификация в
коде
Уровни контрактов:
Реализация - утверждения (Assert)
Интерфейс - контракты метода
Ссылки
Бертран Мейер, Основы ООП
Hunt & Thomas, Pragmatic Programmer
Тепляков Сергей, «Проектирование по
контракту»
Контакты
Олег
oleg.blohin@smartstepgroup.com
FB, VK, twitter, instagram, linkedin

Contenu connexe

En vedette

Современная история менеджмента - от стагнации к ренессансу
Современная история менеджмента - от стагнации к ренессансуСовременная история менеджмента - от стагнации к ренессансу
Современная история менеджмента - от стагнации к ренессансуAlexey Krivitsky
 
Денис Тучин, Удачные и неудачные паттерны распределённого Agile
Денис Тучин, Удачные и неудачные паттерны распределённого AgileДенис Тучин, Удачные и неудачные паттерны распределённого Agile
Денис Тучин, Удачные и неудачные паттерны распределённого AgileScrumTrek
 
Культура Лидерства в ИТ
Культура Лидерства в ИТКультура Лидерства в ИТ
Культура Лидерства в ИТTimofey (Tim) Yevgrashyn
 
Complexity of organizational design and its effect scaling agility
Complexity of organizational design and its effect scaling agilityComplexity of organizational design and its effect scaling agility
Complexity of organizational design and its effect scaling agilityAlexey Krivitsky
 
Getting to pull at enterprise scale
Getting to pull at enterprise scaleGetting to pull at enterprise scale
Getting to pull at enterprise scaleDavid Anderson
 
Раскрась свой Бэклог! Или о том как принимать решения на основе разных типов ...
Раскрась свой Бэклог! Или о том как принимать решения на основе разных типов ...Раскрась свой Бэклог! Или о том как принимать решения на основе разных типов ...
Раскрась свой Бэклог! Или о том как принимать решения на основе разных типов ...Timofey (Tim) Yevgrashyn
 

En vedette (7)

2013 02-abc-kiev
2013 02-abc-kiev2013 02-abc-kiev
2013 02-abc-kiev
 
Современная история менеджмента - от стагнации к ренессансу
Современная история менеджмента - от стагнации к ренессансуСовременная история менеджмента - от стагнации к ренессансу
Современная история менеджмента - от стагнации к ренессансу
 
Денис Тучин, Удачные и неудачные паттерны распределённого Agile
Денис Тучин, Удачные и неудачные паттерны распределённого AgileДенис Тучин, Удачные и неудачные паттерны распределённого Agile
Денис Тучин, Удачные и неудачные паттерны распределённого Agile
 
Культура Лидерства в ИТ
Культура Лидерства в ИТКультура Лидерства в ИТ
Культура Лидерства в ИТ
 
Complexity of organizational design and its effect scaling agility
Complexity of organizational design and its effect scaling agilityComplexity of organizational design and its effect scaling agility
Complexity of organizational design and its effect scaling agility
 
Getting to pull at enterprise scale
Getting to pull at enterprise scaleGetting to pull at enterprise scale
Getting to pull at enterprise scale
 
Раскрась свой Бэклог! Или о том как принимать решения на основе разных типов ...
Раскрась свой Бэклог! Или о том как принимать решения на основе разных типов ...Раскрась свой Бэклог! Или о том как принимать решения на основе разных типов ...
Раскрась свой Бэклог! Или о том как принимать решения на основе разных типов ...
 

Plus de ScrumTrek

Александра Баптизманская, Никита Романов. Хочешь Agile в маркетинге - спроси ...
Александра Баптизманская, Никита Романов. Хочешь Agile в маркетинге - спроси ...Александра Баптизманская, Никита Романов. Хочешь Agile в маркетинге - спроси ...
Александра Баптизманская, Никита Романов. Хочешь Agile в маркетинге - спроси ...ScrumTrek
 
Светлана Байгалиева (MindGym). Встань за штурвал
Светлана Байгалиева (MindGym). Встань за штурвалСветлана Байгалиева (MindGym). Встань за штурвал
Светлана Байгалиева (MindGym). Встань за штурвалScrumTrek
 
Александр Тупиков. Введение в Scrum
Александр Тупиков. Введение в ScrumАлександр Тупиков. Введение в Scrum
Александр Тупиков. Введение в ScrumScrumTrek
 
Сергей Чирва. Как Scrum превращает завод в IT-компанию
Сергей Чирва. Как Scrum превращает завод в IT-компаниюСергей Чирва. Как Scrum превращает завод в IT-компанию
Сергей Чирва. Как Scrum превращает завод в IT-компаниюScrumTrek
 
Юрий Соболев. Проблемы и решения Scrum на практике
Юрий Соболев. Проблемы и решения Scrum на практикеЮрий Соболев. Проблемы и решения Scrum на практике
Юрий Соболев. Проблемы и решения Scrum на практикеScrumTrek
 
Анна Обухова. Scrum и сила воли
Анна Обухова. Scrum и сила волиАнна Обухова. Scrum и сила воли
Анна Обухова. Scrum и сила волиScrumTrek
 
TealTeam. Главный критерий при выборе нового члена команды
TealTeam. Главный критерий при выборе нового члена командыTealTeam. Главный критерий при выборе нового члена команды
TealTeam. Главный критерий при выборе нового члена командыScrumTrek
 
Анастасия Мизитова. Компетенции для Agile HR
Анастасия Мизитова. Компетенции для Agile HRАнастасия Мизитова. Компетенции для Agile HR
Анастасия Мизитова. Компетенции для Agile HRScrumTrek
 
Марина Львова. Изменение роли HR в Agile-компании
Марина Львова. Изменение роли HR в Agile-компанииМарина Львова. Изменение роли HR в Agile-компании
Марина Львова. Изменение роли HR в Agile-компанииScrumTrek
 
Асхат Уразбаев. Три вопроса к HR службе от аджайл-коуча
Асхат Уразбаев. Три вопроса к HR службе от аджайл-коучаАсхат Уразбаев. Три вопроса к HR службе от аджайл-коуча
Асхат Уразбаев. Три вопроса к HR службе от аджайл-коучаScrumTrek
 
Александр Корольков. LeSS Huge
Александр Корольков. LeSS HugeАлександр Корольков. LeSS Huge
Александр Корольков. LeSS HugeScrumTrek
 
DevOps для Legacy-продуктов
DevOps для Legacy-продуктовDevOps для Legacy-продуктов
DevOps для Legacy-продуктовScrumTrek
 
Сергей Баранов. Enterprise DevOps
Сергей Баранов. Enterprise DevOpsСергей Баранов. Enterprise DevOps
Сергей Баранов. Enterprise DevOpsScrumTrek
 
Петр Клименко. DevOps Трансформация для SIEBEL CRM
Петр Клименко. DevOps Трансформация для SIEBEL CRMПетр Клименко. DevOps Трансформация для SIEBEL CRM
Петр Клименко. DevOps Трансформация для SIEBEL CRMScrumTrek
 
Кирилл Толкачев. Микросервисы: огонь, вода и девопс
Кирилл Толкачев. Микросервисы: огонь, вода и девопсКирилл Толкачев. Микросервисы: огонь, вода и девопс
Кирилл Толкачев. Микросервисы: огонь, вода и девопсScrumTrek
 
Евгений Кривошеев. Beyond DevOps
Евгений Кривошеев. Beyond DevOpsЕвгений Кривошеев. Beyond DevOps
Евгений Кривошеев. Beyond DevOpsScrumTrek
 
Асхат Уразбаев. Крутые организации, счастливые сотрудники
Асхат Уразбаев. Крутые организации, счастливые сотрудникиАсхат Уразбаев. Крутые организации, счастливые сотрудники
Асхат Уразбаев. Крутые организации, счастливые сотрудникиScrumTrek
 
Олег Бахмутов, Михаил Плотников, Илья Емельянов. 3 "кита" Agile
Олег Бахмутов, Михаил Плотников, Илья Емельянов. 3 "кита" AgileОлег Бахмутов, Михаил Плотников, Илья Емельянов. 3 "кита" Agile
Олег Бахмутов, Михаил Плотников, Илья Емельянов. 3 "кита" AgileScrumTrek
 
Алексей Ионов. Agile-трансформация: что делать, чтобы потом не искать виноватых?
Алексей Ионов. Agile-трансформация: что делать, чтобы потом не искать виноватых?Алексей Ионов. Agile-трансформация: что делать, чтобы потом не искать виноватых?
Алексей Ионов. Agile-трансформация: что делать, чтобы потом не искать виноватых?ScrumTrek
 
Иван Дубровин. Почему государство должно быть Agile?
Иван Дубровин. Почему государство должно быть Agile?Иван Дубровин. Почему государство должно быть Agile?
Иван Дубровин. Почему государство должно быть Agile?ScrumTrek
 

Plus de ScrumTrek (20)

Александра Баптизманская, Никита Романов. Хочешь Agile в маркетинге - спроси ...
Александра Баптизманская, Никита Романов. Хочешь Agile в маркетинге - спроси ...Александра Баптизманская, Никита Романов. Хочешь Agile в маркетинге - спроси ...
Александра Баптизманская, Никита Романов. Хочешь Agile в маркетинге - спроси ...
 
Светлана Байгалиева (MindGym). Встань за штурвал
Светлана Байгалиева (MindGym). Встань за штурвалСветлана Байгалиева (MindGym). Встань за штурвал
Светлана Байгалиева (MindGym). Встань за штурвал
 
Александр Тупиков. Введение в Scrum
Александр Тупиков. Введение в ScrumАлександр Тупиков. Введение в Scrum
Александр Тупиков. Введение в Scrum
 
Сергей Чирва. Как Scrum превращает завод в IT-компанию
Сергей Чирва. Как Scrum превращает завод в IT-компаниюСергей Чирва. Как Scrum превращает завод в IT-компанию
Сергей Чирва. Как Scrum превращает завод в IT-компанию
 
Юрий Соболев. Проблемы и решения Scrum на практике
Юрий Соболев. Проблемы и решения Scrum на практикеЮрий Соболев. Проблемы и решения Scrum на практике
Юрий Соболев. Проблемы и решения Scrum на практике
 
Анна Обухова. Scrum и сила воли
Анна Обухова. Scrum и сила волиАнна Обухова. Scrum и сила воли
Анна Обухова. Scrum и сила воли
 
TealTeam. Главный критерий при выборе нового члена команды
TealTeam. Главный критерий при выборе нового члена командыTealTeam. Главный критерий при выборе нового члена команды
TealTeam. Главный критерий при выборе нового члена команды
 
Анастасия Мизитова. Компетенции для Agile HR
Анастасия Мизитова. Компетенции для Agile HRАнастасия Мизитова. Компетенции для Agile HR
Анастасия Мизитова. Компетенции для Agile HR
 
Марина Львова. Изменение роли HR в Agile-компании
Марина Львова. Изменение роли HR в Agile-компанииМарина Львова. Изменение роли HR в Agile-компании
Марина Львова. Изменение роли HR в Agile-компании
 
Асхат Уразбаев. Три вопроса к HR службе от аджайл-коуча
Асхат Уразбаев. Три вопроса к HR службе от аджайл-коучаАсхат Уразбаев. Три вопроса к HR службе от аджайл-коуча
Асхат Уразбаев. Три вопроса к HR службе от аджайл-коуча
 
Александр Корольков. LeSS Huge
Александр Корольков. LeSS HugeАлександр Корольков. LeSS Huge
Александр Корольков. LeSS Huge
 
DevOps для Legacy-продуктов
DevOps для Legacy-продуктовDevOps для Legacy-продуктов
DevOps для Legacy-продуктов
 
Сергей Баранов. Enterprise DevOps
Сергей Баранов. Enterprise DevOpsСергей Баранов. Enterprise DevOps
Сергей Баранов. Enterprise DevOps
 
Петр Клименко. DevOps Трансформация для SIEBEL CRM
Петр Клименко. DevOps Трансформация для SIEBEL CRMПетр Клименко. DevOps Трансформация для SIEBEL CRM
Петр Клименко. DevOps Трансформация для SIEBEL CRM
 
Кирилл Толкачев. Микросервисы: огонь, вода и девопс
Кирилл Толкачев. Микросервисы: огонь, вода и девопсКирилл Толкачев. Микросервисы: огонь, вода и девопс
Кирилл Толкачев. Микросервисы: огонь, вода и девопс
 
Евгений Кривошеев. Beyond DevOps
Евгений Кривошеев. Beyond DevOpsЕвгений Кривошеев. Beyond DevOps
Евгений Кривошеев. Beyond DevOps
 
Асхат Уразбаев. Крутые организации, счастливые сотрудники
Асхат Уразбаев. Крутые организации, счастливые сотрудникиАсхат Уразбаев. Крутые организации, счастливые сотрудники
Асхат Уразбаев. Крутые организации, счастливые сотрудники
 
Олег Бахмутов, Михаил Плотников, Илья Емельянов. 3 "кита" Agile
Олег Бахмутов, Михаил Плотников, Илья Емельянов. 3 "кита" AgileОлег Бахмутов, Михаил Плотников, Илья Емельянов. 3 "кита" Agile
Олег Бахмутов, Михаил Плотников, Илья Емельянов. 3 "кита" Agile
 
Алексей Ионов. Agile-трансформация: что делать, чтобы потом не искать виноватых?
Алексей Ионов. Agile-трансформация: что делать, чтобы потом не искать виноватых?Алексей Ионов. Agile-трансформация: что делать, чтобы потом не искать виноватых?
Алексей Ионов. Agile-трансформация: что делать, чтобы потом не искать виноватых?
 
Иван Дубровин. Почему государство должно быть Agile?
Иван Дубровин. Почему государство должно быть Agile?Иван Дубровин. Почему государство должно быть Agile?
Иван Дубровин. Почему государство должно быть Agile?
 

Олег Блохин, Контракт с дьяволом