Аннотация: Рассматривается понятие архитектуры ПО, влияние архитектуры на свойства ПО, а также методы оценки архитектуры. Рассказывается об основных элементах унифицированного языка моделирования UML.
Анализ области решений
Допустим, мы разобрались в предметной области , поняли, что требуется от будущей программной системы, даже зафиксировали настолько полно, насколько смогли, требования и пожелания всех заинтересованных лиц ко всем аспектам качества программы. Что делать дальше?
На этом этапе (а точнее, гораздо раньше, обычно еще в ходе анализа предметной области ) исследуются возможные способы решения тех задач, которые поставлены в требованиях. Не всегда бывает нужно специальное изучение этого вопроса — чаще всего имеющийся опыт разработчиков сразу подсказывает, как можно решать поставленные задачи. Однако иногда, все-таки, возникает потребность сначала понять, как это можно сделать и, вообще, возможно ли это сделать и при каких ограничениях.
Таким образом, явно или неявно, проводится анализ области решений. Целью этой деятельности является понимание, можно ли вообще решить стоящие перед разрабатываемой системой задачи, при каких условиях и ограничениях это можно сделать, как они решаются, если решение есть, а если нет — нельзя ли придумать способ его найти или получить хотя бы приблизительное решение, и т.п. Обычно задача хорошо исследована в рамках какой-либо области человеческих знаний, но иногда приходится потратить некоторые усилия на выработку собственных решений. Кроме того, решений обычно несколько и они различаются по некоторым характеристикам, способным впоследствии сыграть важную роль в процессе развития и эксплуатации созданной на их основе программы. Поэтому важно взвесить их плюсы и минусы и определить, какие из них наиболее подходят в рамках данного проекта, или решить, что все они должны использоваться для обеспечения большей гибкости ПО .
Быстрый городской скетч | Графика для начинающих | Как нарисовать архитектуру линером
Когда определены принципиальные способы решения всех поставленных задач (быть может, в каких-то ограничениях), основной проблемой становится способ организации программной системы, который позволил бы реализовать все эти решения и при этом удовлетворить требованиям, касающимся нефункциональных аспектов разрабатываемой программы. Искомый способ организации ПО в виде системы взаимодействующих компонентов называют архитектурой, а процесс ее создания — проектированием архитектуры ПО .
Архитектура программного обеспечения
Под архитектурой ПО понимают набор внутренних структур ПО , которые видны с различных точек зрения и состоят из компонентов , их связей и возможных взаимодействий между компонентами , а также доступных извне свойств этих компонентов [1].
Под компонентом в этом определении имеется в виду достаточно произвольный структурный элемент ПО , который можно выделить, определив интерфейс взаимодействия между этим компонентом и всем, что его окружает. Обычно при разработке ПО термин » компонент » (см. далее при обсуждении компонентных технологий ) имеет несколько другой, более узкий смысл — это единица развертывания, самая маленькая часть системы, которую можно включить или не включить в ее состав. Такой компонент также имеет определенный интерфейс и удовлетворяет некоторому набору правил, называемому компонентной моделью . Там, где возможны недоразумения, будет указано, в каком смысле употребляется этот термин. В этой лекции до обсуждения UML мы будем использовать преимущественно широкое понимание этого термина, а дальше — наоборот, узкое.
КАК РИСОВАТЬ АРХИТЕКТУРУ? | Штриховка, перспектива, построение
В определении архитектуры упоминается набор структур, а не одна структура. Это означает, что в качестве различных аспектов архитектуры, различных взглядов на нее выделяются различные структуры, соответствующие разным аспектам взаимодействия компонентов. Примеры таких аспектов — описание типов компонентов и типов статических связей между ними при помощи диаграмм классов , описание композиции компонентов при помощи структур ссылающихся друг на друга объектов, описание поведения компонентов при помощи моделирования их как набора взаимодействующих, передающих друг другу некоторые события, конечных автоматов.
Архитектура программной системы похожа на набор карт некоторой территории. Карты имеют разные масштабы, на них показаны разные элементы (административно-политическое деление , рельеф и тип местности — лес , степь, пустыня, болота и пр., экономическая деятельность и связи), но они объединяются тем, что все представленные на них сведения соотносятся с географическим положением. Точно так же архитектура ПО представляет собой набор структур или представлений , имеющих различные уровни абстракции и показывающих разные аспекты (структуру классов ПО , структуру развертывания, т.е. привязки компонентов ПО к физическим машинам, возможные сценарии взаимодействий компонентов и пр.), объединяемых сопоставлением всех представленных данных со структурными элементами ПО . При этом уровень абстракции данного представления является аналогом масштаба географической карты.
Рассмотрим в качестве примера программное обеспечение авиасимулятора для командной тренировки пилотов. Задачей такой системы в целом является контроль и выработка необходимых для безопасного управления самолетом навыков у команд летчиков. Кроме того, отрабатываются навыки поведения в особых ситуациях, связанных с авариями, частичной потерей управления самолетом, тяжелыми условиями полета, и т.д.
- Моделировать определенные условия полета и создавать некоторые события, к которым относятся следующие:
- Скоростной и высотный режим полета, запас горючего, их изменения со временем.
- Модель самолета и ее характеристики по управляемости, возможным режимам полета и скорости реакции на различные команды.
- Погода за бортом и ее изменения со временем.
- Рельеф и другие особенности местности в текущий момент, их изменения со временем.
- Исходный и конечный пункты полета, расстояние и основные характеристики рельефа между ними.
- Исправность или неисправность элементов системы контроля полета и управления самолетом, показатели системы мониторинга и их изменение со временем.
- Наличие пролетающих вблизи курса самолета других самолетов, их геометрические и скоростные характеристики.
- Чрезвычайные ситуации, например, террористы на борту, нарушение герметичности корпуса, внезапные заболевания и «смерть» отдельных членов экипажа.
При этом вся совокупность условий должна быть непротиворечивой, выглядеть и развиваться подобно реальным событиям. Некоторые условия, например, погода, должны изменяться достаточно медленно, другие события — происходить внезапно и приводить к связанным с ними последствиям (нарушение герметичности корпуса может сопровождаться поломками каких-то элементов системы мониторинга или «смертью» одного из пилотов). Если приборы показывают наличие грозы по курсу и они исправны, через некоторое время летчики должны увидеть грозу за бортом и она может начать оказывать влияние на условия полета.
Понятно, что одним из элементов симулятора служит система визуализации обстановки за бортом — она показывает пилотам «вид за окнами». Пилоты в ходе полета ориентируются по показателям огромного количества датчиков, представленных на приборной панели самолета. Вся их работа тоже должна симулироваться.
Наличие и характеристики работы таких датчиков могут зависеть от симулируемой модели, но их расположение, форма и цвет служат слишком важными элементами выработки навыков управления самолетом, поэтому требуется поддерживать эти характеристики близкими к реальным. Представлять их только в виде изображений на некоторой панели неудобно, поскольку они должны располагаться и выглядеть максимально похоже на реальные прототипы. Значит, симулировать можно только небольшое семейство самолетов с практически одним и тем же набором приборов на приборной панели.
Источник: intuit.ru
5 диаграмм, необходимых для документирования архитектуры решений
Процесс документирования архитектуры программного обеспечения может показаться пугающим. Но на самом деле достаточно всего 5 диаграмм, чтобы объяснить структуру вашей системы практически любому.
Задача архитектора решений ― четко донести проект системы до бизнеса, руководителей проектов и разработчиков. Нельзя просто нарисовать одно изображение, это невозможно и не принесет никому пользы. Вместо этого лучше сгруппировать различные проблемы и создать набор диаграмм, описывающих каждое представление. Конечно, есть миллиард способов сделать это. Как выбрать подходящий?
За время работы в качестве архитектора решений я чаще всего использовал 5 диаграмм: контекстную диаграмму C4, диаграмму контейнеров, развертывания, последовательности и вариантов использования. В этой статье я рассмотрю подробно каждую из них.
Контекстная диаграмма
Веб-сайт, посвященный модели С4 (Context, Container, Component and Code), довольно хорошо объясняет свои диаграммы, я же поделюсь своим представлением, как эта модель работает.
Любая система работает в некотором контексте — окружении. В первую очередь, это пользователи и другие системы. Пользователи могут иметь разные роли, такие как создатель контента, читатель, администратор. Также они могут быть внутренними или внешними. Другие программы могут быть источником данных для вашей системы или получать информацию от нее.
Важно понимать этот контекст, чтобы правильно спроектировать систему и напомнить себе о необходимости интеграции с внешними системами.
Пример

