Successfully reported this slideshow.
Your SlideShare is downloading. ×

Сложности performance-тестирования

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Monitoring and Load testing
Monitoring and Load testing
Loading in …3
×

Check these out next

1 of 91 Ad

More Related Content

Slideshows for you (20)

Similar to Сложности performance-тестирования (20)

Advertisement

More from Andrey Akinshin (19)

Recently uploaded (20)

Advertisement

Сложности performance-тестирования

  1. 1. Часть 1 Общая методология 2/30 1. Общая методология
  2. 2. Цели 3/30 1. Общая методология
  3. 3. Цели 1 Не допустить performance-деградаций 3/30 1. Общая методология
  4. 4. Цели 1 Не допустить performance-деградаций 2 Если допустили, то вовремя об этом узнать 3/30 1. Общая методология
  5. 5. Цели 1 Не допустить performance-деградаций 2 Если допустили, то вовремя об этом узнать 3 Снизить количество ошибок первого рода (Проблемы нет, а мы думаем, что есть) 3/30 1. Общая методология
  6. 6. Цели 1 Не допустить performance-деградаций 2 Если допустили, то вовремя об этом узнать 3 Снизить количество ошибок первого рода (Проблемы нет, а мы думаем, что есть) 4 Снизить количество ошибок второго рода (Проблема есть, а мы думаем, что нет) 3/30 1. Общая методология
  7. 7. Цели 1 Не допустить performance-деградаций 2 Если допустили, то вовремя об этом узнать 3 Снизить количество ошибок первого рода (Проблемы нет, а мы думаем, что есть) 4 Снизить количество ошибок второго рода (Проблема есть, а мы думаем, что нет) 5 Автоматизация везде, где можно 3/30 1. Общая методология
  8. 8. Источник для вдохновения 4/30 1. Общая методология
  9. 9. Источник для вдохновения Rider • Файлов: 200’000+ • Строчек кода: 20’000’000+ • Тестов: 100’000+ • Рантаймы внутри: JVM, .NET Framework/Mono • Быстро работает на Windows, Linux, macOS 5/30 1. Общая методология
  10. 10. Источник для вдохновения Rider • Файлов: 200’000+ • Строчек кода: 20’000’000+ • Тестов: 100’000+ • Рантаймы внутри: JVM, .NET Framework/Mono • Быстро работает на Windows, Linux, macOS Хочется, чтобы Rider продолжал быстро работать... 5/30 1. Общая методология
  11. 11. Источники performance-данных: крупно Специальные performance-тесты 6/30 1. Общая методология
  12. 12. Источники performance-данных: крупно Специальные performance-тесты • Холодный и горячий старт 6/30 1. Общая методология
  13. 13. Источники performance-данных: крупно Специальные performance-тесты • Холодный и горячий старт • Микробенчмарки 6/30 1. Общая методология
  14. 14. Источники performance-данных: крупно Специальные performance-тесты • Холодный и горячий старт • Микробенчмарки • Performance-тесты на GUI 6/30 1. Общая методология
  15. 15. Источники performance-данных: крупно Специальные performance-тесты • Холодный и горячий старт • Микробенчмарки • Performance-тесты на GUI • Нагрузочное тестирование (Яндекс.Танк, JMeter и т.д.) 6/30 1. Общая методология
  16. 16. Источники performance-данных: крупно Специальные performance-тесты • Холодный и горячий старт • Микробенчмарки • Performance-тесты на GUI • Нагрузочное тестирование (Яндекс.Танк, JMeter и т.д.) • Измерение Latency/Throughput 6/30 1. Общая методология
  17. 17. Источники performance-данных: крупно Специальные performance-тесты • Холодный и горячий старт • Микробенчмарки • Performance-тесты на GUI • Нагрузочное тестирование (Яндекс.Танк, JMeter и т.д.) • Измерение Latency/Throughput • Автоматизированный поиск точек отказа (capacity planning) 6/30 1. Общая методология
  18. 18. Источники performance-данных: крупно Специальные performance-тесты • Холодный и горячий старт • Микробенчмарки • Performance-тесты на GUI • Нагрузочное тестирование (Яндекс.Танк, JMeter и т.д.) • Измерение Latency/Throughput • Автоматизированный поиск точек отказа (capacity planning) • Тестирование асимптотики 6/30 1. Общая методология
  19. 19. Источники performance-данных: крупно Специальные performance-тесты • Холодный и горячий старт • Микробенчмарки • Performance-тесты на GUI • Нагрузочное тестирование (Яндекс.Танк, JMeter и т.д.) • Измерение Latency/Throughput • Автоматизированный поиск точек отказа (capacity planning) • Тестирование асимптотики • ... 6/30 1. Общая методология
  20. 20. Источники performance-данных: крупно Специальные performance-тесты • Холодный и горячий старт • Микробенчмарки • Performance-тесты на GUI • Нагрузочное тестирование (Яндекс.Танк, JMeter и т.д.) • Измерение Latency/Throughput • Автоматизированный поиск точек отказа (capacity planning) • Тестирование асимптотики • ... Обычные тесты • Все тесты, которые у вас уже есть (>10ms) 6/30 1. Общая методология
  21. 21. Обычные тесты vs. Специальные тесты Обычные тесты Специальные тесты 7/30 1. Общая методология
  22. 22. Обычные тесты vs. Специальные тесты Обычные тесты Специальные тесты Случайные машины Выделенные машины 7/30 1. Общая методология
  23. 23. Обычные тесты vs. Специальные тесты Обычные тесты Специальные тесты Случайные машины Выделенные машины Виртуальное окружение Реальное железо 7/30 1. Общая методология
  24. 24. Обычные тесты vs. Специальные тесты Обычные тесты Специальные тесты Случайные машины Выделенные машины Виртуальное окружение Реальное железо Легко писать Сложно писать 7/30 1. Общая методология
  25. 25. Обычные тесты vs. Специальные тесты Обычные тесты Специальные тесты Случайные машины Выделенные машины Виртуальное окружение Реальное железо Легко писать Сложно писать Много и бесплатно Мало и дорого 7/30 1. Общая методология
  26. 26. Поучительная история Однажды, после перехода с Mono 4.9 на Mono 5.2 наши perf-тесты стали падать . . . 8/30 1. Общая методология
  27. 27. Поучительная история Однажды, после перехода с Mono 4.9 на Mono 5.2 наши perf-тесты стали падать . . . private readonly IList<object> array = new string[0]; [Benchmark] public int CountProblem() => array.Count; 8/30 1. Общая методология
  28. 28. Поучительная история Однажды, после перехода с Mono 4.9 на Mono 5.2 наши perf-тесты стали падать . . . private readonly IList<object> array = new string[0]; [Benchmark] public int CountProblem() => array.Count; Linux macOS Mono 4.9 ≈5ns ≈5ns Mono 5.2 ≈1400ns ≈2600ns 8/30 1. Общая методология
  29. 29. Источники performance-данных: мелко Ветки • Master-ветка • Все ветки • Заданные коммиты 9/30 1. Общая методология
  30. 30. Источники performance-данных: мелко Ветки • Master-ветка • Все ветки • Заданные коммиты Метрики • Время прохождения теста • Время прохождения отдельных частей теста • "Железные"данные: CPU, Memory, Disk, Network, . . . • Характеристики рантайма (например, GC.CollectionCount) 9/30 1. Общая методология
  31. 31. Источники performance-данных: мелко Ветки • Master-ветка • Все ветки • Заданные коммиты Метрики • Время прохождения теста • Время прохождения отдельных частей теста • "Железные"данные: CPU, Memory, Disk, Network, . . . • Характеристики рантайма (например, GC.CollectionCount) Не забываем про проблему множественных сравнений 9/30 1. Общая методология
  32. 32. Оборона против performance-деградаций 10/30 1. Общая методология
  33. 33. Оборона против performance-деградаций • Merge robot Проверяем производительность на каждый мердж 10/30 1. Общая методология
  34. 34. Оборона против performance-деградаций • Merge robot Проверяем производительность на каждый мердж • Daily tests Запускаем тесты каждый день 10/30 1. Общая методология
  35. 35. Оборона против performance-деградаций • Merge robot Проверяем производительность на каждый мердж • Daily tests Запускаем тесты каждый день • Retrospective Анализируем исторические данные 10/30 1. Общая методология
  36. 36. Оборона против performance-деградаций • Merge robot Проверяем производительность на каждый мердж • Daily tests Запускаем тесты каждый день • Retrospective Анализируем исторические данные • Check points Проверяем опасные изменения 10/30 1. Общая методология
  37. 37. Оборона против performance-деградаций • Merge robot Проверяем производительность на каждый мердж • Daily tests Запускаем тесты каждый день • Retrospective Анализируем исторические данные • Check points Проверяем опасные изменения • Pre-release Проверяем регрессию перед самым релизом 10/30 1. Общая методология
  38. 38. Оборона против performance-деградаций Обнаружение Точность Процесс 11/30 1. Общая методология
  39. 39. Оборона против performance-деградаций Обнаружение Точность Процесс Merge robot Вовремя Средняя Автоматический 11/30 1. Общая методология
  40. 40. Оборона против performance-деградаций Обнаружение Точность Процесс Merge robot Вовремя Средняя Автоматический Daily tests Поздно Хорошая Полуручной 11/30 1. Общая методология
  41. 41. Оборона против performance-деградаций Обнаружение Точность Процесс Merge robot Вовремя Средняя Автоматический Daily tests Поздно Хорошая Полуручной Retrospective Слишком поздно Отличная Полуручной 11/30 1. Общая методология
  42. 42. Оборона против performance-деградаций Обнаружение Точность Процесс Merge robot Вовремя Средняя Автоматический Daily tests Поздно Хорошая Полуручной Retrospective Слишком поздно Отличная Полуручной Check points Вовремя Отличная Ручной 11/30 1. Общая методология
  43. 43. Оборона против performance-деградаций Обнаружение Точность Процесс Merge robot Вовремя Средняя Автоматический Daily tests Поздно Хорошая Полуручной Retrospective Слишком поздно Отличная Полуручной Check points Вовремя Отличная Ручной Pre-release Совсем поздно Отличная Ручной 11/30 1. Общая методология
  44. 44. Оборона против performance-деградаций Обнаружение Точность Процесс Merge robot Вовремя Средняя Автоматический Daily tests Поздно Хорошая Полуручной Retrospective Слишком поздно Отличная Полуручной Check points Вовремя Отличная Ручной Pre-release Совсем поздно Отличная Ручной И ещё несколько важных факторов: • Время прогона • Количество билд-агентов и их стоимость • Спектр проблем, которые можно обнаружить 11/30 1. Общая методология
  45. 45. Alarm-критерии 12/30 1. Общая методология
  46. 46. Alarm-критерии Ручной • Специальный программист, который мониторит тесты 24/7 12/30 1. Общая методология
  47. 47. Alarm-критерии Ручной • Специальный программист, который мониторит тесты 24/7 Автоматизированный 12/30 1. Общая методология
  48. 48. Alarm-критерии Ручной • Специальный программист, который мониторит тесты 24/7 Автоматизированный • Абсолютный timeout 12/30 1. Общая методология
  49. 49. Alarm-критерии Ручной • Специальный программист, который мониторит тесты 24/7 Автоматизированный • Абсолютный timeout • Относительный timeout 12/30 1. Общая методология
  50. 50. Alarm-критерии Ручной • Специальный программист, который мониторит тесты 24/7 Автоматизированный • Абсолютный timeout • Относительный timeout • Исторические данные и статистика 12/30 1. Общая методология
  51. 51. Alarm-критерии Ручной • Специальный программист, который мониторит тесты 24/7 Автоматизированный • Абсолютный timeout • Относительный timeout • Исторические данные и статистика Полуавтоматизированный • Система, которая формирует список performance-аномалий • Специальный программист, который разбирает этот список 12/30 1. Общая методология
  52. 52. Часть 2 Ищем performance-аномалии 13/30 2. Ищем performance-аномалии
  53. 53. Виды performance-аномалий 14/30 2. Ищем performance-аномалии
  54. 54. Виды performance-аномалий • Деградация производительности (резкая и постепенная) 14/30 2. Ищем performance-аномалии
  55. 55. Виды performance-аномалий • Деградация производительности (резкая и постепенная) • Деградация индивидуальная и групповая 14/30 2. Ищем performance-аномалии
  56. 56. Виды performance-аномалий • Деградация производительности (резкая и постепенная) • Деградация индивидуальная и групповая • Внезапное улучшение производительности 14/30 2. Ищем performance-аномалии
  57. 57. Виды performance-аномалий • Деградация производительности (резкая и постепенная) • Деградация индивидуальная и групповая • Внезапное улучшение производительности • Разная производительность в зависимости от параметров и окружения 14/30 2. Ищем performance-аномалии
  58. 58. Виды performance-аномалий • Деградация производительности (резкая и постепенная) • Деградация индивидуальная и групповая • Внезапное улучшение производительности • Разная производительность в зависимости от параметров и окружения • Большая дисперсия 14/30 2. Ищем performance-аномалии
  59. 59. Виды performance-аномалий • Деградация производительности (резкая и постепенная) • Деградация индивидуальная и групповая • Внезапное улучшение производительности • Разная производительность в зависимости от параметров и окружения • Большая дисперсия • Распределения странной формы (например, мультимодальные) 14/30 2. Ищем performance-аномалии
  60. 60. Виды performance-аномалий • Деградация производительности (резкая и постепенная) • Деградация индивидуальная и групповая • Внезапное улучшение производительности • Разная производительность в зависимости от параметров и окружения • Большая дисперсия • Распределения странной формы (например, мультимодальные) • . . . 14/30 2. Ищем performance-аномалии
  61. 61. Борьба с performance-аномалиями Наведение performance-чистоты позволяет: 15/30 2. Ищем performance-аномалии
  62. 62. Борьба с performance-аномалиями Наведение performance-чистоты позволяет: • Находить проблемы, на которые не стоят assert’ы 15/30 2. Ищем performance-аномалии
  63. 63. Борьба с performance-аномалиями Наведение performance-чистоты позволяет: • Находить проблемы, на которые не стоят assert’ы • Ускорять билд 15/30 2. Ищем performance-аномалии
  64. 64. Борьба с performance-аномалиями Наведение performance-чистоты позволяет: • Находить проблемы, на которые не стоят assert’ы • Ускорять билд • Находить flaky-тесты 15/30 2. Ищем performance-аномалии
  65. 65. Борьба с performance-аномалиями Наведение performance-чистоты позволяет: • Находить проблемы, на которые не стоят assert’ы • Ускорять билд • Находить flaky-тесты • Уменьшать количество тестов, которые в будущем помешают найти действительно критичные проблемы 15/30 2. Ищем performance-аномалии
  66. 66. Маленькие деградации 16/30 2. Ищем performance-аномалии
  67. 67. Дисперсия 17/30 2. Ищем performance-аномалии
  68. 68. Анализ параметров 18/30 2. Ищем performance-аномалии
  69. 69. Анализ параметров 19/30 2. Ищем performance-аномалии
  70. 70. Анализ параметров 20/30 2. Ищем performance-аномалии
  71. 71. Мультимодальные распределения 21/30 2. Ищем performance-аномалии
  72. 72. Мультимодальные распределения 22/30 2. Ищем performance-аномалии
  73. 73. Проблемы агентов 23/30 2. Ищем performance-аномалии
  74. 74. Ложные друзья performance-инженера 24/30 2. Ищем performance-аномалии
  75. 75. Ложные друзья performance-инженера • Изменения в тесте 24/30 2. Ищем performance-аномалии
  76. 76. Ложные друзья performance-инженера • Изменения в тесте • Изменения в порядке тестов 24/30 2. Ищем performance-аномалии
  77. 77. Ложные друзья performance-инженера • Изменения в тесте • Изменения в порядке тестов • Изменения в агенте 24/30 2. Ищем performance-аномалии
  78. 78. Ложные друзья performance-инженера • Изменения в тесте • Изменения в порядке тестов • Изменения в агенте • Изменения в окружающем мире 24/30 2. Ищем performance-аномалии
  79. 79. Ложные друзья performance-инженера • Изменения в тесте • Изменения в порядке тестов • Изменения в агенте • Изменения в окружающем мире • Любые изменения хоть в чём, кроме того, что вы действительно тестируете 24/30 2. Ищем performance-аномалии
  80. 80. Часть 3 Performance Culture 25/30 3. Performance Culture
  81. 81. Performance Culture Внутри команды должно быть единое понимание следующих вещей: • Performance-цели • Идеальная степень performance-чистоты • Кто за что ответственен • Что считать регрессией или проблемой • Что такое правильный tradeoff 26/30 3. Performance Culture
  82. 82. Performance Driven Development (PDD) 27/30 3. Performance Culture
  83. 83. Performance Driven Development (PDD) • Пишем performance-тест 27/30 3. Performance Culture
  84. 84. Performance Driven Development (PDD) • Пишем performance-тест • Изучаем performance-пространство: Min, Max, Mean, Median, Q1, Q3, Percentiles, графики и тренды 27/30 3. Performance Culture
  85. 85. Performance Driven Development (PDD) • Пишем performance-тест • Изучаем performance-пространство: Min, Max, Mean, Median, Q1, Q3, Percentiles, графики и тренды • Задаём reference state 27/30 3. Performance Culture
  86. 86. Performance Driven Development (PDD) • Пишем performance-тест • Изучаем performance-пространство: Min, Max, Mean, Median, Q1, Q3, Percentiles, графики и тренды • Задаём reference state • Делаем рефакторинг и оптимизации 27/30 3. Performance Culture
  87. 87. Performance Driven Development (PDD) • Пишем performance-тест • Изучаем performance-пространство: Min, Max, Mean, Median, Q1, Q3, Percentiles, графики и тренды • Задаём reference state • Делаем рефакторинг и оптимизации • Проверяем performance-показатели 27/30 3. Performance Culture
  88. 88. Часть 4 Заключительные мысли 28/30 4. Заключительные мысли
  89. 89. Мораль • Performance-тестирование — увлекательно, но сложно • Набор проблем и решений специфичен для продукта. Хорошие инструменты не помогут вам, если вы не понимаете мат.части. • Куча данных бесплатно валяется под ногами. Нужно просто уметь их собрать! 29/30 4. Заключительные мысли
  90. 90. Вопросы? Андрей Акиньшин http://aakinshin.net https://github.com/AndreyAkinshin https://twitter.com/andrey_akinshin andrey.akinshin@gmail.com 30/30 4. Заключительные мысли

×