Библиотека сайта rus-linux.net
Фреймворк Talos
Глава 8 из книги "Производительность приложений с открытым исходным кодом".
Оригинал: Talos
Авторы: Clint Talbert, Joel Maher
Перевод: А.Панин
Повторная разработка системы против рефакторинга
В ходе нашего исследования, показавшего необходимость изменения фреймворка Talos, мы выяснили, что нам придется внести в него несколько кардинальных изменений. Однако, все предыдущие изменения фреймворка Talos сотрудниками компании Mozilla всегда сдерживались опасениями "нарушения порядка значений". Большое количество составных частей фреймворка Talos создавалось много лет назад добросовестными разработчиками, работа которых была актуальна в то время, но в условиях отсутствия документации или описания принципов работы цепочки этих инструментов, описанные части фреймворка превратились в набор кода, который непросто тестировать, модифицировать или понимать.
Принимая во внимание наше опасение по поводу необходимости работы с темными материями недокументированной кодовой базы, вместе с проблемой, заключающейся в необходимости проверки результатов наших новых измерений с помощью результатов старых измерений, мы начали рефакторинг с целью непосредственной модификации фреймворка Talos и сервера графического представления. Однако, очень скоро стало ясно, что без всеобъемлющего повторного проектирования схемы базы данных сервер графического представления никогда не сможет принять полный набор необработанных данных от системы выполнения тестов производительности. В дополнение к этому, у нас не было четкого метода применения недавно сформированных на основе исследований статистических методов в рамках подсистемы сервера графического представления. Исходя из этого, мы приняли решение о повторной разработке сервера графического представления с нуля и создания проекта с названием Datazilla. Это решение не далось нам легко, так как сторонние проекты с открытым исходным кодом уже создали форки кодовой базы сервера графического представления для применения в составе своих систем автоматизации тестирования производительности. Для замены системы выполнения тестов фреймворка Talos мы также начали разработку с нуля. У нас даже был рабочий прототип, который позволял выполнять простой тест примерно из 2000 строк кода или меньшего их количества.
В процессе повторной разработки сервера графического представления с нуля, мы беспокоились о высоких темпах разработки прототипа нашей новой системы выполнения тестов фреймворка Talos. Наше опасение заключалось в том, что мы можем потерять возможность получать значения "старым способом", поэтому нам придется сравнивать новый способ тестирования со старым. Исходя из этого, мы отказались от нашего прототипа и начали модифицировать саму систему выполнения тестов Talos по частям для превращения ее в генератор данных, оставляя существующие фрагменты кода, которые выполняли расчеты средних значений для передачи их старой версии сервера графического представления. Это решение было чрезвычайно неверным. Нам нужно было разработать отдельную систему выполнения тестов, после чего сравнивать новую версию системы со старой.
Попытка поддержки изначальной модели потоков данных и нового метода передачи данных измерений параметров для каждой из страниц выявила сложности. С другой стороны, позитивный эффект заключается в том, что это обстоятельство заставило нас реструктуризовать большую часть внутреннего кода фреймворка и упорядочить достаточно большое количество вещей. Но все же, нам пришлось выполнять всю описанную работу поэтапно с поддержкой рабочего кода автоматизации, что несколько раз доставляло головную боль при работе с нашими циклами непрерывной интеграции.
Гораздо лучшим решением могла оказаться разработка как новой версии фреймворка Talos, так и его системы обработки отчетов Datazilla в параллельном режиме с нуля без использования устаревшего кода. Это особенно актуально при разговоре о тестируемой системе, так как было бы гораздо проще тестировать новую систему без попыток интеграции кода для генерации необходимых в ходе разработки данных, которые впоследствии передавались системе Datazilla в условиях использовании системы автоматизации. Нам казалось, что эта работа была необходимой, так как у нас будет возможность генерации тестовых данных в ходе реальных сборок и в условиях реальной нагрузки для проверки корректности масштабирования системы с разработанной нами архитектурой. В конце концов ценность получаемых с помощью системы данных сборки не соответствовала сложности модификации системы, предназначенной для промышленного использования. Если бы мы знали в то время, что мы приступили к работе над проектом с годичным циклом разработки вместо запланированного нами полугодичного, мы бы начали разработку фреймворка Talos и фреймворка обработки результатов с нуля.
Продолжение статьи: Формирование культуры разработки производительных продуктов.