Общий обзор
В данной статье описывается опыт компании ООО «ЛУКОЙЛ-Нижегородниинефтепроект» по организации системы разработки инструментария для автоматизации проектирования с использованием AVEVA PDMS в ООО «ЛУКОЙЛ-Нижегородниинефтепроект».Автоматизация работы с AVEVA PDMS позволяет расширить и без того большой спектр возможностей этой системы и более точно показать особенности ведения работ в нашей организации, что в совокупности позволяет существенно повысить качество проектирования и уменьшить трудозатраты на решение типовых задач.
Любое программное обеспечение (ПО), которое хотя бы немного крупнее студенческой лабораторной работы, а тем более, если оно разрабатывается не одним человеком, а группой разработчиков, контролировать вручную сложно. Нужно помнить кто, что, где, когда сделал, на какой стадии жизненного цикла ПО находится и сколько задач еще нужно сделать. Нужно постоянно заниматься рутинной работой по установке обновленного ПО пользователям AVEVA PDMS. Нужно как-то собирать обратную связь об использовании ПО и ошибках, которые происходят в его работе. Для решения всех этих проблем и была создана управления разработкой инструментария для AVEVA PDMS в компании ООО «ЛУКОЙЛ-Нижегородниинефтепроект».
Система построена на основе свободного, в основном, открытого и бесплатного программного обеспечения: Git, Redmine, Microsoft SQL Server, NLog. Каждый из этих компонентов решает свою задачу, но они связаны между собой в рамках одной системы:
- Git – система управления версиями исходного кода ПО, она хранит исходный код всех разработок на целом наборе языков программирования – AVEVA PML, C#, Powershell, batch-скрипты;
- Redmine – система управления проектами и задачами. Позволяет спланировать дорожную карту инструментария, разделить работу на этапы, вести разработку и контролировать процесс сверху. Связана с Git и всегда можно отследить в рамках какой задачи была реализована та или иная часть кода;
- NLog – платформа для журналирования любых событий в разрабатываемом ПО, от отладочных выводов и до критических ошибок. Автоматически накапливает все сообщения в хранилище: в централизованный файл или, лучше на SQL сервер;
- Microsoft SQL Server – реляционная СУБД для хранения журналов работы ПО и отчетов по ним. Для работы достаточно функциональности редакции SQL Server Express. Если у вас в наличии редакция Professional и лучше, то можно настроить более удобное окружение, создав отчеты об ошибках и реализовав их автоматическую рассылку и обработку.
Рис. 1. Схема системы управления разработкой
Размещение исходного кода
Без системы контроля версий исходного кода у вас всегда будут возникать разнообразные проблемы в разработке:- что поменялось в коде?
- кто внес изменения?
- почему он это поменял?
- как вернуться к старой версии ПО, при необходимости?
- как правильно построить резервное копирование исходных кодов ПО?
- как объединить работу нескольких человек?
В разработке инструментария для AVEVA PDMS в основном используются следующие языки программирования:
1) PML – внутренний язык AVEVA PDMS, на нем реализуется весь основной функционал по обработке данных проекта;
2) C# – язык платформы .NET Framework, позволяет решать задачи, когда возможностей PML становится недостаточно.
Подход к версионированию кода на обоих языках одинаков. Всего существует примерно 5-6 централизованных хранилищ, они покрывают весь набор инструментария. Также, на каждый проект приходится по одному хранилищу для индивидуальных инструментов и конфигурации.
Рис. 2. Часть истории репозитория PMLLIB
Планирование и разработка
Для управления разработкой используется следующий важный компонент системы – Redmine. Redmine – это система управления проектами и задачами, открытое ПО, которое можно использовать бесплатно в коммерческих целях. Система позволяет планировать задачи по разработке в рамках отдельного проекта или в отдельной ветке внутри общего проекта, отслеживает время, потраченное на каждую задачу, позволяет организовать базу знаний по работе разрабатываемого ПО. Web-интерфейс, разграничение прав пользователей, поддержка нескольких языков позволяют с комфортом работать со своими собственными задачами или проводить комплексный аудит трудозатрат по целому блоку работ.Пример задачи на разработку:
Рис. 3. Пример задачи на разработку
1. Сначала появляется идея. Идея может появиться у проектировщика на фоне его собственного опыта использования AVEVA PDMS. Идея может исходить от разработчика, который провел анализ функциональности и выявил места для внесения корректировок или улучшений.
2. Идея расширяется, дополняется артефактами и превращается в новую задачу. Задача может быть заведена напрямую автором или может появиться автоматически на основе данных из системы журналирования.
3. Ответственное лицо (чаще всего – руководитель разработки) администрирует задачу: уточняет требования и детали реализации функционала и пользовательского интерфейса, определяет ее основные параметры – важность, срок реализации, плановые трудозатраты и ответственного исполнителя и передает в работу исполнителю.
4. Из подготовленных задач формируются спринты – этапы разработки, включающие задачи, которые в этот этап необходимо решить. Наш спринт длится 1 неделю. Общая оценка времени всех задач спринта немного меньше размера спринта. Спринт имеет запас времени для включения в него критических по сроку выполнения задач.
5. Исполнитель начинает работать над задачей и реализовывать функционал. Как правило, для любой существенной доработки в системе контроля версий делается отдельная ветка из основной ветки исходного кода ПО. По окончании работы исполнитель объединяет вместе свои наработки и главную ветку, исправляет конфликты, проводит финальное тестирование и публикует свои изменения в главное хранилище.
6. В отдельных случаях руководитель разработки делает инспекцию кода (code review), изменившегося в задаче. Если при просмотре видны проблемы дальнейшего функционирования, стилистические недочеты или неоптимальность выбора алгоритмов для решения задачи, то он может вернуть задачу на доработку, добавив к ней соответствующий комментарий.
7. Главное хранилище автоматически производит развертывание актуальной версии ПО на пользователей AVEVA PDMS.
8. Автор задачи проверяет новую функциональность и закрывает задачу, если она решена, или открывает ее на доработку при выявлении каких-либо проблем.
Разработчик на своем рабочем месте имеет доступ сразу к двум окружениям среды проектирования: одно – это обычное сетевое окружение, такое же, как и у обычных пользователей, второе – локальное окружение для разработки, в котором содержится суперпозиция данных из сетевого окружения и данных в процессе разработки с приоритетом выполнения последних. Таким образом, разработчик ведет работу как бы в зеркальной копии сетевого окружения, никак не мешая работе обычных пользователей. Как только он заканчивает разработку и помещает работу в главное хранилище, его сетевое и локальное окружение становятся одинаковыми.
Рис.4. Содержимое редакции инструментария
Рис.5. Code review двух соседних версий одного файла
Развертывание готового инструментария
Развертывание – это процесс распространения новой версии ПО на компьютеры пользователей. Т.к. AVEVA PDMS позволяет организовать работу с общим сетевым каталогом инструментария PML, то развертывание в нашей системе выполняет функцию обновления каталога сетевого инструментария актуальной версией ПО из главного хранилища. Параллельно с этим, при развертывании файлы PML защищаются от несанкционированного использования. После выполнения развертывания PML в большинстве случаев пользователь может начинать использовать новую функциональность даже не перезапуская AVEVA PDMS.Инструментарий, работающий на .NET Framework, устроен сложнее и его развертывание также производится более сложным образом. При запуске среды проектирования файлы с инструментами блокируются и не могут быть изменены ни пользователем, ни разработчиком. Поэтому, развертывание производится в 2 этапа:
1. Разработчик обновляет версию ПО в централизованном хранилище на сервере. На данный момент это производится вручную, а в ближайшей перспективе планируется внедрить сервер автоматической сборки.
2. Затем пользователь запускает новый экземпляр среды проектирования и этим обновляет копию инструментария, которая хранится у него на локальном компьютере. При этом, ранее запущенные экземпляры AVEVA PDMS продолжают использовать предыдущую версию инструментов до окончания своей работы.
Обратная связь
Получение информации о работе инструментария от пользователей крайне важно. Кроме явных случаев, например, когда произошла ошибка и требуется вмешательство разработчика для ее исправления, можно также получить много другой полезной информации. Например, можно собирать статистику об использовании инструментария и анализировать эффективность работы инструментов и качество обучения пользователей. Также информация от пользователя может являться базисом для улучшения инструмента в дальнейшем.Обратная связь в наших инструментах построена на основе связки платформы NLog и хранилища Microsoft SQL Server. NLog интегрируется в инструменты C# стандартным образом, для подключения же NLog к инструментам PML был разработан специальный интерфейс. Любой инструмент может в процессе своей работы генерировать сообщения 6 возможных уровней, которые описывают разную важность происходящих событий:
- Info – обычное информационное сообщение;
- Trace – сообщение для отслеживания алгоритма выполнения;
- Debug – сообщения с информацией для отладки;
- Warning – в инструменте произошло что-то странное;
- Error – в работе инструмента произошла серьезная ошибка, требуется вмешательство разработчиков;
- Fatal – самое критическое сообщение, применяется в исключительных случаях, указывает на общую аварию системы.
Рис. 6. Главный журнал работы