Теория тестирования
July 14, 2022

Баг и фича. В чем разница? Классификация и жизненный цикл дефектов.

Содержание:

Нет, скажите мне можно одно слово - пофикшено!

Сегодня разберемся в еще одной интересной теме, по которой хорошенько могут пройтись как на собеседовании, так и на работе. Ее незнание не освобождает от ответственности перед коллегами и пользователями. Так что запоминаем.


Начнем с терминологии (определения из ISTQB):

  • Просчет (mistake): См. ошибка;
  • Недочет (fault): См. дефект;
  • Помеха (bug): См. дефект;
  • Дефект (defect): Изъян в компоненте или системе, который может привести компонент или систему к невозможности выполнить требуемую функцию, например неверный оператор или определение данных. Дефект, обнаруженный во время выполнения, может привести к отказам компонента или системы;
  • Отказ (failure): Отклонение компонента или системы от ожидаемого выполнения, эксплуатации или результата.
  • Ошибка (error): Действие человека, которое приводит к неправильному результату;
Тестировщиков или разрабов?

Однако же на практике редко кто используют именно эту терминологию. Как правило, тестировщики в России пользуются следующими терминами:

  • Ошибка (Error) возникает из-за просчета (Mistake) в написании кода разработчиком;
  • Дефект (Defect) это скрытый недостаток в ПО, возникший из-за ошибки в написании кода;
  • Когда дефект (Defect) обнаруживается тестировщиком, он называется багом (Bug);
  • Если тестировщики упустили дефект и его нашел пользователь, то это сбой (Failure);
  • Если программа в итоге не выполняет свою функцию, то это отказ (Fault).

Баг и фича. В чем разница?

Как нам вообще определить, что является багом, а что фичей на живом проекте? С опытом приходит насмотренность и понимание многих вещей. Но как же быть всем неокрепшим юным умам?

Шуточная картинка, которая отлично передает разницу между понятиями

Баги бывают разных видов и градаций серьезности. А приоритеты меняются от проекта к проекту и даже в рамках самих проектов. И если у вас нет четкой инструкции, то значит придется обращать внимание на неявные признаки.

На своей первой работе в компании, которая занималась развитием социальной сети для соседей и УК, мне приходилось чуть ли не постоянно уточнять, действительно ли я нашла баг. Но в этом нет ничего страшного. Запомните одно правило - лучше не бояться и несколько раз спросить, но знать потом наверняка. Чем полагаться на собственные силы и допустить кучу ошибок.
Серьезный тестировщик. December 25, 2020

Часто про баги репортят одной команде, а запросы отправляют в другую. Или баги исправляют в текущем спринте, а фича-реквесты отправляют в бэклог в светлое будущее. И если определение типа запроса сделано неверно, он может потеряться или остаться без внимания. Давайте посмотрим на реальные примеры.

Это баг, если: - работало, но вдруг перестало;

- работает, но неправильно;

– реализация не соответствует описанию и в задаче в явном виде не зафиксированы корректировки;

– нужно изменить название кнопки/страницы/раздела, потому что в них есть опечатка или “Отменить отмену” (классика!);

– опечатки в принципе (легко может иметь разный приоритет в зависимости от целей и задач проекта);

– после сохранения информация не появляется на странице, даже если в консоли 🟢 200 ОК;

Так выглядит Сhrome DevTools

– не все указанные при сохранении поля отображаются на странице, но поля неизменно показываются при редактировании;

– при нажатии на кнопку “УДАЛИТЬ ВООБЩЕ ВСЕ ДАННЫЕ КЛИЕНТА” нет модального окна с подтверждением Да/Нет, да и сделать это может любой пользователь без авторизации, который нашел ссылку;

– по переходу по прямой ссылке на услугу не проверяется какой пользователь сейчас авторизован и таким образом можно посмотреть чужие профили или детали услуг, если подобран валидный id;

– можно c URL’ом заказать услугу другому клиенту или в Elements через DevTools изменить стоимость в корзине;

