Введение
В данной статье мы рассмотрим создание центра компетенций по обеспечению производительности как способа добиться максимальной производительности разрабатываемых решений.
Производительность влияет на опыт использования (user experience) сильней чем дизайн или функциональные возможности. Для коммерческих приложений удовлетворённость пользователя является определяющим фактором успеха. При этом негативный опыт клиенты запоминают чаще успешного. Для внутренней разработки производительность определяет эффективность использования рабочего времени сотрудников.
Подводя итог: Производительность решения непосредственно связана с коммерческим успехом.
Тестирование производительности
Исправление проблем производительности после попадания приложения к конечным пользователям или на промышленный контур занимает большое количество времени и ресурсов.
Тестирование производительности уменьшает эти риски путем оценки соответствия приложения и его архитектуры ожиданиям клиентов по производительности до вывода в промышленную эксплуатацию. Тестирование производительности должно быть обязательным этапом в жизненном цикле программного обеспечения, а не проводится по остаточному принципу.
Правильно выполненное тестирование производительности предоставляет метрики производительности приложения под заданной нагрузкой, и уменьшает риски выхода приложения из строя. Тестирование производительности определяет ограничения по производительности (performance constraints), «узкие места» (bottlenecks), проблемы с пропускной способностью (though-put issues). Оно предоставляет возможность оптимизировать код приложения и инфраструктуру/архитектуру заранее, что намного дешевле и менее рискованно, чем делать это на работающем приложении.
Затраты на тестирование производительности и риски сбоя в работе приложения
По данным исследования компании Gartner Inc, стоимость тестирования составляет в среднем 2-3% от общего бюджета на разработку. Исправление проблем производительности на уже внедренном решении увеличивает бюджет проекта как минимум 25% и могут привести к полному провалу проекта.
Планирование производительности (performance planning) и организация работ по обеспечению производительности (performance engineering) могут незначительно увеличить стоимость тестирования, но как правило, эти затраты относят к этапу внедрения и не учитываются при оценке окупаемости инвестиций. Таким образом, удивительно, что компании готовы столкнуться с потерей 25% бюджета вместо инвестирования нескольких процентов в тестирование производительности.
Исследование Newport Group показало, и наш опыт это подтверждает — минимум 60% приложений, для которых не проводилось тестирования производительности, сталкиваются с проблемами с производительностью или сбоями в работе в течение первого года после начала эксплуатации. Последний пример, который я видел, это дефект в ПО для управления сайтами, которое использовалось компаниями с существенным процентом мирового веб-трафика. Дефект привел к проблемам с производительностью для сотен сайтов одновременно, которые потребовалось отключить для исправления.
Для примера рассмотрим результаты исследования, указанного выше, в контексте проекта с бюджетом в 1 миллион долларов. В этом случае инвестиции в размере $30 000, вложенные в тестирование производительности перед вводом в промышленную эксплуатацию, предотвращают потенциальные расходы в $250 000 на исправление ошибок. Если кратко, то проведение тестирование производительности до ввода в эксплуатацию в 8 раз дешевле, чем его отсутствие.
Для чего создавать центр компетенцией по обеспечению производительности?
Центр компетенций по тестированию отличается от центра компетенций по обеспечению производительности, так как его задача — это тестирование функциональности.
Тестирование производительности не проверяет функциональность приложения. Его цель — это оценка производительности архитектуры приложения под нагрузкой.
Миссия центра компетенций по обеспечению производительности предоставить «страховку» по производительности настолько рано, насколько это возможно; под «страховкой» понимается определение возможных проблем с производительностью до того, как они достигнут промышленной системы.
Центр компетенций по обеспечению производительности создает методики обеспечения производительности, определяет и организует процессы по тестированию производительности, внедряет эти процессы в команды по тестированию и помогает выстраивать стратегическое развитие компании. Основные задачи центра компетенций по обеспечению производительности:
- Выполнять тестирование производительности
- Поддерживать планирование мощностей
- Организовать процесс разработки в соответствии с разработанной методикой по обеспечению производительности.
Определение необходимости центра по обеспечению производительности
После осознания рисков отсутствия тестирования производительности необходимо оценить требуемый объем ресурсов для организации центра по обеспечению производительности. Для этого необходимо ответить на следующие вопросы:
- Как часто будет проводиться нагрузочное тестирование?
- Насколько полным должно быть тестирование производительности?
- Какие существуют риски и/или их стоимость при возникновении проблем с производительностью в промышленной среде?
- Сколько технических специалистов и как часто они привлекаются для тестирования производительности?
Следует всерьез задуматься о формировании центра компетенций по обеспечению производительности, если ответы на эти вопросы показывают, что ваша команда по разработке приложения или компания вкладывает серьёзные усилия в проведение тестирования производительности и, если эти усилия потребляют (или будут потреблять) ресурсы.
Модель центра компетенцией по обеспечению производительности
Центры компетенций не имеют значительных различий в организационной структуре. Разница между ними заключается в целевом результате. Для центра компетенций по обеспечению производительности — это производительность архитектуры приложения, для центра компетенций по тестированию — корректность работы бизнес-логики приложения.
Центр компетенций позволяет систематизировать процессы, прямо или косвенно относящиеся к нагрузочному тестированию, такие как, например, планирование мощностей. И косвенные процессы, вроде управления релизной политикой, учитываются в работе центра компетенций по производительности.
Состав центра компетенций
Центр компетенций по обеспечению производительности состоит из двух элементов, используемых во всех проектах компании:
- Команда специалистов
- Технические компоненты тестирования.
Специалисты центра обучают и дополняют ресурсы, существующие внутри каждой проектной команды для достижения показателей по производительности. Это позволяет минимизировать количество технических специалистов на проекте. В рамках центра компетенций формируется база общих методов управления и тестирования производительности в рамках всего проекта для более эффективного использования ресурсов. Также центр обеспечивает повторное использование компонентов тестов по производительности, таких как тест планы, тест кейсы, отчеты об ошибках и др. Специалисты центра поддерживают репозитарий этих компонентов, создаваемых для каждого проекта, и подготавливают на их основе шаблоны и примеры для будущих работ.
Центр компетенций по обеспечению производительности обеспечит достижения следующих целей по производительности:
- Стабильность успешного развертывании нового кода, нового программного обеспечения и новой аппаратной конфигурации, посредством определения ограничений по мощностям (capacity constraints), проблем с многопоточностью, и других «узких мест» приложения до ввода в промышленную эксплуатацию.
- Повышение производительности существующего кода посредством оптимизации приложения, при этом сокращая общие требования к ресурсам и в то же время уменьшая время отклика системы;
- Формирование профиля нагрузки архитектуры и её возможностей по масштабированию, что помогает в процессе планирования и управления мощностями (capacity planning/management).
Жизненный цикл тестирования в центре компетенцией по обеспечению производительности
Тестирование производительности — это только один из процессов, составляющих сферу обеспечения производительности. Для получения максимального эффекта работы по обеспечению производительности должны выполняться на протяжении всего жизненного цикла приложения. Таблица ниже отражает виды работ по обеспечению производительности в зависимости от степени готовности кода.
СТЕПЕНЬ ГОТОВНОСТИ КОДА | СИСТЕМА СУЩЕСТВУЕТ В ВИДЕ | ВИДЫ РАБОТ ПО ОБЕСПЕЧЕНИЮ ПРОИЗВОДИТЕЛЬНОСТИ |
Концепция (нет кода) | Требования и спецификации | Предварительная оценка рисков: — Риски приложения — Инфраструктурные риски |
Завершено проектирование кода | Работающий прототип | 1) Оценка рисков приложения. 2) Предварительное тестирование производительности системы |
Подтверждена функциональность кода | Пакеты или релизы (передана в опытную эксплуатацию) | 1) Тестирование производительности системы. 2) Оптимизация системы. 3) Предварительная оптимизация инфраструктуры. |
Тестирование производительности кода | Пакеты или релизы | 1) Тестирование производительности инфраструктуры. 2) Оптимизация инфраструктуры. |
Роли в команде по тестированию
Руководящие роли (leadership roles) в команде по тестированию производительности
Эффективная организация центра компетенции по обеспечению производительности включает совместную работу людей, выполняющих несколько ролей. Эти роли могут выполняться как одним специалистом, так и несколькими. Размер и состав команды по обеспечению производительности зависит от общего круга задач и сложности процесса тестирования. Если тестирование производительности — это не регулярный процесс внутри вашей компании, тогда эти роли могут выполняться опытным консультантом по обеспечению производительности.
Менеджер по обеспечению производительности.
Менеджер центра компетенции по обеспечению производительности отвечает за развитие методик обеспечения производительности и их реализацию в рамках любых поставленных задач. Менеджер гарантирует, что компания следует, установленным протоколам обеспечения производительности, и изменяет эти протоколы по мере развития компании.
Инженер по тестированию производительности
Инженер по тестированию производительности создает, выполняет и оценивает результаты тестов по производительности. Это техническая роль, которая как правило требует большого опыта в сфере ИТ, включая разработку программного обеспечения, разработку баз данных, поддержку, опыт использования различных систем и понимание их архитектуры.
Аналитик по обеспечению производительности
Аналитик по обеспечению производительности выявляет требования к производительности приложения с точки зрения бизнеса и технической реализации. После тестирования аналитик подтверждает, что тесты, разработанные и проведенные инженером по производительности, позволяют оценить степень соответствия архитектуры требованиям.