И. Соммервилл - Инженерия программного обеспечения (1133538), страница 148
Текст из файла (страница 148)
Два крупных международных банка с разными базами данных клиентов решили объединиться и предоставить доступ к объединенной базе данных из всех отделений банков. Предоставьте наиболее корректное решение для изменения ПО обоих банков, обоснуйте свой выбор и опишите процесс его реализации.
27.8, Будет ли, по вашему мнению, разработчик ПО, опираясь на свой профессиональный долг, создавать программный код, удобный для сопровождения, в том случае, если это не входит в список требований заказчика ПО? Реинжениринг программного обеспечения з '.! у» ;р за Цель настоящей главы — описание процесса реинжениринга, предполагающего повышение удобства эксплуатации программных систем.
Прочитав главу, вы должны: знать, почему реинжениринг часто является наи. более выгодным решением для развития коипьютерных систем; ф~ $ иметь представление о составляющих процесса реинжениринга; понимать различие между реннлсепирингом программных систеи и изменением системных данных, а также то, почему изменение данных является дорогостоящим процессом и требует много времени.
г Я Соде жание .Ф~ 28. 1, Преобразование исходного кода программ 28.2. Анализ систем 28.3. Совершенствование структуры программ 28.4. Создание программных модулей 28.5. Изменение данных 570 Часть У11. Эволюция нрограммного обеспечения В главах 2б и 27 дано описание наследуемых систем и различных стратегий развития программного обеспечения. Напомню, что наследуемой я называю старую систему, необходимую для поддержки текущей деловой активности органиэации, которая пока не может от нее отказаться.
Организации во многом зависят от таких наследуемых систем, поэтому должны поддерживать их функционирование. В понятие эволюции наследуемой системы входят такие компоненты, как сопровождение, замена, архитектурная эволюция и реинжениринг, изучением которого мы займемся в этой главе. Реинжениринг — это повторная реализация наследуемой системы в целях повышения удобства ее эксплуатации и сопровождения.
В это понятие входят разные процессы, среди которых назовем повторное документирование системы, ее реорганизацию и реструкту. ризацию, перевод системы на один из более современных языков программирования, модификацию и модернизацию структуры и системных даннык. При этом функциональность системы и сс архитектура остаются неизменнымн. С технической точки зрения реинжениринг — это решение "второго сорта" проблемы системной эволюции.
Если тчссть, что архитектура системы не изменяется, то сделать централизованную систему распределенной представляется делом довольно сложным. Обычно нельзя изменить язык программирования старых систем на объектноориентированные языки (например, )ага или С++). Эти ограничения вводятся для сохранения архитектуры системы. Однако с коммерческой точки зрения реинжениринг часто принимается за единственный способ сохранения наследуемых систем в эксплуатации.
Другие подходы к вволю. цни системы либо слишком дорогостоящие, либо рискованные. Чтобы понять причины такой позиции, следует рассмотреть проблемы, связанные с наследуемыми системами. Код эксплуатируемых в настоящее время программных систем чрезвычайно огромен. В 1990 году Улрич (1)!г!с!ц [390) ) насчитал 120 млрд. строк исходного кода эксплуатируе.
мых в то время программ. При этом большинство программ были написаны на языке СОВО1., который л)чше всего подходит длл обработки данных в деловой сфере, и на языке ГОВТВАХ. У этих лзыков достаточно ограниченные возможности в плане структуризации программ, а РОВТВАЧ к тому же отличается ограниченной поддержкой структурирования данных. Несмотря на постоянную замену подобных систем, многие из них все еще используются. С 1990 года отмечается резкое возрастание использования вычислительной техники в деловой сфере. При грубом подсчете можно говорить о 250 млрд. строк исходного кода, которые нуждаются в сопровождении. Большинство создано отнюдь не с помощью объектно-ориентированных языков программирования, многие из них функционируют все еще на мэйнфреймах.
Программных систем настолько много. что говорить о полной замене или радикальной реструктуризации нх в большинстве организаций не приходится. Сопровождение старык систем действительно стоит дорого, однако реинжениринг может продлить время их существования. Как отмечалось в главе 26, реинжениринг систем выгоден в том случае, если система обладает определенной коммерческой ценностью, но дорога в сопровожде. ннн.
С помощью реинжениринга совершенствуется системная структура, создается новая докулгентация н облегчается сопровождение системы. По сравнению с более радикальными подходами к совершенствованию систем ренн. жен ирин г имеет два преимущества.
1. Скилсеяке расков. При повторной разработке ПО существуют большие риски — высока вероятность ошибок в системной спецификации и возникновения проблем во время разработки системы. Реинжениринг снижает эти риски. 28. Реинжениринг программного обеспечения 571 2. Сннжениезамракс Себестоимость реинжениринга значительно ниже, чем разработка нового программного обеспечения. В статье [336] приводится припер системы, эксплуатируемой в коммерческой структуре. повторная разработка которой оценивалась в 50 млн. долларов.
Для этой системы был успешно выполнен реинжениринг стоимостью всего 12 млн. долларов, Приведенные цифры типичны: считается, что реинжениринг в четыре раза дешевле, чем повторная разработка системы. Реинжениринг ПО тесно связан с реинженирингом деловых процессов [153, 9э]. Последний означает преобразование бизнес-процессов для снижения количества излишних видов деятельности и повышения эффективности делового процесса. Обычно рсинжени.
ринг бизнес-процессов предполагает внедрение новых программ для поддержки деловых процессов или модификацию существующих программ, при этом наследуемые системы существенно зависят от делового процесса. Такую зависимость следует выявлять как люжно раньше н устранять, прежде чем начнется планирование каких-либо изменений в самом бизнес-процессе. Поэтому решение о реинжениринге ПО может возникнуть, если паоле. дуемую систему не удается адаптировать к новым деловым процессам путем изменений в обычном сопровождении системы.
Основное различие между реинженирингом и новой разработкой системы связано со стартовой точкой начала работы над системой. При реинжениринге вместо написания системной спецификации "с нуля" старая система служит основоИ для разработки спецификации новой системы. В статье [72] традиционная разработка ПО названа разрайлякой вперед (Гопеап[ епйтпеег[пб), чтобы подчеркнуть различие между пей и реиижсниринголт. Это различие проиллюстрировано па рис, 28.1. Традиционная разработка начинается с этапа создания системной спецификации, за которой следует проектирование и реализация новой системы. Реинжениринг основывается на существующей системе, которая раз.
работчиками изучается и прсобразуетсл в нов[ю. Нови скотине Традициоввея рззработга 00 Система восле реинжениринги Реинжениринг 00 уттс. 23.1. Т]атдккиеяяпяйлз(мбеэжл кускижепийилг]УО На рис. 28.2 показан возможный процесс реинжениринга. В начале этого процесса имеем наследуемую систему, а в результате — структурированную и заново скомпопоеанную версию той же системы.
Перечислни основные этапы этого процесса. 1. Перевод кстодяоге кодл. Конвертирование программы со старого языка программи- рования на современную версию того жс языка либо на другой язык. 2. Лклекз тфаграитс Документирование структуры и функциональных вазможностей программ на основе их анализа. 3.
Модификация сэчтукэбутм яротуэоис Анализируется н модифнцирустсл управляющая структтра программ с целью сделать их более простыми и понятными. 572 Часть 7П. Эволвоцня про;:граммного обеспечения 4. Рлгбигииг на модули. Взаимосвязанные части программ группируются в модули; там, где возможно, устраняется избыточность. В некоторых случаях изменяется структура системы.
5. Иэмгигииг пмтемимх денных. Данные, с которыми работает программа, изменяются с тем, чтобы соответствовать нововведениям. Рис 28.2. Процггг рги нзггиириигп Автоматизированная рвстрфпурюзцю врогрвии Рвструпурюнтю ярмрвыэ и двнимх Автеппеираю ннов ареогзхповаэив исходного юда Мвтеапюировввея рвстрроурюзюе с руеми вквиниви ивяаегий Рестррптрюзцхв и язмвивкия в зрите птре системы Риг. 2В.З.
Стоииогэгь Рви нхгиири иге При реинжениринге программ необязательно проходить все стадии, показанные на рис. 28,2. Например, не всегда нужно переводить исходный код, если язык программирования, на котором написана програима, все еще поддерживается разработчиком компилятора. Если реинжениринг' прйводится с помощью автоматизированных средств, то не обязательно восстанавливать документацию на программу. Изменение системных данных необходимо, если в результате реинжениринга изменяется их структура. Однако реструктуризация данных в процессе реинжениринга требуется всегда. Стоимость реинжениринга обычно определяется объемом выполненных работ.
На рис. 28З показано несколько различных подходов к процессу реинжениринга и динамика изменения стоимости работ для этих подходов. 28. Реинжениринг программного обеспечения 373 Кроме объема выполняемых работ, есть и др)тне факторы, обусловливающие стоиМость реинжениринга. 1.
Качество лрограмчноео одесгичичгия, кожорое лодверглевил рви лжелирилпг. Чем и ижс качество программ и их документации (если она есть в наличии), тем выше стоимость реинжениринга. 2. Наличие средсогв лоддерэгки процесса реилжеиирилга Обычно реинжениринг экономически выгоден. если применяются СА5Е.средства для автоматизированного внесе. ния изменений в программы. 3. Ойеи леобходииого лРеоб)гаговалил далнмх Стоимость процесса реинжениринга воэ. растет при увеличении объема преобразуемых данных. 4. Нагичие леодходиимх слегпимштлов. Если персонал, который занимается сопровождением сггстемы, нс может выполнить реинжениринг, это также может стать причиной повышения стоимости процесса.
Вновь привлеченные специалисты потратят много времени на изучение системы. Основным недостатком реинжениринга принято считать то, что с его помощью сис. тему можно улучшить только до определенной степени. Например, с помощью реинжениринга невозможно функционально. ориентированную систему сделать объектно-ориентированной. Основные архнтекгурные изменения или полную реструктуризацию программ невозможно выполнить автоматически, что также увеличивает стоимость реинжениринга. И, несмотря на то что реинжениринг поможет улучшить сопровождение системы, все равно она будет намного хуже в сопровождении, чем новая, созданная с помощью соврелгенных истодов инженерии ПО. 28.1.