Постановка процессов и комплексное тестирование продукта, предназначенного для сложных расчетов в научной сфере
Краткое описание проекта: компания заказчика разрабатывает приложение для получения научно обоснованных прогнозов тепловых режимов многолетнемерзлых грунтов. Система предназначена для моделирования поведения физической среды через численное решение дифференциальных уравнений. Приложение активно используется в сфере строительства и нефтедобывающей промышленности.
У владельца компании возник запрос на завоевание новых ниш рынка, что требовало добавления существенной части нового функционала. К этому моменту система сильно усложнилась по причине накопления большого количества исходного кода разных версий, написанных разными поколениями сотрудников. С технической точки зрения продукт стало сложно модернизировать, релизы были крайне нестабильными и поставки стали нерегулярными. Написание Unit-тестов было редкой практикой и применялось ситуативно. Также не было и автоматизированного UI-тестирования, так как его внедрение было еще более сложной и трудозатратной задачей, требующей применения отдельного фреймворка. Ручное тестирование осуществлялось несистемно, регрессионное тестирование не проводилось.
Для возможности дальнейшего развития продукта было необходимо внедрить эффективные управленческие практики, выстроить процессы на проекте и устранить накопившиеся технические долги.
Техническое описание проекта:
- Высокосвязный код на двух языках: C++ и C#. Расчетная часть написана на С++, UI-слой и бизнес логика приложения на C#.
- Продукт представляет собой десктопное решение с установленной аппаратно-программной защитой.
Обязанности компании JazzTeam
В рамках данного проекта компания JazzTeam отвечала за управление процессами и системную работу над техническими долгами. А именно, наша команда занималась внедрением CI/CD, постановкой процессов мануального и автоматизированного тестирования, управлением рефакторинга legacy-кода и улучшением архитектуры продукта. Также требовалось выстроить процессы планирования и систематизированной работы над задачами. Мы уже рассказывали об этом проекте в нашей предыдущей статье, но сейчас мы с вами хотим поделится тем, каких результатов мы смогли достичь.
От компании JazzTeam требовалось улучшение или постановка с нуля следующих ключевых процессов проекта:
- Планирование.
- Постановка задач.
- Рефакторинг.
- Внедрение CI/CD процесса.
- Тестирование.
- Релиз-менеджмент.
Также в рамках проекта необходимо было провести следующие работы:
- Исследовательские работы:
- Исследования по внедрению CI/CD.
- Поиск оптимального фреймворка для проведения автоматизированного UI-тестирования.
- Создание актуальных планов по стратегическому рефакторингу.
- Обеспечение качества:
- Введение практики обязательного написания Unit-тестов разработчиками.
Ежедневное UI-тестирование критических функций продукта в максимально приближенной к продакшену сборке. - DDT-тестирование ядра системы.
- Ручное тестирование.
- Введение практики обязательного написания Unit-тестов разработчиками.
- Внедрение непрерывной интеграция и поставка (CI/CD).
Менеджмент
Для управления проектом была внедрена Scrum-методология, что ускорило процесс разработки и сделало его понятным, прозрачным и управляемым для заказчика.
Силами менеджмент-команды JazzTeam преобразован процесс бизнес-анализа на проекте. Мы оптимизировали процессы сбора требований, скорректировали процесс обработки требований и преобразования их в задачи. Также была выработана новая схема формирования и постановки задач. Бизнес-аналитик собирал требования у заказчиков, после чего оценивал риски: не повредит ли внедрение новых функций работоспособности всего приложения. Далее все актуальные требования формировались в задачи с конкретными критериями выполнения. Перед каждым спринтом формировался план задач, каждая из которых в дальнейшем проходила декомпозицию и оценивалась инженером, выполняющим ее.
Следующим этапом стало улучшение процесса поставки. В первую очередь мы ввели практику регулярного планирования спринтов, груминга бэклога. В команде начал проводиться предварительный анализ, определяющий следующий срок релиза. Эффективные подходы к планированию положительно сказались на процессе поставки продукта: команда смогла осуществлять релизы в запланированный срок.
Исследования
Так как система имела сложную архитектуру и нетипичный стек технологий, задачи по внедрению CI/CD и автоматизации тестирования требовали дополнительных исследований. Осложняло ситуацию и то, что ранее инженеры не имели опыта работы с UI-автотестами. Поэтому было принято решение начать ежедневные исследования (1 час в день) по автоматизации тестирования и внедрению CI/CD и постоянно отслеживать прогресс. Как показала практика, не зацикливаясь на одной задаче, решение удавалось находить быстрее.
Одним из важных решений для системного улучшения продукта стало введение архитектурных часов. Еженедельно в команде разработки проводились встречи, на которых обсуждалась стратегия развития продукта с учётом его актуального технического состояния.
В рамках архитектурных часов также было инициировано обсуждение по стратегическому рефакторингу. Инженеры команды заказчика начали работу по изолированию модулей кода, покрыв тестами входные и выходные данные. Так только за первый год в фоновом режиме была изолирована треть от нескольких десятков основных модулей системы. Данная практика позволила достичь значительного прогресса в борьбе с высокой связностью кода и позволила минимизировать влияние модулей друг на друга.
Обеспечение качества
Под руководством менеджера JazzTeam были выстроены процессы и созданы тест-планы для мануального и автоматизированного тестирования, что позволило более профессионально управлять качеством продукта.
На проекте была введена практика обязательного написания Unit-тестов разработчиками. В Unit-тестировании применен подход Data Driven Testing, упрощающий ввод входных данных, что было особенно важно для системы моделирования с большим количеством расчетных модулей.
Ежедневное UI-тестирование критических функций продукта в максимально приближенной к продакшену сборке (с наложенной программно-аппаратной защитой) позволило изменять текущий код продукта с минимальными рисками пропуска регрессионных багов.
Таким образом был реализован следующий воркфлоу по работе с обеспечением качества:
- Разработчик при создании функциональности — сразу покрывает ее unit и интеграционными тестами.
- Перед код-ревью делает полный прогон по всем unit и интеграционным тестам. При этом другой разработчик на код-ревью обязательно проверяет качество покрытия новыми тестами и то что все имеющиеся тесты были успешно пройдены.
- Далее происходит слияние ветки функциональности с основной веткой разработки и в ней, каждую ночь, прогоняется полный набор всех имеющихся тестов, включая ui-тесты. Данный прогон занимает более 3-х часов.
- Далее мануальный тестировщик при тестировании функционала определяет потребность в покрытии ui-автотестами или ddt-тестами. В первом случае он пишет сценарий автотеста, а во втором случае бизнес-аналитик создает набор тестовых данных. После этого в рамках отдельной задачи разработчик создает ui или ddt тесты.
Внедрение CI/CD
Наша команда внедрила CI/CD-культуру на проекте, благодаря чему процесс поставки продукта стал существенно более быстрым и стабильным. Подробнее о том, как проводилось внедрение CI/CD на проекте, вы можете узнать здесь.
Спустя 2 месяца с момента внедрения CI/CD данная практика начали приносить первые результаты. Процесс создания дистрибутивов продукта стал быстрым и безопасным, что позволило существенно высвободить время и увеличить производительность команды. Автоматическая сборка значительно стабилизировала, упростила и ускорила процесс создания различных версий для поставки заказчикам. Время, затрачиваемое специалистом за сборку 1-й лицензии увеличилось более, чем в 15 раз. (10 минут против ~3-х часов).
Технологии:
Платформа: .NET, C#, C++, Managed C++.
Технологии: White, Jenkins, TestLink, Jira.
Процессы: тест-менеджмент, управление проектом, релиз-менеджмент.
Результат проекта
Компания получила новые возможности для развития продукта и создания нового функционала. Команда разработки заказчика начала сокращать технический долг, использовать и накапливать лучшие инженерные практики, вести необходимую документацию, при этом увеличив скорость создания нового функционала. Благодаря выстроенным процессам и проведённой комплексной работе заказчик смог выпускать новые версии продукта в 2 раза быстрее, при этом количество реализованного функционала также возросло в 2 раза.
Достижения компании на проекте:
- Эффективное управление проектом, в рамках которого было значительно улучшено качество продукта и появилась возможность дальнейшего развития системы для завоевания новых рынков.
- Успешно применен подход Data Driven Testing. Покрытие ядра сложнейшего научного продукта Data Driven тестами позволило значительно ускорить процесс его стабилизации.
- Специалистам JazzTeam удалось изменить мышление команды заказчика, внедрить эффективные подходы к разработке. При этом сохранить команду в изначальном составе, а также пополнить ее новыми сотрудниками.
Скриншоты:
Свяжитесь с нами, чтобы обсудить Ваш IT-проект