Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Фреймворк Talos

Глава 8 из книги "Производительность приложений с открытым исходным кодом".

Оригинал: Talos
Авторы: Clint Talbert, Joel Maher
Перевод: А.Панин

Формирование культуры разработки производительных продуктов

Являясь участниками проекта с открытым исходным кодом, мы сталкиваемся с необходимостью рассмотрения идей и критических замечаний от сторонних людей или участников сторонних проектов. У нас нет руководителя процесса разработки, который мог бы сообщить о том, как должны работать программные продукты. Для получения наибольшего объема информации и принятия правильного решения требовалось выслушать мнение множества людей из различных команд. Проект начал свое развитие, когда над фреймворком Talos работали два разработчика, над Datazilla или сервером графического представления также работали два разработчика, а также были задействованы еще два человека, обладающих знаниями в области обработки статистических данных, из нашей команды метрологии. Мы открыли наш проект для участия добровольцев с самого начала и приобрели множество новых участников сообщества, сформированного вокруг продукции компании Mozilla, а также тех, кто использовал сервер графического представления и некоторые тесты из комплекта поставки фреймворка Talos для тестирования собственных проектов. По мере нашей совместной работы медленно приходило понимание того, что изменение порядка выполнения тестов позволит нам получать более корректные результаты, поэтому мы приняли решение о вовлечении нескольких разработчиков компании Mozilla в проект. Наши первые обсуждения проектов с ними были были полны понимания благодаря тому, что мы предлагали внести в проект кардинальные изменения. При этом "мистическое поведение проекта Talos" затрудняло его эксплуатацию многими разработчиками, которые очень беспокоились о производительности программных продуктов.

Важное сообщение, которое необходимо было усвоить, содержало объяснение того, почему повторная разработка сложных компонентов системы являлась хорошей идеей и почему у нас не было возможности просто "приступить к непосредственному исправлению недоработок". Наиболее часто встречающееся обращенное к нам предложение обычно заключалось во внесении нескольких небольших изменений в существующую систему, причем ни один человек из тех, кто предлагал осуществлять работу в данном направлении не имел представления о том, как работает система, расположенная уровнем ниже. Мы провели множество презентаций, пригласили множество людей для прослушивания наших докладов, провели множество специальных индивидуальных встреч, начали размещать сообщения в блогах, на сайтах, в микроблоге twitter и на других ресурсах. Мы сделали все возможное для донесения информации до максимально широкого круга лиц. Мы занимались этим из-за того, что единственным опасным последствием выполнения всей описанной работы по созданию лучшей системы является работа по созданию системы, которую никто не будет использовать.

Прошло около года с момента первого рассмотрения проблемы появления статистического шума в данных при тестировании программных продуктов с помощью фреймворка Talos. Разработчики с нетерпением ожидают релизов от нас. Фреймворк Talos подвергся рефакторингу, поэтому его внутренняя структура является достаточно прозрачной и позволяет одновременно отправлять данные Datazilla и старому серверу графического представления. Мы на практике убедились в том, что Datazilla может обрабатывать объемы данных, которые мы передаем в ходе тестирования (1 ТБ данных за шесть месяцев) и исправили механизм измерений для получения корректных результатов расчетов. Что более всего впечатляет, мы нашли способ выполнения анализа с целью обнаружения регрессий/усовершенствований программных продуктов компании Mozilla в реальном времени для каждого из изменений дерева исходного кода, что оказалось большим преимуществом для разработчиков.

Таким образом, на данный момент при добавлении кем-либо изменений в исходный код Firefox Talos выполняет следующие действия:
  • Talos выполняет 25 измерений параметров загрузки каждой из страниц.
  • Все полученные данные передаются Datazilla.
  • Datazilla выполняет статистический анализ после получения данных первых пяти измерений. (95% данных со статистическим шумом приходится на 5 первых измерений.)
  • После этого используется инструмент T-Test от Welch для анализа параметров тестов и установления того, присутствуют ли выбросы в результатах тестирования загрузки каждой из страниц путем сравнения с предыдущими тенденциями изменений параметров, вычисленными на основе тестирования загрузки страниц браузером с предыдущими изменениями кода.1
  • После этого все результаты анализа средствами инструмента T-Test обрабатываются с помощью фильтра оценки ложных результатов (False Discovery Rate filter), который гарантирует, что Datazilla сможет определить любые ложные результаты, полученные на основе лишних данных.2
  • Наконец, в том случае, если результаты находятся в установленных нами пределах, Datazilla обрабатывает их с помощью экспоненциального алгоритма сглаживания для генерации новой линии тренда.3 В том случае, если результаты не находятся в установленных нами пределах, на их основе не формируется новая линия тренда и страница отмечается как некорректно обработанная.
  • Мы вычисляем обобщенные показатели корректных/некорректных загрузок на основе процентного соотношения загруженных и не загруженных страниц. При корректной загрузке 95% процентов страниц тестирование считается "корректно завершенным".

