Mobile Meetup от OneTwoTrip: как это было
В середине прошлой осени мы провели офлайн-митап для мобильных разработчиков: 11 сентября 2024 года четыре эксперта OneTwoTrip поделились своим опытом, а после устроили атмосферный афтепати с нетворкингом.
Участники митапа узнали о том, как в сервисе используют инструмент Tuist, каким образом разработчики внедрили многомодульную архит��ктуру, превратили написание автотестов в приятный процесс и разработали систему, позволяющую обновлять строковые ресурсы в приложении без релиза.
Полные выступления смотрите в видео, а тут мы кратко расскажем, что было в каждом из них.
Tuist в командной разработке: путь к совершенству
Спикер: Альберт Арифуллин, Head of iOS в OneTwoTrip
Альберт познакомил слушателей с инструментом Tuist, который очень любят разработчики приложения OneTwoTrip. Они пришли к нему, поскольку долгое время при разработке сохранялся монолитный подход – вся кодовая база находилась в одном месте. Это нормально работает на небольших проектах, но когда продукт начинает обрастать множеством фичей, монолитная архитектура становится неудобна: проект сложно масштабировать, а части кода и функции очень сильно связаны друг с другом, из-за чего увеличивается время сборки. К тому же при внесении изменений в код есть большой риск всё сломать.
Логичным решением становится переход к многомодульной архитектуре. Некоторые для этого даже переписывают код с нуля, но команда OneTwoTrip нашла другое решение, и предлагает его именно Tuist. С ним фичи рассматриваются как отдельные проекты, которые не связаны между собой. Благодаря этому получается меньше конфликтов, потому что разработка происходит в разных модулях.
Переход на многомодульную архитектуру эффективно решает проблему масштабируемости, а Tuist — мощный инструмент, который делает работу разработчиков намного приятнее, ускоряет сборку проекта, помогает оптимизировать флоу тестирования и решает большинство проблем с внешними зависимостями. Ну а чтобы узнать, как именно он это делает, посмотреть на пример проекта и получить полезные ссылки, посмотрите доклад Альберта.
Ссылка на выступление: https://youtu.be/Gl_Lvg8njrk?si=md8w7Vf-HFAptKVh
Стильно, модно, модульно
Спикер: Роман Деркачёв, Android developer в OneTwoTrip в команде «Реферальные механики»
Доклад Романа во многом связан с выступлением Альберта — спикер рассказал, как от использования монолита команда андроид-разработчиков OneTwoTrip перешла к многомодульной архитектуре, а также поделился реальными кейсами и сложностями, с которыми ребята столкнулись в процессе перехода. Этот доклад получился более техническим, с описаниями модулей и фич и примерами кода, поэтому он будет интересен мобильным разработчикам.
Роман подробно рассказал, как монолит разбивали на feature-модули, получившуюся структуру можно посмотреть на 02:52, а связи между модулями — с 03:55. Также Роман описывает поддержку модулей в приложении OneTwoTrip (с 8:42) с использованием механизма gradle. Кстати, о преимуществах комбинации gradle + flavours + modules можно подробнее узнать на 11:22.
Итоги перехода примерно те же, что и на iOS: повысилась скорость сборки, уменьшилась связанность в коде (а значит, он стал более структурированным, сократились ошибки и упростился код-ревью).
Ссылка на выступление: https://youtu.be/wx_Fmmt5wEw?si=eUeQj2j-XJDB3iS0
Автотесты с улыбкой: как сделать процесс тестирования простым и удобным для всех
Спикер: Николай Шубенков, Team Lead в команде «Авиа» в OneTwoTrip
Николай поделился наработками, которые сделали написание автотестов не только лёгким, но и приятным занятием. Команда оптимизировала кодовую базу, чтобы успешно писать тесты могли ручные тестировщики без опыта программирования (спойлер: код писать всё-таки придётся).
Вообще автотесты — полезный инструмент. Они ускоряют проверку приложения, дают картину о его состоянии, проходят быстрее ручных и в целом убирают человеческий фактор. Минусы тоже есть: если UI часто меняется (как это происходит, например, в OneTwoTrip), нужно менять и автотесты. При этом для их написания нужны компетенции участников.
В своём выступлении Николай довольно подробно рассказал об инструментах, которые он рекомендует для написания автотестов (с 2:54) и разобрал на примере приложения OneTwoTrip, как можно создать свой первый автотест (с 5:58), показав на примере кода, как делать не надо. А вот чтобы сложностей не возникало, Николай предлагает использовать паттерн Page Object (пример — на 9:16), а после доработать тест с помощью паттерна Method chaining (10:57). В докладе Николай разобрал несколько сложных моментов и показал, как их можно решить.
Что же в итоге, как писать простые автотесты? Рецепт такой: использовать Page Object + Method Chaining и enum + switchElement, писать простой код без ветвлений, уделять внимание идентификаторам, а также ознакомиться с SBT UITest Tunnel и Allure TestOps.
Ссылка на выступление: https://youtu.be/G9Pt8TqbwqI?si=22jer4e4TOJZ0go6
Обновление строк в приложении Android без релиза новой версии
Спикер: Михаил Волков, Team Lead Android в командах «Отели» и «Маркетинг» в OneTwoTrip
Зачем вообще нужно обновление строк без релиза новой версии приложения? Дело в том, что сам релиз требует временных затрат, поэтому оперативно исправить ошибку или изменить текст с ним не удастся. Но порой возникают ситуации, когда что-то обновить очень нужно. Михаил приводит такой пример (1:20): в начале лета на OneTwoTrip стартовала акция, в рамках которой пользователям начисляли до 30% кэшбэка, но при этом в приложении на стартовом экране была информация о том, что максимально можно получить до 15%. Разработчикам удалось оперативно поправить эту конкретную строчку, и она поменялась у всех пользователей — даже у тех, кто не обновлял приложение. Аналогично можно исправить любую информацию в приложениях.
Для подобных задач есть уже готовые решения (2:35), но, как показали последние несколько лет, сервисы могут внезапно, по независящим ни от кого причинам, переставать работать, а ещё часто они платные. Поэтому команда OneTwoTrip сделала собственное решение (общую схему его работы можно найти с 3:16). О том, как именно реализована замена строк, можно узнать с 7:23. Подробная диаграмма с принципом работы отображена на 14:10. Итоговое реализованное решение успешно работает и после внедрения уже несколько раз спасало от хотфиксов. И теперь команда планирует выложить его в open source, со временем мы обязательно поделимся ссылкой.
Ссылка на выступление: https://youtu.be/DHhz2dHNM3E?si=--zq34XzJ3WMoskH