Баги и ошибки в игре

Разновидности «игровых» багов

Время на прочтение
6 мин

Количество просмотров 14K

В первой статье мы поговорили о видах тестирования, применяемых в играх, а теперь поговорим о результате, который смущает PMов, вводит в краску разработчиков и так крайне не терпим Product Owner’ами на продакшене — багах. Сегодня я их также классифицирую и покажу вам некоторые из них на примерах.

Думаю многие видели этот баг из Assassins Creed. Причины могут быть разные  - не подгрузился mesh или материал или материал и вовсе неправильный. А также не стоит исключать возможность включения LOD mesh, котороый не установлен

Думаю многие видели этот баг из Assassins Creed. Причины могут быть разные — не подгрузился mesh или материал или материал и вовсе неправильный. А также не стоит исключать возможность включения LOD mesh, котороый не установлен

Было бы странно, если в такой комплексной системе как видео игры не было багов. Они есть, встречаются часто и этот бестиарий здесь крайне разнообразен. Ознакомившись с вышеприведёнными видами тестирования для игр, думаю вы догадываетесь, что и баги в видео играх встречаются далеко не только «404 not found» и «game crashed». Давайте же пробежимся по самым часто встречающимся из них в игровой индустрии!

В категорию Visual багов войдут: любые видимые артефакты (Visible Artefacts), пропущенные текстуры (missing textures), Clipping, Culling, Screen tearing, Z-fighting.

Примеры визуальных багов можете посмотреть ниже:

Visual Artefacts — любые визуальные баги, не подпадающие под другие виды.

Вупс... Что-то пошло не так

Вупс… Что-то пошло не так

Missing Textures — пропущенные/исчезнувшие текстуры. Обычно на их месте стараются ставить «заглушку» в виде яркой текстуры по умолчанию в виде шахматной доски. Это не обязательно, но благодаря такому подходу, пропущенные текстуры видны не вооруженным взглядом.

Пропущенная текстура и хороший пример "шахматки" вместо потерянного файла

Пропущенная текстура и хороший пример «шахматки» вместо потерянного файла

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

Screen Tearing или «разрыв экрана» — это визуальный артефакт, при котором отображается информация из нескольких кадров на одном изображении.

Culling и Clipping — баги, относящиеся к работе рендера и графического пайплайна. Часто —  пересечение двух объектов, при котором один закрывает геометрию другого, скрывая ее от взгляда. Если немного углубиться, то Culling — это отсечение того, что заведомо невидимо. В таком случае игра даже не будет пытаться отрисовать данный сегмент. Culling бывает разным и вот его примеры: rustrum culling — отсечение по пирамиде видимости, backface culling — отсечение «задних» граней, occlusion culling — отсечение граней факту их  перекрытия другой геометрией, depth culling — перекрытие одной геометрии другой, которая уже была нарисована, но на основе depth buffer. А вот когда рисуется достаточно большой полигон и от него отрезается всё то, что заведомо находится за пределами экрана — это уже Clipping.
Также отдельно стоит выделить похожий, но в сути другой баг — проблемы коллизий. В видеоиграх отсечение может быть связано с набором алгоритмов, которые реагируют на взаимодействие двух смежных или перекрывающихся геометрий (collision detection). А для выявления таких багов существуют специальные режимы просмотра (view modes), но об этом я расскажу в следующей статье.

Вот так можно легко "войти" в объект с кривой коллизией (или без неё вовсе)

Вот так можно легко «войти» в объект с кривой коллизией (или без неё вовсе)
Баг такого рода также можно описать термином occlusion, т.е. перекрытие одного объекта другим не так как задумано.
Баг такого рода также можно описать термином occlusion, т.е. перекрытие одного объекта другим не так как задумано.

В рамках Audio bugs группы выделю достаточно базовые, но не менее надоедливые вещи: не возможность проиграть SFX/музыки/диалога, пропуск (тригера) проигрыша, плохое микширование (звук слишком тихий или громкий), искажения (distortions), дропы.

Баги левел дизайна — невидимые стены (invisible walls), пропасти в карте (map holes), застревания (stuck spots) и т.д. Также к багам левел дизайна я бы отнёс баги связанные с нав мешем (Navigation Mesh). Ниже приведу несколько примеров багов левел дизайна:

Invisible Walls (невидимые стены) могут являться как багом, так и фичей. Ранее так ограничивали передвижение персонажа игрока и не давали уйти дальше нужного. Сейчас же стараются не создавать «невидимых препятствий», а ограничивать «проходимость» при помощи левел дизайна, к примеру выставить непроходимую преграду, баррикаду, горы, ворота города и т.п. Показывать игроку, что впереди что-то есть, но при этом использовать невидимые стены для недопуска персонажа в эту зону — признаки плохого левел дизайна. Сейчас так почти не делают и невидимые стены часто могут быть следствием реконструкции уровня: к примеру какую-нибудь модель могли забыть убрать или добавили невидимых элемент в качестве временной заглушки.

