SlideShare a Scribd company logo
1 of 105
Download to read offline
Поговорим про 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. Заключительные мысли

More Related Content

What's hot

"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)SPB SQA Group
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеNikolay Sivko
 
Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)Ontico
 
Selenium grid on-demand
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demandSQALab
 
Нагрузочное тестирование. С чего начать?
Нагрузочное тестирование. С чего начать?Нагрузочное тестирование. С чего начать?
Нагрузочное тестирование. С чего начать?OdessaQA
 
Андрей Похилько — Нагрузочное тестирование типичного интернет сервиса
Андрей Похилько — Нагрузочное тестирование типичного интернет сервисаАндрей Похилько — Нагрузочное тестирование типичного интернет сервиса
Андрей Похилько — Нагрузочное тестирование типичного интернет сервисаYandex
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаSQALab
 
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"Yandex
 
Эталонное описание фильма на основе десятков дубликатов
Эталонное описание фильма на основе десятков дубликатовЭталонное описание фильма на основе десятков дубликатов
Эталонное описание фильма на основе десятков дубликатовYandex
 
Экономически эффективный процесс тестирования (Codefest 2015)
Экономически эффективный процесс тестирования (Codefest 2015)Экономически эффективный процесс тестирования (Codefest 2015)
Экономически эффективный процесс тестирования (Codefest 2015)Andrei Solntsev
 
Let's Talk About Junit 5
Let's Talk About Junit 5Let's Talk About Junit 5
Let's Talk About Junit 5SQALab
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilationNikita Lipsky
 
TDD или как я стараюсь писать код
TDD или как я стараюсь писать кодTDD или как я стараюсь писать код
TDD или как я стараюсь писать кодMoscowDjango
 

What's hot (15)

"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложение
 
Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)
 
Selenium grid on-demand
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demand
 
Нагрузочное тестирование. С чего начать?
Нагрузочное тестирование. С чего начать?Нагрузочное тестирование. С чего начать?
Нагрузочное тестирование. С чего начать?
 
Андрей Похилько — Нагрузочное тестирование типичного интернет сервиса
Андрей Похилько — Нагрузочное тестирование типичного интернет сервисаАндрей Похилько — Нагрузочное тестирование типичного интернет сервиса
Андрей Похилько — Нагрузочное тестирование типичного интернет сервиса
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
 
Continuousdelivery
ContinuousdeliveryContinuousdelivery
Continuousdelivery
 
Эталонное описание фильма на основе десятков дубликатов
Эталонное описание фильма на основе десятков дубликатовЭталонное описание фильма на основе десятков дубликатов
Эталонное описание фильма на основе десятков дубликатов
 
Экономически эффективный процесс тестирования (Codefest 2015)
Экономически эффективный процесс тестирования (Codefest 2015)Экономически эффективный процесс тестирования (Codefest 2015)
Экономически эффективный процесс тестирования (Codefest 2015)
 
Let's Talk About Junit 5
Let's Talk About Junit 5Let's Talk About Junit 5
Let's Talk About Junit 5
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilation
 
TDD или как я стараюсь писать код
TDD или как я стараюсь писать кодTDD или как я стараюсь писать код
TDD или как я стараюсь писать код
 

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

Сложности performance-тестирования
Сложности performance-тестированияСложности performance-тестирования
Сложности performance-тестированияAndrey Akinshin
 
"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндекс"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндексit-people
 
Илья Кудинов
Илья КудиновИлья Кудинов
Илья КудиновCodeFest
 
ACC - конструируем тест-план методом Google
ACC - конструируем тест-план методом GoogleACC - конструируем тест-план методом Google
ACC - конструируем тест-план методом GoogleSQALab
 
Развитие процессов тестирования в Badoo за три года
Развитие процессов тестирования в Badoo за три годаРазвитие процессов тестирования в Badoo за три года
Развитие процессов тестирования в Badoo за три годаSQALab
 
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...WrikeTechClub
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Ontico
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoFDmitry Buzdin
 
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest
 
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...Ontico
 
Нагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter КожуховНагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter КожуховИлья Кожухов
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Ontico
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Nikolay Sivko
 
ThinkJavaKharkiv#1 Шеф, все пропало. Проблемы с Production
ThinkJavaKharkiv#1 Шеф, все пропало. Проблемы с ProductionThinkJavaKharkiv#1 Шеф, все пропало. Проблемы с Production
ThinkJavaKharkiv#1 Шеф, все пропало. Проблемы с ProductionVladimir Malinin
 
Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...
Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...
Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...Mad Devs
 
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Ontico
 
