Архитектор программного обеспечения

Архите́ктор програ́ммного обеспече́ния — проектная роль в разработке ПО, профессия, возможно — должность[3].

Общие сведения
Архитектор программного обеспечения
Описание
Область деятельности
Архитектор программного обеспечения отвечает за проектирование структуры и взаимодействия компонентов программных систем.
Cпециализация

Корпоративная архитектура

Облачные решения
Микросервисы и распределённые системы
Big Data и аналитика
Web и мобильные архитектуры[1]
Деятельность

Проектирование архитектуры

Оценка технологий и инструментов
Документирование архитектуры
Контроль и ревью
Решение технических проблем[2]
Образование

Высшее техническое образование в области компьютерных наук, информационных технологий, прикладной математики или инженерии.

Специализация в разработке ПО
Дополнительные сертификации

Описание

Ключевая обязанность архитектора — проектирование архитектуры ПО, то есть принятие ключевых проектных решений относительно внутреннего устройства программной системы и её технических интерфейсов[4].

Проектирование архитектуры ПО является частным случаем проектирования ПО[5].

Типы архитекторов программного обеспечения

Тип архитектора Стратегическая направленность Системные взаимодействие Коммуникация Дизайн
Организационный архитектор Охватывают несколько проектов Высоко абстрактный На уровне всей организации Дизайн высокого уровня
Архитектор решений Ориентированность на взаимодействие решений Детализированный С несколькими командами Подробный
Архитектор приложений Повторение использование компонентов и их поддержание В рамках одного проекта С одной командой Очень подробно[6]

История

С ростом популярности разработки многослойных приложений увеличился и выбор способов их создания. Разработчики часто оказывались в ситуации, когда приходилось «изобретать колесо» заново в одной и той же компании. Так появилась необходимость в новой роли — архитектор программного обеспечения[7].

Основные обязанности этого специалиста включают:

  • Ограничение выбора при разработке, такие как:
    • выбор стандарта для разработки приложений;
    • создание/определение фреймворка для использования в приложении.
  • Определение потенциальных точек повторного использования в компании или приложении, таких как:
    • широкое видение архитектуры;
    • компонентно-ориентированный дизайн;
    • знакомство с другими приложениями в организации.

Эта роль стала востребованной в конце 1990-х годов, когда объектно-ориентированное программирование (ООП) получило широкое распространение. С помощью ООП стали возможны создание и управление более крупными и сложными приложениями, что потребовало более общего и структурированного подхода. Новые обязанности архитекторов программного обеспечения стали включать:

  • Разбиение сложности больших приложений на более управляемые части на этапе проектирования;
  • Понимание функций каждого компонента;
  • Понимание взаимодействий и зависимостей между компонентами;
  • Общение с разработчиками по этим вопросам.

Для этого архитектору программного обеспечения необходимо иметь, по крайней мере, базовые знания об UML (унифицированном языке моделирования) и ООП. UML позволяет архитекторам объяснять свои проектные решения разработчикам и другим членам команды. Это аналогично архитектурным чертежам в строительстве. Однако UML — не единственный способ коммуникации.

«Башня из слоновой кости»

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

Архитектор программного обеспечения

Это лицензированный профессионал в области информатики или инженер-программист, являющийся членом профессионального сообщества в нескольких странах.

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

Функциональный аналитик, архитектор программного обеспечения и инженер-программист имеют чётко разграниченные обязанности: первый управляет сценариями использования, второй проектирует архитектуру, а третий занимается разработкой[8][9].

Задачи

В проектирование архитектуры ПО входят следующие задачи

  • Планирование

При планировании проектов разработки программного обеспечения архитекторы обычно участвуют в создании технических заданий, особенно в выборе, описании и обосновании технических подходов, применяемых для реализации. Кроме того, архитекторы часто играют ведущую роль в оценке затрат и выборе модели разработки.

  • Анализ

При анализе программные архитекторы обычно участвуют только в случае необходимости создания прототипов (mock-ups). Прототипы помогают лучше понять определённые техники и технологии архитектуры, чтобы решить, насколько они практичны.

  • Проектирование

Архитекторы обычно несут ответственность за все процессы проектирования. В частности, они отвечают за создание, описание и передачу программной архитектуры, используя, например, унифицированный язык моделирования (UML) и подходящие шаблоны проектирования. Архитекторы также участвуют в выборе среды выполнения, но редко имеют влияние на выбор аппаратной платформы. В большинстве случаев они не занимаются системной архитектурой оборудования[10][11].

  • Программирование

В процессе программирования архитекторы обычно несут ответственность за корректное выполнение определённой архитектуры и правильное использование библиотек и фреймворков. Они также определяют стиль программирования и инструменты разработки, такие как интегрированные среды разработки (IDE), инструменты управления сборкой и системы контроля версий. При этом архитекторы отвечают за возможность реализации, но не за саму реализацию.

  • Тестирование

В рамках тестирования архитекторы обычно отвечают за модульное тестирование, реже — за интеграционное. Системные и приёмочные тесты они обычно поддерживают, разрабатывая тестовые драйверы и интерфейсы.

  • Вспомогательные процессы

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