На этой диаграмме показана цифровая платформа необанкинга, представленная синим прямоугольником в центре.
Как рисовать
- Определите пользователей.
- Определите внешние системы.
- Создайте единый прямоугольник, изображающий вашу систему.
- Добавьте связи между системой, пользователями и внешними системами.
- Напишите содержательные комментарии по каждому компоненту.
Инструменты
Существуют различные инструменты, которые можно использовать для создания контекстной диаграммы. Существуют трафареты C4 для OmniGraffle, примеры C4 для LucidChart, шаблоны есть также в draw.io. Чтобы использовать диаграммы как код, попробуйте PlantUML.
Допустим, мы хотим нарисовать такую диаграмму для цифровой платформы необанковского обслуживания с помощью uml:
Русские Блоги
Существует популярное представление 4 + 1, которое включает вид сцены, логическое представление, физическое представление, представление потока обработки и представление разработки.
- Просмотр сцены 
 используется для описания отношений между участниками системы и функциональными вариантами использования, отражая окончательные требования и дизайн взаимодействия системы, обычно представленные в виде диаграмм вариантов использования. 
- Логический взгляд 
 описывает отношения компонентов, ограничения компонентов и границы после дизассемблирования функций системного программного обеспечения, отражая общий состав системы и процесс построения системы, обычно представленные диаграммами компонентов UML и диаграммами классов. 
