Поговорим про performance-тестирование

Andrey Akinshin
Andrey AkinshinSoftware developer at JetBrains
Поговорим про performance-тестирование
Андрей Акиньшин, JetBrains
DotNext 2017 Moscow
1/52
О чём будем разговаривать
Мы хотим:
2/52
О чём будем разговаривать
Мы хотим:
1 Не допустить performance-деградаций
2/52
О чём будем разговаривать
Мы хотим:
1 Не допустить performance-деградаций
2 Если допустили, то вовремя об этом узнать
2/52
О чём будем разговаривать
Мы хотим:
1 Не допустить performance-деградаций
2 Если допустили, то вовремя об этом узнать
3 Снизить количество ошибок первого рода
(Проблемы нет, а мы думаем, что есть)
2/52
О чём будем разговаривать
Мы хотим:
1 Не допустить performance-деградаций
2 Если допустили, то вовремя об этом узнать
3 Снизить количество ошибок первого рода
(Проблемы нет, а мы думаем, что есть)
4 Снизить количество ошибок второго рода
(Проблема есть, а мы думаем, что нет)
2/52
О чём будем разговаривать
Мы хотим:
1 Не допустить performance-деградаций
2 Если допустили, то вовремя об этом узнать
3 Снизить количество ошибок первого рода
(Проблемы нет, а мы думаем, что есть)
4 Снизить количество ошибок второго рода
(Проблема есть, а мы думаем, что нет)
5 Автоматизировать всё, что можно
2/52
Источник для вдохновения
3/52
Источник для вдохновения
Rider
• Файлов: 200’000+
• Строчек кода: 20’000’000+
• Тестов: 100’000+
• Зависимости: IntelliJ IDEA + ReSharper
• Рантаймы внутри: JVM, .NET Framework/Mono
• Целевые ОС: Windows, Linux, macOS
4/52
Источник для вдохновения
Rider
• Файлов: 200’000+
• Строчек кода: 20’000’000+
• Тестов: 100’000+
• Зависимости: IntelliJ IDEA + ReSharper
• Рантаймы внутри: JVM, .NET Framework/Mono
• Целевые ОС: Windows, Linux, macOS
Хочется, чтобы Rider работал очень быстро...
4/52
Заметка 1
Источники performance-данных
5/52 1. Источники performance-данных
Источники performance-данных: крупно
«Специальные» performance-тесты
6/52 1. Источники performance-данных
Источники performance-данных: крупно
«Специальные» performance-тесты
• Микробенчмарки
6/52 1. Источники performance-данных
Источники performance-данных: крупно
«Специальные» performance-тесты
• Микробенчмарки
• Холодный и горячий старт
6/52 1. Источники performance-данных
Источники performance-данных: крупно
«Специальные» performance-тесты
• Микробенчмарки
• Холодный и горячий старт
• Performance-тесты на GUI
6/52 1. Источники performance-данных
Источники performance-данных: крупно
«Специальные» performance-тесты
• Микробенчмарки
• Холодный и горячий старт
• Performance-тесты на GUI
• Нагрузочное тестирование (Яндекс.Танк, JMeter и т.д.)
6/52 1. Источники performance-данных
Источники performance-данных: крупно
«Специальные» performance-тесты
• Микробенчмарки
• Холодный и горячий старт
• Performance-тесты на GUI
• Нагрузочное тестирование (Яндекс.Танк, JMeter и т.д.)
• Автоматизированный поиск точек отказа (capacity planning)
6/52 1. Источники performance-данных
Источники performance-данных: крупно
«Специальные» performance-тесты
• Микробенчмарки
• Холодный и горячий старт
• Performance-тесты на GUI
• Нагрузочное тестирование (Яндекс.Танк, JMeter и т.д.)
• Автоматизированный поиск точек отказа (capacity planning)
• Тестирование асимптотики
6/52 1. Источники performance-данных
Источники performance-данных: крупно
«Специальные» performance-тесты
• Микробенчмарки
• Холодный и горячий старт
• Performance-тесты на GUI
• Нагрузочное тестирование (Яндекс.Танк, JMeter и т.д.)
• Автоматизированный поиск точек отказа (capacity planning)
• Тестирование асимптотики
• ...
6/52 1. Источники performance-данных
Источники performance-данных: крупно
«Специальные» performance-тесты
• Микробенчмарки
• Холодный и горячий старт
• Performance-тесты на GUI
• Нагрузочное тестирование (Яндекс.Танк, JMeter и т.д.)
• Автоматизированный поиск точек отказа (capacity planning)
• Тестирование асимптотики
• ...
«Обычные» тесты
• Все тесты, которые у вас уже есть (>10ms)
6/52 1. Источники performance-данных
Обычные тесты vs. Специальные тесты
Обычные тесты Специальные тесты
7/52 1. Источники performance-данных
Обычные тесты vs. Специальные тесты
Обычные тесты Специальные тесты
Случайные машины Выделенные машины
7/52 1. Источники performance-данных
Обычные тесты vs. Специальные тесты
Обычные тесты Специальные тесты
Случайные машины Выделенные машины
Виртуальное окружение Реальное железо
7/52 1. Источники performance-данных
Обычные тесты vs. Специальные тесты
Обычные тесты Специальные тесты
Случайные машины Выделенные машины
Виртуальное окружение Реальное железо
Легко писать Сложно писать
7/52 1. Источники performance-данных
Обычные тесты vs. Специальные тесты
Обычные тесты Специальные тесты
Случайные машины Выделенные машины
Виртуальное окружение Реальное железо
Легко писать Сложно писать
Много и бесплатно Мало и дорого
7/52 1. Источники performance-данных
Метрики
Много данных не бывает!
Можно собирать и анализировать:
• Время прохождения теста
• Время прохождения отдельных частей теста
• Железные данные: CPU, Memory, Disk, Network, . . .
• Характеристики рантайма (например, GC.CollectionCount)
• По каждой метрике смотрим на:
Min/Max/Mean/Median/Q1/Q3/Percentiles/Distribution
8/52 1. Источники performance-данных
Метрики
Много данных не бывает!
Можно собирать и анализировать:
• Время прохождения теста
• Время прохождения отдельных частей теста
• Железные данные: CPU, Memory, Disk, Network, . . .
• Характеристики рантайма (например, GC.CollectionCount)
• По каждой метрике смотрим на:
Min/Max/Mean/Median/Q1/Q3/Percentiles/Distribution
Не забываем про проблему множественных сравнений . . .
8/52 1. Источники performance-данных
Заметка 2
История
9/52 2. История
Поучительная история
Однажды, после перехода с Mono 4.9 на Mono 5.2 наши
perf-тесты стали падать . . .
10/52 2. История
Поучительная история
Однажды, после перехода с Mono 4.9 на Mono 5.2 наши
perf-тесты стали падать . . .
private readonly IList<object> array = new string[0];
[Benchmark]
public int CountProblem() => array.Count;
10/52 2. История
Поучительная история
Однажды, после перехода с 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
10/52 2. История
Заметка 3
Оборона против performance-деградаций
11/52 3. Оборона против performance-деградаций
Виды обороны
12/52 3. Оборона против performance-деградаций
Виды обороны
• Merge robot
Проверяем производительность на каждый мердж
12/52 3. Оборона против performance-деградаций
Виды обороны
• Merge robot
Проверяем производительность на каждый мердж
• Daily tests
Запускаем тесты каждый день
12/52 3. Оборона против performance-деградаций
Виды обороны
• Merge robot
Проверяем производительность на каждый мердж
• Daily tests
Запускаем тесты каждый день
• Retrospective
Анализируем исторические данные
12/52 3. Оборона против performance-деградаций
Виды обороны
• Merge robot
Проверяем производительность на каждый мердж
• Daily tests
Запускаем тесты каждый день
• Retrospective
Анализируем исторические данные
• Check points
Проверяем опасные изменения
12/52 3. Оборона против performance-деградаций
Виды обороны
• Merge robot
Проверяем производительность на каждый мердж
• Daily tests
Запускаем тесты каждый день
• Retrospective
Анализируем исторические данные
• Check points
Проверяем опасные изменения
• Pre-release
Проверяем регрессию перед самым релизом
12/52 3. Оборона против performance-деградаций
Сравнение видов обороны
Обнаружение Точность Процесс
13/52 3. Оборона против performance-деградаций
Сравнение видов обороны
Обнаружение Точность Процесс
Merge robot Вовремя Средняя Автоматический
13/52 3. Оборона против performance-деградаций
Сравнение видов обороны
Обнаружение Точность Процесс
Merge robot Вовремя Средняя Автоматический
Daily tests Поздно Хорошая Полуручной
Retrospective Слишком поздно Отличная Полуручной
13/52 3. Оборона против performance-деградаций
Сравнение видов обороны
Обнаружение Точность Процесс
Merge robot Вовремя Средняя Автоматический
Daily tests Поздно Хорошая Полуручной
Retrospective Слишком поздно Отличная Полуручной
Check points Вовремя Отличная Ручной
Pre-release Зависит Отличная Ручной
13/52 3. Оборона против performance-деградаций
Сравнение видов обороны
Обнаружение Точность Процесс
Merge robot Вовремя Средняя Автоматический
Daily tests Поздно Хорошая Полуручной
Retrospective Слишком поздно Отличная Полуручной
Check points Вовремя Отличная Ручной
Pre-release Зависит Отличная Ручной
И ещё несколько важных факторов:
• Время прогона
• Количество билд-агентов и их стоимость
• Спектр проблем, которые можно обнаружить
13/52 3. Оборона против performance-деградаций
Заметка 4
Когда бить тревогу?
14/52 4. Когда бить тревогу?
Alarm-критерии
Ручной
• Специальный программист, который мониторит тесты 24/7
15/52 4. Когда бить тревогу?
Alarm-критерии
Автоматизированный
• Абсолютный timeout
• Относительный timeout
• Исторические данные и статистика
16/52 4. Когда бить тревогу?
Alarm-критерии
Полуавтоматизированный
• Система, которая формирует список performance-проблем
• Специальный программист, который разбирает этот список
17/52 4. Когда бить тревогу?
Заметка 5
Performance-аномалии
18/52 5. Performance-аномалии
Охота за performance-аномалиями
19/52 5. Performance-аномалии
Охота за performance-аномалиями
• Performance-пространство — множество всех
performance-метрик тестов на всевозможных конфигурациях.
19/52 5. Performance-аномалии
Охота за performance-аномалиями
• Performance-пространство — множество всех
performance-метрик тестов на всевозможных конфигурациях.
• Performance-аномалия — ситуация, при которой
performance-пространство выглядит странно.
19/52 5. Performance-аномалии
Охота за performance-аномалиями
• Performance-пространство — множество всех
performance-метрик тестов на всевозможных конфигурациях.
• Performance-аномалия — ситуация, при которой
performance-пространство выглядит странно.
• Performance-чистота — отсутствие performance-аномалий
19/52 5. Performance-аномалии
Наведение performance-чистоты позволяет
20/52 5. Performance-аномалии
Наведение performance-чистоты позволяет
• Находить проблемы, на которые не стоят assert’ы
20/52 5. Performance-аномалии
Наведение performance-чистоты позволяет
• Находить проблемы, на которые не стоят assert’ы
• Ускорять билд
20/52 5. Performance-аномалии
Наведение performance-чистоты позволяет
• Находить проблемы, на которые не стоят assert’ы
• Ускорять билд
• Находить flaky-тесты
20/52 5. Performance-аномалии
Наведение performance-чистоты позволяет
• Находить проблемы, на которые не стоят assert’ы
• Ускорять билд
• Находить flaky-тесты
• Уменьшать количество тестов, которые в будущем
помешают найти действительно критичные проблемы
20/52 5. Performance-аномалии
Заметка 6
Кластеризация
21/52 6. Кластеризация
Какая OS самая быстрая?
22/52 6. Кластеризация
Какая OS самая быстрая?
23/52 6. Кластеризация
Какая OS самая быстрая?
24/52 6. Кластеризация
Заметка 7
Деградации: большие и маленькие
25/52 7. Деградации: большие и маленькие
Большая деградация
26/52 7. Деградации: большие и маленькие
Маленькие деградации
27/52 7. Деградации: большие и маленькие
Распределение
28/52 7. Деградации: большие и маленькие
Внезапные улучшения
29/52 7. Деградации: большие и маленькие
Заметка 8
Распределения странной формы
30/52 8. Распределения странной формы
Плохой код
while (!isReady) {
Thread.Sleep(100);
// Update state
}
31/52 8. Распределения странной формы
Плохой код
while (!isReady) {
Thread.Sleep(100);
// Update state
}
Thread.Sleep — источник постоянных проблем
31/52 8. Распределения странной формы
Мультимодальное распределение
32/52 8. Распределения странной формы
Бимодальное распределение
33/52 8. Распределения странной формы
Заглядываем внутрь
// OutputLineSplitterTest_testFlushing
while (!isFinished.get()) {
mySplitter.process(StringUtil.repeat("A", 100), each);
i++;
if (i % 10 == 0) {
written.release();
try {
if (!read.tryAcquire(10, TimeUnit.SECONDS))
throw new TimeoutException();
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
}
34/52 8. Распределения странной формы
Просто странное распределение
По мотивам экспериментов с .NET Core
35/52 8. Распределения странной формы
Заметка 9
Большая дисперсия
36/52 9. Большая дисперсия
Очень большая дисперсия
37/52 9. Большая дисперсия
Подозрительная дисперсия
38/52 9. Большая дисперсия
Смотрим тест
[Test]
public void TestFullTrigrams()
{
const int start = 256;
const int limit = 512;
for (var a = start; a <= limit; ++a)
for (var b = start; b <= limit; ++b)
for (var c = start; c <= limit; ++c)
TestTrigramToken((char)a, (char)b, (char)c);
}
39/52 9. Большая дисперсия
Смотрим тест
private static void TestTrigramToken(char a, char b, char c)
{
var testedTrigram = new TrigramToken(a, b, c);
var testedTrigramHash = (int)testedTrigram;
var expectedIsShort = ((a | b | c) >> 8 == 0);
Assert.AreEqual(expectedIsShort, testedTrigram.IsShort());
Assert.AreEqual(c,
TrigramToken.ExtractLastCharacter(testedTrigramHash));
}
40/52 9. Большая дисперсия
Смотрим снэпшот
41/52 9. Большая дисперсия
Смотрим исходники
// NUnit 2.6.4
public static void AreEqual(int expected, int actual)
{
Assert.That(actual, Is.EqualTo(expected), null, null);
}
public static void AreEqual(object expected, object actual)
{
Assert.That(actual, Is.EqualTo(expected), null, null);
}
public static EqualConstraint EqualTo(object expected)
{
return new EqualConstraint(expected);
}
42/52 9. Большая дисперсия
Заметка 10
Когда аномалия есть, а проблемы нету
43/52 10. Когда аномалия есть, а проблемы нету
Ложные друзья performance-инженера
44/52 10. Когда аномалия есть, а проблемы нету
Ложные друзья performance-инженера
• Изменения в тесте или порядке тестов
44/52 10. Когда аномалия есть, а проблемы нету
Ложные друзья performance-инженера
• Изменения в тесте или порядке тестов
• Изменения в агенте или окружении
44/52 10. Когда аномалия есть, а проблемы нету
Ложные друзья performance-инженера
• Изменения в тесте или порядке тестов
• Изменения в агенте или окружении
• Изменения в tradeoff-ах
44/52 10. Когда аномалия есть, а проблемы нету
Ложные друзья performance-инженера
• Изменения в тесте или порядке тестов
• Изменения в агенте или окружении
• Изменения в tradeoff-ах
• Да и вообще, любые изменения
44/52 10. Когда аномалия есть, а проблемы нету
Найди деградацию!
45/52 10. Когда аномалия есть, а проблемы нету
Найди деградацию!
А её нету, просто macOS-агентам было плохо. . .
45/52 10. Когда аномалия есть, а проблемы нету
Заметка 11
Performance Driven Development (PDD)
46/52 11. Performance Driven Development (PDD)
Performance Driven Development (PDD)
47/52 11. Performance Driven Development (PDD)
Performance Driven Development (PDD)
1 Пишем тест
47/52 11. Performance Driven Development (PDD)
Performance Driven Development (PDD)
1 Пишем тест
2 Собираем performance-метрики и
задаём performance-требования
47/52 11. Performance Driven Development (PDD)
Performance Driven Development (PDD)
1 Пишем тест
2 Собираем performance-метрики и
задаём performance-требования
3 Проверяем, что тест красный
47/52 11. Performance Driven Development (PDD)
Performance Driven Development (PDD)
1 Пишем тест
2 Собираем performance-метрики и
задаём performance-требования
3 Проверяем, что тест красный
4 Делаем рефакторинг и оптимизации
47/52 11. Performance Driven Development (PDD)
Performance Driven Development (PDD)
1 Пишем тест
2 Собираем performance-метрики и
задаём performance-требования
3 Проверяем, что тест красный
4 Делаем рефакторинг и оптимизации
5 Проверяем, что тест зелёный
(И все остальные тесты тоже)
47/52 11. Performance Driven Development (PDD)
Performance Driven Development (PDD)
1 Пишем тест
2 Собираем performance-метрики и
задаём performance-требования
3 Проверяем, что тест красный
4 Делаем рефакторинг и оптимизации
5 Проверяем, что тест зелёный
(И все остальные тесты тоже)
6 Возвращаемся к шагу 1
47/52 11. Performance Driven Development (PDD)
Заметка 12
Performance Culture
48/52 12. Performance Culture
Performance Culture
49/52 12. Performance Culture
Заметка 13
Заключительные мысли
50/52 13. Заключительные мысли
Мораль
51/52 13. Заключительные мысли
Мораль
• Performance-тестирование —
увлекательно и полезно, но сложно.
51/52 13. Заключительные мысли
Мораль
• Performance-тестирование —
увлекательно и полезно, но сложно.
• Тестировать performance можно и нужно.
51/52 13. Заключительные мысли
Мораль
• Performance-тестирование —
увлекательно и полезно, но сложно.
• Тестировать performance можно и нужно.
• Соблюдайте performance-чистоту!
51/52 13. Заключительные мысли
Мораль
• Performance-тестирование —
увлекательно и полезно, но сложно.
• Тестировать performance можно и нужно.
• Соблюдайте performance-чистоту!
• Будьте performance-культурными!
51/52 13. Заключительные мысли
Вопросы?
Андрей Акиньшин
http://aakinshin.net
https://github.com/AndreyAkinshin
https://twitter.com/andrey_akinshin
andrey.akinshin@gmail.com
52/52 13. Заключительные мысли
1 of 105

Recommended

Сложности performance-тестирования / Андрей Акиньшин (JetBrains) by
Сложности performance-тестирования / Андрей Акиньшин (JetBrains)Сложности performance-тестирования / Андрей Акиньшин (JetBrains)
Сложности performance-тестирования / Андрей Акиньшин (JetBrains)Ontico
353 views91 slides
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн... by
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
1.6K views78 slides
Automation testing desktop applications by
Automation testing desktop applicationsAutomation testing desktop applications
Automation testing desktop applicationsАлексей Стягайло
507 views84 slides
Нагрузочное тестирование by
Нагрузочное тестированиеНагрузочное тестирование
Нагрузочное тестированиеSPB SQA Group
6.8K views63 slides
Java осень 2013 лекция 5-1 by
Java осень 2013 лекция 5-1Java осень 2013 лекция 5-1
Java осень 2013 лекция 5-1Technopark
401 views60 slides
"Опыт создания системы управления сборкой и тестированием" (полная) by
"Опыт создания системы управления сборкой и тестированием" (полная)"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)SPB SQA Group
541 views31 slides

More Related Content

What's hot

"Опыт создания системы управления сборкой и тестированием" (слайдкаст) by
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)SPB SQA Group
654 views20 slides
Оптимизация производительности нагруженных веб-систем на Java by
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
1.8K views28 slides
Хорошо поддерживаемое приложение by
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеNikolay Sivko
304 views58 slides
Всему своё время / Роман Ивлиев (Банки.ру) by
Всему своё время / Роман Ивлиев (Банки.ру)Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)Ontico
913 views42 slides
Selenium grid on-demand by
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demandSQALab
701 views146 slides
Нагрузочное тестирование. С чего начать? by
Нагрузочное тестирование. С чего начать?Нагрузочное тестирование. С чего начать?
Нагрузочное тестирование. С чего начать?OdessaQA
4.4K views22 slides

What's hot(15)

"Опыт создания системы управления сборкой и тестированием" (слайдкаст) by SPB SQA Group
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
SPB SQA Group654 views
Оптимизация производительности нагруженных веб-систем на Java by Alex Chistyakov
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
Alex Chistyakov1.8K views
Хорошо поддерживаемое приложение by Nikolay Sivko
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложение
Nikolay Sivko304 views
Всему своё время / Роман Ивлиев (Банки.ру) by Ontico
Всему своё время / Роман Ивлиев (Банки.ру)Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)
Ontico913 views
Selenium grid on-demand by SQALab
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demand
SQALab701 views
Нагрузочное тестирование. С чего начать? by OdessaQA
Нагрузочное тестирование. С чего начать?Нагрузочное тестирование. С чего начать?
Нагрузочное тестирование. С чего начать?
OdessaQA4.4K views
Андрей Похилько — Нагрузочное тестирование типичного интернет сервиса by Yandex
Андрей Похилько — Нагрузочное тестирование типичного интернет сервисаАндрей Похилько — Нагрузочное тестирование типичного интернет сервиса
Андрей Похилько — Нагрузочное тестирование типичного интернет сервиса
Yandex3.5K views
Инструментация среды исполнения в арсенале тестировщика by SQALab
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
SQALab9K views
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно" by Yandex
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
Yandex631 views
Эталонное описание фильма на основе десятков дубликатов by Yandex
Эталонное описание фильма на основе десятков дубликатовЭталонное описание фильма на основе десятков дубликатов
Эталонное описание фильма на основе десятков дубликатов
Yandex868 views
Экономически эффективный процесс тестирования (Codefest 2015) by Andrei Solntsev
Экономически эффективный процесс тестирования (Codefest 2015)Экономически эффективный процесс тестирования (Codefest 2015)
Экономически эффективный процесс тестирования (Codefest 2015)
Andrei Solntsev769 views
Let's Talk About Junit 5 by SQALab
Let's Talk About Junit 5Let's Talk About Junit 5
Let's Talk About Junit 5
SQALab1.4K views
Java Ahead-Of-Time compilation by Nikita Lipsky
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilation
Nikita Lipsky1.7K views
TDD или как я стараюсь писать код by MoscowDjango
TDD или как я стараюсь писать кодTDD или как я стараюсь писать код
TDD или как я стараюсь писать код
MoscowDjango1.4K views

