AI-система Self-Healing Tests: автовиправлення зламаних тестів

Автотести падають після кожного релізу, і команда витрачає дні на ручні правки замість розвитку продукту. Ми розробляємо AI-систему Self-Healing Tests під ключ: вона сама розпізнає змінені елементи й відновлює перевірки. Частка ручних правок скорочується в рази, а регрес знову стає надійною опорою.
Часті запитання

Self-Healing Tests: чому автотести падають після релізів

Зелений набір автотестів перед релізом — і розсип червоних прогонів наступного дня, хоча бізнес-логіку ніхто не змінював.

Автотести, що падають, у цій картині описують не дефекти продукту, а крихкість самих перевірок: збірка витрачає час на повторні прогони, а команда розбирає те, що працювало й раніше.

Перша причина — крихкі локатори. Селектор, прив'язаний до ланцюжка вкладених елементів або до службового CSS-класу, ламається від будь-якої правки верстки: перенесення блоку, зміни теми, заміни компонента. Тест не знаходить кнопку й падає за таймаутом, хоча кнопка на місці й працює.

Друга — контракти та порядок кроків. Зайве поле у відповіді, змінений код стану, переставлені запити — і перевірки схеми або підготовка даних розсипаються. Поверх цього лягає асинхронність: фіксовані паузи в тесті вгадують час завантаження замість очікування реальної події.

Перезапуск тестів знімає симптом, а не причину. Автоповтор видає зелений звіт, хибні падіння переходять до розряду «нестабільних», і в цьому шумі губиться справжнє падіння. Підтримка автотестів починає з'їдати помітну частку часу команди, а довіра до набору падає до нуля.

Self-healing tests переносять точку опори всередину прогону: при промаху локатора рушій шукає елемент за сукупністю ознак — ролі, тексту, сусіднім вузлам, історії успішних знаходжень, як це робиться поверх Playwright. Нижче розбираємо, як влаштоване автовиправлення і де проходять його межі.

Що дає автовиправлення тестів: ефект за метриками

Ефект автовиправлення вимірюється за історією запусків: час прогону та частка правок, які робить людина, рахуються до впровадження і через місяць роботи на тому ж наборі перевірок. Автовиправлення працює поверх наявного набору — у тому числі там, де тести написані на Playwright.

Новий локатор підбирається за сукупністю ознак: роль елемента, підпис, місце в розмітці, сусідні вузли, — і приходить як пропозиція, яку інженер затверджує на рев'ю.

Час прогону та частка ручних правок

Прогін прискорюється не тому, що перевірки стали швидшими, а тому що зникають повторні перезапуски. Тест, що впав через перейменовану кнопку, більше не тягне за собою перезапуск набору і не блокує конвеєр. Прогін іде одним заходом, а простій через зламану перевірку скорочується з доби до годин.

Частка ручних правок падає з кожної п'ятої перевірки до поодиноких випадків — інженер перемикається з лагодження локаторів на нові сценарії. Вартість простою тут вимірюється не грошима, а вікном, у якому команда не постачає зміни.

Клас відмов, який зникає зовсім

Повністю зникає клас хибних падінь: зміна розмітки за незмінної логіки — зміна класів, перестановка блоків, локальний редизайн.

Реальні дефекти залишаються видимими: якщо змінився результат, а не верстка, тест продовжує падати й підсвічує помилку, а не підганяється під неї. Межа задається політикою: які ознаки вважаються косметичними, а які — зміною контракту.

Варіанти підключення: контур повністю, надбудова, ручний режим

Підключення системи до наявного набору тестів не вимагає його переписувати: self-healing tests вбудовується в той самий прогін і спрацьовує, коли інтерфейс змінився, а перевірка має пройти.

Режим вибирають за двома речами — наскільки набір стабільний сьогодні і наскільки команда готова віддати правки автоматиці.

Різниця між варіантами — у глибині втручання: повний контур сам знаходить розходження і замінює локатор, шар надбудови лише пропонує заміну, ручний режим показує зламаний крок і не змінює нічого.

Перехід між режимами оборотний — зазвичай починають з надбудови і переходять до повного контуру, коли накопичується довіра до запропонованих замін.

Варіант Коли підходить Обмеження
Повний контур Великий набір, часті релізи, правки локаторів з'їдають час команди Потрібні права на запис до репозиторію тестів і порядок приймання автоправок
Шар надбудови Набір робочий, але падіння на реліз почастішали Заміна застосовується лише після інженера — виграш у часі частковий
Ручний режим правок Пілот, багато успадкованих перевірок, жорсткий аудит змін Автоматика лише діагностує, обсяг ручної роботи зберігається

