19 Международная конференция по вопросам качества ПО
sqadays.com
Андрей Дмитриев
Москва 2016
Performance Management lessons learnt
19 Международная конференция по вопросам качества ПО
sqadays.com• разработчик, тимлид, груплид
• лидер JUG.ru и CodeFreeze.ru
2
Кто я?
19 Международная конференция по вопросам качества ПО
sqadays.com• разработчик, тимлид, груплид
• лидер JUG.ru и CodeFreeze.ru
3
Кто я?
19 Международная конференция по вопросам качества ПО
sqadays.com• разработчик, тимлид, груплид
• лидер JUG.ru и CodeFreeze.ru
4
Кто я?
19 Международная конференция по вопросам качества ПО
sqadays.com• разработчик, тимлид, груплид
• лидер JUG.ru и CodeFreeze.ru
5
Кто я?
19 Международная конференция по вопросам качества ПО
sqadays.com• Научить вас проводить performance-тестирование
6
Цель
19 Международная конференция по вопросам качества ПО
sqadays.com• Научить вас проводить performance-тестирование
7
Цель
19 Международная конференция по вопросам качества ПО
sqadays.com• Научить вас проводить performance-тестирование
• Показать как не надо делать
8
Цель
19 Международная конференция по вопросам качества ПО
sqadays.com• Научить вас проводить performance-тестирование
• Показать как не надо делать
9
Цель
19 Международная конференция по вопросам качества ПО
sqadays.com• Научить вас проводить performance-тестирование
• Показать как не надо делать
• Поделиться своим опытом
10
Цель
19 Международная конференция по вопросам качества ПО
sqadays.com• Научить вас проводить performance-тестирование
• Показать как не надо делать
• Поделиться своим опытом
11
Цель
19 Международная конференция по вопросам качества ПО
sqadays.com• Научить вас проводить performance-тестирование
• Показать как не надо делать
• Поделиться своим опытом
• Нагрузочное тестирование – это не (с)только автоматизированные сценарии, но и автоматизация:
12
Цель
19 Международная конференция по вопросам качества ПО
sqadays.com• Научить вас проводить performance-тестирование
• Показать как не надо делать
• Поделиться своим опытом
• Нагрузочное тестирование – это не (с)только автоматизированные сценарии, но и автоматизация:
• выборки данных,
13
Цель
19 Международная конференция по вопросам качества ПО
sqadays.com• Научить вас проводить performance-тестирование
• Показать как не надо делать
• Поделиться своим опытом
• Нагрузочное тестирование – это не (с)только автоматизированные сценарии, но и автоматизация:
• выборки данных,
• предстартовой проверки и
14
Цель
19 Международная конференция по вопросам качества ПО
sqadays.com• Научить вас проводить performance-тестирование
• Показать как не надо делать
• Поделиться своим опытом
• Нагрузочное тестирование – это не (с)только автоматизированные сценарии, но и автоматизация:
• выборки данных,
• предстартовой проверки и
• анализа результатов.
15
Цель
19 Международная конференция по вопросам качества ПО
sqadays.com
• Нагрузочное тестирование – это не (с)только автоматизированные сценарии, но и автоматизация:
• выборки данных,
• предстартовой проверки и
• анализа результатов.
16
ЦельА B
19 Международная конференция по вопросам качества ПО
sqadays.com
• Нагрузочное тестирование – это не (с)только автоматизированные сценарии, но и автоматизация:
• выборки данных,
• предстартовой проверки и
• анализа результатов.
17
ЦельА B C
19 Международная конференция по вопросам качества ПО
sqadays.com•Все лгут
•Тестирование – это данные
•Знай и умей свои компоненты
18
План
19 Международная конференция по вопросам качества ПО
sqadays.com
19
Все лгут
19 Международная конференция по вопросам качества ПО
sqadays.com• Файл с 1,5 миллионами ордеров
20
Тестирование начинается с volumetrix
19 Международная конференция по вопросам качества ПО
sqadays.com• Файл с 1,5 миллионами ордеров
• Валидация заказчиком пройдена
• Тем не менее, ошибка в плане допущена
21
Тестирование начинается с volumetrix
19 Международная конференция по вопросам качества ПО
sqadays.com
22
Дело о пропавшей диаграммеПослеДо
App server
Oracle
Node1Node3 Node4
Node2
19 Международная конференция по вопросам качества ПО
sqadays.com
23
Дело о пропавшей диаграммеПослеДо
App server
Oracle
Node1Node3 Node4
Node2
19 Международная конференция по вопросам качества ПО
sqadays.com• Отчет на тесте работает моментально, а на проде - часы
24
Отчет убить нельзя починить
19 Международная конференция по вопросам качества ПО
sqadays.com
25
Отчет убить нельзя починить: Было
EVT:
CCN:
PON:
*
*
TOMS:
IMA:
*
19 Международная конференция по вопросам качества ПО
sqadays.com
26
Отчет убить нельзя починить: Как нужно
EVT:
CCN:
PON:
*
*
TOMS:
IMA:
ICON:
*
*
19 Международная конференция по вопросам качества ПО
sqadays.com
27
Отчет убить нельзя починить: Стало
EVT:
CCN:
PON:
*
*
TOMS:
IMA:
ICON:
*
19 Международная конференция по вопросам качества ПО
sqadays.com
28
Отчет убить нельзя починить: Как нужно
EVT:
CCN:
PON:
*
*
TOMS:
IMA:
ICON:
*
*
19 Международная конференция по вопросам качества ПО
sqadays.com• Отчет на тесте работает моментально, а на проде - часы
• Разработчик в хотфиксе не поставил звездочку на поле
• Тест продолжал искать без одного критерия и выдавал пустое множество
29
Отчет убить нельзя починить
19 Международная конференция по вопросам качества ПО
sqadays.com• Отчет на тесте работает моментально, а на проде - часы
• Разработчик в хотфиксе не поставил звездочку на поле
• Тест продолжал искать без одного критерия и выдавал пустое множество
• После восстановления функциональности тест по-прежнему работал быстрее, чем на проде
30
Отчет убить нельзя починить
19 Международная конференция по вопросам качества ПО
sqadays.com• Отчет на тесте работает моментально, а на проде - часы
• Разработчик в хотфиксе не поставил звездочку на поле
• Тест продолжал искать без одного критерия и выдавал пустое множество
• После восстановления функциональности тест по-прежнему работал быстрее, чем на проде
• Но это уже следующая история
31
Отчет убить нельзя починить
19 Международная конференция по вопросам качества ПО
sqadays.com
32
Тестирование – это данные
19 Международная конференция по вопросам качества ПО
sqadays.com• Отчет на тесте работает быстро, а на проде - часы
33
Синтетика данных
19 Международная конференция по вопросам качества ПО
sqadays.com• Отчет на тесте работает быстро, а на проде - часы
• Причина - разные сложности данных
• Да, мы делаем автопроверку теперь
• Да, мы делаем выборку правильных данных теперь
34
Синтетика данных
19 Международная конференция по вопросам качества ПО
sqadays.com• Отчет все равно строится дольше, чем ожидается
• Причина: синтетические данные лежат в файлах данных последовательно
• В реальности они сильно фрагментированы
35
Синтетика данных - копаем дальше
19 Международная конференция по вопросам качества ПО
sqadays.com• Отчет все равно строится дольше, чем ожидается
• Причина: синтетические данные лежат в файлах данных последовательно
• В реальности они сильно фрагментированы
• Данные выровняли:
• эмулировали “натуральное” их создание
• создали индексы правильно
• Идеально было бы копировать .dbf-файлы вместо импорта
36
Синтетика данных - копаем дальше
19 Международная конференция по вопросам качества ПО
sqadays.com
37
Кривая 90% line
19 Международная конференция по вопросам качества ПО
sqadays.com
38
Кривая 90% line
19 Международная конференция по вопросам качества ПО
sqadays.com
39
Кривая 90% line
19 Международная конференция по вопросам качества ПО
sqadays.com
40
Кривая 90% line
19 Международная конференция по вопросам качества ПО
sqadays.com
41
Кривая 90% line
Квартет Энскомба: https://goo.gl/wBOLhI
19 Международная конференция по вопросам качества ПО
sqadays.com
42
Знай и умей свои компоненты
19 Международная конференция по вопросам качества ПО
sqadays.com• Результаты тестов показали таймауты
43
Я твои стабы на перфоманс проверял
19 Международная конференция по вопросам качества ПО
sqadays.com• Результаты тестов показали таймауты
• Проблема – в стабах
44
Я твои стабы на перфоманс проверял
19 Международная конференция по вопросам качества ПО
sqadays.com
45
Я твои стабы на перфоманс проверял
19 Международная конференция по вопросам качества ПО
sqadays.com• Результаты тестов показали таймауты
• Проблема – в стабах
• Решение – это ядро плюс сторонние компоненты
46
Я твои стабы на перфоманс проверял
19 Международная конференция по вопросам качества ПО
sqadays.com• Отсутствие данных sar на тестовой системе
47
Дело о пропавшей Саре
19 Международная конференция по вопросам качества ПО
sqadays.com
• Отсутствие данных sar на тестовой системе
48
Дело о пропавшей Саре
19 Международная конференция по вопросам качества ПО
sqadays.com• Отсутствие данных sar на тестовой системе
• Причина - переполнение партиции /home
• В чеклист и скрипт включили проверку места подо все
49
Дело о пропавшей Саре
19 Международная конференция по вопросам качества ПО
sqadays.com• В отчетах снова стали появляться задержки по 30 секунд!
• Хьюстон, у нас проблемы!
50
Injector не выдержит двоих
19 Международная конференция по вопросам качества ПО
sqadays.com• В отчетах снова стали появляться задержки по 30 секунд!
• Хьюстон, у нас проблемы!
51
Injector не выдержит двоих
Injector
19 Международная конференция по вопросам качества ПО
sqadays.com• Нужна проверка окружения до начала тестов
• Нужна проверка данных до и после замера
• Нужна проверка результатов после замера
• Автоматизация – это не только скрипты тестов
52
Итоги
19 Международная конференция по вопросам качества ПО
sqadays.com
53
Extra
Введение в Performance Management
• В систему будет поступать в среднем 3000 запросов в сутки
• Длительность теста - 1 час
А. 375 C. 125
B. 3000 D. Неизвестно
Сколько запросов должно быть выполнено за 1 час?
Введение в Performance Management
• В систему будет поступать в среднем 3000 запросов в сутки
• Длительность теста - 1 час
А. 375 (3000/8) C. 125 (3000/12)
B. 3000 D. Неизвестно
Сколько запросов должно быть выполнено за 1 час?
Простой пример #1• В систему будет поступать в среднем 3000 запросов в сутки
• Длительность теста - 1 час
• Сколько запросов должно быть выполнено?
Введение в Performance Management
19 Международная конференция по вопросам качества ПО
sqadays.com• Что такое конфигурация
• Когда используется Compliance
• Причины почему недотюнили
• Что получилось в итоге
57
Мертвая лошадь Compliance
19 Международная конференция по вопросам качества ПО
sqadays.com• Runnable run = new Runnable (){
• public void run () {
• synchronized (STATIC_OBJECT) {
• вызватьЗапрос();
• }
• }
• }
58
ThreadPool не параллелится