Русская Википедия:Архитектура программного обеспечения

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:Разработка программного обеспечения Архитектура программного обеспе́чения (Шаблон:Lang-en) — совокупность важнейших решений об организации программной системы. Архитектура включает:

  • выбор структурных элементов и их интерфейсов, с помощью которых составлена система, а также их поведения в рамках сотрудничества структурных элементов;
  • соединение выбранных элементов структуры и поведения во всё более крупные системы;
  • архитектурный стиль, который направляет всю организацию — все элементы, их интерфейсы, их сотрудничество и их соединение[1][2].

Документирование архитектуры программного обеспе́чения (ПО) упрощает коммуникацию разработчиков, позволяет зафиксировать принятые проектные решения и предоставить информацию о них эксплуатационному персоналу системыШаблон:Sfn, повторно использовать компоненты и шаблоны проекта в других.

Общепринятого определения «архитектуры программного обеспечения» не существует. Так, сайт Института программной инженерии приводит более 150 определений этого понятияШаблон:Sfn[3].

Обзор

Область компьютерных наук с момента своего образования столкнулась с проблемами, связанными со сложностью программных систем. Ранее проблемы сложности решались разработчиками путём правильного выбора структур данных, разработки алгоритмов и применения концепции разграничения полномочий. Хотя термин «архитектура программного обеспечения» является относительно новым для индустрии разработки ПО, фундаментальные принципы этой области неупорядоченно применялись пионерами разработки ПО начиная с середины 1980-х. Первые попытки осознать и объяснить программную архитектуру системы были полны неточностей и страдали от недостатка организованности, часто это была просто диаграмма из блоков, соединенных линиями. В 1990-е годы наблюдается попытка определить и систематизировать основные аспекты данной дисциплины. Первоначальный набор шаблонов проектирования, стилей проектирования, передового опыта (Шаблон:Lang-en2), языков описания и формальная логика были разработаны в течение этого времени[4].

Основополагающей идеей дисциплины программной архитектуры является идея снижения сложности системы путём абстракции и разграничения полномочий. На сегодняшний день до сих пор нет согласия в отношении чёткого определения термина «архитектура программного обеспечения».

Являясь в настоящий момент своего развития дисциплиной без четких правил о «правильном» пути создания системы, проектирование архитектуры ПО всё ещё является смесью науки и искусства. Аспект «искусства» заключается в том, что любая коммерческая система подразумевает наличие применения или миссии. С точки зрения её пользователя, программная архитектура дает направление для движения и решения задач, связанных со специальностью каждого такого пользователя, например заинтересованного лица, разработчика ПО, группы поддержки ПО, специалиста по сопровождению ПО, специалиста по развертыванию ПО, тестера, а также конечных пользователей. В этом смысле архитектура программного обеспечения на самом деле объединяет различные точки зрения на систему. Тот факт, что эти несколько различных точек зрения могут быть объединены в архитектуре программного обеспечения, является аргументом в защиту необходимости и целесообразности создания архитектуры ПО ещё до этапа разработки ПО[5][6][7].

История

Начало архитектуре программного обеспечения как концепции было положено в научно-исследовательской работе Эдсгера Дейкстры в 1968 году и Дэвида Парнаса Шаблон:Iw в начале 1970-х. Эти ученые подчеркнули, что структура системы ПО имеет важное значение и что построение правильной структуры — критически важно. Популярность изучения этой области возросла с начала 1990-х годов вместе с научно-исследовательской работой по исследованию архитектурных стилей (шаблонов), языков описания архитектуры, документирования архитектуры и формальных методов.

В развитии архитектуры ПО как дисциплины играют важную роль научно-исследовательские учреждения. Мэри Шоу и Дэвид Гэрлан из университета Карнеги — Меллона написали книгу под названием «Архитектура программного обеспечения: перспективы новой дисциплины в 1996 году», в которой выдвинули концепции архитектуры ПО, такие как компоненты, соединители (Шаблон:Lang-en2), стили и так далее. В Калифорнийском университете Ирвайна институт по исследованию ПО в первую очередь исследует архитектурные стили, языки описания архитектуры и динамические архитектуры.

Первым стандартом программной архитектуры является стандарт IEEE 1471: ANSI / IEEE 1471—2000: Рекомендации по описанию преимущественно программных систем. Он был принят в 2007 году, под названием ISO ISO / IEC 42010:2007.

Языки описания архитектуры

Языки описания архитектуры (ADLS) используются для описания архитектуры программного обеспечения. Различные организации разработали несколько различных ADLS, в том числе AADL (стандарт SAE), Wright, Acme (разработаны в университете Карнеги — Меллона), xADL (разработан в UCI), Darwin (разработан в Имперском колледже в Лондоне), DAOP-ADL (разработан в Университете Малаги), а также ByADL (Шаблон:Iw, Италия). Общими элементами для всех этих языков являются понятия компонента, коннектора и конфигурации. Также, помимо специализированных языков, для описания архитектуры часто используется унифицированный язык моделирования UML.

Виды (views)

Архитектура ПО обычно содержит несколько видов, аналогичных типам чертежей в строительстве зданий. В онтологии, установленной ANSI / IEEE 1471—2000, виды являются экземплярами точки зрения, где точка зрения существует для описания архитектуры с точки зрения заданного множества заинтересованных лиц.

Архитектурный вид состоит из двух компонентов:

  • Элементы
  • Отношения между элементами

Архитектурные виды можно поделить на три основных типа[8]:

  1. Модульные виды (Шаблон:Lang-en2) — показывают систему как структуру из программных блоков.
  2. Компоненты-и-коннекторы (Шаблон:Lang-en2) — показывают систему как структуру из параллельно запущенных элементов (компонентов) и способов их взаимодействия (коннекторов).
  3. Размещение (Шаблон:Lang-en2) — показывает размещение элементов системы во внешних средах.

