🔥 Важное для QA-специалистов! 🔥
В QaRocks ты найдешь туториалы, задачи и полезные книги, которых нет в открытом доступе. Уже более 17.000 подписчиков – будь среди нас! Заходи к нам в телеграм канал QaRocks
Инженерам по автоматизированному тестированию часто приходится отлаживать и исправлять flaky‑тесты. Если углубиться в академическую литературу по flaky‑тестам, можно заметить, то многие привычные термины имеют слегка разные определения в разных источниках, а отдельные статьи оперируют чисто компьютерно-научными понятиями, которые редко встречаются в реальной практике тестирования.
При подготовке списка ниже использовались заметки и пометки из статей, а также инструмент NotebookML AI, который помог собрать часто встречающиеся термины из прочитанного материала.

Ниже перечислены ключевые термины и понятия, связанные с flaky‑тестами:
- Flaky test — flaky-тест, нестабильный тест
- All tests are flaky (ATAF) — все тесты нестабильны
- Confusion matrix — матрица ошибок
- Deterministic outcome/result — детерминированный результат
- Non-deterministic outcome/result — недетерминированный результат
- Distributed tests — распределённые тесты
- Entropy — энтропия
- Failure burst lengths — длина серий отказов
- False alarm/alert — ложное срабатывание / ложная тревога
- Fault-revealing test — тест, выявляющий дефект
- Fault-triggering failure — сбой, вызывающий дефект
- Flakiness — нестабильность теста
- Hard flakiness — жёсткая нестабильность
- Soft flakiness — мягкая нестабильность
- Flakiness scoring — оценка нестабильности
- Flake reduction (FR) — снижение нестабильности тестов
- Loss in fault detection (LFD) — потеря при обнаружении дефектов
- Flaky build — нестабильная сборка
- Flaky failure — нестабильный сбой
- Flaky rate / flake rate / flakiness rate / flaky-test-failure rate — коэффициент нестабильности
- Flaky test suite — набор нестабильных тестов
- Flaky test vocabulary — словарь терминов flaky‑тестов
- Flip / transition — переключение / смена состояния теста
- Flip rate / transition frequency — частота смены результата / переходов
- Infrastructure flakiness — нестабильность инфраструктуры
- Non-hermetic tests — неизолированные тесты
- Order dependency (OD) — зависимость от порядка выполнения тестов
- Probabilistic flakiness score (PFS) — вероятностная оценка нестабильности теста
- Quarantine — карантин тестов
- Rank of flakiness — степень нестабильности теста
- Resource-affected flaky test (RAFT) — нестабильный тест, зависящий от ресурсов
- SUT (System Under Test) — тестируемая система
- CUT (Code Under Test) — тестируемый код
- Systemic flakiness — системная нестабильность тестов
- Test smells — тестовые запахи / признаки проблем в тестах
Нестабильный тест (flaky-тест)
Существует множество определений flaky-теста, однако все они сходятся в одном: это тест, который при многократном запуске на одной и той же версии кода ведёт себя непредсказуемо — то проходит, то падает.
Формальное определение звучит следующим образом: flaky-тест — это тест с недетерминированным результатом выполнения.
Все тесты нестабильны (all tests are flaky, ATAF)
Предполагается, что любой тест потенциально является flaky, а различие между ними сводится к частоте падений, которая в ряде случаев может быть нулевой.
Матрица ошибок (confusion matrix)
Матрица ошибок используется для классификации результатов алгоритмов и активно применяется при обнаружении, прогнозировании, классификации и оценке flaky-тестов.
Четыре компонента матрицы ошибок определяются при классификации теста (или сбоя) как «flaky» (положительный класс) или «non-flaky» (отрицательный класс):
- TP (True Positive) — flaky-сбой правильно определён как flaky.
- FN (False Negative) — flaky-сбой ошибочно определён как non-flaky или принят за реальный дефект.
- FP (False Positive) — стабильный тест ошибочно помечен как flaky.
- TN (True Negative) — стабильный тест корректно определён как стабильный; настоящий дефект, не совпадающий с flaky-сбоем.