Эффективные ретроспективы
Эффективные ретроспективыЭффективные ретроспективы
Эффективные ретроспективыBoris Volfson
 
КГТУ Лекция 7: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 7: Обеспечение Качества Программного Обеспечения КГТУ Лекция 7: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 7: Обеспечение Качества Программного Обеспечения Iosif Itkin
 
[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoFAleksey Shipilev
 

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

Сложности performance-тестирования
Сложности performance-тестированияСложности performance-тестирования
Сложности performance-тестирования
 
"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндекс"Тестирование распределенных систем" Сатарин Андрей, Яндекс
"Тестирование распределенных систем" Сатарин Андрей, Яндекс
 
Илья Кудинов
Илья КудиновИлья Кудинов
Илья Кудинов
 
ACC - конструируем тест-план методом Google
ACC - конструируем тест-план методом GoogleACC - конструируем тест-план методом Google
ACC - конструируем тест-план методом Google
 
Развитие процессов тестирования в Badoo за три года
Развитие процессов тестирования в Badoo за три годаРазвитие процессов тестирования в Badoo за три года
Развитие процессов тестирования в Badoo за три года
 
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
 
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
 
Uawebchallenge.yandex.tank
Uawebchallenge.yandex.tankUawebchallenge.yandex.tank
Uawebchallenge.yandex.tank
 
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...
 
Нагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter КожуховНагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter Кожухов
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)
 
ThinkJavaKharkiv#1 Шеф, все пропало. Проблемы с Production
ThinkJavaKharkiv#1 Шеф, все пропало. Проблемы с ProductionThinkJavaKharkiv#1 Шеф, все пропало. Проблемы с Production
ThinkJavaKharkiv#1 Шеф, все пропало. Проблемы с Production
 
Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...
Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...
Приключения проекта от компьютера разработчика до серьезных нагрузок/ The pro...
 
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
 
Эффективные ретроспективы
Эффективные ретроспективыЭффективные ретроспективы
Эффективные ретроспективы
 
КГТУ Лекция 7: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 7: Обеспечение Качества Программного Обеспечения КГТУ Лекция 7: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 7: Обеспечение Качества Программного Обеспечения
 
[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF
 

More from Andrey Akinshin

Сложности микробенчмаркинга
Сложности микробенчмаркингаСложности микробенчмаркинга
Сложности микробенчмаркингаAndrey Akinshin
 
Поговорим про память
Поговорим про памятьПоговорим про память
Поговорим про памятьAndrey Akinshin
 
Кроссплатформенный .NET и как там дела с Mono и CoreCLR
Кроссплатформенный .NET и как там дела с Mono и CoreCLRКроссплатформенный .NET и как там дела с Mono и CoreCLR
Кроссплатформенный .NET и как там дела с Mono и CoreCLRAndrey Akinshin
 
Теория и практика .NET-бенчмаркинга (25.01.2017, Москва)
 Теория и практика .NET-бенчмаркинга (25.01.2017, Москва) Теория и практика .NET-бенчмаркинга (25.01.2017, Москва)
Теория и практика .NET-бенчмаркинга (25.01.2017, Москва)Andrey Akinshin
 
Продолжаем говорить про арифметику
Продолжаем говорить про арифметикуПродолжаем говорить про арифметику
Продолжаем говорить про арифметикуAndrey Akinshin
 
Let’s talk about microbenchmarking
Let’s talk about microbenchmarkingLet’s talk about microbenchmarking
Let’s talk about microbenchmarkingAndrey Akinshin
 
Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)
Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)
Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)Andrey Akinshin
 
Поговорим про арифметику
Поговорим про арифметикуПоговорим про арифметику
Поговорим про арифметикуAndrey Akinshin
 
Подружили CLR и JVM в Project Rider
Подружили CLR и JVM в Project RiderПодружили CLR и JVM в Project Rider
Подружили CLR и JVM в Project RiderAndrey Akinshin
 
Что нам готовит грядущий C#7?
Что нам готовит грядущий C#7?Что нам готовит грядущий C#7?
Что нам готовит грядущий C#7?Andrey Akinshin
 
