Тестування та QA
Ми не раз бачили, як проєкт на фінішній прямій перетворюється на кошмар: на машині розробника все літає, а на Samsung Galaxy A12 — 15 FPS і вильоти, на iPad Air — мильні текстури. Без вибудуваного QA-процесу тестування ігор стає лотереєю. Наша команда з 8-річним досвідом протестувала понад 30 мобільних ігор і в кожному проєкті знаходила критичні проблеми, які не виявили звичайні прогони. Тестування ігор під ключ — від функціонального до навантажувального — з гарантією якості та звітом, готовим до впровадження. Оцінимо ваш проєкт за 3 дні — зв'яжіться з нами.
Як автоматизувати тестування в Unity?
Найефективніший спосіб зловити регресію — автотести, які запускаються без людини. У Unity це Unity Test Framework (UTF) на базі NUnit. Два режими.
Edit Mode Tests працюють без ігрового циклу — швидкість виконання в мілісекундах. Підходять для формул урону, розрахунку економіки, валідації конфігів. Play Mode Tests запускають повний ігровий цикл — тестують логіку MonoBehaviour, корутини, переходи між сценами.
Приклад:
[UnityTest]
public IEnumerator PlayerTakeDamage_HealthReduces()
{
var go = new GameObject();
var health = go.AddComponent<HealthComponent>();
health.Initialize(100);
health.ApplyDamage(30);
yield return null;
Assert.AreEqual(70, health.CurrentHealth);
}
Покривайте те, що ламається найчастіше: система збережень, економіка, бойова логіка. 100% покриття не потрібне — достатньо критичних шляхів. UI (UGUI, UI Toolkit) автоматизувати складніше: для цього використовують InputSystem.QueueEvent або Appium на мобільних платформах. Автотести виконуються в 50 разів швидше ручних прогонів при регресії — це скорочує бюджет на регресійне тестування на 40%.
Чому профілювання на реальному пристрої критичне?
Тести не ловлять проблеми продуктивності. Для цього потрібен профілювальник на цільовій платформі. Unity Profiler — стартова точка. Ключові кроки:
- Профілюйте на пристрої, а не в редакторі — Editor додає оверхед. Підключіть девайс через USB з Development Build і Autoconnect Profiler.
- Дивіться Main Thread і Render Thread окремо. Типові проблеми:
-
Physics.FixedUpdate>2ms — складна фізика -
Canvas.BuildBatchна кожному кадрі — зайві Dirty виклики UI -
GC.Collect— виділення пам'яті в гарячому шляху (всередині Update)
-
- Використовуйте ProfilerMarker для локалізації:
using Unity.Profiling;
static readonly ProfilerMarker k_PathfindMarker = new ProfilerMarker("Pathfinding.Calculate");
void UpdateAI()
{
using (k_PathfindMarker.Auto())
{
// pathfinding code
}
}
Memory Profiler (пакет com.unity.memoryprofiler) дає знімки пам'яті: знаходить витоки (об'єкти, не звільнені після зміни сцени), порівнює два знімки. Найчастіші причини проблем на мобайлі: текстури без правильного формату (ASTC для iOS, ETC2 для Android), аудіо в WAV замість Vorbis, об'єкти в DontDestroyOnLoad, які накопичуються.
Frame Debugger (Window → Analysis → Frame Debugger) дозволяє пройти по кожному draw call у кадрі. Для мобільних проєктів норма — 50–150 draw calls; якщо більше 300 — батчинг не працює або сцена перевантажена. Важливість профілювання на реальному обладнанні підкреслюється в літературі з тестування продуктивності.
Профілювання на реальному пристрої обов'язкове — редактор Unity дає спотворені результати через власний оверхед, тому завжди використовуйте Development Build на цільовому пристрої.
| Інструмент | Мета | Що перевіряє |
|---|---|---|
| Unity Profiler | CPU/GPU | Час виконання потоків, алокації, GC |
| Memory Profiler | Пам'ять | Витоки, розподіл за типами |
| Frame Debugger | Графіка | Draw calls, батчинг, overdraw |
Функціональне та регресійне тестування
Функціональне тестування будується на тест-планах: для кожної фічі — очікуваний результат, кроки відтворення, критерії проходження. Покриваємо smoke, sanity і acceptance-тести. Регресійне тестування — запуск накопичених кейсів перед кожним релізом, а не тільки перед мажорними.
Інструменти управління: TestRail, Qase, Zephyr. Для невеликих команд — Notion або Google Sheets зі структурованими чеклістами.
Тестування на реальних пристроях
Емулятори не відтворюють тепловий дросселінг, реальний GPU та обмеження пам'яті. Мінімальний набір — 20+ пристроїв усіх сегментів:
| Категорія | Приклади | RAM |
|---|---|---|
| Low-end Android | Snapdragon 662 (Samsung A12, Redmi Note 10) | 3 ГБ |
| Mid-range Android | Snapdragon 720G/765G | 6 ГБ |
| Flagship Android | Snapdragon 888+ | 8 ГБ |
| Low-end iOS | iPhone SE 2 | 3 ГБ |
| iOS середній | iPhone 13/14 | 4–6 ГБ |
| iPad | Останнє покоління | 6–8 ГБ |
Для масштабного тестування — хмарні ферми: Firebase Test Lab, BrowserStack App Automate, AWS Device Farm. Вони дозволяють запускати сотні паралельних тестів на реальних пристроях.
Навантажувальне тестування (мультиплеєр)
Мета — знайти деградацію сервера до релізу. Інструменти: k6 (WebSocket/HTTP API), Gatling (складні сценарії зі станом). Для специфічних протоколів пишуть кастомний stress-клієнт на Go або C#.
Параметри перевірки:
- Поведінка при піковому CCU (concurrent users) — до 1000+ CCU
- Деградація латентності під навантаженням (p95 latency)
- Витоки пам'яті на сервері за 72+ години роботи
- Graceful degradation при відмові одного з вузлів
Краш-репортинг та моніторинг
Після релізу QA продовжується через моніторинг. Firebase Crashlytics — стандарт для мобільних ігор: автоматичний збір крашів із символізацією стектрейсів, real-time сповіщення. Sentry — для серверних компонентів і WebGL. ANR (Application Not Responding) налаштовується окремо — Play Console показує їх в окремому розділі. Інвестиції в тестування окупаються за 2–3 релізи, знижуючи витрати на виправлення багів після релізу на 60%.
Що входить у нашу роботу
- Детальний план тестування (чек-лист, сценарії, пріоритети)
- Набір автоматизованих тестів (економіка, збереження, критичні шляхи — покриття 70%)
- Профілювання CPU/GPU/пам'яті зі звітом по кожному багу
- Ручне тестування на 20+ реальних пристроях (low-end / mid-range / flagship)
- Навантажувальне тестування сервера (до 1000+ CCU протягом 12 годин)
- Дашборд з метриками та історією прогонів
- Навчання вашої команди основам автотестування та профілювання
Отримайте консультацію щодо вашого проєкту — ми оцінимо поточну збірку та запропонуємо план оптимізації.
Процес роботи
- Аналіз — вивчаємо архітектуру, збираємо метрики поточної збірки, визначаємо цілі по FPS та стабільності.
- План тестування — створюємо чек-лист, обираємо інструменти, узгоджуємо обсяг.
- Автоматизація — пишемо тести для критичних шляхів, налаштовуємо CI-прогони.
- Ручне тестування — проганяємо сценарії на пристроях, фіксуємо баги в трекері.
- Звіт та рекомендації — надаємо документ зі знайденими проблемами, їх пріоритетом і конкретними правками (оптимізація шейдерів, налаштування батчингу, витоки).
Наші метрики
- 8+ років досвіду в геймдеві (Unity, Unreal, мобільні/PC/консолі)
- 30+ протестованих мобільних ігор
- Середнє підвищення FPS після оптимізації — 30%
- Скорочення часу регресійного тестування — 40%
- Гарантія: всі бази з Critical/High пріоритетом виправляються до релізу
Чек-лист передрелізного тестування
- [ ] Профілювання CPU/GPU на low-end пристрої (30 хв ігрової сесії)
- [ ] Перевірка витоків пам'яті через Memory Profiler (порівняння знімків до/після сцени)
- [ ] Frame Debugger — не більше 200 draw calls, перевірка статичного батчингу
- [ ] Навантажувальний тест сервера: 500+ CCU, тривалість 12 годин
- [ ] ANR-моніторинг на Android (окремо від крашів)
- [ ] Функціональні автотести на систему збережень та економіку
Типові помилки в QA-процесі
- Тестування лише на флагманах — більшість гравців на mid-end і low-end.
- Відсутність автотестів для економіки та збережень — вони ламаються при будь-якому рефакторингу.
- Пропуск навантажувального тестування сервера — гра виходить, набирає 10k DAU і сервер лягає.
- Регресія тільки перед мажорними релізами — критично перед кожним публічним оновленням.
Замовте тестування ігор під ключ. Ми оцінимо ваш проєкт за 3 дні та запропонуємо план з гарантією результату. Пишіть — розберемо вашу збірку безкоштовно.






