23 апреля 2018 2372

Привет! Пришло время очередной заметки в регулярно нерегулярном блоге о мобильной разработке. Сегодня я хочу затронуть тему рефакторинга, технического долга и пресловутого фактора “так исторически сложилось”, вернее, как этого избежать.

Привет! Пришло время очередной заметки в регулярно нерегулярном блоге о мобильной разработке. 

Сегодня я хочу затронуть тему рефакторинга, технического долга и пресловутого фактора “так исторически сложилось”, вернее, как этого избежать.

Всегда, особенно после ударных и задорных спринтов разработки, у разработчиков наступает период осознания и принятия произошедшего. Решения, принятые на скорую руку, вызывают споры на кофепоинтах, да или просто в комментах при ревью пулл-реквестов.

 Почему так может быть:
  • из-за отсутствия технического планирования;
  • невнятных требований бизнес-аналитиков;
  • непостоянства взглядов и целей бизнеса;
  • необходимости “все просто сделать в срок”.
Как с этим бороться, чтобы успевать в срок и менджмент выделял время? Никак.
Старайтесь следовать техникам, которые вас не приведут в такую ситуацию.  Ниже я поделюсь тем, что помогает мне.

Держите ваш огород в чистоте, соблюдайте санитарные нормы, автоматически

Можно много и долго говорить о код стандартах, спорить о табах или пробелах, не актуальности MVC и срочной необходимости внедрить MVVM. Это все здорово, но можно начать с того, чтобы внедрить:

  • LeakCanary – следить за утечками памяти;
  • StrictMode – следить за длительными операциями, не закрытыми курсорами и т.д.
Хотя бы в каждый из ваших debug-билдов, уже сейчас. И вам не надо будет совершать ударных подвигов во вторую смену, в ночь перед релизом отлавливать утечки по памяти или вострячить фикс после релиза.

KISS my SOLID YAGNI

Пожалуй, если бы мы играли в bulls**t bingo poker, это было бы заявкой на роял флэш. Можно говорить о многих принципах и паттернах в разработке, но все это разговоры до тех пор, пока вы не начали работать по каким-то правилам. 

Начните придерживаться хоть какой-нибудь общей архитектуры в проекте, это потом вам даст возможность:
  • провести рефакторинг;
  • или залатать дыры в одинаковом ключе во всем проекте; 
  • это даст возможность всем членам команды работать над всеми компонентами без исключений, без разделения на эксклюзивное авторство.
Просто возьмите за правило делать простые кастомные Android Views с объявлением и реализацией необходимых методов через interfaces. 

На ровне с этим начните реализовывать Presenters, которые оперируют с View через интерфейс. Напишите простейшие тесты на View и Presenter. Код получится простой и нарезанный на слои.
Слои в архитектуре нужны не для того, чтобы сотрудники, подобно геологам, изучали проект по слоям и изломам, как он исторически складывался, а для того чтобы разделять логику UI от логики обработки данных.

Начните писать тесты, но это уже было в Симпсонах предыдущем параграфе

Просто начните с самого простого и малого, например действительно ли отображается прогресс бар, когда View просят это сделать, действительно ли строчка такая, какую мы установили. 

Это все нужно для того, чтобы делать smoke-тесты вашего промышленного изделия. Текущее положение дел вынуждает производить поставки софта с невероятной скоростью, что создает высокое давления на проектные команды. Понизьте давление и уровень стресса, создавая простые тесты. 

Вы будете знать наверняка и потратите меньше времени на дебагинг, прогнав тесты там, где подтравливают баги.

Все асинхронно, синхронности в 21 веке не существует

Начните воспринимать каждое событие, каждую функцию как потенциальный источник асинхронных событий в вашей системе. 

Освойте Rx Java/Swift/JS, просто начните использовать реактивный подход, перекладывание с потока на поток еще никогда не было таким лаконичным. Это позволит сделать ваш код устойчивым к изменяемым требованиям, дополнительным взаимодействиям с сервером или сделает вас готовым к той самой «пятнице», когда серверная команда поменяет протокол – вы просто добавите Rx цепочку дополнительное действие и всё, “релизная” пятница спасена.

