31
Quality. Android Quality Александр Толстых @a_tolstykh Sharewire Гаага, Нидерланды КАК ПОВЫСИТЬ КАЧЕСТВО КОДА И СОХРАНИТЬ ВРЕМЯ С ПОМОЩЬЮ ПРАВИЛЬНОЙ НАЧАЛЬНОЙ КОНФИГУРАЦИИ ПРОЕКТА

Oleksandr Tolstykh "Quality. Android quality"

Embed Size (px)

Citation preview

Page 1: Oleksandr Tolstykh "Quality. Android quality"

Quality. Android Quality

Александр Толстых@a_tolstykh

Sharewire Гаага, Нидерланды

КАК ПОВЫСИТЬ КАЧЕСТВО КОДА И СОХРАНИТЬ ВРЕМЯС ПОМОЩЬЮ ПРАВИЛЬНОЙ НАЧАЛЬНОЙ КОНФИГУРАЦИИ ПРОЕКТА

Page 2: Oleksandr Tolstykh "Quality. Android quality"

ПЛАН1. Инструменты качества

(Quality tools)

2. Инструменты для разработчиков(Developer tools)

4. Инструменты-хелперы

3. Анализ метрик приложения

#qualityMatters

Page 3: Oleksandr Tolstykh "Quality. Android quality"

1. Инструменты качества(Quality tools)

- Lint

- Findbugs

- PMD

- Checkstyle

- Copy/Paste detector

Page 4: Oleksandr Tolstykh "Quality. Android quality"

- Гибок в конфигурации

#qualityMatters

LINT

- Доступен “из коробки”

- 200 готовых правил

- Написание собственных правил(custom rules)

QUALITY TOOLS. LINT

Хорошая статья о написании собственных правил (custom rules): https://www.bignerdranch.com/blog/building-custom-lint-checks-in-android/

- Интеграция с Андроид студией

- Андроид ориентирован

Page 5: Oleksandr Tolstykh "Quality. Android quality"

#qualityMatters… или положите набор исключений в lint.xml

НЕ ИГНОРИРУЙТЕ LINT!

QUALITY TOOLS. LINT

ХОРОШОПЛОХО

Page 6: Oleksandr Tolstykh "Quality. Android quality"

#qualityMatters

Примеры:

QUALITY TOOLS. LINT

- MissingSuperCall если родительский метод имеет @SuperCall аннотацию

- CommitTransaction когда commit() не вызван на транзиции фрагмента

- DuplicateIds одинаковые идентификаторы в рамках одного экрана (xml layout)

- ResourceType использование ресурса неверного типа (@StringRes, @DrawableRes, @ColorRes...)

- NewApi вызов методов из нового API на неподдерживаемой версии платформы

… и многие другие

Полный список правил: http://tools.android.com/tips/lint-checks

Page 7: Oleksandr Tolstykh "Quality. Android quality"

Quality toolsFindbugs

- Анализирует java-байткод

- Требует “адаптацию” под Андроид

- Время- и трудоемкая начальная настройка

#qualityMattershttp://findbugs.sourceforge.net/https://docs.gradle.org/current/dsl/org.gradle.api.plugins.quality.FindBugs.html

Page 8: Oleksandr Tolstykh "Quality. Android quality"

#qualityMatters

Примеры:

QUALITY TOOLS. FINDBUGS

- Конкатенация строки с помощью + в цикле

- Сравнение строк с помощью == или !=

- Вызов toString() на объекте типа String

- Floating point equality

- Поток (stream) может быть не закрыт при выходе из метода

- Неиспользуемые переменные/методы

… и многие другие

Полный список: http://findbugs.sourceforge.net/bugDescriptions.html

Page 9: Oleksandr Tolstykh "Quality. Android quality"

Quality tools. PMD- Анализирует Java код

- Время- и трудоемкая начальная настройка

- Аналог findbugs (есть пересечения)

- Набор Андроид- ориентированных правил (5!)

- “Обратная конфигурация”

https://docs.gradle.org/current/userguide/pmd_plugin.html #qualityMatters

https://pmd.github.io/

Page 10: Oleksandr Tolstykh "Quality. Android quality"

#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

Page 11: Oleksandr Tolstykh "Quality. Android quality"

QUALITY TOOLS. CHECKSTYLEИнструмент проверки соответствия стиля!

- Sun Code Conventions- Google Java Style- Написание собственных правил

#qualityMattershttp://checkstyle.sourceforge.net/https://docs.gradle.org/current/userguide/checkstyle_plugin.html

ОБНАРУЖИВАЕТ:

проблемы проектирования

класса

проблемы проектирования

метода

проблемы форматирования

Page 12: Oleksandr Tolstykh "Quality. Android quality"

#qualityMattershttps://pmd.github.io/pmd-5.4.1/usage/cpd-usage.htmlhttps://github.com/aaschmid/gradle-cpd-plugin

- Игнорирует одинаковые фрагменты в импортах и копирайтах

- Может быть использован как автономный инструментбез интеграции (.bat/.sh)

- Поддерживаемые языки cpp, go, java, matlab, objective-c, php, python, ruby, scala...

Поиск одинаковых фрагментов кода (или как поймать копи-пастера)

QUALITY TOOLS. COPY-PASTE DETECTOR

Page 13: Oleksandr Tolstykh "Quality. Android quality"

QUALITY TOOLS

Работать над проектом, со всеми включенными проверками, на максимальном

уровне критичности, напоминает прохождение компьютерной игры на уровне

сложности “NIGHTMARE”

#qualityMatters

Не стоит слепо верить всему, что “советуют” данные инструменты.

Все ошибки/замечания следует внимательно проанализировать, прежде чем

исправлять