Що змінюється в наявному наборі тестів

Перевірки та їхня логіка залишаються, змінюється шар звернення до інтерфейсу: крихкі прив'язки до позиції елементів заміщуються стійкими ознаками — роль, видимий текст, атрибути доступності.

Частка падінь через правки верстки скорочується, а час на розбір прогону, що впав, іде на реальні дефекти, а не на лагодження селекторів.

Як впроваджуються self-healing tests: етапи робіт

Впровадження self-healing tests — це не підключення бібліотеки, а налаштування дисципліни: система повинна відрізняти косметичну правку розмітки від справжнього дефекту. Тому етапи впровадження починаються з аудиту тестового набору, а не з конфігурації.

  1. Аудит набору. Розмічаємо тести за стабільністю: скільки падінь за період, які спричинені правками верстки, які — логіки. На виході — список кандидатів на автовиправлення і ті, що лікувати не можна.
  2. Проєктування правил. Описуємо, які атрибути вважаються опорними, які підміни допустимі, що вважається розходженням. Правила фіксуємо текстом, а не «за домовленістю».
  3. Налаштування середовища. Підключаємо систему до прогонів, налаштовуємо зберігання історії падінь і доступи до репозиторію тестів.
  4. Навчання на історії. Проганяємо накопичені падіння: перевіряємо, скільки система лагодить коректно і де пропонує хибні правки.
  5. Пілот на живому прогоні. Працюємо в режимі пропозицій без автозастосування, звіряємо кожне виправлення з еталоном.
  6. Передача команді. Документуємо правила, залишаємо регламент розбору спірних випадків.

Критерії приймання на кожному кроці

Приймання результату спирається на вимірюване: частка коректних автовиправлень на відкладеній вибірці падінь, число хибних правок, час прогону до і після. Окремо перевіряємо відкат — будь-яка зміна повинна скасовуватися однією операцією.

Хто бере участь з боку замовника

Потрібні інженер, який відповідає за тестовий контур, і власник продукту для вирішення спірних випадків. Їхня участь — по годині на крок: узгодити правила, підтвердити еталон падінь, прийняти результат.

Що залишається на руках: конфігурації, схеми, регламенти

Після впровадження в репозиторії та на стендах залишаються робочі артефакти — не звіт про виконану роботу, а те, чим команда користується щодня. Нижче комплект, який ми передаємо і який далі живе без нашої участі.

  • Конфігурації правил автовиправлення: які типи падінь закриваються автоматично, які йдуть на ручний розбір, з повною історією змін у системі контролю версій.
  • Схеми роботи: шлях від тесту, що впав, до підтвердженої правки — де спрацьовує автоматика, де підключається інженер, де точка відкату.
  • Регламент правок: хто узгоджує зміну еталонних знімків і селекторів, у які терміни, що вважається регресом і блокує прогін.
  • Правила доступу: ролі та права на зміну правил, запуск прогонів і перегляд журналів — окремо для розробників, тестувальників і керівника напряму.
  • Журнал виправлень: по кожному випадку — який тест упав, яка причина, що саме змінено, хто підтвердив.
  • Інструкції з локального запуску та налагодження: щоб новий інженер відтворював поведінку системи в себе, а не з'ясовував її дослідним шляхом.

Документація та навчання команди

Документація описує не лише «як налаштовано», а й «чому так»: які компроміси обрано і за яких умов правило варто переглянути. Окремий розділ — типові збої і що робити, якщо автовиправлення запропонувало невірну правку.

Передача займає дві зустрічі: розбір схеми роботи на живому прогоні та спільна правка регламенту під ваші процеси. Далі команда веде систему сама — наші інженери залишаються на зв'язку для нестандартних випадків.

Кейс: частка ручних правок тестів скоротилася в рази

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

До старту робіт команда замовника витрачала на розбір падінь більше часу, ніж на розробку нових сценаріїв.

Що було вузьким місцем до старту

Перевірки були прив'язані до розмітки сторінки напряму: зміна класу кнопки або вкладеності блоку ламала десятки сценаріїв, хоча поведінка інтерфейсу не змінювалася. За типовий прогін падало 15–20% перевірок, і майже всі вони виявлялися хибними.

Інженери правили селектори вручну, а частину сценаріїв позначали нестабільними й вимикали — покриття скорочувалося непомітно, бо вимкнений сценарій не шумить.

Як вимірювали результат

Заміри знімали на рівних інтервалах до і після: частка прогонів, що завершилися без хибних падінь, частка перевірок, виправлених руками, і час від падіння до знову зеленого прогону.