Полномочия архитектора ПО

  • рецензирование требований
  • разработка нефункциональных требований[8]
  • участие в совещаниях с заказчиком
  • стратегическое планирование технического развития системы
  • реинжиниринг ПО
  • архитектурный надзор разработки
  • текущее консультирование команды
  • технический аудит сторонних/вновь приобретённых систем
  • регламентация процедуры внесения изменений
  • разработка стандартов кодирования/проектирования[8]
  • написание технического проекта.

Виды программных архитекторов

Корпоративные архитекторы (Enterprise-Architekten) принимают организационные решения, касающиеся нескольких программных систем. Эти решения обычно затрагивают несколько команд разработчиков или мест работы. Примеры таких решений:

  • Введение межсистемных архитектур, например, сервис-ориентированной архитектуры (SOA).
  • Решение о внедрении межсистемных сред разработки или фреймворков.

Архитекторы приложений (Applikationsarchitekten) принимают архитектурные решения для конкретного приложения и, следовательно, для одной команды разработки. Примеры таких решений:

  • Выбор конкретного ORM (объектно-реляционного маппера), если такое решение не принято корпоративным архитектором.
  • Определение архитектуры приложения.

Существуют и похожие описания должностей, например:

  • Архитектор решений (Solutions-Architekt) — описывает роль человека, который управляет бизнес-решением, охватывающим несколько программных систем.
  • Системный архитектор (System-Architekt) — обычно используется как синоним архитектора приложений.
  • Системные архитекторы (Systems Architect) — используется как синоним корпоративного архитектора или архитектора решений.

Обязанности

Несмотря на отсутствие простого определения, в профиле архитектора программного обеспечения выделяют несколько общих аспектов[12]:

  1. Стратегическое мышление Архитекторы сосредоточены на решении бизнес-задач компании с учётом стратегической перспективы. Например, решения принимаются с учётом устойчивого роста компании и долгосрочной производительности ПО. Особое внимание уделяется созданию возможностей для повторного использования. Из-за стратегического фокуса решения архитектора могут сильно отличаться от решений разработчиков и менеджеров проектов. Часто архитекторы ведут себя как бизнес-менеджеры, обладающие техническими знаниями. В то время как разработчики сосредоточены на создании отдельных компонентов ПО, архитекторы определяют, как эти компоненты будут взаимодействовать[7] .
  2. Системное взаимодействие Архитекторы работают с интерфейсами, границами и взаимодействиями между системами. Это может включать взаимодействие двух систем, написанных на разных языках и расположенных в разных местах, или взаимодействие компонентов в одной системе. Архитектура, ориентированная на сервисы (SOA), стала недавним развитием, упрощающим работу архитекторов, так как она предлагает подход к архитектуре, более близкий и согласованный с их потребностями в определении API систем.
  3. Дизайн Архитектор принимает множество решений, как на высоком уровне, так и, иногда, на низком. Архитектор также диктует стандарты кода, инструменты и платформы. Эти меры нужны не для того, чтобы ограничивать выбор разработчиков, а чтобы помочь достичь стратегических целей.
  4. Коммуникация Важный аспект работы архитектора связан с коммуникацией: сначала для понимания бизнес-требований, а затем для передачи своего архитектурного видения. Помимо устного общения, существуют различные модели архитектуры программного обеспечения, которые помогают эффективно делиться архитектурными решениями.

Образование

Из-за высокого уровня абстракции основной требованием для начала работы в качестве программного архитектора является образование в области информатики с упором на программную инженерию или архитектуру программного обеспечения, полученное в университете или высшей школе. Также инженерные или естественнонаучные специальности с соответствующим направлением подготовки обеспечивают хорошие возможности для старта карьеры[13][14][15][16][17][18].

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

1. Московский государственный технический университет имени Н. Э. Баумана (МГТУ им. Баумана)[19]

  • Направления: Информатика и вычислительная техника, Программная инженерия.

2. Национальный исследовательский университет «Высшая школа экономики» (НИУ ВШЭ)[20]

  • Факультет компьютерных наук: Программная инженерия.

3. Санкт-Петербургский политехнический университет Петра Великого (СПбПУ)[21]

  • Институт компьютерных наук и технологий: Направления, связанные с информационными системами и проектированием программного обеспечения.

4. Московский физико-технический институт (МФТИ)

  • Факультет управления и прикладной математики: Программная инженерия, Системная архитектура.

5. Национальный исследовательский ядерный университет «МИФИ» (НИЯУ МИФИ)[22]

  • Программы по направлению Информатика и вычислительная техника.

6. Университет ИТМО (Санкт-Петербург)

  • Факультет информационных технологий и программирования: Программная инженерия, Архитектура информационных систем.

Метафора

Термин «программный архитектор» стал известен за пределами ИТ-сферы в начале 2000-х годов, когда Билл Гейтс, в то время президент и генеральный директор Microsoft, отошёл от своей роли, заняв должность главного архитектора программного обеспечения (Chief Software Architect). Этот титул отражал его новую задачу — контроль и консультирование по многим проектам разработки программного обеспечения в Microsoft, функции, которые обычно выполняет технический директор (Chief Technical Officer)[23].

