10+ років комерційної розробки
4+ років у TENTENS Tech
Не боюсь вриватись у legacy
проєкти і робити їх Great Again
Люблю яхтинг, лижі і картинг
АНДРІЙ
ЮРЧЕНКО
Senior Backend
Developer at TENTENS
Tech
TENTENS Tech
40+
Деплоїв на день
Ми займаємось розробкою платформ для
комунікації користувачів
10
Команд розробки
15К
RPS
Пікове навантаження,
яке продовжує
зростати
ТЕХНОЛОГІЧНИЙ
СТЕК
PHP8.2+ / GoLang
MySQL, Memcached, MongoDB
Frameworks: Yii2, Symfony
Комунікація: GRPC, JsonAPI, RabbitMQ,
GraphQL
Microservices, Clean Architecture, CQRS, DDD,
Hexagonal Architecture
ЧИ ТРАПЛЯЛОСЬ
З ВАМИ?
Вас будить дзвінок з роботи серед ночі
ЩО ЗАБИРАЄ СОН
ІНЖЕНЕРА
А чи працює це?
НЕВИЗНАЧЕНІ
СТЬ
НЕВПЕВНЕНІС
ТЬ
Як це працює?
Середньостатистични
й цикл у вакуумі
ЖИТТЄВИЙ
ЦИКЛ ФІЧІ
Усі співпадіння вигадані
01
02
Отримали оформлену задачу
Розібрались, що треба зробити
Написали код і тести
Пройшли код-ревью
Протестували з тестувальником
функціонал
Доставили код в production
Протестували з тестувальником
функціонал на production
PROFIT!
ЖИТТЄВИЙ
ЦИКЛ ФІЧІ
ПРОБЛЕМ
И?
ТЕСТУВАЛЬНИ
КИ ВЕСЬ
СПРИНТ
ТЕСТУВАЛЬНИ
КИ В
ОСТАННІЙ
ДЕНЬ
СПРИНТА
КОШМАР
РОЗРОБНИКА
Ми не можемо завтра
доставити задачу, бо не
встигаємо
її протестувати
Тестувальник
стає вузьким
місцем
Кожній команді
потрібен
тестувальник,
а може й декілька
Розмита
відповідальніст
ь за фічу
Фрагментовані
знання – кожен знає
свою частину пазлу
01 02 03 04
ПРОБЛЕМ
И
РІШЕННЯ
GENERAL QUALITY
ASSURANCE
ENGINEER
Команда самостійно проводить
тестування
Тестувальник
стає вузьким
місцем
Кожній команді
потрібен
тестувальник,
а то і декілька
Розмита
відповідальніст
ь за фічу
Фрагментовані
знання – кожен знає
свою частину пазлу
01 02 03 04
ПРОБЛЕМ
И
ЧИ ТРАПЛЯЛОСЬ
З ВАМИ?
Ви отримали задачу, але гадки не
маєте, що, в біса, відбувається
Вимоги не
зафіксовані
Не має чіткого
технічного
рішення
Потрібно
внести зміни в
існуючий
функціонал, але
він знаходиться
в іншій зоні
відповідальност
і
Фрагментовані
знання – кожен знає
свою частину пазлу
ПРОБЛЕМ
И
01 02 03 04
НАШІ ПІДХОДИ
BUSINESS
REFINEMENT
TECH
REFINEME
NT
Зустріч, де ми
обговорюємо вже описану
бізнес-ініціативу
Узгоджуємо вимоги
і вирішуємо: чи можемо
реалізувати
Якщо задача виконується в
декількох зонах – описуємо System-
design
Збираємо всі технічні деталі: як
саме будемо реалізовувати фічу та
які зміни в які саме зони будемо
вносити
МИ ПИШЕМО КОД
Перейдемо до тестування
ЯК МИ ТЕСТУЄМО
Запуск статичних тестів (code style, deptrack)
Unit + Integration
Code review
Ручне тестування на stage (postman, manual)
Autotests
Smoke – швидкі тести, які тестують критичні
сценарії
Regression – довгі UI-тести, які тестують систему
з точки зору користувача
UNIT TEST
Тест однієї функціональної одиниці
Залежності ізольовані
Фокус: доменні моделі, доменні
сервіси, мапери, валідатори запитів
AAA PATTERN
Triple A pattern – це патерн для структурування
тестів, щоб вони були простими і зрозумілими.
*
ARRANGE
(Підготовка)
Підготовка вхідних
даних та залежностей
ACT
(Дія)
Виклик методу,
який тестуємо
(Перевірка)
Перевіряємо чи збігається
фактичний результат
з очікуваним
ASSERT
AAA PATTERN
INTEGRATION TEST
Тестуємо use-caseʼи, інтеграції із зовнішніми
системами (Mysql), або комплексну логіку.
Залежності не ізольовані або ізольовані частково.
Фокус: залежності збираються коректно, процес
виконується очікувано, перевіряємо тільки те, що
важливо.
Потребують екосистеми для свого існування,
відносно дорогі.
ТЕСТОВА
ДОКУМЕНТАЦІЯ
Розробники та QA-інженери описують
сценарії тестування
Єдина точка збереження знань дозволяє
швидкий шерінг знань між розробниками
Розуміння, що покрито автотестами, а що
ні
Система керування тестами: manual /
autotest
СТРАТЕГІЯ
ТЕСТУВАННЯ
ЗАЛЕЖИТЬ ВІД:
Стадії розвитку
компанії
Архітектур
и вашого
застосунку
Структури
компанії
Ресурсів
компанії
Задачі
01 02 03 04 05
ПОРІВНЯЛЬНА
ТАБЛИЧКА
Покриття Фокус Швидкість Стабільність Цін
а
Unit Функція,
класс
Логіка в
ізоляції
Швидкі Висока $
Integration Адаптер, use-
case, endpoint
Взаємодія та
відповідність
Середня Середня $$
E2E UI, endpoint Бізнес-
сценарій
Повільні Низька $$$$
ЧИ ТРАПЛЯЛОСЬ
З ВАМИ?
Доставили задачу в
production та поклали його
PRODUCTION
ПІСЛЯ
ДЕПЛОЮ
В
МАЙБУТНЬОМУ
Код має вміти: як швидко
потрапити в production, так
і швидко його покинути
Швидко зрозуміти
наявність проблеми,
локалізувати
її, і розуміти як її виправити
Зрозуміти, що проблема
зʼявилась і в чому вона полягає
Швидко відреагувати
OBSERVABILITY
Бізнесові метрики
Здоровий сон не можливий без
розуміння, що зараз відбувається
*
Інфраструктурні метрики
Application (product)
метрики
Alert
Логи
Трасування
ФОРМУЛА СНУ
ВИСНОВК
И Формуйте процеси, що усувають невизначеність на
кожному етапі розробки.
Розробляйте тестову стратегію так, щоб кожна зміна
викликала лише впевненість, а не страх.
Забезпечуйте повну видимість роботи системи.
Ідеального підходу немає. Є те, що ефективно працює у
вас в конкретний момент часу.
Поєднуйте інструменти та практики так, щоб компенсувати
слабкі місця й підсилювати переваги одне одного.
Senior Backend
Developer at TENTENS
Tech
LinkedIn: andrewyurchenko
АНДРІЙ
ЮРЧЕНКО

"An engineer’s peaceful sleep: how we ensure quality to rest easy", Andrii Yurchenko