Алексей Рагозин, Performance Test Driven Development

15
Алексей Рагозин, Россия, Deutsche Bank Доклад Test Driven Development HIGHLOAD DEV CONF HIGHLOAD DEV CONF #hdconf Performance

description

Для многих проектов требования по производительности являются не менее важными, чем функциональные требования. Не смотря на это, иногда кажется, что культура нагрузочного тестирования на годы отстаёт от функционального. Часто ли вы встречали, например, «непрерывное нагрузочное тестирование»? В этом докладе Алексей поделится опытом внедрения культуры нагрузочного тестирования (и в частности применения TDD подхода для нефункциональных требований).

Transcript of Алексей Рагозин, Performance Test Driven Development

Page 1: Алексей Рагозин, Performance Test Driven Development

Алексей Рагозин, Россия, Deutsche Bank

Доклад

Test Driven Development

HIGHLOAD DEV CONFHIGHLOAD DEV CONF

#hdconf

Performance

Page 2: Алексей Рагозин, Performance Test Driven Development

Тестирование и нагрузочное тестирование

Функциональное тестирование• Количество тест-кейсов увеличивается по мере разработки• Стоимость ошибки уменьшается по мере тестирования

Нагрузочное тестирование• Количество потенциальных сценариев тестирования

стабилизируется на ранних стадиях разработки• Стоимость ошибки экспонетциально растёт с ростом функционала

Page 3: Алексей Рагозин, Performance Test Driven Development

Тестирование и нагрузочное тестирование

Функциональное тестирование

Нагрузочное тестирование

Cost of bug

Test volume

Release

Release

Test volumeCost of bug

Page 4: Алексей Рагозин, Performance Test Driven Development

Performance Test Driver Development

• Пишем неоптимизированный код• Пишем нагрузочные тесты / бенчмарк• Исправляем проблемы производительности• Организуем изолированные тесты в профили нагрузки по мере

добавления функционала• Непрерывное тестирование производительности

Оптимизация должна быть обоснована тестом

Никаких спекуляций – только цифры

Page 5: Алексей Рагозин, Performance Test Driven Development

А на практике?

Трудоёмкость нагрузочных тестов• Сложная логика тестов, распределённые сценарии• “Ручной труд” в сценариях тестирования

Отсутствие нагрузочных требованией• “Должно работать быстро и обрабатывать много данных”• Нагрузочный тест план требует отдельного анализа

Отсутствие адекватной тестовой среды• Никто не хочет платить за оборудование дважды• Зависимость от внешних компонентов

Page 6: Алексей Рагозин, Performance Test Driven Development

А на практике?

Вы же проффесионалы! Зачем вам нагрузочное тестирование?

Просто сделайте так,чтобы всё работало.

Page 7: Алексей Рагозин, Performance Test Driven Development

И тем не менее

Фундамент для PTTD• End-to-End автоматизация тестов• Инкрементальный подход бенчмарк → изолированный тест → профиль нагрузки

• Непрерывное нагрузочное тестирование• Нагрузочное тестирование – ответственность комады

разработчиков

Page 8: Алексей Рагозин, Performance Test Driven Development

Автоматизация

“Классический” подход• bash + ssh + анализ логов + Excel / R• Мало пригоден для повторного использования• Короткий период полураспада тестов• Использование незнакомого инструментария

“Монокультурный” подход• Платформа приложения = платформа автоматизации− Приходится изобретать велосипеды, но+ Решается проблема культурного диссонанса

Page 9: Алексей Рагозин, Performance Test Driven Development

Спектр нагрузочных тестов

• Бенчмарки и распределённые бенчмарки Проверка гипотез, прототипирование

• Непрерывные нагрузочные тесты Поддержка тестовой базы в консистентном состоянии Раннее обнаружение проблем производительности

• Нагрузочные профили Нагрузочный эквивалент интеграционного тестирования Проверка соответствия NFR Профилирование и диагностика проблем

Page 10: Алексей Рагозин, Performance Test Driven Development

“Правильные” нагрузочные тесты

• Мониторинг, мониторинг, мониторинг– Системные и сетевые метрики, тайминги внешних

систем и т.д.

• Верификация результатов– Эффективность отдачи 503 – не ваш KPI

• Корректность генерации нагрузки• Качество тестовых данных

Page 11: Алексей Рагозин, Performance Test Driven Development

Работа с результатами измерений

Результаты тестирования• Ложь – неверно интерпретированные данные• Откровенная ложь – ошибки сценария или сбора данных• Статистка – то с чем нужно работать

Сбор истории результатов тестирования• Анализ трендов• Выявление неучтённых факторов

Page 12: Алексей Рагозин, Performance Test Driven Development

Lucene nightly benchmarks

http://people.apache.org/~mikemccand/lucenebench/

Page 13: Алексей Рагозин, Performance Test Driven Development

Последствия PTTD практики

• Мы стали писать меньше кода• Тестированием оказались покрыты многие моменты, до которых

раньше никогда не доходили руки• Результаты, полученные на ранних этапах разработки, позволяют

более аккуратно планировать закупки оборудования

Открытые проблемы• Важность нагрузочного тестирования по-прежнему недооценена• Практически всегда приходится интерполировать результаты из-за

ограничений тестовой среды

Page 14: Алексей Рагозин, Performance Test Driven Development

Ссылки релевантные для Java

Удалённое/распределённое выполнение кода на Java - http://code.google.com/p/gridkit/wiki/NanoCloudTutorial- http://blog.ragozin.info/2013/01/remote-code-execution-in-java-made.html- https://github.com/gridkit/gridant

Статистические расчёты- https://sites.google.com/site/piotrwendykier/software/parallelcolt

Простая библиотека для графиков- https://github.com/timmolter/XChart

Page 15: Алексей Рагозин, Performance Test Driven Development

СПАСИБО

Алексей Рагозин[email protected]://blog.ragozin.info