Кратко о багах

 — Иван давай ко мне я тебя сейчас подлечу!
— Ты где?
— Под башню давай! Скорее!
— Отлично ты подлечил меня, себя и … башню 😉
— Эй все на центр лечим нашу башню!
— А вообще можно лечить башню-то?
— Нет.
— Ок я сейчас напишу баг.
(Диалог на внутреннем playtest )

Почему ошибок так много? Почему же так долго исправленная ошибка идет до публичного сервера? Почему некоторые ошибки не исправляются годами? Эти вопросы мы слышим каждый день на протяжении долгих лет. Я постараюсь в этой заметке дать ответ на этот вопрос и приведу описание жизненного цикла ошибки: от рождения до исправления на публичном сервере и клиентах игроков.

Немного об ошибках. Ошибки являются неотъемлемой частью разработки и сопровождения ПО. Основное время разработки (50-80%) программист тратит именно на поиск, воспроизведение и исправление ошибок. Когда ПО активно развивается, в нем постоянно появляются новые ошибки, это совершенно естественный процесс. Однако, ошибки эффективно и удобно исправлять только на стабилизированном коде, поэтому, как правило, между нахождением ошибки и её исправлением проходит некоторое время, необходимое для того чтобы новый функционал попал в стабильную версию кода. Стабилизированный код — это код, в котором только исправляются ошибки и не добавляется ничего, кроме исправления ошибок. Как вы понимаете, стабилизировать код — очень сложная задача. Ну и полностью стабилизированный код означает что ПО перестало развиваться.

Как вообще, в теории, выглядит жизненный цикл ошибки?
1) Ошибку находят пользователи и сообщают о ней на форум, или ошибка обнаруживается в процессе внутреннего тестирования.
2) Ошибки с форума и от тестировщиков заносятся в треккер.
3) Ответственный за качество продукта просматривает ошибки и часть из них, связанную непосредственно с кодом игры, передаёт на исправление в отдел разработки.
4) Отдел разработки исправляет ошибки.
5) Исправленные ошибки вместе с новым функционалом и ресурсами попадают в патч.
6) Патч попадает на публичный сервер.

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

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

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

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

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

После этого начинается подготовка патча. Мы запускаем специальную задачу в нашей системе, и через некоторое время свежий патч готов! Его заливают на так называемый «препаблик», то есть, сервер, приближенный по характеристикам к публичному, и там проверяют, что на новой версии кода сервер запускается, и обновленный клиент к нему нормально подключается. И только после этого можно отдавать новую версию на публичный сервер следующим утром, если это не утро пятницы 🙂 Бывают исключения, но, наученные опытом, мы стараемся так не делать.

После патча на публичном сервере обязательно находятся новые критичные ошибки, которые ещё неизвестно как повторить, и… в общем, круг замкнулся 🙂

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

Ведущий разработчик Alvegia Online

vfabr