На практике случаи FN и FP часто называют «подозрительными», так как выяснение истинной причины таких падений требует значительных усилий.
Детерминированный результат (deterministic outcome/result)
Детерминированный результат — это такой результат, который можно точно предсказать, имея набор входных данных и начальные условия. Он не зависит от случайности или неопределённости.
Стабильные тесты всегда дают детерминированные результаты.
Недетерминированный результат (non-deterministic outcome/result)
Недетерминированный результат — это результат, который может меняться даже при одинаковых входных данных или условиях. Он непредсказуем и может отличаться при каждом выполнении.
Тест считается недетерминированным, если он иногда проходит, а иногда нет.
Распределенные тесты (distributed tests)
Распределённые тесты — это тесты, которые выполняются одновременно на нескольких машинах, в разных окружениях или на нескольких экземплярах SUT. Некоторые исследования пытались выяснить, влияет ли такое распределение на flaky-тесты, но явной связи не обнаружено.
Например, запуск тестов параллельно на разных машинах — это распределённое тестирование; то же самое, если тесты выполняются против SUT, развернутой на нескольких узлах.
Энтропия (entropy)
Энтропия — это мера случайности. В исследованиях flaky-тестов она используется как метрика, позволяющая обнаруживать нестабильные тесты на основе изменчивости их результатов. По сути, энтропия показывает, насколько непредсказуемо тест проходит или падает со временем.
Энтропия вычисляется по формуле:

Где:
- p(i) — вероятность каждого возможного результата i (pass или fail).
В отличие от простых метрик вроде flip rate, энтропия учитывает соотношение успешных и неуспешных прогонов, игнорируя порядок, в котором они происходят. Это позволяет выявлять тесты, которые непредсказуемо проходят или падают — характерный признак flaky-тестов.
Смежные термины: частота изменения состояния (flip rate / transition frequency).
Длина серий отказов (failure burst lengths)
Под длиной серий отказов понимается количество последовательных падений теста при повторных запусках. Эта метрика помогает определить, сколько раз нужно перезапустить тест, чтобы зафиксировать его нестабильность.
Ложное срабатывание/ложная тревога (false alarm / alert)
Ложное падение теста, возникающее из-за нестабильного поведения flaky-теста, даже если в тестируемом коде нет никаких багов.
Тест, выявляющий дефект (fault-revealing test)
Тест, который стабильно падает при повторных запусках в рамках одной и той же сборки, тем самым выявляя регрессию.
Сбой, вызывающий дефект (fault-triggering failure)
Стабильный сбой, возникающий при выполнении теста, который действительно воспроизводит дефект. Такое падение сохраняется при повторных запусках и указывает на реальную регрессию.
Нестабильность теста (flakiness)
Нестабильность — это свойство теста выдавать разные результаты при повторных запусках, то есть быть недетерминированным и ненадёжным.
Жесткая нестабильность (hard flakiness)
Определение, используемое в количественном тестировании (например, A/B-тестировании), которое соответствует классическому булеву вердикту. Жёсткая нестабильность определяется изменением окончательного результата pass/fail при повторных запусках теста [17].
Мягкая нестабильность (soft flakiness)
Определение, используемое в количественном тестировании (например, A/B-тестировании), при котором нестабильность определяется по изменению количественных метрик при повторных запусках, даже если итоговый вердикт pass/fail остаётся неизменным [17].
Оценка нестабильности тестов (flakiness scoring)
Оценка нестабильности тестов — это количественная оценка того, насколько тест нестабилен (или ненадёжен), то есть как часто его результат (pass/fail) меняется при одинаковых условиях выполнения. Такая оценка включает две ключевые метрики: энтропию и частоту изменения состояния, которые агрегируются во времени для вычисления итоговой оценки нестабильности для каждого теста.

Итоговая оценка показывает, как нестабильность распределяется между тестами, и позволяет отслеживать её изменения и тенденции.
В компании Meta используется схожая внутренняя метрика — вероятностная оценка нестабильности тестов.
Снижение нестабильности тестов (flake reduction, FR)
Снижение нестабильности — это метрика, которая показывает, насколько эффективно система оценки нестабильности отфильтровывает flaky-тесты.
Она рассчитывается как доля нестабильных падений, которые удалось исключить с помощью фильтрации. Иными словами, метрика показывает, сколько шумных и ненадёжных результатов было устранено после автоматического игнорирования тестов с высокой нестабильностью.

