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

Метрики всему голова — Вадим Смаль (Avito)

AvitoTech
December 02, 2017

Метрики всему голова — Вадим Смаль (Avito)

Поговорим о Data-driven подходе к разработке. Вадим продемонстрирует, какие метрики можно собирать, как они помогут быть эффективным, как следить за качеством разрабатываемой функциональности. Подробно рассмотрим, как замерять время компиляции отдельных фреймворков, размер приложения, время запуска приложения, CrashFree, OOM. Если вы до сих пор думаете, что метрики это только для менеджеров и аналитиков — будете приятно удивлены.

Avito iOS Winter Edition
02/12/2017

AvitoTech

December 02, 2017
Tweet

More Decks by AvitoTech

Other Decks in Technology

Transcript

  1. 3 Data D riven Hype Learning Machine Big Mining M

    etrics Approach Deep Complex Decision making Analytics Network Neural infographic NLP
  2. 4 Data D riven Hype Learning Machine Big Mining M

    etrics Approach Deep Complex Decision making Analytics Network Neural infographic NLP
  3. 6 Data Driven Анализ данных может изменить будущее организации, но

    только если будет применяться постоянно, каждый день, каждым сотрудником
  4. 7 Data Driven Анализ данных может изменить будущее организации, но

    только если будет применяться постоянно, каждый день, каждым сотрудником
  5. 15 Monetization Ценность клиента на протяжении жизненного цикла Стоимость привлечения

    клиента Риск концентрации клиентов Количество новых пользователей Отток клиентов Виральность …
  6. 19 Testing Покрытие требований Тестовое Покрытие Покрытие кода Коэффициент регрессии

    Количество дефектов Время жизни дефекта Плотность дефектов …
  7. 24 Размер приложения Время запуска приложения Энергоэффективность CrashFree + OOM

    Время компиляции Время работы над задачей Время Code Review Конфликты Технический долг Безопасность Permission Apple Watch Apple Pay Причина запуска Accessibility … Причина завершения
  8. 25 Продуктивность Приложение Экосистема Время компиляции Время работы над задачей

    Время Code Review Конфликты Безопасность Технический долг Размер приложения Время запуска приложения Энергоэффективность CrashFree + OOM Причина завершения Permission Причина запуска Apple Watch Apple Pay Accessibility
  9. 28 Количество задач 0 100 200 300 400 Дни недели

    Monday Tuesday Wednesday Thursday Friday IN TEST IN REVIEW QA PROGRESS IN PROGRESS OPEN RESOLVED OPEN IN PROGRESS IN REVIEW READY FOR TEST IN TEST RESOLVED Время работы над задачей
  10. 29 Среднее время в часах 0 10 20 30 40

    Дата 23 24 25 26 28 Разработка Code Review Ожидание QA Тестирование IN PROGRESS IN REVIEW READY FOR TEST Разработка IN REVIEW Code Review IN TEST READY FOR TEST Ожидание QA RESOLVED IN TEST Тестирование Время работы над задачей
  11. 30 Среднее время в часах 0 10 20 30 40

    Дата 23 24 25 26 28 Разработка Code Review Ожидание QA Тестирование Время работы над задачей Используй перцентиль!
  12. 31 0 4 8 12 16 80%перцентиль Значения: 1; 2;

    2; 4; 5; 16; 2; 5; 2; 16; 1; 4; Сортируем: Отбрасываем 20% наибольших: 1; 2; 2; 4; 5; Время работы над задачей
  13. 32 95%% время в часах 0 10 20 30 40

    Дата 23 24 25 26 28 Разработка Code Review Ожидание QA Тестирование Время работы над задачей Время Code Review
  14. 37 Incremental - No changes time xcodebuild build xcodebuild clean

    build shell Время компиляции
  15. 38 Incremental - Changes touch time xcodebuild build xcodebuild clean

    build shell Время компиляции
  16. 39 Clean Incremental No changes 1200 1000 800 600 400

    200 0 Build time в секундах Время компиляции
  17. 41 Disable whole module optimization: SWIFT_OPTIMIZATION_LEVEL = -Onone Enable compilation

    times logging: OTHER_SWIFT_FLAGS += -Onone Xfrontend -debug-time-function-bodies ruby + xcodeproj Время компиляции
  18. 42 3823.01ms Pods/SwiftProtobuf/TimeUtils.swift:37:15 func gregorianDateFromSecondsSince1970 277.29ms Service/Categories/SomeValidationService.swift:61:18 private final func

    isRequired 272.32ms Assemblies/ServiceFactory/ServiceFactoryImpl.swift:103:5init() 252.48ms UnitTests/RequestTests.swift:8:10 @objc func testProfileRequest 223.99ms UnitTests/SearchParametersTests.swift:8:10 @objc func testSearchParameters 217.99ms Pods/SwiftProtobuf/Google_Protobuf_Timestamp+Extensions.swift:28:14 private func parseTimestamp Время компиляции
  19. 43 Что делать с Incremental? Dynamic frameworks Меньше кода! (в

    основном таргете) Время компиляции
  20. 44 App Main target Some framework 1 Some frame work

    2 Some frame work 3 Время компиляции
  21. 45 App Main target Some framework 1 Some framework 2

    Some framework 3 Время компиляции
  22. 46 For all targets first: write start timestamp last: write

    end timestamp ruby + xcodeproj Время компиляции
  23. 47 Alamofire start: 1510929110.2161 Reachability start: 1510929110.3254 Unbox start: 1510929110.4009

    Alamofire end: 1510929110.7597 Unbox end: 1510929110.9774 Reachability end: 1510929110.9925 … Время компиляции
  24. 55 Network Communication Проверка Transport Layer Security (TLS) Проверка Certificate

    Pinning Data Storage and Privacy UserDefaults vs KeyChain secureTextEntry = true Cryptography md5 vs sha256 Anti Reverse Engineering Jailbreak check Authentication Session prune Session timeout Architecture Frameworks identify Platform Interaction WebViews JS disabled Code Quality and Build Settings Non-debuggable Log disabled Безопасность
  25. 56 Code Quality and Build Settings Anti Reverse Engineering Data

    Storage and Privacy Cryptography Authentication Platform Interaction Architecture Network Communication Безопасность
  26. 59 - SomeApp.app - SomeAppBinary - Fonts.bundle - AppIcon*.png -

    *.plist - *.nib - *.storyboardc - *.momd - *.bundle *** - PlugIns - *Extension.appex Binary - Frameworks - libswift*.dylib - *.framework - Binary - *.car = Resources Binary Размер приложения
  27. 60 Export for all devices: xcodebuild -exportArchive Generate report: zipinfo

    | grep Resources zipinfo | grep .framework Generate diff shell Размер приложения
  28. 61 App-iPad 2.ipa 0.02Mb 0.00Mb SomeFramework.framework/SomeFramework growth ----------------------------------------------------------------------------------------- App.ipa 0.00Mb

    0.01Mb App growth 0.02Mb 0.01Mb SomeFramework.framework/SomeFramework growth ----------------------------------------------------------------------------------------- 892 files, 233498726 bytes uncompressed, 70231104 bytes compressed: 69.9% General report Binary diff Размер приложения
  29. 62 120 100 80 60 40 20 0 App size

    in Megabytes Размер приложения
  30. 63 App launch time be less than 20 seconds or

    the system will kill it WWDC 2016 Время запуска
  31. 65 run simulator xcrun simctl uninstall xcrun simctl install save

    timestamp xcrun simctl launch save timestamps in app xcrun simctl terminate parse log file kill simulator shell Время запуска
  32. 67 1.4 1.2 1.0 0.8 0.6 0.4 0.2 0 Start

    up times in seconds TotalMedian AfterMain BeforeMain BeforeLaunching AfterLaunching Время запуска
  33. 69 1.Save time in main - gettimeofday 2.Save time in

    enter to didFinishLaunching 3.Save time in exit from didFinishLaunching 4.Calculate: startup time = time - process start time ( sysctl ) Время запуска
  34. 70 2.2 2.0 1.8 1.7 1.6 1.5 10.24 10.27 10.30

    11.02 11.05 11.07 11.10 11.13 11.16 11.17 Total Median / events count Main Median / events count Finish Launching Median / events count Время запуска
  35. 72 1.7 K 1.5 K 1.2 K 1 K 750

    500 250 Размер ресурсов
  36. 73 Размер ресурсов 50 MB 150 MB 300 MB >

    300MB NSFileManager attributesOfFileSystem
  37. 75 Background Eviction Crash Out of memory Force Quit Device

    Reboot Terminate Reason: Debug App Update OS Update Unknown #if DEBUG Fabric Compare versions Compare OS onTerminate Device uptime onBackground CrashFree + OOM Причина завершения receiveWarning
  38. 80 energyEfficiency = battery level diff / foreground duration On

    Demo: ~ 24% (iPad mini 4) - 55% ( iPhone 4s ) в час Энергоэффективность
  39. 81 2M 1M 0M 0 M 15К 30К 45К 10.24

    10.27 10.30 11.02 11.05 11.07 11.10 11.13 1 0.75 0.5 Энергоэффективность
  40. 83 Not have Have Camera AVCaptureDevice.authorizationStatus Location CLLocationManager.authorizationStatus Photo Library

    PHPhotoLibrary.authorizationStatus Push Notification UIApplication.currentUserNotificationSettings Permission
  41. 87 Reduce Motion UIAccessibilityIsReduceMotionEnabled() Reduce Transparency UIAccessibilityIsReduceTransparencyEnabled() Shake To Undo

    UIAccessibilityIsShakeToUndoEnabled() Switch Control UIAccessibilityIsSwitchControlRunning() Accessibility
  42. 101