Крупные компании и организации для работы архитектором ПО

1. Крупные IT-компании: Яндекс, VK[24] , Mail.ru Group, Ростелеком, СберТех.

2. Телекоммуникационные компании: МТС[25] , Билайн[26] , МегаФон, Tele2.

3. Государственные организации: Министерства, муниципальные учреждения, национальные агентства, работающие с данными и IT-инфраструктурой.

4. Банковские и финансовые учреждения: Сбербанк[27] , ВТБ, Альфа-Банк[28] , Тинькофф, Газпромбанк.

5. Международные компании: IBM, Cisco, Huawei[29] , Dell, Microsoft, Google.

6. Научно-исследовательские и образовательные учреждения: крупные университеты, исследовательские центры, НИИ.

7. Промышленные и энергетические компании: Газпром, Росатом, РЖД, Лукойл, Роснефть, Норникель.

8. Аутсорсинговые IT-компании и дата-центры: компании, предоставляющие услуги в области сетевой инфраструктуры и безопасности для сторонних клиентов, например, Softline, КРОК, ИТ-Град, DataLine.

Примечания

  1. Software Architecture. Software Engineering Institute. Carnegie Mellon University. Дата обращения: 29 июня 2022.
  2. Анализ проблематики программного обеспечения в сфере архитектурного проектирования.
  3. Архитекторов программного обеспечения вписали в стандарт. www.comnews.ru. Дата обращения: 1 октября 2024.
  4. Software Architecture. Software Engineering Institute. Carnegie Mellon University. Дата обращения: 29 июня 2022.
  5. Полянин, Михаил. Архитектор в ИТ: кто это и как им стать — Журнал «Код», Журнал «Код» программирование без снобизма (12 октября 2021). Дата обращения: 1 октября 2024.
  6. Anecdote about an interaction between Solution and Enterprise Architect
  7. 1 2 Fundamentals of Software Architecture: An Engineering Approach. — O'Reilly Media, 2020. — ISBN 978-1492043454.
  8. 1 2 3 ISO/IEC/IEEE. ISO/IEC/IEEE 42010:2011 Systems and software engineering – Architecture description (2011). Дата обращения: 12 сентября 2012.
  9. Garlan & Shaw. An Introduction to Software Architecture (1994). Дата обращения: 25 сентября 2006.
  10. Jansen, A. Software Architecture as a Set of Architectural Design Decisions // 5th Working IEEE/IFIP Conference on Software Architecture (WICSA'05) / A. Jansen, J. Bosch. — 2005. — P. 109. — ISBN 978-0-7695-2548-8. — doi:10.1109/WICSA.2005.61.
  11. Tang, A.; Han, J.; Vasa, R. (2009). “Software Architecture Design Reasoning: A Case for Improved Methodology Support”. IEEE Software. 26 (2): 43. DOI:10.1109/MS.2009.46. HDL:1959.3/51601. S2CID 12230032.
  12. Kruchten, P. (2008). “What do software architects really do?”. Journal of Systems and Software. 81 (12): 2413—2416. DOI:10.1016/j.jss.2008.08.025.
  13. beispielsweise Architektengesetz Baden-Württemberg § 2 Berufsbezeichnung, Berliner Architekten- und Baukammergesetz untersagt in § 4, Absatz 7 und Baukammerngesetz Nordrhein-Westfalen § 2 Berufsbezeichnungen
  14. Rechtsprechung in Hessen durch das OLG Frankfurt Senat für Bußgeldsachen: Oberlandesgericht Frankfurt am Main, Az.: 2 Ss-OWi 300/10
  15. Rechtsprechungen in Nordrhein-Westfalen durch das LG Duisburg und LG Münster: LG Duisburg — Urteil vom 16. November 2009 — Az. 23 O 8/09 und LG Münster — Urteil vom 26. Juni 2008 — Az. 022 O 61/08
  16. Berliner Architekten- und Baukammergesetz (ABKG): Link
  17. Rechtsprechung in Österreich: Link
  18. Rechtsprechung in Österreich mit Urteil vom 20. März 2007: Link
  19. [1]
  20. исследовательский университет «Высшая школа экономики»
  21. Санкт-Петербургский государственный университет
  22. сайт НИЯУ МИФИ
  23. Perry, D. E.; Wolf, A. L. (1992). “Foundations for the study of software architecture” (PDF). ACM SIGSOFT Software Engineering Notes. 17 (4): 40. CiteSeerX 10.1.1.40.5174. DOI:10.1145/141874.141884. S2CID 628695.
  24. [2]
  25. МТС - связь и экосистема цифровых сервисов - Частным клиентам | Официальный сайт МТС - Москва и Московская область
  26. ПАО Вымпелком - Главное о нас - билайн Москва
  27. sberbank.ru
  28. [3]
  29. Официальный сайт Huawei (Хуавэй) в России

Дополнительно по теме

Категории