Какие задачи решают корпоративные системы? Как возникла научная дисциплина «программная инженерия»? Как проявляется специфика программной инженерии при разработке корпоративных систем? На эти и другие вопросы отвечает преподаватель Университета Иннополис Сергей Зыков.

Понятие корпорации принципиально отличается от понятия компании. Прежде всего, это размер. Тысяча сотрудников — это уже корпорация, на мой взгляд. Второе — это распределенность. Как правило, корпорация — это не один офис, а географически разные точки, причем точки, которые чем-то между собой связаны. И третье — это диверсификация. Как правило, не один вид бизнеса. Возьмем классический Газпром — что такое? Разведка, добыча, переработка, транспортировка, реализация — достаточно много всего, и о каждой из этих отраслей можно рассказывать очень долго.

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

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

Зачем это нужно? Это нужно как для международных аудиторов, так и просто для того, чтобы мы могли как корпорация отчитаться: в сумме в нашей корпорации, во всех ее офисах по всем странам работает столько-то сотрудников с точностью до одного. При этом в таких-то регионах ведутся такие-то проекты, которые требуют таких-то средств, таких-то инвестиций, такая-то текучесть кадров, такая-то норма прибыли и прочее. Мы готовы отчитаться по стандартам GAAP для, скажем, наших швейцарских аудиторов. Для российских аудиторов по международной системе или по внутренней системе мы готовы представить консолидированный отчет с точностью до рубля или до доллара — в той валюте, которая нужна, с детализацией по регионам, по компаниям, по подразделениям, по проектам, по отраслям деятельности, вплоть до отдельных людей.

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

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

История вопроса такова. В 1968 году была конференция НАТО, где в связи с оборонными задачами возник вопрос: можем ли мы в принципе строить программное обеспечение — крупное, надежное, поддерживающее большое количество распределенных взаимодействующих единиц (я не затрагиваю армейскую, военную специфику, но речь шла во многом именно об этом), с большой степенью интенсивности вычислений, параллелизмами и так далее, используя те же самые методы, которые мы используем при создании крупного материального объекта производства? Такого, скажем, как мост, который требует и бетонных «быков», блоков внизу, и сварки, и сопромата — просчитывания всей этой конструкции, ванты и так далее. И здания — второй пример, — когда у нас тоже есть много разных технологий, которые агрегируются, интегрируются в этом комплексе.

И ответ был: не можем. Не можем в принципе, потому что жизненный цикл выглядит совершенно иначе. Если есть мосты, которые мы можем раз поставить, и больше они не требуют практически никаких затрат на обслуживание — я был в Австрии и видел шлюзы, которые сделаны из дуба, работают 400 лет, и сноса им нет, и вообще никаких проблем с точки зрения сопровождения.

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

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

Дальнейшее развитие программной инженерии идет по целому ряду направлений, и корпоративные системы — это одно из них. Почему хотелось заострить внимание именно на корпоративных системах? Потому что здесь проявляется специфика программной инженерии и адекватность ее для такого рода задач. Потому что речь идет о больших системах, на сегодня это уже петабайты данных, не гигабайты, по объемам, в целом ряде корпораций эти объемы уже достигнуты, они растут. Это высокая сложность данных, и очень часто это соседство различных поколений информационных систем, когда, скажем, в банке могут работать мейнфреймы, машины с миллионами строк кода на Коболе, а большинство современных студентов вообще не знают, как писать на Коболе. И в то же время современные системы, клиент-серверные системы, облачные системы, и все это должно вместе работать, причем не просто формально работать, а поддерживать бизнес-процессы и давать возможность получать те самые консолидированные отчеты, интегрировать те самые данные, о которых я говорил.

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

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

Рекомендуем по этой теме:
12252
Что читать: Software Architecture in Practice

При всем при этом мы должны обеспечивать как безопасность, так и удобство использования. И у таких вот tradeoff’ов, как принято говорить, или компромиссов, как надежность/безопасность, или безопасность/эргономика, или производительность и доступность, чтобы сервис был доступен круглосуточно, предположим — их очень много. И их тоже нужно обеспечить, и на это в том числе направлены методы и средства программной инженерии.

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

Это видеоинформация, по которой необходимо вести поиск, когда нам нужно найти, какую именно цифру озвучил президент корпорации в своем отчетном докладе, который длился примерно 3 минуты, а на озвучивание самой цифры ушло 2 секунды в пятичасовом новогоднем корпоративе. По каким критериям мы это будем делать, какие методы мы будем при этом привлекать? Естественно, вариант просмотра всего этого видеоролика не представляется возможным и целесообразным просто исходя из количества информации и количества других возникающих задач.

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

Если говорить о специалистах-разработчиках корпоративных систем, то понятно, что такие системы, так же как и мосты, и крупные здания, в одиночку не строятся.

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

Но если мы говорим о домене, о той области знаний, ключевые компетенции в которой являются наиболее существенными при разработке корпоративных систем, то это, конечно, программная инженерия, то самое направление, которое и возникло после этой исторической конференции НАТО. И основной центр программной инженерии — это Институт программной инженерии, который расположен на территории Карнеги-Меллонского университета, и его ключевые партнеры, одним из которых, безусловно, является Университет Иннополис. Именно здесь готовят достаточно разносторонних специалистов. А надо сказать, что программная инженерия — это не только сухая техническая дисциплина, она требует определенных навыков взаимодействия, общения с заказчиком, который зачастую говорит на совсем другом языке, нежели разработчик. Кроме того, целый ряд других навыков: высокоуровневое проектирование, тестирование и целый ряд других существенных навыков, которые лежат как в технической плоскости, так и рядом с ней.

Если говорить о будущем корпоративных информационных систем, то, безусловно, их создание потребует больших усилий и большего количества навыков просто потому, что в настоящее время мы наблюдаем бурный рост технологий, в том числе информационных технологий, которые непосредственно связаны с этой областью знаний. Это прежде всего технологии облачных вычислений, это существенные изменения в технологиях обеспечения безопасности — скажем, идентификация биологических объектов по голосу, радужной оболочке, отпечаткам пальцев и целому ряду других биометрических параметров. Большое количество других сфер, которые здесь также необходимо учитывать.

Поэтому будущее большое, и работать в этой сфере станет еще сложнее. Но и тем важнее результаты, которые будут получены.