Собираем кубик Рубика: восстановление архитектурного описания корпоративной распределенной системы
1. 29 октября 2016
Собираем кубик Рубика:
восстановление архитектурного описания
корпоративной распределенной системы
Павел Музыка
Архитектор приложений
4. О чем система
Распределенная система сбора
финансовой отчетности: шесть стран
Система business-critical: не собрали
финансовую отчетность – не можем
управлять бизнесом
4/57
5. Наследие…
Терабайты финансовых учетных данных
Разработка системы начата в начале 2000-х
Недавно (в 2012 году) был крупный
реинжиниринг системы
За время существования системы состав
команды полностью поменялся несколько раз
5/57
6. Структура системы
Четыре функциональных модуля
Трехзвенка, две эпохи технологий UI, два
разных кодогенератора для нужд БД и др.
Основной блок вычислений – в базе
данных (Oracle)
+ Есть мощный движок построения
отчетности на C#
6/57
7. Ситуация
После двухлетнего неторопливого
сопровождения заказчик поставил задачу
существенного развития системы
В команде нет ни одного разработчика, который
работал бы над системой больше года
+ Два аналитика, один из которых пришел три
месяца назад
7/57
9. Существующее описание
Внутренняя wiki (много текста: 302 страницы)
Множество сделанных в Visio диаграмм,
разложенных как в Svn, так и на сетевом
хранилище
Актуальность большинства документов –
2012 год
9/57
11. Архитектура vs. архитектурное описание
Архитектура – фундаментальное устройство
самой системы
Архитектурное описание – описание
устройства системы
как внутреннего устройства
так и внешних интерфейсов
с системным окружением
с использующей системой
с обеспечивающей системой
11/57
13. Зачем описывать архитектуру?
Для совместного проектирования
Согласовывать изменения с заказчиком
Обсуждать изменения с разработчиками
Сравнивать различные варианты
Для передачи знаний о системе
Ее назначение и устройство
Методика разработки и поставки
Способы использования
13/57
16. Точка зрения в архитектуре
В 1977 году Douglas T. Ross, K. E. Schoman
предложили использовать концепции Context,
Viewpoint и Vantage point
В 1992 году Anthony Finkelstein с коллегами
предложили различать representation и specification
В стандарте IEEE 1471 это разделение стало
называться Viewpoint и View соответственно
16/57
17. Viewpoint vs. View
17/57
Viewpoint содержит
определение описания
View содержит
само описание
Viewpoint задает
типы моделей
(язык описания)
View содержит
сами модели
21. ISO/IEEE 42010
Жестко не регламентирует сами
viewpoint’ы
Дает метаописание viewpoint’а
Предлагает использовать Reference Model
of Open Distributed Processing (RM-ODP)
21/57
41. Software Archaeology
Для восстановления описания архитектуры
уже существующей системы не подходят методы
описания архитектуры в процессе проектирования
Так же как для сборки (решения) кубика
Рубика не подходят инструкции по его сборке
(монтажу из частей)
41/57
42. Практики в Software archaeology
Чтение существующей документации
и ее актуализация
Интервью с экспертами, пользователями
и другими включенными в процесс персонами
Исследование поведения системы
Исследование структуры системы
Постановка архитектурного процесса
42/57
45. Метод тестирования гипотез
Проводим первое интервью, задаем вопросы
на понимание
В оффлайне обдумываем, фиксируем
понимание, рисуем диаграммы
Проводим второе интервью с главным
вопросом «я правильно понял, что оно так?»
Получаем ответ «конечно же нет, оно должно
быть вот так»
Уходим на второй раунд обдумывания
и фиксирования в оффлайне
45/57
46. Особенности интервьюирования
Записывайте звук и видео, если это возможно
Нужно различать, о какой системе вам
рассказывают: о целевой, обеспечивающей или
использующей
Процесс сильно цикличен – желательно сокращать
время между итерациями
Структура необходимых viewpoint'ов будет
рождаться постепенно, поэтому нужно двигаться
сверху вниз: от концептуального к детальному
46/57
47. Интервьюируем заказчика и пользователя
Цель – составить сценарии использования системы
47/57
Структуры данных
Компоненты
Функции, поведение,
потоки данных
Встройка
в системное окружение
и интеграция
48. Интервьюируем аналитиков
Цель – выявить принципы, заложенные в систему, описать деление
на функциональные блоки
48/57
Структуры данных
Компоненты
Функции, поведение,
потоки данных
Встройка
в системное окружение
и интеграция
49. Интервьюируем разработчиков
Цель – получить детальную архитектуру функциональных блоков
или компонентов
49/57
Структуры данных
Компоненты
Функции, поведение,
потоки данных
Встройка
в системное окружение
и интеграция
50. Самостоятельные раскопки
Исследуем поведение
Подключаемся к тестовому стенду и пытаемся
работать с системой
Если есть автоматические тесты или тестовые
сценарии для QA, то обязательно их смотрим
Исследуем структуры
Открываем среду разработки и читаем код
Если среда позволяет, то строим диаграммы
по фрагментам системы
50/57
55. Как это сделано у нас
Основной репозиторий – это wiki
Вся структура описания – в wiki, связи между
viewpoint’ами – там же
Исходники диаграмм – в Enterprise Architect
или Visio
Enterprise Architect – инструмент коллективной
работы с диаграммами
Автоматизирована выгрузка диаграмм в wiki
из Enterprise Architect и Visio
55/57
56. Подводя итоги
Результат:
После восстановления архитектурного описания мы
смогли согласовать масштаб изменений с заказчиком
и снять основные риски
Выводы:
Восстановить архитектурное описание дорого в момент
возникновения необходимости и поэтому не всегда
возможно
Важно ставить практики управления архитектурой
и поддерживать описание в актуальном состоянии
56/57
Сюда хорошо бы на каждый пункт придумать интересную картинку
Douglas T. Ross and K.E. Schoman
* a viewpoint "makes clear what aspects are considered relevant to achieving ... the overall purpose [of the model]" and determines How do we look at [a subject being modelled]
* As examples of viewpoints, the paper offers: Technical, Operational and Economic viewpoints.
* "a representation style, the scheme and notation by which the viewpoint expresses what it can see" and
* "a specification, the statements expressed in the viewpoint's style describing particular domains"
В 2011 году стандарт IEEE 1471 был заменен на IEEE 42010
Хорошо бы сюда придумать картинку-метафору про Viewpoint View
Филип Крачтен в 1995 году предложил 5 точек зения, с которых нужно смотреть на систему.
In 1996 the ISO Reference Model for Open Distributed Processing (RM-ODP) was published to provide a useful framework for describing the architecture and design of large-scale distributed systems.
Тут тоже 5 viewpoint’ов, но они уже немного другие.
А вот сименс предлагает 4 View, но не включает в них архитектуру железа… Но зато исходный код выделен как элемент архитектуры.
Розански и Вудс предложили уже 6 viewpoint’ов, которые конечно же отличаются в нюансах от предыдущих.
Но они еще предложили использовать перспективу помимо вьюпоинта, предложив минимум 7 перспектив. Это все дает 7*6=42 вида диаграмм.
1. Так же как и для раскопок применяют не те же технологии что и для строительства
Люди трепетно относятся к своим трудам, поэтому сначала прочтите, что они уже описали, а потом задавайте вопросы
Люди склонны считать свои мысли очевидными
=> Для разных людей нужны разные картинки
Сложно выявить изначальные требования, поэтому остается выявлять текущее поведение системы
Проще всего попросить их самих заполнить раздел описания
Целостную картину описания все равно должны удерживать вы
Значит, нужно поставить практику работы с архитектурным описанием для всей команды
Диаграмма + тезисы
Тезисы только поясняют картинку, а не заменяют ее
Диаграммой и текстовым описанием можно добиться куда большего, чем одной диаграммой