En

JazzTeam Software Development Company

Agile Java Development

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

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

У владельца компании возник запрос на завоевание новых ниш рынка, что требовало добавления существенной части нового функционала. К этому моменту система сильно усложнилась по причине накопления большого количества исходного кода разных версий, написанных разными поколениями сотрудников. С технической точки зрения продукт стало сложно модернизировать, релизы были крайне нестабильными и поставки стали нерегулярными. Написание Unit-тестов было редкой практикой и применялось ситуативно. Также не было и автоматизированного UI-тестирования, так как его внедрение было еще более сложной и трудозатратной задачей, требующей применения отдельного фреймворка. Ручное тестирование осуществлялось несистемно, регрессионное тестирование не проводилось.

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

Техническое описание проекта:

  1. Высокосвязный код на двух языках: C++ и C#. Расчетная часть написана на С++, UI-слой и бизнес логика приложения на C#.
  2. Продукт представляет собой десктопное решение с установленной аппаратно-программной защитой.

Обязанности компании JazzTeam

В рамках данного проекта компания JazzTeam отвечала за управление процессами и системную работу над техническими долгами. А именно, наша команда занималась внедрением CI/CD, постановкой процессов мануального и автоматизированного тестирования, управлением рефакторинга legacy-кода и улучшением архитектуры продукта. Также требовалось выстроить процессы планирования и систематизированной работы над задачами. Мы уже рассказывали об этом проекте в нашей предыдущей статье, но сейчас мы с вами хотим поделится тем, каких результатов мы смогли достичь.

От компании JazzTeam требовалось улучшение или постановка с нуля следующих ключевых процессов проекта:

  1. Планирование.
  2. Постановка задач.
  3. Рефакторинг.
  4. Внедрение CI/CD процесса.
  5. Тестирование.
  6. Релиз-менеджмент.

Также в рамках проекта необходимо было провести следующие работы:

  1. Исследовательские работы:
    1. Исследования по внедрению CI/CD.
    2. Поиск оптимального фреймворка для проведения автоматизированного UI-тестирования.
    3. Создание актуальных планов по стратегическому рефакторингу.
  2. Обеспечение качества:
    1. Введение практики обязательного написания Unit-тестов разработчиками.
      Ежедневное UI-тестирование критических функций продукта в максимально приближенной к продакшену сборке.
    2. DDT-тестирование ядра системы.
    3. Ручное тестирование.
  3. Внедрение непрерывной интеграция и поставка (CI/CD).

Менеджмент

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

Силами менеджмент-команды JazzTeam преобразован процесс бизнес-анализа на проекте. Мы оптимизировали процессы сбора требований, скорректировали процесс обработки требований и преобразования их в задачи. Также была выработана новая схема формирования и постановки задач. Бизнес-аналитик собирал требования у заказчиков, после чего оценивал риски: не повредит ли внедрение новых функций работоспособности всего приложения. Далее все актуальные требования формировались в задачи с конкретными критериями выполнения. Перед каждым спринтом формировался план задач, каждая из которых в дальнейшем проходила декомпозицию и оценивалась инженером, выполняющим ее.

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

Исследования

Так как система имела сложную архитектуру и нетипичный стек технологий, задачи по внедрению CI/CD и автоматизации тестирования требовали дополнительных исследований. Осложняло ситуацию и то, что ранее инженеры не имели опыта работы с UI-автотестами. Поэтому было принято решение начать ежедневные исследования (1 час в день) по автоматизации тестирования и внедрению CI/CD и постоянно отслеживать прогресс. Как показала практика, не зацикливаясь на одной задаче, решение удавалось находить быстрее.

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

В рамках архитектурных часов также было инициировано обсуждение по стратегическому рефакторингу. Инженеры команды заказчика начали работу по изолированию модулей кода, покрыв тестами входные и выходные данные. Так только за первый год в фоновом режиме была изолирована треть от нескольких десятков основных модулей системы. Данная практика позволила достичь значительного прогресса в борьбе с высокой связностью кода и позволила минимизировать влияние модулей друг на друга.

Обеспечение качества

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

На проекте была введена практика обязательного написания Unit-тестов разработчиками. В Unit-тестировании применен подход Data Driven Testing, упрощающий ввод входных данных, что было особенно важно для системы моделирования с большим количеством расчетных модулей.

Ежедневное UI-тестирование критических функций продукта в максимально приближенной к продакшену сборке (с наложенной программно-аппаратной защитой) позволило изменять текущий код продукта с минимальными рисками пропуска регрессионных багов.

Таким образом был реализован следующий воркфлоу по работе с обеспечением качества:

  1. Разработчик при создании функциональности — сразу покрывает ее unit и интеграционными тестами.
  2. Перед код-ревью делает полный прогон по всем unit и интеграционным тестам. При этом другой разработчик на код-ревью обязательно проверяет качество покрытия новыми тестами и то что все имеющиеся тесты были успешно пройдены.
  3. Далее происходит слияние ветки функциональности с основной веткой разработки и в ней, каждую ночь, прогоняется полный набор всех имеющихся тестов, включая ui-тесты. Данный прогон занимает более 3-х часов.
  4. Далее мануальный тестировщик при тестировании функционала определяет потребность в покрытии 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 раза.

Достижения компании на проекте:

Скриншоты:

Свяжитесь с нами, чтобы обсудить Ваш IT-проект

    Имя *

    Название компании

    Email *

    Телефон

    Чем мы можем Вам помочь? *

    * – Обязательные поля для заполнения