- Высокое значение FR — хорошо: фильтрация устранила большую часть ненадёжных падений (меньше шума).
- Низкое значение FR — плохо: значительная часть нестабильных падений всё ещё остаётся.
Потеря при обнаружении дефектов (loss in fault detection, LFD)
Это тип метрики оценки, используемый для измерения эффективности оценки нестабильности при отфильтровывании нестабильных тестов [13].
Под дефектами здесь понимаются детерминированные падения на конкретной версии или коммите системы под тестированием. Таким образом, LFD отражает нежелательный эффект фильтрации — потерю настоящих ошибок.

- Низкое значение LFD — хорошо: реальные баги почти не игнорируются.
- Высокое значение LFD — плохо: фильтрация удаляет настоящие, детерминированные падения.
Нестабильная сборка (flaky build)
Flaky build — это сборка в системе непрерывной интеграции (CI) с непредсказуемым результатом: при одинаковых условиях она то проходит, то падает. Причиной такой нестабильности может быть либо flaky-тестовый набор, либо проблемы в самой системе непрерывной интеграции, а не в тестируемом коде.
См. также: нестабильность инфраструктуры (infrastructure flakiness).
Нестабильный сбой (flaky failure)
Нестабильный сбой — это падение теста, вызванное именно его нестабильностью, а не реальным дефектом в коде.
Коэффициент нестабильности теста (flaky rate / flake rate / flakiness rate / flaky-test-failure rate)
Коэффициент нестабильности теста (или частота нестабильных тестов) количественно показывает, как часто тест демонстрирует flaky-поведение. Flaky rate измеряет долю запусков теста, которые оказались нестабильными, за заданный период наблюдения.
Частота нестабильных тестов рассчитывается по формуле:

Где:
- t — конкретный тест.
- F(t) — количество нестабильных запусков теста t.
- E(t) — общее количество запусков этого теста за рассматриваемый период (обычно используется число прогонов или билдов).
Другими словами, эта метрика показывает степень нестабильности теста.
Для расчёта частоты нестабильности по скользящему окну времени или сборок формула выглядит так:

Где:
- t — конкретный тест.
- N — количество последних сборок, которые учитываются.
- Flaky(t,i) = 1, если тест t был нестабильным в сборке i, иначе 0.
Другие способы количественной оценки нестабильности теста включают в себя скорость переключения (измерение того, как часто тест переходит из состояния «пройдено» в состояние «не пройдено») и энтропию (измерение случайности результатов).
Набор нестабильных тестов (flaky test suite)
Набор тестов считается нестабильным, если при повторных запусках на одной и той же версии кода он то проходит, то падает. Также набор считается нестабильным, если в нём есть нестабильные тесты. Таким образом, нестабильный набор тестов — это тот, который ведёт себя непредсказуемо из-за содержащихся в нём нестабильных тестов.
Словарь нестабильных тестов (flaky test vocabulary)
Словарь нестабильных тестов — это набор слов и шаблонов из кода тестов, которые чаще всего связаны с нестабильностью. Его используют при статическом анализе и в моделях машинного обучения, чтобы предсказывать, какие тесты могут быть нестабильными, без их фактического запуска.
В такой словарь входят слова вроде job, table, action, wait, process, timeout, duration, thread, sleep, idle и др. Содержание словаря зависит от языка программирования и фреймворка для автоматизации тестов.
Переключение / смена состояния теста (flip / transition)
Переключение (flip) или смена состояния (transition) означает смену результата теста между запусками, коммитами или версиями тестируемой системы.
- Pass → Fail: тест начинает падать после изменения кода.
- Fail → Pass: тест снова проходит после изменения кода.
Такая смена результата показывает реальное изменение поведения теста.
Частота смены результата / переходов (flip rate / transition frequency)
Этот термин встречается в статьях о моделировании нестабильности тестов. Flip rate, или transition frequency, — это статистическая мера того, как часто происходят смены результата теста (переключения). Она вычисляется как количество переключений теста, делённое на выбранный период времени или на число запусков теста.
Формула:

