Neotecnica

Галузь:Інженерне/промислове програмне забезпечення
Локація:Італія
4 повністю перевірені кодові бази: фронтенд, бібліотека, галерея, бекенд
Понад 13 000 проблем якості коду виявлено та проаналізовано в усіх репозиторіях.

Інформація про клієнта

Neotecnica — це італійська технологічна компанія, що спеціалізується на платформах Digital Twin для комплексного управління складними промисловими та ІКТ-інфраструктурами. Їхня основна платформа — це бекенд-додаток на Java EE/Spring, що обслуговує клієнтів у капіталомістких галузях, підтриманий фронтендом на React та власною бібліотекою компонентів, опублікованою як приватний NPM-пакет.

До середини 2025 року інженерна команда накопичила значний технічний борг: кодова база зростала без послідовних контролів якості, робочий процес Git базувався на прямих пушах у головну гілку без рев'ю або перевірок безпеки, а інфраструктура, що працювала на self-hosted кластері Kubernetes, не мала сучасних інструментів для CI/CD, управління артефактами та моніторингу інцидентів. Крім того, не існувало формального процесу виявлення вразливостей безпеки до їх потрапляння у продакшн.

Neotecnica доручила WWG провести повний технічний аудит усіх чотирьох репозиторіїв, реструктурувати робочі процеси розробки та розгортання, зміцнити безпеку інфраструктури та оцінити готовність бекенду AFM до міграції в хмару — усе з метою зниження ризиків та створення масштабованої основи для майбутнього зростання продукту.

Виклик

Завдання поєднувало чотири окремі, але взаємопов'язані проблемні сфери, кожна зі своєю складністю:
  • Технічний борг у чотирьох різнорідних кодових базах. Програмний стек Neotecnica включав фронтенд-додаток на React, приватну бібліотеку компонентів React з галереєю Storybook та монолітний бекенд на Java EE/Spring, кожен з власним деревом залежностей, конфігурацією лінтинга та поверхнею вразливостей. Проведення змістовного аудиту по всіх чотирьох сферах вимагало координованих інструментів та здатності інтерпретувати результати в контексті ролі кожної кодової бази в загальній системі.
  • Робочий процес Git без захисних мереж. Усі репозиторії Neotecnica працювали без захисту гілок. Гілки функцій, деякі з яких були достатньо довгоживучими, щоб фактично слугувати бета-версіями, зливалися напряму без pull request'ів, code review або CI-перевірок. Це означало, що непереглянутий та нетестований код міг потрапити в продакшн-середовище в будь-який момент, а відкати були операційно складними через відсутність узгоджених конвенцій тегування або версіонування.
  • Інфраструктура без сучасного CI/CD та спостережуваності. Існуючий кластер Kubernetes працював на застарілій конфігурації сертифікатів, не мав надмірності плану управління високої доступності та не мав жодної CI/CD-оркестрації, окрім рудиментарного Jenkins build. Не було репозиторію артефактів для управління приватними NPM-пакетами та Maven-білдами, централізованої системи оповіщень для стану кластера або додатків, а також системи чергувань для управління інцидентами.
  • Монолітний бекенд на межі архітектурних можливостей. Бекенд AFM мав структурні проблеми, що виходили за межі якості коду. Тісно зв'язані шари фронтенду/бекенду, захардкоджені облікові дані та конфігураційні значення, ручне управління потоками, вбудований SQL та загальна відсутність модульних сервісних меж робили систему важкою для тестування, обслуговування та розширення. Розглядалася міграція в хмару, але не існувало чіткої оцінки придатності чи поетапної стратегії.
Маєте запитання?
Зустрінемося та обговоримо.
Incontriamoci

Рішення

Результати бенчмарку CIS на сервері.png
Рішення – solution

WWG реалізувала проєкт через чотири паралельні робочі потоки, структуровані для забезпечення як негайного зниження ризиків, так і чіткої дорожньої карти довгострокової модернізації.

