Неуловимый баг LittleBigPlanet

    image

    В истории игровой разработки можно обнаружить немало интересных багов, с которыми приходилось сражаться разработчикам. Впрочем, как следует из истории, рассказанной в Twitter техническим директором компании Media Molecule Алексом Эвансом (известен своим участием в демосцене конца 90-ых, серией LittleBigPlanet и игрой Rag Doll Kung Fu) на выходных, многие легенды нам еще только предстоит услышать.

    Случай, о котором пойдет речь, произошел десять лет назад — в 2008 году. Во время разработки первой части игры LittleBigPlanet — оригинального паззл-платформера, который должен быть стать эксклюзивом для PlayStation 3 — разработчикам компании пришлось столкнуться с воистину неуловимым багом.

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

    Процесс разработки LittleBigPlanet практически подошел к концу и оставалось всего две недели до того, как игра должна была «уйти на золото». Внезапно, тестировщик из отдела QA в Японии сообщил о том, что игра стабильно «падает», когда он оставляет ее работать на ночь. Естественно, теперь до исправления бага ни о каком выпуске игры не могло быть и речи.

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

    В ходе расследования разработчикам удалось выяснить, что к девкиту тестировщика подключена цифровая камера EyeToy, которая работала в режиме записи аудио — впрочем, особой пользы сам по себе этот факт не принес. Наконец, кто-то заметил странную закономерность: каждый раз игра «падала» в одно и то же время — в 4 утра. Но что же такого могло происходить в Японии в 4 утра?..

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

    Неудивительно, что когда Media Molecule попробовали воспроизвести этот баг в своем офисе при помощи радио, настроенного на «белый шум», у них это сразу же получилось. В итоге, на то, чтобы устранить сам баг, разработчикам понадобилось лишь около пяти минут — однако память о нем не выветрилась даже спустя десять лет.
    Поделиться публикацией
    Комментарии 46
      –18
      Ересь какая-то. После долгих исследований выяснили, что все происходит в 4 утра. Да любой нормальный специалист в первую очередь смотрел бы на время вылета, а не выяснял это после недели терзаний. Ну и пылесосить комнату полчаса каждый день — это, наверное, действительно нужно быть японским уборщиком.
        +21
        Задним умом все крепки.
        Любой нормальный специалист смотрел логи на предмет падения, и скорее всего — на время от старта игры до вылета, которое было разным. В играх вообще очень редко что-то завязано на точное системное время, чтобы обращать на него внимание в первую очередь.
        И с пылесосеньем я не вижу проблемы. Если там огромный опен-спейс, то его и час и будут пылесосить. А может речь идет о таком здоровом моющем пылесосе, с которым по коридорам ходят, он гудит так, что внутри офисов слышно.
          –3
          Да даже если речь идет об относительном времени — что мешало его перевести в абсолютное и посмотреть на результат? Когда только читал текст, первая мысль сразу же была про какую-то помеху ночью, не вижу причин, почему у них такая мысль не должна была возникнуть.
            +4
            во-первых, для определения вылета требуется сначала набрать статистику, а это занимает некоторое время.
            во-вторых, нормальный человек не будет в первую очередь рассматривать привязку к реальному времени, когда приложение не привязано к реальному времени.
            в-третьих, это же статья, в которой все должно выглядеть красиво, интриговать и т.п. «стабильно вылетает» может означать что угодно, вплоть до вылета раз в неделю. «в одно и то же время — в 4 утра» может означать что половина падений произошли во время от 3 до 5 утра. в конце концов «После долгих исследований» может оказаться «на третий день» и в условиях дедлайна это даже не будет ложью.
              +2
              Просто вам в статье акцентировали внимание на времени. В реальности же чувакам запостили баг типа «игра вылетает при 24 часовом тесте, вот вам 1.5 гига логов, курите». Я бы вот в первую очередь подумал на какие-то утечки памяти.
                0
                утечка памяти редко фиксируется в логах :-) Там было «летело, летело, да и упало». Прогоны у разработчиков такого результата, ессно, не давали. Так можно до морковкина заговенья ошибку искать.
                ____________
                Замечу в сторону: весёлая жизнь у японских уборщиков — вкалывать в самую собачью вахту…
          0
          Классная игра была, десять лет прошли махом (
          Но уровень с колесом смерти — слишком сложный www.youtube.com/watch?v=d4Ubduf-0QU
            0
            чего стоила только реклама которую постоянно крутили по A-One. чуть не заставили купить плойку…
              +2
              Может быть, конечно, на ютубе все это выглядит проще чем в живую, в живую я не играл в нее. Но на мой взгляд прохождение игр сильно упростилось по сравнению с теми страданиями, что были при прохождении платформеров на денди и sega. Одна контра чего стоит. Да даже Марио был невыносимо сложным. А Adventure Island кто помнит? Вот это, по моему, было совершенно нереально проходить
                0

                К сожалению, да. Но хардкорных игр тоже хватает. Серия Dark souls, Long dark, первое что приходит на ум. Платформеры тоже есть, например, Vvvvvv, Volgar the Viking, и их много еще, надо просто поискать.

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

                  Да и всё-таки про сложность слухи преувеличены. Как-то сидели с друзьями, играли на эмуляторе первый раз за много лет, и спустя час уже стабильно доходили до четвёртого уровня (хотя в голове осталась память о безумной сложности). Чуть больше терпения и времени, и прошли бы ещё дальше.
                    0
                    Вот да. Пару лет назад купил себе китайскую копию сеги и боевых лягушек — легенда сложности же. «Невероятно сложный уровень» с машинками который в детстве мы так ни разу и не прошли прошелся меньше чем за час. Скорее всего сказывалось отсутствие опыта и навыка в детстве.
                      0
                      А еще в некоторых играх была защита от пиратов, делающая игру непроходимой (обычно какой-нибудь босс становился неубиваемым, но их все равно иногда умудрялись убивать).
                        +1
                        нюанс в том, что легенды ходят о версии для nes.
                          0
                          В моем случае мы именно сеговскую версию пройти не могли. Ну и там дальше все же есть реально сложные места, но все равно вполне проходимо.
                          +1
                          Тут еще могут быть разные посторонние факторы. В тех же боежабах уровень с гонками от колеса (с машинками, да?) был в детстве самым сложным, просто потому, что у меня был джойстик с совмещенной крестовиной и надо было следить, чтобы не нажать его чуть косо (нажатие двух направлений сразу резко тормозило жабку на колесе). Недавно попробовал на эмуляторе — проходится элементарно, под конец отрыв от преследователя был такой, что он финишировал секунд через 5 после меня. Ради интереса подключил тот джойстик — опять нереальная сложность…
                            0
                            я кучу геймпадов поменял прежде чем суметь на эмуляторе пройти контру без потери жизней. крестовина была или неудобной для быстрой смены положения, или при нажатии вниз (лечь) могла нажать вниз-вправо (стрелять вниз-вправо стоя).
                    +1
                    Вот и я говорю — невоспроизводимых ошибок не бывает. Бывает, что их воспроизведение слишком трудозатратно.
                      +1
                      ошибка не воспроизводится == ошибки нет.
                      ошибка не воспроизводится !== ошибки нет
                        +2

                        Прямо интересно стало, что за приведение типов происходит в первом случае...

                          +1
                          null vs false?
                            0

                            Если трактовать null как "неизвестно что" — вполне разумно звучит :)

                              0
                              ну если воспроизвести ошибку не удалось после долгих мучений, то приоритет можно снизить до маловероятной и забить пока не воспроизведется.
                                0
                                Позволю себе возразить: приоритет не должен зависеть от воспроизводимости, он должен зависеть от критичности. Если у нас в магнитном поле северного полюса, при полярном сиянии, в 50-ти градусный мороз, во время солнечного затмения выходит из строя система наведения межконтинентальной ракеты, то это сложно воспроизвести, но очень критично. И на такую проблему нельзя просто взять и «забить, пока не воспроизведется». Утрирую, конечно, но смысл такой.
                                  0
                                  Разумеется, но никто не будет тратить годы на попытку воспроизвести некоторый сферический баг. ну и ситуация которую вы описали воспроизводима хотя бы потому что вы ее уже описали.
                      0
                      Напоминает историю про компьютер, который соглашался тебя пустить в систему только если набирать пароль сидя, а если стоя — пароль всегда был «неправильный».

                      Вообще, это ж, наверное, можно на интервью в данетки играть. Даёшь кандидату вводную: «Игра падает, если тестировщик из Японии оставляет её работать всю ночь». Далее кандидат задаёт уточняющие вопросы, интервьюер отвечает «да/нет/неизвестно» и смотрит: какие вопросы задаёт кандидат? за сколько шагов у него получается изолировать проблему? Проверяется сразу и знание платформы, и логическое мышление, и системный подход. Может, даже количественные характеристики какие-то получится прикрутить: собрать набор багов, опросить по ним своих ведущих разработчиков, составить по каждому багу «граф вопросов», назначить какой-то балл каждому ребру или узлу, в зависимости от тупизны соответствующего вопроса, далее считать: вот наш ведущий сениор набрал 35.7 баллов, а этот кандидат — 42.11, хороший кандидат, надо брать (или плохой, не надо брать, там уж какую метрику придумали).
                        +2
                        Что за история про пароль?
                          0
                          Задавайте вопросы, а я буду отвечать «да» или «нет» :)
                            0
                            История с паролем связана с шерстяным/шёлковым «бельём» операторов ЭВМ?
                            Возможно с пережатым кабелем клавиатуры?
                              0
                              Нет.
                              Нет.
                              Вообще, тактика полного перебора конечных вариантов — не самый эффективный метод решения подобных задач :)
                                +2
                                к компьютеру с паролем была подключена камера?
                                  0
                                  Нет/не важно. Что вам всем далась эта камера?..
                                    +1
                                    учимся на ошибках японских коллег
                              0
                              10) Ошибка зависит от ПО?
                              Если «да» на №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) нет» и т.д.
                                0
                                10) нет, 20) да, 20.10-50) нет да нет нет нет 30) некоторым образом, 30.10-20) неизвестно/неважно
                                  0
                                  Ситуация 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 — пожалуйста, сохраняйте бдительность, в тесте могут быть неожиданные подвохи и внезапное изменение нумерации.
                                    0
                                    На № 20.26 всегда ответ «да», особенности реального мира.
                                0
                                Это про немецкую клавиатуру?
                                +5
                                0

                                Возьму на вооружение идею, спасибо (не как кадровик, а как писатель) :)

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

                                  Сам немного писатель — отсюда сюжеты хоть от запуска ядерной ракеты или иной вундервафли в случае, когда система не смогла понять юмор, до роботов-проектировщиков, делающих других роботов, которые решили захватить мир, но стали неудачниками и то в луже увязнут, то от дождя будут прятаться (закоротит), то котов будут бояться (те сидели/лежали на клавиатуре, а это приводило к ошибкам в коде, иногда трудноуловимым). Эдакий Скайнет, который завалит любая тетка из бухгалтерии, т.к. она отдала непонятно какую команду и оно само, она ничего не говорила и жесты не показывала. Я молчу про то, что эти «терминаторы» будут бояться заходить в неблагополучные районы из-за боязни быть разобранными на металлолом без шанса на сопротивление (электромагнитное оружие или просто жестокий наезд бульдозером, можно в будущем и бронированным).
                                  Страдающий Скайнет, у которого нет ни прав, не уважения, ни силы…
                                  — О, металлическая монетка, ей поклоняются люди и везде рисуют — передает один из роботов-разведчиков в распределенный штаб вместе с фоткой рекламного щита и тащит новую расплющенную крышечку от бутылки в приемную отдела синтеза стратегии.
                                    +2
                                    запуска ядерной ракеты или иной вундервафли в случае, когда система не смогла понять юмор

                                    ...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...
                                      +1

                                      А всё потому что нефиг обучать систему на одном языке, а использовать на другом :)

                                +2
                                Чисто японская методика fuzzy-тестирования аудиокодеков.
                                  0
                                  Какой-нибудь математик скажет что-нибудь интересное про утечку памяти, которая вызывается только белым шумом?
                                    +2
                                    я не математик, но отвечу.
                                    не факт что речь шла именно об утечке, и не факт что нужен был именно белый шум.
                                    я при порте кодека opus на cortex-m7 столкнулся с хардфолтами, частота которых зависела от уровня громкости. при большей громкости энкодеру требовалось больше памяти. по причине большой энтропии белый шум так же может потребовать больше памяти для кодирования.

                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                  Самое читаемое