Введение в архитектуру программного обеспечения
Покупка
Основная коллекция
Издательство:
Издательский Дом ФОРУМ
Год издания: 2020
Кол-во страниц: 320
Дополнительно
Вид издания:
Учебное пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-8199-0649-1
ISBN-онлайн: 978-5-16-104169-7
Артикул: 241000.05.01
К покупке доступен более свежий выпуск
Перейти
Рассмотрены первостепенные задачи, возникающие при разработке крупных проектов программного обеспечения, в которых принимают участие сотни разработчиков. Сложность программного обеспечения — это его существенное и неслучайное свойство. На технологию разработки влияют различные факторы, включающие в том числе проблемы проектирования, воздействие экономики, влияние политики, недостаток воображения. Уменьшение рисков снижения успешности или даже провала крупных разработок возможно при использовании архитектурного подхода к проектированию программного обеспечения, основанного на определении глобальных ограничений, накладываемых на проектирование системы, таких как выбор парадигмы программирования, архитектурных стилей, стандартов разработки.
Строгий стиль изложения сопровождается доступными для понимания пояснениями и многочисленными примерами, необходимыми для глубокого усвоения материала.
Книга адресована студентам старших курсов технических специальностей, соискателям степени бакалавра по направлению 09.03.04 «Программная инженерия», аспирантам, научным сотрудникам, преподавателям высших учебных заведений, слушателям институтов повышения квалификации; может быть использована для самообразования.
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
ВВЕДЕНИЕ В АРХИТЕКТУРУ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ Л.Г. Гагарина, А.Р. Федоров, П.А. Федоров Рекомендовано научно-методическим советом Национального исследовательского университета «МИЭТ» в качестве учебного пособия для студентов,обучающихся по направлениям подготовки 09.03.04 «Программная инженерия» (профиль бакалавриата «Программные технологии распределенной обработки информации»), 09.04.04 «Программная инженерия» (программа магистратуры «Программное обеспечение автоматизированных систем и вычислительных комплексов») УЧЕБНОЕ ПОСОБИЕ Москва 2020 ИНФРА-М
УДК 004(075.8) ББК 32.973-018я73 Г12 Гагарина Л.Г. Г12 Введение в архитектуру программного обеспечения : учебное пособие / Л.Г. Гагарина, А.Р. Федоров, П.А. Федоров. — Москва : ФОРУМ : ИНФРА-М, 2020. — 320 с. — (Высшее образование). ISBN 978-5-8199-0649-1 (ФОРУМ) ISBN 978-5-16-011759-1 (ИНФРА-М, print) ISBN 978-5-16-104169-7 (ИНФРА-М, online) Рассмотрены первостепенные задачи, возникающие при разработке крупных проектов программного обеспечения, в которых принимают участие сотни разработчиков. Сложность программного обеспечения — это его существенное и неслучайное свойство. На технологию разработки влияют различные факторы, включающие в том числе проблемы проектирования, воздействие экономики, влияние политики, недостаток воображения. Уменьшение рисков снижения успешности или даже провала крупных разработок возможно при использовании архитектурного подхода к проектированию программного обеспечения, основанного на определении глобальных ограничений, накладываемых на проектирование системы, таких как выбор парадигмы программирования, архитектурных стилей, стандартов разработки. Строгий стиль изложения сопровождается доступными для понимания пояснениями и многочисленными примерами, необходимыми для глубокого усвоения материала. Книга адресована студентам старших курсов технических специальностей, соискателям степени бакалавра по направлению 09.03.04 «Программная инженерия», аспирантам, научным сотрудникам, преподавателям высших учебных заведений, слушателям институтов повышения квалификации; может быть использована для самообразования. УДК 004(075.8) ББК 32.973-018я73 Р е ц е н з е н т : Бондаревский А.С. — доктор технических наук, профессор ISBN 978-5-8199-0649-1 (ФОРУМ) ISBN 978-5-16-011759-1 (ИНФРА-М, print) ISBN 978-5-16-104169-7 (ИНФРА-М, online) ФЗ № 436-ФЗ Издание не подлежит маркировке в соответствии с п. 1 ч. 4 ст. 11 © Гагарина Л.Г., Федоров А.Р., Федоров П.А., 2016 © «ФОРУМ»: «ИНФРА-М», 2016
Введение Cовременная жизнь немыслима без компьютеров — это любая бытовая техника, автомобили, общественный транспорт, телекоммуникационные и корпоративные системы. Продолжать можно практически бесконечно. Разумеется, все это управляется программами более или менее сложными. Постоянно возрастает разнообразие и сложность систем, использующих программное обеспечение (ПО), соответственно возрастают финансовые затраты на ПО как на этапе исследований, так и на этапе разработок. Институт программной инженерии университета Карнеги—Меллон (Software Engineering Institute, SEI) — общепризнанный законодатель в предметной области «Исследований и разработок систем, интенсивно использующих ПО» к классу таких систем относит «системы, в которых ПО представляет существенный сегмент по следующим позициям: функциональность системы, ее стоимость, риски в процессе разработки, время разработки» [1]. В таких системах компоненты ПО взаимодействуют с другими ПОкомпонентами, компонентами и подсистемами другой природы, датчиками, приборами и людьми, вовлеченными в процессы использования ПО. Для разработок систем, интенсивно использующих ПО, типичны крупномасштабные проекты — десятки или сотни разработчиков, месяцы или годы разработки, сотни тысяч или десятки миллионов долларов. К сожалению, разработки таких систем часто приводят к результатам, которые не соответствуют запланированным ожиданиям. Значительное число разработок либо прекращается, либо превышает запланированное время и/или средства, либо завершается в более бедной версии. Степень успешности, выраженная в процентах числа проектов, завершившихся в соответствии с исходными замыслами и планами, невысока и, по некоторым оценкам, не превышает 35 % [2].
К числу негативных факторов, приводящих к снижению успешности и даже провалам крупных разработок, относятся: • нереальные проектные цели; • ошибочные оценки необходимых ресурсов; • неадекватная система требований; • слабое документирование текущего состояния проекта; • отсутствие или слабое управление рисками; • слабое коммуникативное взаимодействие лиц, заинтересованных в проекте; • использование незрелых технологий; • неспособность коллектива справиться со сложностью проекта; • небрежности в разработке; • слабое управление проектом; • отсутствие достаточной благоразумности лиц, заинтересованных в проекте; • коммерческое давление на разработчиков и менеджеров проекта. Для предостережения разработчиков ПО созданы каталоги классических ошибок. Один из таких каталогов представлен в [3], где типовые ошибки распределены по группам «разработчик», «процесс», «продукт» и «технология». Вот некоторые из них: увеличение числа исполнителей для завершения проекта, нереалистичные ожидания, принятие желаемого за действительное, исключение важных задач из процесса проверок, переключение на другие инструменты по ходу проектирования. Сложность ПО — это его существенное и не случайное свойство. На технологию разработки систем оказывают влияние законы построения ПО, изменение алгоритмов в процессе разработки ПО, трудности распределения структур и функций, проблемы проектирования, проблемы функциональности, важность организации процесса разработки ПО, воздействие экономики, влияние политики, недостаток воображения. Уже перечисленного вполне достаточно для того, чтобы понять необходимость применения любых средств, позволяющих снизить сложность как конкретного ПО, так и процесса его разработки. Важным концептуальным для методологии программной инженерии моментом стало введение понятия «архитектура» в его применении к ПО и системам, базирующимся на ПО. Началом использования современного значения этого понятия принято считать 1992 г. — 4 Введение
работа Д. Перри и А. Вульфа [4]. Дальнейшие исследования в системной и программной инженерии позволили выввести взаимосвязанную совокупность архитектур [2, 5, 6]: • программного обеспечения; • аппаратного обеспечения в базисе основных единиц компьютерной и телекоммуникационной техники; • информационного обеспечения; • организационного обеспечения, раскрывающего связность организационных структур (в том числе на уровне персонифицированных ролей и ответственности) с бизнеспроцессами; • предприятия с позиций бизнеса, в общем случае выходящего за рамки компании. Важные результаты, полученные в последние годы: • создана предметная область «Архитектура ПО», задачи которой для разработки ПО носят принципиальный характер; • разработан и широко используется на практике ряд международных стандартов, в которых переосмыслен и обобщен опыт разработок ПО с различных позиций (жизненный цикл, работа с требованиями, архитектура, качество, организационнопрофессиональная зрелость коллективов разработчиков и др.); • созданы технологии и инструментальные средства, аналогов которых в предшествующей инженерной практике не было (например, мастерметодология Rational Unified Process (RUP) [7, 8], инструментальные средства программирования для корпоративных сетей, в том числе и для WEBпрограммирования); • создан и подтвердил на практике свою исключительную полезность унифицированный язык моделирования UML [9]. Введение 5
Глава 1 АРХИТЕКТУРА КАК ФОРМА КОНЦЕПТУАЛЬНОГО СУЩЕСТВОВАНИЯ ПО 1.1. Определения архитектуры ПО и ее значимость Существует множество определений понятия «архитектура ПО». Одного и безоговорочно принятого определения архитектуры не существует. Наиболее богатая коллекция вариантов употреблений этого термина представлена на сайте SEI [1], где каждому, кто считает, что он сформулировал это понятие более точно, предоставлена возможность включить его в общую коллекцию. Мы будем придерживаться следуюшего определения. Архитектура программного обеспечения (software architecture) — это структура программы или вычислительной системы, которая включает программные компоненты (элементы), видимые снаружи свойства этих компонентов, а также отношения (взаимодействия) между ними. Архитектура затрагивает не только структуру и поведение, но также использование, функциональность, и другие аспекты. Этот термин также относится к документированию архитектуры программного обеспечения. Документирование архитектуры ПО упрощает процесс коммуникации между стейкхолдерами (stakeholders — лица, заинтересованные в проекте), позволяет зафиксировать принятые на ранних этапах проектирования решения о высокоуровневом дизайне системы и позволяет использовать компоненты этого дизайна и шаблоны повторно в других проектах.
Причем архитектура программного обеспечения это не блочная диаграмма, весьма приблизительно отражающая функциональную декомпозицию системы. Программная архитектура — многогранный подход, гарантирующий, что программное обеспечение будет отвечать своему предназначению. Основополагающей идеей дисциплины программной архитектуры является идея снижения сложности системы путем абстракции и разграничения полномочий. Архитектура ПО является реализацией нефункциональных требований к системе, в то время как проектирование ПО является реализацией функциональных требований. Архитектура ПО, которую также можно представить себе в виде разработки стратегии — это деятельность, связанная с определением глобальных ограничений, накладываемых на проектирование системы, таких как выбор парадигмы программирования, архитектурных стилей, стандартов разработки ПО, основанных на использовании компонентов, принципов проектирования, и ограничения, накладываемые государственным законодательством. Детальное проектирование, т. е. разработка тактики, — это деятельность, связанная с определением локальных ограничений проекта, таких как шаблоны проектирования, архитектурные модели, идиомы программирования и рефакторинга [9, 10, 11, 12]. В работе [13] предложено следующее толкование ряда позиций определения архитектуры. Архитектура в любой версии определяет структуру. Разумеется, архитектура не сводится только к структурам (деление на части, элементы, интерфейсы, связи, взаимодействие), но структурный аспект в ее содержании и его материализации является наиболее существенным. Архитектура определяет поведение. Архитектура определяет не только структуры системы через элементы и связи, но также и взаимодействие элементов структур, осуществляемое во времени. Для выражения динамики процессов в архитектурных описаниях используют различные средства, например «диаграммы последовательностей» на языке UML. Архитектура фокусирует свои интересы на существенных элементах структуры и поведения. При построении архитектуры разработчики абстрагируются до самого существенного ввлияющего на жизнеспособность проекта как целого. 1.1. Определения архитектуры ПО и ее значимость 7
Архитектура находит баланс для совокупности требований лиц, заинтересованных в разработке ПО. Система требований, выявленная и сформированная до построения архитектуры, нуждается в адаптации к реалиям средств, выделенных на разработку, и к реалиям будущего использования ПО, учитывающим ее сопровождение и эволюцию. Наиболее сложно сбалансировать нефункциональные требования, отвечающие как за качество ПО, так и за качество процесса разработки. Архитектура интегрирует существенные решения на основе принципов рациональности. Существенные решения и формы их интеграции в архитектуре ПО должны быть рационально представлены и обоснованы. Решения должны не только декларироваться, но и объясняться, почему им было отдано предпочтение среди альтернатив. Архитектура должна быть согласована с архитектурным стилем или с совокупностью стилей. В разработках архитектур следует использовать накопленный опыт успешных разработок, в первую очередь опыт, вложенный в архитектурные стили, каждый из которых является образцом общих типовых решений. На архитектуру оказывает воздействие среда использования ПО. Конкретное ПО разрабатывается в конкретной среде разработки и для конкретной среды использования, что не может не влиять на архитектурные решения. Основные факторы, влияющиеие на архитектуру, — это предназначение (миссия) ПО; лица, заинтересованные в разработке; ограничения разных типов; уровень квалификации лиц, вовлеченных в процессы использования ПО. Архитектура воздействует на структуру команды, которая разрабатывает ПО. Для реализации того, что заложено в архитектуру, требуются вполне конкретные умения квалифицированных исполнителей. По архитектуре можно заключить, какие специалисты и в каком количестве потребуются для разработки ПО. Архитектура присутствует в любом ПО. Даже если при разработке ПО вопрос о создании архитектуры по тем или иным причинам не поднимался, разработанная ПО будет иметь архитектуру, но эта архитектура будет носить случайный (по принятым проектным решениям) характер. Архитектура имеет определенные границы. Различают архитектуру программного обеспечения, аппаратного обеспечения, информационного обеспечения; организационного обеспечения, предприятия. И все же архитектуры ПО являются тем центром, около которого или от которого строят архитектуры других типов. 8 Глава 1. Архитектура как форма концептуального существования ПО
1.2. Место архитектурных решений Содержание определений архитектуры явно и неявно указывает на место архитектурных решений и их роль в разработке ПО. В современной практике разработки ПО широко используется спиральноитеративная модель жизненного цикла, что приводит к необходимости возврата к вопросам разработки архитектуры с каждым циклом спирали (рис. 1). В процессе разработки ПО границы между этапами жизненного цикла и итерациями в рамках одного и того же этапа «размыты». Это особенно типично для этапов анализа требований (результатом которого является система требований — СТ) и разработки архитектуры (результатом которого является архитектурное описание — АО). Каждый из этапов «анализа» и «архитектуры» приводит к определенной форме существования ПО в рамках его жизненного цикла, что показано на рис. 2. На рисунке показано, что формы существования ПО на ранних этапах разработки являются концептуальными, т. е. представляют собой связную совокупность текстовых (в том числе табличных) документов, графических моделей и диаграмм (часто использующих для своего представления язык UML) [14]. Повторимся — не существует четкого разграничения понятия архитектурного программирования и реализации ПО. Часть перечисленных пунктов может быть и не отнесена к категории архитектура. Так же как и некоторые формулировки принципов модульного программирования и ООП могут быть отнесены к архитектурным реше1.2. Место архитектурных решений 9 Рис. 1. Спиралевидный процесс разработки
ниям. Но самое главное требование к архитектуре — расширяемость— масштабируемость. Если ее нет — то это не архитектурное решение. Например, стиль приложения клиент—сервер считается архитектурным стилем (стратегическим дизайном), потому что программа, которая построена на этом принципе, может быть расширена в программу, которая не является клиентсервером, например, путем добавления peertopeer узлов. Архитектура является проектированием (дизайном), но не всякий дизайн является архитектурным дизайном. На практике архитектор определяет грань между архитектурой программного обеспечения (архитектурным дизайном) и детальным дизайном (неархитектурным проектированием). Являясь в настоящий момент своего развития дисциплиной без четких правил, проектирование архитектуры ПО все еще является смесью науки, искусства и «магии». Аспект «искусства—магии» заключается в том, что любая коммерческая система подразумевает наличие применения или миссии. То, как сформулированы ключевые цели системы, описывается с помощью сценариев как нефункциональные требования к системе, также известные как атрибуты качества, определяющие, как будет вести себя система. Атрибуты качества системы включают в себя отказоустойчивость, сохранение обратной совместимости, расширяемость, надежность, пригодность к сервисному обслуживанию, доступность, безопасность, удобство использования и пр. С точки зрения пользователя программная архитектура дает направление для движения и решения задач, связанных со специальностью каждого такого пользователя, например заинтересованного 10 Глава 1. Архитектура как форма концептуального существования ПО Рис. 2. Архитектура, как форма концептуального существования ПО
К покупке доступен более свежий выпуск
Перейти