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

Quality. Android Quality. RU (Mobicode 2016, Mi...

Quality. Android Quality. RU (Mobicode 2016, Minsk)

Oleksandr Tolstykh

December 01, 2016
Tweet

More Decks by Oleksandr Tolstykh

Other Decks in Programming

Transcript

  1. Quality. Android Quality Александр Толстых @a_tolstykh Sharewire Гаага, Нидерланды КАК

    ПОВЫСИТЬ КАЧЕСТВО КОДА И СОХРАНИТЬ ВРЕМЯ С ПОМОЩЬЮ ПРАВИЛЬНОЙ НАЧАЛЬНОЙ КОНФИГУРАЦИИ ПРОЕКТА
  2. ПЛАН 1. Инструменты качества (Quality tools) 2. Инструменты для разработчиков

    (Developer tools) 4. Инструменты-хелперы 3. Анализ метрик приложения #qualityMatters
  3. - Гибок в конфигурации #qualityMatters LINT - Доступен “из коробки”

    - 200 готовых правил - Написание собственных правил (custom rules) QUALITY TOOLS. LINT Хорошая статья о написании собственных правил (custom rules): https://www.bignerdranch.com/blog/building-custom-lint-checks-in-android/ - Интеграция с Андроид студией - Андроид ориентирован
  4. #qualityMatters Примеры: QUALITY TOOLS. LINT - MissingSuperCall если родительский метод

    имеет @SuperCall аннотацию - CommitTransaction когда commit() не вызван на транзиции фрагмента - DuplicateIds одинаковые идентификаторы в рамках одного экрана (xml layout) - ResourceType использование ресурса неверного типа (@StringRes, @DrawableRes, @ColorRes...) - NewApi вызов методов из нового API на неподдерживаемой версии платформы … и многие другие Полный список правил: http://tools.android.com/tips/lint-checks
  5. Quality tools Findbugs - Анализирует java- байткод - Требует “адаптацию”

    под Андроид - Время- и трудоемкая начальная настройка #qualityMatters http://findbugs.sourceforge.net/ https://docs.gradle.org/current/dsl/org.gradle.api.plugins.quality.FindBugs.html
  6. #qualityMatters Примеры: QUALITY TOOLS. FINDBUGS - Конкатенация строки с помощью

    + в цикле - Сравнение строк с помощью == или != - Вызов toString() на объекте типа String - Floating point equality - Поток (stream) может быть не закрыт при выходе из метода - Неиспользуемые переменные/методы … и многие другие Полный список: http://findbugs.sourceforge.net/bugDescriptions.html
  7. Quality tools. PMD - Анализирует Java код - Время- и

    трудоемкая начальная настройка - Аналог findbugs (есть пересечения) - Набор Андроид- ориентированных правил (5!) - “Обратная конфигурация” https://docs.gradle.org/current/userguide/pmd_plugin.html #qualityMatters https://pmd.github.io/
  8. #qualityMatters ПРИМЕРЫ QUALITY TOOLS. PMD - GodClass - DoNotHardCodeSDCard. Используйте

    Environment.getExternalStorageDirectory() вместо “/sdcard” - AvoidInstantiatingObjectsInLoops - LooseCoupling. Избегайте использование реализаций коллекций (i.e., HashSet); лучше использовать интерфейсы коллекций (i.e, Set) - AvoidCatchingThrowable, AvoidCatchingNPE - UseArrayListInsteadOfVector - UncommentedEmptyMethodBody, UncommentedEmptyConstructor … и многие другие Полный набор правил: https://pmd.github.io/pmd-5.4.1/pmd-java/rules/index.html
  9. QUALITY TOOLS. CHECKSTYLE Инструмент проверки соответствия стиля! - Sun Code

    Conventions - Google Java Style - Написание собственных правил #qualityMatters http://checkstyle.sourceforge.net/ https://docs.gradle.org/current/userguide/checkstyle_plugin.html ОБНАРУЖИВАЕТ: проблемы проектирования класса проблемы проектирования метода проблемы форматирования
  10. #qualityMatters https://pmd.github.io/pmd-5.4.1/usage/cpd-usage.html https://github.com/aaschmid/gradle-cpd-plugin - Игнорирует одинаковые фрагменты в импортах и

    копирайтах - Может быть использован как автономный инструмент без интеграции (.bat/.sh) - Поддерживаемые языки cpp, go, java, matlab, objective-c, php, python, ruby, scala... Поиск одинаковых фрагментов кода (или как поймать копи-пастера) QUALITY TOOLS. COPY-PASTE DETECTOR
  11. QUALITY TOOLS Работать над проектом, со всеми включенными проверками, на

    максимальном уровне критичности, напоминает прохождение компьютерной игры на уровне сложности “NIGHTMARE” #qualityMatters Не стоит слепо верить всему, что “советуют” данные инструменты. Все ошибки/замечания следует внимательно проанализировать, прежде чем исправлять
  12. - Выше качество кода, читабельность, дисциплина! - Вся команда должна

    быть на одной волне - Изначально поддержка требует времени и сил - Достаточно запускать непосредственно перед коммитом - Quality tools + CI = MAXIMUM PROFIT Lint, findbugs, checkstyle, pmd, cpd, etc QUALITY TOOLS #qualityMatters
  13. 2. Инструменты для разработчиков (Dev tools) На базе проекта Артема

    Зиннатуллина qualitymatters https://github.com/artem-zinnatullin/qualitymatters - Stetho - LeakCanary - Lynx - Timber
  14. Что мы используем на практике: - Общая информация о сборке.

    Paperwork - Доступ к логам (logcat + network). Lynx, OkHttp - Crash reporting - Подменяемый URL (integration with Mock-Server)! - Инструменты диагностики “Debug only, scalable, stand-alone, not embedded into layout, not embedded into a project code!” DEV TOOLS #qualityMatters
  15. #qualityMatters http://facebook.github.io/stetho/ DEV TOOLS. STETHO Отладочный мост для Android приложений.

    Открытый исходный код. Разрабатывается командой из Facebook. - Network Inspection - View Hierarchy - Database Inspection - dumpapp - мощный интерфейс для доступа к приложению “изнутри”
  16. https://github.com/pedrovgs/Lynx DEV TOOLS. LYNX Lynx - открытая библиотека открывающая доступ

    к логам непосредственно из приложения. - Фильтрация по тексту - Фильтрация по уровню логирования - Logs sharing - Скрытый “запуск встряхиванием” #qualityMatters
  17. - Поставляется с встроенными LINT-правилами! #qualityMatters https://github.com/JakeWharton/timber “Every time you

    log in production, a puppy dies.” – Jake Wharton DEV TOOLS. TIMBER - БЕЗ TAG КОНСТАНТ! - Легко модифицируемая интеграция - Негласный стандарт логирования
  18. DEV TOOLS. CRASH-REPORTING TOOL Не важно какой именно инструмент, важно

    добавить его с самого начала разработки #qualityMatters - Логируйте не только ошибки, но и UN-expected состояния - Игнорируйте исключения в дебажных версиях - Проверяйте исключения в процессе разработки - Конструктивные сообщения к логируемым исключениям
  19. #qualityMatters DEV SETTINGS. ВЫВОДЫ - Добавляйте только те инструменты, которые

    подходят проекту. - Извлекайте инструменты в отдельную библиотеку(и), если их много. - Поддержка этих инструментов не должна занимать времени!
  20. #perfMatters APPLICATION METRICS. ОБЩИЕ МЕТРИКИ Всегда анализируйте - Время запуска.

    - Размер приложения. Полезно знать: - Test coverage (JaCoCo) https://docs.gradle.org/current/userguide/jacoco_plugin.html - Время сборки.
  21. Библиотека расчета fps в режиме реального времени - fps текущего

    окна - количество пропущенных кадров https://github.com/friendlyrobotnyc/TinyDancer APPLICATION METRICS. TINY DANCER #perfMatters
  22. #perfMatters @DebugLog public String getName(String first, String last) { SystemClock.sleep(15);

    // Don't ever really do this! return first + " " + last; } V/Example: ⇢ getName(first="Jake", last="Wharton") V/Example: ⇠ getName [16ms] = "Jake Wharton" - аргументы вызова метода - возвращаемый результат - время выполнения APPLICATION METRICS. HUGO Библиотека для логирования параметров и времени выполнения методов на основе аннотаций https://github.com/JakeWharton/hugo Логирует:
  23. https://github.com/frogermcs/AndroidDevMetrics APPLICATION METRICS. ANDROID DEV METRICS - Измеряет время вызовов

    методов жизненного цикла активити - Измеряет время инициализации объектов Dagger 2 - Позволяет запустить method tracing вместе со следующим запуском приложения - Считает количество пропущенных кадров БИБЛИОТЕКА МЕТРИК ПРОИЗВОДИТЕЛЬНОСТИ Android ПРИЛОЖЕНИЯ #perfMatters
  24. УПРАВЛЕНИЕ РЕСУРСАМИ Менеджмент строк (переводов) или цветов: - Храните все

    ресурсы для нескольких платформ в одном месте - Оперируйте идентификаторами, не значениями - Не меняйте содержимое только локально - Автоматизируйте импорт в проект, если возможно Сложности с именованием цветов? -> http://chir.ag/projects/name-that-color #DCD6D5 -> Swiss Coffee #FEE56D -> Kournikova https://crowdin.com/ https://localise.biz/ ...или Общий файл
  25. ВЫВОДЫ - Все данные инструменты созданы для того, чтобы облегчить

    жизнь, а не усложнить! - Добавляйте только необходимые инструменты - No warnings != no bugs. - Это требует время. И терпение.