Дорогой Хабр, мы решили поделиться заметками и нашим базовым рецептом о приготовлении проектов в Sparx Enterprise Architect. Причем под проектом мы подразумеваем создание какой-либо информационной системы. Впереди вас ждет рассказ о том, как у нас все организовано – примеры диаграмм, структура проекта в Enterprise Architect, немного о требованиях, проектировании и постановках на разработку.
1. Вместо предисловия
1.1. Про начало
Давным-давно, в далёкой-далёкой галактике… Не, не то. Давным-давно, кажется, в прошлую пятницу мы решили, что, пожалуй, хватит ворда, бумаги, отдельных задач jira и т.п. – пора использовать что-то более подходящее. Стало неудобно, так как всё путалось в кросс-ссылках, в разных способах поддерживать историчность и нескольких подходах. Так начался наш путь к использованию Enterprise Architect (EA). Почему хватит? Причин очень много. У каждого из участников процесса она своя. Основная причина – абсолютная власть.
Дарт Сидиус проводит анализ влияния. Синим цветом показаны зависимости (кадр из фильма “Звёздные войны: Эпизод 3 – Месть Ситхов”)
Абсолютная власть в том смысле, что нам очень хотелось влиять на умы и править всеми понимать связи между элементами создаваемых информационных систем (элементы в широком смысле — не только то, что разрабатывается и работает потом, но и требования, и спецификации и прочее, что использовано при создании системы) и не просто понимать, а ещё и быстро эти самые связи находить, анализировать, показывать заказчику, для которого “любое изменение можно реализовать за один день и непонятно, почему вам нужно две недели”.
Совершенно справедливый вопрос — “Почему вы выбрали именно Enterprise Architect, а не любой другой инструмент?” На момент, когда процесс начался, в нашем активе были jira, confluence, MS office, SP, Sybase Power Designer (сейчас это SAP Power Desiner) и Sparx Enterprise Architect. Собственно, вопрос решили личные предпочтения и навыки EA на тот момент (это были 2011-2012 годы), а также люди, которые были первопроходцами и отдали сердца и умы Enterprise Architect. Возможно, это было ошибкой.
1.2. Немного капитанства
Основные этапы жизни проекта по созданию информационной системы (да и в целом, наверно, почти любого проекта с точностью до определения каждого этапа) вполне очевидны – как по ГОСТ, так и просто исходя из здравого смысла. Это:
- концепция,
- эскиз,
- техническое задание (сбор и выявление требований),
- техническое проектирование (разработка архитектуры),
- рабочее проектирование (разработка и дизайн),
- внедрение,
- эксплуатация и сопровождение.
Примечание: номера здесь для наглядности – этапы могут быть совмещены, не иметь чётких границ, уходить в итерации и т.п.
Для концепций мы пока не применяем Enterprise Architect, так как обычно нужно все делать быстро, срочно, очень красиво. Так что это word, visio c различными расширениями или иные рисовалки (где ну вообще красота). Эскиз, к сожалению, заказчика не интересует, хотя мы бы и рады готовить его в EA. Два последние пункта – это или про ошибки (они решаются (во всяком случае у нас) иными средствами и инструментами) или про доработки, и тогда это всё заворачивается в пункты 3-5.
Поэтому поговорим про такие этапы, как техническое задание (сбор и выявление требований), техническое проектирование (разработка архитектуры), рабочее проектирование (разработка и дизайн).
1.3. Для тех, кому не терпится попробовать результат (спойлер)
Приносим извинения за мутные рисунки – это всё NDA и прочее зло добро. Но уверяю, кто уже в команде, у того картинка чёткая.
Диаграмма компонентов (в данном случае каждый компонент – это один модуль развёртывания), связей между ними, базовых протоколов.
Диаграмма развёртывания общего программного обеспечения по узлам, с указанием основных связей
2. Про рецептуру
2.1. Ингредиенты
Вот основное, что вам нужно.
- Дискомфорт – если вам комфортно в вашем текущем процессе создания информационной системы, если всё устраивает, значит или у вас уже есть EA (может, что-то подобное), или вам он не нужен, и у вас и так всё отлично.
- Метамодель системы – понимание и описание того, как и в каких понятиях система будет описана.
- Формальный язык – естественный язык не очень хорошо подходит для того, чтобы точно и компактно передать смысл сообщения (на наш взгляд). И тут приходит на помощь формальный язык. Мы использовали UML.
- Знания Enterprise Architect – хотя бы минимальные, но чем больше у вас желаний вроде версионирования, разграничения доступа, работы в одном проекте и т.п., тем глубже погружение – вплоть до разработки своих модулей к EA (у нас их пока нет).
Не помешает:
- Терпение и гибкость. Несгибаемая жёсткость — не наш девиз. Внедрение нового подхода, какие-то серьёзные изменения в старом – это тяжело (особенно в первый раз). Будет много вопросов, ошибки, инертность, откровенное сопротивление, поэтому нужно терпеть и приходить к компромиссам и учитывать это в вашем персональном рецепте. Например, мы теперь совершенно спокойно относимся к исключительным ситуациям, когда EA становится просто инструментом, чтобы документировать и хранить уже сделанное. Дальше мы остановимся на этом на примере работы с требованиями.
- Здоровая лень и вкусный кофе. Лень в том смысле, что лень делать много рутины, которую можно автоматизировать. Это правильно, на наш взгляд. Так, например, мы окончательно обленились писать документы – создаём их из EA. Правда, в ряде случаев это документы по ГОСТ, и тогда мы это делаем в два этапа – сначала «мясо» из EA, а потом скриптами VBA наши доблестные технические писатели превращают это в ГОСТ. Ну а кофе – без него, конечно, можно, но куда без него? Мы очень любим сорт java.
Ах да, чуть не забыл – еще нужна дружная и заражённая энтузиазмом команда. Без этого никуда. У нас как раз такая.
2.1.1. Про дискомфорт
Для нас этим были:
- Разные инструменты – хотим один.
- Отсутствие централизации в описаниях системы (хочется перестать вести себя как белка, которая где-то спрятала орех и забыла где) – одно хранилище для всего.
- У нас нет
абсолютной властивозможности провести быстрый анализ влияния – хотим знать, что развалится, если мы разделим компонент на два или что заденет изменение сценария работы системы и т.п. - Надоело писать документы – хочется, чтобы «щёлк» и документ был.
2.1.2. Про метамодель
На наш взгляд, осознанно или подсознательно практически любая команда людей, вовлечённая в процесс создания чего-либо, может про это рассказать: что она создаёт, из чего это состоит, как работает и т.д. Может быть, не очень красиво или связно, может, с «дырами» в изложении. Но, тем не менее, может. Так и в случае с созданием информационной системы. На верхнем уровне мы наверняка все представляем, что есть требования – функциональные и какие-то ещё, важные и не очень, чёткие и размытые, есть что-то, что показывает базовые принципы воплощения этих требований – какие блоки в системе, какие основные технологии использованы, что систему окружает, как всё это между собой связано. Есть детализация и требований, и принципов реализации, описание структур данных и т.п. Все эти основные части и правила связи между ними мы и назвали «метамоделью».
Наша метамодель. Красавица!
В нашем рецепте метамодель достаточно фигуриста – наметим её контуры и дальше рассмотрим каждую часть чуть детальнее:
- требования,
- структура информационной системы,
- постановки,
- дизайн.
2.1.3. Про язык
Не можем похвастаться долгими муками выбора, так как мы практически сразу выбрали UML как наиболее распространённый вариант. Ну и «понеслась». Наверняка можно бы использовать различные связки различных языков и нотаций и, наверно, мы к этому придём, выбрав для каждой из частей метамодели свой, но пока мы счастливо избавлены и от мук выбора, и от скрещивания нотаций и языков.
2.1.4. Про знания Enterprise Architect
В самом начале знаний не было. В смысле, конечно, были, но фрагментарные, о том, как работать одному или как формировать простые документы. В общем, глядя назад, поражаешься нашим слабоумию и отваге уверенности в себе и скорости обучения. С тех пор, погружаясь всё больше в пучины Enterprise Architect, мы всё равно открываем для себя новые горизонты. Сейчас мы владеем следующими аспектами: работа с проектом EA и элементами, версионирование, разграничение доступа, генерация документов.
2.2. Готовка
Итак, у нас есть дискомфорт, метамодель, формальный язык, знания Enterprise Architect, дружная команда, лень, кофе, терпение и гибкость.
Теперь нужно взять EA, создать в нём проект, создать структуру согласно нашей метамодели и начать вносить элементы и связи.
Пробуем – смотрим на результат, оцениваем – понравилось, применяем дальше. Не понравилось – корректируем метамодель, обновляем элементы, связи и так пока не приготовим.
Как понять, что не понравилось? Вам не нравится, вам ещё больше неудобно, вы не ощущаете пользы. Как-то очень банально и неопределённо, да? Вы совершенно правы, дорогие читатели. Но каких-то очень чётких и строгих критериев для общего случая предложить сложно, да и, наверно, не нужно. Но мы, конечно, поделимся нашим опытом.
2.2.1. Про проект (который в EA)
Проект в Enterprise Architect состоит из набора корневых пакетов.
В свою очередь, каждый корневой пакет может содержать другие пакеты. А каждый обычный пакет – элементы (здесь под элементами подразумеваются элементы EA) и диаграммы.
Корневые каталоги могут быть размещены локально – в EAP файле, а могут – централизованно в базе данных. Кроме этого каждый пакет может быть сохранён в виде xml в репозиторий системы контроля версий.
С хранением проекта в БД мы не справились. Сначала это было классно – изменения отражались у всех, но спустя какое-то время у нас начались ошибки, какие-то непонятные ситуации с исчезновением элементов и т.п. В итоге мы плюнули это лечить и на время забыли. Но систему контроля версий мы потянули и прикрутили SVN.
Проект в Enterprise Architect
В самом примитивном варианте вы можете создать основные части вашей метамодели как корневые пакеты или пакеты первого уровня и получить структуру для хранения элементов модели и связей между ними. В нашем примере чуть сложнее, так как какие-то из этих частей размазаны по пакетам первого уровня. Но в целом принцип прослеживается. Кроме этого, «прикрутив» SVN мы получили возможность работы с ветками и релизами и разграничение доступа по принципу «один пакет – один владелец».
2.2.2. Про требования
Требование (как элемент EA) выглядит вот так:
Пример требования про обеспечение электронного взаимодействия
Так выглядит преобладающее большинство элементов EA для UML (так что видел один – видел и остальные).
Метамодель, в части требований, у нас достаточно скучная – ниже как раз эта часть более крупным планом.
В целом сказать чего-то особенного нечего – создаём требование, формулируем его и, при необходимости, связываем с другими требованиями. Но есть одно «но» – у нас требования в стадии активного выявления и сбора не прижились в EA. И мы шлёпаем их по старинке – напрямую в word.
Неоднократно задумывались, почему так происходит. На текущий момент мы пришли к следующим выводам.
- Заказчики у нас любят (и для нас это немного странно) word и excel. Ну, понятно, презентации (да ещё и красивые). Ничего другого не хотят видеть.
- Мы не научились быстро и удобно для себя работать с EA в части требований, когда их нужно формировать и согласовывать очень быстро. Но мы думаем, что у нас в итоге получится, работаем над этим, и есть надежда, что следующий вал требований уйдёт именно в EA.
Как только мы согласовали все наши требования, мы их тут же загрузили в EA в соответствующую часть метамодели. И вот все изменения требований проходят только через EA.
2.2.3. Про структуру
Когда базовые требования были собраны, мы начали набрасывать проектные решения – структуру ИС, технологии, связи между компонентами, отдельные технические решения согласно вот этой части метамодели:
Это происходило так. Создавалась диаграмма для несуществующего пока решения. Благодаря этому мы накапливали в проекте Enterprise Architect элементы, описывающие систему и при формировании решений, в которых эти элементы были задействованы, мы просто повторно их использовали, перетаскивая на нужные диаграммы. В этом случае как раз и начинают работать связи, необходимые для анализа влияния.
Для описания структуры мы использовали четыре типа диаграмм – вариантов использования, компонентов, развёртывания и классов (для описания логической модели данных). Плюс к этому в ряде случаев в ход шли возможности EA по использованию внешних объектов – рисунков, файлов, rich-text документов.
Вот как, например, выглядит описания одного физического компонента (эквивалента модуля развёртывания) на диаграмме, в проекте EA и его связи, и ничего сложного.
2.2.4. Про постановки
После того, как базовые решения выработаны, можно приступать к дизайну и разработке программного кода, но для последнего нужны «постановки на разработку».
Постановка включает в себя описание того, как детально должна работать ИС в части какой-то функции или сценария работы, какие компоненты и методы в это вовлечены, какие сущности логической модели данных использованы.
На всякий случай – здесь и далее под функцией системы (описанной как пиктограмма варианта использования) подразумевается некий сложный процесс работы системы, например, обработка заявления на открытие накопительного счёта от пользователя может скрывать «развесистый» процесс взаимодействия нескольких системы или же частей одной системы.
На данном этапе функция системы – центр. Вокруг центра строятся следующие работы.
- Спецификация сценария работы функции.
- Алгоритмы, используемые в сценарии.
- Архитектурные требования – ограничение, которые необходимо соблюсти при реализации или алгоритмизации того или иного шага.
- Детализация и уточнения логической модели данных.
- Формирование физической модели данных.
- Формирование «бизнес-интерфейсов» для компонентов – набора операций, значимых с точки зрения предметной области, которые потом необходимо реализовать. Здесь надо отметить, что методы, показанные в метамодели пиктограммой варианта использования, избыточны – мы таким образом связываем шаги спецификации сценария работы функции и соответствующий интерфейс.
- Уточнение связей между элементами.
После этих работ мы использовали эту информацию для дизайна и разработки кода и его тестирования.
Сам процесс передачи организован через jira – создаётся задача, в ней указано место в проекте EA, где находится постановка, а также ветка SVN.
Постановка выглядит так:
2.2.5. Про дизайн
Дизайн включает описание базовых классов, программных интерфейсов, пакетов (в терминах java) и их связей с со структурой системы.
Помимо этого в дизайне у нас есть порядок взаимодействия компонентов и классов, показывающих реализацию функций системы.
Эту часть рецепта мы пока держим в секрете.
3. Вместо заключения
Пройдя несколько сумбурно описанные шаги нашего рецепта, мы получили наше блюдо – проект в EA.
Кому-то наш рецепт покажется странным, нелепым. Кто-то почерпнёт для себя новое. Кто-то начнёт готовить и будет рад результату, а кто-то нет.
И это нормально – ведь это только наш рецепт, для нашей IT-кухни.
Мы уверены надеемся, что наши заметки не будут приняты в штыки и что будет конструктивная критика и полезные вопросы, отталкиваясь от которых мы сможем подкорректировать наш рецепт и продолжить наши заметки про использование Enterprise Architect и их публикацию на Хабре.
Автор: Aslamov