This document summarizes tools and technologies used in mobile development. It mentions languages, libraries, frameworks, and tools related to development workflows including build systems, testing, analytics, and continuous integration. The document also briefly outlines best practices for knowledge sharing, personal projects, and team organization within a mobile development company.
* После сегодняшнего тренинга, я понял насколько кажется детским мобильные разработки ентерпрайз девелоперам * И все же я не потерял интереса рассказать вам про мою песочницу, пасочки и лопатки * Уважаемые зубры, примите мою презентацию как возможный список используемых решений, если вдруг в вашей компании появятся мобильные продукты
* Компания основана в 2003 и имеет два основных продукта - чат, агрегатор сервисов сообщений, и хмс, наш собственный сервис. * Продукты работают на 7 клиентских платформах и имеют более 30 миллионов юников в месяц * Если у вас смартфон в кармане, можете уже начать тестирование, это подсказка * В компании работают талантливые люди из более чем 26 стран мира
Для j2me проектов мы используем ant в связке с antenna Для BlackBerry ant с плагином bb-ant-tools Для Android мы используем maven и android плагин Активно используем proguard Есть релиз авточеки, чтобы не зарелизить билды с девелоперскими урлами, отладочной информацией и другими стыдными вещами Смотрим в сторону gradle
У нас есть доморощеная вики для перевода текстов - что-то переводится самими (26 национальностей) или общественностью, что-то отдается на перевод агенствам С помощью XSLT это преобразуется в файлы переводов и заливается в source control Система не фонтан и мы рассматриваем альтернативы
Все крутится на TeamCity с девятью агентами - 4 linux, 3 windows, 2 mac Каждый проект имеет как минимум три конфигурации - trunk, beta и release Конфигурация пересобирается каждый комит с прогонкой юнит тестов и выкладывается в известном для всех (QA) месте Automated acceptance тесты запускаются два раза в сути, integration тестов у нас мало, но мы хотим больше :) Deploy Beta и Production происходит пином соответствующего успешного билда в TeamCity
Для зависимостей используем artifactory, для антовых билдов ivy В проекты разбиты на модули, что позволяет нам иметь одно платформо независимое sdk для java клиентов для xms А в chat одна sdk и для android клиента, и для сервера Вообще, если вы берете что-то из одного проекта в другой через сорцы, то вы делаете еще больший грех, чем копипаст Используется cторонние библиотеки, если находятся баги, мы форкаем сорцы и делаем свои снапшоты, ну и так же не забываем пул реквестить в оригиналы :) Пару вещей подумываем заопенсорсить - BlackBerry simulator tests, но никак не доходят руки
Очень важно понимать, кто ваши пользователи и как они используют ваше приложение, особенно для нас, ведь мы существенную чать выручки получаем с рекламы Мы используем Flurry для мобильных, Google Analytics для веба У нас есть свой DataWarehouse для bekend, где обычно дублируются важнейщие показатели для аналитики Иногда результаты часто не совпадают и это выливается в интерейснейшие исследования Все новые фичи отображены в аналитике чтобы ПО мог понять насколько она востребованна и понятна
Каждый несколько месяцев проходит UX тестирование с привлечением добровольцев Поддержка пользователей идет через zendesk, который соединен с jira Смотрим jira mobile connect, но он доступен пока для ios и немного для android Все сотрудники являются ярыми альфа, бета тестерами и дают качественный feedback через zendesk Что очень важно, каждый мобильный разработчик является старательным пользователем своего продукта
Люди разбиты на команды 4-5 разработчиков В каждой комманде один QA и идут жаркие дебаты по включению туда Design и UX people В XMS тимы разбиты по платформам, в Chat пара смешанных ( feature) комманд В XMS хорошо организованный scrum, а вот operations, DWH и Chat плавают между канбаном и скрамом В каждой комманде есть definition of done, planning, daily stand up, story voting и retrospective
Используйте свою любимую среду. Проект либо maven либо Eclipse format. Ничего генерерованного, воспроизводимого, временного относящегося к среде в version control Обязательно code convention и автоформатирование (eclipse code formatter plugin). Ну честно, так корбит смотреть на разные отступы или искать в куче пробелов реальные изменения. Если у вас есть sonar - настройте правило
Мы используем SVN :( Девелопмент идет в trunk, который бранчуется в бету и релизится Частые фокусированные комиты - разделение по действию, подсистеме Behaviour commit comments - пишите, что делает теперь приложение, а не то что сделали вы И не забываем простые правила - не заливаем не полные изменения, обновится до коммита, резолвим конфликты, запускаем тесты
Растите культуру чистого кода Читабельный код Тестируемый код Опытный бекенд разработчик в мобильной команде отлично вправляет мозги мобильным разработчикам Скажите нет препроцессору и предоптимизациям Комментарии только для workarounds багов телефонных прошивок
Писать хорошие тесты сложно, писать хорошие тесты под мобильные еще сложнее. Как результат - многие/очень многие мобильные разработчики не пишут тестов Покажите/научите как тесты влияют на дизайн, на качество и скорость проекта Дебаг и логгирование становятся редким развлеченим В этом вам конечно поможет засланец из страны бекенда
Добивайтесь как можно быстрого фидбека от тестов - большинство функционала должно тестировать на десктопе (junit, fest assert, mockito) Используйте решения эмулирующие апи платформы (robolectric, microemulator) Все остальное тестируется на симуляторе/емуляторе с обязательной интеграцией с CI (fledge, instrumental tests, j2meunit) Ищите/пробуйте свое решение, часто фрейморки активно подменяющие ClassLoader и использующие Reflection конфликтуют между собой
Разделяйте создание объектов и их использование Мы не нашли хорошего фреймворка для j2me/blackberry, используем самописный контейнер Спасибо Dalvik есть хорошие DI решения - RoboGuice и сравнительно новый Dagger
Очень много времени уходит на regression. Срочно автоматизируйте! Мы используем sikuli для j2me, bb и android. Но смотрим в сторону RoboGuice MonkeyRunner полезная штука для проверки стабильности приложения
Парное программирование полезная штука, особено когда в команде люди с разным багажом Мы создаем тикет-напоминание в jira для парного программирования и обмена знаниями. Переключение обычно происходит после коммита Код ревью происходит в течении дня независимо в комманде В конце стори происходит коммандный код ревью, а если стори была 8+, то в начале происходит коммандный дизайн митинг Информация хранится в вики, эта часть у нас страдает, но мы работаем над этим А также туда вносятся результаты спайков
Очень важная практика, которая часто используется в компании - когда нет четкого понимания проблемы, ипользования бибилиотеки или есть не проясненые зависимости Перед стартом - обязательно понимание, что должно быть выходом Timeboxed - не более 12 часов (2 человека дня) Фиксируется в вики и обязательно презентуется ПО
Несколько фич выросло из личных проектов - location based discovery, stamps Каждый имеет право на два личных проекта в году. Каждый проект не более одного спринта Отличная возможность попробовать новое, интересное или закодить важное для себя
Живите и болейте своими продуктами, страдайте умеренным перфекционизмом, помните, что команда ответсвенна за качество и вы в первую очередь Не переставайте учится и искать более оптимальные процессы и решения Читайте, смотрите, общайтесь с коллеками, конкурентами и единомышленниками Энергии и удачи вам