Як тестуються RNG і механіка виграшів
Чесність слота тримається на двох опорах: якісний RNG (генератор випадкових чисел) і коректна механіка виграшів, яка без зміщення картує випадкові числа в результати. Тестування - це не один тест «на удачу», а ціла система: криптографічна стійкість RNG, статистичні перевірки, монте-карло симуляції RTP/волатильності, детерміновані сиди для відтворюваності, аудит-логи і сертифікація в незалежних лабораторіях. Нижче - повний, практичний конвеєр.
1) Архітектура RNG: з чого складається «випадковість»
Джерела ентропії: ОС (CSPRNG/'/dev/urandom', CryptGenRandom), апаратні TRNG (де доступні), системні шуми.
Алгоритм: серверний CSPRNG (наприклад, CTR_DRBG/HMAC_DRBG) або високоякісний PRNG (PCG/Xoshiro) з контролем незалежності потоків.
Політика посівів (seed): первинний seed з CSPRNG, окремі потоки на сесію/гру/фічу, захист від повторного використання, безпечне зберігання (HSM/сек'юр-сховище).
Сервер → клієнт: результат обчислюється на сервері, клієнт - тільки візуалізація; будь-які «прелюдії» (near-miss/тизери) не впливають на результат.
Незалежність спінів: ніякого автопідстроювання під баланс; відсутність «стрипів удачі».
Контрольне питання: на якій стадії приймається результат? Відповідь: до відтворення анімації, з фіксуванням в незмінний лог.
2) Картування RNG → результат (без зміщення)
Правильна розгортка випадкових чисел у вазі символів/комірок - ключ до відсутності «модулярного» та інших зсувів.
Однакові вибірки: якщо потрібно число з діапазону «[0, N)», використовуємо відкидання (rejection sampling), а не «rand ()% N», щоб виключити bias при «2 ^ k% N ≠ 0».
Зважені вибірки: кумулятивні розподілу (CDF) або алгоритм Alias (Vose) для швидких вибірок по вагах.
Багаторазові тягнучі: окремий виклик RNG на кожен барабан/комірку/подію, а не «розкидання» одного числа на все поле.
Гарантії на рівні коду: property-based тести на інваріанти («сума частот ≈ вагах», «жоден сегмент не недопредставлений»).
3) Що саме перевіряємо: цілі та метрики
RTP (Return to Player) - середня віддача,%- Волатильність/дисперсія - розкид результатів
- Hit Rate - частота будь-якого виграшу
- Bonus Frequency - частота входу в бонус
- Max Exposure - теоретичний максимум (x від ставки)
- Стаціонарність - відсутність дрейфу розподілів у часі/релізах
4) Статистичні тести RNG (off-line батереї)
Використовуйте «баттереї» на довгих послідовностях (10⁸+ біт/значень), окремо по кожному потоку RNG:- Моменти та кореляції: монобіт-тест (частка 0/1), автокореляція (lag k), серійні та парні кореляції.
- Тести NIST SP 800-22: frequency, block frequency, runs, longest run, FFT, approximate entropy.
- TestU01/Dieharder: додаткові «стрес-тести» (birthday spacings, matrix rank, random excursions).
- KS/ χ ² по відрах: порівняння емпіричної і теоретичної рівномірності на «[0,1)» і на цільових діапазонах.
- Покер-тести (на групи біт) і «gap-тести».
Критерії приймання: p-values в допустимому інтервалі (не «занадто ідеальні»), відсутність систематичних провалів на фіксованих сид-значеннях, стабільні результати на різних платформах/компіляторах.
5) Статистика картування (game-specific)
Навіть ідеальний RNG можна зіпсувати неправильним маппінгом. Перевіряємо саме розподілу результатів:- Частоти символів/комірок: χ ² на збіг з вагами (по барабанах/кластерах/монетах).
- Комбінації/лінії: біноміальні інтервали для виграючих комбінацій; порівняння з еталонними таблицями.
- Бонус-тригери/ретригери: інтервали між подіями (геометричне/негативне біноміальне) + KS/AD-тести.
- Незалежність барабанів: крос-кореляції між позиціями (виключаємо «злипання»).
6) Монте-Карло симуляції RTP/волатильності/частот
Відтворювані симуляції - ядро QA математики.
1. Налаштування: фіксуємо версію математики, сиди, ваги/стрінпи/таблиці виплат.
2. Прогін: ≥10⁷ - 10⁸ спінів для стабільності хвостів; окремо - довгі бонус-сесії.
3. Оцінки та інтервали:- Оцінка RTP: (\hat {RTP} =\bar {X}), де (X) - виграш в xBet.
- Довірчий інтервал (CLT): (\hat{RTP} \pm z_{\alpha/2}\cdot s/\sqrt{n}).
- Необхідна вибірка: (n\approx (z\cdot s/\varepsilon) ^ 2) для похибки (\varepsilon).
- Для Hit Rate/Bonus Rate - біноміальні (Вілсон) інтервали.
- 4. Хвости: p95/p99/p99. 9 виграшу за спин і за бонус; контроль «max exposure».
- 5. Стабільність: чутливість до ± δ змін ваг («robustness runs»).
7) Детермінованість і відтворюваність
Детерміновані сиди для QA: один і той же сид → ті ж результати (golden-run).
Ідентичні результати на платформах: фікс версії компілятора/бібліотек, endianness-чек, FPU-режими.
Сейв-стейти: відновлення перерваного бонусу/спину без «перекидання» результату.
Реплей-інфраструктура: запуск «проблемного» тікету по seed + step для аналізу.
8) Сек'юріті і анти-tamper
WORM-логи (або мерклі-хеш-ланцюжки): запис результату і вхідних параметрів до анімації.
Підписи білдів і math-листів: версія таблиць виплат/ваг - в маніфесті з підписом.
Контроль цілісності клієнта: обфускація, перевірка хешів, анти-інструментація.
Server-authoritative: тільки сервер вирішує результат; клієнт не містить «прихованих» перевірок.
9) Навантажувальні та довготривалі тести
Soak-тести: сотні мільйонів спінів з ротацією сидів; контроль витоків пам'яті/ресурсів.
Висока конкуренція: паралельні сесії RNG-потоків → відсутність гонок/lock contention.
Мережеві деградації: повторні запити/таймаути не змінюють результат спіна.
10) Валідація UX-інваріантів (чесність інтерфейсу)
Near-miss: анімації не змінюють ймовірність; заборона «підтасовки» зупинок заради драми.
Швидкість спина: прискорення/турбо не впливає на RNG.
Навчальні/демо режими: або чесні, або позначені і математика відокремлена.
11) Пост-релізний моніторинг (статконтроль в проде)
SPC-карти/контрольні графіки: RTP по вікнах часу/казино/гео - в допустимих коридорах.
Дрифт-детекція: PSI/JS-дивергенція розподілів виграшу/частот.
Тривоги: відхилення → блокування гри/ринку, рекалькуляція логів, звіт.
12) Сертифікація та документація
Підготуйте пакет для лабораторії (GLI/eCOGRA/BMM/iTech та ін.):- Опис RNG: алгоритм, джерела ентропії, політика посівів, незалежність потоків.
- Вихідники/бінарники RNG-модуля (або інспекційні артефакти) + тест-журнали.
- Math Sheet: таблиці виплат, ваги, RTP-брейкдаун (база/бонус/джекпот), max exposure.
- Звіти симуляцій: обсяг, метрики, довірчі інтервали.
- Логи/реплеї: формат, підписи, retention-політика.
- Версіонування: незмінні хеші артефактів (білд, асети, math).
13) Часті помилки і як їх уникнути
'rand ()% N'і модульне зміщення. Використовуйте rejection/alias.
Один RNG на все без потоків. Робіть незалежні стріми, уникайте прихованих кореляцій.
Картування «за красивими індексами». Завжди звіряйте частоти з вагами χ ² -тестами.
Малі симуляції. 10⁶ - це «перевірка димом», для хвостів потрібні 10⁸.
Відсутність детермінованих сидів. Без них не відтворити баги.
Клієнт вирішує результат. Тільки сервер, тільки WORM-логи.
Немає пост-моніторингу. Реліз - не кінець, а початок статистконтролю.
14) Формули і міні-шпаргалка
χ ² на рівномірність (k відер):[
\chi^2=\sum_{i=1}^k \frac{(O_i-E_i)^2}{E_i},\quad E_i=n/k
]
Порівняти з (\chi ^ 2 _ {k-1}).
KS для безперервного розподілу:[
D=\sup_x F_n(x)-F(x)
]
Довірчий інтервал RTP (CLT):
[
\hat{\mu}\pm z_{\alpha/2}\frac{s}{\sqrt{n}}
]
Вілсон для частки p (Hit/Bonus rate):
[
\frac{p+\frac{z^2}{2n}\pm z\sqrt{\frac{p(1-p)}{n}+\frac{z^2}{4n^2}}}{1+\frac{z^2}{n}}
]
15) Чек-листи
Техдизайн RNG
- CSPRNG/TRNG джерело; документована політика seed/stream
- Незалежні потоки, відсутність shared-state гонок
- Rejection/alias замість'% '
- Server-authoritative; фікс результату до анімації
- WORM-логи, підписи артефактів
Статистика та симуляції
- Баттереї NIST/TestU01/Dieharder - пройдені
- χ ²/KS/ранові - на маппінгу результатів
- ≥10⁷ - 10⁸ спінів; CI по RTP/частотах в допусках
- Хвости p95/p99/p99. 9 і max exposure під контролем
- Robustness-прогони при ± δ до ваг
QA/Інженерія
- Детерміновані сиди; реплеї тікетів
- Soak/навантаження; стабільність пам'яті/CPU/латентності
- Резюм спина/бонусу без зміни результату
- Крос-платформна ідентичність результатів
Комплаєнс/Документи
- RNG специфікація + вихідні/артефакти
- Math Sheet + звіти симуляцій
- Політики логування/ретенції/аудиту
- Версіонування та хеші білдів/таблиць виплат
Тестування RNG і механіки виграшів - це інженерія статистики і безпеки. Ви захищаєте гравців і бренд, коли:
1. RNG стійок і правильно посіяний, 2. картування результатів без зміщення і відтворюється, 3. RTP/частоти/хвости підтверджені великими симуляціями, 4. результат фіксується і аудіюється до анімації, 5. пост-релізний моніторинг ловить будь-який дрифт.
Так слот залишається чесним, передбачуваним (в статистичному сенсі) і стійким до маніпуляцій - а ви проходите сертифікацію і будуєте довгострокову довіру.