Герой не может пройти дальше из-за невидимой стены, однако дорога всё не заканчивается...
Герой не может пройти дальше из-за невидимой стены, однако дорога всё не заканчивается…

Map Holes чаще всего вызваны не плотным прилеганием плоскостей объектов (пол, стены и т.п.). Это места, где пользователь может, незапланированно для разработчиков, попасть за границы игровой зоны. Такие баги часто ещё называют Out of Bounds.

А вот так ваша игра выглядит "изнутри"

А вот так ваша игра выглядит «изнутри»

Баги Navigation Mesh часто связаны с перестройкой уровня или автоматической генерацией сетки. К примеру вы передвинули предметы, однако навигационная сетка осталась старой. Как следствие, ваши NPC могут «идти в стену» или любой другой предмет, который они не смогут обойти и встрянут там (один из случаев Stuck Points).

Здесь Nav Mesh проходит сквозь объекты в красном круге

Здесь Nav Mesh проходит сквозь объекты в красном круге

Ошибки искусственного интеллекта (AI): NPC не двигаются, застряли, не следуют за игроком, предполагаемое взаимодействие с предметами не работает, застревание, NPC делают то, что не задумано изначально и т.п.

Раз уж у нас есть и часть движка, отвечающая за физику, то было бы странно, если бы и багов с физикой не было. Тут может быть почти что угодно: левитирующие объекты, нереалистичная физика, ускорение свыше нормы, а также взмывание предметов » в космос» из-за сложения векторов при обработке контактов. Баги такого рода вы могли видеть в мемах самых разных игр, например GTA 5 или, из актуалочки, Cyberpunk 2077. Хороший разбор многих багов из Cyberpunk 2077, включая только что описанные, можно посмотреть тут.

Плотва, что ты делаешь???

Плотва, что ты делаешь???
Летающие машины в Cyberpunk 2077 - не редкость
Летающие машины в Cyberpunk 2077 — не редкость

Баги стабильности и перформанса включают в себя фризы, краши, чёрные экраны, невозможность загрузить уровень, видимая для пользователя подгрузка хай поли моделей или вообще каких-либо объектов, просадка FPS, дооооооооолгая загрузка, а также микрофризы (подгрузки). Сюда же добавлю слишком долгую инсталляцию игры, а также невозможность запустить игру на ПК с минимально допустимыми требованиями.

Извините, я вас не узнал... У вас лицо не прогрузилось

Извините, я вас не узнал… У вас лицо не прогрузилось

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

О проблемах онлайн игр наслышаны все. Плохое соединение, лаги, «невидимые игроки» или же «я зашёл за угол, а меня убили», ошибки подсчёта очков, невозможность реконнекта (если такая фича есть), потеря пакетов во время игры, расхождение в подсчётах информации между клиентом, дедикейтед сервером и бек эндом. Также при плохом соединении некоторые элементы интерфейса можно использовать по несколько раз, что-то может не прогрузиться и «пропасть» и т.д., но, как правило, это UI баги и сильно не влияют на user experience игрока.

С таким количеством повторений, походу это уже не баг, а фича. Пора вводить очереди как в Diablo 2

С таким количеством повторений, походу это уже не баг, а фича. Пора вводить очереди как в Diablo 2

Под баги локализации и compliance, из нетривиального, можно отнести локализацию рекламы, размещение разных материалов на одних и тех же местах в разных регионах и странах (к примеру в этой стране запрещено к показу одно, а в другой — не запрещено или же возрастной ценз, под которые подпадает игра, может не разрешить что-либо показывать в том или ином регионе). Манипуляции с датой на вашем устройстве и сбой работы клиента с сервером я бы тоже отнёс сюда. Ну и «классические» баги локализации и интернационализации никто не отменял. Больше про них и о подходах к их правильному и полному тестированию можете прочитать в моей статье.

Зачем мне текст? И так же понятно куда клацать!

Зачем мне текст? И так же понятно куда клацать!
И люди, и кони, и всё-всё тут намешано
И люди, и кони, и всё-всё тут намешано

Неужто это всё?

Конечно же нет. Это далеко не все разновидности игровых багов, но, пожалуй, самые часто встречаемые. Здесь я не затрагивал баги несоответствия, такие как «элемент записан в blueprints по одному, на back-end — по другому, объект или его атрибуты (ID, описание и т.д.) забыли куда-то добавить и прочее. А не затрагивал их, т.к. это больше не про специфики игр, а в целом неисправности, которые могут быть во многих программах.