Примеры модульных видов:

  • Декомпозиция (Шаблон:Lang-en2) — состоит из модулей в контексте отношения «является подмодулем».
  • Использование (Шаблон:Lang-en2) — состоит из модулей в контексте отношения «использует» (то есть один модуль использует сервисы другого модуля).
  • Вид уровней (Шаблон:Lang-en2) — показывает структуру, в которой связанные по функциональности модули объединены в группы (уровни).
  • Вид классов/обобщений (Шаблон:Lang-en2) — состоит из классов, связанные через отношения «наследуется от» и «является экземпляром».

Примеры видов компонентов-и-коннекторов:

  • Процессный вид (Шаблон:Lang-en2) — состоит из процессов, соединённых операциями коммуникации, синхронизации и/или исключения.
  • Параллельный вид (Шаблон:Lang-en2) — состоит из компонентов и коннекторов, где коннекторы представляют собой «логические потоки».
  • Вид обмена данными (Шаблон:Lang-en2) — состоит из компонентов и коннекторов, которые создают, сохраняют и получают постоянные данные.
  • Вид клиент-сервер (Шаблон:Lang-en2) — состоит из взаимодействующих клиентов и серверов, а также коннекторов между ними (например, протоколов и общих сообщений).

Примеры видов размещения:

  • Развертывание (Шаблон:Lang-en2) — состоит из программных элементов, их размещения на физических носителях и коммуникационных элементов.
  • Внедрение (Шаблон:Lang-en2) — состоит из программных элементов и их соответствия файловым структурам в различных средах (разработческой, интеграционной и т. д.).
  • Распределение работы (Шаблон:Lang-en2) — состоит из модулей и описания того, кто ответственен за внедрение каждого из них.

Хотя было разработано несколько языков для описания архитектуры программного обеспечения, в настоящий момент нет согласия по поводу того, какой набор видов должен быть принят в качестве эталона. В качестве стандарта «для моделирования программных систем (и не только)» был создан язык UML.

Архитектурные шаблоны

Для удовлетворения проектируемой системы атрибутам качества применяются архитектурные шаблоны (паттерны). Каждый шаблон имеет свои задачи и свои недостатки.

Примеры архитектурных шаблонов:

  • Многоуровневый шаблон (Шаблон:Lang-en2). Система разбивается на уровни, которые на диаграмме изображаются один над другим. Каждый уровень может вызывать только уровень на один ниже его. Таким образом, разработку каждого уровня можно вести относительно независимо, что повышает модифицируемость системы. Однако при таком подходе сложность системы возрастает, а её производительность снижается.
  • Шаблон посредника (Шаблон:Lang-en2). Когда в системе присутствует большое количество модулей, их прямое взаимодействие друг с другом становится слишком сложным. Для решения проблемы вводится посредник (например, шина данных), по которой модули общаются друг с другом. Таким образом, повышается функциональная совместимость модулей системы. Все недостатки вытекают из наличия посредника: он понижает производительность, его недоступность может сделать недоступной всю систему, он может стать объектом атак и узким местом системы.
  • Шаблон «Модель-Представление-Контроллер» (Шаблон:Lang-en2). Так как требования к интерфейсу меняются чаще всего, то возникает потребность часто его модифицировать, при этом сохраняя корректное взаимодействие с данными (чтение, сохранение). Для этого в шаблоне MVC интерфейс отделён от данных. Это позволяет менять интерфейсы, равно как и создавать их разные варианты. В MVC система разделена на:
    • модель, хранящую данные;
    • представление, отображающее часть данных и взаимодействующее с пользователем;
    • контроллер, являющийся посредником между видами и моделью.

Однако концепция MVC имеет и свои недостатки. В частности, из-за усложнения взаимодействия падает скорость работы системы.

  • Клиент-серверный шаблон (Шаблон:Lang-en2). Если есть ограниченное число ресурсов, к которым требуется ограниченный правами доступ большого числа потребителей, то удобно реализовать клиент-серверную архитектуру. Такой подход повышает масштабируемость и доступность системы. Но при этом сервер может стать узким местом системы, при его недоступности становится недоступна вся система.

Базовые фреймворки для архитектуры ПО

Существуют следующие фреймворки (Шаблон:Lang-en2), относящиеся к области архитектуры ПО:

  • 4+1
  • RM-ODP (эталонная модель открытой распределенной обработки)
  • Service-Oriented Modeling Framework (SOMF)

Такие примеры архитектур, как фреймворк Захмана (Шаблон:Lang-en2), DoDAF и TOGAF, относятся к области архитектуры предприятия (Шаблон:Lang-en2).

См. также

Примечания

Шаблон:Примечания

Литература

  • Шаблон:Книга
  • Шаблон:Книга (Эта книга, теперь в третьем издании, покрывает фундаментальные концепции дисциплины, сосредотачиваясь на достижении качественных атрибутов системы.)

Ссылки

Шаблон:Rq

Шаблон:Software Engineering

  1. Шаблон:Iw. The Rational Unified Process-An Introduction, Addison-Wesley, 1998
  2. Rumbaugh, J., Jacobsen, I. and Booch, G. The Unified Modelling Language Reference Manual. Reading, Mass.: Addison-Wesley, 1999
  3. Software Architecture:Glossary Шаблон:Wayback, Software Engineering Institute
  4. Шаблон:Cite web
  5. Шаблон:Cite web
  6. Шаблон:Статья
  7. Шаблон:Cite web
  8. Шаблон:Книга