Как мы реализовали нагрузочное тестирование игрового сервера

автор Дмитрий Черемнов

9 Июн 2012

...По команде, не ведая сомнений и страха поражения, несколько тысяч клонов ринулись по узким сетевым коридорам, чтобы сойтись в поединке. И победить. Клоны — не мастера боя. Но они четко выполняют инструкции, которые приведут их к цели.

Нет, это не фрагмент легендарной саги «Звездные войны», это алгоритм нагрузочного тестирования сервера, построенного на технологиях Java, который наша команда использовала в ходе разработки игрового приложения «Покер» для социальных сетей. Наш алгоритм не только прост в реализации, но и обеспечивает неплохой уровень умения автоматическим игрокам, позволяя тестировать функции приложения наравне с игроками реальными.

Задачи и особенности алгоритма нагрузочного тестирования игрового сервера

На начальной стадии разработки flash-клиента игры нам потребовалось протестировать возможности сервера и оценить его производительность. Для решения задачи и проведения интеграционного и нагрузочного тестирований игрового сервера было решено описать алгоритм инструкций для автоматических игроков в покер или просто «ботов».

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

Суть алгоритма

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

Как вы знаете, правила покера выделяют следующие выигрышные комбинации:

  • Старшая карта;
  • Пара — две карты одного достоинства;
  • Две пары — две пары  одного достоинства;
  • Сет — три карты одного достоинства;
  • Стрит — последовательность из пяти карт разной масти;
  • Флеш — любые пять карт одной масти;
  • Фул-хауз — три карты  одного достоинства  и две карты тоже одного достоинства;
  • Каре  — четыре карты одного достоинства;
  • Стрит-флеш  — последовательность из пяти карт одной и той же масти;
  • Флеш-рояль — пять старших карт какой-либо одной масти.

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

Тест выигрышных комбинаций

HIGH_CARD 17.497% 34994
ONE_PAIR 43.847% 87694
TWO_PAIR 23.4185%

46837

SET 4.8045% 9609

STRAIGHT

FLUSH

4.653% 9306
FULL_HOUSE 2.989% 5978
FULL_HOUSE 2.581% 5162

QUADS

STRAIG

0.175% 350
HT_FLUSH 0.033% 66
ROYAL_FLUSH 0.0020% 4

HandsNumber: 200 000

Time: 3172

В данном тесте идет расчет 200 000 случайных комбинаций из 7 карт, и представлено число выпадения комбинации в процентном и численном соотношениях, например, сет выпал в тесте 9609 раз в 4.8045% случаев.

Результаты тестирования

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

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

  • 0 Репосты

Комментарии

Фильтр

Закрыть

Технологии

Индустрии