А с какими багами вы встречались во время игры или работы над игрой? Буду рад пообщаться с вами на эту и другие релевантные темы в комментариях!

Любая созданная игра — это, по сути, свод определенных правил, по которым работает эта самая игра. А за этими правилами стоят сложные математические вычисления. Плюс внешний дизайн и обратная связь между игроками. Это все образует большой и сложный игровой процесс, в котором могут быть баги. Что такое баги в игре и как их искать — об этом и не только поговорим в сегодняшней статье.

Баги в играх всегда будут, хотя бы потому, что сама игра — это часто труд многих людей, иногда их счет идет на сотни и даже тысячи, поэтому риск, что кто-то допустит малейшую ошибку или просчет, очень высок.

Что такое баги в игре и как они классифицируются

Баги в игре — это то, что довольно часто можно встретить как в новых играх, так и в старых. И чтобы хоть немного ими управлять и контролировать, нужно их классифицировать. 

Как классифицируют игровые баги:

  1. Функциональный баг. Когда не работоспособны различные функции в игре. Например, когда при смене локации или каких-то настроек выбрасывает из игры.

  2. Интерфейсный баг. Это типичные искажении графики, когда элементы располагаются не на своих местах: крыши в небе, камни парят в воздухе, деревья растут корнями вверх, или даже просто текст выходит за дозволенные ему рамки.

  3. Баг локализованной игры. В основном это не переведенный на нужный язык текст или орфографические и/или синтаксические ошибки при переводе слов и т. д.; в общем, проблемы с переводом.

  4. Баг производительности. Игровые проблемы с FPS, не связанные с пользователем, игра работает медленно и лагает на производительных устройствах.

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

  6. Технический баг. Нестабильный интернет, отчего игра плохо работает. Или, например, не хочет запускаться в 3Gсети.

  7. Баг совместимости. К примеру, игра не запускается на совместимых устройствах.

Но это еще не все. Это была классификация по происхождению бага. Еще они классифицируются по приоритетности и скорости их устранения. В этом случае выделяют три категории:

  1. Баги максимального приоритета. Это те, которые требуют немедленного устранения; часто связаны с тем, что пользователи просто не могут играть, и, соответственно, игра не может приносить деньги.

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

  3. Баги низкого приоритета. Это те, которые мало заметны или не заметны всем игрокам. Часто их происхождение связано с какими-то уникальными условиями в игре, и главное они вообще не мешают игровому процессу. В некоторых случаях такие баги не исправляют специально для тех игроков, которые любят находить всякие такие интересные моменты. И от этого только увеличивается популярность игры.

Но и это еще не вся классификация багов. Для лучшей градации их разделяют еще по категориям в зависимости от того, кого или что они затрагивают. Тут получается следующее разделение:

  1. Баги, мешающие пользователям игры. В целом влияют на количество игроков, на различные рейтинги и т. д.

  2. Баги, мешающие бизнесу. В этой категории подобные баги могут не мешать пользователям, но мешать компании зарабатывать деньги на игре.

  3. Баги для разработчиков. Этот не баги, которые не мешают пользователям и в принципе не мешают зарабатывать деньги. Они связаны с тем, что геймплей в игре реализован не так, как изначально задумывался. А как задумывалось знают только разработчики игры.

Что такое баги в игре разобрались, и как их классифицируют тоже. Остается вопрос: а как вообще появляются эти «недостатки» и от чего зависит их количество в проектах?

От чего зависит количество багов в играх

Опытные игроки замечают, что в разных играх разное количество багов. В некоторых их практически нет даже в альфа-версии игры, а в других даже после старта проекта их достаточное количество. Почему так происходит?

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

  1. Безусловно, на первом месте количество багов связано с опытностью команды разработчиков. Потом начинаются косвенные причины.

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

  3. Игровой процесс. Чем сложнее процесс и больше функциональности в игре, тем больше шансов, что при их реализации возникнут ошибки в игре.

  4. Сетевая игра. Если игровой процесс задумывается для сетевой игры, то возникают дополнительные трудности в налаживании взаимодействия между игроками, плюс накладываются возможные баги при балансировке. Поэтому в сетевых играх часто даже после удачного альфа-тестирования и устранения ошибок после запуска игры в сеть появляются неочевидные баги и проблемы с балансом. 

  5. Раннее тестирование. Один баг часто порождает целую цепочку багов, поэтому необходимо качественное тестирование на ранних этапах разработки.

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

  1. Сетевой режим RPG-игр. Огромный игровой мир с просто невероятным количеством возможных сценариев при взаимодействии игроков между собой.

  2. Открытый мир в игре. Поведение игроков практически неограничено, а значит, и возможных сценариев огромное количество. И трудно предугадать, куда занесет очередного игрока его полет творчества.

  3. Графическая мощь игры. Трудно абсолютно без багов адаптировать мощные игры под разные устройства.

Как искать и находить баги в играх

Что такое баги в игре понятно, как они возникают тоже понятно, но как искать их в играх? Ведь баги в играх — это как раз то, что нужно искать и желательно на раннем этапе тестирования, чтобы потом не увязнуть в огромном количестве ошибок или вообще не остаться с поломанной игрой.

Люди даже сделали это одной из профессий — поиск багов. Такая профессия называется QAинженер. Но даже между ними есть разница: кто-то находит больше багов, кто-то меньше. Недавно одна инициативная группа провела опрос среди топовых QAинженеров: что им помогает находить большое количество багов? И получился список из нескольких советов.

Как искать и находить баги в играх, советы:

  1. Фокусировка. Важно фокусироваться именно на процессе поиска, а не на процессе игры. Можно даже держать постоянно в голове мысль: «Здесь должен быть баг!»

  2. Нельзя ничего пропускать. Даже если заметили небольшой баг, нельзя его игнорировать и искать что-то «крупнее». Один малый баг может породить несколько больших, нужно помнить об этом.

  3. Поиск багов нужно ограничить по времени. С длительным временем всегда теряется внимательность. Поэтому, чтобы искать и находить баги в играх, уделять этому занятию нужно не больше 2-х часов за сессию. Потом перерыв, и опять ударяться в поиск.

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

  5. Тестировать разные жанры. Нужно тестировать разные жанры игр или даже разные проекты, чтобы глаз не «замылился» и вы всегда были способны вовремя заметить ошибку.

  6. Общение в QA-сообществах. Не лишним будет послушать других инженеров и их истории. Это всегда дополнительный опыт, а так вы, возможно, найдете себе друга или ментора. И необязательно общаться «вживую» хотя такое взаимодействие больше приветствуется, можно на форумах, блогах, каналах, соцсетях и т. д. Это как постоянно обновлять свою «базу данных» и перенимать опыт других, чтобы в своем случае вовремя находить баги в играх.

  7. Думайте. Как ни странно, но мысли по типу: «Почему игры пишутся с багами?», «Почему баги в играх — это то, что считается нормой?», «Что вообще такое баги в играх?» и т. д. помогают развивать собственную философию в этом вопросе. А со временем вы сами будете находить подтверждение своим мыслям и догадкам. И у вас появятся собственный алгоритм и методики поиска.

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

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

Заключение

Дойдя до конца статьи, вы уже точно понимаете, что такое баги в игре. И точно поняли, что баги в играх — это довольно обширная и интересная тема. А главное это занятие можно сделать своей профессией. И тогда искать и находить баги в играх вы будете уже за деньги, а не только для того, чтобы записать очередное видео для YouTube.

Баг (bug) – это ошибка в коде или в работе программы. Разработчики описывают этим сленговым словом ситуацию, когда что-то работает неправильно, выдает неверный или непредсказуемый результат.

Не любую ошибку можно назвать багом. Этот термин обычно применяют, когда код работает, но некорректно. При этом программа запускается и даже что-то делает, в отличие от, например, синтаксической ошибки, из-за которой код попросту не запустится.

Программу с багами называют забагованной. А отладку кода – дебаггингом, то есть избавлением от багов.

Слово bug в переводе с английского означает «жук». Оно пришло в программирование из сленга инженеров, которые называли багами ошибки при работе электронных схем. А в 1947 году создательница первого компилятора Грейс Хоппер обнаружила в компьютере Mark II бабочку, закоротившую контакты. В журнале происшествий написали: «Первый случай, когда был найден настоящий баг». Так термин закрепился в компьютерной сфере.

Рукописная запись с багом, то есть с жуком
Сейчас записи вместе с бабочкой находятся в Национальном музее американской истории

Где встречаются баги

В разработке и тестировании. Разработчики регулярно сталкиваются с багами: современные программные продукты – сложные, а в языках программирования много неочевидных вещей. Поэтому столкнуться с багами легко. Чаще всего они становятся следствием неверного употребления команд, неправильно реализованных алгоритмов или ошибок в дизайне программы. Часть багов находят еще при разработке, другие – на этапе тестирования или даже после выпуска продукта.

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

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

Баг в игре, лицо во все небо
Известный смешной баг игры Mount and Blade: из-за сбоя в файлах игры вместо неба отображалось огромное лицо

