О тестировании таймеров в геймдеве
Таймеры в мобилках везде и их особенно весело тестировать: почти всегда они ломаются, иногда даже забавным образом. Вот несколько кейсов для их проверки.
Один из моих любимых. Подождать пока таймер истечет при открытом окне. Пойдёт ли он в обратную сторону? Остановится на 0? Крашнет приложение? Всё это случалось на моем опыте.
Особого внимания требуют таймеры награды. Достаточно нажать на кнопку сбора в ту же секунду, когда она доступна - и готова ошибка рассинхронизации. Можно попробовать собрать несколько наград очень быстрым тапом, либо прервав сбор отключением сети.
Сокращение времени ожидания за кристаллы. Тут огромный простор для ошибок. Перечислю некоторые из них:
Неправильный расчёт кристаллов, особенно при дробном остатке
Рассинхронизация при быстрых повторяющихся действиях
Возврат кристаллов при сохранении купленных на них сокращений
Отсутствие обновления цены, при изменении времени онлайн
Ошибки при малых значениях времени
Зависит ли таймер от фреймрейта. Рассинхронизируется ли, если оставить приложение открытым надолго? Таймеры можно попытаться взломать банально ускорив приложение через взломщик: если сервер слишком доверяет клиенту, это сработает.
Не стоит забывать про UX. Отсчитываются ли секунды, и не прыгает ли при этом элементы. Если задача на время, учитывается ли 0 как победа. Можно даже замедлять таймер ближе к концу, чтобы нагнать напряжения.
Бывает полезным этапе проверки спецификаций задавать определенные вопросы. Должен ли таймер сразу пересчитываться при изменении времени в конфиге? Какие максимальные значения он поддерживает? Ну и конечно всегда стоит запрашивать инструменты модификации, особенно если это таймер конца сезона, который завязан на дату.
Всегда найдутся баги, которые, к удивлению тестировщиков, могут просочиться сквозь проверки. Одним из таких для меня стало быстрое сокращение за харду улучшения главного здания с первого на второй уровень. Воспроизведение требовало очень конкретной скорости, и было исключительно на данном уровне.
В базе знаний, я стараюсь иметь чеклист стандартных проверок для таймеров с примерами ошибок и пояснениями природы их возникновения. Это полезно для обучения начинающих тестировщиков и демонстрирует необходимость негативного мышления.