# Badoo RU

364 статьи от авторов компании Badoo

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## \[Перевод\] От песочных часов к пирамиде: как усовершенствовать структуру тестов

DevFeed: [\[Перевод\] От песочных часов к пирамиде: как усовершенствовать структуру тестов](<https://devfeed.tech/articles/article-23646.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/652025/>)

Author: laechoppe (Badoo)

Published: 2022-02-17T12:15:34Z

Content type: tutorial

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [Objective-C](<https://devfeed.tech/topics/objective-c.md>), [Swift](<https://devfeed.tech/topics/swift.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [badoo](<https://devfeed.tech/tags/badoo.md>), [ios](<https://devfeed.tech/tags/ios.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [qa](<https://devfeed.tech/tags/qa.md>), [qa-automation](<https://devfeed.tech/tags/qa-automation.md>), [swift](<https://devfeed.tech/tags/swift.md>), [tag-23c525fe15c9](<https://devfeed.tech/tags/tag-23c525fe15c9.md>), [tag-910b48292e17](<https://devfeed.tech/tags/tag-910b48292e17.md>), [tag-97ed25004d35](<https://devfeed.tech/tags/tag-97ed25004d35.md>), [tag-e932065bc8da](<https://devfeed.tech/tags/tag-e932065bc8da.md>), [testing](<https://devfeed.tech/tags/testing.md>), [ui](<https://devfeed.tech/tags/ui.md>), [xcuitest](<https://devfeed.tech/tags/xcuitest.md>)

### AI overview

A tutorial on test automation for native iOS applications written in Objective-C and Swift. It explains the test pyramid, recommends many small unit tests, fewer medium-level tests, and very few high-level end-to-end or UI tests, and discusses how projects can develop an unbalanced testing structure.

### Source excerpt

Меня зовут Владислав Романенко, я Senior iOS QA Engineer в Badoo и Bumble. Мы регулярно внедряем новые фичи в приложения, и автоматизация тестирования -- один из способов не пропустить баги. Фактически автотесты входят в жизненный цикл всех частей наших приложений: бэкенда, сервисов, фронтенда и мобильных клиентов. Чем раньше мы обнаружим ошибку, тем дешевле будет её исправить. Сегодня я расскажу об автоматизации тестирования в iOS, потому что на протяжении всей своей карьеры в Badoo я плотно занимался тестированием наших нативных iOS-приложений, которые написаны на Objective-C и Swift. Хотя кое-где я буду упоминать характерные для iOS инструменты и термины (например, XCTest), общие принципы и подходы универсальны. Так что, даже если в вашем проекте используется совсем другой стек, статья будет вам полезна. Читать далее

## Автоматическая многоязычная модерация сообщений для миллионов пользователей

DevFeed: [Автоматическая многоязычная модерация сообщений для миллионов пользователей](<https://devfeed.tech/articles/article-23645.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/648815/>)

Author: punkerpunker (Badoo)

Published: 2022-02-01T10:50:28Z

Content type: article

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Natural language processing](<https://devfeed.tech/topics/nlp.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [badoo](<https://devfeed.tech/tags/badoo.md>), [bert](<https://devfeed.tech/tags/bert.md>), [data-science](<https://devfeed.tech/tags/data-science.md>), [gpt](<https://devfeed.tech/tags/gpt.md>), [gpt-3](<https://devfeed.tech/tags/gpt-3.md>), [natural-language-processing](<https://devfeed.tech/tags/natural-language-processing.md>), [nlp](<https://devfeed.tech/tags/nlp.md>), [tag-055aee430837](<https://devfeed.tech/tags/tag-055aee430837.md>), [tag-13e2af703774](<https://devfeed.tech/tags/tag-13e2af703774.md>), [tag-1cd610c0e518](<https://devfeed.tech/tags/tag-1cd610c0e518.md>), [tag-5cb789e9aaa3](<https://devfeed.tech/tags/tag-5cb789e9aaa3.md>), [tag-9d8cf70dc46c](<https://devfeed.tech/tags/tag-9d8cf70dc46c.md>), [tag-e69b694e3ce2](<https://devfeed.tech/tags/tag-e69b694e3ce2.md>)

### AI overview

The article describes Badoo and Bumble's Rude Message Detector, a machine-learning system for multilingual moderation of rude messages. It discusses the system's architecture, deployment infrastructure, implementation challenges, and results, including the use of transformer-based architectures and large language models such as BERT, GPT-2, and GPT-3.

### Source excerpt

Как мы все знаем, слова обладают силой. Ими можно вдохновить людей, но можно и навредить. Мы в Badoo и Bumble стараемся оградить пользователей от неприятных ситуаций, поэтому внедрили инструмент Rude Message Detector. Это многоязычный детектор грубых высказываний, работающий на основе машинного обучения. В этой статье мы расскажем о технических особенностях нашего решения, сложностях, с которыми столкнулись в ходе реализации проекта, и его результатах. Читать далее

## Scaling navigation in Jetpack Compose: NavHost structure and a possible solution

DevFeed: [Scaling navigation in Jetpack Compose: NavHost structure and a possible solution](<https://devfeed.tech/articles/jetpack-compose-navigation-23644.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/596953/>)

Author: vaccum (Badoo)

Published: 2021-12-23T09:00:11Z

Content type: tutorial

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [navigation](<https://devfeed.tech/topics/navigation.md>), [Dagger](<https://devfeed.tech/topics/dagger.md>), [Google](<https://devfeed.tech/topics/google.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [dagger](<https://devfeed.tech/tags/dagger.md>), [dagger-hilt](<https://devfeed.tech/tags/dagger-hilt.md>), [google](<https://devfeed.tech/tags/google.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [navigation](<https://devfeed.tech/tags/navigation.md>)

### AI overview

The article examines how navigation is structured in Jetpack Compose, describes Google's NavHost-based approach, and discusses the maintainability and scalability challenges it can create as the number of composable routes grows.

### Source excerpt

В одном из моих личных проектов я решил использовать Jetpack Compose в качестве основной технологии. Это означало, что моё приложение будет иметь одну Activity, а вся навигация будет выполняться с помощью Compose. Когда я начал планировать проект, библиотеки Compose Navigation ещё не было, как не было и способа внедрить ViewModel в Composable без использования компонентов Activity, Fragment или View. Но примерно за полгода до публикации этой статьи появилась библиотека Jetpack Compose Navigation, и Dagger-Hilt стал поддерживать Compose. Сегодня я расскажу о моём пути: поделюсь видением проблемы масштабируемости навигации на примерах Google и предложу её возможное решение. Читать далее

## Рефакторинг функций расширения в Kotlin: использование объекта-компаньона

DevFeed: [Рефакторинг функций расширения в Kotlin: использование объекта-компаньона](<https://devfeed.tech/articles/kotlin-23643.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/575550/>)

Author: ChPr (Badoo)

Published: 2021-08-31T12:09:10Z

Content type: tutorial

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Java](<https://devfeed.tech/topics/java.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [tag-8ecb3d630e31](<https://devfeed.tech/tags/tag-8ecb3d630e31.md>)

### AI overview

This article explains how Kotlin extension functions can become difficult to test and maintain when they accumulate business logic. It discusses singleton-related testability problems, increasing complexity, and refactoring toward a companion object.

### Source excerpt

В Kotlin есть отличная возможность использовать функции расширения, позволяющие писать более выразительный и компактный код. Под капотом это просто статические методы, которые могут навредить кодовой базе при некорректном использовании. В этой статье я расскажу, как работать с функциями расширения, которые со временем из небольших добавлений к коду трансформировались в монстров, содержащих бизнес-логику. Читать далее

## Пишем плагин Parcelize для компилятора Kotlin под iOS

DevFeed: [Пишем плагин Parcelize для компилятора Kotlin под iOS](<https://devfeed.tech/articles/parcelize-kotlin-ios-23642.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/566380/>)

Author: arkivanov (Badoo)

Published: 2021-07-09T07:30:01Z

Content type: tutorial

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Android](<https://devfeed.tech/topics/android.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [ios](<https://devfeed.tech/tags/ios.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [kotlin-native](<https://devfeed.tech/tags/kotlin-native.md>), [native](<https://devfeed.tech/tags/native.md>), [parcelable](<https://devfeed.tech/tags/parcelable.md>), [parcelize](<https://devfeed.tech/tags/parcelize.md>), [tag-25559b1b0132](<https://devfeed.tech/tags/tag-25559b1b0132.md>), [tag-9e9e5e80d07a](<https://devfeed.tech/tags/tag-9e9e5e80d07a.md>), [tag-a071763eb5bb](<https://devfeed.tech/tags/tag-a071763eb5bb.md>), [tag-e076f05a03bb](<https://devfeed.tech/tags/tag-e076f05a03bb.md>)

### AI overview

The article describes the author's experience creating kotlin-parcelize-darwin, a Kotlin compiler plugin for iOS using Kotlin/Native. It explains the Android kotlin-parcelize and Parcelable model as background, then discusses preserving iOS application state with NSCoding and the motivation for an analogous solution.

### Source excerpt

В этой статье описан мой опыт по написанию плагина для компилятора Kotlin. Моей главной целью было создание плагина под iOS (Kotlin/Native), аналогичного kotlin-parcelize под Android. Дело в том, что в iOS, как и в Android, приложения тоже могут быть убиты системой, а значит, может возникнуть необходимость сохранять стек навигации и другие данные. В результате работы над этой задачей получился kotlin-parcelize-darwin. Подробности о его создании и применении -- под катом. Читать далее

## How Badoo Increased Automated Merge Throughput

DevFeed: [How Badoo Increased Automated Merge Throughput](<https://devfeed.tech/articles/article-23640.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/560228/>)

Author: osmanov (Badoo)

Published: 2021-06-21T10:00:02Z

Content type: tutorial

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [Git](<https://devfeed.tech/topics/git.md>), [ci](<https://devfeed.tech/topics/ci.md>), [bitbucket](<https://devfeed.tech/topics/bitbucket.md>), [GitHub](<https://devfeed.tech/topics/github.md>)

Tags: [badoo](<https://devfeed.tech/tags/badoo.md>), [bitbucket](<https://devfeed.tech/tags/bitbucket.md>), [ci](<https://devfeed.tech/tags/ci.md>), [continuous-integration](<https://devfeed.tech/tags/continuous-integration.md>), [devops](<https://devfeed.tech/tags/devops.md>), [git](<https://devfeed.tech/tags/git.md>), [github](<https://devfeed.tech/tags/github.md>), [jira](<https://devfeed.tech/tags/jira.md>), [tag-5647dc7784f0](<https://devfeed.tech/tags/tag-5647dc7784f0.md>), [tag-e95ee8b94dca](<https://devfeed.tech/tags/tag-e95ee8b94dca.md>), [teamcity](<https://devfeed.tech/tags/teamcity.md>), [workflow](<https://devfeed.tech/tags/workflow.md>)

### AI overview

A Badoo and Bumble release engineer explains how the team optimized automated Git branch merging for mobile projects. The article contrasts earlier sequential merging with a custom automerge system designed to increase throughput while maintaining process reliability.

### Source excerpt

Меня зовут Руслан, я релиз-инженер в Badoo и Bumble. Недавно я столкнулся с необходимостью оптимизировать механизм автомерджа в мобильных проектах. Задача оказалась интересной, поэтому я решил поделиться её решением с вами. В статье я расскажу, как у нас раньше было реализовано автоматическое слияние веток Git и как потом мы увеличили пропускную способность автомерджа и сохранили надёжность процессов на прежнем высоком уровне. Читать далее

## A component-based approach to managing team responsibility in Badoo and Bumble

DevFeed: [A component-based approach to managing team responsibility in Badoo and Bumble](<https://devfeed.tech/articles/article-23641.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/562000/>)

Author: Unclead (Badoo)

Published: 2021-06-09T15:08:15Z

Content type: article

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [PHP](<https://devfeed.tech/topics/php.md>), [phpstorm](<https://devfeed.tech/topics/phpstorm.md>), [Git](<https://devfeed.tech/topics/git.md>)

Tags: [badoo](<https://devfeed.tech/tags/badoo.md>), [bus-factor](<https://devfeed.tech/tags/bus-factor.md>), [git-hook](<https://devfeed.tech/tags/git-hook.md>), [php](<https://devfeed.tech/tags/php.md>), [phpstorm](<https://devfeed.tech/tags/phpstorm.md>), [tag-622612a5798e](<https://devfeed.tech/tags/tag-622612a5798e.md>), [tag-a3f08f91b7c9](<https://devfeed.tech/tags/tag-a3f08f91b7c9.md>), [tag-b3a84f87fd83](<https://devfeed.tech/tags/tag-b3a84f87fd83.md>), [tag-c51cc4bf76e5](<https://devfeed.tech/tags/tag-c51cc4bf76e5.md>), [team](<https://devfeed.tech/tags/team.md>)

### AI overview

The article describes how Badoo and Bumble addressed the challenge of identifying teams and maintainers responsible for parts of a growing PHP codebase. It explains the limitations of DocBlock tags, PhpStorm templates, and a Git hook, and introduces a component-based approach intended to centralize responsibility information and let other systems consume updates automatically.

### Source excerpt

Меня зовут Евгений Тупиков, я ведущий PHP-разработчик в Badoo и Bumble. У нас в команде более 200 бэкенд-разработчиков, которые работают над сотнями модулей и отдельных сервисов в наших приложениях. Но поначалу всё было не так масштабно. В 2006 году это был один проект, над которым работала небольшая команда. Каждый разработчик хорошо понимал, как всё устроено: легко ориентировался в коде, знал, какие есть сервисы и как они взаимодействуют между собой. Однако по мере роста проекта всё больше времени занимал поиск "хранителей знаний" -- тех, кто отвечает за ту или иную функциональность и к кому можно обратиться с вопросом или предложением. В этой статье я расскажу, как мы решили проблему разделения зон ответственности и сделали процесс актуализации информации быстрым и удобным с помощью компонентного подхода. Читать далее

## \[Перевод\] Три паттерна для улучшения работы с автотестами

DevFeed: [\[Перевод\] Три паттерна для улучшения работы с автотестами](<https://devfeed.tech/articles/article-23639.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/558496/>)

Author: laechoppe (Badoo)

Published: 2021-05-20T17:18:27Z

Content type: article

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [Wiki](<https://devfeed.tech/topics/wiki.md>)

Tags: [badoo](<https://devfeed.tech/tags/badoo.md>), [ios](<https://devfeed.tech/tags/ios.md>), [patterns](<https://devfeed.tech/tags/patterns.md>), [qa](<https://devfeed.tech/tags/qa.md>), [software-testing](<https://devfeed.tech/tags/software-testing.md>), [tag-23c525fe15c9](<https://devfeed.tech/tags/tag-23c525fe15c9.md>), [tag-e932065bc8da](<https://devfeed.tech/tags/tag-e932065bc8da.md>), [tag-e95ee8b94dca](<https://devfeed.tech/tags/tag-e95ee8b94dca.md>), [test-automation](<https://devfeed.tech/tags/test-automation.md>)

### AI overview

This article describes three process patterns for improving automated testing in mobile application development. Drawing on experience at Badoo and Bumble, it explains how automation supported weekly releases and how teams addressed recurring collaboration and knowledge-sharing difficulties.

### Source excerpt

Меня зовут Владислав Романенко, я старший iOS QA Engineer в Badoo и Bumble. Несколько лет назад мы начали активнее использовать автотесты в процессе разработки, но столкнулись с несколькими трудностями на этом пути. Логичный вопрос: почему мы занялись автоматизацией тестирования? Ответ кроется в еженедельном выпуске новых версий наших мобильных приложений. QA отделу приходится тестировать новые фичи, их интеграцию в приложение и заниматься регрессионным тестированием. За неделю нужно проводить как минимум одно комплексное регрессионное тестирование, что довольно утомительно. Все эти трудности мы преодолели с помощью автоматизации, которая помогла нам выпускать новые версии быстрее и без потери качества. Подробнее об автоматизации мобильного тестирования -- в докладе наших коллег. Сложности в разработке часто решаются с помощью паттернов -- обобщённых решений для часто возникающих проблем в заданном контексте. То же и с автоматизацией тестирования, есть даже удобное wiki-описание. В этой статье мы поговорим о паттернах процессов (Process Patterns). Они помогают организовать и улучшить процесс автоматизации тестирования. Без дальнейших предисловий перейдём к трудностям, с которыми мы боролись, и рекомендациям по их преодолению с помощью тех самых паттернов. Замечу, что это не единственные проблемы, которые у нас были и есть. Но в рамках данной статьи я решил остановится именно на приведенных ниже пунктах. Читать дальше

## Работа с частичными моками в PHPUnit 10

DevFeed: [Работа с частичными моками в PHPUnit 10](<https://devfeed.tech/articles/phpunit-10-23638.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/553782/>)

Author: bikutoru (Badoo)

Published: 2021-04-26T12:15:01Z

Content type: tutorial

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [PHPUnit](<https://devfeed.tech/topics/phpunit.md>), [GitHub](<https://devfeed.tech/topics/github.md>)

Tags: [github](<https://devfeed.tech/tags/github.md>), [phpunit](<https://devfeed.tech/tags/phpunit.md>), [tag-d343a2c2f538](<https://devfeed.tech/tags/tag-d343a2c2f538.md>), [tag-e34f6dec12c4](<https://devfeed.tech/tags/tag-e34f6dec12c4.md>), [tag-f428a971bb81](<https://devfeed.tech/tags/tag-f428a971bb81.md>)

### AI overview

The article explains partial mocks in PHPUnit 10, focusing on the removal of MockBuilder::setMethods(), problems caused by its use, available alternatives, and considerations for migrating tests.

### Source excerpt

В этом году должен выйти PHPUnit 10 (релиз планировался на 2 апреля 2021 года, но был отложен). Если посмотреть на список изменений, то бросается в глаза большое количество удалений устаревшего кода. Одним из таких изменений является удаление метода MockBuilder::setMethods(), который активно использовался при работе с частичными моками. Этот метод не рекомендуется использовать с версии 8.0, но тем не менее он описан в документации без каких-либо альтернатив и упоминания о его нежелательности. Если почитать исходники PHPUnit, issues и пул-реквесты на GitHub, то станет понятно, почему так и какие есть альтернативы. В этой статье я освещу этот нюанс для тех, кто не обращал на него внимания раньше: расскажу про частичные моки, проблемы, возникающие при работе с setMethods, пути их решения, а также затрону вопрос миграции тестов на PHPUnit 10. Читать далее

## Автоматизация тестирования мобильных приложений. Часть 2: предусловия, верификация элементов и независимость шагов

DevFeed: [Автоматизация тестирования мобильных приложений. Часть 2: предусловия, верификация элементов и независимость шагов](<https://devfeed.tech/articles/2-23637.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/547196/>)

Author: barman\_mo (Badoo)

Published: 2021-03-16T14:17:18Z

Content type: tutorial

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [Mobile](<https://devfeed.tech/topics/mobile.md>), [Selenium](<https://devfeed.tech/topics/selenium.md>)

Tags: [automation](<https://devfeed.tech/tags/automation.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [qa](<https://devfeed.tech/tags/qa.md>), [selenium](<https://devfeed.tech/tags/selenium.md>), [tag-23c525fe15c9](<https://devfeed.tech/tags/tag-23c525fe15c9.md>)

### AI overview

The second part of an article about mobile application test automation practices at Badoo and Bumble. It discusses verifying element state changes, configuring test preconditions, developing steps for simple and complex actions, and verifying optional elements, with a focus on making tests faster and more stable.

### Source excerpt

Меня зовут Дмитрий Макаренко, я Mobile QA Engineer в Badoo и Bumble: занимаюсь тестированием новой функциональности в наших приложениях вручную и покрытием её автотестами. За последние два года подход к автоматизации тестирования в нашей компании сильно изменился. Количество людей, активно вовлечённых в разработку тестов, увеличилось с десяти до 40 человек. А любая новая функциональность в приложениях теперь обязательно должна быть покрыта тестами до релиза. В таких условиях нам очень важно разрабатывать тесты настолько быстро, насколько это возможно. И делать их при этом стабильными -- чтобы поддержка не отнимала у нас много времени. Мы решили поделиться практиками, которые помогают нам ускорять разработку тестов и повышать их стабильность. В первой части статьи мы рассказали о роли автоматизации в наших процессах, деталях фреймворка и подробно разобрали три практики, которые мы применяем при создании автотестов. Во второй части будем разбираться с верификацией изменения состояния элементов, настройкой предусловий тестов, разработкой шагов для простых и сложных действий, а также с верификацией необязательных элементов (которую обязательно нужно делать :)). Читать далее

## Автоматизация тестирования мобильных приложений. Часть 1: проверки, модули и базовые действия

DevFeed: [Автоматизация тестирования мобильных приложений. Часть 1: проверки, модули и базовые действия](<https://devfeed.tech/articles/1-23636.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/546188/>)

Author: barman\_mo (Badoo)

Published: 2021-03-10T12:13:11Z

Content type: tutorial

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [Mobile](<https://devfeed.tech/topics/mobile.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Java](<https://devfeed.tech/topics/java.md>), [Swift](<https://devfeed.tech/topics/swift.md>), [Objective-C](<https://devfeed.tech/topics/objective-c.md>)

Tags: [automation](<https://devfeed.tech/tags/automation.md>), [badoo](<https://devfeed.tech/tags/badoo.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [qa](<https://devfeed.tech/tags/qa.md>), [tag-23c525fe15c9](<https://devfeed.tech/tags/tag-23c525fe15c9.md>), [tag-e932065bc8da](<https://devfeed.tech/tags/tag-e932065bc8da.md>)

### AI overview

This article describes how Badoo and Bumble organize mobile test automation and develop stable end-to-end tests. It covers changes in team processes, the role of the automation team, and the native Android and iOS technologies used in the examples.

### Source excerpt

Приложениями Badoo и Bumble пользуются миллионы людей по всему миру, и мы стремимся доставлять им новую функциональность как можно быстрее. Но важно, чтобы высокий темп нашей работы не сказывался негативно на качестве работы приложений. В этой статье мы расскажем о роли автоматизации в наших процессах и поделимся практиками, которые позволяют быстро писать стабильные тесты. Читать далее

## Влияние Kotlin data-классов на вес приложения

DevFeed: [Влияние Kotlin data-классов на вес приложения](<https://devfeed.tech/articles/kotlin-data-23635.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/545260/>)

Author: ChPr (Badoo)

Published: 2021-03-04T14:13:38Z

Content type: article

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [data](<https://devfeed.tech/topics/data.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [R8](<https://devfeed.tech/topics/r8.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [data](<https://devfeed.tech/tags/data.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-compiler](<https://devfeed.tech/tags/kotlin-compiler.md>), [r8](<https://devfeed.tech/tags/r8.md>)

### AI overview

A Kotlin developer investigates the cost of using many data classes in an application. The article describes an experiment involving replacing data classes with ordinary classes and discusses how release optimizers such as R8 affect their generated methods.

### Source excerpt

Kotlin имеет много классных особенностей: null safety, smart casts, интерполяция строк и другие. Но одной из самых любимых разработчиками, по моим наблюдениям, являются data-классы. Настолько любимой, что их часто используют даже там, где никакой функциональности data-класса не требуется. В этой статье я с помощью эксперимента постараюсь понять, какова реальная цена использования большого количества data-классов в приложении. Я попробую удалить все data-классы, не сломав компиляцию, но сломав приложение, а потом расскажу о результатах и выводах этого эксперимента. Читать дальше ->

## Reducing ANR errors in an Android application by investigating Application.onCreate and Firebase Cloud Messaging

DevFeed: [Reducing ANR errors in an Android application by investigating Application.onCreate and Firebase Cloud Messaging](<https://devfeed.tech/articles/anrs-2-23633.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/539728/>)

Author: lukaville (Badoo)

Published: 2021-01-28T15:14:55Z

Content type: tutorial

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Firebase](<https://devfeed.tech/topics/firebase.md>), [Google Play](<https://devfeed.tech/topics/google-play.md>), [Messaging](<https://devfeed.tech/topics/messaging.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [anr](<https://devfeed.tech/tags/anr.md>), [app-startup](<https://devfeed.tech/tags/app-startup.md>), [cloud-messaging](<https://devfeed.tech/tags/cloud-messaging.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [google-play](<https://devfeed.tech/tags/google-play.md>)

### AI overview

This second part of a technical article examines ANR errors in an Android application. The authors found that about 60% of ANRs occurred during Application.onCreate and concluded that long execution, often involving Firebase Cloud Messaging, was likely the main cause.

### Source excerpt

В первой части статьи мы поговорили о том, что такое ANR (Application Not Responding), и рассмотрели несколько способов сбора информации об этих ошибках. А сегодня я расскажу о проблемах, которые мы обнаружили в нашем приложении, о том, как мы их исправляли и что из этого в итоге получилось. Время запуска приложения Первое, что можно сделать, чтобы уменьшить количество ANR-ошибок, -- попробовать найти самые частые причины их возникновения. Начать можно с консоли Google Play -- проанализировать самые большие группы ошибок. Читать далее

## \[Перевод\] Приложение отвечает: как мы уменьшили количество ANR-ошибок в шесть раз. Часть 1, про сбор данных

DevFeed: [\[Перевод\] Приложение отвечает: как мы уменьшили количество ANR-ошибок в шесть раз. Часть 1, про сбор данных](<https://devfeed.tech/articles/anr-1-23632.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/539524/>)

Author: lukaville (Badoo)

Published: 2021-01-27T14:15:01Z

Content type: tutorial

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Google Play](<https://devfeed.tech/topics/google-play.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [anr](<https://devfeed.tech/tags/anr.md>), [anr-reporting](<https://devfeed.tech/tags/anr-reporting.md>), [badoo](<https://devfeed.tech/tags/badoo.md>), [crash-reporting](<https://devfeed.tech/tags/crash-reporting.md>), [google](<https://devfeed.tech/tags/google.md>), [google-play](<https://devfeed.tech/tags/google-play.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

This first part of a two-article series explains Android ANR errors, why they affect application responsiveness and potentially Google Play visibility, and how to monitor them. It introduces the causes of ANRs, including prolonged work on the main UI thread, and previews Badoo's approaches to reducing them.

### Source excerpt

Пожалуй, одна из худших проблем, которая может случиться с вашим приложением, -- ошибка ANR (Application Not Responding), когда приложение не отвечает. Если таких ошибок много, они могут негативно влиять не только на пользовательский опыт, но и на позицию в выдаче Google Play и фичеринг. В начале прошлого года количество ANRs в приложении Badoo превышало порог "Bad Behaviour" в Google Play. Поэтому мы собрали команду для решения этой проблемы и потратили несколько месяцев, экспериментируя с разными подходами. В результате мы смогли уменьшить количество таких ошибок более чем в шесть раз. В этой серии из двух статей я расскажу о том, как нам это удалось, что дало наибольший эффект и как вы можете использовать эти подходы в своём приложении. В первой части мы поговорим об основах: что представляет собой ошибка ANR и как её лучше отслеживать. Если вы уже знакомы с этой темой, предлагаю перейти ко второй части, в которой я расскажу о наших способах решения этой проблемы. Читать далее

## Модуляризация iOS-приложения Badoo: борьба с последствиями

DevFeed: [Модуляризация iOS-приложения Badoo: борьба с последствиями](<https://devfeed.tech/articles/ios-badoo-23631.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/538270/>)

Author: nsurl-dev (Badoo)

Published: 2021-01-21T17:01:19Z

Content type: tutorial

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [ci](<https://devfeed.tech/topics/ci.md>), [Swift](<https://devfeed.tech/topics/swift.md>)

Tags: [apple](<https://devfeed.tech/tags/apple.md>), [badoo](<https://devfeed.tech/tags/badoo.md>), [ci](<https://devfeed.tech/tags/ci.md>), [cocoapods](<https://devfeed.tech/tags/cocoapods.md>), [ios](<https://devfeed.tech/tags/ios.md>), [modularity](<https://devfeed.tech/tags/modularity.md>), [modules](<https://devfeed.tech/tags/modules.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [swift](<https://devfeed.tech/tags/swift.md>), [tag-73f5f2c76797](<https://devfeed.tech/tags/tag-73f5f2c76797.md>), [tag-a3309a813b61](<https://devfeed.tech/tags/tag-a3309a813b61.md>), [tag-d96e238f1419](<https://devfeed.tech/tags/tag-d96e238f1419.md>)

### AI overview

This article describes Badoo's experience expanding iOS app modularization and handling the resulting challenges. It covers dependency-graph complexity, CI load, slower application startup as modules increase, monitoring, and an internal Swift command-line utility for automating dependency-graph analysis and fixing typical linking errors.

### Source excerpt

В предыдущей статье я рассказывал о том, как мы выделили модуль чата в нашем приложении. Всё прошло успешно, и мы собирались распространить этот опыт -- начать тотальную модуляризацию в iOS-разработке Badoo. Даже презентовали подход продуктовым командам, командам, занимающимся тестированием и непрерывной интеграцией, и постепенно стали внедрять модуляризацию в наши процессы. Мы сразу понимали что будут проблемы, поэтому не торопились и раскатывали решение поэтапно, что помогло нам вовремя понять проблемы о которых пойдет речь далее. В этой статье я расскажу: -- как мы не потерялись в сложном графе зависимостей; -- как спасли CI от чрезмерной нагрузки; -- что делать, если с каждым новым модулем приложение запускается всё медленнее; -- мониторинг каких показателей стоит предусмотреть и почему это необходимо. Читать далее

## История потерянного коммита

DevFeed: [История потерянного коммита](<https://devfeed.tech/articles/article-23629.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/534800/>)

Author: ShaggyRatte (Badoo)

Published: 2020-12-24T12:03:01Z

Content type: article

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [Git](<https://devfeed.tech/topics/git.md>)

Tags: [git](<https://devfeed.tech/tags/git.md>), [history](<https://devfeed.tech/tags/history.md>), [merge](<https://devfeed.tech/tags/merge.md>), [tag-6afcb886af7c](<https://devfeed.tech/tags/tag-6afcb886af7c.md>), [tag-aa5252a92430](<https://devfeed.tech/tags/tag-aa5252a92430.md>)

### AI overview

A developer investigates why the Git commit deadbeef and its changes no longer appear in a file's history. The investigation uses git log --follow, git bisect, and git grep to trace when the changes disappeared.

### Source excerpt

Был уже вечер, когда ко мне обратился разработчик. Из мастер-ветки пропал патч -- коммит deadbeef. Мне показали доказательства: вывод двух команд. Первая из них -- git show deadbeef -- показывала изменения файла, назовём его Page.php. В него добавились метод canBeEdited и его использование. А в выводе второй команды -- git log -p Page.php -- коммита deadbeef не было. Да и в текущей версии файла Page.php не было метода canBeEdited. Не найдя решения быстро, мы сделали ещё один патч в мастер, разложили изменения -- и я решил, что вернусь к проблеме на свежую голову. Читать дальше ->

## Модуляризация iOS-приложения: зачем и как мы разбиваем Badoo на модули

DevFeed: [Модуляризация iOS-приложения: зачем и как мы разбиваем Badoo на модули](<https://devfeed.tech/articles/ios-badoo-23627.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/531162/>)

Author: nsurl-dev (Badoo)

Published: 2020-12-03T13:26:03Z

Content type: article

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [Expo](<https://devfeed.tech/topics/expo.md>)

Tags: [apple](<https://devfeed.tech/tags/apple.md>), [badoo](<https://devfeed.tech/tags/badoo.md>), [cocoapods](<https://devfeed.tech/tags/cocoapods.md>), [ios](<https://devfeed.tech/tags/ios.md>), [modularity](<https://devfeed.tech/tags/modularity.md>), [modules](<https://devfeed.tech/tags/modules.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [swift](<https://devfeed.tech/tags/swift.md>), [tag-a3309a813b61](<https://devfeed.tech/tags/tag-a3309a813b61.md>)

### AI overview

Badoo describes its experience modularizing iOS applications, including how to define modules, organize dependencies, reduce launch time, monitor the process, automate module creation, and prevent linking errors. The article also discusses modularization as an ongoing process involving specialized, reusable modules.

### Source excerpt

В iOS-разработке Badoo мы уже несколько лет занимаемся созданием модулей, и большая часть нового кода разрабатывается вне кодовой базы приложений. Сейчас у нас более 100 модулей для Badoo и Bumble. В этой статье я расскажу о нашем опыте и отвечу на самые популярные вопросы о модуляризации: -- по какому принципу выделять модули; -- как организовать связи между ними; -- достаточно ли для фичи одного фреймворка; -- как сократить время запуска многомодульного приложения; -- зачем в этом процессе мониторинг; -- можно ли автоматизировать создание новых модулей и так далее. Мой коллега, лид команды iOS-разработки и Core-команды Артем Лоенко, в начале года говорил об этом на митапе FunCorp в докладе "Катастрофически полезные последствия модуляризации". Я приведу более подробный разбор процесса модуляризации и некоторых опущенных в его рассказе деталей. Читать далее

## API для QA: тестируем фичи без доступа к коду

DevFeed: [API для QA: тестируем фичи без доступа к коду](<https://devfeed.tech/articles/api-qa-23626.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/528742/>)

Author: SergeyRyabko (Badoo)

Published: 2020-11-19T13:56:20Z

Content type: article

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [API](<https://devfeed.tech/topics/api.md>), [Selenium](<https://devfeed.tech/topics/selenium.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [badoo](<https://devfeed.tech/tags/badoo.md>), [php](<https://devfeed.tech/tags/php.md>), [qa](<https://devfeed.tech/tags/qa.md>), [selenium](<https://devfeed.tech/tags/selenium.md>)

### AI overview

The article introduces Badoo's QAAPI, a tool intended to let engineers and automated tests influence application parameters without changing source code. It describes the testing problem in staging and production environments, including time-dependent features, and states requirements such as simplicity, broad test support, safety, and documentation.

### Source excerpt

Многие фичи приложения невозможно быстро протестировать, не меняя исходный код. Представьте типичную задачу, с которой может столкнуться каждый разработчик: через три дня после регистрации пользователю нужно предложить купить премиум-доступ к продукту со скидкой. Чтобы проверить, работает ли это промо, нужно зарегистрировать тестового пользователя и подождать три дня до появления заветного окошка. Очевидно, что разработчик не будет столько ждать. Он просто сменит в коде значение константы, которая задаёт временной интервал, с трёх дней на 20 секунд -- и получит результат почти мгновенно. Допустим, данные для промопредложения отдаёт сервер, а отрисовывается оно на клиенте. Если серверный тестировщик работает в среде, которая допускает манипуляции с кодом, он тоже быстро справится с задачей. Но как только она окажется там, где возможность менять код отсутствует (стейджинг, продакшен), возникнет проблема. Читать далее

## Система под контролем: как автоматизировать интеграционные тесты

DevFeed: [Система под контролем: как автоматизировать интеграционные тесты](<https://devfeed.tech/articles/article-23625.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/525456/>)

Author: irrational (Badoo)

Published: 2020-10-29T13:21:54Z

Content type: tutorial

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [C](<https://devfeed.tech/topics/c.md>), [Kafka](<https://devfeed.tech/topics/kafka.md>)

Tags: [automatization](<https://devfeed.tech/tags/automatization.md>), [c](<https://devfeed.tech/tags/c.md>), [distributed-systems](<https://devfeed.tech/tags/distributed-systems.md>), [docker](<https://devfeed.tech/tags/docker.md>), [go](<https://devfeed.tech/tags/go.md>), [integration-testing](<https://devfeed.tech/tags/integration-testing.md>), [kafka](<https://devfeed.tech/tags/kafka.md>), [quality-control](<https://devfeed.tech/tags/quality-control.md>), [tag-622612a5798e](<https://devfeed.tech/tags/tag-622612a5798e.md>), [tag-e95ee8b94dca](<https://devfeed.tech/tags/tag-e95ee8b94dca.md>)

### AI overview

The article explains how a Badoo and Bumble backend team automated integration testing for a distributed system composed of C and Go services, Kafka, and Consul. It discusses the system's growing complexity, the risks of manual verification, and the motivation for building an integration-testing framework to detect service-integration errors before production.

### Source excerpt

Привет! Меня зовут Ксения Якиль. Я пишу core-сервисы на C и Go в бэкенд-отделе Badoo и Bumble. Наш бэкенд -- это высоконагруженная распределённая система, обслуживающая пользователей по всему миру. Она оперирует большими массивами данных и делает всю ту магию, благодаря которой люди находят друг друга. В этой статье я не буду концентрироваться на специфике наших сервисов, а расскажу, как мы реализовали автоматизированные интеграционные тесты в распределённой системе, поделюсь общими принципами и нюансами создания фреймворка для них. В тексте будут встречаться отсылки к реализации на Go, так как мы использовали именно этот язык, но понять основную мысль это не помешает. Читать далее

## Ловим баги на клиенте: как мы написали свою систему для сбора клиентских ошибок

DevFeed: [Ловим баги на клиенте: как мы написали свою систему для сбора клиентских ошибок](<https://devfeed.tech/articles/article-23624.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/522600/>)

Author: Unclead (Badoo)

Published: 2020-10-08T13:23:03Z

Content type: tutorial

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [error tracking](<https://devfeed.tech/topics/error-tracking.md>), [App](<https://devfeed.tech/topics/app.md>), [Android](<https://devfeed.tech/topics/android.md>), [iOS](<https://devfeed.tech/topics/ios.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [app](<https://devfeed.tech/tags/app.md>), [badoo](<https://devfeed.tech/tags/badoo.md>), [error-reporting](<https://devfeed.tech/tags/error-reporting.md>), [error-tracking](<https://devfeed.tech/tags/error-tracking.md>), [ios](<https://devfeed.tech/tags/ios.md>), [sentry](<https://devfeed.tech/tags/sentry.md>), [tag-9e6194bca65c](<https://devfeed.tech/tags/tag-9e6194bca65c.md>), [tag-d96e238f1419](<https://devfeed.tech/tags/tag-d96e238f1419.md>)

### AI overview

This article explains how Badoo developed Gelato, an in-house system for collecting client-side errors across web, Android, and iOS applications. It discusses why the company built its own error-tracking system, how error data supports production monitoring and release analysis, and considerations for designing such a system.

### Source excerpt

У нас в Badoo довольно много клиентских приложений. Помимо основных продуктов Badoo и Bumble, у которых есть как веб-версии (десктопная и мобильная), так и клиенты под нативные платформы (Android и iOS), ещё есть с десяток внутренних инструментов со своими UI. Для сбора клиентских ошибок мы используем собственную разработку под кодовым названием Gelatо. Последние два года я работал над её серверной частью и за это время открыл для себя много нового из мира разработки Error Tracking систем. Поэтому, если вам интересно узнать, что из себя представляет разработка системы сбора клиентских ошибок и о чём стоит подумать, если вы решите разрабатывать собственную, добро пожаловать под кат. Читать далее

## eBPF: современные возможности интроспекции в Linux, или Ядро больше не черный ящик

DevFeed: [eBPF: современные возможности интроспекции в Linux, или Ядро больше не черный ящик](<https://devfeed.tech/articles/ebpf-linux-23622.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/520086/>)

Author: mkevac (Badoo)

Published: 2020-09-22T11:03:12Z

Content type: tutorial

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [eBPF](<https://devfeed.tech/topics/ebpf.md>), [Linux](<https://devfeed.tech/topics/linux.md>), [Go](<https://devfeed.tech/topics/go.md>)

Tags: [ebpf](<https://devfeed.tech/tags/ebpf.md>), [go](<https://devfeed.tech/tags/go.md>), [linux](<https://devfeed.tech/tags/linux.md>), [observability](<https://devfeed.tech/tags/observability.md>)

### AI overview

This tutorial introduces BPF and the modern infrastructure around eBPF, explaining what it is, what it can do, and how it can help developers understand complex software systems. It also discusses aspects related to Go and presents the article as a text version of a conference talk.

### Source excerpt

У всех есть любимые книжки про магию. У кого-то это Толкин, у кого-то -- Пратчетт, у кого-то, как у меня, Макс Фрай. Сегодня я расскажу вам о моей любимой IT-магии -- о BPF и современной инфраструктуре вокруг него. BPF сейчас на пике популярности. Технология развивается семимильными шагами, проникает в самые неожиданные места и становится всё доступнее и доступнее для обычного пользователя. Почти на каждой популярной конференции сегодня можно услышать доклад на эту тему, и GopherCon Russia не исключение: я представляю вам текстовую версию моего доклада. В этой статье не будет уникальных открытий. Я просто постараюсь показать, что такое BPF, на что он способен и как может помочь лично вам. Также мы рассмотрим особенности, связанные с Go. Я бы очень хотел, чтобы после прочтения моей статьи у вас зажглись глаза так, как зажигаются глаза у ребёнка, впервые прочитавшего книгу о Гарри Поттере, чтобы вы пришли домой или на работу и попробовали новую "игрушку" в деле. Читать дальше ->

## Как перенести на TypeScript большую кодовую базу React UI-компонентов

DevFeed: [Как перенести на TypeScript большую кодовую базу React UI-компонентов](<https://devfeed.tech/articles/typescript-react-ui-23621.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/518246/>)

Author: Wint95r (Badoo)

Published: 2020-09-09T10:07:01Z

Content type: tutorial

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [React](<https://devfeed.tech/topics/react.md>), [TypeScript](<https://devfeed.tech/topics/typescript.md>), [Front end](<https://devfeed.tech/topics/frontend.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [badoo](<https://devfeed.tech/tags/badoo.md>), [frontend](<https://devfeed.tech/tags/frontend.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [project-management](<https://devfeed.tech/tags/project-management.md>), [react](<https://devfeed.tech/tags/react.md>), [types](<https://devfeed.tech/tags/types.md>), [typescript](<https://devfeed.tech/tags/typescript.md>), [ui](<https://devfeed.tech/tags/ui.md>), [web-developement](<https://devfeed.tech/tags/web-developement.md>)

### AI overview

A Badoo UI developer describes migrating 630 React UI components to TypeScript. The article explains the reasons for the migration, including compile-time type safety, improved code reliability, and reuse across projects, as well as the phased process for introducing TypeScript to UI developers.

### Source excerpt

Привет! Меня зовут Иван Греков, я работаю UI-разработчиком в frontend-команде Badoo. Главные задачи нашей команды -- создание новых и поддержка существующих пользовательских интерфейсов для сайтов и приложений Badoo и Bumble. Когда в конце 2019 года мы начали параллельно работать над несколькими проектами, мы задумались над повышением стабильности кода и возможностью его многократного использования. Для этого мы решили переписать наши 630 React UI-компонентов на TypeScript. Я расскажу о том, как мы работали над ними без перерыва в доставке фич и как организовали поэтапный переход на TypeScript для UI-разработчиков, которым этот язык был в новинку. Читать далее

## Архитектурный шаблон MVI в Kotlin Multiplatform. Часть 3: тестирование

DevFeed: [Архитектурный шаблон MVI в Kotlin Multiplatform. Часть 3: тестирование](<https://devfeed.tech/articles/mvi-kotlin-multiplatform-3-23620.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/516808/>)

Author: arkivanov (Badoo)

Published: 2020-08-27T12:52:18Z

Content type: tutorial

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>), [Android](<https://devfeed.tech/topics/android.md>), [iOS](<https://devfeed.tech/topics/ios.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [cross-platform](<https://devfeed.tech/tags/cross-platform.md>), [ios](<https://devfeed.tech/tags/ios.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [mpp](<https://devfeed.tech/tags/mpp.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [mvi](<https://devfeed.tech/tags/mvi.md>)

### AI overview

This concluding article in a series demonstrates unit and integration testing for a shared Kittens module in Kotlin Multiplatform applications. It discusses testing across supported platforms, including Android and iOS, and describes limitations such as the lack of mocking libraries for Kotlin/Native and Kotlin/JS.

### Source excerpt

Эта статья является заключительной в серии о применении архитектурного шаблона MVI в Kotlin Multiplatform. В предыдущих двух частях (часть 1 и часть 2) мы вспомнили, что такое MVI, создали общий модуль Kittens для загрузки изображений котиков и интегрировали его в iOS- и Android-приложения. В этой части мы покроем модуль Kittens модульными и интеграционными тестами. Мы узнаем о текущих ограничениях тестирования в Kotlin Multiplatform, разберёмся, как их преодолеть и даже заставить работать в наших интересах. Обновлённый пример проекта доступен на нашем GitHub.

## Композитная сборка как альтернатива buildSrc в Gradle

DevFeed: [Композитная сборка как альтернатива buildSrc в Gradle](<https://devfeed.tech/articles/buildsrc-gradle-23618.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/514094/>)

Author: ChPr (Badoo)

Published: 2020-08-06T12:04:36Z

Content type: tutorial

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [Android Studio](<https://devfeed.tech/topics/android-studio.md>), [ide](<https://devfeed.tech/topics/ide.md>), [Groovy](<https://devfeed.tech/topics/groovy.md>), [Stack Overflow](<https://devfeed.tech/topics/stackoverflow.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [gradle-plugin](<https://devfeed.tech/tags/gradle-plugin.md>), [groovy](<https://devfeed.tech/tags/groovy.md>), [ide](<https://devfeed.tech/tags/ide.md>), [junit](<https://devfeed.tech/tags/junit.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>)

### AI overview

This article explains how Gradle composite builds can replace buildSrc for shared plugins, tasks, and configuration. It describes buildSrc's cache invalidation drawback and discusses the author's experience with modular Android projects, including migration challenges and IDE support.

### Source excerpt

В Gradle -- системе автоматической сборки -- подход с buildSrc уже успел стать стандартом для реализации собственных плагинов и задач, а также создания общих конфигураций, например списков зависимостей и версий. Но у него есть существенный недостаток: при изменении buildSrc кеш сборки становится недействительным. При этом Gradle предоставляет альтернативный подход -- композитные сборки, лишённые этого недостатка. В этой статье я расскажу, как использовать композитную сборку вместо buildSrc и с какими сложностями можно столкнуться при миграции. Читать дальше ->

[Next page](<https://devfeed.tech/sources/badoo-ru.md?cursor=WyIyMDIwLTA4LTA2VDEyOjA0OjM2KzAwOjAwIiwgIjUyYmNkZWExLTU0YzAtNDJmMy04M2Q5LTczOWUxNTJiYTgwMyJd>)