| Назад в раздел
 
 Опыт реинжиниринга объектно- ориентированного комплекса программ с применением CASE- средства RationОпыт реинжиниринга объектно-
ориентированного комплекса программ с применением CASE-
средства Rational Rose и SILVERRUN 
Ю.Новоженов, Компания Аргуссофт
Мировая практика разработки сложных программных комплексов показывает, что обычно такие 
системы имеют предысторию в виде совокупности программ, которые частично или полностью 
реализуют требования к системе. Для их развития и дальнейшего сопровождения такой системы 
именно в силу ее сложности требуется создание совокупности моделей, представляющих в 
графическом виде разные аспекты системы и отражающих иерархию ее построения. В особенности это 
касается систем, предыстория которых в той или иной мере основана на применении объектно-
ориентированного подхода.Для создания подобных моделей современные инструментальные средства включают специальные 
средства реинжиниринга, позволяющие восстановить отдельные модели по исходным текстам 
программ.
 Исходные предпосылки для проведения реинжиниринга состоят в следующем.
 Имеется реализованная и оттестированная информационная система.
Имеется определенный перечень задач, которые решает система.
Имеются тексты программ, решающих эти задачи, на некотором языке (языках) 
программирования.
Отдельно от системы может существовать документ, в котором заказчик декларирует, что в 
системе должно быть добавлено или изменено.
Построение модели системы включает решение следующих задач:
Создание описания архитектуры. Архитектура описывается в виде иерархии категорий 
классов, соответствующей разным уровням абстракции. В дальнейшем предполагается взаимно 
однозначное соответствие между понятиями "категория классов" и "подсистема". Каждой категории 
должен соответствовать каталог на внешнем устройстве, а иерархии категорий - иерархия каталогов.
Логическое моделирование. Строятся диаграммы классов, где показываются классы и отношения 
между ними.
Построение функциональной модели системы. Решение этой задачи предполагает описание 
поведения системы в виде иерархии диаграмм сценариев.
Динамическое моделирование. Динамика работы системы описывается с помощью диаграмм 
состояний для управляющих классов.
Реинжиниринг базы данных системы с построением ER-диаграмм.
Порядок решения этих задач принципиально отличается от порядка действий, выполняемых при 
разработке новых проектов. Архитектура и логическое описание системы могут быть автоматически 
получены с помощью реинжиниринга текстов программ и построения диаграмм классов CASE-
системой. Таким образом, не функциональное описание системы служит основой для выявления 
классов и отношений между ними, а наоборот, предварительно полученные диаграммы классов 
наряду с программными кодами служат для описания поведения системы и динамики ее работы.
 Примером инструментального средства, реализующего объектно-ориентированный подход к 
разработке программных систем, является семейство CASE-систем Rational Rose фирмы Rational 
Software Corporation.
 Системы, входящие в состав этого семейства, предназначаются для автоматизации этапов анализа и 
проектирования, а также для генерации кодов на различных языках и выпуска проектной 
документации. Все CASE-средства, входящие в состав Rational Rose, используют методы Гради Буча 
(он является научным руководителем разработок) и ОМТ Джеймса Рамбо, поддерживая единый 
графический интерфейс с пользователем. Различия между этими системами минимальны и 
определяются языками, на которых генерируются коды программ.
 В составе Rational Rose можно выделить 6 основных структурных компонент:  репозиторий, 
графический интерфейс пользователя (GUI), средства  просмотра проекта (browser),  средства 
контроля проекта, средства сбора статистики и генератор документов.  Все перечисленные  
компоненты  являются общими для всех систем семейства.  К ним следует добавить генератор кодов - 
индивидуальный для каждой  системы - и анализатор - отдельный программный модуль, 
обеспечивающий реинжиниринг.
 Репозиторий представляет собой объектно-ориентированную базу данных. Средства просмотра 
обеспечивают "навигацию" по проекту, в том числе,  перемещение вверх/вниз по иерархиям классов  и  
подсистем, переключение  из  одного  вида диаграмм к другому и т. д.  Средства контроля и сбора 
статистики дают возможность находить  и устранять ошибки по мере развития проекта,  а не после 
завершения его описания. Генератор отчетов формирует тексты выходных документов на основе 
содержащейся в репозитории информации.
 Rational Rose включает средства  автоматической генерации кодов программ на языках третьего и 
четвертого поколений. Используя информацию, содержащуюся в логической и физической моделях 
проекта, генератор кодов формирует файлы  заголовков и файлы описаний классов и объектов. 
Создаваемый таким образом скелет программы может быть  уточнен  путем  прямого 
программирования.
 Анализатор кодов создает модели проектов на основе  информации, содержащейся в  определяемых 
пользователем исходных текстах программ.  В процессе работы  анализатор  осуществляет  контроль  
правильности  исходных текстов и диагностику ошибок.  Модель, полученная в результате его работы, 
может целиком или фрагментарно использоваться в различных проектах. Таким образом 
обеспечивается возможность повторного использования программных компонент.
 В основе работы Rational Rose лежит построение различного рода  диаграмм и спецификаций,  
