Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КЛ_ЭПИ.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
2 Mб
Скачать

5.3. Реинжениринг программного обеспечения

Реинжениринг — это повторная реализация наследуемой системы в целях повышения удобства ее эксплуатации и сопровождения. В это понятие входят разные процессы, среди которых назовем повторное документирование системы, ее реорганизацию и реструктуризацию, перевод системы на один из более современных языков программирования, модификацию и модернизацию структуры и системных данных. При этом функциональность системы и ее архитектура остаются неизменными.

С технической точки зрения реинжениринг — это решение “второго сорта” проблемы системной эволюции. Если учесть, что архитектура системы не изменяется, то сделать централизованную систему распределенной представляется делом довольно сложным. Обычно нельзя изменить язык программирования старых систем на объектно- ориентированные языки (например, Java или C++). Эти ограничения вводятся для сохранения архитектуры системы.

Однако с коммерческой точки зрения реинжениринг часто принимается за единственный способ сохранения наследуемых систем в эксплуатации. Другие подходы к эволюции системы либо слишком дорогостоящие, либо рискованные. Чтобы понять причины такой позиции, следует рассмотреть проблемы, связанные с наследуемыми системами.

Код эксплуатируемых в настоящее время программных систем чрезвычайно огромен. В 1990 году Улрич (Ulrich, [336]) насчитал 120 млрд. строк исходного кода эксплуатируемых в то время программ. При этом большинство программ были написаны на языке COBOL, который лучше всего подходит для обработки данных в деловой сфере, и на языке FORTRAN. У этих языков достаточно ограниченные возможности в плане структуризации программ, a FORTRAN к тому же отличается ограниченной поддержкой структурирования данных.

Несмотря на постоянную замену подобных систем, многие из них все еще используются. С 1990 года отмечается резкое возрастание использования вычислительной техники в деловой сфере. При грубом подсчете можно говорить о 250 млрд. строк исходного кода, которые нуждаются в сопровождении. Большинство создано отнюдь не с помощью объектно-ориентированных языков программирования, многие из них функционируют все еще на мэйнфреймах.

Программных систем настолько много, что говорить о полной замене или радикальной реструктуризации их в большинстве организаций не приходится. Сопровождение старых систем действительно стоит дорого, однако реинжениринг может продлить время их существования. Как отмечалось в главе 26, реинжениринг систем выгоден в том случае, если система обладает определенной коммерческой ценностью, но дорога в сопровождении. С помощью реинженнринга совершенствуется системная структура, создается новая документация и облегчается сопровождение системы.

По сравнению с более радикальными подходами к совершенствованию систем реинжениринг имеет два преимущества.

  1. Снижение затрат. Себестоимость реинжениринг» значительно ниже, чем разработка нового программного обеспечения. В статье [336] приводится пример системы, эксплуатируемой в коммерческой структуре, повторная разработка которой оценивалась в 50 млн. долларов. Для этой системы был успешно выполнен реинжениринг стоимостью всего 12 млн. долларов. Приведенные цифры типичны: считается, что реинжениринг в четыре раза дешевле, чем повторная разработка системы.

Реинжениринг ПО тесно связан с реинженирингом деловых процессов [153, 9*]. Последний означает преобразование бизнес-процессов для снижсння количества излишних видов деятельности и повышения эффективности делового процесса. Обычно реинжениринг бизнес-процессов предполагает внедрение новых программ для поддержки деловых процессов или модификацию существующих программ, при этом наследуемые системы существенно зависят от делового процесса. Такую зависимость следует выявлять как можно раньше и устранять, прежде чем начнется планирование каких-либо изменений в самом бизнес-процессе. Поэтому решение о реинжениринге ПО может возникнуть, если наследуемую систему не удается адаптировать к новым деловым процессам путем изменений в обычном сопровождении системы.

Основное различие между реинженирингом и новой разработкой системы связано со стартовой точкой начала работы над системой. При реинжениринге вместо написания системной спецификации “с нуля” старая система служит основой для разработки спецификации новой системы. В статье [72J традиционная разработка ПО названа разработкой вперед (forward engineering), чтобы подчеркнуть различие между пей и реинженирингом. Это различие проиллюстрировано па рис. 28.1. Традиционная разработка начинается с этапа создания системной спецификации, за которой следует проектирование и реализация новой системы. Реинжениринг основывается на существующей системе, которая разработчиками изучается и преобразуется в новую.

Рис. 28.1. Традиционная разработка и рсинжепиринг ПО

На рис. 28.2 показан возможный процесс реинжениринга. В начале этого процесса имеем наследуемую систему, а в результате — структурированную и заново скомпонованную версию той же системы. Перечислим основные этапы этого процесса.

  1. Перевод исходного кода. Конвертирование программы со старого языка программирования на современную версию того же языка либо на другой язык.

  2. Анализ программ. Документирование структуры и функциональных возможностей программ на основе их анализа.

  3. Модификация структуры программ. Анализируется и модифицируется управляющая структура программ с целью сделать их более простыми и понятными.

  4. Разбиение на модули. Взаимосвязанные части программ группируются в модули; там, где возможно, устраняется избыточность. В некоторых случаях изменяется структура системы.

  5. Изменение системных данных. Данные, с которыми работает программа, изменяются с тем, чтобы соответствовать нововведениям.

При реинжениринге программ необязательно проходить все стадии, показанные на рис. 28.2. Например, не всегда нужно переводить исходный код, если язык программирования, на котором написана Программа, все еще поддерживается разработчиком компилятора. Если реинженирИнГ’Проводится с помощью автоматизированных средств, то не обязательно восстанавливать документацию на программу. Изменение системных данных необходимо, если в результате реинжениринга изменяется их структура. Однако реструктуризация данных в процессе реинжениринга требуется всегда.

Стоимость реинжениринга обычно определяется объемом выполненных работ. На рис. 28.3 показано несколько различных подходов к процессу реинжениринга и динамика изменения стоимости работ для этих подходов.

Рис. 28.3. Стоимость реинжениринга

Кроме объема выполняемых работ, есть и другие факторы, обусловливающие стоимость реинжениринга.

  1. Качество программного обеспечения, которое подвергается реинженирингу. Чем ниже качество программ и их документации (если она есть в наличии), тем выше стоимость реинжениринга.

  2. Наличие средств поддержки процесса реинжениринга. Обычно реинжениринг экономически выгоден, если применяются CASE-средства для автоматизированного внесения изменений в программы.

  3. Объем необходимого преобразования данных. Стоимость процесса реинжениринга возрастет при увеличении объема преобразуемых данных.

  4. Наличие необходимых специалистов. Если персонал, который занимается сопровождением системы, не может выполнить реинжениринг, это также может стать причиной повышения стоимости процесса. Вновь привлеченные специалисты потратят много времени на изучение системы.

Основным недостатком реинжениринга принято считать то, что с его помощью систему можно улучшить только до определенной степени. Например, с помощью реинжениринга невозможно функционально-ориентированную систему сделать объектно-ориентированной. Основные архитектурные изменения или полную реструктуризацию программ невозможно выполнить автоматически, что также увеличивает стоимость реинже- нирипга. И, несмотря на то что реинжениринг поможет улучшить сопровождение системы, все равно она будет намного хуже в сопровождении, чем новая, созданная с помощью современных методов инженерии ПО.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]