На сайтах. Современные сайты такие гибкие и функциональные благодаря скриптам, написанным на языках программирования. В браузере работает JavaScript, на сервере языки могут быть разными: PHP, Python, Ruby и другие. Баг может возникнуть и на стороне сервера, и в клиентской части сайта – иногда его замечают только после выпуска в продакшн. Есть даже понятие bug bounty: вознаграждение, которое компания выплачивает пользователю, нашедшему критичный баг в информационной безопасности.

Кто сталкивается с багами

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

Если команда разработки пропустила ошибку, ее ищут на следующем этапе – тестировании. Тестировщики пытаются неочевидными способами воспользоваться программой, чтобы отыскать скрытые ошибки. Найденные баги описываются в специальном отчете – он называется баг-репорт. Отчет тестировщики отправляют разработчикам, чтобы те исправили ошибки.

Из-за чего возникают баги

Мы выяснили, что такое баг. Теперь поговорим о причинах, из-за которых они появляются.

  • Первая и наиболее распространенная причина – ошибка разработчика. В IT-среде есть шутка: «Кто же победит: человек, венец природы… или крохотная забытая скобочка?». Маленькие недочеты могут быть очень критичными. Если поставить плюс вместо минуса в простейшем математическом вычислении, то получится совершенно другой результат.
  • Иногда причиной багов становится незнание. Например, разработчик был не в курсе специфического поведения какой-нибудь конструкции в языке, поэтому воспользовался ею не совсем корректно.
  • Часто баги возникают, если в команде программистов нет слаженности. Один не понимает, что написал другой, правит код по своему усмотрению и получает некорректное поведение программы.
  • Наконец, дизайн программы и архитектурные ошибки тоже могут быть причиной багов. Использование неоптимальных алгоритмов, ведущих к сбоям, неверный выбор инструментов – все это может привести к забагованности.
История одного неочевидного бага
Известный в интернете забавный случай показывает, насколько неочевидными бывают баги

Ворнинги, вылеты, исключения: чем отличаются от багов

Ошибки бывают разными, и это не только баги. Вот с чем еще может столкнуться программист.

Предупреждение. Это не совсем ошибка. Это скорее сообщение о риске некорректной работы. Не все предупреждения действительно указывают на что-то опасное. Например, линтеры – программы для написания чистого кода – выдают предупреждения, если человек пишет в «неправильном» стиле. На сленге предупреждения называют ворнингами от английского warning.

Исключение. Exception, или исключение, – это встроенный механизм защиты от ошибок в языках программирования. Программа выдает сообщение, что что-то пошло не так. Условия для исключений пишут сами программисты. Например, ставят защиту на ввод: если пользователь введет строку вместо числа, выбросится исключение.

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

Вылет. Так называют ситуацию, когда программа экстренно завершает работу из-за ошибки. Вылет может сопровождаться сообщением о сбое. Причины разные: начиная от ошибок в коде и заканчивая недостаточной мощностью компьютера, который не справляется с «тяжелой» программой.

Синтаксическая ошибка. Самый простой вариант: разработчик допустил опечатку в синтаксисе и неправильно написал какую-то конструкцию, поэтому программа не собралась. Запись оказалась неизвестна компилятору или интерпретатору. В таком случае среда программирования говорит разработчику о синтаксической ошибке и указывает, где ее искать.

Какими бывают баги

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

  • Опечатка – простейший вариант. Разработчик случайно пишет не то, и вся программа работает неправильно.
  • Бесконечный цикл – ситуация, когда условие для выхода из цикла никогда не наступает, и программа виснет.
  • Переполнение буфера – явление, когда программе перестает хватать памяти, и она начинает пользоваться памятью за пределами выделенного ей количества.
  • Состояние гонки – баг многопоточных приложений, когда несколько потоков одновременно обращаются к одному и тому же элементу и как бы «соревнуются» за доступ. Результат непредсказуем.
  • Количественный баг – ошибка при работе с большим количеством действий, когда при многократных повторениях появляются баги. Например, большое количество данных распределяется неравномерно.
  • Демонстрационный эффект – явление, когда программа работала нормально на этапе написания, но сломалась при демонстрации. Зачастую возникает из-за недостаточного тестирования и невнимательности: разработчик не учел какой-то сценарий.

Баги – это очень плохо?

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

Например, баг в медицинском оборудовании может привести к трагедии. Баг в коде сайта – к утечке огромного бюджета: так было, когда блокчейн-компания Compound случайно отправила своим пользователям почти 90 миллионов долларов. А самый дорогой баг в истории – арифметическое переполнение в программной начинке ракеты-носителя «Арион-5», из-за которого ракета взорвалась в полете.

