Финансовые компании находятся в поисках лучших решений, которые оптимизируют внутренние процессы разработки, разовьют IT-инфраструктуру в соответствии с требованиями бизнеса и позволят им выводить на рынок лучшие конкурентные продукты. Так, два года назад мы ступили на путь перевода разработки ЦФТ-банк на платформу CFT Platform IDE. Среди коллег по цеху ходят слухи, что это процесс невероятной сложности, ввиду чего не решаются приступить к делу. На своем примере мы докажем, что это вполне подъемный процесс и для вашей команды.


Процесс разработки ПО в НРД в большинстве случаев характерен наличием нескольких команд разработчиков, которые лавируют между проектами, занимаясь разными модулями одной или даже разных систем. В работе у нас постоянно большое количество доработок и приходится держать несколько dev и test-контуров с разными версиями системы. Таким образом, всегда есть необходимость доступа к централизованному хранилищу кода с поддержкой версионности, обеспечением автоматической сборки и установки. Для системы ЦФТ-Банк на протяжении многих лет таких возможностей не было.


Для тех, кто не знаком с системой

ЦФТ-Банк – это автоматизированная банковская система ЗАО «Центр финансовых технологий». Она характерна использованием собственного языка программирования pl/plus и, как следствие, возможностью применения только собственных средств разработки, предлагаемых вендором системы. Код системы открытый, с ограниченными возможностями модификации дистрибутивных модулей и с широкими возможностями создания своих собственных модулей.


Это порождало лишние затраты на подготовку сборок, merge-изменений и т.д. Часто возникали случаи порчи программного кода, т.к. следить за правильностью версиии той или иной программной компоненты могли только сами разработчики в полностью ручном режиме. Однако поменять подход к разработке для системы ЦФТ-Банк было невозможно ввиду существования безальтернативной среды разработки для этой системы, по своему интерфейсу и возможностям отставшей от жизни лет на 15.


Решение наших проблем было предложено ЦФТ с выводом на рынок в 2018 г. новой платформы разработки для своих систем, которая называется CFT Platform IDE (она же Admin 2.0, или сокращённо A2).


Ключевые отличия новой платформы разработки


Внешне разработчик получает среду, реализованную на основе Eclipse Platform, которая гораздо симпатичнее архаичного Администратора словаря данных.


Для сравнения редактирование кода в старой среде (Администратор словаря данных):



Редактирование кода в Admin 2.0:



Но основным преимуществом новой платформы разработки для нас явилась возможность хранения программного кода системы, а также экранных форм, описаний типов и прочего в виде множества текстовых файлов. Именно это позволяет выгружать код в систему контроля версий (в нашем случае Git) со всеми её возможностями, которых нам так недоставало ранее при разработке для ЦФТ-Банк.


Таким образом, разработчикам ЦФТ-Банк стала доступна возможность комфортно отслеживать историю изменений каждого объекта, включая не только время редакции, но и сравнение старой и новой версий через встроенный компонент либо с помощью любого внешнего средства типа Araxis Merge. Тому, кто не знаком с ЦФТ-Банк, это покажется удивительным, но ранее о таком приходилось только мечтать, храня историю изменений лишь в виде комментариев в коде.



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



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


  • ::MAIN_DOCUM вместо ::[MAIN_DOCUM],
  • select md(md%id: rSelf) in ::[MAIN_DOCUM] all where md.[IN_FOLDER]=this bulk, причём в откомпилированном коде PL/SQL слова bulk нет, что с ним, что без него компилируется одинаково,
  • Pragma macro(’Ошибка!’) вместо Pragma error(’Ошибка!’).

Непонятно, как Администратор словаря «переваривал» подобное без ошибок. Причём, если первые 2 примера представляют собой безобидный мусор, то последнее — явная ошибка, которая приведёт к некорректной работе программы.


И ещё одной особенностью Admin 2.0 является, благодаря интеграции с Git, функционал получения списка изменений на основе сравнения 2-х веток.



Это позволяет выполнять развёртывание этих изменений в целевую БД. Затем изменения из БД можно выгрузить по тому же списку элементов, используя старый Администратор проектов, в mdb-файл, если их необходимо передать для установки в БД, куда разработчик не имеет прямого доступа. Однако более интересным вариантом является подготовка и развёртывание изменений в новом формате. Он представляет из себя zip-архив, внутри которого находятся текстовые файлы с кодом, а также некоторая метаинформация. Побочным эффектом является возможность просмотреть и даже изменить код в передаваемой поставке без установки в какую-то БД, что в случае с mdb-форматом было невозможно. Но самое основное – сохранение в этот новый формат из Git-репозитория и развёртывание в БД Admin 2.0 предусматривает делать и в безинтерфейсном режиме, что позволяет настроить автосборку и автоустановку, т.е. наконец говорить о CI/СD в применении к доработкам ЦФТ-Банк. Правда, данную тему я планирую подробно раскрыть уже в следующей статье.


Особенности перехода на новую платформу


Материальный вопрос


Первое, с чем пришлось столкнуться — получение лицензий на рабочие места. На каждое рабочее место разработчика требуется отдельная лицензия, которая привязана сразу и к железу ПК, и к учётной записи пользователя. Если у вас в компании тоже несколько изолированных сетей, где есть сервера с ЦФТ-Банк, и ведётся разработка на них, то на одного разработчика потребуется купить несколько лицензий Admin 2.0. Стоимость одной лицензии на момент написания статьи составляет 125 у.е./мес., или около 8 тыс. руб. по внутреннему курсу. За первоначальную покупку на данный момент деньги не взимаются. Лицензии распространяются в виде файлов, а не смарт-ключей, что позволяет без проблем развернуть среду даже на виртуальной станции.


