Осознанность рефакторинга: Модель принятия...

Post on 12-Jun-2015

2.126 views 5 download

description

Представьте на секунду, что сейчас Вы работаете над сложной высоконагруженной системой, которая делает людей счастливыми. И этот проект настолько важен для человечества, что команда QA и техлиды с архитекторами требует детального обоснования каждого Вашего решения. Как нетрудно догадаться, речь идет о Вашем текущем проекте, к которому вернетесь после конференции. Как Вы обеспечите качество? Как сделаете дизайн поддерживаемым и приятным, а решения примете осознанно и обоснованно? В докладе мне хотелось бы предложить Вам технику проектирования, которая позволит Вам делать выборы осознанно и вывести мастерство проектирования архитектуры и дизайна на новый уровень. Предлагаемый подход довольно распространен, его применяют опытные специалисты в различных областях – от сложных корпоративных систем до высоконагруженных публичных веб-проектов. Я попытался обобщить это знание и сформулировать базовые принципы этого подхода к созданию осознанного дизайна.

Transcript of Осознанность рефакторинга: Модель принятия...

Осознанность рефакторинга

Евгений Кривошеев,

Цели доклада •  Участники смогут принимать осознанные инженерные решения

•  Участники смогут обеспечить высокое качество дизайна

•  Участники решат как минимум одну нерешенную практическую проблему

Сценарий

Понятие качества Scope, Defects

Time Resources Quality

Сценарий

Обоснование через качество Не уверен, что делаю в коде так, потому что надо…

…или потому что так написано в книжке

Кейсы рефакторингов // extract method

Кейсы рефакторингов // move method

Кейсы рефакторингов // extract class

Кейсы рефакторингов // creator pattern → factory pattern

Кейсы участников •  Напишите на листочке последнюю сложную или нерешенную проблему

•  Последний holy war •  Проблема любая, но желательно в контексте дизайна / рефакторинга

•  В конце Вы попробуем решить её

Сценарий

Задача рефакторинга

Привести дизайн к желаемым характеристикам

Какие характеристики желаемые?*

*→быть фабрике или создателю?

Сценарий

Место QA в требованиях

Важность простоты

Простота vs Понятность*

Влияние D.M. на QA

Дизайн должен реализовать требования

Рефакторинги и QA

Рефакторинг Гибкость Простота Понимаемость Тестабельность extract method extract class move method introduce factory

↑ или ↓ или ?

Меняя дизайн, меняем и QA

Сценарий

Корреляции требований

Корреляции требований

Корреляции требований

Требования зачастую конфликтуют.

Дизайн – это компромисс.*

*За все приходится платить

Конфликты требований интеллект

готовка

уборка TCO

специальные навыки

Ирка Петрова Саша Грей

Design is a tradeoff Factory Pattern

Cache Pattern

Design is a tradeoff

Нет «хорошего» и «плохого» дизайна.

Есть подходящий и неподходящий.

Так быть или не быть? Factory Pattern

Сценарий

Минутка матана

<матан>

<a>Вторая теорема Гёделя о неполноте</a>

</матан>

Метамодель дизайна

Дизайн через требования

Инкапсулируем ответственность в класс

Инлайнируем ответственность

Гибкость Простота

Функционал вариабелен (ось вариативности)

Функционал стабилен

Полнота требований

Функционал вариабелен (ось вариативности)

Функционал стабилен ?  

Метамодель требований

BDUF YAGNI

Метамодель требований

BDUF YAGNI ?  

Метамодель процесса

Сценарий

Обоснованный дизайн

Инкапсулируем ответственность в класс

Инлайнируем ответственность

Гибкость Простота

Функционал вариабелен (ось вариативности)

Функционал стабилен ?

BDUF YAGNI ??

Обоснованный дизайн

Наличие java interface в коде в итоге обосновывается бизнес-моделью компании

Сценарий

Отлить в граните •  Рефакторинг – направленное обоснованное изменение дизайна.

•  Дизайн – это компромисс. За все нужно платить.

•  Необходимо выявить конфликт ожиданий.

•  Для принятия решения следует подняться выше на уровень абстракции.

•  Решения локальны и специфичны.

Персональный кейс

Получилось ли решить Ваш кейс?*

*Если нет, продолжим за

Контакты

Евгений Кривошеев, ekrivosheyev@scrumtrek.ru Никита Филиппов, nfilippov@scrumtrek.ru Асхат Уразбаев, askhat@scrumtrek.ru

«Тяжело в учении – легко в бою»

SkillTrek – это дистанционный центр компетенций, где специалисты получают востребованные на рынке знания и навыки в условиях реальных проектов с выбором удобной им загрузки