Аудит кодової бази: безпека, залежності та якість коду

WWG провела повний аудит усіх чотирьох репозиторіїв, використовуючи послідовну мульти-інструментальну методологію. Кожна кодова база була оцінена за:

  • Вразливості безпеки: npm audit та osv-scanner виявили понад 19 проблем у фронтенді та бібліотеці компонентів, включаючи CVE високої серйозності в основних залежностях та підтверджену вразливість ReDoS, що впливає на три окремі репозиторії.

Сповіщення PagerDuty у MSTeams.png
Neotecnica – solution
  • Здоров'я залежностей: npm-check та depcheck виявили невикористані пакети, що накопичувалися як мертва вага, та десятки застарілих пакетів на одну або більше мажорних версій.
  • Якість коду: ESLint виявив приблизно 9 000 проблем у фронтенді React та понад 4 000 у бібліотеці компонентів, переважно порушення no-undef, невикористані змінні та використання @typescript-eslint/no-explicit-any.
  • Java-бекенд: аналіз вихідного коду з SonarQube виявив захардкоджені облікові дані, блоки перехоплення всіх винятків catch-all, ручний SQL, закоментовані блоки коду та великі тісно зв'язані класи як основні ризики для супроводжуваності.

Кожний аудит було доставлено як структурований звіт з класифікацією серйозності за областями та пріоритизованою дорожньою картою виправлень.

Аудит робочого процесу Git та перепроєктування стратегії розгалуження

WWG провела повний аудит робочого процесу Git Neotecnica по всіх репозиторіях, документуючи ризики поточного підходу: незахищені головні гілки, прямі злиття з довгоживучих гілок функцій, відсутність code review на основі pull request'ів та відсутність CI-шлюзу перед продакшном.

Графічний інтерфейс Rancher для управління кластерами Kubernetes.png
Neotecnica – solution

