SlideShare a Scribd company logo
Quality. Android Quality
Александр Толстых
@a_tolstykh
Sharewire
Гаага, Нидерланды
КАК ПОВЫСИТЬ КАЧЕСТВО КОДА И СОХРАНИТЬ ВРЕМЯ
С ПОМОЩЬЮ ПРАВИЛЬНОЙ НАЧАЛЬНОЙ КОНФИГУРАЦИИ ПРОЕКТА
ПЛАН
1. Инструменты качества
(Quality tools)
2. Инструменты для разработчиков
(Developer tools)
4. Инструменты-хелперы
3. Анализ метрик приложения
#qualityMatters
1. Инструменты качества
(Quality tools)
- Lint
- Findbugs
- PMD
- Checkstyle
- Copy/Paste detector
- Гибок в конфигурации
#qualityMatters
LINT
- Доступен “из коробки”
- 200 готовых правил
- Написание собственных правил
(custom rules)
QUALITY TOOLS. LINT
Хорошая статья о написании собственных правил (custom rules):
https://www.bignerdranch.com/blog/building-custom-lint-checks-in-android/
- Интеграция с Андроид студией
- Андроид ориентирован
#qualityMatters
… или положите набор исключений в lint.xml
НЕ ИГНОРИРУЙТЕ LINT!
QUALITY TOOLS. LINT
ХОРОШОПЛОХО
#qualityMatters
Примеры:
QUALITY TOOLS. LINT
- MissingSuperCall если родительский метод имеет @SuperCall аннотацию
- CommitTransaction когда commit() не вызван на транзиции фрагмента
- DuplicateIds одинаковые идентификаторы в рамках одного экрана (xml layout)
- ResourceType использование ресурса неверного типа (@StringRes, @DrawableRes, @ColorRes...)
- NewApi вызов методов из нового API на неподдерживаемой версии платформы
… и многие другие
Полный список правил: http://tools.android.com/tips/lint-checks
Quality tools
Findbugs
- Анализирует java-
байткод
- Требует “адаптацию”
под Андроид
- Время- и трудоемкая
начальная настройка
#qualityMatters
http://findbugs.sourceforge.net/
https://docs.gradle.org/current/dsl/org.gradle.api.plugins.quality.FindBugs.html
#qualityMatters
Примеры:
QUALITY TOOLS. FINDBUGS
- Конкатенация строки с помощью + в цикле
- Сравнение строк с помощью == или !=
- Вызов toString() на объекте типа String
- Floating point equality
- Поток (stream) может быть не закрыт при выходе из метода
- Неиспользуемые переменные/методы
… и многие другие
Полный список: http://findbugs.sourceforge.net/bugDescriptions.html
Quality tools. PMD
- Анализирует Java код
- Время- и трудоемкая
начальная настройка
- Аналог findbugs (есть
пересечения)
- Набор Андроид-
ориентированных правил (5!)
- “Обратная конфигурация”
https://docs.gradle.org/current/userguide/pmd_plugin.html #qualityMatters
https://pmd.github.io/
#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
QUALITY TOOLS. CHECKSTYLE
Инструмент проверки соответствия стиля!
- Sun Code Conventions
- Google Java Style
- Написание собственных правил
#qualityMatters
http://checkstyle.sourceforge.net/
https://docs.gradle.org/current/userguide/checkstyle_plugin.html
ОБНАРУЖИВАЕТ:
проблемы
проектирования
класса
проблемы
проектирования
метода
проблемы
форматирования
#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
QUALITY TOOLS
Работать над проектом, со всеми включенными проверками, на максимальном
уровне критичности, напоминает прохождение компьютерной игры на уровне
сложности “NIGHTMARE”
#qualityMatters
Не стоит слепо верить всему, что “советуют” данные инструменты.
Все ошибки/замечания следует внимательно проанализировать, прежде чем
исправлять
- Выше качество кода, читабельность, дисциплина!
- Вся команда должна быть на одной волне
- Изначально поддержка требует времени и сил
- Достаточно запускать непосредственно перед коммитом
- Quality tools + CI = MAXIMUM PROFIT
Lint, findbugs, checkstyle, pmd, cpd, etc
QUALITY TOOLS
#qualityMatters
2. Инструменты
для разработчиков
(Dev tools)
На базе проекта Артема Зиннатуллина qualitymatters
https://github.com/artem-zinnatullin/qualitymatters
- Stetho
- LeakCanary
- Lynx
- Timber
Что мы используем на практике:
- Общая информация о сборке. 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
#qualityMattershttp://facebook.github.io/stetho/
DEV TOOLS. STETHO
Отладочный мост для Android приложений. Открытый исходный код.
Разрабатывается командой из Facebook.
- Network Inspection
- View Hierarchy
- Database Inspection
- dumpapp - мощный интерфейс
для доступа к приложению “изнутри”
#qualityMattershttps://github.com/square/leakcanary
DEV TOOLS. LEAKCANARY
Библиотека для поиска утечек памяти в
Android и Java.
https://github.com/pedrovgs/Lynx
DEV TOOLS. LYNX
Lynx - открытая библиотека открывающая доступ
к логам непосредственно из приложения.
- Фильтрация по тексту
- Фильтрация по уровню логирования
- Logs sharing
- Скрытый “запуск встряхиванием”
#qualityMatters
- Поставляется с встроенными LINT-правилами!
#qualityMatters
https://github.com/JakeWharton/timber
“Every time you log in production, a puppy dies.” – Jake Wharton
DEV TOOLS. TIMBER
- БЕЗ TAG КОНСТАНТ!
- Легко модифицируемая интеграция
- Негласный стандарт логирования
DEV TOOLS. CRASH-REPORTING TOOL
Не важно какой именно инструмент, важно добавить его с самого
начала разработки
#qualityMatters
- Логируйте не только ошибки, но и UN-expected состояния
- Игнорируйте исключения в дебажных версиях
- Проверяйте исключения в процессе разработки
- Конструктивные сообщения к логируемым исключениям
#qualityMatters
DEV SETTINGS. ВЫВОДЫ
- Добавляйте только те инструменты, которые подходят проекту.
- Извлекайте инструменты в отдельную библиотеку(и), если их много.
- Поддержка этих инструментов не должна занимать времени!
3. Анализ метрик приложения
- Tiny Dancer
- Hugo
- AndroidDevMetrics
#perfMatters
APPLICATION METRICS. ОБЩИЕ МЕТРИКИ
Всегда анализируйте
- Время запуска.
- Размер приложения.
Полезно знать:
- Test coverage (JaCoCo)
https://docs.gradle.org/current/userguide/jacoco_plugin.html
- Время сборки.
Библиотека расчета fps в режиме реального
времени
- fps текущего окна
- количество пропущенных кадров
https://github.com/friendlyrobotnyc/TinyDancer
APPLICATION METRICS. TINY DANCER
#perfMatters
#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
Логирует:
https://github.com/frogermcs/AndroidDevMetrics
APPLICATION METRICS.
ANDROID DEV METRICS
- Измеряет время вызовов методов жизненного цикла
активити
- Измеряет время инициализации объектов Dagger 2
- Позволяет запустить method tracing вместе со
следующим запуском приложения
- Считает количество пропущенных кадров
БИБЛИОТЕКА МЕТРИК ПРОИЗВОДИТЕЛЬНОСТИ
Android ПРИЛОЖЕНИЯ
#perfMatters
4. Инструменты-хелперы
- Управление ресурсами
УПРАВЛЕНИЕ РЕСУРСАМИ
Менеджмент строк (переводов) или цветов:
- Храните все ресурсы для нескольких платформ в
одном месте
- Оперируйте идентификаторами, не значениями
- Не меняйте содержимое только локально
- Автоматизируйте импорт в проект, если возможно
Сложности с именованием цветов? -> http://chir.ag/projects/name-that-color
#DCD6D5 -> Swiss Coffee
#FEE56D -> Kournikova
https://crowdin.com/
https://localise.biz/
...или
Общий файл
ВЫВОДЫ
- Все данные инструменты созданы для того, чтобы облегчить жизнь, а не усложнить!
- Добавляйте только необходимые инструменты
- No warnings != no bugs.
- Это требует время. И терпение.
СПАСИБО!
Александр Толстых
@a_tolstykh
+OleksandrTolstykhСсылки: https://goo.gl/jlTV0d

