
Тестування мобільних додатків у Луцьку — це не «останній етап перед релізом», а паралельний процес, який починається разом із дизайном і бекендом. Завдання просте й водночас складне: гарантувати, що людина з бюджетним Android у маршрутці й власник свіжого iPhone у кав’ярні на проспекті Волі отримають однаково стабільний досвід. Мій підхід завжди один: заздалегідь зафіксовані критерії якості, реальні пристрої, автоматизація там, де вона окупається, і прозорі метрики, які «говорять» мовою бізнесу, а не тільки техніки.
1. Стратегія та критерії якості: що саме вважаємо «готовим»
Щоб не сперечатися наприкінці, домовляємося на старті: які сценарії є критичними (реєстрація, пошук, кошик/заявка, оплата, відстеження доставки), що таке «успішно» для кожного з них, які пороги прийнятності ми тримаємо перед релізом. Для мобільних зручно мислити «пірамідою» перевірок: багато юніт-тестів на бізнес-логіку, менше інтеграційних на зв’язки з бекендом, ще менше — E2E із реальними кліками. Окремо фіксуємо нефункціональні SLO, що відчуває користувач: crash-free rate не нижче 99,5%, ANR на Android нижче 0,1%, холодний старт у межах кількох секунд, конверсія з онбордингу до першої цільової дії з тижневим трендом. Коли «рамка» є, команда не навантажує реліз випадковими правками — лише те, що рухає нас до критеріїв.
2. Пристрої, середовища й дані: тестуємо так, як користуються
Емулятори корисні, але правду показують «живі» девайси. Складаємо луцьку «матрицю пристроїв»: популярні моделі Android із різних цінових сегментів плюс кілька актуальних iPhone; додаємо різні мережеві умови — 3G/4G, перевантажений Wi-Fi, відсутність інтернету. Середовищ має бути щонайменше два: «пісочниця» зі схожими на реальні даними (маскованими) і передрелізний стенд із ключовими інтеграціями. Тестові дані готуємо як фікстури: акаунти з різними ролями, кошики з «незручними» товарами, валідні та невалідні адреси, кейси з післяплатою й поверненнями. На практиці це знімає 80% «нічних сюрпризів», бо додаток проходить ті самі шляхи, що й користувачі від Стиру до Київського майдану.
3. Автоматизація і CI/CD: швидкі прогони щодня, а не «великий тест у п’ятницю»
Кожен пуш запускає короткі юніт- і інтеграційні тести; раз на добу — ширший набір E2E на «пісочниці». Для ризикових інтеграцій використовуємо контрактні тести між додатком і BFF, щоб зміни схем не ламали клієнт. Збірка має вміти вмикати/вимикати фічі без нового релізу — фічефлаги дозволяють канарейкові запуски на 10–20% користувачів у Луцьку, а проблемні зміни можна миттєво «погасити». Логи та подієва аналітика вмикаються з першого дня: crash-репорти, помилки платежів, час оформлення замовлення, глибина сесій — так ми бачимо, що реально відбувається «в полі», а не лише в лабораторії. Особисто я завжди додаю сповіщення на порушення SLO, а не на «будь-яку помилку», інакше команда швидко оглухне.
4. Нефункціональні перевірки: продуктивність, офлайн, батарея й доступність
Користувачам байдуже до красивих екранів, якщо додаток «гальмує». Заміряємо холодний старт, час від відкриття кошика до відправлення замовлення, стабільність FPS у «важких» місцях, споживання пам’яті. Перевіряємо сценарії без мережі: кошик, збережені адреси, чернетки — усе має працювати офлайн із тихою синхронізацією, щойно з’являється зв’язок. Слідкуємо за батареєю: фонові оновлення обмежуємо, геолокацію вмикаємо лише в моменті й вимикаємо після дії. Доступність — це не «опція»: контраст, масштаб шрифту, фокус-стани елементів і зрозумілі голосові описи. У польових умовах це дуже відчутно: коли людина в маршрутці за три торкання завершує замовлення, значить ми потрапили в «солодку точку» швидкості й простоти.
5. Тестування платежів і безпеки: від ідемпотентності до сценаріїв повернень
Оплати — найвразливіший вузол, тож перевіряємо не лише «успішно», а весь «зоопарк» реальних подій. Ідемпотентність клієнта й бекенду: подвійний тап «Оплатити», повторний webhook, повтор завдяки поганому зв’язку — жодних дубльованих списань і замовлень. Негативні сценарії: відхилена картка, 3DS-перевірка, таймаут платіжного шлюзу, часткове повернення, повне повернення. Перевірка комісій і суми «до копійки»: мобільний показує те саме, що й backend і чек. Журнали подій — без персональних даних, лише технічні ідентифікатори; ключі доступу — короткоживучі, із чіткими правами. Для Луцька корисно змоделювати післяплату: зміна статусу «оплачено при отриманні», рух грошей у P&L, поведінка з поверненнями; у житті це рятує від кілометрів листування «де мої кошти».
6. Перевірки логістики й інтеграцій: ТТН, вебхуки, SLA і «незручні» адреси
Логістика ламається там, де дані «не склеюються». Тому створення ТТН тестується на реальних шаблонах адрес Луцька (вулиці з однаковими назвами, офіси в бізнес-центрах, самовивіз біля проспекту Волі). Статуси доставки мають іти в додаток подіями: «прийнято», «у дорозі», «прибуло», «видано». Ми проганяємо сценарії затримок і повторних вебхуків, перевіряємо ідемпотентні обробники та поведінку сповіщень: клієнт бачить правду, не «гойдалку». Нічні синхронізації з каталогами й цінами — окремий прогін: дельта-зміни, контрольні суми, відкат при розбіжності. Інтеграції з CRM і платіжками — через контрактні тести: якщо змінилась схема, збірка не піде далі. На практиці це знімає «нічні марафони» перед піками попиту: системі однаково комфортно в будень і на свята.
7. Бета-програма в Луцьку: кого долучати і як збирати користь
Найкращий бета-тестер — ваш реальний клієнт. Запрошуємо 30–50 активних користувачів різних сегментів: постійники самовивозу, ті, хто замовляє доставку у вечірні години, нові клієнти з реклами. Даємо просту місію на 10–15 хв: оформити замовлення, змінити адресу, переглянути статус доставки, спробувати оплату; просимо голосовий фідбек і дозволяємо анонімну телеметрію. У додатку вмикаємо легкий збір журналів по кореляційному ID (одним тапом «Надіслати відгук»). Особисто я прошу людей спробувати і в «погані» години: обідній пік у центрі, вечірній транспорт; саме там спливають правдиві затримки та помилки, яких не видно в офісі.
8. Передрелізний контроль і план на 30 днів
Передрелізний чек — це відповідь «ми готові» без романтики. Crash-free не нижче узгодженого порогу, ANR у нормі, холодний старт — у межах цільових секунд; воронка «онбординг → перша дія → оплата» без провалів, а логістичні статуси приходять за SLA. Документація оновлена: політики, сторінки стора, runbook для підтримки. Далі короткий план. Тиждень 1 — узгодити критерії якості, скласти «матрицю пристроїв», підняти «пісочницю» з маскованими даними, описати тест-кейси під критичні потоки. Тиждень 2 — автоматизувати юніт/інтеграційні прогони, додати контрактні тести, зібрати «незручні» адреси та платіжні сценарії, увімкнути телеметрію. Тиждень 3 — бета з 30–50 користувачами, канарейковий викат на 10–20%, фікс проблем, повторні прогони продуктивності й офлайн-сценаріїв. Тиждень 4 — передрелізний аудит (краші, ANR, метрики воронок), оновлення сторінок стора, запуск із готовими фічефлагами на випадок «раптових» піків і коротким планом підтримки на перші два тижні. На виході якість не «сподівається», а підтверджена цифрами й поведінкою додатка в реальних умовах міста.
Висновок
Гарантована якість мобільного додатка народжується не «на фініші», а з першого дня — коли є чіткі критерії готовності, реальна матриця пристроїв, автоматизовані прогони та зрозумілі SLO, що відчуває користувач. Якщо юніт- і інтеграційні тести крутяться щодня, контрактні перевірки страхують інтеграції, а телеметрія показує краші, ANR і воронки, то реліз перестає бути лотереєю.
Практично це означає: платежі ідемпотентні, навіть за «поганого зв’язку» дубль не проскочить; логістичні статуси приходять подіями й не плутають клієнта; офлайн-сценарії (кошик, адреси, чернетки) зберігають дію, а не нерви; продуктивність виміряна в секундах, а не у враженнях. Польова бета в Луцьку й канарейковий викат дають чесний сигнал раніше, ніж проблеми вриваються в сезонний пік.
Якщо звести все до одного маршруту, він простий: зафіксувати критерії якості та SLO, підняти «пісочницю» з правдоподібними даними, автоматизувати критичні тести, увімкнути телеметрію, провести коротку бета-програму й викотити на частину аудиторії з можливістю швидкого відкату. Такий ритм робить якість передбачуваною, а релізи — спокійними навіть у дні, коли на проспекті Волі черги йдуть одна за одною.