AI-візуальне регресійне тестування: порівняння скріншотів з ІІ

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

Напрямки 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. Замовте консультацію з впровадження ІІ-візуального тестування — ми покажемо, як це працює на ваших даних.