Результаты отправляются назад системе тестирования Talos в реальном времени, поэтому Talos после этого может передать сценарию сборки данные о том, присутствует или нет регрессия производительности в программном продукте. Все эти действия выполняются в процессе 10-20 тестирований средствами Talos, завершающихся каждую минуту (отсюда и 1 ТБ данных) одновременно с обновлением результатов расчетов и сохранением статистики.

Перенос описанных функций из работающего решения для его замены требует одновременного запуска обоих систем для каждого из релизов Firefox. Эта тактика позволяет гарантировать, что мы увидим все регрессии, о которых сообщит оригинальный сервер графического представления, а также сможем убедиться в их достоверности и возможности их определения в то же время средствами Datazilla. Так как в отчетах Datazilla приводятся результаты тестирования каждой из страниц вместо результатов выполнения всего набора тестов, пользователям фреймворка необходимо адаптироваться к новому пользовательскому интерфейсу и способу формирования отчетов.

Оглядываясь назад, можно сделать вывод о том, что первоочередная замена старой версии системы тестирования фреймворка Talos могла ускорить процесс разработки. Тем не менее, произведя ее рефакторинг, сотрудники компании Mozilla привлекли множество сторонних разработчиков к развитию проекта Talos. Также рефакторинг заставил нас лучше понять процесс тестирования и это понимание было использовано для исправления множества некорректных тестов и отказа от тестов, которые имели низкую ценность, либо были вообще бессмысленны. Таким образом, при рассмотрении вопроса о необходимости проведения рефакторинга или разработки программного продукта с нуля, следует помнить о том, что время разработки в данном случае не должно быть единственным принимаемым во внимание параметром.

Заключение

В течение последнего года мы разобрались со всеми особенностями автоматизированного процесса тестирования производительности программных продуктов компании Mozilla. Мы проанализировали устройство системы тестирования, инструментов генерации отчетов, а также статистическую обоснованность генерируемых результатов. После этого года работы мы поняли, как упростить сопровождение фреймворка Talos, его использование, настройку, тестирование с помощью него экспериментальных патчей, а также сократить количество ошибок в нем. Мы создали программный продукт Datazilla, предназначенный для работы в качестве расширяемой системы для хранения и извлечения всех наших результатов тестирования производительности с помощью фреймворка Talos и любой системы автоматизации процесса тестирования производительности, которая может появиться в будущем. Мы изменили механизмы нашего статистического анализа результатов тестирования производительности и создали систему статистически корректного определения регрессий и улучшений для каждого из изменений дерева исходного кода. Мы упростили методику использования всех этих систем и сделали их более открытыми, поэтому любой участник процесса разработки из любой точки мира может исследовать наш код и даже провести эксперимент с новыми методами статистического анализа, использовав наши данные результатов тестирования производительности. Наше постоянное стремление к исследованию данных снова и снова в каждый момент развития проекта и наше желание отбросить данные, которые оказались не достаточно важными или некорректными, помогли нам сохранить заинтересованность в развитии этого гигантского проекта. Вовлечение людей из разных команд компании Mozilla наряду с множеством сторонних разработчиков помогло нам сформулировать направление развития проекта, а также помогло с восстановлением корректности механизмов мониторинга производительности и анализа данных проектов компании Mozilla из нескольких областей, что привело к формированию культуры разработки проекта, направленной на всестороннее исследование данных и достижение максимальной производительности продукта.


  1. Https://github.com/mozilla/datazilla/blob/2c369a346fe61072e52b07791492c815fe316291/vendor/dzmetrics/ttest.py.
  2. Https://github.com/mozilla/datazilla/blob/2c369a346fe61072e52b07791492c815fe316291/vendor/dzmetrics/fdr.py.
  3. Https://github.com/mozilla/datazilla/blob/2c369a346fe61072e52b07791492c815fe316291/vendor/dzmetrics/data_smoothing.py.

Вернуться к началу статьи.