1 of 38

Собираем метрики с кода

Павел Королев ∙ Beeline Казахстан

2 of 38

2

Павел Королев

Android Tech Lead на проекте Мой Beeline (Казахстан) полтора года

@pavelkorolevxyz

В Android разработке с 2011 года

3 of 38

3

02

0

Мой Beeline (Казахстан)

Суперапп

>4 млн

7

Кроссфункциональных

команд

Monthly Active Users

~300k

строк кода

40% рост за год

~120

модулей в проекте

300% рост за год

4 of 38

4

О чём поговорим

01

02

03

04

05

06

Метрики

Реализация сбора

Примеры

Метрики

5 of 38

5

Метрики

6 of 38

6

❇️ Количество крашей и ANR

❇️ Оценка в Google Play

❇️ Время запуска приложения

❇️ Доступность сервисов

❇️ Время ответа на запросы

и многое другое

Метрики качества

7 of 38

7

А почему бы нам не собирать технические метрики?

8 of 38

8

Реализация

сбора метрик

9 of 38

9

Требования

Нужен инструмент для сбора метрик

Запускать на CI

Хранить историю

10 of 38

10

Варианты реализации инструмента

Standalone

Gradle Task

3rd party

11 of 38

11

Варианты реализации инструмента

Standalone

Gradle Task

3rd party

12 of 38

12

Вся система целиком

Gitlab CI

Программа для выгрузки

Gradle Task

13 of 38

13

Пишем

Gradle Task

Вызываем

Регистрируем

14 of 38

14

Пишем “калькуляторы”

15 of 38

15

Пишем

Gitlab CI конфиг

16 of 38

16

Собираем данные

  1. Пишем простую консольную Kotlin программу
  2. Она ходит в Gitlab по API, используя gitlab4j-api
  3. Выкачивает артефакты (отчёт) соответствующей джобы
  4. Сохраняет в кэш, локально на этом же компе
  5. Из всех файлов кэша собирает один CSV по датам
  6. При следующем запуске вытащит только данные по новым датам

17 of 38

17

Этот CSV – наша история

Хотим – загоняем в Excel, хотим – рисуем графики

18 of 38

18

Примеры метрик

Проекта Мой Beeline

19 of 38

19

Количество Kotlin и Java строк и файлов

1

Kotlin умеренно растёт,

Java уменьшается и стремится к нулю

20 of 38

20

Количество Kotlin Script и Groovy файлов Gradle

2

Kotlin Script распространяется на все модули,

Groovy стремится к нулю

21 of 38

21

Количество XML layout файлов

3

Уменьшается из-за перехода на Compose.

Стремится к нулю

22 of 38

22

Количество кода в монолите

4

Уменьшается из-за модуляризации

23 of 38

23

Количество файлов с RxJava

5

Уменьшается из-за перехода на корутины.

Стремится к нулю

24 of 38

24

Количество layout файлов с DataBinding

6

Уменьшается из-за перехода на Compose.

Стремится к нулю

25 of 38

25

Количество app/feature/core модулей

7

Увеличивается.

Стремится к количеству модулей

26 of 38

26

Количество модулей с KAPT

8

Уменьшается из-за перехода на KSP.

Стремится к нулю

27 of 38

27

Количество

dynamic feature модулей

9

Уменьшается из-за подхода к модульной архитектуре.

Стремится к нулю

28 of 38

28

Критический путь

10

Уменьшается из-за подхода к модульной архитектуре.

Стремится к трём (app → feature → core)

29 of 38

29

Время сборки проекта

11

Сдержанно увеличивается.

В идеале уменьшается

30 of 38

30

Размер приложения

12

Сдержанно увеличивается.

В идеале уменьшается

31 of 38

31

Количество Jetifier зависимостей

13

Уменьшается.

Стремится к нулю

32 of 38

32

Количество предупреждений от статического анализа

14

Честно, без бейзлайнов

Уменьшается.

Стремится к нулю

33 of 38

33

Это всё – очень разные метрики

34 of 38

34

35 of 38

35

Можно реализовать чище, красивее и функциональнее

36 of 38

36

Быстро собираем метрику – быстро начинаем следить за динамикой

37 of 38

37

Цель доклада – спровоцировать у вас размышления

А что можно посчитать у вас?

38 of 38

38

Спасибо

Павел Королев

pavelkorolevxyz_channel