– информация торчит за границами своего блока или “наслаивается” на другой (ж-ж-ж-жуть, но на некоторых проектах этим можно легко пренебречь);

– страница очень долго открывается, ну о-о-очень долго — секунд 30 на стабильном интернете (взбешённый клиент гарантирован);

– система делает что-то, что она не должна делать согласно изначальной задумке. Например, закрытие аккаунта не только переводит его в статус “Закрыто”, но и возвращает клиенту все деньги, которые он принёс проекту за всё время сотрудничества за уже оказанные услуги (о-о-ой!);

– неудобно пользоваться. Например, чтобы посмотреть детали услуги клиента, нужно зайти на три вкладки вглубь аккаунта, а смотреть нужно 2–3 раза в день. Или неудобно копировать информацию со страницы, а по рабочим вопросам это нужно делать несколько раз в день — это баг интерфейса и он должен быть исправлен.

Это фича-реквест, если:

– нужно изменить название кнопки/страницы/раздела, потому что есть ощущение, что оно не отражает действительности;

– фичу сделали, но после использования видно, что есть простор для существенных улучшений. Например, по услуге не хватает мониторинга или статистических данных по использованию, а за перерасход может взиматься дополнительная плата — клиент точно будет несчастлив в неведении;

– знаете как улучшить ту или иную часть системы, чтобы было удобней. Например, меню необоснованно занимает 30% ширины экрана, а полезная информация ютится на оставшихся 70%;

– пользователь регулярно делает рутинные монотонные действия, которые можно автоматизировать. Например, копировать однотипную информацию с 12 страниц пагинации, когда простая выгрузка бы решила проблему; – изобретаете велосипед из действующих фич продукта, чтобы добиться желаемого результата;

– на странице не хватает какой-то информации или возможности её добавить;

– на странице не хватает фильтров и пагинации, когда информации много и трудно найти нужное или отображение 1000+ элементов существенно сказывается на скорости загрузки страницы;

– пользователь ведёт дополнительную отчетность в блокноте/экселе, когда проблему можно решить выводом ID на странице и несколькими фильтрами.

Хорошо если в команде есть UX/UI дизайнер, а если нет? Тестировщику стоит различать что в дизайне баг, который может привести к печальным последствиям, а что запрос на улучшение, который сделает взаимодействие пользователей с системой более гладким и удобным, но может быть реализован позднее.

Поговорите с Главным По Проекту, узнайте кто ваш пользователь, спросите про критичные для пользователя и бизнеса фичи, запишите что будет “шоу-стоппером” для релиза (кроме очевидных “ничего-не-работает-памагити”), скорректируйте свои проверки в соответствии с этими знаниями и не бойтесь предлагать улучшения.


Классификация дефектов

Дефекты можно классифицировать по-разному. Для организации важно знать классификацию (их много, но сейчас говорим о той, что ниже) и применять ее к проекту. Некоторые дефекты можно отнести к нескольким классам или категориям. Из-за этой проблемы разработчики, тестировщики и сотрудники SQA должны стараться быть максимально последовательными при записи данных о дефектах.

Классы дефектов:

Дефекты требований и спецификаций (Requirements and Specifications Defects):

Начало жизненного цикла ПО важно для обеспечения высокого качества разрабатываемого ПО. Дефекты, введенные на ранних этапах, очень трудно и дорого устранить на более поздних этапах. Поскольку многие документы с требованиями написаны с использованием представления на естественном языке, они могут стать:

- Двусмысленными
- Противоречивыми
- Непонятными
- Избыточными
- Неточными

Некоторые специфические дефекты требований / спецификаций:

  • Дефекты функционального описания: Общее описание того, что делает продукт и как он должен себя вести (входы / выходы), неверно, двусмысленно и / или неполно;
  • Дефекты функций: описываются как отличительные характеристики программного компонента или системы. Дефекты функций связаны с отсутствием, неправильным, неполным или ненужным описанием функций;
  • Дефекты взаимодействия функций: это происходит из-за неправильного описания того, как функции должны взаимодействовать друг с другом;
  • Дефекты описания интерфейсов: это дефекты, которые возникают в описании взаимодействия целевого программного обеспечения с внешним программным обеспечением, оборудованием и пользователями.