- Физический вид 
 используется для описания взаимосвязи отображения между системным программным обеспечением и физическим оборудованием, отражая, как компоненты системы развертываются на группе компьютерных узлов, и используется для руководства процессом развертывания и реализации программной системы. 
- Просмотр технологического процесса 
 используется для описания времени связи между компонентами системного программного обеспечения, ввода и вывода данных и отражает функциональный поток и поток данных системы, обычно представленный временными диаграммами и блок-схемами. 
- Вид развития 
 используется для описания модульного разделения и состава системы, а также составного проекта внутреннего пакета, который обслуживает разработчиков и отражает процесс разработки и внедрения системы. 
Как рассчитать хорошую схему архитектуры
Прямым критерием качества нарисованного изображения является то, точно ли аудитория получила информацию, которую она хочет донести. С точки зрения аудитории, хорошая архитектурная диаграмма не нуждается в объяснении. Она должна быть информативной, быть последовательной и достаточно точной, чтобы можно было повторить код.
Рекомендуемый метод рисования
Модель C4 использует контейнеры (приложения, хранилище данных, микросервисы и т. Д.), Компоненты и коды для описания статической структуры программной системы. Эти типы изображений относительно легко рисовать, и здесь также даются основные моменты рисования, но самое главное, мы считаем, что они четко указывают на возможную аудиторию и значение каждого вида изображения.

- Диаграмма контекста системы
использовать 
Такая простая диаграмма может рассказать нам, что система должна быть построена; кто ее пользователи, кто будет ее использовать и как ее следует интегрировать в существующую ИТ-среду. Аудитория этого графика может быть внутренним, внешним техническим или нетехническим персоналом из команды разработчиков. который: 
Какова построена система 
Кто будет его использовать 
Как интегрироваться в существующую ИТ-среду 
Как рисовать 
В середине находится его собственная система, окруженная пользователями и другими системами, которые с ней взаимодействуют. Ключ к этой диаграмме — отсортировать пользователей и высокоуровневые зависимости системы, которую нужно построить. Чтобы разобраться и нарисовать, потребуется всего несколько минут.

- Схема контейнера 
 Контейнерная диаграмма — это расширение системы, которая будет построена в контекстной диаграмме.
использовать 
Аудитория этого графика может быть разработчиками внутри или вне группы, а также обслуживающим и обслуживающим персоналом. Использование может быть указано как: 
показывает общую форму системы программного обеспечения. 
отражает технические решения высокого уровня 
Как распределяются обязанности в системе и как взаимодействуют контейнеры 
сообщить разработчику, где писать код. 
Как рисовать 
представлен блок-схемой, которая может включать имена, технические решения, обязанности и взаимодействие между этими блок-схемами. Если это касается внешних систем, лучше всего уточнить границы.

- Схема компонентов 
 Схема компонентов предназначена для раскрытия контейнера и описания его внутренних модулей.
использовать 
Эта диаграмма предназначена главным образом для внутренних разработчиков, чтобы они могли увидеть, как организовать и построить код. Его использование: 
описывает, из каких компонентов / служб состоит система. 
разъясняет отношения и зависимости между компонентами. 
предоставляет основу для декомпозиции и реализации разработки программного обеспечения.

- Схема кода / классов 
 для разработчиков
Примеры из практики

Короче, подумайте, прежде чем рисовать: кому показывать картинку, что смотреть и как понимать, не объясняя.
Источник: russianblogs.com
