image

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

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

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

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

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

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

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

Неудивительно, что когда Media Molecule попробовали воспроизвести этот баг в своем офисе при помощи радио, настроенного на «белый шум», у них это сразу же получилось. В итоге, на то, чтобы устранить сам баг, разработчикам понадобилось лишь около пяти минут — однако память о нем не выветрилась даже спустя десять лет.

Комментарии (45)


  1. Polaris99
    25.11.2018 21:44
    -4

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


    1. GRaAL
      25.11.2018 22:10
      +3

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


      1. Polaris99
        25.11.2018 23:42

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


        1. nafikovr
          26.11.2018 01:34

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


        1. GRaAL
          26.11.2018 13:41
          +1

          Просто вам в статье акцентировали внимание на времени. В реальности же чувакам запостили баг типа «игра вылетает при 24 часовом тесте, вот вам 1.5 гига логов, курите». Я бы вот в первую очередь подумал на какие-то утечки памяти.


          1. Bedal
            26.11.2018 15:50

            утечка памяти редко фиксируется в логах :-) Там было «летело, летело, да и упало». Прогоны у разработчиков такого результата, ессно, не давали. Так можно до морковкина заговенья ошибку искать.
            ____________
            Замечу в сторону: весёлая жизнь у японских уборщиков — вкалывать в самую собачью вахту…


  1. Gordon01
    25.11.2018 23:52

    Классная игра была, десять лет прошли махом (
    Но уровень с колесом смерти — слишком сложный www.youtube.com/watch?v=d4Ubduf-0QU


    1. nafikovr
      26.11.2018 01:35

      чего стоила только реклама которую постоянно крутили по A-One. чуть не заставили купить плойку…


    1. psinetron
      26.11.2018 09:41

      Может быть, конечно, на ютубе все это выглядит проще чем в живую, в живую я не играл в нее. Но на мой взгляд прохождение игр сильно упростилось по сравнению с теми страданиями, что были при прохождении платформеров на денди и sega. Одна контра чего стоит. Да даже Марио был невыносимо сложным. А Adventure Island кто помнит? Вот это, по моему, было совершенно нереально проходить


      1. 8street
        26.11.2018 10:06

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


      1. force
        26.11.2018 13:44
        +1

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

        Да и всё-таки про сложность слухи преувеличены. Как-то сидели с друзьями, играли на эмуляторе первый раз за много лет, и спустя час уже стабильно доходили до четвёртого уровня (хотя в голове осталась память о безумной сложности). Чуть больше терпения и времени, и прошли бы ещё дальше.


        1. dimm_ddr
          26.11.2018 18:14

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


          1. RiseOfDeath
            26.11.2018 18:19

            А еще в некоторых играх была защита от пиратов, делающая игру непроходимой (обычно какой-нибудь босс становился неубиваемым, но их все равно иногда умудрялись убивать).


          1. nafikovr
            26.11.2018 22:51

            нюанс в том, что легенды ходят о версии для nes.


            1. dimm_ddr
              27.11.2018 14:26

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


          1. freuser
            28.11.2018 11:20
            +1

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


            1. nafikovr
              28.11.2018 12:46

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


  1. lxsmkv
    26.11.2018 00:56

    Вот и я говорю — невоспроизводимых ошибок не бывает. Бывает, что их воспроизведение слишком трудозатратно.


    1. nafikovr
      26.11.2018 01:24

      ошибка не воспроизводится == ошибки нет.
      ошибка не воспроизводится !== ошибки нет


      1. Cerberuser
        26.11.2018 04:50

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


        1. vesper-bot
          26.11.2018 10:06

          null vs false?


          1. Cerberuser
            26.11.2018 10:22

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


            1. nafikovr
              26.11.2018 12:51

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


              1. lxsmkv
                26.11.2018 22:38

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


                1. nafikovr
                  26.11.2018 22:50

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


  1. SquareRootOfZero
    26.11.2018 10:24

    Напоминает историю про компьютер, который соглашался тебя пустить в систему только если набирать пароль сидя, а если стоя — пароль всегда был «неправильный».

    Вообще, это ж, наверное, можно на интервью в данетки играть. Даёшь кандидату вводную: «Игра падает, если тестировщик из Японии оставляет её работать всю ночь». Далее кандидат задаёт уточняющие вопросы, интервьюер отвечает «да/нет/неизвестно» и смотрит: какие вопросы задаёт кандидат? за сколько шагов у него получается изолировать проблему? Проверяется сразу и знание платформы, и логическое мышление, и системный подход. Может, даже количественные характеристики какие-то получится прикрутить: собрать набор багов, опросить по ним своих ведущих разработчиков, составить по каждому багу «граф вопросов», назначить какой-то балл каждому ребру или узлу, в зависимости от тупизны соответствующего вопроса, далее считать: вот наш ведущий сениор набрал 35.7 баллов, а этот кандидат — 42.11, хороший кандидат, надо брать (или плохой, не надо брать, там уж какую метрику придумали).


    1. hdfan2
      26.11.2018 10:41

      Что за история про пароль?


      1. SquareRootOfZero
        26.11.2018 10:59

        Задавайте вопросы, а я буду отвечать «да» или «нет» :)


        1. Xtensive
          26.11.2018 11:07

          История с паролем связана с шерстяным/шёлковым «бельём» операторов ЭВМ?
          Возможно с пережатым кабелем клавиатуры?


          1. SquareRootOfZero
            26.11.2018 11:21

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


            1. Tsimur_S
              26.11.2018 11:41
              +1

              к компьютеру с паролем была подключена камера?


              1. SquareRootOfZero
                27.11.2018 04:06

                Нет/не важно. Что вам всем далась эта камера?..


                1. nafikovr
                  27.11.2018 09:34

                  учимся на ошибках японских коллег


        1. IvanTamerlan
          26.11.2018 11:58

          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) нет» и т.д.


          1. SquareRootOfZero
            27.11.2018 03:21

            10) нет, 20) да, 20.10-50) нет да нет нет нет 30) некоторым образом, 30.10-20) неизвестно/неважно


            1. 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 — пожалуйста, сохраняйте бдительность, в тесте могут быть неожиданные подвохи и внезапное изменение нумерации.


        1. digitallez
          26.11.2018 14:18

          Это про немецкую клавиатуру?



    1. Cerberuser
      26.11.2018 10:45

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


      1. IvanTamerlan
        26.11.2018 23:37

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

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


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


          1. Cerberuser
            27.11.2018 07:14

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


  1. domix32
    26.11.2018 12:55

    Чисто японская методика fuzzy-тестирования аудиокодеков.


  1. crystallize
    26.11.2018 19:01

    Какой-нибудь математик скажет что-нибудь интересное про утечку памяти, которая вызывается только белым шумом?


    1. nafikovr
      26.11.2018 22:58

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