Дефекты дизайна. Дефекты дизайна возникают когда неправильно спроектированы:

Системные компоненты
Взаимодействие между компонентами системы
Взаимодействие между компонентами и внешним программным / аппаратным обеспечением или пользователями.

Они включают дефекты в конструкции алгоритмов, управления, логики, элементов данных, описаний интерфейсов модулей и описаний внешнего программного обеспечения / оборудования / пользовательского интерфейса.

К дефектам дизайна относятся:

  • Алгоритмические дефекты и дефекты обработки: это происходит, когда этапы обработки в алгоритме, описанном псевдокодом, неверны;
  • Дефекты управления, логики и последовательности: Дефекты управления возникают, когда логический поток в псевдокоде неверен;
  • Дефекты данных: Они связаны с неправильным дизайном структур данных;
  • Дефекты описания интерфейсов модулей: эти дефекты возникают из-за неправильного или непоследовательного использования типов параметров, неправильного количества параметров или неправильного порядка параметров;
  • Дефекты функционального описания: к дефектам этой категории относятся неправильные, отсутствующие или неясные элементы дизайна;
  • Дефекты описания внешних интерфейсов: они возникают из-за неправильных описаний дизайна интерфейсов с компонентами COTS, внешними программными системами, базами данных и аппаратными устройствами.

Дефекты кода: Дефекты кодирования возникают из-за ошибок при реализации кода. Классы дефектов кодирования аналогичны классам дефектов дизайна. Некоторые дефекты кодирования возникают из-за непонимания конструкций языка программирования и недопонимания с разработчиками.

  • Алгоритмические дефекты и дефекты обработки:
    1. Непроверенные условия overflow and underflow;
    2. Сравнение несоответствующих типов данных;
    3. Преобразование одного типа данных в другой;
    4. Неправильный порядок арифметических операторов;
    5. Неправильное использование или пропуск круглых скобок;
    6. Потеря точности (Precision loss);
    7. Неправильное использование знаков.
  • Дефекты управления, логики и последовательности: этот тип дефектов включает неправильное выражение операторов case, неправильное повторение циклов и пропущенные пути;
  • Типографические дефекты: в основном это синтаксические ошибки, например неправильное написание имени переменной, которые обычно обнаруживаются компилятором, self-reviews, or peer reviews;
  • Дефекты инициализации: этот тип дефектов возникает, когда операторы инициализации пропущены или неверны. Это может произойти из-за недопонимания или отсутствия связи между программистами или программиста и дизайнера, небрежности или непонимания среды программирования;
  • Дефекты потока данных: дефекты потока данных возникают, когда код не следует необходимым условиям потока данных;
  • Дефекты данных: на это указывает неправильная реализация структур данных;
  • Дефекты интерфейса модуля: возникают из-за использования неправильных или несовместимых типов параметров, неправильного количества параметров или неправильного порядка параметров;
  • Дефекты документации кода: когда документация по коду не описывает, что программа на самом деле делает, либо является неполной или двусмысленной;
  • Внешнее оборудование, дефекты программных интерфейсов: эти дефекты возникают из-за проблем, связанных с Системными вызовами, Ссылками на базы данных, Последовательностью ввода / вывода, Использованием памяти, Использованием ресурсов, Обработкой прерываний и исключений, Обменом данными с оборудованием, Протоколами, Форматами, Интерфейсами с файлами сборки, Временными последовательностями.

