Другие журналы
|
научное издание МГТУ им. Н.Э. БауманаНАУКА и ОБРАЗОВАНИЕИздатель ФГБОУ ВПО "МГТУ им. Н.Э. Баумана". Эл № ФС 77 - 48211. ISSN 1994-0408![]()
Системный анализ и реинжиниринг унаследованного программного обеспечения
# 04, апрель 2011
Файл статьи:
![]() УДК 519.685 Иркутск, Институт систем энергетики им. Л.А. Мелентьева (ИСЭМ) СО РАН Введение. Проблемы анализа и реинжиниринга унаследованного программного обеспечения исследовались авторами на примере программных комплексов для исследования и поддержки принятия решений в энергетике. Программное обеспечение этой отрасли, созданное в нашей стране преимущественно в период бурного развития отрасли энергетики и появления массовых и промышленных компьютеров на рубеже 1980-1990-х гг., не может эффективно использоваться на современных компьютерах и в современных операционных средах, хотя и представляет большую интеллектуальную ценность. Такая ситуация характерна не только для энергетики, поэтому авторы считают, что предлагаемый ими подход может быть полезен и для других предметных областей, где возникают подобные проблемы. Многие программные системы создавались с расчетом на системное окружение, которое с течением времени изменилось и эти программные системы устарели. Другие программные системы в процессе поддержки подверглись таким изменениям, что дальнейшее их развитие стало невозможным из-за крайне сложной и запутанной архитектуры. Третьи программные системы изначально создавались без учета тенденций развития информационных технологий и к моменту своего появления уже содержали устаревшие решения. Подобные программные системы называют «унаследованными программными системами» или просто «унаследованными системами». Существуют подходы к реинжинирингу таких систем, но, поскольку каждый программный комплекс по-своему уникален, найти автоматизированное решение задачи не удается. Важным этапом в реинжиниринге унаследованного программного обеспечения является анализ, на основе которого принимаются решения о стратегии реинжиниринга. В статье рассматривается предлагаемый авторами метод анализа, который поддержан авторской экспертной системой Expasy. Унаследованное программное обеспечение. Унаследованные системы (legacysystems) – это системы, по тем или иным причинам переставшие удовлетворять изменившимся потребностям применений, которые, тем не менее, продолжают использоваться ввиду больших затруднений, возникающих при попытке их замены [1]. В [2, 3] дано описание унаследованных систем через присущие им свойства. Унаследованными системами могут быть:
Хотя впервые эти свойства унаследованных систем были описаны в 1998 году, уже сейчас можно указать дополнительные признаки, которые характерны для унаследованных систем нашего времени. Унаследованные системы используют морально устаревшие технологии, архитектуры, платформы, а также собственно программное и информационное обеспечение. При проектировании таких систем, как правило, не предусматриваются должные меры для их пошаговой миграции в новые системы. Для таких систем характерны монолитность и закрытость. До последнего времени практически любая система после создания противодействовала изменениям и имела тенденцию быстрого превращения в бремя организации, потому что при ее разработке использовались «устаревшие» технологии, архитектуры, платформы. Считается, что унаследованная система потенциально проблематична по следующим причинам:
Анализ унаследованного программного обеспечения. Для применения метода системного анализа унаследованной программной системы в первую очередь необходимо убедиться, что унаследованное программное обеспечение обладает свойствами системы, а также определить метод декомпозиции и критерии оценки характеристик унаследованной системы для последующего анализа. Работы по анализу программных систем начали появляться с момента усложнения технологии программирования и перехода к использованию языков высокого уровня. Классические методы анализа программных систем описаны в [4, 5], дальнейшее продолжение предложенные методы получили в работах [6-8]. Отечественная наука достаточно давно обратилась к системному анализу программного обеспечения. Первые работы по анализу программ появились, благодаря разработке сложных пакетов программ [9, 10]. Глубокий системный анализ программного обеспечения дается также в работе [11]. В то же время, несмотря на то, что анализу программного обеспечения посвящено много работ, практически отсутствуют методы системного анализа унаследованного программного обеспечения с целью последующего реинжиниринга. Основная направленность существующих методов заключается в способах разработки программного обеспечения, а также в методах оценки трудоемкости этих разработок, в то время как для решения проблемы унаследованного программного обеспечения в первую очередь важен анализ уже существующих программ. Опираясь на приведенные выше работы, авторы предлагают метод анализа унаследованного программного обеспечения, основанный на декомпозиции программ на программные модули, количественном анализе модулей и структурном анализе полученной модели. Декомпозиция унаследованных систем может выполняться на различных уровнях абстракции. Существует общепринятый вид абстракции программных систем, в разных источниках обозначаемый как структура или архитектура программного обеспечения (системы). Архитектура программного обеспечения – это первичная организация системы, сформированная ее компонентами, отношениями между компонентами и внешней средой системы, а также принципами, определяющими дизайн и эволюцию системы [12]. Структура программы – определение всех модулей программы, их иерархий и сопряжений между ними [13]. Уровень абстракции определяется степенью детализации описания модулей программы. Программный модуль – это выделенная по тем или иным мотивам часть первичного материала программного фонда [11], а также любой фрагмент описания процесса, оформляемый как самостоятельный программный продукт, пригодный для использования в описаниях процесса [14]. Иными словами, модуль – это замкнутая программа, которую можно вызвать из любого другого модуля программы и можно отдельно компилировать. Таким образом, можно называть модулем унаследованной системы на высшем уровне абстракции программу из пакета, составляющего унаследованную систему или отдельную процедуру или функцию (в терминах языка С) на низшем уровне абстракции. Целесообразно выделить три уровня абстракции структуры программных комплексов: модули – исполняемые файлы системы, динамические библиотеки, СУБД, файлы данных; модули – объектные файлы системы; модули – функции, память. Вне зависимости от уровня абстракции в описании структуры унаследованной системы модуль обладает тремя основными атрибутами: 1) выполняет одну или несколько функций; 2) обладает некоторой логикой; 3) используется в одном или нескольких контекстах. Функция модуля – это внешнее описание поведения модуля. Функция описывает, что делает модуль при обращении, но не раскрывает внутреннее устройство модуля. Логика модуля – это описание внутреннего поведения модуля при выполнении. Контекст модуля – это описание конкретного применения модуля. Модуль может выполнять несколько функций, иметь различную логику поведения, а также использоваться в нескольких контекстах в рамках унаследованной системы. Определим критерии оценки модулей. Впервые критерии для оценки модуля были предложены Хольтом [6]: хороший модуль снаружи проще, чем внутри; хороший модуль проще использовать, чем построить. Однако очевидно, что эти критерии не удовлетворяют принципу количественной оценки модуля и пригодны лишь как общие рекомендации при создании модульной программы. С позиции системного анализа унаследованных систем больше подходят оценки, предложенные Г. Майерсом в [13], так для оценки программного модуля по Майерсу используются следующие характеристики: размер модуля; прочность модуля; сцепление с другими модулями; рутинность модуля (независимость от предыстории обращений к нему); объем доступа к данным. Размер модуля измеряется числом содержащихся в нем операторов или строк кода. Прочность (связность) модуля – это мера его внутренних связей [15-17]. Чем выше прочность модуля, тем больше связей он может спрятать от внешней по отношению к нему части программы и, следовательно, тем больший вклад в упрощение программы он может внести. Для оценки степени прочности модуля или силы связности (СС) применяется упорядоченный набор из семи классов.
Можно предложить, с учетом [18], следующий алгоритм определения степени прочности модуля.
Возможны случаи, когда с модулем ассоциируются несколько степеней прочности. В этих случаях обычно модулю присваивают наибольшую степень прочности. Сцепление модуля – это мера его зависимости по данным от других модулей. Характеризуется способом передачи данных. Чем слабее сцепление модуля с другими модулями, тем сильнее его независимость от других модулей. Для оценки степени сцепления (СЦ) применяется упорядоченный набор из шести видов сцепления модулей [15].
Модули могут быть сцеплены несколькими видами сцепления, в таком случае для оценки выбирается сильнейшее из всех. Высокая прочность и слабое сцепление способствуют независимости модулей, поскольку они сводят к минимуму их взаимодействие. Рутинность модуля – это его независимость от предыстории обращений к нему. Модуль называется рутинным, если результат (эффект) обращения к нему зависит только от значений его параметров (и не зависит от предыстории обращений к нему). Модуль называется зависящим от предыстории, если результат (эффект) обращения к нему зависит от внутреннего состояния этого модуля, изменяемого в результате предыдущих обращений к нему. Размер модуля – LOC (LinesofCode) – означает количество строк исходного кода модуля, эта метрика отражает трудозатраты, которые потребовались для создания этого модуля и, соответственно, трудозатраты, необходимые для понимания и переработки модуля. Несмотря на то, что указанные характеристики достаточно полно описывают программные модули, для анализа программного обеспечения научных исследований их может оказаться недостаточно, поэтому предлагается добавить еще одну метрику, предложенную МакКейбом – цикломатическую сложность модуля, которая равна цикломатическому числу потокового графа модуля, уменьшенному на единицу, другими словами – цикломатическая сложность равна количеству условных операторов и операторов ветвления в модуле. Между размером модуля и сложностью можно установить связь. Так, Хольстед в [19] вводит новую метрику – объем модуля V = N log 2 n, N– общее число всех идентификаторов, а n– число различных идентификаторов. Однако полученная метрика не в полной мере отражает размер и сложность модуля, поэтому применять её следует с осторожностью. Таким образом, модель модуля может быть представлена следующей кортежной записью:
где R – размер модуля, LOC-оценка, S – сложность модуля по МакКэйбу, P – прочность модуля, сила связности по Майерсу, Операция упрощения структурной модели программной системы – композиция модулей: Операция детализации структурной модели – декомпозиция модулей – выполняется по алгоритму определения характеристик итоговых модулей. Для наглядного представления структурной модели предлагается использовать CASE-нотацию. Каждый модуль изображается в виде бокса со следующими полями: название модуля, размер, сложность, прочность, логика. Связи между модулями изображаются направленной стрелкой, означающей зависимость между модулями, стрелка маркируется числом, означающим силу связности между модулями. Рутинность модуля обозначается пунктирной границей бокса. Методика и инструментальная поддержка реинжиниринга. Опираясь на изложенный выше метод анализа унаследованного программного обеспечения, авторы предлагают методику реинжиниринга, которая в общем виде представлена на рис. 1 [20]. Систематический анализ реинжиниринга проводится над унаследованной системой до тех пор, пока «оценка попытки» (рис. 2) не выдаст такие альтернативы, что на шаге «анализ решения» (рис. 3) не будет выбрана одна из альтернатив: поддержка текущего состояния унаследованной системы или разработка новой системы. На основе предложенного метода анализа, разработанной методики реинжиниринга и опыта их применения для реинжиниринга ряда программных комплексов совместно с коллегами из лаборатории «Информационные технологии в энергетике», возглавляемой Л.В. Массель, разработана экспертная система поддержки реинжиниринга Expacy. Экспертная система Expacy на основе полученных от пользователя знаний об унаследованной системе и пожеланий к требуемой системе, применяя правила вывода из собственной базы знаний, выстраивает конкретные стратегии реинжиниринга нализируемого унаследованного программного обеспечения. Экспертная система разработана с использованием языка и оболочки CLIPS. База знаний построена на основе исследования результатов опроса экспертов и программистов, занимающихся проблемами унаследованного программного обеспечения. Рис. 1. Структура реинжиниринга
Рис. 2. Оценка попытки реинжиниринга
Рис. 3. Анализ решения
Для дальнейшего проведения реинжиниринга может быть использован один из инструментальных инструментов реинжиниринга для работы с исходным кодом унаследованных систем, например, Undestand(www.scitools.com) или Doxigen. Первая предоставляет больше функций по работе с исходным кодом, вторая предпочтительнее из-за своего свободного распространения. Заключение. Предложенные метод анализа унаследованного программного обеспечения и экспертная система Expacyприменялись в ИСЭМ СО РАН для реинжиниринга пакета прикладных программ OPTCONи программного комплекса ИНТЭК для исследований направлений развития топливно-энергетического комплекса страны с учетом требований энергетической безопасности, а также для анализа программного комплекса ГАРМОНИКИ для расчета, анализа и исследования свойств режимов высших гармоник и программно-вычислительного комплекса «Янтарь» для оценки надежности электроэнергетических систем. В ходе анализа были установлены недостатки архитектуры, которые препятствуют реинжинирингу этих программных комплексов. Так, для ПК «Янтарь» были определены модули, обладающие слабой степенью прочности, большой силой сцепления, разнообразной внутренней логикой. ППП OPTCONв результате анализа был подвергнут переработке с целью улучшения структуры программы и в виде обновленного программного пакета послужил ядром вычислительного сервера для решения задачи оптимального управления OPTCON[21]. Результаты, описанные в статье, получены при частичной финансовой поддержке грантов РФФИ ╧10-07-00264 и ╧11-07-00192, а также гранта Программы Президиума РАН ╧2.29.
Литература
Публикации с ключевыми словами: реинжениринг, системный анализ, унаследованное программное обеспечение, анализ программ Публикации со словами: реинжениринг, системный анализ, унаследованное программное обеспечение, анализ программ Смотри также: Тематические рубрики: Поделиться:
|
|
||||||||||||||||||||||||||||||||
|