В индустрии создания спутников связи возникла необходимость в использовании разных вычислительных платформ для функционально одинаковых изделий. Разработчикам приходится адаптировать бортовые программы к новым интерфейсам и соглашениям по программированию за счет модификации исходных текстов, тестовых процедур и т.п. Рассмотрим технологию переноса бортового программного обеспечения на новые платформы, на которых основывается работа бортовых компьютеров.
Необходимость в использовании разных вычислительных платформ для функционально одинаковых изделий вызвана не столько появлением новых задач программного обеспечения, сколько экономическими (стоимость, сроки), техническими (вес, герметичность и т.п.) и даже политическими факторами (например, ограничениями стран-производителей на применение того или иного оборудования). Для разработчиков бортовых программ новая платформа означает, как правило, иной интерфейс с операционной системой и системой программирования, иную интерпретацию типов данных, а следовательно, иные соглашения по программированию, модификацию исходных текстов и тестовых процедур, регрессивное тестирование, повторную квалификацию компонентов.
Для решения этих проблем приходится привлекать значительные ресурсы, а сроки разработки значительно увеличиваются. Требуется технология, позволяющая без доработки переносить основную часть прикладного программного обеспечения служебных систем и полностью сохранять актуальность архивов тестовых процедур, что дает возможность проводить регрессивное тестирование при сопровождении бортовых программ.
Принятая в Научно-производственном объединении прикладной механики (НПО ПМ) им. М.Ф. Решетнева стратегия разработки обеспечивает переносимость бортовых программ. Это достигается за счет архитектуры расслоения и стандартизации прикладных и пользовательских интерфейсов бортовых программ и средств разработки, а также применения в качестве языка программирования сильно структурированного языка со строгой типизацией данных Модула-2. В рамках этой стратегии были предложены следующие разработки:
- в составе бортового программного обеспечения специфицирован и реализован служебный слой, предоставляющий приложениям платформно-независимый прикладной интерфейс;
- разработана методика, позволяющая на основе Модула-2 создавать заведомо переносимые бортовые программы;
- разработаны машинно-независимые диалоговый и пакетный языки для проведения и документирования процедур тестирования;
- создана типовая кросс-система программирования, реализующая кодогенерацию для базового бортового компьютера и позволяющая тестировать бортовое программное обеспечение на интерпретаторе команд этого компьютера;
- разработана методика модификации типовой кросс-системы программирования для произвольного коммерческого бортового компьютера, сохраняющая все пользовательские интерфейсы.
Представленная технология является одним из результатов сотрудничества НПО ПМ, Института систем информатики СО РАН и новосибирской компании «Эксельсиор» при создании инструментального окружения для высоконадежного программирования встроенных ЭВМ [1-3].
Архитектурная декомпозиция бортовых программ
Для поддержки управления спутником связи была определена каноническая структура бортового программного обеспечения, предполагающая его трехслойную реализацию. Третий слой — прикладные программы спутниковых систем, которые составляют до 80% объема бортового ПО. Этот слой не зависит от платформы, поскольку при его реализации используются только интерфейсы, предоставляемые вторым, абстрагирующим, слоем. Первый слой — применяемая операционная система (ядро поддержки режима реального времени и набор драйверов).
Канонический состав абстрагирующего слоя был определен после анализа потребностей нескольких поколений спутников. В нем выделены и специфицированы три составляющие:
- стандартные интерфейсы канонического ядра поддержки режима реального времени;
- стандартные интерфейсы канонического набора устройств бортового комплекса управления;
- стандартные типы канонического набора данных, используемых в процессах управления подсистемами спутника.
Строгая типизация и раздельная компиляция, принятые в языке Модула-2, позволили реализовать абстрагирующий слой в виде набора библиотек и обеспечить полнофункциональный платформно-независимый интерфейс для прикладных программ. Благодаря строгой типизации, появилась возможность достичь уровня абстракции данных, с одной стороны, максимально приближенного к понятиям проблемной области, а с другой, в максимальной степени платформно-независимого. Раздельная компиляция программ позволила стандартизовать и зафиксировать прикладной интерфейс в модулях определения, что сделало возможным повторное использование компонентов, реализующих одинаковые функции, без изменения исходного текста. Кроме всего прочего, это существенно упростило процесс управления конфигурациями.
Данный подход может применяться при проектировании и разработке любого функционального программного обеспечения для любой встроенной системы, но далеко не каждый язык программирования поддерживает его столь же естественно, как Модула-2. Этот язык гарантирует на уровне системы программирования точный перенос свойств стандартизированных типов данных и делает программы, использующие эти типы данных, независимыми от вычислительной платформы.
Адаптируемая кросс-система программирования
Кросс-система программирования на языке Модула-2 (КСП) реализует кодогенерацию для виртуального бортового компьютера с возможностью настройки на новые вычислительные платформы. КСП содержит средства тестирования и отладки, позволяющие разрабатывать бортовые программы на интерпретаторе команд базового бортового компьютера с использованием независимых от ее архитектуры языков диалогового и пакетного тестирования.
В дополнение разработаны методика и средства настройки КСП, обеспечивающие создание бортовых программ для произвольных коммерческих бортовых компьютеров с сохранением всех пользовательских интерфейсов КСП. Методика базируется на проведенной при создании КСП архитектурной декомпозиции, в результате которой в составе КСП были выделены платформно-зависимые компоненты (как в компилирующей, так и в исполняющей части) и стандартизованы их интерфейсы.
Получать исполнимый код при переходе на новую вычислительную платформу можно с помощью двух вариантов настройки КСП, предусматриваемых методикой.
Первый предполагает использование компонентов коммерческих систем программирования с языка Си, реализующих стандарт ANSI C. В таком случае кодогенерация осуществляется скрыто от программиста в два приема — путем конвертации программ на Модула-2 в программы на Си (это осуществляет реализованный в КСП конвертор) и последующей трансляции Си-программ коммерческим транслятором. При этом средства КСП обеспечивают получение всей отладочной информации, необходимой для тестирования в терминах Модула-2. Сборка проекта и получение исполнимого кода осуществляются через стандартную оболочку КСП с использованием соответствующих компонентов коммерческой системы программирования.
Второй вариант состоит в разработке новой кодогенерирующей части компилятора базовой КСП. Выбор варианта определяется сроками создания и сопровождения бортового программного обеспечения, требованиями к эффективности, безопасности и т.п.
Что же касается исполняющей части КСП, то, в соответствии с методикой, отладчик КСП разделяется на два блока:
- Исполнитель — независимая от архитектуры бортового компьютера часть отладчика КСП, реализующая диалоговый и пакетный языки тестирования и отладки;
- Интерпретатор — программный интерпретатор системы команд конкретного бортового компьютера.
Стандартизованный интерфейс между этими компонентами и используемые методики позволяют, не затрагивая Исполнитель, разработать и встроить в отладчик КСП интерпретатор команд выбранного бортового компьютера [3].
В КСП реализованы специально разработанные независимые от вычислительной платформы диалоговый и пакетный языки отладки, которые предназначены для программирования, выполнения и документирования процедур тестирования и отладки в терминах языка программирования. Язык пакетной отладки позволяет использовать те же процедуры тестирования и после переноса объекта тестирования на другую платформу. КСП функционирует в среде Windows NT/2000 на платформе Intel.
В дополнение к традиционным средствам КСП разработана платформно-независимая система измерений, опирающаяся на специфику Модула-2. Она позволяет не только вычислять достигнутый уровень полноты тестирования бортовой программы по критериям С1 и С, но и проводить профилирование программы и метрические измерения ее исходных текстов, получая оценку уровня соответствия компонента требованиям архитектурного проекта. Эта возможность достигается только благодаря использованию сильно структурированного языка программирования, такого как Модула-2. Она обеспечивает полный контроль над процессом выполнения программы во время тестирования и делает тестовые процедуры (что особенно важно при пакетном тестировании) независимыми от локальных изменений исходного кода тестируемой программы.
Практика переноса
Для решения задачи переноса бортовых программ создана технология программирования и тестирования, позволяющая не только сохранять в новых разработках накопленный программный «задел», но и повторно использовать процедуры тестирования. В результате, сокращаются сроки и трудоемкость разработки бортового программного обеспечения для новых платформ и упрощается сопровождение.
Эта технология позволяет задолго до изготовления бортового компьютера создать необходимое число рабочих мест программиста. Причем можно приступать к проектированию и автономному тестированию новых программ не дожидаясь настройки КСП на новый бортовой компьютер (т.е. до встраивания нового интерпретатора), — с помощью имеющейся КСП для базового бортового компьютера. В таких случаях после появления нового интерпретатора необходимо одноразовое автоматическое повторение созданных процедур тестирования.
Возможность автоматической оценки полноты тестового покрытия и оценки характеристик компонентов бортового ПО обеспечивает требуемый уровень их качества.
Технология была опробована в весьма сложной ситуации. Бортовое программное обеспечение для 32-разрядного отечественного бортового компьютера, характеризующееся обратной нумерацией байт в слове, адресацией каждого байта и функционированием в операционной системе собственной разработки, было перенесено на 16-разрядную вычислительную платформу с прямой нумерацией байт в слове, адресацией только по словам и универсальной операционной системой.
В декабре 2003 года был успешно запущен навигационный спутник нового поколения «ГЛОНАСС-М», созданный в НПО ПМ. Программное обеспечение бортового комплекса управления этим спутником впервые разрабатывалось с использованием языка высокого уровня Модула-2 согласно разработанной технологии переноса бортового ПО. Процесс переноса бортового программного обеспечения на другую вычислительную платформу прошел успешно и при создании программного обеспечения спутника связи нового поколения «Экспресс-АМ». На спутниках используются принципиально разные вычислительные платформы, и исполнимый код также получали разными методами — с помощью прямой трансляции в код бортового компьютера и через скрытую для разработчика бортовых программ конвертацию на язык Си.
Литература
- Поттосин И.В. Система СОКРАТ: окружение программирования для встроенных ЭВМ. Препринт ИСИ СО РАН № 11. — Новосибирск, 1992.
- Колташев А.А. Среда программирования для встроенных ЭВМ: система требований и тенденции ее развития // Сборник научных трудов «Среда программирования: методы и инструменты» под ред. И.В. Поттосина. ИСИ СО РАН. — Новосибирск, 1992.
- Колташев А.А. Машинно-независимая технология разработки бортового программного обеспечения // АКС-2001: Материалы Международной научно-практической конференции. САА. — Ч. II. — Красноярск, 2001.
Андрей Колташев (216kaa@npopm.ru) — начальник сектора системного программирования НПО ПМ им. М.Ф. Решетнева (Железногорск, Красноярский край).
Научно-производственное объединение прикладной механики им. М.Ф. Решетнева — ведущий отечественный разработчик спутников связи и ретрансляции. В конце 70-х годов НПО ПМ приступило к проектированию спутников связи с бортовыми комплексами управления на базе бортовых компьютеров с универсальной системой команд. Первый спутник с бортовым компьютером, универсальной операционной системой собственной разработки и прикладным бортовым ПО, обеспечивающим полнофункциональное оперативное и автономное управление космическим аппаратом, был запущен в 1982 году. С тех пор использование бортовых компьютеров на спутниках стало традиционным, а вопросы создания и сопровождения бортовых программ, надежной мобильной технологической поддержки этих процессов, гарантирования качества бортовых программ стали приоритетными для НПО ПМ.