Метрики на службе у QA |
22.02.2019 00:00 |
Кирилл Раткин, тестировщик Контур.Экстерна, расскажет как повысить эффективность тестирования с их помощью и не уйти в крайности. Как часто вам приходится что-либо оценивать? Наверное, каждый день. Хорошая или плохая сегодня погода, сносно ли ведет себя кот, нравится ли вам эта футболка. На работе вы оцениваете свои задачи и результаты: это сделано хорошо, а тут можно было лучше. Такие оценки часто основаны на субъективном ощущении. Но эти оценки не могут повысить эффективность процессов, и нужна более высокая детализация. Тогда на помощь приходят метрики. Как вы можете охарактеризовать свои рабочие процессы и практики? Они хорошие? Плохие? Насколько? Почему вы так решили? Не удержусь и процитирую слова лорда Кельвина: «Если вы можете измерить то, о чем говорите, и выразить это в цифрах – значит, вы что-то об этом предмете знаете. Но если вы не можете выразить это количественно, ваши знания крайне ограничены и неудовлетворительны». Никакой процесс не может считаться зрелым пока не станет прозрачным и управляемым. Я видел две крайности:
Истина, как всегда, посередине. Чтобы к ней приблизиться, нужно понимать принципиальную вещь: метрики — это не дань моде и не панацея от плохих процессов. Метрики — это просто инструмент, и результаты работы этого инструмента — не самоцель, а лишь какое-то основание для дальнейших шагов. Метрики нужны для:
Правильно запилить метрики непросто. Во-первых, нужно четко расписать причинно-следственные связи, выявить все факторы, влияющие на процесс, и раздать им свои веса. Во-вторых, технически реализовать сам сбор. Метрики автотестовСобираясь вводить метрики в автотесты, вы должны понимать, для чего это вам. Специфика наших автотестов:
Мы тратили много сил на на поддержку стабильности и скорости, даже назначили дежурного по автотестам. Когда мы перестали понимать насколько все хорошо или плохо, сколько ресурсов мы тратим на это, мы начали окутывать нашу систему метриками. Метрики дежурного по автотестам Мы начали обращать внимание не только на стабильность теста и время прогона, но и на:
Плюс, учли ряд специфичных для нас особенностей:
Поиск испорченных виртуальных машин Большинство команд могут собирать метрики с помощью CI. Нам этого не хватило — слишком хитро мы настроили свои категории и запускалки. Пришлось написать небольшую оберточку, которая в TearDown’е отправляла в БД мету билда со всеми показателями. Наши цели:
Метрики позволили понять по каким показателям мы проседаем. Дальше расставляем веса, ориентиры и вырабатываем порядок достижения цели. Раз в две недели на летучке с дежурным мы:
Эти метрики собираем автоматически каждое утро после ночных прогонов, состоящих из множества повторных запусков тестов. Оценка покрытия автотестамиЕще одной большой задачей является оценка покрытия. Еще ни один вариант расчета этого показателя не устраивал меня полностью. А как покрытие считаете вы? Делитесь в комментариях. Кто-то считает покрытие по написанным вручную кейсам. Здесь есть ряд минусов. Во-первых, это человеческий фактор. Хорошо, если задачей займется грамотный аналитик, который будет опираться на репрезентативную статистику. Но и в этом случае можно что-то пропустить, не учесть. Во-вторых, по мере роста тестируемой системы, такой подход становится слишком дорог в поддержке. Кто-то считает покрытие кода. Но здесь не учитывается с какими параметрами мы вызываем тот или иной метод. Действительно, зайдя в метод, который делит А на В с какими-нибудь «безопасными» аргументами, мы не можем сказать, что метод покрыт и протестирован. А если деление на ноль? А если переполнение? Также не учитывается критичность непокрытого кода, а поэтому неясна мотивация это покрытие увеличивать. Идеальный для нас вариант — считать покрытие популярных пользовательских юзкейсов. Причем считать мы будем состояния системы и атомарные переходы между ними. Главное отличие от первого варианта расчета — отсутствие человеческого фактора. Кейсы будут генериться скриптом. Т.е. переход на определенную страницу или какое-то действие на ней отправляет запрос в наш сервис метрик. Это особенность нашей тестируемой системы, так статистика собирается автоматически. Дальше принцип простой:
Этот алгоритм перезапускается раз в месяц, чтобы актуализировать топ. На все недостающие тесты заводятся задачки в бэклог и разгребаются отдельным потоком. Метрики релизного циклаЕще одним местом применения метрик послужил наш релизный цикл. Не знаю как у вас, но в нашей команде ресурс тестировщиков ограничен. Поэтому готовые к тестированию обновления берем не сразу, а с задержкой. В какой-то момент этот временной лаг стал вызывать дискомфорт, и мы решили оценить ситуацию. Мы стали считать сколько времени задача находится на каждой стадии релизного цикла. Сбор метрик релизного цикла на базе YouTrack Из всего этого мы сумели:
Сейчас у нас соотношение пишущих разработчиков к выпускающим их тестировщикам в районе 3 (± 0.1), комфортным считается 2.5. С учетом проводимой автоматизации релизного цикла мы хотим выйти на соотношение 3.5 и 3. Наша реализация сбора метрик основывалась на редакторе правил внутрикомандного багтрекера. Это YouTrack Workflow. В своей команде вы можете использовать аналогичные возможности ваших трекеров, либо писать велосипеды с веб-хуками. Мы завели для таска приватные поля-счетчики и каждый час инкрементировали значение в них. Учли при этом, что счетчик должен тикать только в рабочие часы и только по будням — такой уж у нас рабочий график. Все по-хитрому! =) Метрики ради метрикТипичным антипаттерном являются «метрики ради метрик». Как я уже отмечал выше, метрики — это лишь инструмент, который помогает количественно оценить, насколько хорошо вы достигаете целей. Допустим, никогда не понимал такую метрику как количество тестов. Нафига? Что вам скажет показатель, что в какой-то команде 12345 тестов? Они хорошо тестируют? Не факт. Их автотестам можно доверять? Вряд ли ребята даже знают что они проверяют. Это показывает эффективность работы автотестера? Возможно, там минусов от поддержки больше, чем какого-либо профита — о какой эффективности речь? На самом деле, под этой метрикой подразумевают покрытие и доверие к вашей тестовой системе. Но, блин, это не одно и то же. Если хотите поговорить о покрытии, то им и оперируйте. Всегда помните, что сбор метрик требует от вас определенных усилий и времени. Цените его и подходите к этой практике с умом! Нам очень интересно, а какие метрики используете вы, а от каких, наоборот, отказались. Пишите в комментариях! |