Дефекты тестирования: Планы тестирования, тестовые наборы, средства тестирования и процедуры тестирования также могут содержать дефекты. Эти дефекты называются дефектами тестирования. Дефекты в планах тестирования лучше всего обнаруживать с помощью методов review.

  • Дефекты тестовой обвязки: Для тестирования программного обеспечения на уровне модулей и интеграции необходимо разработать вспомогательный код. Это называется Test Harness или scaffolding code. Test Harness должен быть тщательно спроектирован, реализован и протестирован, поскольку это рабочий продукт, и этот код можно повторно использовать при разработке новых версий программного обеспечения;
  • Дизайн тестового случая и дефекты процедуры тестирования: сюда входят неправильные, неполные, отсутствующие, несоответствующие тестовые примеры и процедуры тестирования.

В англоязычной Wikipedia описано плюс-минус то же самое.


Жизненный цикл дефекта (Defect/Bug Life Cycle)

Жизненный цикл дефекта - это представление различных состояний дефекта, в которых он пребывает от начального до конечного этапа своего существования. Он может варьироваться от компании к компании и настраиваться под процессы конкретного проекта.

https://www.guru99.com/images/1-2015/012715_0802_BugLifeCycl1.png

Статусы дефекта

  • Новый (New): когда новый дефект регистрируется и публикуется впервые;
  • Назначен (Assigned): после публикации бага тестировщиком руководитель тестировщика утверждает ошибку и передает ее команде разработчиков;
  • Открыт (Open): разработчик начинает анализ и работает над исправлением бага;
  • Исправлен (Fixed): разработчик внес необходимое изменение в код и проверил его;
  • Ожидает повторного тестирования (Pending retest): как только дефект будет исправлен, разработчик предоставляет тестировщику конкретный код для повторного тестирования кода. Поскольку тестирование программного обеспечения остается незавершенным со стороны тестировщиков, ему присваивается статус «ожидает повторного тестирования»;
  • Повторное тестирование (Retest): на этом этапе тестировщик выполняет повторное тестирование кода, чтобы проверить, исправлен ли дефект разработчиком;
  • Проверен (Verified): тестировщик повторно тестирует баг после его исправления разработчиком. Если баг исправлен, то присваивается статус «проверено»;
  • Переоткрыт (Reopen): если баг сохраняется даже после того, как разработчик исправил баг, тестировщик меняет статус на «повторно открыт». И снова баг проходит жизненный цикл.
  • Закрыт (Closed): если баг больше не существует, тестировщик присваивает статус «Закрыто».
  • Дубль (Duplicate): если дефект повторяется дважды или дефект соответствует той же концепции ошибки, статус изменяется на «дублировать».
  • Отклонен (Rejected): если разработчик считает, что дефект не является таковым, он меняет статус на «отклонен»;
  • Отложен (Deferred): если текущий баг не является приоритетным и ожидается, что он будет исправлен ​​в следующем выпуске, таким багам присваивается статус «Отложено»;
  • Не является багом (Not a bug): если это не влияет на функциональность приложения, то багу присваивается статус «Не является багом».
https://www.guru99.com/images/defectcyclechart.png

Статусы могут различаться в зависимости от того, какой баг-трекинговой системой вы пользуетесь.


Утечка дефектов и релиз бага (Bug Leakage & Bug Release)

Утечка бага (Bug Leakage): возникает когда пропускается баг в билде, который вышел в Production. Если баг был обнаружен конечным пользователем или заказчиком, мы называем это утечкой ошибок.

Выпуск бага (Bug release): выпуск программного обеспечения в Production с некоторыми известными багами. Эти известные баги следует включить в примечания к выпуску (release notes). Другой вариант - передача программного обеспечения группе тестирования с некоторыми известными багами, серьезность и приоритет которых невысоки. Эти ошибки можно исправить перед выпуском в Production.


В заключение

Если вам нравится мой канал, его атмосфера и наполнение, то вы можете поддержать меня донатом! На вкусную шоколадку и кофе. Сделать это можно нажав на кнопку вверху/внизу статьи или перейдя по ссылке https://teletype.in/@qanote. Есть возможность анонимного доната. Заранее спасибо!

Заметки тестировщика

Источники:

Дефекты и ошибки
Баг или фича? Вот в чём вопрос!
Defect/Bug Life Cycle in Software Testing