Плотность дефектов «со звёздочкой»: качество, скорость и объём в одной QA метрике |
19.04.2023 00:00 |
Автор статьи: Глеб Саркисов (Gleb Sarkisov)
Всем привет, меня зовут Глеб! Я — Head of QA в Mayflower. В последние несколько лет мне стали интересны метрики QA — особенно такие, которые позволяют искать проблемы в процессах, вести переговоры с бизнесом, показывать пользу тестирования для проекта и использовать показатели в качестве KPI. За время работы в различных компаниях я видел разные подходы для решения этих задач и среди множества метрик я сконцентрировался на defect density. В результате ее изучения, я кастомизировал ее и запилил свою dd “со звездочкой”. Если вы тоже находитесь в поиске метрики, учитывающей чистоту релизов, их объем и скорость, вам может быть полезна моя статья. По классике, метрика defect density — это доля дефектов, приходящаяся на отдельный модуль в течение итерации или релиза; считается на тысячу строк кода. Идея метрики заключается в том, чтобы определить отношение дефектов в вашем коде к его объему и постепенно уменьшать его. Идея, надо признать, отличная, но нюансы внедрения метрики могут сделать ее достаточно неудобной для использования.
Хочется взять самое лучшее от этой метрики, модифицировав ее для удобства и большей информативности. Если оттолкнуться от идеи, добавить производительность команды, критичность разных дефектов, то можно посчитать defect density ”со звездочкой” — отношение дефектов различных приоритетов на продакшне к фактической пользе, которую донесла команда за спринт. Так можно учесть сразу и чистоту тестирования внутри спринта, и скорость доставки через доставленный объем задач и багфиксов. Такой показатель можно понятно объяснять бизнесу и на него можно подвязываться как на качество релизного процесса — как на уровне отдельной команды, так и на уровне всего продукта. Подсчет метрикиПосчитать плотность дефектов “со звездочкой” можно по формуле: D — плотность дефектов “со звездочкой” d — дефект соответствующего приоритета p1, p2, pn k — коэффициент соответствующего приоритета p1, p2, pn t — тикет (задача/багфикс) соответствующего уровня сложности c1, c2, cn h — коэффициент соответствующего уровня сложности c1, c2, cn Числитель — вес дефектов с продакшна, знаменатель — вес доставленных тикетов. Чем показатель ниже, тем лучше был спринт Дисклеймер: описанное ниже включает подобранные мною коэффициенты, которые работают конкретно в моем случае — я предлагаю каждому из вас опытным путем выбрать подходящие вам веса, количество уровней сложности и тд. Рекомендации по числителюДля того, чтобы не складывать в корзину разные по приоритету дефекты, вводим понятие коэффициента приоритета дефекта:
Как результат, в числителе имеем суммарный вес дефектов с продакшна за спринт — все, что мы не смогли предотвратить в результате тестирования. Рекомендации по знаменателюАналогично можно было бы поступить с задачами и багфиксами, но есть пара моментов. Во-первых, есть риск смешения severity и priority для продуктовых задач под соусом проставления приоритета — и потом, перемножая количество задач определенного приоритета на соответствующий приоритет, оценка слишком сильно будет зависеть от понимания смысла приоритета продактом. Например, часто критическим приоритетом задачи помечают, если их просто нужно сделать как можно быстрее (классическая проблема, когда путают severity и priority). Во-вторых, как я уже упоминал ранее, хочется учитывать и объем затраченных усилий в этой же формуле. Можно отделить один доставленный до продакшна тикет от другого по тому, как много времени потратили на разработку и тестирование — это и есть уровни сложности c в знаменателе. Как пример, задачи, на которые команда тратит максимальное количество времени можно пометить уровнем сложности Extreme, задачи поменьше Huge, Medium и так далее. Как выявить эти уровни сложности?
Note: Вы можете брать и больше разных перцентилей, если хотите еще больше градаций уровней сложности Посчитав перцентили для каждого из 4 спринтов, считаем среднее арифметическое для каждого перцентиля в 4х спринтах. В результате мы выявим границы для каждого из уровней сложности.
Нестрашно, что коэффициенты берутся “от балды” эмпирически: важно, что с их помощью мы получим отранжированные тикеты. Как итог, в знаменателе имеем суммарный вес тикетов, доставленных до продакшна за спринт — вся польза, которую мы доставили для пользователя продукта. Итак, веса для себя определили, показатель рассчитали — давайте разберемся, как это трактовать и что с этим делать. Как работать с метрикойПроцесс работы с метрикой, наверное, покажется кому-то очевидным — надо собирать данные, находить “норму” и делать изменения в процессах, чтобы достичь лучшего показателя. Ниже опишу подробнее каждую часть процесса. Нахождение показателя текущего состояния процесса доставкиДля поиска текущей “нормы” важно собрать какое-то весомое количество значений — анализ хотя бы 10 спринтов вполне подойдет. Разумеется, чем больше спринтов посчитаете, тем будет лучше. При этом, не обязательно ждать 10 спринтов — можно посчитать закрытые спринты (при условии, что вам доступны эти данные и разработчики и QA списывали время в тикеты). Определение границ и фокусаКак только есть хотя бы 10 значений метрики, имеет смысл:
Метрики не работают на вас, пока вы не начинаете на них комититься и менять процессы соответственно. Проведение анализа внутри спринтаОчевидно, максимальный вес для числителя будут составлять дефекты критических приоритетов, а плохая производительность команды (количество залогированных часов в тикетах, доставленных до продакшна из знаменателя) ухудшит показатель. Может быть, в вашем случае будет полезно ввести процесс анализа причин пропуска критических дефектов или устаканить производительность команды через до-найм или стабилизацию отдельных участников. Подход к работе с метрикой будет состоять из формирования гипотезы источника проблемы, изменения процесса и наблюдения за результатами показателя. Нюансы при внедрении метрики
ЗаключениеДля меня в работе с метриками часто было сложно описать четкую взаимосвязь одной стороны процесса с другой. Когда ко мне приходили руководители/менеджеры проектов и говорили, что QA медленно тестируют, я показывал количество багов, которое мы находим до выкатки на прод, и думал, что так понятно объясняю, какой уровень качества мы обеспечиваем. В то же время, мне хотелось самому понимать, насколько стабильна моя команда по релизам, действительно ли мы консистентно доставляем именно столько новых фичей и именно такого качества. Плотность дефектов “со звездочкой” дала мне возможность в одной цифре учесть объем релизов, их чАстоту и чИстоту. Метрика не решит ваши проблемы за вас, но поможет их подсветить и увидеть результаты ваших усилий по исправлению процесса. Несколько слов в напутствие:
|