
FlakyDetector 2.0: Один комментарий, который перевернул моё представление о нестабильных тестах
Artem7898 3 минуты назад FlakyDetector 2.0: Один комментарий, который перевернул моё представление о нестабильных тестах Средний 4 мин 0 Тестирование IT-систем * Python * Машинное обучение * Качество кода * Recovery...
GPT-5.6 31 Temmuz 2026'da yayınlanacak mı?
Значимый прорыв формирует отрасль ИИ: Artem7898 3 минуты назад FlakyDetector 2. 0: Один комментарий, который перевернул моё представление о нестабильных тестах Средний 4 мин 0 Тестирование IT-систем * Python * Машинное обучение * Качество кода * Recovery Mode Как мы с вашей помощью добавили анализ фикстур, подняли размерность признаков до 42 и научились видеть order dependency до того, как она рушит CI🔥 Лид: «А давайте просто пометим тест flaky и забудем»Полгода назад я написал статью про FlakyDetector — инструмент, который ищет нестабильные тесты по одному лишь исходному коду, Потом была статья FlakyDetector 2. AST + CatBoost, 37 признаков, вроде бы всё круто.
Но один комментарий меня добил. Пользователь Ariless рассказал реальный кейс: в их проекте тест падал с SLOT_OVERLAP — не потому, что в коде теста было что-то плохое, а потому что фикстура была общая на несколько тестов (shared scope). Предыдущий тест не успел почистить слот — следующий упал.
Технические детали
«Решение оказалось архитектурным, не тестовым. Код самого теста не трогали, а только перевели fixture из shared scope в function scope. SLOT_OVERLAP исчез полностью».
И главный вывод, который он сделал:«Flakiness as a signal» — тест падал не потому, что был плохо написан, а потому что подсвечивал реальный дефект в дизайне окружения. Если просто пометить его flaky и заглушить, то теряется единственный индикатор проблемы. Я тогда посмотрел на свой анализатор.
И понял: мой FlakyDetector 2. 0 был слеп к этому кейсу. Потому что он смотрел только на код теста, а не на связки между тестами через фикстуры.
Отраслевые последствия
0 пропустил SLOT_OVERLAPМодель flaky_v1_37d. cbm была обучена на 37 признаках: счётчики time. now(), глобальные мутации, цикломатическая сложность и так далее.
В кейсе Ariless тест выглядел идеально:def test_slot_creation(slot_fixture): slot = slot_fixture. create() # чисто, нет антипаттернов assert slot. is_empty()Ни sleep, ни глобальных переменных, ни сетевых вызовов.
Модель выдавала 99% уверенности, что тест стабилен. А проблема была в фикстуре, которая объявлена где-то в conftest. fixture(scope="module # ← вот он, главный злодей def slot_fixture(): return SharedSlot() # ← нет yield, нет teardownИ в том, что SharedSlot — мутабельный объект.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.




