AI-система анализа результатов тестирования и классификации ошибок

Отметим: когда в CI падает сразу несколько десятков тестов, разбор первопричин отнимает часы. Инженеры пролистывают логи, пытаясь понять, что сломалось: инфраструктура, регрессия или flaky-тест. Мы научили модель автоматически группировать падения по реальной причине и направлять тикеты ответственно

Направления AI-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1440
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    997
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1264
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1002

Отметим: когда в CI падает сразу несколько десятков тестов, разбор первопричин отнимает часы. Инженеры пролистывают логи, пытаясь понять, что сломалось: инфраструктура, регрессия или flaky-тест. Мы научили модель автоматически группировать падения по реальной причине и направлять тикеты ответственному разработчику. Наша AI-система обрабатывает stack trace быстрее ручного анализа в 5–10 раз, сокращая время от падения до фикса с часов до минут. Внедрение такого подхода позволяет команде сэкономить до 80 человеко-часов в месяц на триаже CI-сбоев.

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

Как происходит классификация ошибок?

Пайплайн состоит из четырёх этапов: парсинг, классификация, кластеризация и роутинг. На входе — сырые логи тестов, на выходе — структурированные отчёты с приоритетом и владельцем.

Парсинг — поддержка JUnit XML, Allure, pytest JSON, Cypress Mochawesome. Нормализация в единую схему: {test_id, status, duration, error_message, stack_trace, timestamp}.

Классификация — мультилейбл классификатор на базе fine-tuned CodeBERT, обученный на размеченных stack trace'ах. Выходные классы:

  • INFRASTRUCTURE — таймауты, connection refused, OOM
  • REGRESSION — тест работал, сломался после коммита
  • FLAKY — нестабильный (проходит с retry)
  • TEST_BUG — ошибка в самом тесте, не в коде
  • NEW_BUG — реальный дефект в продукте
  • ENVIRONMENT — проблема с тестовым окружением

Кластеризация — эмбеддинги stack trace через CodeBERT → HDBSCAN кластеризация. Тесты из одного кластера с высокой вероятностью имеют одну первопричину.

from sentence_transformers import SentenceTransformer import hdbscan class ErrorClusterer: def __init__(self): self.encoder = SentenceTransformer('microsoft/codebert-base') self.clusterer = hdbscan.HDBSCAN( min_cluster_size=3, metric='cosine', cluster_selection_method='eom' ) def cluster_failures(self, failures: list[dict]) -> list[int]: texts = [f['error_message'] + '\n' + f['stack_trace'][:500] for f in failures] embeddings = self.encoder.encode(texts, batch_size=32) return self.clusterer.fit_predict(embeddings) 
Пример работы кластеризации Допустим, после деплоя упало 15 тестов. Ручной разбор показал бы 15 независимых ошибок. HDBSCAN группирует их в 3 кластера: 5 падений из-за таймаута базы данных, 7 из-за изменения API, 3 flaky. Владелец базы данных и автор коммита получают уведомления, остальные разработчики не отвлекаются.

Почему стоит использовать AI-анализ тестов?

Ручной разбор падений — трудоёмкий и подверженный ошибкам процесс. Fine-tuned CodeBERT обрабатывает stack trace в 5 раз быстрее человека, а кластеризация выявляет каскадные сбои, которые выглядят как десятки независимых ошибок. Гарантируем: после внедрения вы сократите время на триаж CI-сбоев минимум вдвое. Наш опыт показывает, что уже через 2–3 недели работы система выходит на целевые метрики качества.

Как HDBSCAN кластеризация выявляет каскадные сбои?

Каскадные сбои — когда одна поломка (например, отказ базы данных) вызывает десятки падений тестов. Кластеризация группирует их по схожести stack trace и error message. Даже если ошибки выглядят по-разному (connection timeout, NULL pointer, 500 ошибка), HDBSCAN объединяет их в один кластер при достаточной близости эмбеддингов. Это позволяет сразу понять, что все падения — следствие одной проблемы.

Определение flaky тестов

Flaky тесты — отдельная категория. Система анализирует историю 30 последних запусков каждого теста и вычисляет flakiness score:

flakiness_score = std(pass_rate_per_day) * frequency_of_status_changes 

Тест с flakiness_score > 0.3 маркируется как flaky и автоматически помещается в карантин — он продолжает запускаться для сбора статистики, но не блокирует CI.

Роутинг уведомлений

Система определяет владельца упавшего теста через git blame на файл теста и на файлы из stack trace. Уведомление идёт не всей команде, а:

  • REGRESSION/NEW_BUG → автор последнего коммита в затронутых файлах + тимлид
  • FLAKY → владелец теста по git blame
  • INFRASTRUCTURE → DevOps-канал
  • TEST_BUG → QA, ответственный за данный тест-файл

Метрики качества классификации

Обучение проводится на размеченном датасете из истории проекта. Типичные метрики после 2–3 недель накопления данных:

Класс Precision Recall
INFRASTRUCTURE 0.94 0.91
REGRESSION 0.88 0.85
FLAKY 0.91 0.87
NEW_BUG 0.83 0.79
ENVIRONMENT 0.89 0.86

Что входит в работу?

  • Аудит текущего CI-процесса и форматов отчётов
  • Настройка парсинга и нормализации логов
  • Обучение классификатора на ваших исторических данных
  • Интеграция с GitLab, GitHub Actions или Jenkins
  • Развёртывание дашборда (Grafana) и webhook-уведомлений
  • Документация и обучение команды

Процесс внедрения

  1. Аналитика — сбор метрик, определение типов ошибок
  2. Проектирование — выбор стека, конфигурация пайплайна
  3. Реализация — написание парсеров, обучение модели
  4. Тестирование — A/B-сравнение с ручным анализом
  5. Деплой — развёртывание в staging, затем в production

Сроки ориентировочно

Размер тестовой базы Срок внедрения
До 500 тестов 2–3 недели
500–2000 тестов 3–5 недель
Более 2000 тестов 5–7 недель

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