Опыт автоматизации процессов проектирования,
тестирования и документирования программного обеспечения технических систем
реального времени
А.М. Денисов,
студ.,
МИФИ, г. Москва,
В.В. Макаров,
с.н.с, к.т.н., доц., makarov@ipu.ru,
ИПУ РАН, г. Москва
Рассматривается опыт
применения семейства программных продуктов IBM Rational Rhapsody, ориентированных создание программного обеспечения
для рынка систем реального времени и встраиваемых систем. Это семейство
продуктов на базе унифицированного языка моделирования (спецификация UML
2.2) реализует подход проектирования на основе моделей (MDD).
Исследуя эту систему на тестовых примерах, моделях секундомера, посудомоечной
машины, радиоприёмника, мы получили практический опыт по генерации законченных
приложений на языках C++ и Java.
Весьма любопытным оказался механизм анимации моделей, когда при генерации кода
можно указать, что необходимо создать анимированную версию приложения. В этом
случае в поведенческий код, реализующий диаграммы конечных автоматов и
диаграммы последовательностей, вставляются соответствующие инструкции. При
выполнении такой программы среда разработки отражает изменение состояния
приложения на соответствующей диаграмме.
Experience of application of software product family IBM Rational
Rhapsody, focused creation of the software for the market of real time systems
and built in systems is considered. This product family on the basis of the
unified modeling language (specification UML 2.2) realizes the approach of
model driven development (MDD). Researching this system on test examples,
models of a stop watch, a dishwasher, the radio receiver, we have received
practical experience on generation of the completed applications in C ++ and
Java languages. Rather curious there was a mechanism of model animation when at
code generation it is possible to specify that it is necessary to create the
animated version of the application. In this case in the behavioral code
realizing of finite state machine (FSM) diagrams and the diagram of sequences,
corresponding instructions are inserted. The development framework reflects, at
performance of the program, change of a condition of the application in the
corresponding diagram.
Введение
За
рубежом наблюдается широкое применение концепции разработки программного
обеспечения по управляемым моделям (Model Driven Development – MDD) с
использованием нотации унифицированного языка моделирования UML и методов
объектно-ориентированного программирования [1,2]. Такой интерес к концепции MDD,
вызван тем, что процесс разработки на основе проектной документации не способен
более обеспечить предсказуемое создание ПО для встраиваемых устройств и
своевременный вывод на рынок новых продуктов.
Пакет
Rhapsody является визуальной средой разработки приложений реального времени для
встраиваемых систем. В основу положена концепция разработки управляемой моделью
– MDD. Rhapsody решает глобальные задачи разработки ПО. Основная - это свести
этапы анализа, проектирования, кодирования и тестирования ПО в один
технологический процесс на основе модели проектируемой системы. Отсюда и
название технологии. На этапе анализа образ модели зарождается, к этапу
тестирования модель принимает окончательную форму. Все участники разработки:
аналитик, проектировщик, кодировщик и тестер работают с единой
документированной моделью, это облегчает их взаимодействие, снижает количество
ошибок, автоматизирует кодирование, ускоряет тестирование, повышает общую
производительность труда.
Стоит
особо отметить наличие в пакете Rhapsody автоматического тестового
генератора для полученного исходного кода – ATG(Automatic Test Generator) и подсистемы генерации документации для
разрабатываемого ПО (ReporterPlus) по различным шаблонам, в
том числе и отвечающей стандартам. Функционирование всех названых компонентов
было проверено на моделях ряда устройств [3].
Разработка приложений с генерацией кода на Java
В
среде разработки Rational Rhapsody (использовались версии 7.1 и 7.5.1) были
реализованы модели таких технических устройства, как секундомер и
радиоприемник. При установке пакета Rhapsody требуется, чтобы в системе была
установлена среда для визуальной разработки ПО на языке Java – Eclipse или
NetBeans. Устанавливая пакет Rhapsody,
можно выбрать лишь часть необходимых компонентов вместо полной установки.
После
установки компилятора необходимо прописать путь к нему в системной переменной
Path. Также необходимо подключить библиотеки Rhapsody, без которых невозможно
запустить никакое приложение, созданное в нем. Для подключения библиотек надо в
операционной системе изменить системную переменную Classpath, ее содержимое
надо пополнить путями к библиотекам Rhapsody.
В
процессе разработки и анализа модели секундомера были выявлены три класса, для
которых построена диаграмма классов. В процессе проектирования модели
происходит автоматическое генерирование исходного кода. Так при добавлении
нового состояния в диаграмму состояний автоматически система Rhapsody
производит редактирование исходного кода. При удалении какого-либо состояния
также производится автоматическое редактирование исходного кода.
В
Rhapsody можно редактировать вручную сгенерированный код. Например, можно
изменить описание какого-либо класса в исходном коде. Те изменения, которые были
произведены в исходном коде, автоматически будут отражены на самой модели.
Однако, в таком направлении изменения не всегда возможны.
В
своем арсенале Rhapsody имеет так называемый «Активный редактор кода». С
его помощью можно быстро находить участки сгенерированного кода,
соответствующие тому или иному элементу модели. Нажатием на какую-либо связь в
диаграмме классов в активном редакторе кода сразу отображается часть кода, где
описывается эта связь. При нажатии на какой-либо метод из обозревателя модели
активный редактор кода автоматически отображает реализацию выбранного метода.
Здесь же, в исходном коде, можно отредактировать реализацию этого метода.
Соответствующие изменения происходят в свойствах метода, если открыть его через
модель. Соответственно, можно насчитать уже два метода, с помощью которых можно
добавить реализацию для метода класса. Третьим способом является использование
блок-схем. Блок-схема это специальная диаграмма для описания алгоритмов и
процессов. При создании блок-схемы для выбранного метода происходит
генерирование соответствующего кода, который мы можем видеть в активном
редакторе кода. По результатам работы выяснилось, что в Rhapsody in Java данная функция блок-схемы
не производит генерацию кода, в отличие от Rhapsody in C++.
В Rhapsody имеется упомянутый выше
«Обозреватель модели». Обозреватель модели – это часть рабочего пространства Rhapsody,
по умолчанию отображающаяся в левой части экрана. Обозреватель модели
структурировано содержит все компоненты разрабатываемой модели: диаграммы,
классы, пакеты, соответствующие классам атрибуты и методы и т.п.
В
дальнейшем, в процессе разработки модели секундомера, происходит усложнение
модели и, соответственно, требуются средства для ее проверки. Для этого в Rhapsody
предусмотрено исполнение и отладка на уровне модели. Для того чтобы осуществить
исполнение и отладку на уровне модели, необходимо создать новую конфигурацию,
использующую режим анимации. Используя такую конфигурацию, одним нажатием
кнопки происходит генерация, компиляция и запуск проекта на текущем этапе
разработки модели. Если компиляция и запуск проходят успешно, то теперь можно
пошагово проследить за работой модели. Например, открыть диаграмму состояний
для какого-либо класса и проследить за последовательностью переходов. В этом
режиме можно наблюдать состояния всех переменных, всех экземпляров классов.
Также можно проследить за состоянием всех диаграмм последовательностей и
сохранить анимированные диаграммы последовательности. Для диаграмм состояний
можно установить точки останова. После установки breakpoint на выбранное состояние во
время работы системы будет происходить остановка на нужном нам состоянии.
В
процессе разработки секундомера был построен элементарный веб-интерфейс. Этот
интерфейс крайне простого исполнения, представляющий собой несколько кнопок в
интернет-браузере, однако для данной модели его было достаточно.
Разработанная
модель простого секундомера включает в себя 4 класса, 2 диаграммы классов, 2
диаграммы состояний, 2 диаграммы последовательностей, простой веб-интерфейс.
При относительной простоте модели, наличию нескольких диаграмм объем
сгенерированного кода имеет внушительные размеры – 2900 строк. Очевидно, что
код очень избыточен.
Следующая
модель технической системы реального времени – модель радиоприемника (Radio),
которая реализовывалась на базе RTSJ (спецификация Java
реального времени).
Основными
были следующие задачи:
В
качестве исходных данных имелось описание модели устройства и описание
прототипа устройства Radio. В процессе разработки ПО
были пройдены все основные этапы разработки:
·
определение требований к системе;
·
проектирование;
·
кодирование;
·
тестирование и отладка.
Этап
кодирования в данном случае можно объединить с этапом проектирования, т.к.
кодирование выполнялось только для описания основных методов классов.
Рассмотрим определение и создание классов, диаграмм. Создание проекта
начинается с определения требований к системе. Соответственно, была построена
диаграмма прецедентов «Use case diagram»
(рис.1). Пользователь может:
1)производить
настройку вручную или автоматически (Manual tune и Automatic tune);
2)сохранять
частоты (Save frequency);
3)выбирать
диапазон частот (Select waveband);
4)выбирать
сохраненные частоты (Recall frequency);
Прецедент
«Tune to frequency» связан «обобщением» с
прецедентами «Manual tune», «Automatic tune» и «Recall frequency»
(«Tune to frequency»-предок).
Прецеденты-потомки используют и дополняют «Tune to frequency» (настройку на частоту).
После
построения диаграммы прецедентов этап определения функциональных требований к
системе закончен. Переходим к этапу проектирования структуры системы.
В
данной системе были выделены следующие классы: «Waveband», «Radio»,
«Frequency», «Tuner» , «Display». Первые 3 класса отвечают за программную часть
системы, а последние 2 для реализации аппаратной части системы и
пользовательского интерфейса.
Класс Radio здесь является композитным классом,
включающим экземпляры классов Waveband и Frequency. Каждая часть композитного
класса (Radio.theFrequency:Frequency и Radio.theWaveband:Waveband) изображается
с числом в верхнем левом углу, обозначающее число входящих экземпляров этого
класса в класс Radio. В данном случае, Radio имеет одну собственную частоту и 4
диапазона волн. Radio связано с theWaveband отношением агрегирования. Это
позволяет Radio указывать на один уникальный экземпляр Waveband
посредством «itsCurrentWaveband» как на текущий диапазон волн (Waveband).
рис.1 «Use case diagram» - диаграмма прецедентов
Ниже
изображен класс Waveband,он тоже является композитным классом. Этот класс
включает 5 экземпляров класса Frequency. Здесь так же используется
отношение агрегирования, чтобы связать Waveband с одним индивидуальным
экземпляром Frequency (одной частотой), которая будет являться текущей (itsCurrentFrequency).
рис.2 «Class diagram» - диаграммы классов Radio и Waveband
Одновременно
с созданием классов и построением диаграммы классов Radio производилось описание
каждого класса, и реализация всех методов классов. Следующим этапом разработки
являлось определение работы центрального класса системы «Radio»,
соответственно для него была построена диаграмма состояний. Затем необходимо
было произвести описание прецедентов нашей первой диаграммы. Было построено
несколько диаграмм последовательности, и для каждого прецедента была поставлена
в соответствие своя диаграмма.
Следующим этапом разработки
является тестирование. Необходимо было работать с автоматическим генератором
тестов Rational Rhapsody - ATG (Automatic Test Generator). «Открытием» для нас была ситуация, когда мы
обнаружили, что ATG не поддерживает язык программирования Java,
хотя в рекламных материалах, в общих руководствах утверждалось все четыре языка
(С, С++, Java и Ada) равноправны, т.е. все
средства Rhapsody функционируют с проектами, реализованными на этих
языках. Выход из данной ситуации был только один – необходимо изначально
создавать и тестировать проект с генерацией кода на С, а затем выполнять
генерацию кода для Java, что мы и выполнили. Практически при
автоматическом тестировании можно получить 100% покрытие проекта:
§ покрытие модели: состояний,
переходов, операций, генерации событий;
§ покрытие кода: генерация
всех возможных комбинаций входных данных для MC/DC (покрытие условий и
ветвей).
Единственное
ограничение – время тестирования, его можно как задавать, так и прерывать
тестирование в реальном времени.
Следующим
этапом работы являлось автоматическое генерирование документации для
разрабатываемого ПО. Rhapsody позволяет генерировать документацию в нескольких
форматах: HTML, PowerPoint, RTF, DOC. В нашем случае была сгенерирована
документация в формате DOC. Генерация документации была произведена на
английском языке. Выбрать другой язык для генерации Rhapsody не предоставил.
Документация
является полной, что соответствует выбранному шаблону при генерации
документации – full documentation. На рис.3 приведен
фрагмент результата генерации полной документации для проекта Radio и
фрагмент для класса Waveband. Далее шаблон документа должен быть заполнен
контекстом, объясняющем на естественном языке значении используемых имен.
рис.3 Фрагмент
сгенерированной документации для проекта Radio и класса Waveband
В
процессе разработки «Радиоприемника» была создана 1 диаграмма прецедентов, 1
диаграмма классов, 6 диаграмм последовательностей, 1 диаграмма состояний.
Данной
системе соответствует сгенерированный исходный код 1230 строк, что в 2,5 раза
меньше, чем код более простой системы секундомера. Это результат того, что в
системе радиоприемника немного меньше диаграмм. Для диаграммы всегда генерируется
значительная часть кода, составляющая каркас. Объем сгенерированного кода
секундомера значительно больше радиоприемника. Объём документации для проекта Radio
118 страниц – это вариант полной документации для проекта. Можно задавать и
выборочные шаблоны генерации для определенного типа UML диаграмм. Генерация
документации – весьма сильная сторона рассматриваемой CASE системы. Известно, как не
любят разработчики ПО писать документацию на реализуемый проект. Здесь документ
создаётся автоматически по выбираемому стандарту или создается шаблон генерации
для нужного стандарта документации на любой стадии проекта, в любой момент. Это
с одной стороны позволяет обмениваться информацией между разработчиками, с
другой – проводить дополнительную верификацию проекта людьми. В отчете, в
частности, приводятся анимационные диаграммы последовательностей – Sequence Diagram, для различных режимов работы/настройки
«Радиоприемника».
Заключение
В
1.
Douglass B. P. Real-Time UML Workshop for Embedded Systems. – Oxford,
UK, Elsevier Inc., 2007. p.408.
2.
Зыль С.Н. Проектирование, разработка и анализ программного обеспечения
систем реального времени. – СПб.: БХВ-Петербург, 2010. 336с.
3. Rhapsody Automatic Test Generation (Rhapsody ATG). User Guide. Release
3.2. Telelogic, Massachusetts, 95p.
4.
Брукс Ф. Мифический человеко-месяц или как создаются программные
системы. Пер. с англ. – СПб.: Символ-Плюс, 2007. 304с.