More Related Content

PDF
Тестирование трафика мобильных приложений: кейсы и инструменты
PDF
Автоматизация тестирования базы на примере PostgreSQL
PDF
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...
PDF
Денис Чистяков: Workflow. Работа над проектом в Яндексе
PPTX
Провокации автоматического тестирования
PDF
WP как экспериментальная платформа
PPTX
Тестирование PhoneGap-приложений: специфика + опыт
PPTX
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Тестирование трафика мобильных приложений: кейсы и инструменты
Автоматизация тестирования базы на примере PostgreSQL
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Провокации автоматического тестирования
WP как экспериментальная платформа
Тестирование PhoneGap-приложений: специфика + опыт
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG

What's hot (20)

PPTX
Dmitriy Kovalenko: Minimization of manual QA
PPTX
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
PDF
Непрерывный анализ качества кода с помощью SonarQube
PDF
Дефицит ресурсов тестирования... или нет?
PDF
Нагрузочное тестирование проектов на Drupal с использованием Apache JMeter
PPTX
Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"
PPTX
Gradle. Новый уровень автоматизации для Android
PPTX
Практика тестирования web сервисов
PPT
Делаем автоматизацию проектных KPIs
PDF
Роман Петров - юнит-тестирование мобильных приложений на примере платформы iOS
PPTX
Спецкурс-2015. Занятие 04 (часть 1). Конфигурации, сборка проекта, автоматизи...
PPTX
Коррелятор для JMeter
PPT
Testing in Scrum - Yuriy Malyi
PPTX
Jubula – TDD UI QA Automation Tool
PDF
Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle
PDF
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
PDF
QA Fest 2016. Денис Яременко. Как облегчить процесс мобильного тестирования
PDF
Концепция QaAPI: взгляд на тестирование с другой стороны баррикад
PPTX
Автоматизация тестирования ролей и привилегий
PDF
Slides
Dmitriy Kovalenko: Minimization of manual QA
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывный анализ качества кода с помощью SonarQube
Дефицит ресурсов тестирования... или нет?
Нагрузочное тестирование проектов на Drupal с использованием Apache JMeter
Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"
Gradle. Новый уровень автоматизации для Android
Практика тестирования web сервисов
Делаем автоматизацию проектных KPIs
Роман Петров - юнит-тестирование мобильных приложений на примере платформы iOS
Спецкурс-2015. Занятие 04 (часть 1). Конфигурации, сборка проекта, автоматизи...
Коррелятор для JMeter
Testing in Scrum - Yuriy Malyi
Jubula – TDD UI QA Automation Tool
Любовь Поволоцкая_Сборка Android-приложений с помощью Gradle
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
QA Fest 2016. Денис Яременко. Как облегчить процесс мобильного тестирования
Концепция QaAPI: взгляд на тестирование с другой стороны баррикад
Автоматизация тестирования ролей и привилегий
Slides
Ad

