Gamedev Владимир Семыкин
4 073

Как в Media Molecule исправляют баги

Об инструментах, методах и решениях

В закладки
Аудио

На GDC 2018 программист Media Molecule (Little Big Planet) Эми Филлипс представила доклад, об инструментах для устранения багов в игре. Она рассказала о том, какую роль в разработке Dreams играют автоматические системы сбора данных, расширения Chrome и так далее, а также раскрыла как в компании построено взаимодействие между специалистами на разных этапах исправления ошибок. Мы выбрали из выступления главное.

Жизненный цикл бага

Этапы жизни бага

Филлипс рассказывает, что в разработке баг проходит несколько этапов своего существования. Первая линия обороны — автоматизированная система распознавания и тестирования багов (Autobot) для выявления ошибок. Отдел тестирования ПО (QA) — вторая линия обороны, которая должна не допускать дальнейшего попадания багов в билд. Если они всё равно оказывается незамеченными, это сказывается работе левелдизайнеров, художников и так далее.

Когда ошибка даёт о себе знать, работники должны использовать кнопку «сообщить о баге», которую добавили в качестве расширения для Chrome. Благодаря этому, специалисты могут легко и точно передать информацию о появившемся баге.

Продолжение предыдущей схемы (справа-налево)

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

Как работает Autobot

Autobot — это автоматическая система для выявления багов. Она запускается после каждой проверки и дважды проходится по assert, ошибкам логики и так далее. Обычно это занимает 10-20 минут. Более подробные тесты проводятся в ночное время.

Пример сообщения от Autobot

Результаты работы Autobot отправляются по электронной почте сотрудникам отдела тестирования ПО. Сообщение включает сведения об изменениях, assert-сообщения, имя автора assert, стек вызовов, ссылку на существующий баг, информацию о предыдущих результатах — когда всё сломалось.

Сообщение о последних изменениях

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

Email больше всего полезны программистам. Им доступны полезные инструменты для аналитики результатов: они могут делать необходимую выборку, искать нужный пункт и так далее. Также разработчики добавили кнопку, которая позволяет обратиться к Jira (приложению для исправления ошибок) и быстро исправить баг. Если это действие проходит успешно, то отделу QA даже не нужно о чём-то беспокоиться.

Но такой вариант развития событий возможен лишь в случае, если кнопка Jira — синего цвета. Если она оранжевая, то для исправления ошибки необходимо вмешательство отдела тестирования ПО. Если кнопка Jira вообще не активна, то появляется кнопка «Bug». При нажатии на неё, становится доступна вся имеющаяся информация по ошибке, которая позволяет выявить причины ошибки.

Также у Media Molecule есть кнопка «Launch», которая запускает replay (тестирование с имитацией рабочей нагрузки). Она позволяет проверить, как на деле будет работать билд. На ранних этапах разработки у студии были проблемы с автоматической системой тестирования: разработчики запускали повтор повтора, а для демпинга данных использовали кнопку-триггер. Всё работало хорошо до того момента, пока кто-нибудь не менял эту кнопку. В итоге, всё вроде бы работало нормально, но на самом деле тестирования не было. Чтобы избежать повторения подобных проблем, в студии усилили процесс мониторинга изменений, чтобы быть уверенными в эффективности тестов.

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

Как всё связано с технической точки зрения

Взаимодействие элементов системы тестирования ПО

У Media Molecule есть SQL Database, в которой содержатся все условия и особенности разных тестов. В неё разработчики заносят информацию с каждого запуска. Они используем Django Web UI, что позволяет отделу тестирования ПО без проблем добавлять новые повторы, смотреть результаты и не обращаться каждый раз к базе данных. Для QA всё организовано в очень удобном и доступном формате.

Чтобы начать тест, существуют специальные Python-скрипты. Django использует Python, поэтому всё необходимое пишется на нём. У студии есть скрипт, который вставляет в новый билд критерии для тестов. Есть другой, который после каждого повтора сверяет всё необходимое с DevKit (пакетом разработки программ), останавливает TTY, вставляет результаты в базу данных. А ещё есть третий скрипт, который «подчищает» всё лишнее.

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

На последнем слайде можно увидеть пять строчек DevKit. Сперва в студии использовали для работы пять-шесть DevKit, но это стало ошибкой, так как в дальнейшем их количество возросло до 10. Для запуска тестов использовали Orbis Control — инструмент от Sony, который запускает тест на DevKit. Это занимало по 5% CPU для каждого теста. Поэтому, если у вас есть 10 DevKit, то они занимают 50% вашего CPU. Сетевое окружение забирает ещё 30%. Поэтому, когда разработчики получают результаты тестов, у них не хватает CPU, чтобы внести их в базу данных.