Page 14: Oleksandr Tolstykh "Quality. Android quality"

- Выше качество кода, читабельность, дисциплина!

- Вся команда должна быть на одной волне- Изначально поддержка требует времени и сил

- Достаточно запускать непосредственно перед коммитом- Quality tools + CI = MAXIMUM PROFIT

Lint, findbugs, checkstyle, pmd, cpd, etc

QUALITY TOOLS

#qualityMatters

Page 15: Oleksandr Tolstykh "Quality. Android quality"

2. Инструменты для разработчиков

(Dev tools)

На базе проекта Артема Зиннатуллина qualitymatters https://github.com/artem-zinnatullin/qualitymatters

- Stetho

- LeakCanary

- Lynx

- Timber

Page 16: Oleksandr Tolstykh "Quality. Android quality"

Что мы используем на практике:

- Общая информация о сборке. 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

Page 17: Oleksandr Tolstykh "Quality. Android quality"

#qualityMattershttp://facebook.github.io/stetho/

DEV TOOLS. STETHO

Отладочный мост для Android приложений. Открытый исходный код.Разрабатывается командой из Facebook.

- Network Inspection

- View Hierarchy

- Database Inspection

- dumpapp - мощный интерфейс для доступа к приложению “изнутри”

Page 18: Oleksandr Tolstykh "Quality. Android quality"

#qualityMattershttps://github.com/square/leakcanary

DEV TOOLS. LEAKCANARY

Библиотека для поиска утечек памяти в Android и Java.

Page 19: Oleksandr Tolstykh "Quality. Android quality"

https://github.com/pedrovgs/Lynx

DEV TOOLS. LYNX

Lynx - открытая библиотека открывающая доступ к логам непосредственно из приложения.

- Фильтрация по тексту- Фильтрация по уровню логирования- Logs sharing - Скрытый “запуск встряхиванием”

#qualityMatters

Page 20: Oleksandr Tolstykh "Quality. Android quality"

- Поставляется с встроенными LINT-правилами!

#qualityMattershttps://github.com/JakeWharton/timber

“Every time you log in production, a puppy dies.” – Jake Wharton

DEV TOOLS. TIMBER

- БЕЗ TAG КОНСТАНТ!

- Легко модифицируемая интеграция

- Негласный стандарт логирования

Page 21: Oleksandr Tolstykh "Quality. Android quality"

DEV TOOLS. CRASH-REPORTING TOOL

Не важно какой именно инструмент, важно добавить его с самого начала разработки

#qualityMatters

- Логируйте не только ошибки, но и UN-expected состояния- Игнорируйте исключения в дебажных версиях- Проверяйте исключения в процессе разработки- Конструктивные сообщения к логируемым исключениям

Page 22: Oleksandr Tolstykh "Quality. Android quality"

#qualityMatters

DEV SETTINGS. ВЫВОДЫ

- Добавляйте только те инструменты, которые подходят проекту.

- Извлекайте инструменты в отдельную библиотеку(и), если их много.

- Поддержка этих инструментов не должна занимать времени!

Page 23: Oleksandr Tolstykh "Quality. Android quality"

3. Анализ метрик приложения- Tiny Dancer

- Hugo

- AndroidDevMetrics

Page 24: Oleksandr Tolstykh "Quality. Android quality"

#perfMatters

APPLICATION METRICS. ОБЩИЕ МЕТРИКИВсегда анализируйте

- Время запуска.- Размер приложения.

Полезно знать:- Test coverage (JaCoCo)

https://docs.gradle.org/current/userguide/jacoco_plugin.html

- Время сборки.

Page 25: Oleksandr Tolstykh "Quality. Android quality"

Библиотека расчета fps в режиме реального времени

- fps текущего окна

- количество пропущенных кадров

https://github.com/friendlyrobotnyc/TinyDancer

APPLICATION METRICS. TINY DANCER

#perfMatters

Page 26: Oleksandr Tolstykh "Quality. Android quality"

#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

Логирует:

Page 27: Oleksandr Tolstykh "Quality. Android quality"

https://github.com/frogermcs/AndroidDevMetrics

APPLICATION METRICS.ANDROID DEV METRICS

- Измеряет время вызовов методов жизненного цикла активити

- Измеряет время инициализации объектов Dagger 2

- Позволяет запустить method tracing вместе со следующим запуском приложения

- Считает количество пропущенных кадров

БИБЛИОТЕКА МЕТРИК ПРОИЗВОДИТЕЛЬНОСТИ Android ПРИЛОЖЕНИЯ

#perfMatters

Page 28: Oleksandr Tolstykh "Quality. Android quality"

4. Инструменты-хелперы- Управление ресурсами

Page 29: Oleksandr Tolstykh "Quality. Android quality"

УПРАВЛЕНИЕ РЕСУРСАМИ

Менеджмент строк (переводов) или цветов:

- Храните все ресурсы для нескольких платформ в одном месте

- Оперируйте идентификаторами, не значениями- Не меняйте содержимое только локально- Автоматизируйте импорт в проект, если возможно

Сложности с именованием цветов? -> http://chir.ag/projects/name-that-color#DCD6D5 -> Swiss Coffee#FEE56D -> Kournikova

https://crowdin.com/https://localise.biz/...илиОбщий файл

Page 30: Oleksandr Tolstykh "Quality. Android quality"

ВЫВОДЫ

- Все данные инструменты созданы для того, чтобы облегчить жизнь, а не усложнить!

- Добавляйте только необходимые инструменты

- No warnings != no bugs.

- Это требует время. И терпение.

Page 31: Oleksandr Tolstykh "Quality. Android quality"

СПАСИБО!

Александр Толстых

@a_tolstykh

+OleksandrTolstykhСсылки: https://goo.gl/jlTV0d