Всем привет! Меня зовут Александр, я Head of QA в Авито. Я расскажу, как мы разработали и внедрили собственную композитную метрику качества, которую назвали Quality Score.
Перед нами стояла не самая простая задача — научиться определять текущий уровень качества в Авито и в динамике понимать становится ли оно лучше или хуже. Для этого нужно было упорядочить множество метрик и продумать критерии оценки.
Кроме этого мы хотели сделать универсальную систему для всех подразделений компании. Чтобы она была объективной и помогала находить «проблемные зоны», это должна быть целая структура из разных показателей качества, в не просто одно число. Вот, что у нас получилось.

Что подразумевается под словом «качество»
Для начала разберемся, что именно мы оцениваем. Качество можно разделить на две области. Внутреннее качество — это архитектура приложения, чистота кода, качество процессов разработки и тестирования, процент покрытия кода тестами. Внешнее качество выражается в знакомых всем аспектах: функциональность, надёжность, производительность и так далее.
Как выбирали самые важные метрики для оценки
За годы работы в Авито накопилось множество метрик, которые отражают качество работы. Кроме этого каждую функциональность разрабатывает самостоятельная команда. Стандартизировать все процессы, связанные с QA, в них пока что невозможно, но мы все равно постарались найти универсальное решение.
На вход в задачу у меня было куча разных показателей, например:
-
количество заводимых багов;
-
обращения в службу поддержки;
-
время деградаций каждого микросервиса;
-
процент крэшей на мобильных приложениях;
-
распределение тестовой модели по пирамиде тестирования и так далее.
Основной задачей было понять насколько Авито выглядит качественным для конечных пользователей. Человеку будет абсолютно всё равно, какой процент покрытия юнит-тестами back-end сервиса, если он не может посмотреть номер телефона или написать продавцу. По этой причине в первую очередь я отмёл все метрики, связанные с внутренним качеством.
Метрик оценки внешнего качества тоже было много, но мы сократили список до нескольких самых, на наш взгляд, важных. Показатель подходил нам, если сотрудники уже используют его в ежедневной работе и понимают, из чего он складывается. В итоге в списке осталось три пункта: время деградации серьезных инцидентов, баги, которые репортят пользователи в саппорт и процент crash-free. Ниже поговорим про каждый из них подробнее.
Какие метрики попали в систему оценки
Баги, про которые пишут в поддержку
В Авито постоянно появляются новые функции и из-за высокой скорости разработки бывают релизы с незначительными ошибками. Главное, чтобы команда починила их как можно раньше.
Кроме того, баги бывают разные. Пользователи могли не заметить ошибку, но ответственный QA, проверявший сложные пересечения граничных значений, добавил её в бэклог. Такие ошибки для нас, конечно, интересны, но не являются приоритетными.
Поэтому в скоуп метрики внесли именно те баги, которые действительно раздражают пользователей. Они попадают в заявки для техподдержки и в целом ведут к снижению уровня воспринимаемого качества продукта.
Но мы помним, что команды разные и количество выпускаемых фичей зависит от их специфики, поэтому использовать абсолютные показатели в штуках багов на продакшене было нельзя. Одна команда могла выкатывать микро-релизы улучшений каждый спринт, а другая пилила весь квартал большое обновление и выпускала его только в следующем отчетном периоде.
Чтобы отвязаться от абсолютных значений, мы решили взять соблюдение SLA на время реакции и исправления багов. У нас принята шкала приоритета багов P0-P4, где P0 — самый высокий.
Время реакции на баг — время, за которое команда проанализировала масштаб проблемы, возможно предоставила временное решение для пользователей и оповестила саппорт о сроках исправления. SLA на время реакции мы считаем для всех багов, поступающих от саппорта. До того, как команда проанализировала баг, мы не может сказать, какой у него приоритет — P0 или P4. Так же для каждого приоритета выставлены свои SLA на время исправления.
Физический смысл этой метрики в том, что команда обязуется исправить баг за установленный срок. Для оценки качества мы считаем процент ошибок, которые не были исправлены за нужное время.
Crash-free users
Для мобильных приложений у нас есть целевые показатели по crash-free на уровне всей компании. Для того чтобы контролировать уровень крэшей мы разработали механику Crash Budget.
На самом деле она заслуживает отдельной статьи, поэтому здесь я опишу кратко. Crash Budget — это допустимый процент крэшей для конкретной команды, появляющийся в их коде. Если команда выходит за рамки своего крэш-бюджета, это ещё не значит, что мы не достигаем своих целей по crash-free на уровне всего приложения. Но вот если эта команда очень долго превышает бюджет, то срабатывает теория разбитых окон: другие подразделения снижают планку по качеству и в приложении начинают накапливаться крэши. В этом случае общее качество в рамках всего приложения падает и целевые показатели в опасности. Для метрики качества мы выбрали количество дней за месяц, когда команда превышала свой бюджет на крэши.
Время инцидентов
Если пользователь заходит на сайт и получает 500 ошибку — всё пропало. В инциденте нам важно время его устранения и у нас есть отдельный процесс работы с ними. Если инцидент зарегистрирован нашими системами и оценен как critical или major, то мы учитываем его в нашей композитной метрике качества.
Как оценивали уровень качества с помощью выбранных метрик
Для большей точности метрики, отвечающие за crash-free и баги, о которых сообщают в техподдержку, мы разделили на подкатегории:
-
Время инцидента
-
% багов всех приоритетов, на которые команда отреагировала в установленные SLA
-
% багов приоритета P0-P2, которые команда пофиксила в установленные SLA
-
Количество дней, когда команда не превышала свой Crash Budget по iOS
-
Количество дней, когда команда не превышала свой Crash Budget по Android
Далее мы задали определённые трешхолды для каждой из метрик и сказали, что за каждую область можно получить максимум 1 балл. Если всё плохо, то это 0 баллов, за промежуточное состояние выдаем 0,5 балла. Например, если на 60% багов команда отреагировала вовремя, то мы выдаем ей 0,5 балла. Все баллы по пяти метрикам мы складываем и получаем финальный Quality Score. В максимуме можно набрать 5 баллов.
Рассмотрим подсчет на конкретных примерах:
Команда 1 за июль:
-
Не имела крупных инцидентов за месяц => 1 балл
-
Процент реакций в рамках SLA на новые баги был 90% => 1 балл
-
Имеет 25% просроченных багов по SLA на фикс => 0,5 балла
-
Не превышала количество дней по Crash Budget iOS => 1 балл
-
Не превышала количество дней по Crash Budget Android => 1 балл
Итого Quality Score Команды 1 — 4,5 /5
Команда 2 за июль:
-
Имела один крупный инцидент длинной больше 15 минут => 0 балла
-
Процент реакций в рамках SLA на новые баги был 90% => 1 балл
-
Имеет 50% просроченных багов по SLA на фикс => 0 балла
-
Не превышала количество дней по Crash Budget iOS => 1 балл
-
Не превышала количество дней по Crash Budget Android => 1 балл
Итого Quality Score Команды 2 — 3 /5
Как тестировали и корректировали систему
Для обкатки я и команда QA Center of Excellence провел масштабное исследование. Мы построили аналитику и посчитали Quality Score для всех команд разработки Технического департамента Авито. На основе полученных результатов определили анти-топ команд с самым низким баллом в Quality Score.
Затем в эти отстающие команды «высадили» QA-экспертов, чтобы помочь им повысить качество и провалидировать те данные, которые нам показывает аналитика. Вот какие результаты мы получили:
Отсеяли метрику видимых для пользователя ошибок в приложениях и подкорректировали систему оценки. Эта метрика изначально была в нашем списке, но мы поняли, что видимые ошибки в приложениях неправильно адресовывать на команды. Они недостаточно хорошо отражают реальное положение дел и растут при серьезных деградациях, поэтому эти ошибки вместе с метрикой по времени инцидентов минусуют Quality Score два раза за один и тот же инцидент. Также метрика содержала такие ошибки как «Отсутствие интернета». Команды физически не могли повлиять на них и в целом это скорее нормальное поведение системы.
Отсюда появляется правило, что нужно выбирать только те метрики, на которые команда может влиять самостоятельно. Например, настроить оповещение в рабочие каналы мессенджера о появлении новых ошибок от пользователей или крэшей.
Когда вы вводите новую абстракцию, а Quality Score — это абстрактная сущность, то одна из важнейших задач — нужно чтобы в неё поверили. Для этого вы должны хорошо проверить качество данных. А после нужно внедрить систему во всей компании и сделать ее привычным инструментом для работы.
Как мы внедрили систему в работу всей компании
После тестирования Quality Score мы начали популяризировать систему во всех командах Авито. Мы рассказывали про неё из каждого утюга, делали анонсы в общие чаты, воркшопы и презентации для коллег.
Недостаточно просто создать, провалидировать и рассказать про метрику, важно её регулярно отслеживать и ставить по ней цели. Мы добавили в операционные ревью руководителей Технического Департамента отчёты и отсмотр метрики, чтобы следить за ее развитием. Некоторые руководители взяли годовые цели, чтобы поддерживать Quality Score в их командах на должном уровне. Так же систему использует наш кластер Quality для того, чтобы понять на чем фокусировать своё внимание.
Что в итоге
-
Для каждой компании наполнение Quality Score будет разным, в зависимости от внутренних процессов и текущих фокусов;
-
Физический смысл метрики — улучшить внешнее качество, которое видно пользователям;
-
Метрики внутри Quality Score должны быть «экшенабл» — команда должна точно понимать, что нужно сделать, чтобы повлиять на показатель. В противном случае получится просто шейминг сотрудников без возможности изменить ситуацию. Вместе с созданием метрики качества обязательно должна быть ее валидация в реальных условиях;
-
Недостаточно просто создать метрику, вокруг неё нужно построить регулярный процесс ревью и улучшения.
Предыдущая статья: Как мониторить здоровье вашей Gradle-сборки
ссылка на оригинал статьи https://habr.com/ru/articles/767728/
Добавить комментарий