Составьте карту состояний

Да, я знаю, возможно это уже было в этом блоге, но, я не могу пройти мимо. Ваша программа, это по сути набор состояний идущих друг за другом. Облегчите себе и другим жизнь – договоритесь с отделом тестирования о всех возможных состояниях.

Используйте StateMachines, учтите по максиму все, приготовьтесь к тому, что ожидается, и приправьте это дело скепсисом относительно внешних факторов – отсутствие сети, не адекватность ответа сервера, ведь там тоже работают программисты, только серверные.

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

Аппарат вызываемого абонента...

Да, именно так, разрабатывайте приложение с учетом того, что сетевое соединение может пропасть в любой момент, а лучше примите это за данность: соединение пропадет именно сейчас. 

Вы будете готовы к тому, что заказ не отправлен, http-запрос не прошел.

Впустите Dependency Injection в гости к вашему проекту

Во-первых, вы можете разделять и распараллеливать работу. А еще, возможно, делать разработку, пока какие-то компоненты не готовы - делать стабы на мокнутых компонентах. А еще можно создавать моки будто нам отвечает неадекватный сервер и использовать все это богатство как в тестах, так и в приложении. 

Dependency Injection дает вам инфраструктуру для проведения без болезненных рефакторингов и экспериментов с реализациями.  

Dagger 2 и Toothpick для этого отлично подходят на Android-проекте.

Иван, это все вода, ты пример покажи

Возможно, текст получился излишне научно-популярным, без избытка технических деталей, но в интернете уже полно статей про то, как следовать какому-либо паттерну. Задача же, которую я ставлю перед собой, – это озвучить реальные проблемы и последствия и объяснить, во что это выливается в жизни.

А что касается примера, вот здесь можно посмотреть на часть концепций затронутых в данном тексте: http://github.com/vanatka/funwithinterfaces 

К сожалению, как пелось в песне группы "2 самолета, жизнь" очень сложная штука, а для того чтобы ее облегчить, надо следовать правилам, которые будут ограждать от проблем и никогда не идти на компромиссы ради сиюминутной выгоды.

Спасибо, искренне ваш, капитан очевидность.

https://www.youtube.com/watch?v=aHLfyWfeATk 

Последние статьи в блоге

Системный аналитик 100 lvl — дорожная карта развития

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

23 декабря 2024

Платформа сертификации IBS признана лучшим digital-решением для корпоративного обучения

Центр сертификации IBS стал обладателем Гран-при премии «Смарт пирамида» — одной из самых престижных российских премий за достижения в области обучения и развития человеческого капитала.

20 декабря 2024

Учебный центр IBS получил сертификат ГОСТ Р ИСО 9001-2015

В октябре 2024 года Учебный центр IBS получил сертификат соответствия ГОСТ Р ИСО 9001-2015. Это важное достижение подтверждает, что мы придерживаемся высоких стандартов качества и результативно управляем образовательными процессами организации.

19 декабря 2024

9 курсов со скидкой до 50%

Друзья, в январе стартует 9 курсов, обучение на которых можно купить со скидкой до 50%*! 

15 декабря 2024

8 заблуждений про тестирование

Тестирование программного обеспечения окружено множеством заблуждений. Эти стереотипы нередко приводят к недопониманию его реальной роли и важности для успешного создания продуктов. Рассмотрим восемь самых распространенных мифов о тестировании и объясним, почему они не соответствуют действительности.

15 декабря 2024

Путь к Fullstack-тестировщику: что нужно знать о ручном и автоматизированном тестировании?

Тестирование программного обеспечения — одна из самых востребованных областей в IT. И часто новички и даже опытные специалисты, желающие строить свою карьеру в этом направлении, часто сталкиваются с вопросом: какое тестирование выбрать — ручное, автоматизированное или Fullstack? У каждого из этих направлений свои особенности, преимущества и требования к знаниям. В этой статье рассмотрим каждое из направлений, их плюсы и минусы, области применения и навыки, необходимые для успеха.

