Актуальное состояние области информационных технологий в части разработки аналитической архитектуры программного обеспечения
Цель: в лекции мы планируем объективно представить значимость темы архитектурного проектирования для отрасли информационных технологий, и специалистов, осуществляющих свою профессиональную активность в данном домене, задать рамки курса, привести краткий обзор "best practice", который составляет "неприкосновенный" репозиторий направления архитектурного проектирования, используемый в области информационных технологий всеми компаниями, которые стремятся к созданию, сопровождению и развитию высокотехнологичных программных продуктов.
Введение
Архитектурное проектирование, как профессиональное направление человеческой деятельности, имеет глубокие корни и появилось задолго до того, как был создан первый компьютер.
В основе рассматриваемой деятельности лежат понятия, которые являются двумя разными сторонами одной и той же медали:
- Архитектура – как результат;
- Проектирование – как средство достижения поставленного результата;
Если говорить об архитектуре в целом, а вернее о классическом этапе развития данной отрасли человеческой деятельности, то на ум сразу приходят параллели, связанные с величественными и значимыми постройками – Пирамиды Хеопса, Эйфелева Башня и т.д., поражающими, прежде всего, своей грандиозностью и внешним обликом.
Если мы поднимем вопрос о направлении развития архитектуры последнего времени, то оно связано со стремлением максимально использовать функциональность зданий, а уж потом с совершенством образа проектируемых сооружений.
Эти тренды обусловлены эволюцией человеческого сознания и переходом от созерцательного образа мысли и жизни к более действенным формам существования, обеспечивающим быстрейшее достижение результата.
Научно-технические, технологические и социальные преобразования порождают изменения всего мира, а архитектура, не только как прикладное искусство, но как фундаментальная наука и технология, это всего один из объектов внешних преобразований.
Проектирование - это вид активности, направленный на создание уникального продукта (услуги), последовательность этапов реализации которого будет определяться "внешними" факторами и определять его конечные преимущества и недостатки.
Область проектирования получила широкое распространение в виде современной и эффективной формы деятельности – проект.
Архитектурное проектирование - это вид активности, который своей целью ставит создание архитектуры в процессе выполнения проекта.
Архитектурное проектирование программного обеспечения, в своей актуальной форме, одной из задач ставит создание артефакта (архитектуры), который должен обеспечить достижение результатов деятельности организаций, использующих программные продукты для реализации своих процессов.
Нужно сказать о том, что окружающий нас мир все более и более зависит от области информационных технологий в целом, а в частности от различного программного обеспечения, которое:
- Частично или полностью автоматизирует выполнение рутинных операций, которые, как правило, являются наиболее ресурсозатратными;
- Предоставляет уникальные возможности, связанные с "online" обменом и преобразованием информации в разных целях;
- Оптимизирует не только использование человеческого капитала, но и затраты, связанные с содержанием недвижимого имущества;
- И т.д.
Программные продукты – это основной элемент большинства современных высокотехнологичных доменов (сотовая связь, видеотрансляции, охранная деятельность, управление транспортным и другими видами движения и т.д.) деятельности. Сегодня очень трудно (вернее практически невозможно) найти компанию, которая не использует информационные технологии в своей деятельности.
Все, от предприятий малого бизнеса, до традиционных, консервативных по своей природе общественных, финансовых, социальных организации госсектора стремятся автоматизировать выполнение многих рутинных операций. А многие из них не смогут существовать на рынке без применения специализированного программного обеспечения. Об инновационных компаниях и значимости для них информационных технологий говорить излишне.
Информационные продукты, используемые для достижения результатов деятельности организаций, просто уже не существовали бы, а точнее не выдержали проверку временем.
Подобную проверку выдерживают те программные продукты, в процессе создания и внедрения которых была фаза проектирования архитектуры программного обеспечения.
Именно этот этап отличает "временную" программу, разрабатываемую для "залатывания дыр", от осознанного программного продукта, применять и развивать который, организации нацелены на достаточно длительном временном интервале своего жизненного цикла.
В трудах классика сферы информационных технологий - Фредерика Брукса, можно найти следующее отличие программы от программного продукта:
- Максимально обобщённый диапазон и типы входных данных;
- Тщательное тестирование;
- Наличие подробной документации;
- Программный продукт требует в 3 раза больших временных затрат, чем программа;
В нашем курсе мы будем рассматривать именно программные продукты и некоторые процессы, сопутствующие их реализации.
Именно качественные (или не очень) программные продукты формируют электронный мир программного обеспечения, который не только окружает каждого современного жителя планеты Земля, но формирует его сознание и образ поведения в нем.
Чтобы качественно поддерживать и развивать сегодняшний мир программного обеспечения необходимо целостное понимание того, что именно и каким образом надо развивать, какие ранее допущенные ошибки не следует повторять, а что из прошлого необходимо учесть и использовать сейчас и в будущем.
Программное обеспечение, лежащее в основе мира будущего, должно обеспечивать необходимые качественные характеристики, такие как:
- Функциональность;
- Производительность;
- Надежность;
- Безопасность;
- И пр.
Теме создания таких информационных систем, а вернее архитектуре, которая будет являться ядром для подобных информационных продуктов, посвящен наш курс.
Исторические предпосылки к созданию курса. Актуальность архитектурного проектирования программного обеспечения
Начиная с середины 50-х годов ХХ века понятие архитектуры программного обеспечения стало очень широко и бурно обсуждаться в профессиональном сообществе ИТ специалистов. Связано это было с тем, что архитектуру, в её первоначальном способе применения, рассматривали только в виде необходимого базиса создаваемых информационных систем.
Немного оговоримся и уточним – в тот момент архитектуру программного обеспечения понимали как сугубо техническое понятие, т.е. набор программных и системных модулей, оптимально взаимодействующих между собой по заранее спроектированным связям и протоколам, обеспечивающим заданное эффективное функционирование программных продуктов. А программные продукты, в свою очередь, служили для узконаправленных специализированных задач, покрывавших потребности военных целей.
Со временем, по причинам постепенных "рывков" развития сферы ИТ, последующего масштабирования на все области деятельности человечества, архитектура программного обеспечения стала целиком и полностью предметом работы разработчиков программного обеспечения и в большинстве случаев, незримо подразумевалась как часть процессов жизненного цикла разработки информационных систем. Это было связано с тем, что ресурсов на создание программного обеспечения стало выделяться меньше, различные этапы "сращивались", а результатов от разработки, внедрения и применения стали ждать как можно раньше.
С учетом постепенно возрастающего количества запросов к качеству информационных продуктов, складывающегося из множества различных компонентов, так долго продолжаться не могло.
Тема архитектуры программного обеспечения, но уже не только как технического артефакта процесса разработки, обеспечивающего высокие показатели нефункциональных характеристик, но как центральной части программных продуктов, снова стала актуальной.
В последнее десятилетие созрело понимание того, что архитектура программных продуктов должна быть результатом работы не столько программистов, а специальных групп разнопрофильных профессионалов. Эти группы должны быть способны с заданным уровнем качества создать полноценную архитектуру, способную охватить многочисленные составляющие информационных продуктов.
Архитектурное проектирование, это преимущественно инженерная дисциплина, рассматривать которую только с технической или только с бизнес точки зрения не корректно. Она должна быть рассмотрена в взаимосвязаннном комплексе причин возникновения, процессов создания и, соответственно, результатов. Только так удастся установить причинно – следственные связи и выстроить оптимальную систему, на которой сможет быть спроектирована архитектура любой сложности.
Для того чтобы обеспечить результат архитектурного проектирования важно сам процесс проектирования рассматривать еще и с позиции социальной активности, которая должна контролироваться по соответствующим нормам и правилам.
Разработка архитектуры и последующего программного обеспечения это "гибкая" активность современного мира.
Доказано, что на сегодняшнем этапе развития процессов создания программного обеспечения, существующие классические инженерные практики уже не столь эффективны, как несколько лет назад. Они довольно "тяжеловесны" для непостоянных требований и изменяющихся условий окружающего мира.
Также надо отметить, что архитектура это 100% продукт "человеческой мысли", что предъявляет особые дополнительные требования к ключевым аспектам исследования данной профессиональной области.
Результат подобного отношения к архитектурному проектированию характеризует данную активность еще и как социальный объект.
Из всего сказанного следует, что большая роль человеческого фактора заложена в успешное архитектурное проектирование и создание качественного и эффективного программного продукта, поэтому в нашем курсе мы так же уделим дополнительное внимание не только инженерным аспектам архитектурного проектирования, но и социально-менеджерским характеристикам домена разработки и документирования архитектуры программного обеспечения.
Рамки и задачи курса
Разрабатывая курс, мы преследовали цель сделать его доступным и понятным широкому кругу ИТ специалистов, стремящихся развивать свои навыки в области архитектурного проектирования.
Здесь мы не претендуем на открытие "terra incognita" в области проектирования компьютерных программ. Одной из наших основных задач - синтезировать набор имеющихся мировых "best practice" рассматриваемого нами домена, переработать его, дополнить малоизвестной, но важной информацией, обогатить полученную "суть" практическими подходами к работе и методологиями, учитывающими реалии деятельности сотрудников в сфере информационных технологий и ситуацию на рынке разработки информационных программ Российской Федерации.
Другая, не менее важная задача, заключается в том, что мы стараемся пробудить интерес у наших коллег к подробному рассмотрению области разработки требований и последующего документирования архитектур программных продуктов, влияющих, по нашему мнению, на качество и эффективность программного обеспечения настоящего и будущего.
Многие вопросы, которые мы будем поднимать по ходу лекций, не имеют однозначного, а иногда и единого верного ответа. Домен архитектурного проектирования является областью, в которой принимаемые решения субъективны и зависят от многих, различных по своей природе условий, изменяющихся достаточно быстро.
Каждое принятое решение является определяющим для будущей архитектуры информационного продукта и должно быть обосновано, но при этом оно "должно" уметь гибко учитывать и реагировать на направления развития бизнес активностей, для которых оно создается.
При разработке курса мы осветим следующие "высокоуровневые" аспекты, связанные с архитектурным проектированием программного обеспечения:
- Характеристики архитектуры программного обеспечения:
Будут приведены функциональные и нефункциональные/качественные характеристики архитектур, которые, в итоге, являются катализаторами в формировании основных преимуществ и недостатков разрабатываемого программного обеспечения;
- Требования, формирующие архитектуру программного обеспечения:
Будут изложены основные требования, после тщательного анализа которых следует этап проектирования. В ходе этого этапа вырабатываются основные характеристики будущего программного продукта (см.п.1);
- Объекты архитектуры программного обеспечения и связи между ними:
Будут перечислены объекты, объединение которых в единую систему позволит добиться результатов, ожидаемых от использования проектируемых программных продуктов;
- "Внешнее" окружение процесса архитектурного проектирования:
Обзорно освятим факторы, которые будут оказывать влияние на процесс архитектурного проектирования и дальнейшего использования соответствующих программ;
- Процесс архитектурного проектирования:
Опишем то, как должна выглядеть активность, в которой должны быть учтены наиболее эффективные, на сегодняшний день, методологии организации процессов архитектурного проектирования;
- "Пакет" документации на архитектуру ПО:
Приведем список документов, необходимых и достаточных для последующего развития и сопровождения создаваемого программного обеспечения;
- Риски, связанные с архитектурой и архитектурным проектированием:
Изложим наиболее популярные риски, которые встречаются в тех случаях, когда применение созданной архитектуры не соответствует первоначально заданным задачам и условиям её использования;
-
Уровни архитектуры ПО:
Приведем те представления архитектуры программного обеспечения, без которых не будет возможным её разработка и последующее использование; - Подходы к созданию архитектуры ПО:
Изложим наиболее эффективные современные методологии и принципы архитектурного проектирования программных продуктов, их преимущества и недостатки;
- Роль системного архитектора:
Опишем его роль в процессе архитектурного проектирования. Перечислим те навыки и профессиональные качества, которыми должен обладать архитектор информационных продуктов;
- Процессы развития и сопровождения архитектуры ПО:
Расскажем о том, как должны быть выстроены данные процессы, чтобы архитектура программного обеспечения была эффективна в заданных условиях функционирования;
В процессе решения обозначенных задач и освещения аспектов архитектуры и архитектурного проектирования будет происходить изложение материала курса. Довольно часто мы будет прерываться на небольшие паузы, в ходе которых будут приведены практические примеры, подкрепляющие и дополняющие основной материал лекций.
Первоначально планировалось включить в курс еще дополнительное количество материала, также связанного с областью проектирования архитектуры программного обеспечения, но, после первичного анализа предполагаемого объема, стало понятным, что стоит себя ограничить обозначенными выше аспектами. В противном случае мы рисковали бы тем, что курс трансформируется в обширную учебную программу, на составление которой профессиональной жизни 2 авторов будет мало.
Учитывая то, что мы приложили много усилий на ниве бизнес анализа, понятие "рамок курса" будет контролироваться нами на протяжении всего общения с Вами достаточно жестко и дисциплинированно.
Ограничения курса
Под ограничением мы понимаем тот материал, который сознательно не включен в состав курса по причине его не актуальности, "отдаленности" от основной темы.
Перечень ограничений, которыми мы "очертили" рамки нашего курса, включают в себя:
- Организационные аспекты создания, развития и сопровождения архитектуры и процессов её проектирования:
- Мы сознательно не стали включать в наш курс аспекты, связанные с управленческими дисциплинами. Область менеджмента обширно и подробно изучена. Для рассмотрения конкретных, интересующих Вас вопросов, можно найти специализированную литературу, но определенные специфические моменты менеджмента, влияющие на архитектуру и архитектурное проектирование, мы обязательно рассмотрим;
- Процессы разработки кода архитектуры:
- Процессы разработки "кода" архитектуры, это активности, которые должны следовать после того, как выполнено проектирование архитектуры. С одной стороны, учитывая реальное положение дел в области программной инженерии, нужно сказать о том, что в 60% проектов, связанных с созданием программного обеспечения, проектирование и разработка это процессы, которые выполняются параллельно, но, с другой стороны, такая практика работ является не лучшим "образчиком" создания программного обеспечения. Мы, в определенных частях нашего курса, будем учитывать этот аспект, но, "по умолчанию", абстрагируемся от его влияния. Такой принцип обучения является классическим. Это позволит нам изложить основные моменты, формирующие базисные понятия, наиболее эффективным образом. Этап "кодирования" - это следующий, после архитектурного проектирования шаг. Он будет учтен, но описывать и излагать его мы не будем.
- Политические, социальные, экономические моменты, влияющие на образ созданного программного обеспечения:
- Когда речь заходит о каком-то "внутреннем" процессе, а архитектурное проектирование (не архитектура) - это именно такой процесс, оказывающий влияние только на ограниченное число пользователей, то факторы "внешнего" влияния рассматриваются отдельно. Для анализа подобных факторов существует разнообразный инструментарий. В частности, можно привести в пример "PEST" анализ. При необходимости его можно изучить отдельно и использовать результаты проведенного анализа в своих исследованиях.
- "Человеческий" фактор:
- Пожалуй, данный аспект наших ограничений - это основная причина самых потрясающих достижений и наиболее запоминающихся провалов при проектировании архитектур программного обеспечения. "Человеческий фактор" и все его составляющие, такие как мотивация, эффективность и т.д. - это части человеческой личности, рассмотрению которых сегодня уделяется большое количество внимания ученых и специалистов, при этом нет предпосылок к тому, что эти тенденции будут ослабевать. Возможно, фокус внимания проводимых исследований сместится в более антропогенно - техническое направление, но внимание к ним со временем будет только усиливаться. При желании, любой сможет найти достаточное количество материала из данной области
Тем самым, мы даем понять нашим коллегам, что курс направлен именно на активности, связанные с разработкой требований, но при этом аспекты, рассмотрение которых необходимо для формирования базиса архитектурного проектирования мы обязательно рассмотрим в нашей работе.
Остается только сожалеть о том, что процессам разработки требований в профессиональной литературе ранее уделялось так мало внимания. Этим курсом мы постараемся заполнить существующую нишу. Особенно этот тезис касается направления разработки требований для активности архитектурного проектирования, которое на 60% определяет будущую эффективность разрабатываемых программных продуктов.