Программирование • 01 декабря 2022 • 5 мин чтения
Тот ещё жук: как начинающему тестировщику составить хороший баг‑репорт
Баг-репорт — это документ о дефекте. Одни команды не тратят на него много времени, другие — фиксируют каждый баг. Рассказываем, как тестировщику правильно оформить баг-репорт.
- Что такое баг
- Виды багов
- Приоритеты и жизненный цикл бага
- Как выглядит жизненный цикл бага в теории и на примере дефекта в интернет-магазине
- Что такое баг-репорт
- Шаблон баг-репорта
- Как правильно оформить баг-репорт
- Совет эксперта
Что такое баг
Багом (от англ. bug) или дефектом часто называют ошибку в программном коде. Это не совсем ошибка, а скорее несоответствие фактического результата ожидаемому. То, как должна работать программа, описывают в требованиях к разработке. В идеальном мире она будет работать именно так, как её задумали заказчики. Но в реальности можно увидеть не то, что ожидалось.
В стандарте ISTQB для тестировщиков есть несколько похожих на баг терминов, но все они — скорее следствие дефекта. Например, сбой — это ситуация, которую вызвал дефект, а ошибка — действие человека, которое приводит к неправильному результату.
Обычно тестировщики обнаруживают баги до того, как продукт попал к пользователю. Специалисты проводят несколько этапов тестирования или настраивают автоматизированные тесты, применяют техники обеспечения качества разработки, чтобы предотвратить ошибки в коде. Всё это помогает сделать продукт качественным и не допустить серьёзных багов.
Иногда баг все же оказывается в продукте после того, как его выпустили на рынок. Тогда он становится проблемой пользователей и службы технической поддержки. Такие дефекты часто бывают некритичными: опечатка в описании, вёрстка поехала. Для пользователя это неудобно, но в целом не приводит к серьёзным последствиям. Но иногда баги относятся к архитектуре системы или требованиям. Их обнаруживают не сразу, и они могут привести к убыткам для бизнеса. Например, для продукта заложили архитектуру, при которой невозможно писать юнит-тесты. Из-за этого с ростом продукта на тестирование тратят всё больше времени, а разработка становится всё дороже.
Как таблица решений помогает провести все тест-кейсы и ничего не забыть
Виды багов
Когда тестировщик обнаруживает баг, то в первую очередь определяет, к какой части программы он относится. Например, при разработке мобильного приложения для интернет-магазина могут быть следующие баги:
● Визуальный, относится к интерфейсу приложения. Кнопка «Купить» уехала за пределы экрана.
● Функциональный. Не сохраняются данные: пользователь нажимает кнопку «Купить», но ничего не происходит, или может применить одноразовый купон на скидку два раза.
● Дефект UX, влияет на удобство. Чтобы подтвердить мобильный телефон, пользователю приходится несколько раз покидать и возвращаться в мобильное приложение.
● Баг нагрузки. Интернет-магазин должен выдерживать большой наплыв посетителей, например в Чёрную пятницу, поэтому там часто проводят нагрузочное тестирование. Например, искусственно создают ситуацию, когда в один раздел одновременно зашло несколько тысяч пользователей. Если приложение не загружается или зависает — это баг нагрузки.
● Баг производительности. Приложение занимает в памяти смартфона слишком много места, работает медленно и быстро тратит заряд батареи.
● Баг требований, или логический баг. До начала разработки приложения или отдельной «фичи» в требованиях что-то не учли. Например, забыли добавить всплывающее оповещение, что при включённом VPN приложение может работать с ошибками. Программист запрограммировал так, как было в требованиях (или как он их понял). В итоге, приложение работает, как описано в требованиях, но не так, как нужно бизнесу.
Вид бага — это одна из ключевых его характеристик. Когда понятно, к чему относится дефект, с ним проще разобраться. На курсе «Инженер по тестированию» студенты учатся определять виды багов на примере реальных проектов.
Начните карьеру в IT с профессии тестировщика
Спустя 4 месяца обучения в вашем портфолио будет 6 протестированных приложений. Пройдите бесплатную вводную часть курса, чтобы попробовать себя в роли тестировщика.
Приоритеты и жизненный цикл бага
Чем отличается приоритет от серьёзности и как их используют
У бага есть два важных атрибута — приоритет и серьёзность.
Серьёзность показывает, насколько баг влияет на возможность работать в программе. Обычно выделяют 5 уровней серьёзности бага. Самый опасный — блокирующий баг. Например, мобильное приложение перестало загружаться, и пользователь видит пустой экран. Самый безвредный — тривиальный баг. Он не влияет на работу приложения, а многие пользователи его даже не заметят. Это может быть, например, опечатка в разделе меню, куда редко заходят.
Приоритет — это критерий, который показывает, насколько быстро нужно исправить дефект. С точки зрения функционала баг может быть несерьёзный и некритичный, но при этом важный для бизнеса. Обычно выделяют три приоритета:
● высокий — исправить в первую очередь;
● средний — исправить, когда разобрались с первой категорией багов;
● низкий — исправить, когда разобрались с багами других приоритетов.
На проектах редко используют оба атрибута — в основном объединяют приоритет и серьёзность, или выбирают что-то одно. Чаще всего это приоритет — с точки зрения планирования важно понимать, что исправлять в первую очередь, а что может подождать.
В разных проектах названия и количество приоритетов могут отличаться. Например, в этом списке приоритетов бага в Jira самый опасный — блокирующий, а самый безобидный — нулевой
Чтобы тестировщику было легче определять приоритет, в некоторых командах составляют документ, где указано, в каких случаях какой приоритет устанавливается. Но чаще такого документа нет, и понимание приоритетов в команде приходит со временем. Специалисты приходят на встречи, обсуждают задачи, притираются друг к другу и к продукту и понимают, что приоритетно, а что нет.
Тестировщику, который давно на проекте, важно понимать, что приоритетно для конкретного продукта. Для начинающего тестировщика главное — правильно обнаружить и локализовать баг, а с приоритетом поможет более опытный коллега-ментор. Он перепроверяет баги, смотрит, какие тесты провел джун, поддерживает его и постепенно отправляет в свободное плавание.
Как выглядит жизненный цикл бага в теории и на примере дефекта в интернет-магазине
У бага есть нулевая стадия, когда он, как кот Шрёдингера, может быть багом, а может — просто непониманием со стороны пользователя. Тестировщик сталкивается с чем-то непонятным в работе системы и начинает разбираться, что произошло. Это называется локализацией. Её цель — убедиться, что обнаружили именно дефект. Для этого тестировщик смотрит проектную документацию, ставит эксперименты и узнаёт, в каких ситуациях воспроизводится дефект и можно ли его как-то обойти.
В результате локализации может быть два вывода:
● Это не баг, или проблема не на стороне разработчиков. Например, внутренний пользователь чего-то не знает по системе и его нужно обучить. Или у пользователя приложения застряли деньги, а проблема на стороне банка.
● Это баг программы, и его нужно завести в баг-трекинговой системе.
Так выглядит упрощенный жизненный цикл бага, но в реальности всё сложнее. Например, разработчик может вернуть задачу тестировщику, чтобы уточнить, что нужно сделать, а тестировщик — не закрыть задачу, потому что разработчик исправил только часть ошибок в коде
Баг, как и другие задачи проекта, фиксируют в трекинговой системе. В ней на каждом жизненном этапе дефект получает статус. Самая популярная баг-трекинговая система — Jira. В Яндексе используют её аналог — Яндекс Трекер.
Допустим, в приложении магазина обнаружили дефект: долго подгружаются товары в каталог. Это может быть связано с тем, что приложение некорректно интегрируется с базой данных товаров. В итоге в каталоге отображаются товары, которых фактически нет, а тех, что в наличии, пользователь не видит. Вот как может выглядеть путь этого бага в Jira:
● Тестировщик описал, в чём проблема, и присвоил задаче статус — новый баг.
● Задачу в работу берёт аналитик, чтобы уточнить, какие условия закладывали в ТЗ для продукта. Баг получает новый статус — анализ. На проекте может не быть аналитика или задачу не нужно уточнять — тогда её сразу берёт в работу разработчик.
● Аналитик добавил уточнения по задаче и передал разработчику. Новый статус — в разработке.
● Разработчик отдаёт задачу аналитику, если хочет что-то уточнить, а если нет, то передает тестировщику.
● Тестировщик проводит ретест — проверяет, исправили баг или нет. Если проблему решили, он закрывает задачу, если нет — возвращает задачу разработчику. Она снова получит статус «В разработке».
● Отработанную задачу тестировщик передаёт во внедрение. После этого приложение либо обновят сразу, либо подождут до релиза: тогда обновленную функциональность добавят в приложение вместе с другими отработанными задачами.
● Готово. Теперь пользователь видит только актуальные товары.
Если дефект повторится, то баг реинкарнирует: его заводят как новую задачу, и он проходит тот же жизненный цикл.
Пример жизненного цикла бага на реальном проекте
Что такое баг‑репорт
В тестировании баг-репорт — это отчёт об ошибке, который заводится в баг-трекинговой системе.
В разных компаниях подход к оформлению баг-репортов отличается. Например, в маленькой команде это может быть лишней бюрократией. Тестировщикам проще написать разработчикам в чат: «Вася, поправь вот эту штуку, пожалуйста». Но иногда баг-репорты не оформляют, потому что в компании не выстроены процессы — в будущем это может привести к большему количеству дефектов в продукте и убыткам для бизнеса.
Составлять баг-репорты на каждый дефект может быть трудоёмко даже для большой компании. В этом есть смысл, когда нужно собрать метрики, чтобы комплексно смотреть на процессы и вовремя их настраивать, как музыкальный инструмент.
Примеры метрик:
● насколько меньше багов стала делать команда;
● в каких модулях системы больше всего багов;
● какой разработчик стал делать неожиданно много багов — можно выяснить, почему.
Опытные тестировщики советуют искать золотую середину:
● Фиксировать все баги с прода — если они мешают пользователям, то могут быть критичными и для бизнеса.
● Оформлять регрессионные баги — их находят во время подготовки продукта к релизу, и они не относятся к какой-то конкретной задаче. Если такие дефекты не исправить, их могут найти уже пользователи.
● Если в Jira уже есть задача, внутри которой нашли баг — не оформлять его отдельно, а написать в комментарии к этой задаче. Допустим, в приложение интернет-магазина решили добавить новую функцию к Чёрной пятнице — купон на скидку. Когда пользователь его применит, все товары в корзине подешевеют на 20%. Купон должен работать только когда в корзине больше одного товара. Программисты закончили разработку и передали в тестирование. Тестировщик нашёл баг: если удалить из корзины все товары, кроме одного, скидка так и останется — 20%. Такой баг оформляют в виде комментария.
Шаблон баг‑репорта
Документ может отличаться в зависимости от проекта, но есть обязательные поля*, которые везде примерно одинаковые.
Как правильно оформить баг‑репорт
Хороший баг-репорт приходит с опытом. Вот на что нужно обратить внимание джуну:
● Заголовок. Информативный заголовок помогает понять суть проблемы, не читая весь баг-репорт. При этом он не должен быть слишком коротким или длинным.
● Локализация. Найти баг для джуна — радость. Но важно убедиться, что это именно дефект, и понять, в чём он заключается. Иначе разработчикам придётся разбираться с проблемой, которая может быть не на их стороне.
● Вложения. Если баг визуальный или UX (поехала вёрстка, не работает кнопка), то без скриншота или скринкаста не разобраться — важно показать, что видит пользователь.
● Шаги воспроизведения. Бывает, что джун начинает издалека: «Включить компьютер». Или пишет слишком абстрактно: «Заходишь на страницу, товар не отображается». Важно искать золотую середину: описывать те шаги, которые относятся к багу, и так, чтобы другим коллегам было понятно. Например: нажать кнопку «Начать», сканировать любой товар из задачи.
● Взгляд на проблему. Тестировщику важно хотя бы пытаться смотреть на проблему с точки зрения бизнеса. Например, текст не помещается в поле, а как этот баг влияет на бизнес? Ответ на вопрос поможет в будущем определять серьёзность и приоритет бага.
● Фактический и ожидаемый результат. То, как тестировщик заполнит эти поля, влияет на его коммуникацию по задаче с разработчиком. Если проблема описана непонятно, разработчик не сможет сразу за неё взяться, а будет уточнять детали у тестировщика. Например, придёт с вопросами, если увидит в документе, что фактический результат — кнопка не работает, а ожидаемый результат — кнопка работает.
Как не стоит писать баг-репорты. Опытный тестировщик в ответ на такой документ скажет, что баг-репорт описан непонятно: что значит «нельзя сканировать»? В результатах нужно описывать, что происходит, а не то, чего не происходит. Не хватает информации о том, какие материалы нужно приложить к такому багу, скриншоты или скринкасты
Вот как могли бы оформить этот баг более опытные джуны и продвинутые тестировщики.
Баг-репорт от опытного джуна или ленивого мидла
Заголовок: [Инвентаризация] В начатой задаче при попытке сканирования товаров визуально ничего не происходит
Предусловия: Приложение Инвентаризация запущено и активно, открыта невыполненная задача для инвентаризации
Шаги:
1. Нажать кнопку «Начать».
2. Сканировать товар, присутствующий в задаче и еще не отсканированный.
Фактический результат: при попытке сканирования товара визуально ничего не происходит. В логах ошибка <Error…> (приложен лог с ошибкой).
Ожидаемый результат: сканирование проходит успешно, в логах нет ошибок, отсканированный товар записывается в открытую задачу согласно требованиям (ссылка на требования).
Окружение: Apple iPod touch 32 Gb.
Приоритет: критичный.
Баг-репорт от мидла или сеньора
Заголовок: [Инвентаризация] В начатой задаче сканирование товара не записывается в задачу, в логах ошибка <Error…>.
Предусловия: Приложение Инвентаризация запущено и активно, открыта невыполненная задача для инвентаризации.
Шаги:
1. Нажать кнопку «Начать».
2. Сканировать любой товар из задачи.
Фактический результат: при попытке сканирования товара сканер пищит (как и должен), но в задачу сканирование не записывается. В системных логах приложения ошибка <Error…> (приложен кусок лога с ошибкой). В серверных логах ошибка <Error…> (приложен кусок лога с ошибкой).
Ожидаемый результат: сканирование проходит успешно, в логах нет ошибок, отсканированный товар записывается в открытую задачу согласно требованиям (ссылка на требования).
Доп.информация: если отправить запрос о сканировании не с устройства, а через эмулятор, то ошибок не возникает, возвращается корректный ответ (приложены запрос и ответ и логи с эмулятора).
Окружение: Apple iPod touch 32 Gb, версия приложения 1.2.21.3, тестовый стенд INTG.
Приоритет: критичный.
В примерах нет ошибок, но видно, как можно подойти к задаче в зависимости от опыта.
Совет эксперта
Ольга Ермолаева
Самый полезный для тестировщика вопрос — «Что если?». На нём завязана вся локализация. Выдвигайте больше гипотез и проверяйте их с разных сторон.
У начинающих тестировщиков обычно фокус на деталях. Но чтобы прогрессировать, важно идти от частного к целому и видеть картину шире. При составлении баг-репорта подумайте, как дефект влияет на процессы, функциональность и удобство пользователя.
Руководитель направления QA
Тестирование мобильных приложений: инструкция для начинающих
Кто такой инженер по тестированию и как им стать, чтобы начать IT-карьеру
- Серьезность
- Приоритет
- Глобальный приоритет
- Высокий приоритет и низкая серьезность
- Высокая серьезность и низкий приоритет
Для отслеживания багов в программах используются различные инструменты. В крупных компаниях эти инструменты объединяются в общую систему, которой пользуется много сотрудников. И все эти люди должны как-то ориентироваться в срочности работы над багами.
Поэтому баги, внесенные в системы отслеживания (bug-tracking системы), дифференцируются.
Каждый баг имеет атрибуты серьезности (Severity) и приоритета (Priority). На первый взгляд может показаться, что разницы между этими понятиями нет, но она все же есть. Серьезность больше касается технической стороны дела, а приоритет — организационной.
Серьезность (Severity) бага
Severity — это атрибут, характеризующий влияние бага на общую функциональность тестируемого продукта.
Степень серьезности бага больше касается функциональности, поэтому она присваивается тестировщиком. Именно он чаще всего оценивает, насколько конкретная функция может влиять на общую работу тестируемого продукта.
Пример классификации серьезности багов:
- Blocker. Блокирующая ошибка. Она делает невозможной всю последующую работу с программой. Для возобновления работы нужно исправить Blocker.
- Critical. Критическая ошибка. Нарушает работу основного функционала. Баг проявляется постоянно и делает невозможным использование основных функций программы.
- Major. Существенный баг. Затрудняет работу основного функционала или делает невозможным использование дополнительных функций.
- Minor. Незначительный баг. На функционал системы влияет относительно мало, затрудняет использование дополнительных функций. Для обхода этого бага могут быть очевидные пути.
- Trivial. Тривиальный баг. Не влияет на функционал проекта, но ухудшает общее впечатление от работы с продуктом.
Приоритет (Priority) бага
Приоритет — атрибут, определяющий скорость устранения бага.
Приоритет бага сперва определяет инициатор, но в дальнейшем он корректируется менеджером продукта. Именно менеджер имеет общее представление о тестируемой системе и понимает, насколько срочно нужно исправить тот или иной баг.
Виды приоритетов:
- Top. Наивысший приоритет. Назначается экстренным ситуациям, которые очень отрицательно влияют на продукт или даже бизнес компании. Такие баги нужно устранять немедленно.
- High. Высокий приоритет. Назначается багам, которые должны быть устранены в первую очередь.
- Normal. Обычный приоритет, назначается по умолчанию. Эти баги устраняются во вторую очередь, в штатном порядке.
- Low. Низкий приоритет. Назначается багам, не влияющим на функционал. Исправление таких багов происходит в последнюю очередь, если есть время и ресурсы.
Также нужно упомянуть о частоте проявления бага.
Частота (Frequency) — это показатель количества пользователей, которые сталкиваются с ошибкой. Определяется при анализе алгоритмов.
Частота бывает:
- High. Высокая: с багом сталкиваются больше 80% пользователей.
- Medium. Средняя: баг обнаружат от 30% до 80% пользователей.
- Low. Низкая: баг проявляется у 10-30% пользователей.
- Very low. Незначительная: такой баг встретится меньше чем 10% пользователей.
Глобальный приоритет бага (Global Severity)
Для определения глобального приоритета необходимо определить частоту проявления бага. Частота влияет на приоритет, а приоритет и серьезность влияют на глобальный приоритет бага.
Таким образом, для определения глобального приоритета бага нужно:
- Определить серьезность бага.
- Отдельно от серьезности определить приоритет.
- Определить частоту (независимо от серьезности и приоритета).
- Рассчитать влияние частоты на изначально определенный приоритет.
Если частота у бага высокая, приоритет возрастает на одну позицию. Скажем, если изначально приоритет был Normal, но частота высокая, приоритет определяется как High.
Средняя частота бага меняет приоритет только с низкого на обычный.
Низкая или незначительная частота вообще не меняет приоритет бага.
Для определения глобального приоритета можно пользоваться следующей таблицей:
Приоритет/Серьезность | Blocker | Critical | Minor | Trivial |
---|---|---|---|---|
High | Critical | Critical | Minor | Trivial |
Medium | Critical | Critical | Minor | Trivial |
Low | — | — | Trivial | Trivial |
Если глобальный приоритет — Critical, значит, баг нужно непременно исправить. Баги с приоритетом Minor тоже желательно исправить до релиза, хотя некоторое количество таких дефектов может остаться в проекте. Баги с приоритетом Trivial могут вообще не исправляться.
Высокий приоритет и низкая серьезность
Такое сочетание бывает, когда баг на функционал влияет незначительно, но зато на пользовательский опыт влияет очень сильно. Также в эту категорию попадают баги, не влияющие на программу, но требующие исправления.
Вот пара примеров:
- Кнопки перекрывают друг друга. Они кликабельны, но визуальное впечатление портится.
- Логотип компании на главной странице содержит орфографическую ошибку. На функционал это вообще не влияет, но портит пользовательский опыт. Этот баг нужно исправить с высоким приоритетом, несмотря не то, что на продукт он влияет минимально.
Высокая серьезность и низкий приоритет
Такое сочетание бывает у багов, которые возникают в отдельных функциях программы. Эти баги не позволяют пользоваться системой, при этом обойти их невозможно. Но сами функции, содержащие эти дефекты, конечным потребителем используются редко.
Примеры:
- Домашняя страница сайта ужасно выглядит в старых браузерах. Перекрывается текст, не загружается логотип. Это мешает пользоваться продуктом, поэтому серьезность бага высокая. Но так как очень мало пользователей открывают сайт при помощи устаревшего браузера, такой баг получает низкий приоритет.
- Допустим, у нас есть приложение для банкинга. Оно правильно рассчитывает ежедневный, ежемесячный и ежеквартальный отчет, но при расчете годового возникают проблемы. Этот баг имеет высокую степень серьезности. Но если сейчас формирование годовой отчетности не актуально, такой дефект имеет низкий приоритет: его можно исправить в следующем релизе.
Итоги
Приоритет и серьезность багов — ключевые атрибуты, в соответствии с которыми определяется очередность исправления. Если неверно присвоить багу приоритет и серьезность, эффективность исправления ошибки сильно снизится. Это может нанести вред бизнесу и привести к финансовым потерям. Поэтому очень важно, чтобы и тестировщики, и разработчики понимали суть этих терминов и пользовались ими правильно.
- Серьезность
- Приоритет
- Глобальный приоритет
- Высокий приоритет и низкая серьезность
- Высокая серьезность и низкий приоритет
Для отслеживания багов в программах используются различные инструменты. В крупных компаниях эти инструменты объединяются в общую систему, которой пользуется много сотрудников. И все эти люди должны как-то ориентироваться в срочности работы над багами.
Поэтому баги, внесенные в системы отслеживания (bug-tracking системы), дифференцируются.
Каждый баг имеет атрибуты серьезности (Severity) и приоритета (Priority). На первый взгляд может показаться, что разницы между этими понятиями нет, но она все же есть. Серьезность больше касается технической стороны дела, а приоритет — организационной.
Серьезность (Severity) бага
Severity — это атрибут, характеризующий влияние бага на общую функциональность тестируемого продукта.
Степень серьезности бага больше касается функциональности, поэтому она присваивается тестировщиком. Именно он чаще всего оценивает, насколько конкретная функция может влиять на общую работу тестируемого продукта.
Пример классификации серьезности багов:
- Blocker. Блокирующая ошибка. Она делает невозможной всю последующую работу с программой. Для возобновления работы нужно исправить Blocker.
- Critical. Критическая ошибка. Нарушает работу основного функционала. Баг проявляется постоянно и делает невозможным использование основных функций программы.
- Major. Существенный баг. Затрудняет работу основного функционала или делает невозможным использование дополнительных функций.
- Minor. Незначительный баг. На функционал системы влияет относительно мало, затрудняет использование дополнительных функций. Для обхода этого бага могут быть очевидные пути.
- Trivial. Тривиальный баг. Не влияет на функционал проекта, но ухудшает общее впечатление от работы с продуктом.
Приоритет (Priority) бага
Приоритет — атрибут, определяющий скорость устранения бага.
Приоритет бага сперва определяет инициатор, но в дальнейшем он корректируется менеджером продукта. Именно менеджер имеет общее представление о тестируемой системе и понимает, насколько срочно нужно исправить тот или иной баг.
Виды приоритетов:
- Top. Наивысший приоритет. Назначается экстренным ситуациям, которые очень отрицательно влияют на продукт или даже бизнес компании. Такие баги нужно устранять немедленно.
- High. Высокий приоритет. Назначается багам, которые должны быть устранены в первую очередь.
- Normal. Обычный приоритет, назначается по умолчанию. Эти баги устраняются во вторую очередь, в штатном порядке.
- Low. Низкий приоритет. Назначается багам, не влияющим на функционал. Исправление таких багов происходит в последнюю очередь, если есть время и ресурсы.
Также нужно упомянуть о частоте проявления бага.
Частота (Frequency) — это показатель количества пользователей, которые сталкиваются с ошибкой. Определяется при анализе алгоритмов.
Частота бывает:
- High. Высокая: с багом сталкиваются больше 80% пользователей.
- Medium. Средняя: баг обнаружат от 30% до 80% пользователей.
- Low. Низкая: баг проявляется у 10-30% пользователей.
- Very low. Незначительная: такой баг встретится меньше чем 10% пользователей.
Глобальный приоритет бага (Global Severity)
Для определения глобального приоритета необходимо определить частоту проявления бага. Частота влияет на приоритет, а приоритет и серьезность влияют на глобальный приоритет бага.
Таким образом, для определения глобального приоритета бага нужно:
- Определить серьезность бага.
- Отдельно от серьезности определить приоритет.
- Определить частоту (независимо от серьезности и приоритета).
- Рассчитать влияние частоты на изначально определенный приоритет.
Если частота у бага высокая, приоритет возрастает на одну позицию. Скажем, если изначально приоритет был Normal, но частота высокая, приоритет определяется как High.
Средняя частота бага меняет приоритет только с низкого на обычный.
Низкая или незначительная частота вообще не меняет приоритет бага.
Для определения глобального приоритета можно пользоваться следующей таблицей:
Приоритет/Серьезность | Blocker | Critical | Minor | Trivial |
---|---|---|---|---|
High | Critical | Critical | Minor | Trivial |
Medium | Critical | Critical | Minor | Trivial |
Low | — | — | Trivial | Trivial |
Если глобальный приоритет — Critical, значит, баг нужно непременно исправить. Баги с приоритетом Minor тоже желательно исправить до релиза, хотя некоторое количество таких дефектов может остаться в проекте. Баги с приоритетом Trivial могут вообще не исправляться.
Высокий приоритет и низкая серьезность
Такое сочетание бывает, когда баг на функционал влияет незначительно, но зато на пользовательский опыт влияет очень сильно. Также в эту категорию попадают баги, не влияющие на программу, но требующие исправления.
Вот пара примеров:
- Кнопки перекрывают друг друга. Они кликабельны, но визуальное впечатление портится.
- Логотип компании на главной странице содержит орфографическую ошибку. На функционал это вообще не влияет, но портит пользовательский опыт. Этот баг нужно исправить с высоким приоритетом, несмотря не то, что на продукт он влияет минимально.
Высокая серьезность и низкий приоритет
Такое сочетание бывает у багов, которые возникают в отдельных функциях программы. Эти баги не позволяют пользоваться системой, при этом обойти их невозможно. Но сами функции, содержащие эти дефекты, конечным потребителем используются редко.
Примеры:
- Домашняя страница сайта ужасно выглядит в старых браузерах. Перекрывается текст, не загружается логотип. Это мешает пользоваться продуктом, поэтому серьезность бага высокая. Но так как очень мало пользователей открывают сайт при помощи устаревшего браузера, такой баг получает низкий приоритет.
- Допустим, у нас есть приложение для банкинга. Оно правильно рассчитывает ежедневный, ежемесячный и ежеквартальный отчет, но при расчете годового возникают проблемы. Этот баг имеет высокую степень серьезности. Но если сейчас формирование годовой отчетности не актуально, такой дефект имеет низкий приоритет: его можно исправить в следующем релизе.
Итоги
Приоритет и серьезность багов — ключевые атрибуты, в соответствии с которыми определяется очередность исправления. Если неверно присвоить багу приоритет и серьезность, эффективность исправления ошибки сильно снизится. Это может нанести вред бизнесу и привести к финансовым потерям. Поэтому очень важно, чтобы и тестировщики, и разработчики понимали суть этих терминов и пользовались ими правильно.
The severity of the Bug
The severity of the bug or the defect A problem or a Defect’s severity in testing refers to how much of an impact it has on the software program under test. A higher severity rating indicates that the bug/defect has a greater impact on system functionality. The severity level of a bug or defect is generally determined by a Quality Assurance engineer.
What is the meaning of priority?
The order in which a fault should be repaired is referred to as a priority. The higher the priority, the faster the problem should be fixed.
Flaws that render the software system unworkable are prioritized above defects that affect only a tiny portion of the software’s functioning.
Severity Vs Priority — The Main Difference
-
Priority refers to the order in which a developer should address a fault, whereas severity refers to the degree of influence a defect has on the product’s operation.
-
Priority is divided into three categories: low, medium, and high, while severity is divided into five categories: critical, moderate, and severe. There are four types of cosmetic procedures: major, moderate, minor, and cosmetic.
-
Priority has to do with scheduling, whereas severity has to do with functioning or standards.
-
Priority refers to how quickly the fault should be rectified, whereas Severity refers to how important the flaw is to the product’s functionality.
-
The manager/client decides on the priority of problems, whereas the QA engineer determines the severity levels of the faults.
-
Priority is determined by the worth of the business, whereas severity is determined by the functioning.
-
The priority value is subjective and liable to vary over time as the project circumstance changes, whereas the severity value is objective and less likely to alter.
-
Defects with a High Priority and Low Severity status must be corrected immediately but do not harm the application, whereas defects with a High Severity and Low Priority status must be fixed but not immediately.
-
Priority status is determined by client needs, whereas severity is determined by the product’s technical aspects.
Severity Levels
Types of Severity of Bug/Defect may be divided into four categories in software testing −
-
This flaw implies that the process has been completely shut off, and no further action can be taken.
-
Major − This is a significant flaw that causes the system to fail. Certain elements of the system, however, are still operational.
-
Medium − It results in some unfavorable behavior, but the system remains functioning.
-
Low − It won’t create any serious system failures.
Types of Priorities
Priority of bug/defect types may be divided into three categories −
-
Low − The flaw is an annoyance, but it can be repaired once the more important flaw has been addressed.
-
Medium − A flaw should be corrected throughout the usual course of development operations. It will have to wait till a new version is released.
-
High − The problem must be corrected as soon as feasible since it has a significant impact on the system and cannot be utilized until it is fixed.
How to Determine the Seriousness of a Defect?
-
Determine the frequency of occurrence − In some circumstances, the severity of a minor defect might be increased if it occurs frequently in the code. As a result, even if it is a tiny flaw, it is more serious from the user’s perspective.
-
Isolate the flaw − Isolating the problem can assist in determining the impact’s severity.
Difference between Priority and Severity
Priority | Severity |
---|---|
The sequence in which the developer should resolve defects is specified by Defect Priority. | The defect severity of a fault is defined as the influence it has on the product’s operation. |
Priority is divided into three categories.
|
There are five levels of severity.
|
Priority has to do with scheduling. | The term «severity» refers to the degree to which something is functional or adheres to a set of standards. |
The priority of a bug determines how quickly it should be repaired. | The severity of a problem on a product’s functionality is indicated by its severity. |
In consultation with the manager/client, the priority of faults is determined. | The defect’s severity level is determined by the QA engineer. |
The business value determines priority. | The severity of a situation is determined by its functioning. |
Its worth is subjective and might fluctuate over time based on the project’s circumstances. | Its worth is objective and unlikely to fluctuate. |
When a problem has a high priority and low severity, it means it has to be corrected right away but isn’t affecting the application. | When a fault has a high severity and a low priority, it means it has to be corrected, but not right now. |
The priority status is determined by the needs of the consumer. | The product’s technical aspect determines the severity level. |
During UAT, the development team prioritizes faults and fixes them. | During SIT, the development team will prioritize and resolve bugs based on their severity. |
Defect Severity and Priority Examples
Consider the following scenarios: low severity and high priority, and vice versa.
-
A logo problem for any shipping website can be of moderate severity since it will not hinder the website’s performance, but it can also be of high importance because you don’t want any subsequent shipments to proceed with the incorrect logo.
-
A flaw in reservation functionality that is of high severity but of low priority: Similarly, a defect in reservation functionality that is of high severity but of a low priority since it is expected to be released in the following cycle.
Triage of Defects
Defect triage is a technique that attempts to rebalance the process when the test team is faced with a challenge of limited resources. When there are a significant number of defects and a limited number of testers available to check them, defect triage assists in attempting to resolve as many problems as possible based on defect attributes such as severity and priority.
Defect Triage: How to Determine
Priority is typically used as the primary criterion for evaluating a problem in most systems. A good triage method, on the other hand, examines the severity as well.
The steps in the triage procedure are as follows −
-
The team reviews all flaws, even those that were rejected.
-
The substance of the problem, as well as its priority and severity settings, are used to make an initial assessment.
-
Determining the defect’s priority based on the inputs
-
The product manager assigns the defect to the right release.
-
The problem is sent to the appropriate owner/team for further action.
Before choosing a severity level, every tester should examine the following guidelines
The tester evaluates the severity parameter, whereas the product manager or the triage team evaluates the priority parameter. To minimize confusion with the development team, it is critical for a tester to pick the correct severity when prioritizing a fault.
-
Understand the importance and severity of the concepts of priority and severity.
-
Always designate a severity rating to a problem depending on its category, since this will influence its priority.
-
Recognize how a certain situation or Test Case will affect the end-user.
-
It’s important to think about how long it’ll take to correct the fault and how long it’ll take to verify it, based on its complexity.
An example of a high-severity yet the low-priority situation
Some older browsers render a webpage with several faults. The logo will not load, the text will jumble, and the graphics will be overly pixelated. The severity of the problem is significant since it affects both product functionality and user experience. However, because the issue primarily affects outdated browsers, it won’t affect a big number of people. As a result, bug priority is low.
High-severity and high-priority example
On Chrome, a website is evaluated and found to be fully functional. However, while using Firefox, the price page has significant issues. The text that details the rates and matching features contained in each plan, as well as the buy buttons for purchasing plans, have vanished. Anyone using Firefox in this scenario is unable to purchase the merchandise or even learn the details of the goods being sold.
The severity of the defect is high since vital functionality is plainly harmed. Bug priority is high because the malfunctioning functionality obstructs a critical point of the customer experience (actually purchasing the goods).
An example of a low-severity yet the high-priority situation
When examining the operation of a website on Chrome, it is discovered that several buttons are slightly out of place. They can still be readily clicked and accomplish what they were designed to do. As a result, functionality is unaffected, and the severity of the defect is minor. Bug priority is high, though, because out-of-place buttons don’t provide for a pleasant visual representation, and poorly designed websites actively turn off consumers. The problem must be resolved as soon as feasible.
An example of a low-severity, low-priority situation
During the testing of the website, mistakes were discovered in parts of the content, and the font and color did not match the website’s primary design. This is, without a doubt, a bug, but it is by no means a functional issue. As a result, the severity of the defect is minimal. Similarly, it does not require rapid attention, therefore bug priority is low.
The Function of Real-Time Devices
Without understanding the actual nature of the defect, it is currently impossible to assign bug priority and severity. It’s also crucial to understand how often a bug occurs and how it impacts the product.
Running software across actual devices and browsers is the best approach to find all issues. When it comes to website testing, make sure it’s covered by both human and automated testing. Selenium automation testing should be used in conjunction with manual testing to ensure that no defects are missed throughout the Quality Assurance process.
Conclusion
In software engineering, assigning the improper severity to a defect can slow down the STLC process and have a significant impact on the team’s overall performance. As a result, the individual in charge of defect assignment must be exact and accurate.
Начинающие тестировщики могут путать эти параметры, но у них есть существенные отличия. Давайте разберемся в этом подробней.
Для начала рассмотрим каждый атрибут в отдельности.
Серьезность
Серьезность (Severity) — это атрибут, характеризующий влияние дефекта на работоспособность приложения. Проставляется специалистом по тестированию.
Серьезность имеет несколько параметров в зависимости от типа дефекта. Ее степень зависит от того, как она влияет на бизнес-логику (реализацию правил программы).
- S1 – Блокирующая (Blocker). Блокирующая ошибка, приводящая приложение в нерабочее состояние, в результате которого дальнейшая работа с тестируемой системой или ее функциями становится невозможна.
- S2 – Критическая (Critical). Критическая ошибка, неправильно работающая бизнес-логика, проблема, приводящая в нерабочее состояние некоторую часть системы, но есть возможность для работы с тестируемой функцией, используя другие входные точки.
- S3 – Значительная (Major). Значительная ошибка, часть бизнес-логики работает некорректно. Ошибка не критична или есть возможность для работы с тестируемой функцией, используя другие входные точки.
- S4 – Незначительная (Minor). Незначительная ошибка, не нарушающая бизнес-логику тестируемой части приложения, очевидная проблема пользовательского интерфейса.
- S5 – Тривиальная (Trivial). Тривиальная ошибка, не касающаяся бизнес-логики приложения, плохо воспроизводимая проблема, малозаметная по средствам пользовательского интерфейса, проблема сторонних библиотек или сервисов, проблема, не оказывающая никакого влияния на общее качество продукта.
Из описания видно, что с помощью Серьезности мы указываем как найденная ошибка влияет на тестируемое приложение. Если из-за ошибки приложение полностью не работает, то Серьезность высокая. Если найденный дефект мало влияет на функционал и больше относится к визуальной части (например, опечатка в слове), то Серьезность низкая.
Давайте рассмотрим несколько примеров проблем и попробуем правильно определить их Серьезность. Чтобы было понятно, представим, что мы тестируем приложение по заказу такси.
1.Приложение «падает» при попытке найти свободное такси.
Чтобы правильно поставить Серьезность, необходимо определить влияние ошибки на дальнейшую работу функционала. Из названия видно, что после появления ошибки приложение перестает работать. Значит, влияние высокое.
Сразу же отбрасываем Тривиальную и Незначительную Серьезность, так как из их описания понятно, что ошибка не должна сильно влиять на приложение.
У нас остается только три варианта: Значительная, Критическая и Блокирующая серьезности.
Подходит ли нам Значительная Серьезность? Очевидно, что нет. Во-первых, ошибка достаточно критична. Во-вторых, другим способом найти такси мы не можем, т.е. нет возможности работы с тестируемой функцией, используя другие входные точки. Более того, функционал работает не некорректно, а не работает вообще.
Остаются Критическая и Блокирующая серьезности. В нашем случае Блокирующая подходит больше, так как часть функционала не работает и нет других возможностей найти такси. Следовательно, мы выставляем Блокирующую Серьезность.
2. Невозможно указать адрес назначения с помощью “Указать на карте”.
Снова начинаем рассуждать. Тривиальная и Незначительная не подходят, потому что ошибка в какой-то мере нарушают бизнес логику работы приложения. Блокирующую можно не брать, т.к. функционал в целом работает и его можно использовать через другую точку входа, а именно ввести адрес вручную. Остается только два варианта: Критическая и Значительная. Мы уже сказали, что проблема не приводит к полной неработоспособности части функционала. Тем не менее это значительная ошибка, т.к. функционал частично не работает, следовательно остается только вариант Значительная. Его мы и укажем.
Как вы могли понять, Серьезность относится к технической части приложения и указывает на то, как сильно ошибка влияет на работоспособность приложения.
Приоритет
Приоритет отличается от Серьезности тем, что указывает когда необходимо исправить ошибку.
Приоритет (Priority) – это атрибут, указывающий на очередность выполнения задачи или устранения дефекта. Проставляется руководителем или менеджером проекта.
- P1 – Высокий (High) – требуется исправить в первую очередь.
- P2 – Средний (Medium) – требуется исправить во вторую очередь, когда нет дефектов с высоким приоритетом.
- P3 – Низкий (Low) – исправляется в последнюю очередь, когда все дефекты с более высоким приоритетом уже исправлены.
С помощью приоритета менеджер проекта говорит, когда стоит исправить найденную проблему.
На первый взгляд можно подумать, что Приоритет и Серьезность одинаковы, ведь чем серьезней ошибка, тем быстрее её нужно исправить. Но, если глубже рассмотреть эти атрибуты, то можно найти различия.
Например, мы нашли опечатку в слове. Из названия видно, что это ошибка с Незначительной серьезностью и, вроде бы, ее не стоит исправлять в приоритете. Но если это слово находится на главном экране и является частью названия приложения, то, очевидно, что ее необходимо исправить как можно раньше.
Приоритет определяется исходя из масштабности проблем для пользователей и продукта. Для понимая можно использовать матрицу:
Теперь, когда мы разобрались что означает каждый атрибут, давайте посмотрим в чем их различие:
________________________________
Если остались вопросы по определению параметров Серьезность и Приоритет, то задавайте их в комментариях к статье.
________________________________
Предыдущие статьи по оформлению баг-репорта:
Назначение отчета https://sedtest-school.ru/testovaya-dokumentacziya/otchety-o-defektah-naznachenie/
Шаблон отчета об ошибке https://sedtest-school.ru/testovaya-dokumentacziya/otchety-o-defektah-shablon-otcheta-ob-oshibke/
Bug management включает в себя процесс документирования, категоризации, назначения, воспроизведения, исправления и выпуска исправленного кода. Предлагаемые изменения в программном обеспечении — баги, запросы на улучшения и даже целые
релизы
— обычно отслеживаются и управляются с помощью баг-трекинговых систем. Добавленные элементы могут называться дефектами, заявками, проблемами или, в соответствии с парадигмой гибкой разработки, эпиками и сторями (stories and epics). Категории могут быть объективными, субъективными или комбинированными, такими как номер версии, область программного обеспечения, серьезность и приоритет, а также тип проблемы, такой как фича-реквест или баг.
В статье поговорим о процедуре определения приоритетности дефекта (бага) и влияние этой характеристики на:
— приоритизацию работ над проектом в целом;
— проведение и завершение приемо-сдаточных работ;
— завершение проекта и сопутствующие активности.
Замечу сразу, приведенная процедура не является универсальной для практического применения.
На что влияет приоритет бага
Приоритет — это один из ключевых атрибутов бага, который в первую очередь влияет на:
1) Качественный показатель продукта в целом и/или его компонентов. Оперируя нижеприведенными свойствами, возможен сбор необходимых метрик, которые определяют показатели качества продукта на текущей стадии его жизненного цикла:
— количество багов соответствующих приоритетов;
— показатели комплексности/сложности функционала;
— статистика распределения багов по функциональным модулям;
— временные характеристики процесса тестирования (например, для формализации Zero Bug Bounce, Code Freeze etc);
— прочие аналогичные данные.
2) Готовность продукта на текущей стадии разработки. Отталкиваясь от показателей качества продукта (см. пункт выше), могут формализироваться метрики или критерии, определяющие готовность продукта на текущей стадии разработки.
3) Готовность завершения работ по тестированию. Для определения этой метрики нужны показатели качества продукта, в основе которых лежит информация о приоритетности существующих багов.
4) Приоритизацию текущих задач по разработке. В зависимости от профиля текущих багов (их приоритетности и количеству в отношении к существующим ресурсам), необходимо корректировать последовательность задач на ближайшие этапы разработки.
5) Готовность к проведению приемо-сдаточных работ, демонстраций, сдачи проекта в производственную эксплуатацию.
Для разных моделей разработок (аутсорс, продукт, freelance) подходы к определению приоритетности багов будут существенно отличаться, как и степень фактического их влияния на ключевые аспекты разработки, которые перечислены выше. Данное влияние будет рассмотрено далее.
Глобальный приоритет (Global Severity)
Глобальный приоритет (Global Severity) бага определяется 3-мя составляющими:
— Серьезность (Severity) — свойство тестового артефакта, характеризующее влияние артефакта на работоспособность приложения. Является характеристикой, определяемой с точки функциональности.
— Приоритет (Priority)— свойство тестового артефакта, влияющее на очередность выполнения задачи или устранения дефекта. Является характеристикой, определяемой с точки зрения бизнеса.
— Частота (Frequency) — свойство тестового артефакта, характеризующее частоту (%) возникновения при использовании приложения конечными пользователями. Является характеристикой, определяемой с точки зрения пользовательских сценариев использования продукта.
Таким образом, глобальный приоритет определяется на основании значений трёх свойств: globalSeverity = F(Priority, Severity, Frequency).
Далее рассмотрим более подробно данную зависимость и уточним ее.
Принцип определения составляющих свойств
1) Серьезность (Severity)
Определяется QA специалистом, Lead QA или Team Lead после анализа требований, программного продукта и специфики конкретной проблемы:
Blocker — дефект относится к критичной (с точки зрения работоспособности) функциональности или критичным данным. У пользователя нет возможности выполнить целевое действие другими способами.
Примеры:
— Нет возможности залогиниться, зарегистрироваться;
— Нет возможности получить доступ как целевым данным, целевым разделам приложения;
— Происходит краш приложения на конкретном окружении.
Critical — дефект относится к важной (с точки зрения работоспособности) функциональности или важным данным. Пользователь может выполнить целевое действие обходным путем, но он (путь) не очевиден.
Примеры:
— Падения (crash) приложения;
— Исключения (exeptions) в процессе работы с приложением;
— Не работоспособность функционала на одном из доступных пользователю окружениях;
— Несанкционированный доступ к данным/функциональности.
Major — дефект относится к не приоритетной (с точки зрения работоспособности) функциональности или не приоритетным данным. Есть очевидный и простой обходной путь выполнения целевой функциональности.
Примеры:
— Дефекты имеющие вероятностный характер возникновения;
— Исключения (exceptions) не влияющие на результат выполнения целевого действия;
— Проблемы, влияющие на скорость использования приложения и продуктивность целевых действий пользователя;
— Визуальные несоответствия;
— Ошибки важного (например, продающего) контента и/или графической информации.
Trivial — дефект не относится напрямую к функциональности и данным. Нет необходимости в обходных путях для выполнения целевого действия. Не влияет на продуктивность, скорость использования приложения.
Пример:
— Небольшие расхождения верстки с макетами;
— Орфографические ошибки в не приоритетном контенте;
— Несущественые улучшения UI, UX.
В данной методике рассматривается 4-уровневая модель Severity. В зависимости от специфики вашего проекта или процессов, могут быть использованы альтернативные модели. Например, данную модель Severity можно расширить такими уровнями градации, как average (normal) и minor.
2) Приоритет (Priority)
Определяется менеджером (PM/PO) проекта на основании влияния проблемы на бизнес задачи/цели программного продукта:
— Высокий (High): дефект должен быть исправлен как можно скорее, так как он влияет на наиболее критичный с точки зрения бизнеса функционал.
— Средний (Medium): дефект должен быть обязательно исправлен, так как он влияет на важный с точки зрения бизнеса функционал. Однако исправление может быть отложено до ближайших этапов/спринтов разработки.
— Низкий (Low): дефект не обязателен к исправлению, так как он не влияет на важный с точки зрения бизнеса функционал и ее исправление может быть отложено до момента появления ресурсов.
3) Частота (Frequency)
Определяется специалистом по маркетингу или заказчиком проекта на основании анализа поведенческих паттернов конечных пользователей:
— Высокая (High): более 80% конечных пользователей сталкиваются с проблемой.
— Средняя (Medium): менее 80%, но более 30% конечных пользователей сталкиваются с проблемой.
— Низкая (Low): менее 30%, но более 10% конечных пользователей сталкиваются с проблемой.
— Незначительная (Very low): менее 10% конечных пользователей сталкиваются с проблемой.
Алгоритм определения глобального приоритета
Частота (Frequency) проблемы прямым образом влияет на приоритет. Приоритет (Priority) и серьезность (Severity) прямым образом влияют на глобальный приоритет (Global Severity) дефекта: globalSeverity = F(Priority, Severity)
, где Priority = F(BasePriority, Frequency)
. Глобальный приоритет (globalSeverity) определяем по следующему алгоритму:
1. Первоначально изолировано от других факторов определяем серьезность дефекта (Blocker, Critical, Minor, Trivial).
2. Независимо от серьезности, определяем приоритет дефекта (High, Medium, Low).
3. Независимо от серьезности и приоритета, определяем частоту дефекта (High, Medium, Low, Very low).
4. Далее рассчитываем влияние частоты на первоначально определенный приоритет:
Частота | Изменение приоритета |
High | Medium —> High Low —> Medium |
Medium | Low —> Medium |
Low | не изменяется |
Very low | не изменяется |
5. Наконец, рассчитываем глобальный приоритет:
Приоритет/Серьезность | Blocker | Critical | Minor | Trivial |
High | Critical | Critical | Minor | Trivial |
Medium | Critical | Critical | Minor | Trivial |
Low | Trivial | Trivial |
— Critical — обязательно к исправлению. Сдача проекта не возможна с наличием данных дефектов.
— Minor — допустимо в небольшом количестве. Сдача проекта не желательна с наличием данных дефектов, однако возможна с некоторым их наличием.
— Trivial — сдача проекта возможна с наличием данных дефектов.
Процедура определения приемо-сдаточных критериев
Традиционно, в разных методологиях управления проектами существуют понятия Acceptance Criteria и Done Criteria — как для продукта в целом, так и для его отдельных релизов. Работа с баг-репортом как документом, несущим основную информацию о качественных характеристиках программного продукта, именно на конечном этапе итерации (sprint, milestone и т.п) несет особое значение:
— Acceptance Criteria являются основой для написания тестовых сценариев (чеклистов, тест-кейсов, end-to-end сценариев etc);
— Done Criterias активно использует баг-репорты для формирования оценки, характеризующей степень соответствия продукта ранее заявленным требованиям.
В вышеописанной методике приоритизации дефектов приводится основная теоретическая модель. Очевидно, что в явном виде она не пригодна для практического применения, и ее стоит расценивать как основу для построения наиболее подходящего прикладного решения на том или ином проекте.
Основная цель данной модели — показать, что приоритизация багов зависит от достаточно большого количества факторов. И, к примеру, подход в ранжировании потенциальных и существующих проблем в SaaS проекте продуктового формата в области e-commerce должен отличаться от подхода в аутсорсинг-проекте по расширению или поддержке существующего бизнеса клиента. Так, для первого проекта будут существенно больший вес иметь факторы маркетинг-составляющей в приоритизации проблем, нежели для второго проекта.
Статья написана в соавторстве с Юлией Колесник.
Про приоритизацию багов
Уровень сложности
Простой
Время на прочтение
3 мин
Количество просмотров 2.4K
Как правило, все знают про severity и priority, но практически никто не говорит об urgency (срочности).
Например, если есть критичный баг S1 и его не нужно срочно исправлять, то у него может быть более низкий приоритет, к примеру — P2, а менее критичный баг S2, но который нужно исправить срочно — может иметь более высокий приоритет P1.
Формула приоритета
Приоритет — не что иное, как произведение критичности бага на срочность исправления.
Теперь, когда на собеседовании вас спросят, «а чем отличается severity от priority» — можете рассказать про формулу приоритета и urgency.
Кстати говоря, формула приоритета справедлива не только для багов, но и для любых продуктовых или технических задач, только вместо критичности будет использоваться importance (важность).
В Jira, в зависимости от процессов в конкретной команде/компании для задач с типом Bug может устанавливаться как priority так и severity, и автор дефекта должен уметь правильно определять значения. Если с определением критичности у QA-инженеров вопросов возникнуть не должно, то со срочностью исправления не все так просто, поскольку этот показатель, напрямую связан с приоритетами бизнеса, задачами и sprint goals.
Управление приоритетом
Фактически, на срочность исправления может влиять владелец продукта, технический руководитель и вся команда в целом. Наверное, вы сталкивались с ситуацией, когда дефекты, которые были занесены вами, были переоценены product-owner’ом или technical-lead’ером.
Я, как QA-инженер, ответственный за качество, и максимально приближенный к потребностям пользователя хочу, чтобы баги исправлялись быстрее и в больших количествах, но такой подход может не получить поддержку со стороны владельца продукта и бизнеса. И на первый взгляд, если баги не берутся в работу — может показаться, что команда разработки, бизнес и product-owner не заинтересованы в качественном продукте, но это скорее ложное предубеждение, поскольку владелец продукта имеет больше вводных и видит картину в целом.
Если с небольшим количеством багов проблема срочного исправления не стоит остро, то с ростом нужно будет решить какие баги брать в работу в первую очередь, собственно, этот вопрос решает правильная приоритизация.
Дам несколько рекомендаций, которые помогли мне навести порядок в общем беклоге и опишу способы решения типовых проблем, с которыми столкнулся.
Если багов скопилось много — время пройтись по списку и переоценить их
Достаточно сравнить баги между собой и прислушаться к мнению со стороны бизнеса. Еще лучше, проводить переоценку регулярно, совместно с владельцем продукта или техническим руководителем.
Технический спринт
Если багов скопилось слишком много — можно организовать технический спринт, на котором вся команда займётся исправлением багов.
Пирамида приоритизации
Мы знаем, что по-хорошему, в текущий спринт не рекомендуется добавлять новые задачи, но критические дефекты должны исправляться чем быстрее, тем лучше.
Баги с высоким приоритетом P0-P1 могут автоматически добавляться в текущий спринт и браться в работу любым из участников распределенной команды разработки. А баги с более низким приоритетом P2-P4 могут попадать в следующие спринты, пропорционально приоритету. Значение приоритета может означать спринт, в котором баг будет взят в работу.
Пирамида приоритетов показывает как сроки исправления, так и количественное соотношение.
Баг в спринте, но его не исправляют
О зависших багах стоит напомнить команде на стендапе, а если есть риск того, что баг может переехать в следующий спринт, возможно стоит задуматься о корректировке приоритета на более низкий, а при достижении самого низкого приоритета — принять решение о закрытии бага с резолюцией won’t fix. При принятии такого решения стоит вспомнить о Zero Bug Policy, и постараться принимать решение не только в момент зависания дефекта, но и на этапе создания в будущем.
Если есть свободное время и желание, то можно разобраться и исправить баг самостоятельно. Это крутой способ прокачать свои навыки, но такой способ возможен только в кросс функциональных командах. И готовьтесь к пристрастному код-ревью со стороны разработчиков.
Теневые спринты
Я встречался с теневыми спринтами, когда разработчик или группа разработчиков исправляла баги не находящиеся в спринте и передавала на тестирование. Как правило, это было связано с тем, что менее приоритетные баги не могли попасть в спринт, а разработчик, реализуя новый функционал или проводя рефакторинг мог махом исправить несколько багов.
В этом подходе может слегка перегружаться ответственный за тестирование, и могут страдать продуктовые показатели команды, ввиду того, что работа не учитывается в объём стори-поинтов, заложенных в спринт.
Скрытый конфликт интересов
Если продукт находится на раннем этапе развития, а продуктовых задач слишком много, высока вероятность, что product-owner, несмотря на заинтересованность в качестве — будет отдавать предпочтение продуктовым задачам. Здесь нужно соблюсти баланс и обсудить этот момент с командой, чтобы и качество не просело и количество продуктовых задач, доставленных в продакшн было в норме.
Баг-репорт (bug report) — это технический документ, который подробно описывает ошибку в работе программы, приложения или другого ПО. Его составляет тестировщик, чтобы разработчикам было понятно, что работает неправильно, насколько дефект критичен и что нужно исправить.
Баг-репорты — часть рабочего процесса. В них фиксируют наличие ошибки, назначают ответственного за исправление. Если сообщить об ошибке в рабочем чате, о ней скорее всего забудут. Каждый член команды подумает, что ошибку исправит другой, и в итоге она так и останется в коде.
Виды багов
- Функциональные. Возникают, когда фактический результат работы не соответствует ожиданиям: не получается опубликовать комментарий на сайте, добавить товар в корзину или открыть страницу.
- Визуальные. Это случаи, когда приложение выглядит иначе, чем задумано: кнопка накладывается на текст, не отображаются картинки или текст выходит за пределы окна.
- Логические. Баг, при котором что-то работает неправильно с точки зрения логики, — например, когда можно указать несуществующую дату (31 февраля) или поставить дату рождения из будущего (2077 год).
- Дефекты UX. Приложение или программа неудобны в использовании: при просмотре ленты новостей пользователя постоянно отбрасывает к началу, слишком близко расположены кнопки и вместо одной нажимается другая.
- Дефекты безопасности. Случаи, когда из-за ошибки в коде данные пользователей (почты, пароли, фото, информация о платежах) могут быть доступны третьим лицам.
Структура баг-репорта
Поля варьируются в зависимости от правил конкретной компании, но чаще всего каждый документ содержит следующие пункты:
Серьезность и приоритет багов
Серьезность — это показатель влияния бага на работу программы, того, может ли она функционировать без исправления или баг ломает всю систему. Выделяют пять уровней серьезности багов:
- S0 Trivial (Тривиальный) — баг не влияет на работу программы, поэтому для его исправления могут не выделить отдельную задачу, а исправить попутно при исправлении других, похожих ошибок. Например, при заполнении анкеты в поле «Дата рождения» по умолчанию отображается не актуальный год, а 1999-й.
- S1 Minor (Незначительный) — баг почти не нарушает логику процессов, поэтому с ним программа может нормально работать. Например, неудобная навигация в интерфейсе.
- S2 Major (Серьезный) — баг создает неудобства в использовании, но еще не нарушает функционал программы.
- S3 Critical (Критический) — баг мешает приложению выполнять основные функции: калькулятор расходов неправильно считает бюджет или в текстовом редакторе невозможно вводить текст.
- S4 Blocker (Блокирующий) — ситуация, когда программа не работает в принципе: сайт выдает «ошибку 404» или не запускается приложение.
Приоритет — это срочность выполнения задачи. Всего выделяется три уровня приоритетов:
- P1 Высокий — исправляется в первую очередь, так как баг ломает работу приложения.
- P2 Средний — обязательный к исправлению баг после критического.
- P3 Низкий — не требует немедленного решения.
Жизненный цикл бага
Статус бага в репорте определяется его «жизненным циклом», который состоит из четырех основных стадий:
- Открыт (Open) — тестировщик выявил баг и добавил в репорт.
- В работе (In Progress) — о баге сообщили исполнителю, и он занимается исправлением.
- Исправлен (Ready for check) — исполнитель закончил работу по исправлению бага и передал проект на повторную проверку тестировщику.
- Закрыт (Closed) — баг устранен и больше не воспроизводится.
Кроме основных есть еще несколько статусов:
- Отклонен (Rejected) — исправлению бага помешала ошибка в репорте, например неверный алгоритм в пункте «Шаги к воспроизведению».
- Отсрочен (Deferred) — баг признан неприоритетным и исправление переносится.
- Переоткрыт (Reopened) — баг был отсрочен или отклонен, но теперь исполнитель взял его в работу.
Как правильно писать баг-репорт
Баг-репорт относится к технической документации, поэтому он не должен содержать лишних оборотов — только факты, изложенные простым языком.
На что стоит обратить внимание при описании дефекта?
Выявить причину возникновения. Например, если на сайте не получается восстановить пароль, то проблема может быть как в бэкенде, так и во фронтенде. Задача тестировщика — разобраться в ней, так как от этого зависит, кому из разработчиков отдавать баг на исправление.
Провести проверку на разных устройствах. Если проблема есть в десктоп-версии, то она может возникнуть и на мобильных устройствах, поэтому стоит проверить.
Провести проверку в разных версиях ПО. Баг может не воспроизводиться в старой версии ПО, но появится в новой.
Описать несоответствие ожидаемому результату. Чтобы сопоставить то, как работает программа сейчас, с ожидаемым результатом, начинающим специалистам лучше свериться с технической документацией и техническим заданием, где подробно описано, как все работает в идеале.