Були детально оцінені дві альтернативні стратегії розгалуження: GitHub Flow (оптимізований для частих циклів розгортання) та Trunk-Based Development (оптимізований для мінімізації конфліктів злиття через короткоживучі гілки та feature flag'и). Для приватної бібліотеки компонентів React оцінка спеціально розглянула виклик довгоживучих бета-гілок, які не вписуються ідеально в жодну зі стандартних моделей. Разом з результатами аудиту було надано конкретну рекомендацію щодо впровадження, включаючи правила захисту гілок, шаблони pull request'ів та контрольні точки інтеграції CI.

Оцінка міграції в хмару та документація стандартів

Була підготовлена технічна оцінка бекенду AFM, що документує поточні архітектурні обмеження та пропонує поетапну стратегію міграції: короткостроково — контейнеризація Docker та розгортання на хмарних віртуальних машинах (AWS EC2/ECS) з міграцією бази даних Oracle на RDS; довгостроково — реплатформінг на мікросервіси Spring Boot, PostgreSQL та Kubernetes з повною спостережуваністю (Prometheus, Grafana, ELK).
Для підтримки команди розробників у майбутньому WWG підготувала два стандартні документи: Конвенції кодування бекенду та стандарти модульної архітектури (що охоплюють конвенції іменування Java, багатошарову архітектуру, Spring Security, цілі тестування та інтеграцію з SonarQube) та Професійні рекомендації зі створення NPM-пакету React (що охоплюють конфігурацію збірки, tree-shaking, peer-залежності та подвійний вихід CJS/ESM).
Модернізація інфраструктури Kubernetes

WWG реструктурувала кластери Kubernetes Neotecnica з нуля для забезпечення високої доступності та підтримки сучасного CI/CD:

  • Висока доступність з 3 нодами control plane та виділеними групами робочих нод залежно від навантажень.
  • Встановлення та налаштування Rancher як інтерфейсу управління кластером, що забезпечує видимість робочих навантажень та оперативний контроль без необхідності знання командного рядка.
  • Встановлення Jenkins з нативними агентами Kubernetes: пайплайни виконуються з ефемерними подами, усуваючи потребу в постійних агентах на ВМ.
  • Впровадження Nexus Artifact Repository для хостингу приватних NPM-пакетів (на заміну підмодулям Git) та артефактів збірки Maven.
Зміцнення безпеки та моніторинг

WWG провела оцінки CIS Benchmark для серверів, що виконують допоміжні сервіси, такі як сервер ідентифікації Keycloak та сервер OpenVPN, підготувавши детальні звіти про результати відносно застосовних стандартів безпеки. Сервер OpenVPN також було налаштовано для віддаленого доступу команди з файлами конфігурації для кожного користувача та управлінням резервним копіюванням PKI.
Було налаштовано систему моніторингу та оповіщень з використанням Prometheus, Loki та Grafana, PagerDuty (як центральний хаб для управління інцидентами) та Healthchecks.io (для моніторингу стану на основі ролей), інтегровану з робочим простором Microsoft Teams команди. Налаштування включало планування чергувань, політики ескалації та маршрутизацію сповіщень для кожного користувача, замінивши email-сповіщення на управління інцидентами в реальному часі на основі ролей.

Технологічний стек

npm audit + osv-scanner
Сканування вразливостей безпеки в усіх JavaScript/TypeScript репозиторіях: ідентифікація CVE та класифікація серйозності

SonarQube
Статичний аналіз для Java-бекенду AFM: code smell, проблеми безпеки, оцінка супроводжуваності

Rancher
Інтерфейс управління Kubernetes: видимість робочих навантажень, управління нодами та оперативний контроль

Nexus Artifact Repository
Приватний хостинг артефактів для NPM-пакетів та Maven-білдів, на заміну git-підмодулям

PagerDuty + Healthchecks.io
Управління інцидентами з інтеграцією MS Teams, планування чергувань та налаштування політик ескалації
ESLint + depcheck + npm-check
Якість коду, виявлення невикористаних залежностей та стан версій пакетів у кодових базах React та бібліотеки компонентів

MicroK8s на VMware
Self-hosted кластер Kubernetes, реструктурований для високої доступності з 3 нодами плану управління та групами робочих нод

Jenkins з агентами Kubernetes
Оркестрація CI/CD-пайплайнів з ефемерними под-агентами; автентифікація GitHub App та патерн Shared Library з шаблонами, що повторно використовуються

Keycloak + OpenVPN
Управління ідентифікацією та доступом; правила VPN для кожного користувача та резервне копіювання PKI; застосування CIS Benchmark до обох серверів;

AWS (EC2, ECS, RDS)
Запропонована цільова хмарна інфраструктура в дорожній карті міграції AFM для короткострокових та довгострокових фаз впровадження

Основні технічні виклики

Координація мульти-репозиторного аудиту без спільного інструментарію

Кожна з чотирьох кодових баз працювала з різною базовою конфігурацією: різні набори правил ESLint, різні менеджери пакетів, різні системи збірки. Стандартизація методології аудиту по всіх без модифікації існуючих конфігурацій вимагала ретельного вибору інструментів та точної інтерпретації результатів. Зокрема, розрізнення проблем ESLint, що були артефактами конфігурації (наприклад, правила, що позначали навмисно динамічні патерни), від справжнього технічного боргу вимагало перегляду на рівні коду разом з автоматизованим виходом.

Вирішення проблеми довгоживучих гілок у бібліотеці компонентів

Репозиторій бібліотеки компонентів розвинув модель розгалуження, де гілка функції фактично перетворилася на довгоживучу бета-версію. Ні GitHub Flow, ні trunk-based розробка не обробляють цей патерн чисто з коробки: GitHub Flow не рекомендує гілки, що живуть більше тижня, а trunk-based розробка вимагає feature flag'ів для незавершеної роботи. Git-аудит WWG конкретно розглянув цю проблему, надавши гібридну рекомендацію, що враховує потреби версіонування бібліотеки, не нав'язуючи робочий процес, який створив би тертя для команди.

Архітектура пайплайну Jenkins для трьох різних типів репозиторіїв

Три основні репозиторії Neotecnica — додаток React, приватна NPM-бібліотека та Java Maven-бекенд — мають суттєво різні вимоги до CI/CD. Додаток React потребує стандартизованого робочого процесу для перевірок якості та автоматизованого розгортання. NPM-бібліотека потребує автоматичного версіонування та безпечного управління артефактами для дистрибуції. Maven-бекенд потребує складного процесу збірки, включаючи контейнеризацію та розгортання в приватний реєстр. WWG розробила приклади пайплайнів для всіх трьох типів, використовуючи спільні бібліотеки Jenkins для виділення логіки шаблонів, що повторно використовується, зменшуючи дублювання та надаючи команді Neotecnica операційні зразки замість абстрактних рекомендацій.

Зміцнення безпеки без переривання активних сервісів

Як сервер Keycloak, так і сервер OpenVPN були активними та використовувалися під час втручання. Оцінка та зміцнення безпеки за стандартами CIS потребували визначення рекомендацій, які можна застосувати негайно, та тих, що потребували планових вікон обслуговування.

Результати – results

Результати

  1. Повна технічна картина по всіх чотирьох репозиторіяхКожна кодова база пройшла аудит з послідовними інструментами, що дало структуровані звіти з результатами, класифікованими за серйозністю, та пріоритизованими дорожніми картами виправлень, вперше надавши команді Neotecnica конкретну видимість боргу безпеки та якості.
  2. Понад 19 задокументованих вразливостей безпеки з шляхами виправлення Усі критичні та високої серйозності CVE були ідентифіковані, приписані конкретним пакетам та пов'язані з конкретними кроками виправлення, включаючи цільові версії, альтернативи міграції та рекомендації щодо CI-застосування для запобігання регресій.
  3. Кластер Kubernetes високої доступності в робочому стані Кластер MicroK8s було реструктуровано з HA-планом управління на 3 ноди, управлінням Rancher, Jenkins з нативними агентами Kubernetes та хостингом артефактів Nexus, замінивши крихку однонодову конфігурацію на інфраструктуру розгортання, готову до продакшну.
  4. Моніторинг інцидентів у реальному часі з маршрутизацією чергувань PagerDuty та Healthchecks.io були налаштовані та інтегровані з Microsoft Teams, забезпечивши інженерну команду структурованим управлінням інцидентами з критеріями ескалації, плануванням чергувань та маршрутизацією сповіщень для кожного оператора.

Висновок

Втручання в Neotecnica було широкомасштабною технічною операцією, де виклик полягав не в одній складній проблемі, а в кумулятивному ефекті років зростання без формалізованих контролів якості. Вразливості безпеки були присутні, але не відстежувалися. Проблеми якості коду були поширеними, але не вимірювалися. Робочий процес Git був функціональним, але крихким. Інфраструктура працювала, але їй бракувало інструментів, необхідних для забезпечення надійності та моніторингу.
WWG підійшла до кожного робочого процесу з однією методологією: ретельно оцінити поточний стан, зрозуміти бізнес- та операційний контекст і надати рекомендації та впровадження, які команда зможе реально застосувати на практиці.
Це означало підготовку аудиторських звітів з планами корективних дій, а не лише переліками результатів. Це означало публікацію працюючих прикладів пайплайнів Jenkins, а не лише архітектурних діаграм. І це означало оцінку Git-стратегій відносно конкретних патернів розгалуження Neotecnica, а не просто рекомендацію стандартної моделі та перехід до наступного.
Результат — кодова база з повною видимістю поверхні ризиків, інфраструктура, готова до сучасного розгортання CI/CD, та команда розробників, оснащена стандартами та інструментами, необхідними для підтримки якості в міру подальшого зростання платформи.

Зв'яжіться з нами