Рецепт качественного программного обеспечения от ИВТ БелГУ
В условиях современного рынка программного обеспечения очень важно иметь продукцию, способную быстро адаптироваться под изменяющиеся нужды потребителя. При этом не должно страдать качество.
В условиях современного рынка программного обеспечения очень важно иметь продукцию, способную быстро адаптироваться под изменяющиеся нужды потребителя. При этом не должно страдать качество.
Для достижения этой цели в компании ИВТ БелГУ внедрена система непрерывной интеграции процесса разработки программного обеспечения.
Наша компания прошла долгий эволюционный путь становления процесса разработки. В начале 2000-х годов в ИВТ БелГУ работало не так много людей, но этих сотрудников хватало, чтобы поддерживать несколько начинаний. Они занимались написанием кода, его сборкой, проверкой, выпуском и обновлением. Постепенно программные продукты стали пользоваться популярностью. В первую очередь – это система электронного документооборота и управления деятельностью компании (СЭД) «Synergy Center» и автоматизированная система управления наружным освещением (АСУНО) «Гелиос». Компания набирала темпы, росло количество проектов, а соответственно и специалистов, задействованных в их создании и поддержке. Были выделены отделы тестирования и технической поддержки (позднее управление качеством сервиса), составления документации, проектно-конструкторские отделы, а инженеры-программисты были разбиты на группы. Для коммуникаций между этими подразделениями используется собственная система управления предприятием.
Разработка программного обеспечения требовала участия всё большего количества специалистов и старая система организации процесса разработки уже не подходила. В первую очередь возникла необходимость в централизованной системе управления исходными кодами. Именно поэтому для начала была внедрена система cvs, на смену которой позже пришла subversion, а затем и git. Сборка и обновление серверов были автоматизированы изначально простыми скриптами. Позже они выросли в собственную систему управления сборки продуктов и обновления как тестовых, так и продуктивных серверов.
Развитие компании происходило стремительно, и требовалась большая гибкость, меньший порог вхождения для расширяющегося списка новых сотрудников. В связи с этим в 2008 году было принято решение о внедрении более стандартизированных средств, и выбор пал на набирающий тогда популярность комплекс по поддержке непрерывной интеграции Hudson. Основные проекты были переведены на сборку системой Apache Maven и интегрированы в Hudson. Позже он был заменен на ответвление под названием Jenkins (в связи с поглощением Sun Microsystems компанией Oracle, а затем передачи продукта Hudson в Eclipse Foundation и изменением политики поддержки).
Система позволила автоматически компилировать проекты по расписанию или по изменению исходного кода, собирать их в пакеты и обновлять тестовые сервера. Всё это значительно облегчило труд целого ряда персонала (программистов, системных администраторов, инженеров по тестированию). Для хранения библиотек внедрили систему Sonatype Nexus с функциями кеширования и проксирования.
Следующим шагом стало введение автоматизированного тестирования. Со стороны разработки были внедрены модульные тесты, позволяющие автоматизировано тестировать работоспособность функций при внесении изменений в код. Для проверки результата, получаемого после сборки, отдел качества сервиса стал использовать автоматизированное функциональное тестирование. Программное обеспечение Selenium проверяет web-интервейс, а Apache JMeter производит нагрузочные тесты.
Получился такой принцип работы: каждая группа программистов работает над определенной задачей, ей поставлено мини-техническое задание и она должна выполнить его в срок и качественно (чтобы удовлетворить поставленной задаче и модульным тестам). После доработки производится сохранение набора изменений (атомарный коммит) в единый централизованный репозитарий управления версиями. Система непрерывной интеграции, заметив изменения, производит сборку продукта. Уже на этом этапе производится первоначальная проверка на наличие ошибок, и система вовремя оповещает соответствующую группу программистов. После успешной сборки проходит модульное тестирование, а затем обновление тестовых площадок — это специально выделенные виртуальные машины в системе proxmox. Новая версия программы на них проходит сначала функциональное тестирование, а затем и нагрузочное. Система мониторинга Nagios (а так же ряд других программных продуктов, таких как pgFouine, awstats и пр.) контролирует ошибки и нагрузку на аппаратные ресурсы во время тестов. Cobertura показывает покрытие кода модульными тестами, а selenium контролирует выполнение функциональных тестов.
Всё это происходит в фоновом автоматическом режиме, после чего привлекаются специалисты для окончательной проверки качества новой версии. Затем из этой версии собирается дистрибутив продукта и отдается клиенту, либо автоматизировано обновляются необходимые сервера.
В настоящее время такая система в компании ИВТ БелГУ обслуживает порядка 50 задач на десятках виртуальных машин и позволяет быстро и качественно разрабатывать новое программное обеспечение. Такой подход позволяет сократить время выпуска программного обеспечения, повысить качество продукта, снизить затраты на ручное тестирование (а значит и его себестоимость), а так же обезопасить процесс обновления, снизив риски человеческого фактора.