Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Уроки выживания в легаси

Уроки выживания в легаси

Евгений Мацюк, KasperskyLab – MOSDROID #7 Nitrogen

Каково жить с Android-проектом, которому 8 лет? Что там вообще внутри? Там вообще есть жизнь?=)

А когда вы узнали, что там внутри, можно ли остаться счастливым и беззаботным разработчиком?

На самом деле, можно и нужно, хотя это и непросто. В своем докладе я вам расскажу, как такие проекты переводить на новые рельсы и стоит ли их вообще переводить. Какие этапы можно выделить. Какие приемы и технологии работают, а какие нет. И главная интрига — реальна ли там чистая архитектура? =)

MOSDROID

April 17, 2018
Tweet

More Decks by MOSDROID

Other Decks in Programming

Transcript

  1. Kaspersky Lab | The Power of Protection 2 Что такое

    разработческое счастье? Пилить интересные фичи Делать крутые штуки И ничего лишнего Писать код
  2. Kaspersky Lab | The Power of Protection 3 Среднестатистический проект

    Оценка: 4+ Возраст: 3+ лет Много активных пользователей Продукт приносит или деньги, или юзеров, или имя
  3. Kaspersky Lab | The Power of Protection 4 НО! Время

    регресса растет Скорость внедрения фич падает Баги стреляют Разработчик страдает
  4. Kaspersky Lab | The Power of Protection 12 Шаг 1.

    Технологии и договоренности
  5. Kaspersky Lab | The Power of Protection 13 Шаг 1.

    Технологии и договоренности Выбор архитектуры CodeStyle, лучшие практики и договоренности Инфраструктура: CI/CD, автотесты Выбор стека технологий
  6. Kaspersky Lab | The Power of Protection 14 Шаг 1.

    Пример архитектуры и стека Clean architecture Dagger 2
  7. Kaspersky Lab | The Power of Protection 15 Шаг 1.

    Пример архитектуры и стека Presentation Domain Data Feature Component Feature Component
  8. Kaspersky Lab | The Power of Protection 16 Шаг 1.

    Пример архитектуры и стека Clean architecture Dagger 2 RxJava 2 Moxy Cicerone
  9. Kaspersky Lab | The Power of Protection 17 Шаг 1.

    Пример договоренностей /** * 1. check is any activation started <br> * 2. is network enabled <br> * 3. check megafon <br> * 4. simulate -> activateWithCode 2/1 <br> * Schedulers.io <br> * * @return success: LicenseActivationResult <br> * error: no */ Single<LicenseActivationResult> activateByUcpCode( @NonNull String code, @Nullable String signedBinding );
  10. Kaspersky Lab | The Power of Protection 18 Шаг 1.

    Пример договоренностей .doOnSubscribe(disposable -> KLog.i(LogTags.LICENSE_TAG, "UcpLicensesStepPresenter... .doOnSuccess(result -> KLog.i(LogTags.LICENSE_TAG, "UcpLicensesStepPresenter... .doOnError(throwable -> KLog.w(LogTags.LICENSE_TAG, "UcpLicensesStepPresenter...
  11. Kaspersky Lab | The Power of Protection 19 Шаг 1.

    Пример инфраструктуры GitFlow Автотесты: в процессе CI: Стэк Microsoft TFS + Jenkins
  12. Kaspersky Lab | The Power of Protection 20 Шаг 2.

    Обучение и проверка
  13. Kaspersky Lab | The Power of Protection 21 Шаг 2.

    Пример обучения Теория + тестовое задание по Clean Architecture Список вопросов и персональный экзамен по RxJava Персональный опрос по другим технологиям
  14. Kaspersky Lab | The Power of Protection 22 Шаг 3.

    Внедрение архитектуры и технологий
  15. Kaspersky Lab | The Power of Protection 23 Шаг 3.

    Внедрение архитектуры и технологий Добавить новые либы в gradle Создать пакет “your.package.name.clean” Наполнить пакет слоями с классами-пустышками Dagger 2. Создать AppComponent Готово!
  16. Kaspersky Lab | The Power of Protection 25 Шаг 4.

    Схема проекта Ядро Главный экран Старт приложения Лицензирование
  17. Kaspersky Lab | The Power of Protection 26 Шаг 4.

    Схема проекта Anti Virus App Lock FRW Ядро
  18. Kaspersky Lab | The Power of Protection 27 Шаг 4.

    Схема проекта Остальные Модули Ядро
  19. Kaspersky Lab | The Power of Protection 28 Шаг 4.

    Схема проекта Цель шага: 1. Выявить состав ядра 2. Определиться с основными модулями
  20. Kaspersky Lab | The Power of Protection 30 Перевести на

    новые рельсы ядро и основные модули
  21. Kaspersky Lab | The Power of Protection 31 Главная цель.

    Вопросы Срок перехода? ─ До года А что с остальными модулями? ─ Не трогать и забыть Можно ли только рефакторить? ─ Нет
  22. Kaspersky Lab | The Power of Protection 33 Шаг 1.

    Сделка с дьяволом
  23. Kaspersky Lab | The Power of Protection 34 Шаг 1.

    Сделка с дьяволом 1. Рефакторинг втихую Ошибки разработки и менеджера: 2. Рефакторинг во время стабилизации 4. Точная оценка рефакторинга 5. Рефакторинг – это не починка багов 3. Переоценивать фичи релиза для рефакторинга
  24. Kaspersky Lab | The Power of Protection 35 Шаг 1.

    Сделка с дьяволом 1. У всех должно быть понимание необходимости рефакторинга Цель шага: 2. Вся команда должна быть честна друг с другом
  25. Kaspersky Lab | The Power of Protection 37 Шаг 2.

    Разведка боем. План 1. Обособленная фича с минимальными зависимостями 2. Выделение неприкосновенной Спец.бригады 3. Совместное планирование и оценивание 4. Выделение значительных временных буферов 5. Разработка и фикс багов – в отдельном бранче 6. Цель – уложиться в релиз
  26. Kaspersky Lab | The Power of Protection 38 Шаг 2.

    Разведка боем 1. Безопасный эксперимент Результаты: 2. Первая победа 3. Готовая к подвигам спец.бригада
  27. Kaspersky Lab | The Power of Protection 39 Шаг 3.

    Полный вперед! или рефакторинг компонентов ядра и основных модулей
  28. Kaspersky Lab | The Power of Protection 40 Шаг 3.

    Релизный цикл Feature 1 Feature 2 Feature 3 Feature 4 Feature 5 Feature 6 x x + 8 x + 16 Release 1 Release 2
  29. Kaspersky Lab | The Power of Protection 41 Шаг 3.

    Конкретный релиз x - 2 x - 1 x x + 1 x + 2 x + 3 x + 4 x + 5 x + 6 x + 7 x + 8
  30. Kaspersky Lab | The Power of Protection 42 Шаг 3.

    Конкретный релиз x - 2 x - 1 x x + 1 x + 2 x + 3 x + 4 x + 5 x + 6 x + 7 x + 8
  31. Kaspersky Lab | The Power of Protection 43 Шаг 3.

    Конкретный релиз x - 2 x - 1 x x + 1 x + 2 x + 3 x + 4 x + 5 x + 6 x + 7 x + 8
  32. Kaspersky Lab | The Power of Protection 44 Шаг 3.

    Конкретный релиз x - 2 x - 1 x x + 1 x + 2 x + 3 x + 4 x + 5 x + 6 x + 7 x + 8
  33. Kaspersky Lab | The Power of Protection 45 Шаг 3.

    Конкретный релиз x - 2 x - 1 x x + 1 x + 2 x + 3 x + 4 x + 5 x + 6 x + 7 x + 8
  34. Kaspersky Lab | The Power of Protection 46 Шаг 3.

    Конкретный релиз x - 2 x - 1 x x + 1 x + 2 x + 3 x + 4 x + 5 x + 6 x + 7 x + 8
  35. Kaspersky Lab | The Power of Protection 47 x -

    2 x - 1 x x + 1 x + 2 x + 3 x + 4 x + 5 x + 6 x + 7 x + 8 Составление скоупа следующего релиза Выбор компонента для рефакторинга
  36. Kaspersky Lab | The Power of Protection 48 Шаг 3.

    Скоуп + компонент для рефакторинга. Light Feature 1 Feature 2 Feature 3 Feature 4
  37. Kaspersky Lab | The Power of Protection 49 Шаг 3.

    Скоуп + компонент для рефакторинга. Light Feature 1 Feature 2 Feature 3 Feature 4 Feature 5
  38. Kaspersky Lab | The Power of Protection 50 Шаг 3.

    Скоуп + компонент для рефакторинга. Light Feature 1 Feature 2 Feature 3 Feature 4 Feature 5
  39. Kaspersky Lab | The Power of Protection 51 Шаг 3.

    Скоуп + компонент для рефакторинга. Hardcore Feature 1 Feature 2 Feature 3 Feature 4 Feature 5 Component
  40. Kaspersky Lab | The Power of Protection 52 Шаг 3.

    Скоуп + компонент для рефакторинга Feature 1 Feature 2 Feature 3 Feature 4 before refactoring 5 6 4 7 after refactoring 3 4 3 5
  41. Kaspersky Lab | The Power of Protection 53 x -

    2 x - 1 x x + 1 x + 2 x + 3 x + 4 x + 5 x + 6 x + 7 x + 8 Составление скоупа следующего релиза Выбор компонента для рефакторинга Начало анализа выбранного компонента + его оценка
  42. Kaspersky Lab | The Power of Protection 54 Шаг 3.

    Типичный компонент Компонент
  43. Kaspersky Lab | The Power of Protection 55 Шаг 3.

    Типичный компонент Компонент Компонент Компонент Wrappers
  44. Kaspersky Lab | The Power of Protection 56 x -

    2 x - 1 x x + 1 x + 2 x + 3 x + 4 x + 5 x + 6 x + 7 x + 8 Составление скоупа следующего релиза Разделение релиза на must и nice to have требования Выбор компонента для рефакторинга Начало анализа выбранного компонента + его оценка
  45. Kaspersky Lab | The Power of Protection 57 x -

    2 x - 1 x x + 1 x + 2 x + 3 x + 4 x + 5 x + 6 x + 7 x + 8 Составление плана релиза Примерные оценки + временные буфера Постепенное начало рефакторинга
  46. Kaspersky Lab | The Power of Protection 58 x -

    2 x - 1 x x + 1 x + 2 x + 3 x + 4 x + 5 x + 6 x + 7 x + 8 Хотя бы сырой отрефакторенный компонент Как можно раньше в тестирование Начало реализации фич Фикс багов по рефакторингу
  47. Kaspersky Lab | The Power of Protection 59 x -

    2 x - 1 x x + 1 x + 2 x + 3 x + 4 x + 5 x + 6 x + 7 x + 8 Выход на стабилизацию
  48. Kaspersky Lab | The Power of Protection 60 Шаг 4.

    До победного конца! или рекурсия Шага 3