Архитектура программного обеспечения
Архитектура программного обеспечения (англ. software architecture) в это структура программы или вычислительной системы, которая включает программные компоненты, видимые снаружи свойства этих компонентов, а также отношения между ними. Этот термин также относится к документированию архитектуры программного обеспечения. Документирование архитектуры ПО упрощает процесс коммуникации между заинтересованными лицами (англ. stakeholders), позволяет зафиксировать принятые на ранних этапах проектирования решения о высокоуровневом дизайне системы и позволяет использовать компоненты этого дизайна и шаблоны повторно в других проектах.
Содержание |
[править] Обзор
Область компьютерных наук с момента своего образования столкнулась с проблемами, связанными со сложностью программных систем. Ранее проблемы сложности решались разработчиками путем правильного выбора структур данных, разработки алгоритмов и применения концепции разграничения полномочий. Хотя термин «архитектура программного обеспечения» является относительно новым для индустрии разработки ПО, фундаментальные принципы этой области неупорядоченно применялись пионерами разработки ПО начиная с середины 1980-х. Первые попытки осознать и объяснить программную архитектуру системы были полны неточностей и страдали от недостатка организованности, часто это была просто диаграмма из блоков, соединенных линиями. В 1990-е годы наблюдается попытка определить и систематизировать основные аспекты данной дисциплины. Первоначальный набор шаблонов проектирования, стилей дизайна, передового опыта (best-practices), языков описания и формальная логика были разработаны в течение этого времени.
Основополагающей идеей дисциплины программной архитектуры является идея снижения сложности системы путем абстракции и разграничения полномочий. На сегодняшний день до сих пор нет согласия в отношении четкого определения термина «архитектура программного обеспечения».
Являясь в настоящий момент своего развития дисциплиной без четких правил о «правильном» пути создания системы, проектирование архитектуры ПО все еще является смесью науки и искусства. Аспект «искусства» заключается в том, что любая коммерческая система подразумевает наличие применения или миссии. То, какие ключевые цели имеет система, описывается с помощью сценариев как нефункциональные требования к системе, также известные как атрибуты качества, определяющих, как будет вести себя система. Атрибуты качества системы включают в себя отказоустойчивость, сохранение обратной совместимости, расширяемость, надежность, пригодность к сервисному обслуживанию (maintainability), доступность, безопасность, удобство использования, а также другие качества. С точки зрения пользователя программной архитектуры, программная архитектура дает направление для движения и решения задач, связанных со специальностью каждого такого пользователя, например, заинтересованного лица, разработчика ПО, группы поддержки ПО, специалиста по сопровождению ПО, специалиста по развертыванию ПО, тестера, а также конечных пользователей. В этом смысле архитектура программного обеспечения на самом деле объединяет различные точки зрения на систему. Тот факт, что эти несколько различных точек зрения могут быть объединены в архитектуре программного обеспечения является аргументом в защиту необходимости и целесообразности создания архитектуры ПО еще до этапа разработки ПО.
[править] История
Начало архитектуре программного обеспечения как концепции было положено в научно-исследовательской работе Эдсгера Дейкстры в 1968 году и Дэвида Парнаса в начале 1970-х. Эти ученые подчеркнули, что структура системы ПО имеет важное значение, и что построение правильной структуры в критически важно. Популярность изучения этой области возросла с начала 1990-х годов вместе с научно-исследовательской работой по исследованию архитектурных стилей (шаблонов), языков описания архитектуры, документирования архитектуры, и формальных методов.
В развитии архитектуры программного обеспечения как дисциплины играют важную роль научно-исследовательские учреждения. Мэри Шоу и Дэвид Гэрлан из университета Carnegie Mellon написали книгу под названием «Архитектура программного обеспечения: перспективы новой дисциплины в 1996 году», в которой выдвинули концепции архитектуры программного обеспечения, такие как компоненты, соединители (connectors), стили и так далее. В калифорнийском университете институт Ирвайна по исследованию ПО в первую очередь исследует архитектурные стили, языки описания архитектуры и динамические архитектуры.
Первым стандартом программной архитектуры является стандарт IEEE 1471: ANSI / IEEE 1471в2000: Рекомендации по описанию преимущественно программных систем. Он был принят в 2007 году, под названием ISO ISO / IEC 42010:2007.
[править] Темы по программной архитектуре
[править] Языки описания архитектуры
Языки описания архитектуры (ADLS) используются для описания архитектуры программного обеспечения. Различными организациями было разработано несколько различных ADLS, в том числе AADL (стандарт SAE), Wright (разработан в университете Carnegie Mellon), Acme (разработан в университете Carnegie Mellon), xADL (разработан в UCI), Darwin (разработан в Imperial College в Лондоне), DAOP-ADL (разработан в Университете Малаги), а также ByADL (Университет Lв™Aquila, Италия). Общими элементами для всех этих языков являются понятия компонента, коннектора и конфигурации.
[править] Виды (views)
Архитектура ПО обычно содержит несколько видов, которые аналогичны различным типам чертежей в строительстве зданий. В онтологии, установленной ANSI / IEEE 1471в2000, виды являются экземплярами точки зрения, где точка зрения существует для описания архитектуры с точки зрения заданного множества заинтересованных лиц.
Примеры видов:
* Функциональный/логический вид * Вид код/модуль * Вид разработки (development)/структурный * Вид параллельности выполнения/процесс/поток * Физический вид/вид развертывания * Вид с точки зрения действий пользователя * Вид с точки зрения данных
Хотя было разработано несколько языков для описания архитектуры программного обеспечения, но в настоящий момент нет согласия по поводу того, какой набор видов должен быть принят в качестве эталона. В качестве стандарта «для моделирования программных систем (и не только)» был создан язык UML.
[править] Базовые фреймворки для архитектуры ПО (software architecture frameworks)
Существуют следующие фреймворки, относящихся к области архитектуры ПО:
- 4+1
- RM-ODP (Reference Model of Open Distributed Processing)
- Service-Oriented Modeling Framework (SOMF)
Такие примеры архитектур как фреймворк Захмана (Zachman Framework), DODAF и TOGAF относятся к области архитектуры предприятия (enterprise architectures).
[править] Отличие архитектуры ПО от детального проектирования ПО
Архитектура ПО является реализацией нефункциональных требований к системе, в то время как проектирование ПО является реализацией функциональных требований.
Архитектура ПО, которую также можно представить себе в виде разработки стратегии в это деятельность, связанная с определением глобальных ограничений, накладываемых на проектирование системы, такие как выбор парадигмы программирования, архитектурных стилей, стандарты разработки ПО, основанные на использовании компонентов, принципы проектирования и ограничения, накладываемые государственным законодательством. Детальное проектирование, то есть разработка тактики в это деятельность, связанная с определением локальных ограничений проекта, такие как шаблоны проектирования, архитектурные модели, идиомы программирования и рефакторинга. Согласно «гипотезе напряжения/окрестности» (Intension/Locality Hyphotysis), различие между архитектурным и детальным проектированием определяется критерием окрестности (Locality Criteria), согласно которому утверждение, что дизайн ПО не является локальным (а является архитектурным) истинно тогда и только тогда, когда программа, которая удовлетворяет этому критерию может быть расширена в программу, которая не удовлетворяет ему. Например, стиль приложения клиент-сервер является архитектурным стилем (стратегическим дизайном), потому что программа, которая построена на этом принципе, может быть расширена в программу, которая не является клиент-сервером, например, путем добавления peer-to-peer узлов.
Архитектура является проектированием (дизайном), но не всякий дизайн является архитектурным дизайном. На практике, архитектор определяет грань между архитектурой программного обеспечения (архитектурным дизайном) и детальным дизайном (неархитектурным проектированием). Не существует правил или инструкций, как сделать это, которые подходят для любого случая.
[править] Примеры архитектурных стилей и моделей
Есть много распространенных способов разработки программных модулей и их связей, в том числе:
- Blackboard
- Клиент-серверная модель (client-server)
- Архитектуры, построенные вокруг базы данных (database-centric architecture)
- Распределенные вычисления (distributed computing)
- Событийная архитектура (event-driven architecture)
- Front end and back end
- Неявные вызовы (implicit invocations)
- Монолитное приложение (monolithic application)
- Peer-to-peer
- Пайпы и фильтры (pipes and filters)
- Plugin
- Representational State Transfer
- Rule evaluation
- Поиск-ориентированная архитектуры
- Сервис-ориентированная архитектура
- Shared nothing architecture
- Software componentry
- Space based architecture
- Структурированная
- Трех-уровневая
[править] Примечания
[править] Ссылки
- Крачтен Ф., Оббинк Х.,Стаффорд Д. Ретроспектива программных архитектур на сайте http://www.osp.ru
- Software Architecture:Glossary, Software Engineering Institute (англ.)
- Architecture: Publications, Software Engineering Institute (англ.)
| Это заготовка статьи о программировании. Вы можете помочь проекту, исправив и дополнив её. |
| Это заготовка статьи о программном обеспечении. Вы можете помочь проекту, исправив и дополнив её. |
| Разработка программного обеспечения | |
|---|---|
| Известные деятели |
Кент Бек Гради Буч Фред Брукс Barry Boehm Уорд Каннингем Оле-Йохан Даль Том Демарко Эдсгер Вибе Дейкстра Дональд Кнут Мартин Фаулер Чарльз Энтони Ричард Хоар Watts Humphrey Майкл Джексон Ивар Якобсон Craig Larman James Martin Мейер Бертран Дэвид Парнас Winston W. Royce James Rumbaugh Никлаус Вирт Эдвард Йордан Стив Макконнелл |
| Процесс | |
| Концепции | |
| Направления | |
| Модели разработки |
|
| Другие модели | |
| Прочее | |