Similar to Oleksandr Tolstykh "Quality. Android quality" (20)

PDF
Повышаем и следим за качеством PHP кода
PDF
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
PDF
QAFest. Роль тестирования в Devops
PDF
Возможна ли жизнь без тестировщика?
PPTX
Automation from the trenches
PPTX
Code review как средство обеспечения качества программного обеспечения
PPTX
Automation from the trenches
PDF
Юрий Василевский «Автоматизация в XCode»
PDF
Юрий Василевский "Автоматизация в XCode"
PPTX
Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech H...
PPTX
Роман Кокин «Организация тестирования в больших командах»
PDF
Регулярное использование статического анализа кода в командной разработке
ODT
TAP
PDF
Юлия Викторова; Александр Тарасов. DevOps без булшита.
PDF
DevOps guide for awesome quality assurance
PDF
DevOps в Agile среде. Как, почему и когда инструменты помогают.
PDF
PDF
Тестирование весна 2013 лекция 5
PPT
Unit testing and TDD
PPT
ClubQA #2. Unit testing and TDD
Повышаем и следим за качеством PHP кода
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QAFest. Роль тестирования в Devops
Возможна ли жизнь без тестировщика?
Automation from the trenches
Code review как средство обеспечения качества программного обеспечения
Automation from the trenches
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский "Автоматизация в XCode"
Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech H...
Роман Кокин «Организация тестирования в больших командах»
Регулярное использование статического анализа кода в командной разработке
TAP
Юлия Викторова; Александр Тарасов. DevOps без булшита.
DevOps guide for awesome quality assurance
DevOps в Agile среде. Как, почему и когда инструменты помогают.
Тестирование весна 2013 лекция 5
Unit testing and TDD
ClubQA #2. Unit testing and TDD
Ad

More from IT Event (20)