15 декабря 2024

Совет по развитию сертификации ИТ-специалистов при АПКИТ аккредитовал «Платформу сертификации IBS»

Директор департамента обучения и развития IBS Владимир Гернер участвовал в заседании Совета по сертификации ИТ-специалистов при АПКИТ.

Новости Жизнь компании
08 октября 2024

Java-сертификация: IBS в сравнении с Oracle

Игорь Судакевич рассказывает, почему сертификаты могут стать важным инструментом для достижения карьерных целей.

Новости
04 октября 2024

Исследование IBS: число новых ИТ-решений в реестре ПО выросло в 2023 году более чем на треть

Анализируем ситуацию на рынке российского ПО.

Жизнь компании
01 октября 2024

6 суперспособностей Fullstack-тестировщиков, которые напоминают навыки животных

Читайте о скиллах, которые делают тестировщиков востребованными на рынке труда.

27 сентября 2024

5 мифов о системных аналитиках

Вместе с Екатериной Тихомировой, специалистом по системному и бизнес-анализу, разбираемся, чем занимаются системные аналитики.

20 сентября 2024

Методология 12 факторов: как успешно разрабатывать облачные приложения

Андрей Бирюков рассказывает о методологии, которая помогает разрабатывать качественные, устойчивые и эффективные веб-приложения.

12 сентября 2024

Баги, которые стали фичами

Многие вещи, которые мы используем ежедневно, были случайно открыты. В честь дня тестировщика рассказываем про 5 багов, которые стали фичами.

09 сентября 2024

Шаблоны облачного проектирования

Читайте про наиболее популярные шаблоны облачного проектирования: шаблон Bulkhead и шаблон Sidecar.

06 сентября 2024

Бесплатные мини-курсы ко Дню знаний

Друзья, поздравляем с Днём знаний! Желаем любопытства, открытий и новых побед!

02 сентября 2024

5 курсов со скидкой 30%

Друзья, в сентябре стартует 5 курсов со скидкой 30%*

29 августа 2024

Исследование IBS: на одну вакансию в Java-разработке приходится 4 резюме

По данным исследования рекрутингового центра IBS, наибольшая конкуренция среди соискателей наблюдается среди Python-разработчиков: на одну вакансию приходится 10 резюме. В менее конкурентной среде находятся Java-разработчики (4 резюме на одну вакансию). Самыми дефицитными являются специалисты по языку Go: менее 2 резюме на одну вакансию.

28 августа 2024

Индексирование баз данных в PostgreSQL: погружение в тему

В продолжение серии статей об устройстве системы управления базами данных (СУБД) PostgreSQL (раз, два) смотрим, как ускорить выполнение запросов к базе данных с помощью индексов.

28 августа 2024

Книги для системных и бизнес-аналитиков, а также будущих и нынешних архитекторов

Наш коллега, архитектор информационных систем Сергей Политыко, поделился полезными книжными рекомендациями.

Жизнь компании
19 августа 2024

Сценарии кибератак с использованием ИИ. Внутренний периметр.

Кибератаки, направленные на внутренние периметры организаций, становится особенно актуальной темой. Внутренние атаки могут происходить как от злоумышленников с доступом к ресурсам, так и извне, используя уязвимости внутренней инфраструктуры. Использование ИИ в таких атаках позволяет автоматизировать и улучшить процесс поиска уязвимостей, создать вредоносный код и разработать методы социальной инженерии, что увеличивает скорость и масштаб атак. Расскажем про сценарии таких атак подробнее.

16 августа 2024

Не нашли, что искали? — Просто напишите, и мы поможем

Продолжая, я подтверждаю, что ознакомлен с Условиями использования и Порядком обработки персональных данных
Корпоративное обучение Оценка персонала Сертификация О нас Стань тренером Блог
Пользователь только что записался на курс ""
Спасибо!
Форма отправлена успешно.