До покупки можно договориться о предоставлении тестовых лицензий. В нашем случае были получены 6 лицензий со сроком действия — 4 месяца на бесплатной основе. Условия обсуждаются с персональным менеджером индивидуально.


Настройка рабочих мест и БД


Серверную часть IDE можно устанавливать и в рабочее время, но правильней будет, если в момент установки не будут открыты на редактирование программные объекты ЦФТ, т.к. основное в обновлении — это новый механизм соответствующих блокировок.


Клиентская часть — это, по сути, Eclipse с расширениями CFT Platform IDE, устанавливается без прав администратора ПК. Только заранее должна быть установлена JRE не ниже 8-й версии. Доступ к обновлениям IDE на сайте ЦФТ теперь открытый, без авторизации. Можно настроить обновления непосредственно через сайт, либо из локальной сети. Например, из сетевой папки или с использованием менджера репозиториев вроде Nexus. Мы выбрали вариант сетевой папки как самый простой в настройке, не требующий доступа в Интернет со всех рабочих мест, надёжный, что важно при настройке тяжелых обновлений, и гибкий ввиду возможности выкладывать обновления по своему расписанию.


Выгрузка кода локального приложения


Для создания проекта, с которым будет работать Admin 2.0, нам нужно выгрузить из БД в папку с набором текстовых файлов описание объектов, являющихся нашими локальными доработками, а также, условно говоря, ссылки на объекты, от которых наши доработки зависят.


Отмечу, что при большом объёме локального приложения среда разработки начинает тормозить, поэтому в такой ситуации необходимо будет деление исходников на актив и архив. К счастью, в лимит мы вписались при немалом объёме локала. Однако стоит учесть объём оперативной памяти рабочих станций. Согласно документации требуется не менее 16Гб, хотя некоторое время части наших разработчиков удавалось работать и на 8Гб памяти, надо было лишь отрегулировать объём памяти java-приложения в файле eclipse.ini.


Что касается выгрузки — процедура несложная, т.к. все необходимые скрипты, такие как для подсчёта объёма приложения, для получения списка объектов и другие входят в комплект поставки.


Адаптация кода


Адаптация заключалась в дополнении того, что не собрал скрип, например, прогрузились не все ссылки на таблицы в чистом Oracle, некоторые ТБП со сложным подчинением — в единичных случаях не подгрузились типы ссылок или массивы. Также надо было слегка подчистить код (см. примеры выше). Но самое главное — подстроить код под новые особенности:


  • все простые представления были автоматически преобразованы в pl/plus (т.к. работу с простыми представлениями Admin 2.0 не поддерживает). При этом нередко это происходило с ошибками, которые надо было устранять (например, т.к. вызов интерфейсных пакетов напрямую теперь не поддерживается пришлось переделать вызовы в стиле pl/sql (типа Z$MAIN_DOCUM...) на pl/plus (типа::[MAIN_DOCUM]...));
  • в Admin 2.0 была исключена поддержка inline-вставок pl/sql кода — конструкции в фигурных скобках {}, и лишь недавно эту поддержку вернули;
  • Admin 2.0 не поддерживает выражение between в sql запросах, которое использовалось у нас в нескольких представлениях (что странно, т.к. это стандартная конструкция, в том числе для чистого pl/sql);
  • проявившиеся ошибки в «мёртвых» кусках кода. У нас было несколько процедур, где часть кода отсекалась посредством return, либо if false, или же макросом IF_DEF. Оптимизатор или макрокомпилятор отсекали код, который уже не анализировался на наличие ошибок. Некоторые такие куски стали невалидными, т.к. изменились вызываемые процедуры и используемые ТБП, просто компилятор их не видел. Admin 2.0 стал «обращать внимание» и на эти куски.

Результат


Серьёзных проблем при адаптации не было. Нам посчастливилось «познакомиться поближе» со своим кодом. В процессе мы выявили недочёты в IDE и даже в технологическом ядре (в компиляторе), которые сейчас ЦФТ уже исправил.


Большую помощь нам оказали специалисты ЦФТ, которые оперативно реагировали на возникшие проблемы, а в случае замедления процесса внедрения с нашей стороны всячески нас стимулировали и поддерживали интерес. После всех этих подготовительных действий мы запросто настроили интеграцию Eclipse с Git и выгрузили в него код текущей версии.
Нам потребовалось создать регламент ведения разработок, т.к. разработчикам ЦФТ-Банк пришлось привыкать работать совершенно в ином стиле: правильно маркировать коммиты, работать в нужной версии и пр. Сама методика работы стала соответствовать общим стандартам разработки в IT-компании.


Несмотря на первоначальное снижение скорости разработки, Admin 2.0 был сразу встречен в нашем коллективе с большим энтузиазмом. За 1-2 месяца активной работы все привыкли к новой среде, а эффективность возросла.


Сегодня Admin 2.0 до сих пор находится на стадии активных доработок, но это гораздо менее сырой продукт, чем 2 года назад. Например, только недавно появилась поддержка работы с группами доступа, пока работающая с ошибками. Также развёртывание в безинтерфейсном режиме может завершаться с ошибками при наличии в коде макросов. Большинство недочетов, которые мы фиксируем, ЦФТ устраняет в пределах месяца. За эти 2 года мы использовали отличную возможность повлиять на развитие Admin 2.0. Сегодня компании, которые задумали подобный переход, смогут пройти этот путь ощутимо быстрее.