PDF
Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...
PDF
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"
PDF
Max Voloshin - "Organization of frontend development for products with micros...
PDF
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
PDF
Konstantin Krivlenia - "Continuous integration for frontend"
PPTX
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
PDF
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"
PDF
Vladimir Grinenko - "Dependencies in component web done right"
PDF
Dmitry Bartalevich - "How to train your WebVR"
PDF
Aleksey Bogachuk - "Offline Second"
PDF
James Allardice - "Building a better login with the credential management API"
PDF
Fedor Skuratov "Dark Social: as messengers change the market of social media ...
PPTX
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
PPTX
Алексей Рагозин "Java и linux борьба за микросекунды"
PPTX
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"
PDF
Наш ответ Uber’у
PDF
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
PDF
Leonid Vasilyev "Building, deploying and running production code at Dropbox"
PDF
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
PDF
Mete Atamel "Resilient microservices with kubernetes"
Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"
Max Voloshin - "Organization of frontend development for products with micros...
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Konstantin Krivlenia - "Continuous integration for frontend"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"
Vladimir Grinenko - "Dependencies in component web done right"
Dmitry Bartalevich - "How to train your WebVR"
Aleksey Bogachuk - "Offline Second"
James Allardice - "Building a better login with the credential management API"
Fedor Skuratov "Dark Social: as messengers change the market of social media ...
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Алексей Рагозин "Java и linux борьба за микросекунды"
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"
Наш ответ Uber’у
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Leonid Vasilyev "Building, deploying and running production code at Dropbox"
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
Mete Atamel "Resilient microservices with kubernetes"

