6 апреля 2013 г. в омском филиале Luxoft прошел пятый IT-субботник – открытая встреча для IT-специалистов. Максим Юнусов, тренер Luxoft Training по анализу и проектированию ПО, представил доклад «Архитектура в Agile проекте».
В своем выступлении Максим рассказал об архитектуре в «раннем» и в «развитом» Agile, принципах дизайна, мифе о рефакторинге и факторах качества по Бертрану Мейеру, а также о качествах, ценных в Agile, и архитектурных взаимодействиях в Agile проектах.
Концепция построения процесса тестирования в Agile проектах: 3+1
Архитектура в Agile проекте
1. ИТ-субботник
Омск
6 апреля 2013
Архитектура в Agile
проекте
Максим Юнусов
E-mail: myunusov@luxoft.com
Skype: myunusov
2. Докладчик
Java разработчик и архитектор компании Luxoft
Консультант по анализу и проектированию ПО
Тренер
– Курсы по программированию на языке Java
– Курсы подготовки архитекторов
– Курсы по различным методологиям и практикам разработки
ПО
– Курсы по продуктам и методологии Rational
4. Архитектура в классическом понимании
Архитектура -
это базовая организация системы,
воплощенная в ее компонентах, их отношениях между
собой и с окружением,
а также принципы, определяющие проектирование и
развитие системы
[IEEE 1471]
Ключевой принцип RUP («Дух RUP»)
создавать архитектурный каркас как можно раньше
5. Agile-манифест разработки ПО
Люди и взаимодействие важнее процессов и инструментов
Работающий продукт важнее исчерпывающей
документации
Сотрудничество с заказчиком важнее согласования
условий контракта
Готовность к изменениям важнее следования
первоначальному плану
http://agilemanifesto.org/iso/ru/
6. Архитектура в “раннем” Agile
Большое и Подробное Предварительное
Проектирование
«Отлить в граните»
7. Архитектура в “раннем” Agile
(продолжение)
Рефакторинг
Реактивный подход
«Решим эти проблемы позже» (“fix-it-later”)
Вносите в проект лишь такие изменения, которые могут
указать дорогу к возможностям его улучшения
[Оуэр (Auer) и Бек (Beck) (Auer и Beck, 1996)]
8. Миф о рефакторинге
Рефакторинг сделает вам архитектуру
Исправление архитектурных проблем на поздних фазах
проекта (после написания кода) стоит в сотни раз
дороже, чем на этапе первичного конструирования
системы
9. Проблемы
неизбежная неразбериха на старте
катастрофические «авралы» с
массовым рефакторингом и
переделками практически на каждой
очередной итерации
реюз – безусловное зло
низкое качество продукта («работает, и
ладно»)
«эффект автобуса»
10. Принципы дизайна
S (SRP) Принцип единственной обязанности
O (OCP) Принцип открытости/закрытости
L (LSP) Принцип подстановки Лискоу
I (ISP) Принцип разделения интерфейса
D (DIP) Принцип инверсии зависимостей
11. Архитектура в “развитом” Agile
термин "архитектура" передает идею основных
архитектура
элементов системы, тех ее частей, которые трудно
изменить. Они являются фундаментом, на котором
изменить
можно построить все остальное
[Статья "Проектирования больше нет?", Мартин Фаулер 2004 г.]
loan архитектура ?
инкрементальная архитектура ?
13. Архитектурные взаимодействия в Agile
проектах
Предварительное
планирование
Доска задач и баклог
Участие в спринте
Работающая система
[James Madison http://www.infoq.com/articles/agile-architecture]
14. Предварительное планирование
принимает основные решения по аппаратному и
программному обеспечению
определяет важные шаблоны проектирования на
высоком на детальном уровне
определяет основные возможности для повторного
использования компонентов и сервисов
создает высокоуровневые диаграммы
описывает атрибуты качества
определяет каналы взаимодействия встречаясь с
заинтересованными лицами (stakeholders), чтобы понять
их проблемы и показать им основное техническое
направление
15. Описывает атрибуты качества
Атрибуты качества представляют формальное выражение факторов
качества ПО
Внешние факторы Внутренние факторы
Могут быть обнаружены Понятны только для
пользователями профессионалов
17. Качества ценные в Agile
Модульность Тестируемость
Простота Ясность
VS
18. Определяет важные шаблоны
проектирования на высоком и на
детальном уровне
базируясь на нефункциональных требованиях и
архитектурных мотивах
Примеры
– Паттерны DDD
– DSL
– Onion
– MVP
– DCI
19. Определяет основные возможности для
повторного использования компонентов
и сервисов
«Горизонтальное» разделение труда
Ключевые механизмы
Архитектурный «довесок» к Scrum (stand-up) митингу
20. Принимает основные решения по
аппаратному и программному обеспечению
(hardware and software)
в основном используя существующие корпоративные
стандарты
приводит “доказательства правильности концепции”
(proofs-of-concept) при необходимости использования
новых продуктов
“работает только простое”
22. Групповое ревью (Inspection, team review)
С некоторой периодичностью вся команда собирается перед
проектором и оценивает новые архитектурные решения
–Повышается эффективность ревью за счет количества
рецензентов
–Способствует передаче знаний и взаимному обучению
–Обеспечивает приятие архитектурных решений всей командой
(commit от каждого разработчика)
"Коллективный архитектор"
23. Доска задач и баклог
Архитектор должен посещать ранние сессии по
определению задач на доске (storyboarding) и добавлять
архитектурные user story, которые задают фундамент
или определяют архитектурное направление
Архитектор должен посещать последующие сессии по
определению задач на доске между спринтами, чтобы
вносить архитектурные user story, которые
«настраивают» архитектуру или корректируют
нежелательные отклонения
Архитектор должен работать с product owner-ом, чтобы
приоритезировать эти истории и построить их в
соответствии с бизнес функциональностью в спринтах
24. Архитектурный баклог
Ключевые механизмы
Часть задач может быть не выполнена,
рекомендуется их приоритезация
25. Участие в спринте
Доверяй команде
Ad-hoc ревью
Участие в реализации оправданно, если спринт сошел с
верного пути в архитектурном или другом смысле
Основополагающие принципы Agile-манифеста Мы следуем таким принципам: Наивысшим приоритетом для нас является удовлетворение потребностей заказчика, благодаря регулярной и ранней поставке ценного программного обеспечения. Изменение требований приветствуется, даже на поздних стадиях разработки. Agile-процессы позволяют использовать изменения для обеспечения заказчику конкурентного преимущества. Работающий продукт следует выпускать как можно чаще, с периодичностью от пары недель до пары месяцев. На протяжении всего проекта разработчики и представители бизнеса должны ежедневно работать вместе. Над проектом должны работать мотивированные профессионалы. Чтобы работа была сделана, создайте условия, обеспечьте поддержку и полностью доверьтесь им. Непосредственное общение является наиболее практичным и эффективным способом обмена информацией как с самой командой, так и внутри команды. Работающий продукт — основной показатель прогресса. Инвесторы, разработчики и пользователи должны иметь возможность поддерживать постоянный ритм бесконечно. Agile помогает наладить такой устойчивый процесс разработки. Постоянное внимание к техническому совершенству и качеству проектирования повышает гибкость проекта. Простота — искусство минимизации лишней работы — крайне необходима. Самые лучшие требования, архитектурные и технические решения рождаются у самоорганизующихся команд. Команда должна систематически анализировать возможные способы улучшения эффективности и соответственно корректировать стиль своей работы.
Архитектурные взаимодействия в Agile проектах Автор: James Madison http://www.infoq.com/articles/agile-architecture
http://agilerussia.ru/practices/agile-architecture-interactions/ В Agile проекте каждая функция архитектора начинается с предварительного планирования, как это в основном происходит и в других проектах, не зависимо от методологии. Архитектор: принимает основные решения по аппаратному и программному обеспечению (hardware and software), в основном используя существующие корпоративные стандарты, и возможно приводит “доказательства правильности концепции” (proofs-of-concept) при необходимости использования новых продуктов; определяет важные шаблоны проектирования на высоком[3] на детальном[4] уровне; определяет основные возможности для повторного использования компонентов и сервисов; создает высокоуровневые диаграммы; описывает атрибуты качества[5], технические и бизнес, и определяет их допустимый уровень[6]; и определяет каналы взаимодействия встречаясь с заинтересованными лицами (stakeholders), чтобы понять их проблемы и показать им основное техническое направление. Хотя большинство из этих пунктов не отличается от работ в не-Agile подходах, предварительные работы по архитектуре для Agile разработки содержат небольшое, но важное отличие.Архитектура скорее должна включать набор опций, чем специфическое решение.Такой подход основывается на Agile допущении, что эмпирические знания, собранные всеми участниками при построении системы, сделают лучшие опции более очевидными[7].Результат будет успешным, если архитектор не ограничивается одним решением слишком рано, и особенно это важно при Agile разработке. Использование итераций, создание работающей системы после каждой итерации, поощрение взаимодействия, имеет обратный эффект, который дает всем участникам значительные возможности, чтобы найти лучшие решения позже, если они не смогли понять их раньше[8].
Предварительное планирование быстро переходит в определение задач на доске (storyboarding) и в построение баклогов продукта и отдельного спринта, причем архитектор является основным заинтересованным лицом (stakeholder).Архитектор должен посещать ранние сессии по определению задач на доске (storyboarding) и добавлять архитектурные user story, которые задают фундамент или определяют архитектурное направление.Он или она должны также посещать последующие сессии по определению задач на доске между спринтами, чтобы вносить архитектурные user story, которые “настраивают” архитектуру или корректируют нежелательные отклонения. Архитектор должен работать с product owner-ом, чтобы приоритезировать эти истории и построить их в соответствии с бизнес функциональностью в спринтах. Архитектор часто становится движущей силой на сессиях по определению задач на доске, поскольку у него или нее есть всеобъемлющие знания о бизнесе и технологиях.Я обнаружил, что хороший архитектор может определить требования на доске задач, исходя из бизнеса, объяснить технические ограничения людям из бизнеса, объяснить потребности бизнеса в технических терминах команде.Когда архитектор делает это, он или она может помочь всем сторонам достичь успеха, плавно интегрируя архитектурные user story в доску задач и в баклог.
Написание кода – это мощный способ убедиться в том, что архитектор полностью понимает создаваемую архитектуру [10] . Но мы будем допускать, что организация получает большую ценность от того, что использует архитекторов сразу на нескольких проектах, хотя при этом снижается их способность вникнуть во все детали одного проекта.К счастью, agile предлагает решение—доверяй команде. Для этого нужно,чтобы архитектор взаимодействовал с командой во время спринта, понимая цели и помогая решить возникающие проблемы дизайна [11] .Чтобы справиться одновременно с несколькими проектами, архитектор должен оставить специфику команде. Пока ревью архитектуры работающей системы показывает высокое качество архитектуры, архитектор может оставлять детали членам проектной команды, будучи уверенным, что их общие знания и глубокое знание задачи будут направлять работу над системой в нужное русло. Поэтому, реальное участие в реализации оправданно, если спринт сошел с верного пути в архитектурном или другом смысле.В такое время архитектор становится полноправным членом команды, размещается вместе с ней, и полностью подчиняется задачам команды.