Конечно, критичность багов зависит от сферы. Если отрасль разработки связана с большими финансами или жизненно важным оборудованием, проверка качества кода в этой отрасли очень жесткая. Ведь цена ошибки очень велика.

Баг на табло, вместо 2000 года показывает 1900
Знаменитая «проблема 2000 года» или Y2K: когда наступил 2000 год, многие компьютеры по всему миру восприняли его как 1900

Как избежать багов

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

  • отлаживают программу еще на этапе создания. Хороший разработчик еще при написании кода учитывает возможные нештатные ситуации в его работе, проверяет его и пишет исключения;
  • тестируют для любых ситуаций, в том числе нетривиальных. В свою очередь тестировщики находят неочевидные ситуации, в которых программа может сломаться, и сообщают о них;
  • проводят юнит-тестирование для каждого компонента. Это отдельное тестирование разных частей кода – юнитов. Оно помогает понять, корректно ли работают эти компоненты – это более глубокий уровень. Ведь ошибка в одном компоненте может вызвать баги во всей программе.

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

Сид Мейер как-то сказал, что «Игра — это последовательность интересных выборов». А значит, перед выпуском игры в массы тестировщик должен убедиться, что все выборы в игре интересные и работают правильно. Да и вообще работают!

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

На каждом из этих этапов встречаются баги и недоработки, потому что игра — это комплексный труд нескольких человек, а когда речь идёт про AAA-проекты — даже не одного десятка людей. И допустить ошибку в одном из компонентов игры довольно легко.

Сегодня мы затронем тему не только локализационного, но и функционального тестирования. А помогать нам будет наш эксперт и руководитель отдела тестирования, Андрей Васильев.

Чтобы успешно заводить баги, нужно их систематизировать. Разделить и властвовать.

Итак, баги в играх можно условно классифицировать по следующим категориям.

Баги, связанные с самой игрой

  • Баги функциональности. Не работают или неправильно работают какие-то функции в игре. Например, при переходе в настройки приложения происходит аварийное завершение работы.
  • Баги интерфейса. Искажается графика, элементы не находятся на своих местах, текст не вписывается в отведенные ему рамки.
  • Баги локализации. Ошибки в текстах, присутствие непереведённых строк. Скажем, вместо перевода выводятся заглушки, вроде «russian_text_001».
  • Баги производительности. Приложение на устройстве работает медленно. Например, во время анимации атаки персонажа FPS заметно «проседает» на устройствах high-end сегмента.
  • Баги логики и баланса. Выставленные настройки баланса и игровой логики не позволяют пройти игру или достигнуть нужных целей. К примеру, персонаж наносит урон в 100 единиц, вместо 150 обещанных в игре.
  • Технические баги. Игра неправильно работает в условиях нестабильного интернет-соединения, как вариант, приложение не может подключиться к серверу в 3G сетях.
  • Баги совместимости. Игра попросту не работает на совместимом устройстве или запускается с критическими ошибками.
Потренируемся: какой это баг по классификациям? Если вы ответили «Функциональный, низкоприоритетный, графический, затрагивающий команду разработки», то ура — вы тестировщик (нет)

Багам присваивается степень критичности: какие-то устраняются в первую очередь, а какие-то можно даже оставить в финальном релизе:

  • максимальный приоритет — баги явно не дают игроку пройти дальше, влияют на способность приложения приносить деньги;
  • средний приоритет — баги заметны пользователям, но не влияют на прогресс игрока или на заработок приложения;
  • низкий приоритет — баги практически незаметны игрокам, очень редко воспроизводятся или только в очень ограниченных условиях, не мешают прогрессу и заработку.
Иногда разработчики специально оставляют низкоприоритетные баги в игре — для вирусного эффекта. В конце концов, это ведь уморительно, а игры должны развлекать, так почему бы и да?

Баги различают по затрагиваемой стороне. То есть кому они будут больше всего мешать использовать продукт:

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

От чего зависит число багов в игре

Действительно, от чего? Почему в одних играх их просто огромное количество на альфа-тестах (привет, No Man’s Sky), а в других — практически нет? Всё довольно очевидно.

  1. В первую очередь это зависит от опытности команды разработки.
  2. На втором месте стоит техническая сложность проекта. Шансы появления багов прямо пропорциональны количеству кода и числу используемых библиотек.
  3. На третьем месте — количество возможностей в игре и разнообразие игрового процесса в целом.
  4. Серьёзная статья — это сетевой режим и пути взаимодействия игроков друг с другом. Для сетевого режима разработчики зачастую даже в играх, уже прошедших тестирование на этапе производства, запускают закрытые тестирования для настройки баланса и поиска неочевидных багов.
  5. Ну и конечно, прямая зависимость от эффективности тестирования именно на раннем этапе разработки. Дело в том, что чем больше багов будет найдено как можно раньше, тем меньше шансов, что эти баги позже приведут к появлению новых.
