Разработчик, аналитик, заказчик — как найти общий...

53
Разработчик, аналитик, заказчик — как найти общий язык? Николай Гребнев CUSTIS

description

В проектах по разработке программного обеспечения участвуют множество различных специалистов, у которых разные роли, разные специализации, своя терминология, свой жаргон. И часто в проекте люди не понимают друг друга. Заказчики не понимают, почему те или иные доработки стоят так дорого. Аналитики вынуждены выступать переводчиками между пользователями и разработчиками. А разработчики работают сразу с двумя моделями системы — с моделью представленной аналитиками и моделью реализованной в коде. Это приводит к тому, что основные усилия расходуются не на разработку полезного функционала, а на попытки удержать обе модели в голове и сопоставить их друг с другом. Методология Domain Driven Design (проектирование на основе предметной области — далее DDD) для решения этой проблемы предлагает в качестве единой опорной точки использовать модель предметной области. Такая модель хорошо понятна заказчикам, служит отличным инструментом для аналитиков. Но важной особенностью такой модели является то, что она может быть напрямую реализована в коде, а значит, пригодна для использования разработчиками. При принятии решения всегда встают вопросы: – Что такое Domain Driven Design? – На каких проектах можно применить DDD? Является ли мой проект таким? – Какова цена и какие риски? – Какие типичные ошибки ждут на пути?

Transcript of Разработчик, аналитик, заказчик — как найти общий...

Page 1: Разработчик, аналитик, заказчик — как найти общий язык?

Разработчик, аналитик, заказчик — как найти общий язык?

Николай ГребневCUSTIS

Page 2: Разработчик, аналитик, заказчик — как найти общий язык?

СитуацияОрганизация

Процесс(ы)

ИС

Page 3: Разработчик, аналитик, заказчик — как найти общий язык?

Процесс разработки информационной системы

Page 4: Разработчик, аналитик, заказчик — как найти общий язык?

Участники• Заказчик:– Методологи– Пользователи– Руководство

• Исполнитель:– Аналитики– Разработчики– Тестировщики– Руководители

Page 5: Разработчик, аналитик, заказчик — как найти общий язык?

У каждого участника свое представление о ИС

Page 6: Разработчик, аналитик, заказчик — как найти общий язык?

Каждый говорит на своем языке

Page 7: Разработчик, аналитик, заказчик — как найти общий язык?

Заказчик• SDH• Оптическая секция• Сетевой элемент• СПК (сеть пакетной коммутации)• Тракт• …

Page 8: Разработчик, аналитик, заказчик — как найти общий язык?

Аналитик• Документ• Справочник• Состояние• …

Page 9: Разработчик, аналитик, заказчик — как найти общий язык?

Разработчик• Класс• Метод• Синглтон• SOLID• Датасет• Биндинг• …

Page 10: Разработчик, аналитик, заказчик — как найти общий язык?

Руководитель• Сроки• Бюджет• …

Page 11: Разработчик, аналитик, заказчик — как найти общий язык?

Проблемы• Непонятно, что делать• Сделали не то• Не можем обосновать стоимость работ

Page 12: Разработчик, аналитик, заказчик — как найти общий язык?

Непонятно, что делать

Page 13: Разработчик, аналитик, заказчик — как найти общий язык?

Сделали не то

Page 14: Разработчик, аналитик, заказчик — как найти общий язык?

Стоимость работ

Page 15: Разработчик, аналитик, заказчик — как найти общий язык?

Кто виноват?

Page 16: Разработчик, аналитик, заказчик — как найти общий язык?

Что делать?

Page 17: Разработчик, аналитик, заказчик — как найти общий язык?

Domain Driven Design (DDD)

Page 19: Разработчик, аналитик, заказчик — как найти общий язык?

Domain Driven Design• Единый язык (модель)• основанный на предметной области• непосредственно воплощенный в исходном

коде (проектирование по модели, Model Driven Development)

Page 20: Разработчик, аналитик, заказчик — как найти общий язык?

Единый язык

Переработка знаний

Модель предметной

областиЕдиный

язык

Page 21: Разработчик, аналитик, заказчик — как найти общий язык?

Переработка знаний– поиск системы абстрактных понятий, учитывающей все необходимые подробности

Page 22: Разработчик, аналитик, заказчик — как найти общий язык?

Все участники проекта используют единый язык

Page 23: Разработчик, аналитик, заказчик — как найти общий язык?

Все требования формулируются в терминах модели предметной области

Page 24: Разработчик, аналитик, заказчик — как найти общий язык?

Единый язык основан на предметной области

Page 25: Разработчик, аналитик, заказчик — как найти общий язык?

Основан на предметной области• Понятия языка имеют смысл в предметной

области• В основе модели лежит представление всех

участников проекта о предметной области

