Разработка программного обеспечения
- 1 year ago
- 0
- 0
Архитектура программного обеспе́чения ( англ. software architecture ) — совокупность важнейших решений об организации программной системы. Архитектура включает:
Документирование архитектуры программного обеспе́чения (ПО) упрощает коммуникацию разработчиков, позволяет зафиксировать принятые проектные решения и предоставить информацию о них эксплуатационному персоналу системы , повторно использовать компоненты и шаблоны проекта в других.
Общепринятого определения «архитектуры программного обеспечения» не существует. Так, сайт Института программной инженерии приводит более 150 определений этого понятия .
Область компьютерных наук с момента своего образования столкнулась с проблемами, связанными со сложностью программных систем. Ранее проблемы сложности решались разработчиками путём правильного выбора структур данных, разработки алгоритмов и применения концепции разграничения полномочий. Хотя термин «архитектура программного обеспечения» является относительно новым для индустрии разработки ПО, фундаментальные принципы этой области неупорядоченно применялись пионерами разработки ПО начиная с середины 1980-х. Первые попытки осознать и объяснить программную архитектуру системы были полны неточностей и страдали от недостатка организованности, часто это была просто диаграмма из блоков, соединенных линиями. В 1990-е годы наблюдается попытка определить и систематизировать основные аспекты данной дисциплины. Первоначальный набор шаблонов проектирования , стилей проектирования, передового опыта ( best practices ), языков описания и формальная логика были разработаны в течение этого времени .
Основополагающей идеей дисциплины программной архитектуры является идея снижения сложности системы путём абстракции и разграничения полномочий. На сегодняшний день до сих пор нет согласия в отношении чёткого определения термина «архитектура программного обеспечения».
Являясь в настоящий момент своего развития дисциплиной без четких правил о «правильном» пути создания системы, проектирование архитектуры ПО всё ещё является смесью науки и искусства. Аспект «искусства» заключается в том, что любая коммерческая система подразумевает наличие применения или миссии. С точки зрения её пользователя, программная архитектура дает направление для движения и решения задач, связанных со специальностью каждого такого пользователя, например заинтересованного лица, разработчика ПО, группы поддержки ПО, специалиста по сопровождению ПО, специалиста по развертыванию ПО, тестера, а также конечных пользователей. В этом смысле архитектура программного обеспечения на самом деле объединяет различные точки зрения на систему. Тот факт, что эти несколько различных точек зрения могут быть объединены в архитектуре программного обеспечения, является аргументом в защиту необходимости и целесообразности создания архитектуры ПО ещё до этапа разработки ПО .
Начало архитектуре программного обеспечения как концепции было положено в научно-исследовательской работе Эдсгера Дейкстры в 1968 году и Дэвида Парнаса в начале 1970-х. Эти ученые подчеркнули, что структура системы ПО имеет важное значение и что построение правильной структуры — критически важно. Популярность изучения этой области возросла с начала 1990-х годов вместе с научно-исследовательской работой по исследованию архитектурных стилей (шаблонов), языков описания архитектуры, документирования архитектуры и формальных методов.
В развитии архитектуры ПО как дисциплины играют важную роль научно-исследовательские учреждения. Мэри Шоу и Дэвид Гэрлан из университета Карнеги — Меллона написали книгу под названием «Архитектура программного обеспечения: перспективы новой дисциплины в 1996 году», в которой выдвинули концепции архитектуры ПО, такие как компоненты, соединители ( connectors ), стили и так далее. В Калифорнийском университете Ирвайна институт по исследованию ПО в первую очередь исследует архитектурные стили, языки описания архитектуры и динамические архитектуры.
Первым стандартом программной архитектуры является стандарт IEEE 1471: ANSI / IEEE 1471—2000: Рекомендации по описанию преимущественно программных систем. Он был принят в 2007 году, под названием ISO ISO / IEC 42010:2007.
Языки описания архитектуры (ADLS) используются для описания архитектуры программного обеспечения. Различные организации разработали несколько различных ADLS, в том числе AADL (стандарт SAE), Wright, Acme (разработаны в университете Карнеги — Меллона ), xADL (разработан в UCI), Darwin (разработан в Имперском колледже в Лондоне), DAOP-ADL (разработан в Университете Малаги ), а также ByADL ( , Италия). Общими элементами для всех этих языков являются понятия компонента, коннектора и конфигурации. Также, помимо специализированных языков, для описания архитектуры часто используется унифицированный язык моделирования UML .
Архитектура ПО обычно содержит несколько видов, аналогичных типам чертежей в строительстве зданий. В онтологии , установленной ANSI / IEEE 1471—2000, виды являются экземплярами точки зрения, где точка зрения существует для описания архитектуры с точки зрения заданного множества заинтересованных лиц.
Архитектурный вид состоит из двух компонентов:
Архитектурные виды можно поделить на три основных типа :
Примеры модульных видов:
Примеры видов компонентов-и-коннекторов:
Примеры видов размещения:
Хотя было разработано несколько языков для описания архитектуры программного обеспечения, в настоящий момент нет согласия по поводу того, какой набор видов должен быть принят в качестве эталона. В качестве стандарта «для моделирования программных систем (и не только)» был создан язык UML.
Для удовлетворения проектируемой системы атрибутам качества применяются архитектурные шаблоны (паттерны). Каждый шаблон имеет свои задачи и свои недостатки.
Примеры архитектурных шаблонов:
Однако концепция MVC имеет и свои недостатки. В частности, из-за усложнения взаимодействия падает скорость работы системы.
Существуют следующие фреймворки ( software architecture frameworks ), относящиеся к области архитектуры ПО:
Такие примеры архитектур, как фреймворк Захмана ( Zachman Framework ), DoDAF и TOGAF, относятся к области архитектуры предприятия ( enterprise architectures ).