В связи с этим, в студии разделили процесс на два блока: один с Database и Web UI, второй — Optimus Prime — запускает скрипты на DevKit и записывает результаты.

Поиск багов — Replay System, QA и другие специалисты

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

QA создают расширения для Chrome — они работают в браузере Chrome, устанавливаются туда же, пишутся на Javascript и имеют доступ к программному интерфейсу приложения (API). Поэтому с помощью таких расширений можно запрашивать доступ к Jira, игровому серверу, cookies и так далее.

Разработчики используют расширения в Chrome, чтобы добавить дополнительные Jira-кнопки. Например, есть кнопка, которая делает скриншот в один клик. То есть, при нажатии на кнопку, расширение обращается к DevKit, делает скриншот и прикрепляет его к багу, с которым идёт работа. Такой подход значительно облегчает весь процесс. Такие же функции используются для записи повтора и получения дополнительных деталей по ситуации.

Для графических дизайнеров, художников и звуковых дизайнеров используют инструмент под названием Dashboard. При запуске он проверяет все «зависимости», которые установлены. Если какое-то ПО не работает или не установлено, можно всего лишь нажать на кнопку, чтобы всё исправить. Dashboard позволяет быть уверенными, что все в компании используют правильный софт нужной версии.

Также он обновляет SDK и билд игры — разработчики хотят, чтобы все использовали только последнюю версию. Кроме того, для графических дизайнеров, художников и звуковых дизайнеров существуют свои расширения Chrome. Например, если нажать на кнопку «Report a bug», откроется web-страница Jira, на которой автоматически заполняются поля сведений о баге. Для дизайнеров нет необходимости вникать в технические особенности — они видят сигнал о том, что случилась какая-то ошибка, нажимают на кнопку, и на этом их работа завершена.

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

Для выявления и исправления багов в Media Molecule используется сразу несколько инструментов: Autobot, Jira, Replays, расширения для Chrome и так далее. Естественно, от многих подходов и решений в студии отказывались по ходу работы — не все доказали свою эффективность. Тем не менее перечисленные инструменты позволили компании выстроить успешно функционирующую систему исправления багов, что может говорить об их полезности.

#опыт

{ "author_name": "Владимир Семыкин", "author_type": "editor", "tags": ["\u043e\u043f\u044b\u0442"], "comments": 5, "likes": 46, "favorites": 40, "is_advertisement": false, "subsite_label": "gamedev", "id": 31643, "is_wide": true, "is_ugc": false, "date": "Mon, 19 Nov 2018 12:05:45 +0300" }
{ "id": 31643, "author_id": 94357, "diff_limit": 1000, "urls": {"diff":"\/comments\/31643\/get","add":"\/comments\/31643\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/31643"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954, "possessions": [] }

5 комментариев 5 комм.

Популярные

По порядку

7

Можно попросить?! больше не писать статью либо совсем, либо делать рерайт\перевод адекватный и разбираться в вопросе " Jira ( Приложение для исправления ошибок)" ШТА??? Это обычный менеджер задач.

Ответить
1

таки Jira - это система инцидентов, не?)

Jira — коммерческая система отслеживания ошибок, предназначена для организации взаимодействия с пользователями, хотя в некоторых случаях используется и для управления проектами. Разработана компанией Atlassian, является одним из двух её основных продуктов (наряду с вики-системой Confluence). Имеет веб-интерфейс.

Ответить
0

автор перевода тоже "молодец", конечно, но и вы не совсем правы)

Ответить
3

По переводу, конечно, видно, что переводчик плавает в терминах. И Jira у него для исправления ошибок и сильно орнул с "у них есть свой SQL Database". Когда пошло описание что "у них хранятся сделанные изменения" то ваще жара) Система контроля версий, да. В какой то момент ожидал увидеть "специалисты смотрят на display и взаимодействуют с keyboard", но вроде всё обошлось. Ну и первую половину статьи можно заменить на "короче тут как в любой софтверной компании средней величины". Ну серьёзно, половину текста потратить на то чтобы объяснить как работает юнит-тестирование - немного странно. Но в любом случае спасибо, было интересно узнать, что даже в таких конторах используется совершенно обычный инструментарий для контроля над разработкой.

Ответить
0

Спвсибо за изложение темы. Когда там бета уже...

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
EA анонсировала DLC для DLC
для аддона для спин-оффа
Подписаться на push-уведомления