Oleksandr Tolstykh "Quality. Android quality"

  • 1. Quality. Android Quality Александр Толстых @a_tolstykh Sharewire Гаага, Нидерланды КАК ПОВЫСИТЬ КАЧЕСТВО КОДА И СОХРАНИТЬ ВРЕМЯ С ПОМОЩЬЮ ПРАВИЛЬНОЙ НАЧАЛЬНОЙ КОНФИГУРАЦИИ ПРОЕКТА
  • 2. ПЛАН 1. Инструменты качества (Quality tools) 2. Инструменты для разработчиков (Developer tools) 4. Инструменты-хелперы 3. Анализ метрик приложения #qualityMatters
  • 3. 1. Инструменты качества (Quality tools) - Lint - Findbugs - PMD - Checkstyle - Copy/Paste detector
  • 4. - Гибок в конфигурации #qualityMatters LINT - Доступен “из коробки” - 200 готовых правил - Написание собственных правил (custom rules) QUALITY TOOLS. LINT Хорошая статья о написании собственных правил (custom rules): https://www.bignerdranch.com/blog/building-custom-lint-checks-in-android/ - Интеграция с Андроид студией - Андроид ориентирован
  • 5. #qualityMatters … или положите набор исключений в lint.xml НЕ ИГНОРИРУЙТЕ LINT! QUALITY TOOLS. LINT ХОРОШОПЛОХО
  • 6. #qualityMatters Примеры: QUALITY TOOLS. LINT - MissingSuperCall если родительский метод имеет @SuperCall аннотацию - CommitTransaction когда commit() не вызван на транзиции фрагмента - DuplicateIds одинаковые идентификаторы в рамках одного экрана (xml layout) - ResourceType использование ресурса неверного типа (@StringRes, @DrawableRes, @ColorRes...) - NewApi вызов методов из нового API на неподдерживаемой версии платформы … и многие другие Полный список правил: http://tools.android.com/tips/lint-checks
  • 7. Quality tools Findbugs - Анализирует java- байткод - Требует “адаптацию” под Андроид - Время- и трудоемкая начальная настройка #qualityMatters http://findbugs.sourceforge.net/ https://docs.gradle.org/current/dsl/org.gradle.api.plugins.quality.FindBugs.html
  • 8. #qualityMatters Примеры: QUALITY TOOLS. FINDBUGS - Конкатенация строки с помощью + в цикле - Сравнение строк с помощью == или != - Вызов toString() на объекте типа String - Floating point equality - Поток (stream) может быть не закрыт при выходе из метода - Неиспользуемые переменные/методы … и многие другие Полный список: http://findbugs.sourceforge.net/bugDescriptions.html
  • 9. Quality tools. PMD - Анализирует Java код - Время- и трудоемкая начальная настройка - Аналог findbugs (есть пересечения) - Набор Андроид- ориентированных правил (5!) - “Обратная конфигурация” https://docs.gradle.org/current/userguide/pmd_plugin.html #qualityMatters https://pmd.github.io/
  • 10. #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
  • 11. QUALITY TOOLS. CHECKSTYLE Инструмент проверки соответствия стиля! - Sun Code Conventions - Google Java Style - Написание собственных правил #qualityMatters http://checkstyle.sourceforge.net/ https://docs.gradle.org/current/userguide/checkstyle_plugin.html ОБНАРУЖИВАЕТ: проблемы проектирования класса проблемы проектирования метода проблемы форматирования
  • 12. #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
  • 13. QUALITY TOOLS Работать над проектом, со всеми включенными проверками, на максимальном уровне критичности, напоминает прохождение компьютерной игры на уровне сложности “NIGHTMARE” #qualityMatters Не стоит слепо верить всему, что “советуют” данные инструменты. Все ошибки/замечания следует внимательно проанализировать, прежде чем исправлять
  • 14. - Выше качество кода, читабельность, дисциплина! - Вся команда должна быть на одной волне - Изначально поддержка требует времени и сил - Достаточно запускать непосредственно перед коммитом - Quality tools + CI = MAXIMUM PROFIT Lint, findbugs, checkstyle, pmd, cpd, etc QUALITY TOOLS #qualityMatters
  • 15. 2. Инструменты для разработчиков (Dev tools) На базе проекта Артема Зиннатуллина qualitymatters https://github.com/artem-zinnatullin/qualitymatters - Stetho - LeakCanary - Lynx - Timber
  • 16. Что мы используем на практике: - Общая информация о сборке. 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
  • 17. #qualityMattershttp://facebook.github.io/stetho/ DEV TOOLS. STETHO Отладочный мост для Android приложений. Открытый исходный код. Разрабатывается командой из Facebook. - Network Inspection - View Hierarchy - Database Inspection - dumpapp - мощный интерфейс для доступа к приложению “изнутри”
  • 18. #qualityMattershttps://github.com/square/leakcanary DEV TOOLS. LEAKCANARY Библиотека для поиска утечек памяти в Android и Java.
  • 19. https://github.com/pedrovgs/Lynx DEV TOOLS. LYNX Lynx - открытая библиотека открывающая доступ к логам непосредственно из приложения. - Фильтрация по тексту - Фильтрация по уровню логирования - Logs sharing - Скрытый “запуск встряхиванием” #qualityMatters
  • 20. - Поставляется с встроенными LINT-правилами! #qualityMatters https://github.com/JakeWharton/timber “Every time you log in production, a puppy dies.” – Jake Wharton DEV TOOLS. TIMBER - БЕЗ TAG КОНСТАНТ! - Легко модифицируемая интеграция - Негласный стандарт логирования
  • 21. DEV TOOLS. CRASH-REPORTING TOOL Не важно какой именно инструмент, важно добавить его с самого начала разработки #qualityMatters - Логируйте не только ошибки, но и UN-expected состояния - Игнорируйте исключения в дебажных версиях - Проверяйте исключения в процессе разработки - Конструктивные сообщения к логируемым исключениям
  • 22. #qualityMatters DEV SETTINGS. ВЫВОДЫ - Добавляйте только те инструменты, которые подходят проекту. - Извлекайте инструменты в отдельную библиотеку(и), если их много. - Поддержка этих инструментов не должна занимать времени!
  • 23. 3. Анализ метрик приложения - Tiny Dancer - Hugo - AndroidDevMetrics
  • 24. #perfMatters APPLICATION METRICS. ОБЩИЕ МЕТРИКИ Всегда анализируйте - Время запуска. - Размер приложения. Полезно знать: - Test coverage (JaCoCo) https://docs.gradle.org/current/userguide/jacoco_plugin.html - Время сборки.
  • 25. Библиотека расчета fps в режиме реального времени - fps текущего окна - количество пропущенных кадров https://github.com/friendlyrobotnyc/TinyDancer APPLICATION METRICS. TINY DANCER #perfMatters
  • 26. #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 Логирует:
  • 27. https://github.com/frogermcs/AndroidDevMetrics APPLICATION METRICS. ANDROID DEV METRICS - Измеряет время вызовов методов жизненного цикла активити - Измеряет время инициализации объектов Dagger 2 - Позволяет запустить method tracing вместе со следующим запуском приложения - Считает количество пропущенных кадров БИБЛИОТЕКА МЕТРИК ПРОИЗВОДИТЕЛЬНОСТИ Android ПРИЛОЖЕНИЯ #perfMatters
  • 29. УПРАВЛЕНИЕ РЕСУРСАМИ Менеджмент строк (переводов) или цветов: - Храните все ресурсы для нескольких платформ в одном месте - Оперируйте идентификаторами, не значениями - Не меняйте содержимое только локально - Автоматизируйте импорт в проект, если возможно Сложности с именованием цветов? -> http://chir.ag/projects/name-that-color #DCD6D5 -> Swiss Coffee #FEE56D -> Kournikova https://crowdin.com/ https://localise.biz/ ...или Общий файл
  • 30. ВЫВОДЫ - Все данные инструменты созданы для того, чтобы облегчить жизнь, а не усложнить! - Добавляйте только необходимые инструменты - No warnings != no bugs. - Это требует время. И терпение.