Similar to Поговорим про performance-тестирование

Сложности performance-тестирования by
Сложности performance-тестированияСложности performance-тестирования
Сложности performance-тестированияAndrey Akinshin
277 views91 slides
"Тестирование распределенных систем" Сатарин Андрей, Яндекс by
"Тестирование распределенных систем" Сатарин Андрей, Яндекс"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндексit-people
194 views61 slides
Илья Кудинов by
Илья КудиновИлья Кудинов
Илья КудиновCodeFest
1.1K views83 slides
ACC - конструируем тест-план методом Google by
ACC - конструируем тест-план методом GoogleACC - конструируем тест-план методом Google
ACC - конструируем тест-план методом GoogleSQALab
8.7K views35 slides
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы... by
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...WrikeTechClub
18.3K views82 slides
Развитие процессов тестирования в Badoo за три года by
Развитие процессов тестирования в Badoo за три годаРазвитие процессов тестирования в Badoo за три года
Развитие процессов тестирования в Badoo за три годаSQALab
11.3K views82 slides

Similar to Поговорим про performance-тестирование(20)

Сложности performance-тестирования by Andrey Akinshin
Сложности performance-тестированияСложности performance-тестирования
Сложности performance-тестирования
Andrey Akinshin277 views
"Тестирование распределенных систем" Сатарин Андрей, Яндекс by it-people
"Тестирование распределенных систем" Сатарин Андрей, Яндекс"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндекс
it-people194 views
Илья Кудинов by CodeFest
Илья КудиновИлья Кудинов
Илья Кудинов
CodeFest1.1K views
ACC - конструируем тест-план методом Google by SQALab
ACC - конструируем тест-план методом GoogleACC - конструируем тест-план методом Google
ACC - конструируем тест-план методом Google
SQALab8.7K views
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы... by WrikeTechClub
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
WrikeTechClub18.3K views
Развитие процессов тестирования в Badoo за три года by SQALab
Развитие процессов тестирования в Badoo за три годаРазвитие процессов тестирования в Badoo за три года
Развитие процессов тестирования в Badoo за три года
SQALab11.3K views
Тестируем производительность распределённых систем, Александр Киров (Parallels) by Ontico
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Ontico2.7K views
Java Platform Performance BoF by Dmitry Buzdin
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
Dmitry Buzdin2.7K views
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст... by CodeFest
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest1K views
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ... by Ontico
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...
Ontico319 views
Нагрузочное тестирование JMeter Кожухов by Илья Кожухов
Нагрузочное тестирование JMeter КожуховНагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter Кожухов
Monitoring-driven эксплуатация (rootconf2015) by Nikolay Sivko
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)
Nikolay Sivko2.6K views
Monitoring driven эксплуатация / Николай Сивко (HeadHunter) by Ontico
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Ontico1.3K views
ThinkJavaKharkiv#1 Шеф, все пропало. Проблемы с Production by Vladimir Malinin
ThinkJavaKharkiv#1 Шеф, все пропало. Проблемы с ProductionThinkJavaKharkiv#1 Шеф, все пропало. Проблемы с Production
ThinkJavaKharkiv#1 Шеф, все пропало. Проблемы с Production
Vladimir Malinin712 views
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей... by Ontico
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Ontico509 views
Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro... by Mad Devs
Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...
Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...
Mad Devs608 views
Эффективные ретроспективы by Boris Volfson
Эффективные ретроспективыЭффективные ретроспективы
Эффективные ретроспективы
Boris Volfson6.8K views
КГТУ Лекция 7: Обеспечение Качества Программного Обеспечения by Iosif Itkin
КГТУ Лекция 7: Обеспечение Качества Программного Обеспечения КГТУ Лекция 7: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 7: Обеспечение Качества Программного Обеспечения
Iosif Itkin1.5K views
[jeeconf-2011] Java Platform Performance BoF by Aleksey Shipilev
[jeeconf-2011] Java Platform Performance BoF[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF
Aleksey Shipilev983 views

More from Andrey Akinshin

Сложности микробенчмаркинга by
Сложности микробенчмаркингаСложности микробенчмаркинга
Сложности микробенчмаркингаAndrey Akinshin
521 views66 slides
Поговорим про память by
Поговорим про памятьПоговорим про память
Поговорим про памятьAndrey Akinshin
332 views116 slides
Кроссплатформенный .NET и как там дела с Mono и CoreCLR by
Кроссплатформенный .NET и как там дела с Mono и CoreCLRКроссплатформенный .NET и как там дела с Mono и CoreCLR
Кроссплатформенный .NET и как там дела с Mono и CoreCLRAndrey Akinshin
322 views32 slides
Теория и практика .NET-бенчмаркинга (25.01.2017, Москва) by
 Теория и практика .NET-бенчмаркинга (25.01.2017, Москва) Теория и практика .NET-бенчмаркинга (25.01.2017, Москва)
Теория и практика .NET-бенчмаркинга (25.01.2017, Москва)Andrey Akinshin
3.6K views153 slides
Продолжаем говорить про арифметику by
Продолжаем говорить про арифметикуПродолжаем говорить про арифметику
Продолжаем говорить про арифметикуAndrey Akinshin
676 views83 slides
Let’s talk about microbenchmarking by
Let’s talk about microbenchmarkingLet’s talk about microbenchmarking
Let’s talk about microbenchmarkingAndrey Akinshin
598 views41 slides

More from Andrey Akinshin(20)

Сложности микробенчмаркинга by Andrey Akinshin
Сложности микробенчмаркингаСложности микробенчмаркинга
Сложности микробенчмаркинга
Andrey Akinshin521 views
Поговорим про память by Andrey Akinshin
Поговорим про памятьПоговорим про память
Поговорим про память
Andrey Akinshin332 views
Кроссплатформенный .NET и как там дела с Mono и CoreCLR by Andrey Akinshin
Кроссплатформенный .NET и как там дела с Mono и CoreCLRКроссплатформенный .NET и как там дела с Mono и CoreCLR
Кроссплатформенный .NET и как там дела с Mono и CoreCLR
Andrey Akinshin322 views
Теория и практика .NET-бенчмаркинга (25.01.2017, Москва) by Andrey Akinshin
 Теория и практика .NET-бенчмаркинга (25.01.2017, Москва) Теория и практика .NET-бенчмаркинга (25.01.2017, Москва)
Теория и практика .NET-бенчмаркинга (25.01.2017, Москва)
Andrey Akinshin3.6K views
Продолжаем говорить про арифметику by Andrey Akinshin
Продолжаем говорить про арифметикуПродолжаем говорить про арифметику
Продолжаем говорить про арифметику
Andrey Akinshin676 views
Let’s talk about microbenchmarking by Andrey Akinshin
Let’s talk about microbenchmarkingLet’s talk about microbenchmarking
Let’s talk about microbenchmarking
Andrey Akinshin598 views
Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург) by Andrey Akinshin
Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)
Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)
Andrey Akinshin1.4K views
Поговорим про арифметику by Andrey Akinshin
Поговорим про арифметикуПоговорим про арифметику
Поговорим про арифметику
Andrey Akinshin120.8K views
Подружили CLR и JVM в Project Rider by Andrey Akinshin
Подружили CLR и JVM в Project RiderПодружили CLR и JVM в Project Rider
Подружили CLR и JVM в Project Rider
Andrey Akinshin794 views
Что нам готовит грядущий C#7? by Andrey Akinshin
Что нам готовит грядущий C#7?Что нам готовит грядущий C#7?
Что нам готовит грядущий C#7?
Andrey Akinshin376 views
.NET 2015: Будущее рядом by Andrey Akinshin
.NET 2015: Будущее рядом.NET 2015: Будущее рядом
.NET 2015: Будущее рядом
Andrey Akinshin538 views
Продолжаем говорить о микрооптимизациях .NET-приложений by Andrey Akinshin
Продолжаем говорить о микрооптимизациях .NET-приложенийПродолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложений
Andrey Akinshin665 views
Распространённые ошибки оценки производительности .NET-приложений by Andrey Akinshin
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложений
Andrey Akinshin1K views
Поговорим о микрооптимизациях .NET-приложений by Andrey Akinshin
Поговорим о микрооптимизациях .NET-приложенийПоговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложений
Andrey Akinshin855 views
Практические приёмы оптимизации .NET-приложений by Andrey Akinshin
Практические приёмы оптимизации .NET-приложенийПрактические приёмы оптимизации .NET-приложений
Практические приёмы оптимизации .NET-приложений
Andrey Akinshin2.4K views
Поговорим о различных версиях .NET by Andrey Akinshin
Поговорим о различных версиях .NETПоговорим о различных версиях .NET
Поговорим о различных версиях .NET
Andrey Akinshin726 views
Низкоуровневые оптимизации .NET-приложений by Andrey Akinshin
Низкоуровневые оптимизации .NET-приложенийНизкоуровневые оптимизации .NET-приложений
Низкоуровневые оптимизации .NET-приложений
Andrey Akinshin3.8K views
Основы работы с Git by Andrey Akinshin
Основы работы с GitОсновы работы с Git
Основы работы с Git
Andrey Akinshin3.8K views
Сборка мусора в .NET by Andrey Akinshin
Сборка мусора в .NETСборка мусора в .NET
Сборка мусора в .NET
Andrey Akinshin3.9K views
Об особенностях использования значимых типов в .NET by Andrey Akinshin
Об особенностях использования значимых типов в .NETОб особенностях использования значимых типов в .NET
Об особенностях использования значимых типов в .NET
Andrey Akinshin3.5K views

Поговорим про performance-тестирование