Двери не нужны

Привязка выявляемого количества багов к жанрам

В группе риска:

  • RPG с сетевым режимом. Большой мир, масса сценариев взаимодействия игроков друг с другом;
  • Игры с открытым миром. Очень много возможностей поведения игрока, которые надо тщательно тестировать;
  • Любые игры с мощной графической составляющей. Практически невозможно одинаково оптимизировать игру под все устройства, если речь не о консольных тайтлах.
Хороший пример того, как игроки испытывают игру на прочность. Skyrim в этом смысле рекордсмен

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

  • игры в жанре match-3. Здесь игрок ограничен только игровым полем и комбинациями фишек, бонусов и количеством игровых механик;
  • игры в жанре hidden objects (поиск предметов), в которых, как правило, свобода игрока ограничена;
  • файтинги;
  • казуальные игры, действие которых происходит на одном экране — тайм-менеджеры, кликеры, shoot’em up и т.д.
COD WWII за принципиально новый эко-транспорт

Такова классификация багов с нашей точки зрения. В ходе написания материала мы нашли интересное видео с выступлением Дмитрия Химиона про «Тестирование игровой механики в компьютерных играх». Он утверждает, что есть ещё одна классификация ошибок в игре.

Ошибки дизайна уровней

Появляются точки на локации вне досягаемости игрока. Застревания в текстурах, кстати, относят сюда же. И надо справедливости ради заметить, что застреваем мы вовсе не в текстуре, а в геометрической модели, потому как текстура — это картинка. Значит, левел дизайнер где-то ошибся и наделал лишних порогов и ступенек, а нога героя застряла и, пытаясь подчиниться законам физики, начинает вытворять невообразимое

Ошибки обратной связи

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

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

Ошибки игрового баланса

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

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

Знаменитая BFG 9000, несмотря на безумную мощь, является сбалансированным оружием — боеприпас на неё найти непросто

А с какими багами сталкивались вы? Присылайте нам в комментарии — похохочем, что ли.

Если вдруг вы разработчик и хотите, чтобы подобных ошибок в вашем проекте было поменьше, пишите нам на [email protected] — мы придумаем что-нибудь вместе.

И вообще, доверяйте свои игры профессиональным тестировщикам, да поменьше багов вам в готовых продуктах: далеко не все из них станут легендарными, вроде знаменитого «geddan».

Достаточно часто у игроков возникает резонный вопрос к разработчикам: откуда вообще берутся баги, если существуют ПТС, отделы QA и прочие инструменты, направленные на «отлов» ошибок.

Чем сложнее система, тем больше шансов на появление ошибок, особенно, когда в систему превносятся изменения, считают разработчики. На примере онлайн шутера Warface они рассказали о том, как появляются баги и что лучше всего подходит для их отлова.

Почему баги вообще существуют?

Все, кто знаком с кодированием понимает простую связь: чем сложнее система, тем больше шансов на появление ошибок, особенно, когда в систему привносятся изменения. Аналогичную связь можно увидеть и в игре: Warface в течение нескольких лет превратилась в супер-сложную систему, в которой каждый компонент тесно связан с остальными.  Получается, что даже небольшие изменения могут привести к неисправности в других системах или областях. Баги неизбежны в любой игре, поиск и исправление — это основная часть работы разработки игр. Пока игра существует и развивается, баги будут появляться вновь и вновь.  

Что влияет на скорость устранения багов?

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

Например, ошибка, которая не позволяет починить оружие будет критической: такое  игровое обновление определенно не установят на главный сервер. А даже если ошибку  не выявят на этапе тестирования, ее оперативно исправят раньше других.

Серьезные или общие ошибки — это такой тип ошибок, который возникает у 1 из 20 игроков. Они не влияют на большинство игроков и не приводят к более серьезным проблемам. Исправление подобных ошибок заложено в месячный план. В эту категорию входит множество багов и ошибок, которые сложно починить, поскольку часто они привязаны к конкретным областям в игре. Порой требуется несколько последовательных фиксов для решения проблемы, и все это может занять несколько месяцев.

Баги с низким приоритетом, как правило, связаны с плохой анимацией, что не влияет на игровые процессы. Это специфические текстуры и визуальные баги. Словом, это все, что связано с косметическими и эстетическими вопросами и никоим образом не влияет на ядро игры и основные игровые функции. Такого рода ошибки возникают часто, и поскольку их проще и быстрее чинить, они появляются в каждом багфиксе.

