Разделы портала

Онлайн-тренинги

.
Тестировать игры – это очень трудно!
08.06.2016 23:09

Автор: Джефф Найман (Jeff Nyman)

Оригинал статьи: http://testerstories.com/2013/08/testing-games-is-hard/

Перевод: Ольга Алифанова

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

В свободное время я иногда работаю на игровые компании. Недавно я столкнулся с довольно-таки любопытным багом, тестируя игру Star Wars: The Old Republic. Баг я нашел чисто случайно – я не искал его прицельно, и даже не пытался найти что-то на него похожее. Когда баг был найден, было абсолютно неясно, что же конкретно тут происходит. Правда, знакомая история? Однако тут были свои нюансы.

Если вы не в курсе, то Star Wars: The Old Republic (SWTOR) – это массовая многопользовательская онлайн-игра (MMO), в которой вы создаете себе персонажа и исследуете вселенную Звездных Войн, выполняя квесты. Квесты, как правило, выглядят как видео-врезки, в течение которых ваш персонаж болтает с нейтральными персонажами (NPC). После завершения врезки вы отправляетесь выполнять полученное задание.

Как и в других ММО, вам придется сражаться с группами персонажей ("мобами") и в случае победы вы сможете подобрать "лут", который может содержать экипировку (броню, ботинки, перчатки, шлемы, и так далее) и другие ценности. Некоторые из них – например, броню и оружие – персонаж может надеть на себя. К тому же у вашего персонажа есть компаньон – контролируемый игрой соратник, который сопровождает вас в ваших приключениях и помогает в боях. Компаньона тоже можно одевать, передавая ему найденные на поле боя вещи.

Вот что произошло

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

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

Итак, игра работала и игровая механика была в порядке. Я даже мог продолжать играть – правда, не очень-то результативно, так как я ни черта не видел. Я решил перелогиниться и это решило проблему. Разовый сбой? Возможно. С ММО это случается. Итак, я завершал флэшпойнт и все было в порядке до последней диалоговой врезке, которой флэшпойнт заканчивался. Что бы вы думали? В самом конце врезки я снова поймал этот баг, и снова справился с ним, только вылогиниваясь.

Хьюстон, у нас проблема!

Давайте разберемся, что произошло

Настало время локализации бага, и тут-то и начинается все самое интересное. Я надел "шляпу тестировщика" и стал разбираться.

Может, это известная проблема? Нет. По крайней мере, никто не сообщал о подобной ошибке.

Я начал собирать информацию: я играл классом джедая-консула за Республику и выполнял флэшпойнт, доступный любому игроку Республики. Проблема возникала только с диалоговыми врезками и только в самом конце. Но ограничена ли она только флэшпойнтами? Проявляется ли она только в этом флэшпойнте? Он в игре не единственный. Я проходил "The Esseles", но флэшпойнтов в SWTOR десятки.

Как же мне это тестировать? Очевидно, проверить другой флэшпойнт и пройти квесты вне флэшпойнтов.

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

Хм-хм-хм. Вероятно, что-то произошло во время прохождения флэшпойнта, но что? Что-то случилось с моим персонажем? Это непросто диагностировать, поэтому вначале я предположил нечто более простое – проблему железа. Может, что-то не так с моей видеокартой? Вряд ли, я играю на одной и той же видеокарте месяцами. Может, драйверы не в порядке? Может, NVIDIA в очередной раз автоматически обновилась (все время забываю выключать эти обновления? Нет, с драйверами все отлично и вряд ли проблема в них. К тому же сама игра работала нормально, и застревала только на моментах, когда персонаж должен был перейти из диалоговой врезки назад в игру. Такая специфика вроде бы исключает проблему видеокарты.

Может, дело в ресурсах? Может, я играл слишком долго, и игровые ресурсы (и кэш) переполнены? Это довольно легко проверить (перезапустить игру, компьютер, и т. п.), и нет, проблема все еще воспроизводится.

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

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

Меня осенило идеей, которая могла бы помочь мне понять, в персонаже ли дело. Как и все ММО, SWTOR позволяет объединяться в команды с другими игроками. Я решил проверить, воспроизведется ли баг для всей группы, если я в нее вступлю? Как оказалось, да! Все члены группы поймали тот же баг, но только когда были в одной группе со мной. Следовательно, проблема действительно связана с моим персонажем, но не ограничена им, так как влияет и на других игроков, находящихся со мной в инстансированной зоне.

Я начал размышлять, что происходит во время флэшпойнтов. Как я уже говорил, игрок сражается с мобами, подбирает лут и экипируется. Хммм. Может, я подобрал что-то специфическое, вызывающее баг? Или надел? Внимание на скриншот.


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

В чем же была проблема

Не буду мучить вас дальше – проблема была не в моем персонаже, а в его компаньоне! Смотрим скриншот:


На скриншоте подсвечены перчатки Кайзена Фесса (если вы не поклонник Звездных Войн – возможно, вам будет интересно узнать, что Кайзен принадлежит к ящероподобной расе Трандошан).

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

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

Перчатки назывались "Gamorrean Wraidskin Handgear". Значимо ли это? Воспроизводится ли проблема только на них? Нет, баг продолжал воспроизводиться с перчатками "Echani Wraidskin Handgear". Хм. Может, проблема со всем, что имеет в названии часть "Wraidskin Handgear"? Это довольно распространенная часть описания перчаток. Снова нет, баг воспроизвелся с "Prototype Echani Heavy Handguards"! Круто. Просто супер. Баг воспроизводится вне зависимости от типа перчаток? Нет! Ряд других перчаток прекрасно на Кайзене сидел и никаких багов не вызывал.

У меня оставался еще один вопрос – воспроизводится ли проблема только для джедая-консула? Только ли с Кайзеном в качестве компаньона, или другие компаньоны тоже ей подвержены? Первый вопрос довольно важен, потому что у консула есть две профессии – Ученый и Тень. Компаньоны у обеих профессий одинаковые. Я попробовал сыграть за Тень – проблема воспроизвелась.

То есть баг был именно в Кайзене. Тупые трандошанцы.

Проблема тестирования расширяется

Второй вопрос ("проблема только с Кайзеном, или затрагивает и других компаньонов тоже") был более важным. В SWTOR несколько классов – контрабандист, охотник за головами, ситх-инквизитор, ситх-воин, джедай-рыцарь, джедай-консул, республиканский штурмовик и агент Империи. Восемь классов, и у каждого свои компаньоны (профессии классов тоже различаются, но компаньоны класса не зависят от выбранной им профессии). Тут придется попотеть, чтобы выяснить, распространяется ли проблема на другие классы и других компаньонов. Воспроизведется ли она, к примеру, если любой из компаньонов консула наденет такие перчатки?

И тут же встает следующий вопрос – виноваты ли именно перчатки? Может, другая часть брони тоже вызовет баг? Могут ли его вызвать сапоги? Оружие? Имплант?

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

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

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

Ранее я уже говорил о том, что игры улучшают навыки тестировщика. Я продолжаю верить в это и думаю, что мой кейс демонстрирует сложности эффективного и результативного тестирования в ситуациях, когда нужно рассмотреть множество вариантов. Я настолько верю в то, что игры помогают тестировщикам развиваться, что даже написал игру "Test Quest", которую активно применяю на собеседованиях. Но про это – в другой раз. Удачной игры и успешного тестирования!

Обсудить на форуме