Введение
Архитектура программного обеспечения (англ. software architecture) — это совокупность решений об организации программной системы, в том числе таких, как:
- Выбор и определение структурных элементов, организованных определенными способами для взаимодействия друг с другом, складывающихся в единый программно-аппаратный комплекс;
- Соединение выбранных элементов структуры во всё более крупные системы;
- Выбор стиля, впоследствии используемого всеми участниками разработки, для организации решений в процессе производства информационных систем.
Создание архитектуры приложения – это по сути своей процесс формирования структурированного решения, которое будет отвечать всем техническим и функциональным требованиям. При этом каждое из этих решений оказывает весомое влияние как на качество, так и на производительность, удобство обслуживания и общий успех приложения.
Неправильно спроектированная архитектура может являться причиной нестабильности работы программного обеспечения, сложности в поддерживании существующих или будущих бизнес-требований, сложности при развертывании или управлении в среде производственной эксплуатации. Проектирование систем должно осуществляться с учетом потребностей пользователя, ИТ-инфраструктуры и преследуемых бизнес-целей. Для каждой из этих составляющих определяются ключевые сценарии и выделяются важные параметры качества программного обеспечения (например, надежность или масштабируемость).
Рисунок 1. Пользователь, бизнес, система
Главной задачей системного архитектора является поиск компромиссов и баланса между порой абсолютно разными и даже конкурирующими требованиями этих трех областей (рис. 1).
Основное назначение архитектуры – описание использования или взаимодействия основных элементов и компонентов приложения. При этом основной ее целью является выявление требований, оказывающих влияние на структуру приложения и уменьшение человеческих трудозатрат на создание и сопровождение системы.
Необходимо помнить, что архитектура должна:
- Раскрывать структуру системы, но скрывать детали реализации.
- Реализовывать все варианты использования и сценарии.
- По возможности отвечать всем требованиям различных заинтересованных сторон.
- Выполнять требования, как по функциональности, так и по качеству.
Критерии хорошей архитектуры
Хорошая архитектура — это прежде всего выгодная архитектура с точки зрения сложности и эффективности процесса разработки и сопровождения программного комплекса. Такое программное обеспечение легче расширять и изменять, а также проводить тестирование кода и его отладку. Ниже представлены несколько критериев для оценки качества архитектуры системы.
- Эффективность системы.
Первоочередной целью любой программы является решение поставленных задач, причем в различных условиях. Кроме того, приоритетными являются такие характеристики, как надежность, производительность, безопасность и масштабируемость.
- Гибкость системы.
Любое приложение со временем подвергается некоторым изменениям вследствие изменений существующих требований или добавления новых. Чем меньше проблем и ошибок вызовет внесение изменений в существующий функционал — тем более гибкой и конкурентоспособной является система. Изменение одного фрагмента системы не должно влиять на другие ее фрагменты.
- Расширяемость системы.
Под этим критерием понимается возможность добавлять в систему новые сущности и функции без нарушения основной структуры. При проектировании системы необходимо придерживаться принципа YAGNI (you ain’t gonna need it, «Вам это не понадобится»), который подразумевает под собой закладку только основного и самого необходимого функционала на начальном этапе. При этом спроектированная архитектура не должна препятствовать добавлению нового функционала по мере необходимости.
- Масштабируемость процесса разработки.
Срок разработки должен сокращаться за счёт добавления к проекту новых людей. Для этого архитектура должна позволять распределить процесс разработки так, чтобы некоторое количество людей могли работать над программой одновременно.
- Тестируемость.
Легко тестируемый код содержит меньше ошибок и в перспективе должен надежнее работать. Существует целая методология разработки программ на основе тестов, которая так и называется — Разработка через тестирование (Test-Driven Development, TDD).
- Возможность повторного использования.
Систему желательно проектировать так, чтобы ее фрагменты можно было повторно использовать в других системах.
- Хорошо структурированный, читаемый и понятный код. Сопровождаемость.
Поскольку команда разработки одной и той же системой обычно подвергается изменениям, зачастую сопровождать программу приходится специалистам, не принимавших участие непосредственно в разработке данной системы. Поэтому хорошая архитектура должна давать возможность относительно легко и быстро разобраться в системе новым разработчикам. Проект должен быть хорошо структурирован, не содержать дублирования, иметь хорошо оформленный код и желательно документацию.
Заключение
В наше время в мире протекает процесс глобальной цифровизации, что влечет за собой несомненное увеличение объемов программного обеспечения, хранимой информации, зачастую конфиденциальной, такой как персональные данные и т.д. В таких условиях наиболее актуальным вопросом перед специалистами в IT-сфере становится вопрос безопасности хранимой, обрабатываемой и передаваемой информации, что непосредственно зависит от качества используемого программного обеспечения, в частности от его архитектуры. Приведенные выше принципы построения архитектуры и критерии для оценки ее качества служат некой базой работы для системных архитекторов и разработчиков, обеспокоенных качеством своего продукта.
Список литературы
- Мартин Р. Чистая архитектура. Искусство разработки программного обеспечения. СПб.: Питер, 2020. 352 с.: ил. (Серия «Библиотека программиста»).
- Руководство Microsoft по проектированию архитектуры приложений, 2-е издание https://blogs.technet.microsoft.com/isv_team/2010/09/16/microsoft-patterns-practices/ (дата обращения 19.11.19).
- Создание архитектуры программы или как проектировать табуретку https://habr.com/ru/post/276593/ (дата обращения 19.11.19)