Если тест никогда не переключается, его flip rate равен 0. В случае, когда он сменил результат один раз из Pass → Fail за 3 прогона, flip rate = 1/3 ≈ 0,33. Если же тест переключился 3 раза за 3 прогона, flip rate = 3/3 = 1. Таким образом, flip rate позволяет различать поведение тестов и оценивать их нестабильность.
Нестабильность инфраструктуры (infrastructure flakiness)
Инфраструктурная нестабильность — это форма нестабильности тестов, которая возникает не из-за кода проекта (CUT), а из-за проблем в среде выполнения. К таким проблемам относятся: недетерминированность работы инфраструктуры тестирования, виртуальные машины, контейнеры Docker, сервисы непрерывной интеграции, песочницы, эмуляторы, скачивание зависимостей и другие элементы среды.
Неизолированные тесты (non-hermetic tests)
Неизолированные тесты — это тесты, которые не полностью изолированы от внешних зависимостей и переменных среды. Такие тесты взаимодействуют с реальными внешними системами, например, базами данных, файловыми системами, сетями, сторонними сервисами и развернутыми приложениями во время выполнения. Из-за этого они более подвержены нестабильности, выполняются медленнее и сложнее поддаются отладке, так как зависят от внешних условий.
Смежные термины: неизолированные тесты, системные тесты, сквозные (end-to-end) тесты, распределенные тесты .
Зависимость от порядка выполнения тестов (order dependency, OD)
Зависимость от порядка тестов — это ситуация, когда результат одного теста зависит от того, в каком порядке выполнялись другие тесты. OD является одной из основных причин нестабильности тестов. Термин включён в список именно потому, что нестабильность возникает из-за самих тестов.
См. также: тестовые запахи (test smells), так как это связано с OD.
Вероятностная оценка нестабильности теста (probabilistic flakiness score, PFS)
PFS — это статистическая метрика, которая показывает вероятность того, что тест упадёт из-за нестабильности, а не из-за реального регресса в коде или изменения состояния системы.
Эта метрика помогает оценивать и отслеживать надёжность тестов.
В Apple есть похожая внутренняя метрика, называемая flakiness scoring (оценка нестабильности).
Карантин тестов (quarantine)
Карантин — это практика, при которой заранее известные нестабильные тесты выносятся из основного набора тестов в отдельный список или раздел. Это позволяет не останавливать CI-процессы и даёт возможность вернуться к анализу и починке таких тестов позже.
Степень нестабильности теста (rank of flakiness)
Степень нестабильности показывает, насколько сильно тест проявляет нестабильность.
Универсальной шкалы оценки не существует. В ряде исследований тесты распределяются по уровням: стабильные (NF), слабо нестабильные (SF), нестабильные (F) и сильно нестабильные (VF).
Нестабильный тест, зависящий от ресурсов (resource-affected flaky test, RAFT)
Тест, который начинает падать с другой частотой при нехватке вычислительных ресурсов, таких как процессорное время или память, по сравнению с обычным режимом выполнения.
Тестируемая система (system under test, SUT)
SUT — это объект тестирования, будь то программное обеспечение или аппаратная часть. Это может быть приложение, API, интерфейс или другая система.
Тестируемый код (code under test, CUT)
Программный код, который выполняется и проверяется тестами. Это может быть программа, библиотека, функция или метод.
CUT является частным случаем тестируемой системы (SUT).
Системная нестабильность тестов (systemic flakiness)
Системная нестабильность — это явление, при котором нестабильные тесты образуют группы и падают одновременно в рамках одного и того же прогона набора тестов. Часто причина у них общая — проблемы с сетью или внешними зависимостями.
Тестовые запахи (test smells)
Тестовый запах — это признаки в тестовом коде, которые сигнализируют о возможных проблемах в его структуре или качестве. Они указывают на неудачные решения при написании тестов и на отклонения от лучших практик их организации и взаимодействия.
По мнению ряда исследователей, большинство нестабильных тестов напрямую связано с запахами тестов и может быть исправлено с помощью рефакторинга.
Перевод статьи «Dictionary of Flaky Tests».