Окремо рахували, скільки падінь інженер розбирав вручну за тиждень, — ця цифра показує реальне навантаження на команду, а не непряме.

Автовиправлення (self-healing tests) працює так: при зміні розмітки система підбирає актуальний елемент за сукупністю ознак — текст, роль, сусідні вузли, — а потім підтверджує вибір тим, що елемент поводиться очікувано в сценарії.

Помилкове зіставлення не проходить далі перевірки поведінки, тому хибні «лагодження» не маскують реальні дефекти.

Ручних правок стало в рази менше, відновлення прогону скоротилося з годин до хвилин, частка стабільних прогонів зросла, а вимкнені раніше сценарії повернулися до набору.

Автовиправлення проти перезапуску: у чому різниця

Пряма відповідь: перезапуск лікує нестабільність середовища, автовиправлення — змінений інтерфейс. Це різні причини падіння, тому підходи не замінюють, а доповнюють один одного: один відповідає за повторюваність умов, другий — за стійкість опису елементів. Порівнювати їх як заміну один одному некоректно.

Підміна локаторів спирається не на одну ознаку: система зберігає набір атрибутів елемента — текст, роль, сусідні вузли, місце в структурі — і при падінні вибирає кандидата з найбільшим збігом. Саме набір ознак відрізняє осмислене виправлення від підстановки першого схожого елемента.

Варіант Коли підходить Обмеження
Повторний запуск Плаваючі збої: перевищення часу очікування, недоступність сервісів Не лікує змінений інтерфейс, подовжує прогін, маскує дефект
Підміна локатора Косметика верстки, перейменування атрибутів Може завести на схожий елемент і підтвердити невірний результат
Автовиправлення з рев'ю Регулярні релізи інтерфейсу, спільні кроки Потрібне підтвердження та історія змін

Обмеження підходу починаються там, де збіг формальний: елемент підходить за атрибутами, але перевіряє вже не те, і тест зеленіє при живому дефекті. Тому правку локатора проводять через рев'ю і зберігають в історії, а для критичних перевірок автоматичне виправлення вимикають.

Перезапуск доречний там, де причина зовнішня: недоступність сервісу, гонка при завантаженні даних. Критерій простий — збій повторюється на незмінному коді, отже правимо опис елемента; збій плаваючий — розбираємося з умовами запуску.

Технічні сумніви: хибні спрацювання та межі

Хибне спрацювання — головний ризик: самовиправлення підмінює локатор на перший, що збігся за розміткою, прогін зелений, а перевірка вже нічого не перевіряє. Такий результат дорожчий за падіння — дефект іде далі й спливає в користувачів.

Тому правки розділені за класами ризику. Косметика — перейменування атрибута, зсув розмітки, зміна контейнера — застосовується автоматично.

Усе, що змінює сенс перевірки, лише пропонується з показом відмінностей і вимагає підтвердження інженера: до нього тест позначається нестабільним, а не пройденим.

Кожне виправлення фіксується в журналі — вихідний локатор, новий, причина, хто прийняв. Частка автоприйнятих правок, повторні падіння того ж тесту і охоплення шляхів тримають стабільність під наглядом.

Система почне масово переписувати тести — не втратимо контроль?

При перевищенні частки автоправок за прогін система переходить у режим пропозицій і нічого не застосовує сама. Масова перезапис — ознака того, що змінився інтерфейс, а не розмітка, і тут рішення за інженером.

Наскільки підхід зав'язаний на наш стек?

Працює там, де є доступ до розмітки та стійкі способи пошуку елементів: веб-інтерфейси, мобільні застосунки, контракти сервісів.

На самописних форматах, відрисовці на полотні та динамічних ідентифікаторах без семантики точність падає — такі тести залишаються на ручній підтримці, про що ми говоримо до старту.

Що з відкатом шкідливої правки?

Зміна версіонується разом із тестом, повернення до попереднього локатора — однією операцією. Історія зберігає, хто і чому прийняв правку.

Обговоримо задачу: які дані потрібні для оцінки

Оцінка self-healing tests не будується на описі в листуванні: щоб назвати склад робіт і терміни, інженерам потрібен доступ до реальних артефактів — репозиторію тестів, логам прогонів і конфігурації середовища. Чим повніший вхід, тим менше припущень у плані.

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

Далі порядок такий: розбираємо зібране і будуємо схему зв'язків між кроками тестів, елементами інтерфейсу та змінами в коді. На схемі видно, які падіння знімаються автоматично, а які залишаються за інженером.

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

Опишіть задачу і додайте те, що вже є, — повернемося з оцінкою та планом робіт.

Напрямки AI-розробки

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142