Проект OpenJDK представляет собой свободную эталонную реализацию платформы Java SE с открытым исходным кодом. Основная разработка проекта ведется для ’’текущей” версии 1JDK, но дополнительно требуется поддерживать и предыдущие версии платформы для стабильности и безопасности проектов, их использующих. Для этой цели существуют так называемые Update Releases - выпуски обновлений, в которых исправляются ошибки и закрываются уязвимости предшествующих версий OpenJDK.
Но существует проблема: несмотря на хорошо выстроенный и документированный процесс разработки этих выпусков, в нем еще сохраняются части, которые нужно делать вручную [9].
Например, некоторые исправления из основного репозитория переносятся в стабильные релизы ”в лоб”: те же изменения делаются в тех же файлах. Лучше всего это работает с последними версиями JDK, но чем старше поддерживаемый выпуск, тем больше его код будет расходиться с основным репозиторием. Соответственно, растёт вероятность, что исправление потребует больше ручной работы и тестирования, нахождения зависимости переносимого изменения от какого-либо из предыдущих, не интегрированных в целевую версию. Автоматизация этих действий позволила бы ускорить добавление исправлений и упростить процесс внесения изменений для сообщества разработчиков.
Таким образом, данная работа посвящена разработке методов и инструментов для автоматизации частей процесса разработки выпусков обновлений проекта OpenJDK, в частности, процесса переноса исправлений из текущей версии в предшествующие.
В ходе данной работы были получены следующие результаты.
• Проведен обзор процесса разработки OpenJDK.
— Рассмотрен подпроект OpenJDK Updates, с которым связана большая часть работы.
— Выделены области, требующие автоматизации.
— Рассмотрены аналоги нашей системы.
• Реализованы методы для автоматизации нахождения цепочек зависимостей и решения конфликтов слияния.
— Инструменты для нахождения чисто применяемой цепочки зависимостей.
— Инструменты для нахождения цепочки зависимостей с дополнительными изменениями.
— Инструменты, использующие собранные данные и пользовательский ввод.
• Проведено тестирование на специально собранных данных.