НИЖЕГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ им.Н.И.ЛОБАЧЕВСКОГО НАУЧНО-ИССЛЕДОВАТЕЛЬСКИЙ ФИЗИКО-ТЕХНИЧЕСКИЙ ИНСТИТУТ ЛАБОРАТОРИЯ “АППАРАТНО-ПРОГРАММНЫХ СИСТЕМ” Особенности практической реализации процесса интеграции при разработке сложных аппаратно-программных комплексов Докладчик: Кузьмина Ирина, НИФТИ ННГУ Комплекс управления проверочной аппаратурой НИФТИ ННГУ 2 Схема зависимости программных компонентов adl ADL Cdisp Manager Imitator CSPDI Dselector Cresearch Creference Convdistr Tibbo VN6204 Generator Converter VN1404 Dispatcher vxi VXI НИФТИ ННГУ 3 Недостатки процесса разработки программного обеспечения (ПО) отсутствие этапа интеграции программных компонентов при разработке; отсутствие согласования размещенных в системе версионного контроля исходных кодов и бинарных файлов; высокий риск потери возможности разработки компонента в случае болезни или увольнения разработчика; проблемы взаимодействия с аппаратурой, возникающие при отладке комплекса. НИФТИ ННГУ 4 Схема процесса разработки ПО РАЗРАБОТЧИК N РАЗРАБОТЧИК 2 РАЗРАБОТЧИК 1 Setup.exe Репозиторий hello.c \main Setup.exe \main _pvt *.exe *.dll \rel3 _enhance Private branch ИНТЕГРАТОР Integration branch *.exe *.dll НИФТИ ННГУ Создание дистрибутива (Setup.exe) 5 Выделение процесса интеграции Синхронизация интерфейсов на программных компонентов этапе сборки весь исходный код хранится в версионномкомплекса хранилище и компилируется из командной строки на сборочном сервере при сборке комплекса по требованию; удовлетворение зависимостей на сборочном сервере обеспечивается настройками среды разработки на бинарные файлы зависимых проектов, Сборка а не на бинарники установленного комплекса комплекса предыдущей версии; любой версии после компиляции кода на сборочном сервере из полученных исполняемых файлов и библиотек собирается дистрибутив, а файлам исходного кода присваивается метка, определяющая текущую версию 6 комплекса. Схема процесса разработки ПО РАЗРАБОТЧИК N РАЗРАБОТЧИК 2 E-mail РАЗРАБОТЧИК 1 Setup.exe Репозиторий hello.c \main Setup.exe \main _pvt *.exe Исходный *.dll код \rel3 _enhance Private branch ИНТЕГРАТОР Integration branch *.exe Исходный *.dll код НИФТИ ННГУ Компиляция Создание Создание дистрибутива дистрибутива (Setup.exe) (Setup.exe) 7 Анализ результатов процесса интеграции + снизились риски, связанные с человеческим фактором; + сократились временные затраты как процесса разработки ПО, так и процессов тестирования программной части и всего комплекса в целом. НИФТИ ННГУ 8 Анализ результатов процесса интеграции - «волшебная машина»; - невозможность проведения модульного тестирования на этапе сборки комплекса вследствие зависимости тестов от аппаратуры; - отсутствие полностью автоматической сборки (без участия человека). - тесная взаимосвязь программных компонентов и, как следствие, необходимость постоянного согласования интерфейсов; НИФТИ ННГУ 9 VXI Manager CSPDI Tibbo Manager ADL CSPDI Ошибка Cresearch Комплекс Ошибка Dselector интеграции Cdisp VN6204 VN6204 Ошибка Creference интеграции Condistr VN1404 Imitator Creference Dselector НИФТИ ННГУ Cdisp Tibbo интеграции Ошибка интеграции ADL Cresearch VXI Condistr VN1404 Imitator 10 разработка \ интеграция Ошибка интеграции Ошибка интеграции Ошибка интеграции РАЗРАБОТЧИК N РАЗРАБОТЧИК 2 E-mail РАЗРАБОТЧИК 1 Репозиторий hello.c \main Setup.exe \main _pvt *.exe Исходный код \rel3 _enhance Private branch ИНТЕГРАТОР *.dll Integration branch *.exe Исходный код *.dll разработка \ интеграция разработка \ интеграция Setup.exe Компиляция Создание дистрибутива (Setup.exe) разработка \ интеграция НИФТИ ННГУ 11 Ошибка интеграции Шаги развития процесса интеграции УСТРАНЕНИЕ «ВОЛШЕБНОЙ МАШИНЫ»: Компонент А бинарии исх. код (.lib) (.proj) использовать только программные продукты, размещенные в версионном хранилище; Компонент B создать документ, включающий описание программных (.proj) продуктов; перейти от использования ссылок на исполняемые файлы компонентов к ссылкам непосредственно на программный проект; разместить сторонние библиотеки в общей структуре системы версионного контроля и настроить ссылки на них в каждом проекте. исх. код НИФТИ ННГУ бинарии (.lib) 12 Шаги развития процесса интеграции РАЗДЕЛЕНИЕ МОДУЛЬНОГО И ФУНКЦИОНАЛЬНОГО ТЕСТИРОВАНИЯ: модульные тесты не зависят от аппаратуры; тестируют окружение (наличие библиотек, конфигурационных файлов); тестируют алгоритмы. НИФТИ ННГУ 13 Окружение *.dll *.xml *.config Аппаратура Модульные тесты Алгоритмы НИФТИ ННГУ 14 Шаги развития процесса интеграции РАЗДЕЛЕНИЕ ПРОЦЕССА ИНТЕГРАЦИИ НА ЭТАПЫ: интеграция программных компонентов (выявление конфликтов взаимодействия зависимых интерфейсов); сборка комплекса. НИФТИ ННГУ 15 Компонент B Компонент C Компонент А Компонент D Разработчик 2 Разработчик 3 Разработчик N Сборка компонента B Разработчик 1 • Компиляция Сборка компонента А Репозиторий • Модульное тестирование • Компиляция Сборка компонента C • Инспекция исходного кода hello.c \main • Модульное тестирование • Компиляция Сборка компонента • ИнспекцияDисходного кода • Модульное тестирование • Компиляция Ошибка • Инспекция исходного кода \main _pvt \rel3_enhance Integration branch Private branch интеграции • E-mail разработчикам компонентов A и D НИФТИ ННГУ Сервер 16 сборки Шаги развития процесса интеграции СОЗДАНИЕ ПЛАНА КОНФИГУРАЦИОННОГО УПРАВЛЕНИЯ, РЕГЛАМЕНТИРУЮЩЕГО ВСЕ ОПИСАННЫЕ ВЫШЕ ПРОЦЕДУРЫ. Конфигурации включают : стандарты наименования; соглашения о едином стиле оформления исходного кода, комментариев, документов; порядок разработки, сборки и тестирования; распределение ролей в проекте. НИФТИ ННГУ 17 Шаги развития процесса интеграции ОРГАНИЗАЦИЯ АВТОМАТИЧЕСКОЙ НЕПРЕРЫВНОЙ СБОРКИ ПРОГРАММНЫХ КОМПОНЕНТОВ И КОМПЛЕКСА В ЦЕЛОМ. Сервер сборки компиляция исходных кодов; модульное тестирование (NUnit, CUnit, CppUnit ); инспекция исходного кода (NDepend, CppDepend); уведомление разработчиков о результатах сборки. НИФТИ ННГУ 18 OC Windows XP CruiseControl.Net ClearCase LT Сервер сборки OC QNX 6.3 CruiseControl ClearCase LT Сервер сборки НИФТИ ННГУ 19 Схема процесса интеграции ПО после автоматизации РАЗРАБОТЧИК N РАЗРАБОТЧИК 2 РАЗРАБОТЧИК 1 E-mail Сервер сборки “build-windows “ Windows XP Исходный код CruiseControl.Net ClearCase LT Putty Исходный код • Компиляция • Тестирование (модул.) • Инспекция кода Putty Сервер сборки “build-qnx” QNX 6.3 • Удаленный запуск Репозиторий hello.c \main \main _pvt \rel3 _enhance Integration branch Private branch сборки на “build-qnx” • E-mail рассылка • Создание дистрибутива (Setup.exe) Setup.exe Setup.qpr Putty • Компиляция • Тестирование (модул.) • Создание дистрибутива (Setup.qpr) Setup.qpr 20 Выводы Представленный в данной работе комплекс мер позволил сократить временные затраты, необходимые на создание очередной версии ПО АПК, с нескольких дней до нескольких часов Разработанная схема процесса интеграции является универсальной и может быть применена в проектах, независимо от операционной системы, на которой ведётся разработка ПО Для успешного внедрения непрерывной интеграции необходимо, чтобы все процедуры процесса были хорошо документированы и донесены до сведения разработчиков до начала этапа разработки ПО НИФТИ ННГУ 21