Если QA тестировщики не могут воспроизвести проблему, то процесс становится немного сложнее, поскольку нам нужно будет собирать информацию от игроков. Обычных описаний «я не наношу урон», «я телепортировался», «я не могу присоединиться к матчу» недостаточно для разработчиков, здесь требуется конкретная техническая информация: видео, скриншоты и логи игрового клиента. Все это требует тщательного изучения, именно поэтому такого рода репорты очень важны. Как только удалось определить источник проблемы, мы начинаем ее исправлять. Этот процесс может занять некоторое время, поскольку разработчик сталкивается с несколькими проблемами сразу, и каждый баг или проблема может влиять на несколько областей сразу.  

Как так получается, что баги с ПТС все же переходят на основной сервер?

ПТС – это последний этап перед релизом игрового обновления. На этом этапе очень важно найти критические ошибки (если такие вообще есть), которые не были выявлены в ходе внутреннего тестирования. Каждый ПТС работает по строгому графику, и каждое промедление ведет к отсрочке других обновлений. Чем дольше игровое обновление остается на ПТС, тем меньше возможность того, что обновление выйдет в установленное время.  

Если ошибка не критическая и не влияет на большинство игроков, обновлению дают зеленый свет, и каждый новый баг фиксируется в последующих обновлениях. Хотя тут все еще есть исключения: некоторые проблемы могут быть менее вредоносными, но более неприятными или даже раздражающими. Если есть способы это исправить, то, скорее всего, такую проблему исправят до выхода обновления.

Почему некоторые ошибки и вовсе не возникают на ПТС?

Это достаточно сложный вопрос и одного ответа тут не может быть. Прежде всего, ПТС во многом отличается от других способов, простейший из которых — рабочая нагрузка сервера, которая становится причиной множества проблем в игре. Во-вторых, если ошибка непостоянная, то это означает, что она вызвана особыми условиями, которых нет у большинства игроков. Часто сложно найти то, что возникает в редких случаях на ПТС. В-третьих, баг может появляться в игровых режимах, которыми игроки не часто пользуются. Лучший пример – это изменения в оружии. Обновление обычно содержит 2 новых вида оружия, в то время как остальные пушки получают различные изменения в характеристиках. Очевидно, что большинство игроков рванет тестировать новое оружие, в то время как старое останется без внимания. Это один из возможных способов упустить ошибку.

Все это ведет к простейшему выводу: если вы направились на ПТС, пожалуйста, помните, что значит «Публичный Тестовый Сервер». Ваша цель не только получить удовольствие от игры, но и проверить различные функции, отмеченные в логах и чтобы найти баги. Пожалуйста, сообщайте нам, если находите ошибки в игре, мы очень тщательно проверяем все репорты пользователей на ПТС.

У вас есть тестировщики? Почему постоянные игроки должны прилагать усилия для поиска ошибок?

Да, у нас есть два QA департамента, один относится к разработке, другой работает непосредственно с отделом локализации. Все новые игровые версии, выпущенные отделом разработки, проходят тестирование. Тем не менее, важно отметить, что массовое тестирование и внутреннее тестирование – это два совершенно разных процесса. Некоторые ошибки сложно воспроизвести, поэтому не стоит исключать возможности того, что их не обнаружат при тестировании. Другие сложности могут возникнуть только при выкатывании новой версии «на лайф», поскольку многие баги невозможно воссоздать без «реальных» действий в «реальной» среде – на игровом сервере.

Вне зависимости от того, насколько тщательно все было проверено, невозможно избавиться от всех багов, поскольку нам дано бесконечное число потенциальных комбинаций, и проверка их может занять не только недели, но и целые месяцы, мощные технические ресурсы и целый QA отдел. Чтобы устранить максимальное количество багов перед релизом, мы создали ПТС серверы.

Как обрабатываются сообщения об ошибках?

Безусловно, все запросы обрабатываются и передаются в отделы разработки и QA. Все запросы подобного характера обрабатываются специалистами команды поддержки. Начиная с этого момента, специалисты службы поддержки проверяют текущую базу данных известных багов, и если подобная проблема до этого встречалась и новой информации не получено, то репорт закрывают соответствующим ответом. Если же баг новый, и получена дополнительная информация, ее потом запрашивают у игрока. После этого собранные репорты добавляют в общую базу, с которой и работают QA и разработчики.

Как вы можете заметить, все баг репорты обрабатываются командой поддержки пользователей и достигают команды разработки.     

Понравилась статья? Поделить с друзьями:
  • Баги и ошибки в гта 5 канал романа
  • Баг и ошибка в тестировании
  • Баг bug ошибка в программе
  • Бавария реал мадрид ошибки судьи
  • Бабушке стало лучше выпив лекарство ошибка