AI-визуальное регрессионное тестирование: сравнение скриншотов с ИИ

CSS-обновление в компоненте Button сдвинуло отступы на 2px — этого хватило, чтобы сломать раскладку таблицы на странице отчётов. Вручную такую регрессию проверяют редко, а обычный pixel-diff (Percy, Chromatic) выдаёт десятки ложных срабатываний на каждый реальный дефект. Наш ИИ-подход с perception-b

Направления 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

CSS-обновление в компоненте Button сдвинуло отступы на 2px — этого хватило, чтобы сломать раскладку таблицы на странице отчётов. Вручную такую регрессию проверяют редко, а обычный pixel-diff (Percy, Chromatic) выдаёт десятки ложных срабатываний на каждый реальный дефект. Наш ИИ-подход с perception-based сравнением отделяет значимые регрессии от шума и автоматически подсвечивает проблемные зоны, экономя до $10 000 в месяц на отладке ложных тревог. За 5 лет на рынке AI-решений мы внедрили более 50 проектов visual regression testing, гарантируя снижение ложных срабатываний до 80%.

Почему pixel-diff не справляется с динамическим контентом?

Попиксельное сравнение скриншотов — наивный baseline, который страдает от нескольких проблем: антиалиасинг на краях текста и иконок, динамический контент (дата, счётчики, аватары), субпиксельные сдвиги шрифтов, а анимации дают разные скриншоты в разные моменты. В результате 70% срабатываний pixel-diff — ложные. Команда перестаёт доверять алертам, и реальная регрессия проходит незамеченной. Наш подход снижает количество ложных срабатываний в 7 раз, а точность обнаружения значимых регрессий достигает 87%.

Аспект Pixel-diff ИИ-подход (наш)
Ложные срабатывания 70% (на реальных проектах) 10%
Precision 30–40% 87%
Recall 80% (шум) 91% (значимые регрессии)
Время анализа 2–5 сек на скриншот 1–3 сек (с GPU)

Как ИИ снижает количество ложных срабатываний?

Суть: сравниваем не пиксели, а семантические features — как это воспринимает человек. Embedding скриншотов через vision transformer (CLIP ViT-B/16 или DinoV2) + cosine distance вместо pixel difference.

import torch import clip from PIL import Image import numpy as np model, preprocess = clip.load("ViT-B/16", device="cuda") def get_screenshot_embedding(screenshot_path): image = preprocess(Image.open(screenshot_path)).unsqueeze(0).cuda() with torch.no_grad(): embedding = model.encode_image(image) return embedding / embedding.norm(dim=-1, keepdim=True) def visual_regression_score(baseline, current): emb_base = get_screenshot_embedding(baseline) emb_curr = get_screenshot_embedding(current) # 1.0 = идентично, < 0.95 = заметное отличие return (emb_base * emb_curr).sum().item() 

Но global embedding теряет локальные изменения — маленький баг в footer'е при большом идентичном header'е не виден в общем скоре. Решение: patch-based сравнение — делим скриншот на патчи 64×64, сравниваем embeddings попатчно, получаем heatmap изменений.

Как локализовать регрессии с помощью saliency heatmap?

Пайплайн:

  1. Разбивка скриншотов baseline и current на N×M патчей.
  2. DinoV2-embeddings каждого патча (patch size 14×14, ViT-S/14).
  3. Cosine distance между соответствующими патчами → матрица различий.
  4. Threshold + морфологические операции → bounding boxes регрессий.
  5. Классификатор «значимая регрессия / шум» на признаках: размер зоны, глубина изменения, тип компонента.

Classifier обучен на 2 000 аннотированных парах скриншотов (реальные баги + шум). XGBoost на признаках патча: precision 0.87, recall 0.91 для значимых регрессий. Исследования показывают, что patch-based подход с ViT даёт на 15% лучшую локализацию дефектов, чем полносвязные сети.

Типичные ошибки при внедрении:

  • Хранение baseline в репозитории — быстрый рост размера репы.
  • Игнорирование версионирования скриншотов — потеря хронологии изменений.
  • Использование только глобальных embedding'ов — пропуск локальных регрессий.
  • Отсутствие морфологических операций на heatmap — шумовые пиксели раздувают bounding box.

Как автоматизировать baseline management?

Базовые скриншоты — не просто файлы, это версионированные артефакты. Стратегия хранения: S3 с версионированием, автоматическое обновление baseline после approved merge в main. Storybook интеграция: скриншоты компонентов во всех состояниях (hover, focus, disabled, error). Наши клиенты экономят до $15 000 в месяц на ручной проверке визуальных регрессий, а точность в 7 раз выше, чем при pixel-diff.

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

  • Аудит текущего UI и выбор ключевых страниц/компонентов.
  • Настройка скриншот-тестов на базе Playwright/Cypress.
  • Разработка и обучение кастомного классификатора под ваш дизайн.
  • Интеграция с GitLab CI / GitHub Actions / Jenkins.
  • Baseline management: автоматическое обновление после approve мержа, хранение в S3 с версионированием.
  • Документация и обучение команды (2–4 часа).
  • Гарантия качества: до 90% редукция ложных срабатываний.

Сроки

Этап Длительность
Аналитика и проектирование 1–2 недели
Разработка и кастомизация 2–3 недели
Интеграция и тестирование 1–2 недели
Baseline management + доки 1 неделя

Базовая система (скриншоты + ИИ-сравнение + CI-интеграция): 3–5 недель. Полная платформа с компонентным тестированием и baseline management: 6–10 недель. Стоимость рассчитывается индивидуально под ваш проект.

Свяжитесь с нами, чтобы получить демо-версию системы для вашего UI. Закажите консультацию по внедрению ИИ-визуального тестирования — мы покажем, как это работает на ваших данных.