- Что такое баг
- Что такое дефект
- Дефекты и баги в тестировании
- Типы багов
- Типы дефектов
- Известные примеры багов и дефектов
- Разница между дефектом и багом
«Вряд ли найдется программист, тестировщик или любой другой ИТ-специалист, который не слышал бы терминов «баг» и «дефект». Однако многие ли из них знают разницу между багом и дефектом? Вы можете предположить, что оба термина означают почти одно и то же. Но это неверно. Далее мы рассмотрим, что такое дефекты и баги, чем они отличаются друг от друга и как влияют на процесс разработки.
Что такое баг
Баг — это ошибка в коде, которую допускает разработчик на этапе написания кода. Баг может быть синтаксической или логической ошибкой в коде, которая приведет к неправильным результатам или вообще «поломает» приложение. Баг — это термин, обычно используемый в течение жизненного цикла разработки программного обеспечения. Например, когда тестировщик обнаруживает проблему в приложении, он сообщает о ней разработчику как о баге.
О баге нужно сообщать в баг-трекере, то есть инструменте отслеживания багов, типа GitHub или Jira. Когда баг-репорт, или сообщение о баге — получено, команда должна обратить внимание на баг. Поэтому команды разработчиков проводят так называемый триаж, или разбор багов, один раз после раунда тестирования, или еженедельно. Во время таких проверок релевантные члены команд собираются вместе и просматривают список багов, чтобы определить их приоритетность.
Если баг возник на этапе разработки, иногда он может быть не обнаружен тестировщиками на этом этапе или во время раундов тестирования. Часто баги обнаруживают конечные пользователи уже после выпуска продукта на рынок.
Разработчики создают баги случайно. Причин возникновения багов может быть много, например, неполное понимание разработчиком того, как должно работать приложение, или несоблюдение им лучших практик кодирования. В зависимости от природы бага, он может приводить к самым разным результатам, начиная от неправильных результатов и заканчивая отказами всей системы.
Что такое дефект
Большинство людей считают, что любой дефект — это баг или что баги и дефекты — одно и то же. Это не так. Дефект — это отклонение от ожидаемого поведения в программном продукте. Дефект — более широкий термин, который охватывает любой вид багов. Дефекты могут возникнуть во время разработки, или проявиться позже.
Дефекты могут быть вызваны просчетами в планировании и проектировании программного обеспечения, устаревшей документацией по продукту, или проблемами с удобством использования (юзабилити). Функция, которая не работает в соответствии с требованиями и спецификациями клиентов, может являться дефектом. Очень важно выявлять и устранять дефекты, чтобы убедиться, что продукт работает в соответствии с требованиями и спецификациями. Однако следует помнить, что если в программном продукте есть дефект, это еще не значит, что он является багом.
Рассмотрим пример из жизни, чтобы понять ключевое различие между багом и дефектом.
Представьте, что вы используете приложение для онлайн-банкинга. Когда вы переходите к проверке истории транзакций, вы видите, что последняя запись о транзакции почему-то дублируется. Такое явление можно отнести к багам. Но если в приложении отсутствует кнопка «Назад», которая возвращает пользователя на главную страницу со страницы истории транзакций, это можно считать дефектом — несоответствием требованиям пользователей.
Еще пример: программный продукт был выпущен с обновлением существующей функции. Однако команда разработчиков документации не внесла соответствующие изменения в документацию по продукту. Когда пользователь пытается использовать обновленную функцию и обнаруживает, что документация не обновлена, он может связаться с продуктовой командой, используя свою учетную запись в службе поддержки, или другой канал, например Slack. Этот тип недостатков документации относится к категории дефектов.
Дефекты и баги в тестировании
Если вы работаете тестировщиком, вы сталкиваетесь с различными типами багов. Когда вы сообщаете о баге, вы должны очень хорошо понимать, что именно он делает (или не делает). Например, сообщая о баге, вы должны четко указать, как его воспроизвести, какой эффект он вызывает и каков уровень серьезности бага. В зависимости от природы бага разработчики определят, какой из них следует устранить в первую очередь.
Независимо от того, являетесь ли вы тестировщиком или разработчиком, когда вы сообщаете о баге в трекер, обязательно указывайте следующую информацию, которая облегчает разработчикам анализ и воспроизведение бага за минимальное время:
- Название, кратко объясняющее суть бага
- Описание бага
- Идентификатор бага (ID)
- Шаги по воспроизведению
- Текущий статус, например Открыт, Назначен, Закрыт, Устранен, Дубликат, Повторно открыт
- Ожидаемые результаты
- Фактические результаты
- Данные об окружении, например ОС, браузер, версия Java и т.п.
- Прикрепления, например скриншот, журнал ошибок или запись экрана
- Кто зарепортил (то есть вы)
- Серьезность
- Приоритет
Следующий важный момент — поддержание жизненного цикла бага. Как только тестировщик или разработчик сообщает о баге, он переходит в статус «Открыт». Как только он будет назначена разработчику для устранения, он перейдет в состояние «Назначен для устранения» или «В работе». После того как разработчик завершит исправление бага, он изменит его статус жизненного цикла на «Устранен». Затем тестировщик повторно протестирует баг, чтобы убедиться, что он действительно был устранен. Если баг действительно устранен и это подтверждено, тестировщик добавит метку «Подтвержден тестировщиком» и закроет баг, переведя его в статус “Закрыт”.
Однако если баг все еще проявляется и приложение не работает как положено, тестировщик может прикрепить отметку «Отклонен тестировщиком», снова открыть баг и перевести его в состояние «Повторно открыт». Кроме того, если о каком-то баге уже сообщалось ранее, его можно перевести в состояние «Дубликат». Кроме того, если разработчик не может воспроизвести баг по шагам по воспроизведению, он может перевести его в состояние «Не удается воспроизвести».
В своем жизненном цикле баг может получать такие статусы:
- Открыт
- Назначен для устранения
- Исправлен
- Закрыт
- Повторно открыт
- Дубликат
- Невозможно воспроизвести
Типы багов
Ниже перечислены некоторые распространенные типы багов, которые можно встретить при тестировании программного продукта.
- Системный сбой: Когда вы запускаете программу, она аварийно завершается или зависает, не выдавая сообщения о баге.
- Бесконечный цикл: Если в коде неуместно использован бесконечный цикл, это приведет к тому, что программа будет занимать огромный объем памяти, что приведет к ее аварийному закрытию.
- Утечка памяти: Это происходит, когда программа не освобождает выделенную ей память. Таким образом, вся система может быть затронута.
- Баги безопасности: Если валидации ввода не проведены должным образом, хакеры могут получить доступ к конфиденциальным данным и изменить их.
Некоторые распространенные типы дефектов и примеры будут рассмотрены в следующем разделе.
Типы дефектов
Рассмотрим некоторые из распространенных типов дефектов, которые могут возникнуть в процессе разработки. Вы можете столкнуться с этими типами дефектов в своей работе, связанной с разработкой и тестированием. И, возможно, вам будет полезно определить дефект по его поведению и предпринять действия для их устранения.
Дефекты синтаксиса
Дефекты синтаксиса возникают, когда в коде допущена ошибка, в результате чего код не может быть скомпилирован или выполнен. Например, отсутствие точек с запятой или запятых, неправильное объявление переменных или несовпадение количества скобок могут привести к дефектам синтаксиса.
Логические дефекты
Логические дефекты возникают, когда программный продукт ведет себя некорректно или выдает неожиданные результаты из-за неправильно реализованной логики в коде. Подобные дефекты могут приводить к неправильным вычислениям, принятию неверных решений, некорректным условиям или некорректной обработке исключений.
В качестве примера приведем интернет-магазин, в котором пользователь может получить скидку 10% на общую сумму счета. Но из-за бага, допущенного разработчиком, скидка будет применена только к одному товару, а не к общему счету.
Дефекты производительности
Дефекты производительности можно определить как проблемы, связанные с эффективностью программного продукта или использованием ресурсов. Эти дефекты могут вызывать такие проблемы, как ухудшение времени отклика и чрезмерное использование памяти и процессора. Из-за низкой производительности программное обеспечение не может справиться с возросшей нагрузкой или действиями пользователей в пиковые моменты.
В качестве примера возьмем веб-приложение, которое позволяет пользователям входить в систему и загружать документы. Когда большое количество пользователей одновременно пытаются войти в приложение и загрузить документы, это может привести к замедлению работы приложения и зависанию интерфейса, а в конечном итоге — к сбою приложения из-за перегрузки процессора.
Дефекты многопоточности
Дефекты многопоточности возникают, когда различные компоненты программы плохо работают вместе при их одновременном выполнении. Это может привести к таким проблемам, как конуцренция за ресурсы, когда несколько потоков конкурируют друг с другом и из-за этого выдают неверные результаты; взаимные блокировки, когда потоки зависают в ожидании действий друг друга; или взаимные влияния потоков. Все это приводит к тому, что программное обеспечение будет вести себя неправильно, выдавать неверную информацию или ухудшает стабильность системы.
В качестве примера возьмем систему онлайн-бронирования мест в кинотеатре. Если логика бронирования не синхронизирована, это приведет к повторе бронирования или неправильному распределению мест.
Дефекты интерфейса
Это дефекты, возникающие при взаимодействии пользователя и программы. Дефект может заключаться в сложности интерфейса или его неудобстве. Дефекты интерфейса затрудняют работу пользователя. Например, неприятный дизайн, сложная навигация, нереагирующие кнопки и битые ссылки.
Известные примеры багов и дефектов
Известные баги и дефекты, которые остались в истории IT.
- Y2K Bug: Дефект в старых компьютерных системах, до 2000 года год записывался только двумя последними цифрами, из-за чего компьютеры понимали 2000-й год как 1900-й, что привело к многочисленным проблемам и сбоям.
- Heartbleed Bug: Баг в OpenSSL, который позволял злоумышленникам получать конфиденциальную информацию.
- Therac-25 Radiation Therapy Machine: Баг в системе управления медицинским прибором облучения в Бразилии. Причинил большой вред пациентам из-за высокой радиации.
Приведенные выше примеры помогают понять, чем грозят ненайденные баги и дефекты, подвергая огромному риску репутацию и финансы компании-создателя программного продукта.
Вы должны понимать, что клиентам не нужны неисправные программные продукты, которые не работают в соответствии с их требованиями. Если продукт не соответствует их ожиданиям, они быстро найдут другой.
При этом следует помнить, что любой программный продукт содержит баги и дефекты. Невозможно найти абсолютно все баги и дефекты в продукте и устранить их. Баг и дефект в программном продукте — это нормально. Именно поэтому семь принципов тестирования гласят, что исчерпывающее тестирование невозможно, а полное отсутствие багов — заблуждение. Важно исправлять баги и дефекты как можно скорее, потому что чем дольше они остаются неисправленными, тем выше вероятность полномасштабного сбоя.
Разница между дефектом и багом
Теперь разберемся, какие основные характеристики отличают дефект от бага.
Баг | Дефект |
Баг является грубой ошибкой в коде или непреднамеренной ошибкой программиста во время написания кода | Дефект является отклонением от требований. Может возникнуть даже после этапа написания кода. |
Баг может быть найден QA-командой, Dev-командой (разработчиками), или конечными пользователями | Дефекты могут быть найдены командой разработчиков или пользователями |
Причины возникновения багов: Ошибки разработчиков Ошибки в логике программы Избыточность кода Нехватка опыта у разработчиков | Причины возникновения дефектов: Ошибки разработчиков Некорректные требования Неполные требования Неполная документация |
Баги могут провоцировать аномальное поведение приложения или аварийное завершение | Дефекты препятствуют внедрению нужной функциональности и портят впечатления пользователей |
Баги рассматриваются как внутренние проблемы в программе | Дефекты рассматриваются как внешние проблемы, влияющие на взаимодействие пользователей с программой |
Помимо вышеупомянутых пунктов, существует еще множество характеристик, которые показывают разницу между дефектом и багом.
Иногда непонятно, как отличить дефект от бага. Здесь я поделюсь своим личным опытом, чтобы вы лучше это поняли. Когда я работала над проектом в качестве тестировщицы, я тестировала систему управления заданиями для студентов; в ней была функция, которая устанавливала сроки сдачи каждого загруженного документа с заданием. Я обнаружила, что существует проблема с датой сдачи — система показывала дату сдачи на два месяца раньше даты загрузки. Это можно было расценить как баг, однако после уточнения у студентов мы определили это как дефект, поскольку оказалось, что это студенты просили установить дату сдачи.
Заключение
Различие между дефектом и багом имеет большое значение для тестирования, поскольку они являются ключевыми индикаторами потенциальных проблем в продукте. Команды разработчиков могут повысить надежность, точность, производительность и удобство использования своих продуктов путем выявления и устранения багов и дефектов с помощью непрерывного ручного и автоматизированного тестирования.
Отслеживание багов в трекере и их устранение гарантирует, что программное обеспечение соответствует установленным стандартам и не имеет серьезных недостатков — и это должно быть гарантировано до того, как ПО будет отправлено конечным пользователям.»
Дополнительно:
Понятия Error, Defect, Fault, Bug и Failure