.NET 2015: Будущее рядом
.NET 2015: Будущее рядом.NET 2015: Будущее рядом
.NET 2015: Будущее рядомAndrey Akinshin
 
Продолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложенийПродолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложенийAndrey Akinshin
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийAndrey Akinshin
 
Поговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложенийПоговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложенийAndrey Akinshin
 
Практические приёмы оптимизации .NET-приложений
Практические приёмы оптимизации .NET-приложенийПрактические приёмы оптимизации .NET-приложений
Практические приёмы оптимизации .NET-приложенийAndrey Akinshin
 
Поговорим о различных версиях .NET
Поговорим о различных версиях .NETПоговорим о различных версиях .NET
Поговорим о различных версиях .NETAndrey Akinshin
 
Низкоуровневые оптимизации .NET-приложений
Низкоуровневые оптимизации .NET-приложенийНизкоуровневые оптимизации .NET-приложений
Низкоуровневые оптимизации .NET-приложенийAndrey Akinshin
 
Основы работы с Git
Основы работы с GitОсновы работы с Git
Основы работы с GitAndrey Akinshin
 
Сборка мусора в .NET
Сборка мусора в .NETСборка мусора в .NET
Сборка мусора в .NETAndrey Akinshin
 
Об особенностях использования значимых типов в .NET
Об особенностях использования значимых типов в .NETОб особенностях использования значимых типов в .NET
Об особенностях использования значимых типов в .NETAndrey Akinshin
 

More from Andrey Akinshin (20)

Сложности микробенчмаркинга
Сложности микробенчмаркингаСложности микробенчмаркинга
Сложности микробенчмаркинга
 
Поговорим про память
Поговорим про памятьПоговорим про память
Поговорим про память
 
Кроссплатформенный .NET и как там дела с Mono и CoreCLR
Кроссплатформенный .NET и как там дела с Mono и CoreCLRКроссплатформенный .NET и как там дела с Mono и CoreCLR
Кроссплатформенный .NET и как там дела с Mono и CoreCLR
 
Теория и практика .NET-бенчмаркинга (25.01.2017, Москва)
 Теория и практика .NET-бенчмаркинга (25.01.2017, Москва) Теория и практика .NET-бенчмаркинга (25.01.2017, Москва)
Теория и практика .NET-бенчмаркинга (25.01.2017, Москва)
 
Продолжаем говорить про арифметику
Продолжаем говорить про арифметикуПродолжаем говорить про арифметику
Продолжаем говорить про арифметику
 
Let’s talk about microbenchmarking
Let’s talk about microbenchmarkingLet’s talk about microbenchmarking
Let’s talk about microbenchmarking
 
Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)
Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)
Теория и практика .NET-бенчмаркинга (02.11.2016, Екатеринбург)
 
Поговорим про арифметику
Поговорим про арифметикуПоговорим про арифметику
Поговорим про арифметику
 
Подружили CLR и JVM в Project Rider
Подружили CLR и JVM в Project RiderПодружили CLR и JVM в Project Rider
Подружили CLR и JVM в Project Rider
 
Что нам готовит грядущий C#7?
Что нам готовит грядущий C#7?Что нам готовит грядущий C#7?
Что нам готовит грядущий C#7?
 
.NET 2015: Будущее рядом
.NET 2015: Будущее рядом.NET 2015: Будущее рядом
.NET 2015: Будущее рядом
 
Продолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложенийПродолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложений
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложений
 
Поговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложенийПоговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложений
 
Практические приёмы оптимизации .NET-приложений
Практические приёмы оптимизации .NET-приложенийПрактические приёмы оптимизации .NET-приложений
Практические приёмы оптимизации .NET-приложений
 
Поговорим о различных версиях .NET
Поговорим о различных версиях .NETПоговорим о различных версиях .NET
Поговорим о различных версиях .NET
 
Низкоуровневые оптимизации .NET-приложений
Низкоуровневые оптимизации .NET-приложенийНизкоуровневые оптимизации .NET-приложений
Низкоуровневые оптимизации .NET-приложений
 
Основы работы с Git
Основы работы с GitОсновы работы с Git
Основы работы с Git
 
Сборка мусора в .NET
Сборка мусора в .NETСборка мусора в .NET
Сборка мусора в .NET
 
Об особенностях использования значимых типов в .NET
Об особенностях использования значимых типов в .NETОб особенностях использования значимых типов в .NET
Об особенностях использования значимых типов в .NET
 

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