ДЮДЮКИ:
Самая известная
TDD
Test-Driven Development
практика
Нынче очень модное
направление проектирования
DDD Сменщик
Test-Driven Design BDD TDD
Behaviour-Driven Development
Одна из самых
навороченных
FDD Agile-методологий
VDD
Как затуманить
заказчику мозги
Feature-Driven Development
Value-Driven Development
История
1997 год: проект для большого сингапурского банка
длительность: 15 месяцев
команда: 50 чел
Jeff De Luca
под влиянием подхода Peter Coad-а к моделированию бизнес-процессов
Интересные факты из биографии:
• родился в 1964 году
• в 1981 году в возрасте 17-ти лет бросил школу и пошел
работать в IBM
• быстро стал системным инженером, так и не получив
высшего образования (самоучка)
• в 1993 ушел из IBM (с должности системного стратега)
и организовал собственную компанию
• в 1995-1999 гг. выполнил полный реинжениринг
автоматизации крупного сингапурского банка
А XP родилось на
маленьком in-house
проекте, который
кончился fail-ом…
Ну и что! Scrum вообще
предлагает
противоестественное
масштабирование при
помощи
Scrum-of-Scrum
История
1999 год: книга «Java Modeling in Color With UML»
один из соавторов книги – Jeff De Luca (вместе с Peter Coad и Eric
Lefebvre)
в 6-ой главе было дано краткое описание FDD
Feature
Шаблон именования Feature (функции):
<действие> <результат> <кем|чем|чего|для|к> <объект>
<action> the <result> <by|for|of|to> a(n) <object>
Примеры:
Вычислить суммарный объем продаж
Calculate the total amount of a Sale
Определить последнее изменение наличных в кассе для кассира
Determine the most recent Cash Register Assignment for a Cashier
Всегда в терминологии предметной области!
Должна быть понятна значимость для бизнеса
Очень похоже на
User Story,
но нет необходимости
изобретать персонажи…
Группировка
Область (Major Feature Set, Subject Area) АРМ Кассира
Набор (Feature Set, Activity) Оплата товара
Функция (Feature) Снять деньги с карточки
Дык, это же полный
аналог Themes и Epics
при работе с User Stories
Требования к Feature List
Каждая feature должна быть простой
Каждая feature должна быть ценна
(хотя бы понятна) заказчику
Каждая feature должна быть
проверяема
Каждый feature set может быть
закреплен за ведущим разработчиком
(Chief Developer)
Feature List должен быть коротким
(на столько, на сколько возможно)
Схема процесса
Разработка Составление Планирование
общей модели списка функций
Список функций План разработки
(Feature list) (A development plan)
1 – 3 недели
Design by Build by feature
Диаграмма классов feature
предметной области
Отгрузка!
Вау! Здесь есть
начальная фаза
проекта!!!
Чувствуется, что автор из
IBM…
Процесс по шагам 1:
создание общей модели
42
Участвуют:
Главный архитектор
Ведущие разработчики (Chief Developers)
Эксперты в предметной области
Подготовка к созданию:
Выслушивают эксперта в предметной области
По необходимости изучают документы
Обсуждения между собой
Наконец-то
знакомые роли!
Архитектор, ведущий
разработчик – и снова
здравствуйте
Процесс по шагам 1:
создание общей модели
44
Создание модели:
Обязательно разбиваются на небольшие группы
Каждая группа создает свою модель (диаграмму классов)
После этого собираются все вместе, обсуждают различия,
выбирают/формируют итоговые решения
В результате:
Диаграмма классов (без детализации)
Комментарии почему выбрано такое решение,
альтернативные решения
UML и создание
«конкурирующих»
моделей – мне это
определенно нравится!
Тоже мне, открыли
Америку – всё это
известно со времен
Model-Driven
Development/Architecture
(MDD/MDA)
Процесс по шагам 2:
формирование Feature List
47
Участвуют:
Как и при формировании общей модели
В результате:
Feature List,
сгруппированный в наборы (Feature Set),
разделенные по областям (Subject Area)
Интересно, а как потом
учитываются изменения
в требованиях и сколько
сил на это уходит?
Процесс по шагам 3:
планирование
49
Основания для планирования:
Наборы функций – итерации
Последовательность итераций определяется исходя из:
взаимосвязи функций с точки зрения реализации
сложности набора функций
наличия рисков при реализации функций
равномерное распределение загрузки разработчиков
Участвуют:
Руководитель проекта
Ведущие разработчики
В результате:
График реализации наборов функций (Набор – дата)
Ведущие программисты, закрепленные за наборами (Набор – ответственный)
Всем классам назначены владельцы (Класс – владелец)
Что-то это уже
конкретно попахивает
водопадом…
Да еще персональное
владение кодом… Бррр
Для тех, кто успел забыть
схему процесса:
Разработка Составление Планирование
общей модели списка функций
Список функций План разработки
(Feature list) (A development plan)
1 – 3 недели
Design by Build by feature
Диаграмма классов feature
предметной области
Отгрузка!
Процесс по шагам 4:
Design by feature
53
Задачи:
Формирование команд на итерацию
ведущие разработчики динамически формируют команды на итерацию
исходя из того, какие классы затрагивает реализация заданного набора функций
(берутся их владельцы)
обычно команды не большие (около 5 человек)
(to be continued)
Процесс по шагам 4:
Design by feature
55
Задачи:
(продолжение)
Обзор затрагиваемой предметной области
Изучение необходимых документов
Составление диаграмм взаимодействия
Уточнение и детализация соответствующей
части диаграммы классов
Написание заголовков методов
В результате:
Краткое описание набора функций, дополнительные комментарии
Диаграммы взаимодействия
Объектная модель (уточнения, исправления), заголовки классов
Задания (To Do) в системе ведения дел для каждого участника команды
Вот! Спецификация API и
персональное назначение
задач – сразу чувствуется
старая школа! И никаких,
понимаешь, соплей про
самоорганизацию и кросс-
функциональность…
Процесс по шагам 5:
Build by feature
57
Задачи:
Реализация классов и методов
Code Inspection (Code Review)
до unit-тестирования!
самой командой или даже другой (по решению ведущего программиста)
Unit-тестирование
тесты на класс пишет сам владелец класса
Интеграция (Promote to Build)
Уточнение и детализация соответствующей части диаграммы классов
В результате:
Проинспектированные классы и методы
Классы, допущенные в основной ствол проекта
Реализованная функциональность, понятная заказчику (client-valued features)
Супер: вместо парного
программирования – Code
Inspection/Review; а вместо
мантры «Red-Green-Refactor»
– просто написание Unit-
тестов (причем после
реализации).
Ну и правильно! Всё равно
опросы общественного
мнения показывают, что в
парах мало кто кодит, да и
тесты до реализации писать
дико – некомпилится ведь!
Важный нюанс
• в FDD нет жесткого time-boxing-а итерации:
– итерация не заканчивается, пока все взятые в
неё feature-и не доделают
– т.е. недоделанные feature-и не перетекают в
следующую итерацию – их дожимают в
текущей, растягивая оную
Эта штука посильнее
будет всяких
Burn-down-ов и –up-ов:
и бизнесам показать не
стыдно, и на конфе
козырнуть.
Уровень процессов
Управление
проектами SCRUM Индикация
прогресса
Управление
проектом Самоорг. команда, Перечень
Daily Meetings требований,
Итерации
Unit-тесты, FDD
Стандарт
кодирования,
Кодирование XP Cont. Integration
Жесткость
процессов
Анархия Водопад
--------- Как некий итог ---------
История
2004 год
Eric Evans
«Domain-Driven Design - Tackling Complexity in the Heart of Software»
Domain (словарь)
• наследственная собственность; имение,
поместье; земли; владение e.g. DNS
• территория, зона, область, район
(отмеченные некоторыми физическими
особенностями)
• сфера (интересов), поле (деятельности),
область (знаний) В данном случае
этот смысл
• область определения (мат.)
Домен поля
таблицы в БД
«Attention was diverted away
from rich logic and deep solutions,
because there was so much value
in just getting data onto the web,
along with very simple behavior.
But now that basic level of web
usage has largely been
assimilated, and projects are
starting to get more ambitious
again about business logic.»
Еще раз вспомним про FDD:
Разработка Составление Планирование
общей модели списка функций
Список функций План разработки
(Feature list) (A development plan)
1 – 3 недели
Design by Build by feature
Диаграмма классов feature
предметной области
Отгрузка!