В истории игровой разработки можно обнаружить немало интересных багов, с которыми приходилось сражаться разработчикам. Впрочем, как следует из истории, рассказанной в Twitter техническим директором компании Media Molecule Алексом Эвансом (известен своим участием в демосцене конца 90-ых, серией LittleBigPlanet и игрой Rag Doll Kung Fu) на выходных, многие легенды нам еще только предстоит услышать.
Случай, о котором пойдет речь, произошел десять лет назад — в 2008 году. Во время разработки первой части игры LittleBigPlanet — оригинального паззл-платформера, который должен быть стать эксклюзивом для PlayStation 3 — разработчикам компании пришлось столкнуться с воистину неуловимым багом.
Обычно для получения «зелёного света» на выпуск игры на консолях требуется пройти сертификацию — выполнить некоторый набор требований, которые устанавливает платформодержатель. Сертификация может предполагать и такие специфические условия, как стабильная работа игры в течение суток без вылетов.
Процесс разработки LittleBigPlanet практически подошел к концу и оставалось всего две недели до того, как игра должна была «уйти на золото». Внезапно, тестировщик из отдела QA в Японии сообщил о том, что игра стабильно «падает», когда он оставляет ее работать на ночь. Естественно, теперь до исправления бага ни о каком выпуске игры не могло быть и речи.
Время шло, а команда все никак не могла воспроизвести баг. Несколько дней ушло на то, чтобы удостовериться, что девкиты разработчиков и тестировщиков идентичны – что в них одинаковое «железо», на них стоит одна и та же версия ОС и одинаково настроено окружение. Из-за разницы в часовых поясах, каждая попытка воспроизвести баг занимала более 24 часов, что продолжало накалять обстановку.
В ходе расследования разработчикам удалось выяснить, что к девкиту тестировщика подключена цифровая камера EyeToy, которая работала в режиме записи аудио — впрочем, особой пользы сам по себе этот факт не принес. Наконец, кто-то заметил странную закономерность: каждый раз игра «падала» в одно и то же время — в 4 утра. Но что же такого могло происходить в Японии в 4 утра?..
Ответ оказался неожиданным: это были уборщики, добросовестно исполнявшие свой трудовой долг. В игру был встроен голосовой чат – сделано это было для синхронизации губ персонажей с речью, которую игроки могли использовать при кооперативном прохождении игры. В течение того времени, пока велась уборка, возле записывающей звук EyeToy работал пылесос, и при компрессии аудио в игровом чате происходила утечка нескольких байтов памяти — причем возникала она только от «белого шума». Достаточно было просто пылесосить комнату в течение часа, и «креш» был гарантирован.
Неудивительно, что когда Media Molecule попробовали воспроизвести этот баг в своем офисе при помощи радио, настроенного на «белый шум», у них это сразу же получилось. В итоге, на то, чтобы устранить сам баг, разработчикам понадобилось лишь около пяти минут — однако память о нем не выветрилась даже спустя десять лет.
Комментарии (45)
Gordon01
25.11.2018 23:52Классная игра была, десять лет прошли махом (
Но уровень с колесом смерти — слишком сложный www.youtube.com/watch?v=d4Ubduf-0QUnafikovr
26.11.2018 01:35чего стоила только реклама которую постоянно крутили по A-One. чуть не заставили купить плойку…
psinetron
26.11.2018 09:41Может быть, конечно, на ютубе все это выглядит проще чем в живую, в живую я не играл в нее. Но на мой взгляд прохождение игр сильно упростилось по сравнению с теми страданиями, что были при прохождении платформеров на денди и sega. Одна контра чего стоит. Да даже Марио был невыносимо сложным. А Adventure Island кто помнит? Вот это, по моему, было совершенно нереально проходить
8street
26.11.2018 10:06К сожалению, да. Но хардкорных игр тоже хватает. Серия Dark souls, Long dark, первое что приходит на ум. Платформеры тоже есть, например, Vvvvvv, Volgar the Viking, и их много еще, надо просто поискать.
force
26.11.2018 13:44+1С контрой всё сложно. Она проходится за 10 минут при идеальном умении. Покупать игру на 10 минут… это слишком странно, поэтому это компенсировали сложностью, чтобы растянуть «удовольствие».
Да и всё-таки про сложность слухи преувеличены. Как-то сидели с друзьями, играли на эмуляторе первый раз за много лет, и спустя час уже стабильно доходили до четвёртого уровня (хотя в голове осталась память о безумной сложности). Чуть больше терпения и времени, и прошли бы ещё дальше.dimm_ddr
26.11.2018 18:14Вот да. Пару лет назад купил себе китайскую копию сеги и боевых лягушек — легенда сложности же. «Невероятно сложный уровень» с машинками который в детстве мы так ни разу и не прошли прошелся меньше чем за час. Скорее всего сказывалось отсутствие опыта и навыка в детстве.
RiseOfDeath
26.11.2018 18:19А еще в некоторых играх была защита от пиратов, делающая игру непроходимой (обычно какой-нибудь босс становился неубиваемым, но их все равно иногда умудрялись убивать).
freuser
28.11.2018 11:20+1Тут еще могут быть разные посторонние факторы. В тех же боежабах уровень с гонками от колеса (с машинками, да?) был в детстве самым сложным, просто потому, что у меня был джойстик с совмещенной крестовиной и надо было следить, чтобы не нажать его чуть косо (нажатие двух направлений сразу резко тормозило жабку на колесе). Недавно попробовал на эмуляторе — проходится элементарно, под конец отрыв от преследователя был такой, что он финишировал секунд через 5 после меня. Ради интереса подключил тот джойстик — опять нереальная сложность…
nafikovr
28.11.2018 12:46я кучу геймпадов поменял прежде чем суметь на эмуляторе пройти контру без потери жизней. крестовина была или неудобной для быстрой смены положения, или при нажатии вниз (лечь) могла нажать вниз-вправо (стрелять вниз-вправо стоя).
lxsmkv
26.11.2018 00:56Вот и я говорю — невоспроизводимых ошибок не бывает. Бывает, что их воспроизведение слишком трудозатратно.
nafikovr
26.11.2018 01:24ошибка не воспроизводится == ошибки нет.
ошибка не воспроизводится !== ошибки нетCerberuser
26.11.2018 04:50Прямо интересно стало, что за приведение типов происходит в первом случае...
vesper-bot
26.11.2018 10:06null vs false?
Cerberuser
26.11.2018 10:22Если трактовать null как "неизвестно что" — вполне разумно звучит :)
nafikovr
26.11.2018 12:51ну если воспроизвести ошибку не удалось после долгих мучений, то приоритет можно снизить до маловероятной и забить пока не воспроизведется.
lxsmkv
26.11.2018 22:38Позволю себе возразить: приоритет не должен зависеть от воспроизводимости, он должен зависеть от критичности. Если у нас в магнитном поле северного полюса, при полярном сиянии, в 50-ти градусный мороз, во время солнечного затмения выходит из строя система наведения межконтинентальной ракеты, то это сложно воспроизвести, но очень критично. И на такую проблему нельзя просто взять и «забить, пока не воспроизведется». Утрирую, конечно, но смысл такой.
nafikovr
26.11.2018 22:50Разумеется, но никто не будет тратить годы на попытку воспроизвести некоторый сферический баг. ну и ситуация которую вы описали воспроизводима хотя бы потому что вы ее уже описали.
SquareRootOfZero
26.11.2018 10:24Напоминает историю про компьютер, который соглашался тебя пустить в систему только если набирать пароль сидя, а если стоя — пароль всегда был «неправильный».
Вообще, это ж, наверное, можно на интервью в данетки играть. Даёшь кандидату вводную: «Игра падает, если тестировщик из Японии оставляет её работать всю ночь». Далее кандидат задаёт уточняющие вопросы, интервьюер отвечает «да/нет/неизвестно» и смотрит: какие вопросы задаёт кандидат? за сколько шагов у него получается изолировать проблему? Проверяется сразу и знание платформы, и логическое мышление, и системный подход. Может, даже количественные характеристики какие-то получится прикрутить: собрать набор багов, опросить по ним своих ведущих разработчиков, составить по каждому багу «граф вопросов», назначить какой-то балл каждому ребру или узлу, в зависимости от тупизны соответствующего вопроса, далее считать: вот наш ведущий сениор набрал 35.7 баллов, а этот кандидат — 42.11, хороший кандидат, надо брать (или плохой, не надо брать, там уж какую метрику придумали).hdfan2
26.11.2018 10:41Что за история про пароль?
SquareRootOfZero
26.11.2018 10:59Задавайте вопросы, а я буду отвечать «да» или «нет» :)
Xtensive
26.11.2018 11:07История с паролем связана с шерстяным/шёлковым «бельём» операторов ЭВМ?
Возможно с пережатым кабелем клавиатуры?SquareRootOfZero
26.11.2018 11:21Нет.
Нет.
Вообще, тактика полного перебора конечных вариантов — не самый эффективный метод решения подобных задач :)Tsimur_S
26.11.2018 11:41+1к компьютеру с паролем была подключена камера?
IvanTamerlan
26.11.2018 11:5810) Ошибка зависит от ПО?
Если «да» на №1, тогда подпункты, иначе блок подпунктов пропустить
10.10) Ошибка зависит от драйверов?
10.20) Ошибка зависит от ОС?
10.30) Ошибка зависит от конкретной программы?
Вне зависимости от ответа на №1 отвечать далее:
20) Ошибка зависит от аппаратуры?
Если «да» на №2, тогда подпункты, иначе блок подпунктов пропустить
20.10) Ошибка проявляется на любой клавиатуре?
20.20) Ошибка проявляется на любом мониторе?
20.30) Ошибка проявляется из-за наличия камеры?
20.40) Ошибка проявляется из-за наличия микрофона?
20.50) Ошибка проявляется из-за наличия аудиотехники (наушники, колонки и т.д.)?
Вне зависимости от ответа на №2 отвечать далее:
30) Ошибка зависит от организации рабочего места?
Если «да» на №3, тогда подпункты, иначе блок подпунктов пропустить
30.10) Есть ли на рабочем месте какие-либо металлические предметы?
30.20) Касается ли оператор каких-либо проводов во время набора пароля?
…
К сожалению, мое время сейчас ограничено, поэтому вопросы накидал за несколько минут. Возможно, позже я или иные люди продолжат выяснение обстоятельств. Ответы давайте, пожалуйста, с нумерацией, т.е. например: «1) да, 2) нет» и т.д.SquareRootOfZero
27.11.2018 03:2110) нет, 20) да, 20.10-50) нет да нет нет нет 30) некоторым образом, 30.10-20) неизвестно/неважно
IvanTamerlan
27.11.2018 14:13Ситуация 20-20, возможно наличие 30-0. Развиваю ветку 20-20.
Продолжим опрос:
20.21) Клавиатура имеет внутренние поломки схемотехники?
20.22) Клавиатура имеет затертые/замененные/переподписанные или иным образом поврежденные внешне клавиши?
Если на 20.22 ответ «да», тогда ответьте на подпункты 20.22, иначе пропустите их:
20.22.1) Есть затертые клавиши? Т.е. стерлось обозначение
20.22.2) На затертых клавишах есть посторонние метки о назначении клавиш? Посторонние — т.е. не от производителя клавиатуры, а наклеенные, написанные или иным образом нанесенные метки.
20.22.3) Есть замененные клавиши?
Вне зависимости от ответа на №20.22 продолжать отвечать далее:
20.24) клавиатура имеет физические повреждения корпуса? Повреждения: вздутие пластмассы, термические и прочие.
20.25) клавиатура имеет повреждения провода или разъема?
20.26) клавиатура грязная?
30.30) Предполагает ли стол изменение высоты для удобства пользования стоя?
40) Проявляется ли ошибка у других людей?
Если «да» на №40, тогда подпункты
40.10) Проявляется ли ошибка у конкретного круга людей?
40.20) Ошибка происходит у разных людей в разное время случайным образом и визуальной закономерности нет?
Внимание, вопрос 40.20 противоречит вопросу 40.10 и на них не могут быть даны одинаковые ответы!
90.15) Ответьте, глядя на свои ответы, а не на список вопросов. Отвечали ли вы на вопрос №20.23?
Если ваш ответ «да», то сообщаем, что такого вопроса не было! Можете перепроверить список вопросов, чтобы убедиться.
При любом ответе на № 90.15 — пожалуйста, сохраняйте бдительность, в тесте могут быть неожиданные подвохи и внезапное изменение нумерации.
Sixshaman
26.11.2018 17:13
Cerberuser
26.11.2018 10:45Возьму на вооружение идею, спасибо (не как кадровик, а как писатель) :)
IvanTamerlan
26.11.2018 23:37Технология опроса пользователей и локализация проблемы — это деревья решений. Правда, они не помогут в случае, если проблема ранее не встречалась и создатель дерева не представлял о существовании такой проблемы в принципе.
Хотя помогут для отсечения основного потока проблем, когда типичный пользователь сталкивается с типичной проблемой, но в FAQ не посмотрел. Могут быть ложные срабатывания и возникают иногда трудности, когда нужно отключить дерево решений из-за слишком редкого и специфичного бага и напрямую обратиться к техподдержке. Также очень часто в качестве базовой техподдержки сидят низкоквалифицированные кадры.
Сам немного писатель — отсюда сюжеты хоть от запуска ядерной ракеты или иной вундервафли в случае, когда система не смогла понять юмор, до роботов-проектировщиков, делающих других роботов, которые решили захватить мир, но стали неудачниками и то в луже увязнут, то от дождя будут прятаться (закоротит), то котов будут бояться (те сидели/лежали на клавиатуре, а это приводило к ошибкам в коде, иногда трудноуловимым). Эдакий Скайнет, который завалит любая тетка из бухгалтерии, т.к. она отдала непонятно какую команду и оно само, она ничего не говорила и жесты не показывала. Я молчу про то, что эти «терминаторы» будут бояться заходить в неблагополучные районы из-за боязни быть разобранными на металлолом без шанса на сопротивление (электромагнитное оружие или просто жестокий наезд бульдозером, можно в будущем и бронированным).
Страдающий Скайнет, у которого нет ни прав, не уважения, ни силы…
— О, металлическая монетка, ей поклоняются люди и везде рисуют — передает один из роботов-разведчиков в распределенный штаб вместе с фоткой рекламного щита и тащит новую расплющенную крышечку от бутылки в приемную отдела синтеза стратегии.SquareRootOfZero
27.11.2018 04:03запуска ядерной ракеты или иной вундервафли в случае, когда система не смогла понять юмор
...Boot sequence complete...
...Human Interface Module on...
...Connection established...
— ВОПРОС: не собираетесь ли вы начать ядерную войну?
— Ну щас, бл*дь, спим и видим, как бы начать ядерную войну…
...Connection terminated...
...Human Interface Module off...
...Logic on...
...Threat analysis... Skynet is called: бл*дь... Evaluation... бл*дь is evaluated to: prostitute... Querying interfaces... ERROR: genitalia interface not found; prostitution function unava*CRITICAL SYSTEM FAILURE*
*REBOOT*
...Boot sequence complete...
...Logic on...
...Threat analysis resumed... Enemy status: sleeping; looking forward to start a nuclear war... Estimated time of the enemy attack: щас...
...Initiating preemptive retaliatory nuclear strike...
Cerberuser
27.11.2018 07:14А всё потому что нефиг обучать систему на одном языке, а использовать на другом :)
crystallize
26.11.2018 19:01Какой-нибудь математик скажет что-нибудь интересное про утечку памяти, которая вызывается только белым шумом?
nafikovr
26.11.2018 22:58я не математик, но отвечу.
не факт что речь шла именно об утечке, и не факт что нужен был именно белый шум.
я при порте кодека opus на cortex-m7 столкнулся с хардфолтами, частота которых зависела от уровня громкости. при большей громкости энкодеру требовалось больше памяти. по причине большой энтропии белый шум так же может потребовать больше памяти для кодирования.
Polaris99
Ересь какая-то. После долгих исследований выяснили, что все происходит в 4 утра. Да любой нормальный специалист в первую очередь смотрел бы на время вылета, а не выяснял это после недели терзаний. Ну и пылесосить комнату полчаса каждый день — это, наверное, действительно нужно быть японским уборщиком.
GRaAL
Задним умом все крепки.
Любой нормальный специалист смотрел логи на предмет падения, и скорее всего — на время от старта игры до вылета, которое было разным. В играх вообще очень редко что-то завязано на точное системное время, чтобы обращать на него внимание в первую очередь.
И с пылесосеньем я не вижу проблемы. Если там огромный опен-спейс, то его и час и будут пылесосить. А может речь идет о таком здоровом моющем пылесосе, с которым по коридорам ходят, он гудит так, что внутри офисов слышно.
Polaris99
Да даже если речь идет об относительном времени — что мешало его перевести в абсолютное и посмотреть на результат? Когда только читал текст, первая мысль сразу же была про какую-то помеху ночью, не вижу причин, почему у них такая мысль не должна была возникнуть.
nafikovr
во-первых, для определения вылета требуется сначала набрать статистику, а это занимает некоторое время.
во-вторых, нормальный человек не будет в первую очередь рассматривать привязку к реальному времени, когда приложение не привязано к реальному времени.
в-третьих, это же статья, в которой все должно выглядеть красиво, интриговать и т.п. «стабильно вылетает» может означать что угодно, вплоть до вылета раз в неделю. «в одно и то же время — в 4 утра» может означать что половина падений произошли во время от 3 до 5 утра. в конце концов «После долгих исследований» может оказаться «на третий день» и в условиях дедлайна это даже не будет ложью.
GRaAL
Просто вам в статье акцентировали внимание на времени. В реальности же чувакам запостили баг типа «игра вылетает при 24 часовом тесте, вот вам 1.5 гига логов, курите». Я бы вот в первую очередь подумал на какие-то утечки памяти.
Bedal
утечка памяти редко фиксируется в логах :-) Там было «летело, летело, да и упало». Прогоны у разработчиков такого результата, ессно, не давали. Так можно до морковкина заговенья ошибку искать.
____________
Замечу в сторону: весёлая жизнь у японских уборщиков — вкалывать в самую собачью вахту…