ДжазТим — надежный технологический партнер

Agile разработка ПО на Java

Разработка востребованного ERP продукта, консалтинг заказчика и системные проектные преобразования

Описание проекта

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

  • Адаптируемый рабочий процесс для любой модели управления заказами.
  • Возможность обработки и выставления счетов для нескольких заказов в 8 кликов.
  • Развитая система отслеживания складских запасов в режиме реального времени.
  • Видимость цепочки поставок.
  • Отслеживание прогнозов продаж.
  • Мультивалютность.
  • Обработка онлайновых платежей.
  • Любой тип отчетности.
  • Интеграция с основными торговыми системами (Amazon, eBay, Alibaba и пр.).
  • Масштабируемость и кастомизация.
  • Система плагинов.

Проект включает в себя несколько подпроектов:

  1. Консалтинг стейхолдеров и техлидов.
  2. Внедрение полноценного CI/CD.
  3. Миграция с .NET на Java.

Технологии

Stack: Java 7/8, Java Servlet & JSP, Apache Tomcat, MySQL, JDOM, REST API, XML/XSLT.
Фреймворки: Avalon Framework, XML-RPC, dbPool, JasperReports, MyFaces, JavaMail, PD4ML, Paypal, Gdata, jQuery Mobile.
Архитектура: Model-driven development, event-driven architecture.
CI/CD.
Тестирование (интеграционное и нагрузочное): JUnit+собственный фреймворк.
Инфраструктура: AWS, Bitbucket, Jenkins, Liquibase, CloudWatch.

Особенности проекта

История проекта уходит своими корнями в начало 2000-х годов. В тот период времени была заложена довольно удачная архитектура, основанная на XML моделировании бизнес-процессов и сущностей. Эта архитектурная концепция выдержала проверку временем, в том числе масштабирование продукта до миллионов осуществленных транзакций, с предоставлением доступа сотням заказчиков.

Команда ДжазТим присоединилась к проекту в 2019 году. К этому времени в проекте проявились многочисленные технические долги и недостатки, которые перекрывали очевидные преимущества заложенной архитектуры:

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

На этом проекте компания ДжазТим выступала одновременно как:

  • консультант стейкхолдеров, для налаживания процессов и повышения качества продукта;
  • основная рабочая сила в составе международной распределенной команды разработчиков;
  • руководство и менторство всей команды разработчиков;
  • инициатор и исполнитель закрытия технических долгов:
  • отказ от .NET слоя;
  • внедрение полноценного CI/CD;
  • внедрение полноценного процесса бизнес-анализа;
  • внедрение и поддержание QA Automation на проекте;
  • внедрение и развитие юнит-тестов, в том числе т.н. Blackbox тестирования.

Результат проекта

С точки зрения инкремента функционала — команда ДжазТим разработала и поставила десятки новых эпиков и пользовательских историй. При этом был проведен глубокий рефакторинг существующего кода и обеспечено покрытие тестами (GUI-автотесты и юнит-тесты) разработанного функционала.

С точки зрения консалтинга — налажены партнерские отношения со стекйхолдерами проекта, реорганизована структура и процессы в команде разработчиков, внедрены и поддерживаются Agile принципы разработки, обеспечен прозрачный процесс репортинга (в т.ч. финансового).

С точки зрения закрытия техдолгов — реализована версия продукта без .NET слоя, что позволяет сфокусироваться на Linux платформе, тем самым значительно снизив затраты на хостинг и техподдержку. Внедрены полноценные CI/CD процессы, что ускорило частоту поставок продукта и повысило качество поставляемого функционала.

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

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

Представители ДжазТим проанализировали текущее качество разработки продукта, состав и скорость команды и прочие критерии — и предложили владельцам продукта ввести в команду несколько профессиональных QA инженеров и QA Automation инженеров из числа сотрудников компании ДжазТим. .Предложение было одобрено и уже через несколько месяцев стало очевидно, насколько повысилось качество продукта.

Улучшили процесс анализа требований и постановки задач. Мы ввели на проект бизнес-аналитика с экспертизой в областях, релевантных этому проекту. Ввели фазу бизнес-анализа, прямые коммуникации BA с партнерами по продукту. На выходе мы получили четкую постановку задач разработчикам, включая DoD (Definition of Done) и Acceptance Criteria (критерий приемки). Это позволило значительно сократить время разработки функционала и повысить качество конечного продукта.

Внедрили процесс оценки задач (estimate). Мы ввели обязательный анализ разработчиком потенциальных трудозатрат по каждой задаче с разбиением на подзадачи и с учетом рисков (см. ниже). Наличие оценки трудозатрат позволяет упорядочить процесс планирования разработки, сделать планирование более прозрачным для всех членов команды и стейкхолдеров.

Заложили анализ рисков при оценке задач. На выходе получается аргументированная оценка с учетом рисков, которая позволяет владельцам продукта увидеть объективную картину трудозатрат и предпринять шаги для возможного уменьшения рисков и оптимизации стоимости разработки.

Провели Agile-трансформацию процесса разработки. Ввели ритуалы гибкой разработки, которых не хватало на проекте:

  • Ежедневные стендапы для географически распределенной команды. Тут мы сильно подняли уровень синхронизации между всеми членами команды, уменьшили недопонимание, да и просто ребята стали больше общаться и помогать друг другу.
  • Ретроспективы — опять же повод порелаксировать, рассказать свой опыт, улучшить процессы, акцентировать внимание на явных проблемах
  • Демонстрация — делаем презентацию каждой фичи, показываем всей команде. И QA инженерам легче тестировать, и документацию писать проще.
  • Шаринг знаний внутри команды — лекции/митапы по технологическим моментам или по доменной экспертизе.

Внедрение CI/CD для осуществления автоматической сборки, регулярной проверки качества и поставки продукта. На проекте применяется частичная генерация кода из шаблонов. Генератор кода изначально не был оптимизирован под автоматическую сборку проекта Maven-ом, поэтому команда провела глубокий рефакторинг ядра проекта, чтобы исключить ручную сборку.

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

Весь новый код и большинство изменений существующего кода покрывается Unit-тестами. Старый код регулярно рефакторится, чтобы он поддавался покрытию тестами.

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

Переписали .NET фронтенд на Javascript, таким образом отвязались от Windows хостинга.

Значительно освежили UI и юзабилити продукта — пользователи и стейкхолдеры довольны.

Статьи, созданные на основе проектного опыта

В процессе написания следующие статьи:

  1. Оценка оценки.
  2. Внедрение CI/CD на проекте с большим сопротивлением.
  3. Model-driven development.
  4. Blackbox тестирование.
  5. Внедрение GUI автотестов на долгоиграющем проекте.

Скриншоты

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

    Имя *

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

    Email *

    Телефон

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

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