определяющих логическую и физическую структуры модели, ее статические и динамические аспекты. 
Диаграммы классов показывают классы и их иерархии, отображая логику построения прикладной 
системы. Для больших систем обычно строится не одна а  несколько  подобных  диаграмм.  
Диаграмма  классов определяет только статические аспекты, относящиеся к классам. Динамика их 
поведения представляется на диаграммах состояний. Диаграммы сценариев показывают 
существующие объекты и их взаимодействие в  логическом  проекте  прикладной  системы.  
Модульные диаграммы определяют распределение классов и объектов в модулях,  физически 
реализующих проект.  Одна  модульная  диаграмма представляет всю или часть модульной 
архитектуры системы.  Для решения задачи распределения аппаратных  ресурсов  в Rational Rose 
используются диаграммы процессов.
 Не вся  необходимая  информация о проекте может быть наглядно отражена в диаграммах,  поэтому 
Rational  Rose  содержит  средства ввода спецификаций, которые дополняют набор диаграмм. 
Спецификации создаются для классов,  класс-утилит,  операций, подсистем, объектов,  модулей  и  т. 
д.
 Основные свойства  Rational  Rose,  обеспечивающие ее высокую конкурентоспособность на мировом 
рынке программных средств:
 охват  всех  этапов жизненного цикла работы над проектом с единой 
методикой и нотацией; 
   возможность  повторного использования программных разработок 
пользователей за счет средств реинжиниринга; 
   наличие средств автоматического контроля, позволяющих вести отладку 
проекта по мере его разработки; 
   возможность описания проекта на разных уровнях для различных категорий 
пользователей; 
   удобный для пользователя графический интерфейс; 
   автоматическая генерация кодов на языках С++, Ada, Smalltalk, PowerBuilder, 
SQLWindows, VisualBasic; 
   наличие средств групповой разработки; 
   широкий спектр применения системы - базы данных, банковские системы, 
телекоммуникация, системы реального времени и т. д. 
   возможность использования различных  платформ:  IBM PC (в среде 
Windows),  Sun SPARC Stations (Solaris, SunOS), Hewlett-Packard (HP UX), IBM 
RS/6000 (AIX). 
Система Rational  Rose/С++ была применена для реинжиниринга банковской информационной 
системы, применяемой в системе ЦБ РФ. Это - сложная система с полной предысторией, содержащая 
системные библиотеки и приложения. Работа выполнялась на платформе Windows '95 (компьютере 
P/100 с 16 MB оперативной памяти). Реинжиниринг приложений, содержащих свыше 500 классов, 
выполнялся около 25 часов.
 Отдельно на той же платформе был выполнен реинжиниринг базы данных системы с помощью CASE-
средства SILVERRUN. За время порядка 5 минут была построена ER-модель базы данных, 
содержащей около 200 таблиц.
 Результаты можно сформулировать следующим образом:
 Система Rational  Rose/С++ обеспечивает реинжиниринг сложных информационных систем 
на базе весьма ограниченных ресурсов.
CASE-средство SILVERRUN обеспечивает реинжиниринг сложных баз данных за минимальное 
время.
Восстановлена архитектура системы в виде иерархии категорий классов.
Получена логическая модель системы в виде совокупности диаграмм и спецификаций классов.
Построена физическая модель системы в виде диаграмм подсистем и модулей.
Анализ результатов реинжиниринга позволил определить наиболее существенные недостатки 
существующего комплекса программ и пути их исправления. Вот несколько примеров.
   В рамках проекта определены общие классы, которые отдельными 
разработчиками могут переопределяться. При этом каждый разработчик имеет 
право создавать новый класс с тем же именем, что и общий класс, в своем 
каталоге. В результате дублируется код, изменения, вносимые в общие классы, 
нужно повторять в каталоге разработчика, возникает путаница с именами 
классов, что особенно неудобно при построении и анализе модели. Объектно-
ориентированный подход предлагает простой и естественный путь исправления 
таких ситуаций - применение механизма наследования. Разработчики должны не 
дублировать общий класс, а заводить класс-наследник (с оригинальным 
именем). 
   В системе представлены несколько разных проектов, причем в проекте могут 
использоваться классы из других проектов путем указания доступа к 
соответствующим программным модулям. Это плохо, так как класс в проекте-
владельце может быть изменен, а в других это не требуется, что может 
приводить к совершенно непредсказуемым ошибкам, которые могут возникать 
даже без изменений исходных кодов, а просто при повторном конфигурировании 
системы. Нужно сформировать библиотеку классов, представляющих типовые 
проектные решения, куда следует занести все классы, которые разделяются 
между разными проектами. Эти классы изменять не следует, а при 
необходимости внесения изменений или уточнений в проекте заводится класс-
наследник. 
   Реинжиниринг и анализ отдельных приложений показал, что есть много 
классов, которые не связаны отношениями с другими классами. Причина состоит 
в том, что не выдержан объектно-ориентированный стиль программирования. В 
приложениях есть достаточно сложные функции на С (например, main), которые 
исполняют роли управляющих классов. Такое положение дел не отвечает задаче 
сопровождения, поскольку большое число фактических связей, имеющихся в 
системе, в модели будет отсутствовать. В результате прослеживание  и 
локализация ошибок будет затруднена. Выход из этой ситуации очевиден. 
Следует полностью использовать объектно-ориентированные возможности С++, 
создавая управляющие классы и минимизируя использование функций на 
С.
Построенные диаграммы классов и модулей являются основой для разработки полной модели системы 
путем дополнения их диаграммами состояний и взаимодействий, которые создаются с помощью того 
же CASE-средства.
 
 |