Page 26: Разработчик, аналитик, заказчик — как найти общий язык?

Основан на предметной области, а не на особенностях используемых технологий

Page 27: Разработчик, аналитик, заказчик — как найти общий язык?

Основан на предметной области

Кадровое делопроизводство

Датасет с таблицей сотрудников

Команда на обновление

Соединение с БД

Page 28: Разработчик, аналитик, заказчик — как найти общий язык?

Основан на предметной области

Личное дело сотрудника

Табель УРВ

Сотрудник

Кадровое делопроизводство

Page 29: Разработчик, аналитик, заказчик — как найти общий язык?

Единый язык непосредственно воплощен в исходном коде

Page 30: Разработчик, аналитик, заказчик — как найти общий язык?

Воплощен в исходном коде• Требование:– Зачислить сотрудника в подразделение

начиная с заданной даты

Page 31: Разработчик, аналитик, заказчик — как найти общий язык?

Воплощен в исходном кодеDepartmentHistoryRepository.Remove( from dh in DepartmentHistoryRepository where dh.EmployeeId = employee.Id && dh.DateStart >= date select dh);

var dhe = from dh in DepartmentHistoryRepository where dh.EmployeeId = employee.Id && dh.DateStart <= date && dh.DateEnd >= date select dh;dhe.DateEnd = date.AddDay(-1)

DepartmentHistoryRepository.CreateNew( employee, date);

Page 32: Разработчик, аналитик, заказчик — как найти общий язык?

Воплощен в исходном коде

подразделение.Зачислить( сотрудник, дата);

Page 33: Разработчик, аналитик, заказчик — как найти общий язык?

ЧТО МЫ ПОЛУЧАЕМ?

Page 34: Разработчик, аналитик, заказчик — как найти общий язык?

Domain Driven Design• Средство для формулировки требований и

общения• Адекватное отражение сложности системы• Обоснованную стоимость работ

Page 35: Разработчик, аналитик, заказчик — как найти общий язык?

Обоснованная стоимость работ

Большая сложность изменений

Масштабные изменения моделиВведение новых понятий

Высокая стоимость

Page 36: Разработчик, аналитик, заказчик — как найти общий язык?

СКОЛЬКО ЭТО СТОИТ?

Page 37: Разработчик, аналитик, заказчик — как найти общий язык?

Из чего складывается стоимость?

Page 38: Разработчик, аналитик, заказчик — как найти общий язык?

Много общения и согласованийПлотная работа с заказчикомВысокая прозрачность системыМеньше гибкости на стороне исполнителя

Page 39: Разработчик, аналитик, заказчик — как найти общий язык?

Разработчики должны участвовать в построении модели предметной областиОбщение с заказчикомКомпетенции аналитика у разработчика

Page 40: Разработчик, аналитик, заказчик — как найти общий язык?

Ограничения накладываемые инструментамиНе все, что можно придумать, можно реализовать.

Page 41: Разработчик, аналитик, заказчик — как найти общий язык?

Риск неправильно спроектировать модель предметной области

Page 42: Разработчик, аналитик, заказчик — как найти общий язык?

А НУЖНО ЛИ ЭТО?

Page 43: Разработчик, аналитик, заказчик — как найти общий язык?

На каких проектах применять DDD?

Page 44: Разработчик, аналитик, заказчик — как найти общий язык?

Основная сложность задачи заключена в предметной области

Page 45: Разработчик, аналитик, заказчик — как найти общий язык?

Очень широкая граница, о которой необходимо договариваться с заказчиком

Page 46: Разработчик, аналитик, заказчик — как найти общий язык?

ПРИМЕР

Page 47: Разработчик, аналитик, заказчик — как найти общий язык?

Распределение товаров по магазинам

• Сложная предметная область• Информационные потоки и бизнес-процесс

определяет заказчик• Технические сложности преодолимы

Page 48: Разработчик, аналитик, заказчик — как найти общий язык?

АНТИПРИМЕР

Page 49: Разработчик, аналитик, заказчик — как найти общий язык?

Система обмена сообщениями с высокой пропускной способностью

• Простая постановка задачи• Информационные потоки и бизнес-процесс

(обмен сообщениями) определяет исполнитель

• Высокая техническая сложность

Page 50: Разработчик, аналитик, заказчик — как найти общий язык?

ТИПИЧНАЯ ОШИБКА

Page 51: Разработчик, аналитик, заказчик — как найти общий язык?

Модель предметной

областиКод

Переработка знаний

Page 52: Разработчик, аналитик, заказчик — как найти общий язык?

Модель предметной

области

Модель приложения

Page 53: Разработчик, аналитик, заказчик — как найти общий язык?

СПАСИБО

Докладчик: Николай Гребневe-mail: [email protected]: ngrebnev