Преобразование исходного кода программ

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

План

1. Преобразование исходного кода программ

2. Анализ систем

3. Совершенствование структуры программ

4. Создание программных модулей

5. Изменение данных

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

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

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

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

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

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

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

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

1. Снижение рисков. При повторной разработке ПО существуют большие риски — вы­сока вероятность ошибок в системной спецификации и возникновения проблем во время разработки системы. Реинжениринг снижает эти риски.

2. Снижение затрат. Себестоимость реинжениринга значительно ниже, чем разработ­ка нового программного обеспечения. Считается, что реинжениринг в четыре раза дешевле, чем повторная разработка системы.

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

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

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

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

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

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

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

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

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

Рис.2. Процесс реинжиниринга

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

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

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

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

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

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

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

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

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

Преобразование исходного кода программ

Самый простой способ реинжениринга программ — это автоматический перевод исход­ного кода с одного языка программирования на другой, более современный. При этом структура и организация программ остаются неизменными. Программа может переводиться как на обновленную версию исходного языка (например, с языка COBOL-74 на язык COBOL-85), так и на другой "не родственный" язык (например, с языка FORTRAN на С).

Причины перевода на другой язык могут быть следующие.

1. Обновление платформы аппаратных средств. В организации может быть принято ре­шение по изменению аппаратной платформы. Новые аппаратные средства могут не поддерживать компиляторы исходного языка программ.

2. Недостаток квалифицированного персонала. Бывает, что для сопровождения программ на исходном языке невозможно найти достаточно квалифицированный персонал, особенно это касается программ, написанных на специфических языках, давно вы­шедших из употребления.

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

4. Недостаточно средств поддержки старого ПО. Поставщик компиляторов для старого языка программирования может уйти с рынка программных продуктов или прекра­тить поддержку своего продукта.

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

Рис.4. Процесс преобразования программ

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: