Как наши инженеры гарантируют качество Axiom JDK
Мы уделяем самое пристальное внимание качеству, безопасности и эффективности программных продуктов. Именно эти характеристики больше всего беспокоят разработчиков, которые используют в своих решениях OpenJDK. Но не переживайте, выбирать только две из трех не придется. Эта статья посвящена основным составляющим контроля качества (QC, quality control) Axiom JDK. Наша цель — объяснить, как мы находим баланс в треугольнике «качество–безопасность–эффективность» при разработке лучшей среды исполнения Java. Убедитесь в этом сами! По кнопке ниже вам откроются все преимущества Axiom JDK. Там же вы сможете бесплатно скачать дистрибутивы любой версии.
Цикл релиза
Прежде чем мы раскроем все тонкости, давайте разберемся, зачем в принципе нужен контроль качества. Критические обновления OpenJDK (CPU, Critical Patch Updates) с исправлениями уязвимостей, выпускаются согласно строгому графику четыре раза в год. И это не просто «какие-то мелкие патчи». Например, в прошлом году было устранено или бэкпортировано в JDK 8/11 в общей сумме 1957 ошибок и 95 известных уязвимостей из списка CVE. Вместе с тем раз в полгода выходят крупные релизы. В добавок ко всему поставщики JDK сами исправляют баги в клиентских сборках до или после очередного крупного релиза.
Итак, стало понятно общее состояние дел в индустрии OpenJDK. Но как же происходит выпуск версий?
Как видите, в этом процессе несложно запутаться. К тому же, в одном релизе задействовано много разных организаций. Чтобы в конечном счете согласовать дистрибутивы Axiom JDK c кодом OpenJDK и гарантировать их высокое качество, QC нам просто необходим.
Критерии качества
В 2020 году Java исполнилось 25 лет. В то время как множество технологий появилось и благополучно кануло в лету, этот язык продолжает развиваться! И мы можем похвастаться тем, что Axiom JDK отвечает высоким стандартам, закрепившимся в отрасли за четверть века. Рассмотрим основные критерии для качественного релиза JDK.
Комплект технологической совместимости TCK (Technology Compatibility Kit) — это набор тестов от компании Oracle, который позволяет подтвердить соответствие Java-рантайма спецификациям Java SE. TCK для контроля качества как швейцарский нож, в нем есть почти все необходимые инструменты. Благодаря нему можно подтвердить высокую производительность Java-платформы и то, что она не навредит вашим приложениям. Все сборки Axiom JDK прошли тесты TCK и полностью ратифицированы Java Community Process. Количество тестов в наборах JCK (Java Compatibility Kits) для последних LTS-версий и текущей JDK 15:
- JCK-8c: более 126 тыс.
- JCK-11: более 139 тыс.
- JCK-15: более 152 тыс.
Одним из распространенных подходов к анализу секьюрности является так называемая проверка концепции (PoC, proof-of-concept). PoC эксплойты — это неопасные атаки, направленные на выявление слабых мест в ПО. В нашем случае команда инженеров разрабатывает небольшой кусок PoC-кода для проверки конкретных уязвимостей в OpenJDK. Обнаружив дефект, мы предоставляем исправление. Так происходит перед каждым релизом JDK.
Еще одна компонента контроля качества в Axiom JDK — функциональные тесты OpenJDK с инструментами Java Regression Test Harness (jtreg). У выражения test harness нет устоявшегося перевода на русский, чаще всего встречаются варианты «тестовая оснастка» или «обвязка». Она используется для функционального и регрессионного тестирования по стандартам Java SE и связана исключительно с TCK. Перед выпуском новой версии Java каждая сборка Axiom JDK проходит от 11 до 34 тыс. регрессионных тестов, включая hotspot, jdk, langtools, nashorn и jcstress в отдельных случаях.
Помимо таких регрессионных тестов мы также пользуемся средствами крупнейших фреймворков Spring и Apache Tomcat. В рамках последней серии проверок безопасности инженеры БЕЛЛСОФТ провели более 21 тыс. тестов от Spring и 40 тыс. от Tomcat (в том числе с соединителями APR/Tomcat Native) и не выявили никаких регрессий.
Не менее важный шаг — бенчмаркинг, или анализ по контрольным параметрам. Этот процесс делится на два этапа. Сначала необходимо оценить базовый функционал Axiom JDK по результатам тестов SPECjbb и SPECjvm, признанных эталонами Java-индустрии. Затем наступает черед микробенчмаров, разработанных сообществом OpenJDK и встроенных непосредственно в его код. С помощью Java Microbenchmark Harness (JMH) измеряется производительность определенных элементов рантайма.
Как мы укладываемся в сроки?
Иногда работа над релизом начинается за год до выхода. Так мы можем не торопить события, что тоже влияет на качество продукта.
Основные факторы, благодаря которым QC проходит без задержек:
- вносим все тестовые патчи в основную ветку JDK сразу после разработки;
- распределяем задачи по каждому релизу между участниками OpenJDK Vulnerability Group . Эта рабочая группа объединяет ведущих инженеров таких крупных вендоров, как Oracle, SAP, Amazon и Red Hat. Благодаря общей согласованности наша команда может четко обозначить дедлайны;
- тестируем дистрибутив на всех платформах с исправлениями безопасности и без;
- проводим финальные тесты перед релизом: они не должны выявить новые ошибки, а лишь подтвердить, что сборки готовы к выпуску;
- проверяем, что бинарные файлы, которые хранятся в сетевой инфраструктуре CDN, не повредились при передаче (методом контрольных сумм).
Роль CI/CD-пайплайнов
Итак, мы выяснили, что одна сборка Java-рантайма проходит довольно много тестов. И все же ничто не сравнится с тем, сколько бинарных файлов необходимо проверить перед релизом — это действительно огромное число.
- 12 платформ (Windows x86 32/64 bit, macOS, Linux x86 32/64 bit, Alpine Linux 64 bit/musl, Linux ARM 32/64 bit, Solaris Sparc/x86)
- 3 JVM, виртуальные машины Java (server, client, minimal)
- JDK и JRE
- 7 типов установщиков: msi, pkg, dmg, deb, rpm, zip, tar.gz
- 3 варианта: lite, standard, full
Перемножим значения, добавим тысячи командных строк Java и JVM, и мы поймем, что вручную протестировать все просто невозможно.
Инструкции помогают организовать работу по минутам. Однако дисциплина, даже самая строгая, не сравнится с возможностями автоматизации. И здесь нам пригодятся системы непрерывной интеграции и доставки (CI/CD).
Внедрить CI/CD-пайплайн можно на основе технологии Jenkins. К ней подключаются API, программные библиотеки и системы сборки кода. В Jenkins нет собственного функционала. Но стоит нагрузить плагины, и она становится очень мощным инструментом для выстраивания конвейеров — цепочек событий или заданий.
Автоматизация сборки и тестирования Axiom JDK базируется на Jenkins и происходит на узлах. Это компьютеры с различными микропроцессорными архитектурами, на которых установлены разные операционные системы. Они включаются по необходимости, так что одновременно задействованы далеко не все. В течение года Axiom JDK поддерживает работу только узлов, необходимых для разработки, исправления багов в своем коде и клиентском ПО.
При пиковой нагрузке во время релиза мы подключаем дополнительные мощности. Целиком CI-ферма с облачными экземплярами насчитывает 400–1200 узлов.
CI/CD-пайплайны помогают проводить контроль качества Axiom JDK четко в установленные сроки.
Завершающие шаги
Все, о чем мы рассказали выше, происходит за несколько недель до релиза. Главная задача на каждом этапе — подготовиться ко дню релиза. Он должен пройти идеально. За сутки до выхода новой версии наши инженеры подготавливают комплекты Axiom JDK, пишут release notes (описания изменений между выпусками) и отправляют сборки в сети доставки содержимого (CDN) для удобства пользователей.
Дополнительные патчи для клиентов
Без участия коммьюнити любые open source продукты, в том числе JDK, развивались бы несравнимо медленнее. Axiom JDK входит в пятерку крупнейших контрибьюторов OpenJDK по числу исправлений и предложений по улучшению кода. Однако добились мы таких высот только благодаря пользователям Axiom JDK.
Предоставляя нашим клиентам ранние патчи и бинарные сборки на «тест-драйв», мы гораздо быстрее находим решения известных (а подчас и скрытых) проблем. А чтобы еще ускорить этот процесс, отправляем им фиксы функциональных дефектов еще до выхода новой версии.
Мы показали, каким образом Axiom JDK отвечает всем стандартам качества Java-рантайма. Хотите раньше всех получать доступ к обновлениям и критическим исправлениям Java? Свяжитесь с командой Axiom JDK. Мы изучим ваш уникальный случай и предложим лучшее решение.