processcareer

QA-метрики которые НЕ работают: список и чем заменить

«У нас в команде QA-метрики». Звучит зрело и научно. Когда смотришь что именно меряют — часто получаешь набор цифр которые либо ни о чём, либо стимулируют плохое поведение. Разбираем что не работает и чем заменить.

❌ Number of bugs found

Кажется логичным: «больше багов = QA полезнее». На практике:

  • Стимулирует разделять один большой баг на 10 маленьких ради метрики.
  • Демотивирует исследовательское тестирование, где результат не предсказуем.
  • Зависит от качества фичи — на стабильной фиче будет 0 багов независимо от QA.

Чем заменить: смотри на escape rate — сколько багов уехало в продакшен (нашли юзеры), а не сколько поймали до.

❌ Test case count

«У нас 5000 тест-кейсов» — звучит впечатляюще. Но:

  • Тест-кейсы copy-paste’ом — раздувают число без увеличения покрытия.
  • Команда тратит время на ведение бесполезного каталога вместо реального тестирования.
  • Метрика стимулирует квантитативный подход, а не качественный.

Чем заменить: code coverage (для автоматизации) + risk coverage (вручную оцениваем покрыли ли high-risk зоны).

❌ Test execution speed

«Прогнали 500 тестов за 5 минут». Если эти 500 тестов проверяют одно и то же — это бесполезно.

Чем заменить: time to feedback — от момента commit до момента когда разработчик знает прошёл ли его код регрессию. Это полезно.

❌ Bugs per developer

Метрика «качества разработчика». Стимулирует:

  • Тихий фикс — разраб исправляет без баг-репорта, чтобы не портить статистику.
  • Конфликт между QA и dev — QA становится «врагом».

Чем заменить: метрика command-уровня, не индивидуальная. И не критичная для оценки people performance.

❌ Defect density (bugs per LOC)

Зависит от того сколько кода. Меньше кода = ниже density, даже если качество то же.

Чем заменить: ничем. Просто не используй.

❌ Test coverage (% of code covered)

Не плохая метрика, но часто фетишизируется. 100% coverage с тестами на getter’ы — это plot vs purpose. Тесты есть, ценности — мало.

Чем заменить: смотреть что покрыто, а не сколько. Hot paths критичной логики — покрыты? Bizness rules — покрыты? Edge cases — покрыты?

Что РЕАЛЬНО работает

Escape rate: сколько багов нашли юзеры за период (баги priority 1-2 в продакшене / общее число фич). Цель — снижение.

MTTR (Mean Time To Resolve): от заведения бага до closed. Показывает скорость команды, не качество.

Time to feedback в CI: от push до зелёного билда. Меньше — лучше.

Flaky test rate: % тестов которые иногда падают без причины. Цель — стабильно 0.

% автоматизированных регресс-кейсов: понимать долю automation vs manual в регрессе.

Customer-reported severity-1 bugs / month: сколько критики приходит от юзеров. Главная метрика реального качества.

Принцип Goodhart

«Когда метрика становится целью, она перестаёт быть хорошей метрикой».

Любая метрика, превращённая в KPI команды — будет gamed. Поэтому метрики должны быть диагностикой, а не целью.

Цель QA — меньше серьёзных багов в проде. Метрика для отслеживания — escape rate. Но не «снизить escape rate до X% к Q3» — это превратится в подсчёт через split bug’ов.

Что делать сейчас

✅ Подумай — какие метрики команда правда отслеживает, и какие из них меняют поведение.

✅ Найди ту что стимулирует gaming — убери из дашборда.

✅ Добавь escape rate если ещё нет.

Подробнее: Goodhart’s law, Ministry of Testing — Metrics.